-
Notifications
You must be signed in to change notification settings - Fork 1
/
FirmamentBundle.min.js
539 lines (536 loc) · 246 KB
/
FirmamentBundle.min.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
/* Firmament HTML 5 Game Engine
Copyright (C) 2011 Jordan CM Wambaugh [email protected] http://firmament.wambaugh.org
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* This software contains source code from Box2D, which is available under the following license:
* Box2D
* Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
var Box2D={};
(function(a,b){function f(){}if(!(Object.prototype.defineProperty instanceof Function)&&Object.prototype.__defineGetter__ instanceof Function&&Object.prototype.__defineSetter__ instanceof Function)Object.defineProperty=function(a,b,d){d.get instanceof Function&&a.__defineGetter__(b,d.get);d.set instanceof Function&&a.__defineSetter__(b,d.set)};a.inherit=function(a,b){f.prototype=b.prototype;a.prototype=new f;a.prototype.constructor=a};a.generateCallback=function(a,b){return function(){b.apply(a,arguments)}};
a.NVector=function(a){a===b&&(a=0);for(var k=Array(a||0),d=0;d<a;++d)k[d]=0;return k};a.is=function(a,k){return a===null?false:k instanceof Function&&a instanceof k?true:a.constructor.__implements!=b&&a.constructor.__implements[k]?true:false};a.parseUInt=function(a){return Math.abs(parseInt(a))}})(Box2D);var Vector=Array,Vector_a2j_Number=Box2D.NVector;typeof Box2D==="undefined"&&(Box2D={});if(typeof Box2D.Collision==="undefined")Box2D.Collision={};
if(typeof Box2D.Collision.Shapes==="undefined")Box2D.Collision.Shapes={};if(typeof Box2D.Common==="undefined")Box2D.Common={};if(typeof Box2D.Common.Math==="undefined")Box2D.Common.Math={};if(typeof Box2D.Dynamics==="undefined")Box2D.Dynamics={};if(typeof Box2D.Dynamics.Contacts==="undefined")Box2D.Dynamics.Contacts={};if(typeof Box2D.Dynamics.Controllers==="undefined")Box2D.Dynamics.Controllers={};if(typeof Box2D.Dynamics.Joints==="undefined")Box2D.Dynamics.Joints={};
(function(){function a(){a.b2AABB.apply(this,arguments)}function b(){b.b2Bound.apply(this,arguments)}function f(){f.b2BoundValues.apply(this,arguments);this.constructor===f&&this.b2BoundValues.apply(this,arguments)}function g(){g.b2Collision.apply(this,arguments)}function k(){k.b2ContactID.apply(this,arguments);this.constructor===k&&this.b2ContactID.apply(this,arguments)}function d(){d.b2ContactPoint.apply(this,arguments)}function q(){q.b2Distance.apply(this,arguments)}function m(){m.b2DistanceInput.apply(this,
arguments)}function r(){r.b2DistanceOutput.apply(this,arguments)}function I(){I.b2DistanceProxy.apply(this,arguments)}function D(){D.b2DynamicTree.apply(this,arguments);this.constructor===D&&this.b2DynamicTree.apply(this,arguments)}function v(){v.b2DynamicTreeBroadPhase.apply(this,arguments)}function u(){u.b2DynamicTreeNode.apply(this,arguments)}function t(){t.b2DynamicTreePair.apply(this,arguments)}function L(){L.b2Manifold.apply(this,arguments);this.constructor===L&&this.b2Manifold.apply(this,arguments)}
function F(){F.b2ManifoldPoint.apply(this,arguments);this.constructor===F&&this.b2ManifoldPoint.apply(this,arguments)}function l(){l.b2Point.apply(this,arguments)}function H(){H.b2RayCastInput.apply(this,arguments);this.constructor===H&&this.b2RayCastInput.apply(this,arguments)}function y(){y.b2RayCastOutput.apply(this,arguments)}function G(){G.b2Segment.apply(this,arguments)}function C(){C.b2SeparationFunction.apply(this,arguments)}function J(){J.b2Simplex.apply(this,arguments);this.constructor===
J&&this.b2Simplex.apply(this,arguments)}function z(){z.b2SimplexCache.apply(this,arguments)}function M(){M.b2SimplexVertex.apply(this,arguments)}function B(){B.b2TimeOfImpact.apply(this,arguments)}function E(){E.b2TOIInput.apply(this,arguments)}function N(){N.b2WorldManifold.apply(this,arguments);this.constructor===N&&this.b2WorldManifold.apply(this,arguments)}function K(){K.ClipVertex.apply(this,arguments)}function e(){e.Features.apply(this,arguments)}function j(){j.b2CircleShape.apply(this,arguments);
this.constructor===j&&this.b2CircleShape.apply(this,arguments)}function h(){h.b2EdgeChainDef.apply(this,arguments);this.constructor===h&&this.b2EdgeChainDef.apply(this,arguments)}function o(){o.b2EdgeShape.apply(this,arguments);this.constructor===o&&this.b2EdgeShape.apply(this,arguments)}function w(){w.b2MassData.apply(this,arguments)}function A(){A.b2PolygonShape.apply(this,arguments);this.constructor===A&&this.b2PolygonShape.apply(this,arguments)}function p(){p.b2Shape.apply(this,arguments);this.constructor===
p&&this.b2Shape.apply(this,arguments)}function c(){c.b2Color.apply(this,arguments);this.constructor===c&&this.b2Color.apply(this,arguments)}function n(){n.b2Settings.apply(this,arguments)}function s(){s.b2Mat22.apply(this,arguments);this.constructor===s&&this.b2Mat22.apply(this,arguments)}function O(){O.b2Mat33.apply(this,arguments);this.constructor===O&&this.b2Mat33.apply(this,arguments)}function za(){za.b2Math.apply(this,arguments)}function Aa(){Aa.b2Sweep.apply(this,arguments)}function P(){P.b2Transform.apply(this,
arguments);this.constructor===P&&this.b2Transform.apply(this,arguments)}function Q(){Q.b2Vec2.apply(this,arguments);this.constructor===Q&&this.b2Vec2.apply(this,arguments)}function R(){R.b2Vec3.apply(this,arguments);this.constructor===R&&this.b2Vec3.apply(this,arguments)}function S(){S.b2Body.apply(this,arguments);this.constructor===S&&this.b2Body.apply(this,arguments)}function T(){T.b2BodyDef.apply(this,arguments);this.constructor===T&&this.b2BodyDef.apply(this,arguments)}function Ba(){Ba.b2ContactFilter.apply(this,
arguments)}function Ca(){Ca.b2ContactImpulse.apply(this,arguments)}function Da(){Da.b2ContactListener.apply(this,arguments)}function U(){U.b2ContactManager.apply(this,arguments);this.constructor===U&&this.b2ContactManager.apply(this,arguments)}function V(){V.b2DebugDraw.apply(this,arguments);this.constructor===V&&this.b2DebugDraw.apply(this,arguments)}function Ea(){Ea.b2DestructionListener.apply(this,arguments)}function Fa(){Fa.b2FilterData.apply(this,arguments)}function W(){W.b2Fixture.apply(this,
arguments);this.constructor===W&&this.b2Fixture.apply(this,arguments)}function X(){X.b2FixtureDef.apply(this,arguments);this.constructor===X&&this.b2FixtureDef.apply(this,arguments)}function Y(){Y.b2Island.apply(this,arguments);this.constructor===Y&&this.b2Island.apply(this,arguments)}function Ga(){Ga.b2TimeStep.apply(this,arguments)}function Z(){Z.b2World.apply(this,arguments);this.constructor===Z&&this.b2World.apply(this,arguments)}function Ha(){Ha.b2CircleContact.apply(this,arguments)}function $(){$.b2Contact.apply(this,
arguments);this.constructor===$&&this.b2Contact.apply(this,arguments)}function aa(){aa.b2ContactConstraint.apply(this,arguments);this.constructor===aa&&this.b2ContactConstraint.apply(this,arguments)}function Ia(){Ia.b2ContactConstraintPoint.apply(this,arguments)}function Ja(){Ja.b2ContactEdge.apply(this,arguments)}function ba(){ba.b2ContactFactory.apply(this,arguments);this.constructor===ba&&this.b2ContactFactory.apply(this,arguments)}function Ka(){Ka.b2ContactRegister.apply(this,arguments)}function La(){La.b2ContactResult.apply(this,
arguments)}function ca(){ca.b2ContactSolver.apply(this,arguments);this.constructor===ca&&this.b2ContactSolver.apply(this,arguments)}function Ma(){Ma.b2EdgeAndCircleContact.apply(this,arguments)}function da(){da.b2NullContact.apply(this,arguments);this.constructor===da&&this.b2NullContact.apply(this,arguments)}function Na(){Na.b2PolyAndCircleContact.apply(this,arguments)}function Oa(){Oa.b2PolyAndEdgeContact.apply(this,arguments)}function Pa(){Pa.b2PolygonContact.apply(this,arguments)}function ea(){ea.b2PositionSolverManifold.apply(this,
arguments);this.constructor===ea&&this.b2PositionSolverManifold.apply(this,arguments)}function Qa(){Qa.b2BuoyancyController.apply(this,arguments)}function Ra(){Ra.b2ConstantAccelController.apply(this,arguments)}function Sa(){Sa.b2ConstantForceController.apply(this,arguments)}function Ta(){Ta.b2Controller.apply(this,arguments)}function Ua(){Ua.b2ControllerEdge.apply(this,arguments)}function Va(){Va.b2GravityController.apply(this,arguments)}function Wa(){Wa.b2TensorDampingController.apply(this,arguments)}
function fa(){fa.b2DistanceJoint.apply(this,arguments);this.constructor===fa&&this.b2DistanceJoint.apply(this,arguments)}function ga(){ga.b2DistanceJointDef.apply(this,arguments);this.constructor===ga&&this.b2DistanceJointDef.apply(this,arguments)}function ha(){ha.b2FrictionJoint.apply(this,arguments);this.constructor===ha&&this.b2FrictionJoint.apply(this,arguments)}function ia(){ia.b2FrictionJointDef.apply(this,arguments);this.constructor===ia&&this.b2FrictionJointDef.apply(this,arguments)}function ja(){ja.b2GearJoint.apply(this,
arguments);this.constructor===ja&&this.b2GearJoint.apply(this,arguments)}function ka(){ka.b2GearJointDef.apply(this,arguments);this.constructor===ka&&this.b2GearJointDef.apply(this,arguments)}function Xa(){Xa.b2Jacobian.apply(this,arguments)}function la(){la.b2Joint.apply(this,arguments);this.constructor===la&&this.b2Joint.apply(this,arguments)}function ma(){ma.b2JointDef.apply(this,arguments);this.constructor===ma&&this.b2JointDef.apply(this,arguments)}function Ya(){Ya.b2JointEdge.apply(this,arguments)}
function na(){na.b2LineJoint.apply(this,arguments);this.constructor===na&&this.b2LineJoint.apply(this,arguments)}function oa(){oa.b2LineJointDef.apply(this,arguments);this.constructor===oa&&this.b2LineJointDef.apply(this,arguments)}function pa(){pa.b2MouseJoint.apply(this,arguments);this.constructor===pa&&this.b2MouseJoint.apply(this,arguments)}function qa(){qa.b2MouseJointDef.apply(this,arguments);this.constructor===qa&&this.b2MouseJointDef.apply(this,arguments)}function ra(){ra.b2PrismaticJoint.apply(this,
arguments);this.constructor===ra&&this.b2PrismaticJoint.apply(this,arguments)}function sa(){sa.b2PrismaticJointDef.apply(this,arguments);this.constructor===sa&&this.b2PrismaticJointDef.apply(this,arguments)}function ta(){ta.b2PulleyJoint.apply(this,arguments);this.constructor===ta&&this.b2PulleyJoint.apply(this,arguments)}function ua(){ua.b2PulleyJointDef.apply(this,arguments);this.constructor===ua&&this.b2PulleyJointDef.apply(this,arguments)}function va(){va.b2RevoluteJoint.apply(this,arguments);
this.constructor===va&&this.b2RevoluteJoint.apply(this,arguments)}function wa(){wa.b2RevoluteJointDef.apply(this,arguments);this.constructor===wa&&this.b2RevoluteJointDef.apply(this,arguments)}function xa(){xa.b2WeldJoint.apply(this,arguments);this.constructor===xa&&this.b2WeldJoint.apply(this,arguments)}function ya(){ya.b2WeldJointDef.apply(this,arguments);this.constructor===ya&&this.b2WeldJointDef.apply(this,arguments)}Box2D.Collision.IBroadPhase="Box2D.Collision.IBroadPhase";Box2D.Collision.b2AABB=
a;Box2D.Collision.b2Bound=b;Box2D.Collision.b2BoundValues=f;Box2D.Collision.b2Collision=g;Box2D.Collision.b2ContactID=k;Box2D.Collision.b2ContactPoint=d;Box2D.Collision.b2Distance=q;Box2D.Collision.b2DistanceInput=m;Box2D.Collision.b2DistanceOutput=r;Box2D.Collision.b2DistanceProxy=I;Box2D.Collision.b2DynamicTree=D;Box2D.Collision.b2DynamicTreeBroadPhase=v;Box2D.Collision.b2DynamicTreeNode=u;Box2D.Collision.b2DynamicTreePair=t;Box2D.Collision.b2Manifold=L;Box2D.Collision.b2ManifoldPoint=F;Box2D.Collision.b2Point=
l;Box2D.Collision.b2RayCastInput=H;Box2D.Collision.b2RayCastOutput=y;Box2D.Collision.b2Segment=G;Box2D.Collision.b2SeparationFunction=C;Box2D.Collision.b2Simplex=J;Box2D.Collision.b2SimplexCache=z;Box2D.Collision.b2SimplexVertex=M;Box2D.Collision.b2TimeOfImpact=B;Box2D.Collision.b2TOIInput=E;Box2D.Collision.b2WorldManifold=N;Box2D.Collision.ClipVertex=K;Box2D.Collision.Features=e;Box2D.Collision.Shapes.b2CircleShape=j;Box2D.Collision.Shapes.b2EdgeChainDef=h;Box2D.Collision.Shapes.b2EdgeShape=o;Box2D.Collision.Shapes.b2MassData=
w;Box2D.Collision.Shapes.b2PolygonShape=A;Box2D.Collision.Shapes.b2Shape=p;Box2D.Common.b2internal="Box2D.Common.b2internal";Box2D.Common.b2Color=c;Box2D.Common.b2Settings=n;Box2D.Common.Math.b2Mat22=s;Box2D.Common.Math.b2Mat33=O;Box2D.Common.Math.b2Math=za;Box2D.Common.Math.b2Sweep=Aa;Box2D.Common.Math.b2Transform=P;Box2D.Common.Math.b2Vec2=Q;Box2D.Common.Math.b2Vec3=R;Box2D.Dynamics.b2Body=S;Box2D.Dynamics.b2BodyDef=T;Box2D.Dynamics.b2ContactFilter=Ba;Box2D.Dynamics.b2ContactImpulse=Ca;Box2D.Dynamics.b2ContactListener=
Da;Box2D.Dynamics.b2ContactManager=U;Box2D.Dynamics.b2DebugDraw=V;Box2D.Dynamics.b2DestructionListener=Ea;Box2D.Dynamics.b2FilterData=Fa;Box2D.Dynamics.b2Fixture=W;Box2D.Dynamics.b2FixtureDef=X;Box2D.Dynamics.b2Island=Y;Box2D.Dynamics.b2TimeStep=Ga;Box2D.Dynamics.b2World=Z;Box2D.Dynamics.Contacts.b2CircleContact=Ha;Box2D.Dynamics.Contacts.b2Contact=$;Box2D.Dynamics.Contacts.b2ContactConstraint=aa;Box2D.Dynamics.Contacts.b2ContactConstraintPoint=Ia;Box2D.Dynamics.Contacts.b2ContactEdge=Ja;Box2D.Dynamics.Contacts.b2ContactFactory=
ba;Box2D.Dynamics.Contacts.b2ContactRegister=Ka;Box2D.Dynamics.Contacts.b2ContactResult=La;Box2D.Dynamics.Contacts.b2ContactSolver=ca;Box2D.Dynamics.Contacts.b2EdgeAndCircleContact=Ma;Box2D.Dynamics.Contacts.b2NullContact=da;Box2D.Dynamics.Contacts.b2PolyAndCircleContact=Na;Box2D.Dynamics.Contacts.b2PolyAndEdgeContact=Oa;Box2D.Dynamics.Contacts.b2PolygonContact=Pa;Box2D.Dynamics.Contacts.b2PositionSolverManifold=ea;Box2D.Dynamics.Controllers.b2BuoyancyController=Qa;Box2D.Dynamics.Controllers.b2ConstantAccelController=
Ra;Box2D.Dynamics.Controllers.b2ConstantForceController=Sa;Box2D.Dynamics.Controllers.b2Controller=Ta;Box2D.Dynamics.Controllers.b2ControllerEdge=Ua;Box2D.Dynamics.Controllers.b2GravityController=Va;Box2D.Dynamics.Controllers.b2TensorDampingController=Wa;Box2D.Dynamics.Joints.b2DistanceJoint=fa;Box2D.Dynamics.Joints.b2DistanceJointDef=ga;Box2D.Dynamics.Joints.b2FrictionJoint=ha;Box2D.Dynamics.Joints.b2FrictionJointDef=ia;Box2D.Dynamics.Joints.b2GearJoint=ja;Box2D.Dynamics.Joints.b2GearJointDef=ka;
Box2D.Dynamics.Joints.b2Jacobian=Xa;Box2D.Dynamics.Joints.b2Joint=la;Box2D.Dynamics.Joints.b2JointDef=ma;Box2D.Dynamics.Joints.b2JointEdge=Ya;Box2D.Dynamics.Joints.b2LineJoint=na;Box2D.Dynamics.Joints.b2LineJointDef=oa;Box2D.Dynamics.Joints.b2MouseJoint=pa;Box2D.Dynamics.Joints.b2MouseJointDef=qa;Box2D.Dynamics.Joints.b2PrismaticJoint=ra;Box2D.Dynamics.Joints.b2PrismaticJointDef=sa;Box2D.Dynamics.Joints.b2PulleyJoint=ta;Box2D.Dynamics.Joints.b2PulleyJointDef=ua;Box2D.Dynamics.Joints.b2RevoluteJoint=
va;Box2D.Dynamics.Joints.b2RevoluteJointDef=wa;Box2D.Dynamics.Joints.b2WeldJoint=xa;Box2D.Dynamics.Joints.b2WeldJointDef=ya})();Box2D.postDefs=[];
(function(){var a=Box2D.Collision.Shapes.b2CircleShape,b=Box2D.Collision.Shapes.b2PolygonShape,f=Box2D.Collision.Shapes.b2Shape,g=Box2D.Common.b2Settings,k=Box2D.Common.Math.b2Math,d=Box2D.Common.Math.b2Sweep,q=Box2D.Common.Math.b2Transform,m=Box2D.Common.Math.b2Vec2,r=Box2D.Collision.b2AABB,I=Box2D.Collision.b2Bound,D=Box2D.Collision.b2BoundValues,v=Box2D.Collision.b2Collision,u=Box2D.Collision.b2ContactID,t=Box2D.Collision.b2ContactPoint,L=Box2D.Collision.b2Distance,F=Box2D.Collision.b2DistanceInput,
l=Box2D.Collision.b2DistanceOutput,H=Box2D.Collision.b2DistanceProxy,y=Box2D.Collision.b2DynamicTree,G=Box2D.Collision.b2DynamicTreeBroadPhase,C=Box2D.Collision.b2DynamicTreeNode,J=Box2D.Collision.b2DynamicTreePair,z=Box2D.Collision.b2Manifold,M=Box2D.Collision.b2ManifoldPoint,B=Box2D.Collision.b2Point,E=Box2D.Collision.b2RayCastInput,N=Box2D.Collision.b2RayCastOutput,K=Box2D.Collision.b2Segment,e=Box2D.Collision.b2SeparationFunction,j=Box2D.Collision.b2Simplex,h=Box2D.Collision.b2SimplexCache,o=
Box2D.Collision.b2SimplexVertex,w=Box2D.Collision.b2TimeOfImpact,A=Box2D.Collision.b2TOIInput,p=Box2D.Collision.b2WorldManifold,c=Box2D.Collision.ClipVertex,n=Box2D.Collision.Features,s=Box2D.Collision.IBroadPhase;r.b2AABB=function(){this.lowerBound=new m;this.upperBound=new m};r.prototype.IsValid=function(){var c=this.upperBound.y-this.lowerBound.y;return c=(c=this.upperBound.x-this.lowerBound.x>=0&&c>=0)&&this.lowerBound.IsValid()&&this.upperBound.IsValid()};r.prototype.GetCenter=function(){return new m((this.lowerBound.x+
this.upperBound.x)/2,(this.lowerBound.y+this.upperBound.y)/2)};r.prototype.GetExtents=function(){return new m((this.upperBound.x-this.lowerBound.x)/2,(this.upperBound.y-this.lowerBound.y)/2)};r.prototype.Contains=function(c){var n;return n=(n=(n=(n=this.lowerBound.x<=c.lowerBound.x)&&this.lowerBound.y<=c.lowerBound.y)&&c.upperBound.x<=this.upperBound.x)&&c.upperBound.y<=this.upperBound.y};r.prototype.RayCast=function(c,n){var e=-Number.MAX_VALUE,a=Number.MAX_VALUE,s=n.p1.x,j=n.p1.y,o=n.p2.x-n.p1.x,
l=n.p2.y-n.p1.y,h=Math.abs(o),p=Math.abs(l),w=c.normal,m=0,b=0,A=m=0,A=0;if(h<Number.MIN_VALUE){if(s<this.lowerBound.x||this.upperBound.x<s)return false}else{m=1/o;b=(this.lowerBound.x-s)*m;m*=this.upperBound.x-s;A=-1;b>m&&(A=b,b=m,m=A,A=1);if(b>e)w.x=A,w.y=0,e=b;a=Math.min(a,m);if(e>a)return false}if(p<Number.MIN_VALUE){if(j<this.lowerBound.y||this.upperBound.y<j)return false}else{m=1/l;b=(this.lowerBound.y-j)*m;m*=this.upperBound.y-j;A=-1;b>m&&(A=b,b=m,m=A,A=1);if(b>e)w.y=A,w.x=0,e=b;a=Math.min(a,
m);if(e>a)return false}c.fraction=e;return true};r.prototype.TestOverlap=function(c){var n=c.lowerBound.y-this.upperBound.y,e=this.lowerBound.y-c.upperBound.y;return c.lowerBound.x-this.upperBound.x>0||n>0?false:this.lowerBound.x-c.upperBound.x>0||e>0?false:true};r.Combine=function(c,n){var e=new r;e.Combine(c,n);return e};r.prototype.Combine=function(c,n){this.lowerBound.x=Math.min(c.lowerBound.x,n.lowerBound.x);this.lowerBound.y=Math.min(c.lowerBound.y,n.lowerBound.y);this.upperBound.x=Math.max(c.upperBound.x,
n.upperBound.x);this.upperBound.y=Math.max(c.upperBound.y,n.upperBound.y)};I.b2Bound=function(){};I.prototype.IsLower=function(){return(this.value&1)==0};I.prototype.IsUpper=function(){return(this.value&1)==1};I.prototype.Swap=function(c){var n=this.value,e=this.proxy,a=this.stabbingCount;this.value=c.value;this.proxy=c.proxy;this.stabbingCount=c.stabbingCount;c.value=n;c.proxy=e;c.stabbingCount=a};D.b2BoundValues=function(){};D.prototype.b2BoundValues=function(){this.lowerValues=new Vector_a2j_Number;
this.lowerValues[0]=0;this.lowerValues[1]=0;this.upperValues=new Vector_a2j_Number;this.upperValues[0]=0;this.upperValues[1]=0};v.b2Collision=function(){};v.ClipSegmentToLine=function(c,n,e,a){a===void 0&&(a=0);var s,j=0;s=n[0];var o=s.v;s=n[1];var l=s.v,h=e.x*o.x+e.y*o.y-a;s=e.x*l.x+e.y*l.y-a;h<=0&&c[j++].Set(n[0]);s<=0&&c[j++].Set(n[1]);if(h*s<0)e=h/(h-s),s=c[j],s=s.v,s.x=o.x+e*(l.x-o.x),s.y=o.y+e*(l.y-o.y),s=c[j],s.id=(h>0?n[0]:n[1]).id,++j;return j};v.EdgeSeparation=function(c,n,e,a,s){e===void 0&&
(e=0);parseInt(c.m_vertexCount);var j=c.m_vertices,c=c.m_normals,o=parseInt(a.m_vertexCount),l=a.m_vertices,h,p;h=n.R;p=c[e];c=h.col1.x*p.x+h.col2.x*p.y;a=h.col1.y*p.x+h.col2.y*p.y;h=s.R;var m=h.col1.x*c+h.col1.y*a;h=h.col2.x*c+h.col2.y*a;for(var b=0,w=Number.MAX_VALUE,A=0;A<o;++A)p=l[A],p=p.x*m+p.y*h,p<w&&(w=p,b=A);p=j[e];h=n.R;e=n.position.x+(h.col1.x*p.x+h.col2.x*p.y);n=n.position.y+(h.col1.y*p.x+h.col2.y*p.y);p=l[b];h=s.R;j=s.position.x+(h.col1.x*p.x+h.col2.x*p.y);s=s.position.y+(h.col1.y*p.x+
h.col2.y*p.y);j-=e;s-=n;return j*c+s*a};v.FindMaxSeparation=function(c,n,e,a,s){var j=parseInt(n.m_vertexCount),o=n.m_normals,h,l;l=s.R;h=a.m_centroid;var p=s.position.x+(l.col1.x*h.x+l.col2.x*h.y),m=s.position.y+(l.col1.y*h.x+l.col2.y*h.y);l=e.R;h=n.m_centroid;p-=e.position.x+(l.col1.x*h.x+l.col2.x*h.y);m-=e.position.y+(l.col1.y*h.x+l.col2.y*h.y);l=p*e.R.col1.x+m*e.R.col1.y;for(var m=p*e.R.col2.x+m*e.R.col2.y,p=0,b=-Number.MAX_VALUE,w=0;w<j;++w)h=o[w],h=h.x*l+h.y*m,h>b&&(b=h,p=w);o=v.EdgeSeparation(n,
e,p,a,s);h=parseInt(p-1>=0?p-1:j-1);l=v.EdgeSeparation(n,e,h,a,s);var m=parseInt(p+1<j?p+1:0),b=v.EdgeSeparation(n,e,m,a,s),A=w=0,g=0;if(l>o&&l>b)g=-1,w=h,A=l;else if(b>o)g=1,w=m,A=b;else return c[0]=p,o;for(;;)if(p=g==-1?w-1>=0?w-1:j-1:w+1<j?w+1:0,o=v.EdgeSeparation(n,e,p,a,s),o>A)w=p,A=o;else break;c[0]=w;return A};v.FindIncidentEdge=function(c,n,e,a,s,j){a===void 0&&(a=0);parseInt(n.m_vertexCount);var o=n.m_normals,h=parseInt(s.m_vertexCount),n=s.m_vertices,s=s.m_normals,l;l=e.R;var e=o[a],o=l.col1.x*
e.x+l.col2.x*e.y,p=l.col1.y*e.x+l.col2.y*e.y;l=j.R;e=l.col1.x*o+l.col1.y*p;p=l.col2.x*o+l.col2.y*p;o=e;l=0;for(var m=Number.MAX_VALUE,w=0;w<h;++w)e=s[w],e=o*e.x+p*e.y,e<m&&(m=e,l=w);s=parseInt(l);o=parseInt(s+1<h?s+1:0);h=c[0];e=n[s];l=j.R;h.v.x=j.position.x+(l.col1.x*e.x+l.col2.x*e.y);h.v.y=j.position.y+(l.col1.y*e.x+l.col2.y*e.y);h.id.features.referenceEdge=a;h.id.features.incidentEdge=s;h.id.features.incidentVertex=0;h=c[1];e=n[o];l=j.R;h.v.x=j.position.x+(l.col1.x*e.x+l.col2.x*e.y);h.v.y=j.position.y+
(l.col1.y*e.x+l.col2.y*e.y);h.id.features.referenceEdge=a;h.id.features.incidentEdge=o;h.id.features.incidentVertex=1};v.MakeClipPointVector=function(){var O=new Vector(2);O[0]=new c;O[1]=new c;return O};v.CollidePolygons=function(c,n,e,a,s){var j;c.m_pointCount=0;var o=n.m_radius+a.m_radius;v.s_edgeAO[0]=0;var h=v.FindMaxSeparation(v.s_edgeAO,n,e,a,s);j=v.s_edgeAO[0];if(!(h>o)){var l;v.s_edgeBO[0]=0;var p=v.FindMaxSeparation(v.s_edgeBO,a,s,n,e);l=v.s_edgeBO[0];if(!(p>o)){var m=0,w=0;p>0.98*h+0.0010?
(h=a,a=n,n=s,m=l,c.m_type=z.e_faceB,w=1):(h=n,n=e,e=s,m=j,c.m_type=z.e_faceA,w=0);j=v.s_incidentEdge;v.FindIncidentEdge(j,h,n,m,a,e);l=parseInt(h.m_vertexCount);var s=h.m_vertices,h=s[m],b;b=m+1<l?s[parseInt(m+1)]:s[0];m=v.s_localTangent;m.Set(b.x-h.x,b.y-h.y);m.Normalize();s=v.s_localNormal;s.x=m.y;s.y=-m.x;a=v.s_planePoint;a.Set(0.5*(h.x+b.x),0.5*(h.y+b.y));p=v.s_tangent;l=n.R;p.x=l.col1.x*m.x+l.col2.x*m.y;p.y=l.col1.y*m.x+l.col2.y*m.y;var A=v.s_tangent2;A.x=-p.x;A.y=-p.y;m=v.s_normal;m.x=p.y;m.y=
-p.x;var k=v.s_v11,d=v.s_v12;k.x=n.position.x+(l.col1.x*h.x+l.col2.x*h.y);k.y=n.position.y+(l.col1.y*h.x+l.col2.y*h.y);d.x=n.position.x+(l.col1.x*b.x+l.col2.x*b.y);d.y=n.position.y+(l.col1.y*b.x+l.col2.y*b.y);n=m.x*k.x+m.y*k.y;l=p.x*d.x+p.y*d.y+o;b=v.s_clipPoints1;h=v.s_clipPoints2;d=0;d=v.ClipSegmentToLine(b,j,A,-p.x*k.x-p.y*k.y+o);if(!(d<2)&&(d=v.ClipSegmentToLine(h,b,p,l),!(d<2))){c.m_localPlaneNormal.SetV(s);c.m_localPoint.SetV(a);for(a=s=0;a<g.b2_maxManifoldPoints;++a)if(j=h[a],m.x*j.v.x+m.y*
j.v.y-n<=o)p=c.m_points[s],l=e.R,A=j.v.x-e.position.x,k=j.v.y-e.position.y,p.m_localPoint.x=A*l.col1.x+k*l.col1.y,p.m_localPoint.y=A*l.col2.x+k*l.col2.y,p.m_id.Set(j.id),p.m_id.features.flip=w,++s;c.m_pointCount=s}}}};v.CollideCircles=function(c,n,e,a,s){c.m_pointCount=0;var j,o;j=e.R;o=n.m_p;var h=e.position.x+(j.col1.x*o.x+j.col2.x*o.y),e=e.position.y+(j.col1.y*o.x+j.col2.y*o.y);j=s.R;o=a.m_p;h=s.position.x+(j.col1.x*o.x+j.col2.x*o.y)-h;s=s.position.y+(j.col1.y*o.x+j.col2.y*o.y)-e;j=n.m_radius+
a.m_radius;if(!(h*h+s*s>j*j))c.m_type=z.e_circles,c.m_localPoint.SetV(n.m_p),c.m_localPlaneNormal.SetZero(),c.m_pointCount=1,c.m_points[0].m_localPoint.SetV(a.m_p),c.m_points[0].m_id.key=0};v.CollidePolygonAndCircle=function(c,n,e,a,s){var j=c.m_pointCount=0,o=0,h,l;l=s.R;h=a.m_p;var p=s.position.y+(l.col1.y*h.x+l.col2.y*h.y),j=s.position.x+(l.col1.x*h.x+l.col2.x*h.y)-e.position.x,o=p-e.position.y;l=e.R;e=j*l.col1.x+o*l.col1.y;l=j*l.col2.x+o*l.col2.y;for(var m=0,p=-Number.MAX_VALUE,s=n.m_radius+a.m_radius,
b=parseInt(n.m_vertexCount),w=n.m_vertices,n=n.m_normals,A=0;A<b;++A){h=w[A];j=e-h.x;o=l-h.y;h=n[A];j=h.x*j+h.y*o;if(j>s)return;j>p&&(p=j,m=A)}j=parseInt(m);o=parseInt(j+1<b?j+1:0);h=w[j];w=w[o];if(p<Number.MIN_VALUE)c.m_pointCount=1,c.m_type=z.e_faceA,c.m_localPlaneNormal.SetV(n[m]),c.m_localPoint.x=0.5*(h.x+w.x),c.m_localPoint.y=0.5*(h.y+w.y);else if(p=(e-w.x)*(h.x-w.x)+(l-w.y)*(h.y-w.y),(e-h.x)*(w.x-h.x)+(l-h.y)*(w.y-h.y)<=0){if((e-h.x)*(e-h.x)+(l-h.y)*(l-h.y)>s*s)return;c.m_pointCount=1;c.m_type=
z.e_faceA;c.m_localPlaneNormal.x=e-h.x;c.m_localPlaneNormal.y=l-h.y;c.m_localPlaneNormal.Normalize();c.m_localPoint.SetV(h)}else if(p<=0){if((e-w.x)*(e-w.x)+(l-w.y)*(l-w.y)>s*s)return;c.m_pointCount=1;c.m_type=z.e_faceA;c.m_localPlaneNormal.x=e-w.x;c.m_localPlaneNormal.y=l-w.y;c.m_localPlaneNormal.Normalize();c.m_localPoint.SetV(w)}else{m=0.5*(h.x+w.x);h=0.5*(h.y+w.y);p=(e-m)*n[j].x+(l-h)*n[j].y;if(p>s)return;c.m_pointCount=1;c.m_type=z.e_faceA;c.m_localPlaneNormal.x=n[j].x;c.m_localPlaneNormal.y=
n[j].y;c.m_localPlaneNormal.Normalize();c.m_localPoint.Set(m,h)}c.m_points[0].m_localPoint.SetV(a.m_p);c.m_points[0].m_id.key=0};v.TestOverlap=function(c,n){var e=n.lowerBound,a=c.upperBound,s=e.x-a.x,j=e.y-a.y,e=c.lowerBound,a=n.upperBound,h=e.y-a.y;return s>0||j>0?false:e.x-a.x>0||h>0?false:true};Box2D.postDefs.push(function(){Box2D.Collision.b2Collision.s_incidentEdge=v.MakeClipPointVector();Box2D.Collision.b2Collision.s_clipPoints1=v.MakeClipPointVector();Box2D.Collision.b2Collision.s_clipPoints2=
v.MakeClipPointVector();Box2D.Collision.b2Collision.s_edgeAO=new Vector_a2j_Number(1);Box2D.Collision.b2Collision.s_edgeBO=new Vector_a2j_Number(1);Box2D.Collision.b2Collision.s_localTangent=new m;Box2D.Collision.b2Collision.s_localNormal=new m;Box2D.Collision.b2Collision.s_planePoint=new m;Box2D.Collision.b2Collision.s_normal=new m;Box2D.Collision.b2Collision.s_tangent=new m;Box2D.Collision.b2Collision.s_tangent2=new m;Box2D.Collision.b2Collision.s_v11=new m;Box2D.Collision.b2Collision.s_v12=new m;
Box2D.Collision.b2Collision.b2CollidePolyTempVec=new m;Box2D.Collision.b2Collision.b2_nullFeature=255});u.b2ContactID=function(){this.features=new n};u.prototype.b2ContactID=function(){this.features._m_id=this};u.prototype.Set=function(c){this.key=c._key};u.prototype.Copy=function(){var c=new u;c.key=this.key;return c};Object.defineProperty(u.prototype,"key",{enumerable:false,configurable:true,get:function(){return this._key}});Object.defineProperty(u.prototype,"key",{enumerable:false,configurable:true,
set:function(c){c===void 0&&(c=0);this._key=c;this.features._referenceEdge=this._key&255;this.features._incidentEdge=(this._key&65280)>>8&255;this.features._incidentVertex=(this._key&16711680)>>16&255;this.features._flip=(this._key&4278190080)>>24&255}});t.b2ContactPoint=function(){this.position=new m;this.velocity=new m;this.normal=new m;this.id=new u};L.b2Distance=function(){};L.Distance=function(c,n,e){++L.b2_gjkCalls;var a=e.proxyA,s=e.proxyB,j=e.transformA,h=e.transformB,o=L.s_simplex;o.ReadCache(n,
a,j,s,h);var l=o.m_vertices,p=L.s_saveA,w=L.s_saveB,b=0;o.GetClosestPoint().LengthSquared();for(var A=0,d,f=0;f<20;){b=o.m_count;for(A=0;A<b;A++)p[A]=l[A].indexA,w[A]=l[A].indexB;switch(o.m_count){case 1:break;case 2:o.Solve2();break;case 3:o.Solve3();break;default:g.b2Assert(false)}if(o.m_count==3)break;d=o.GetClosestPoint();d.LengthSquared();A=o.GetSearchDirection();if(A.LengthSquared()<Number.MIN_VALUE*Number.MIN_VALUE)break;d=l[o.m_count];d.indexA=a.GetSupport(k.MulTMV(j.R,A.GetNegative()));d.wA=
k.MulX(j,a.GetVertex(d.indexA));d.indexB=s.GetSupport(k.MulTMV(h.R,A));d.wB=k.MulX(h,s.GetVertex(d.indexB));d.w=k.SubtractVV(d.wB,d.wA);++f;++L.b2_gjkIters;for(var y=false,A=0;A<b;A++)if(d.indexA==p[A]&&d.indexB==w[A]){y=true;break}if(y)break;++o.m_count}L.b2_gjkMaxIters=k.Max(L.b2_gjkMaxIters,f);o.GetWitnessPoints(c.pointA,c.pointB);c.distance=k.SubtractVV(c.pointA,c.pointB).Length();c.iterations=f;o.WriteCache(n);if(e.useRadii)n=a.m_radius,s=s.m_radius,c.distance>n+s&&c.distance>Number.MIN_VALUE?
(c.distance-=n+s,e=k.SubtractVV(c.pointB,c.pointA),e.Normalize(),c.pointA.x+=n*e.x,c.pointA.y+=n*e.y,c.pointB.x-=s*e.x,c.pointB.y-=s*e.y):(d=new m,d.x=0.5*(c.pointA.x+c.pointB.x),d.y=0.5*(c.pointA.y+c.pointB.y),c.pointA.x=c.pointB.x=d.x,c.pointA.y=c.pointB.y=d.y,c.distance=0)};Box2D.postDefs.push(function(){Box2D.Collision.b2Distance.s_simplex=new j;Box2D.Collision.b2Distance.s_saveA=new Vector_a2j_Number(3);Box2D.Collision.b2Distance.s_saveB=new Vector_a2j_Number(3)});F.b2DistanceInput=function(){};
l.b2DistanceOutput=function(){this.pointA=new m;this.pointB=new m};H.b2DistanceProxy=function(){};H.prototype.Set=function(c){switch(c.GetType()){case f.e_circleShape:c=c instanceof a?c:null;this.m_vertices=new Vector(1,true);this.m_vertices[0]=c.m_p;this.m_count=1;this.m_radius=c.m_radius;break;case f.e_polygonShape:c=c instanceof b?c:null;this.m_vertices=c.m_vertices;this.m_count=c.m_vertexCount;this.m_radius=c.m_radius;break;default:g.b2Assert(false)}};H.prototype.GetSupport=function(c){for(var e=
0,n=this.m_vertices[0].x*c.x+this.m_vertices[0].y*c.y,a=1;a<this.m_count;++a){var s=this.m_vertices[a].x*c.x+this.m_vertices[a].y*c.y;s>n&&(e=a,n=s)}return e};H.prototype.GetSupportVertex=function(c){for(var e=0,n=this.m_vertices[0].x*c.x+this.m_vertices[0].y*c.y,a=1;a<this.m_count;++a){var s=this.m_vertices[a].x*c.x+this.m_vertices[a].y*c.y;s>n&&(e=a,n=s)}return this.m_vertices[e]};H.prototype.GetVertexCount=function(){return this.m_count};H.prototype.GetVertex=function(c){c===void 0&&(c=0);g.b2Assert(0<=
c&&c<this.m_count);return this.m_vertices[c]};y.b2DynamicTree=function(){};y.prototype.b2DynamicTree=function(){this.m_freeList=this.m_root=null;this.m_insertionCount=this.m_path=0};y.prototype.CreateProxy=function(c,e){var n=this.AllocateNode(),a=g.b2_aabbExtension,s=g.b2_aabbExtension;n.aabb.lowerBound.x=c.lowerBound.x-a;n.aabb.lowerBound.y=c.lowerBound.y-s;n.aabb.upperBound.x=c.upperBound.x+a;n.aabb.upperBound.y=c.upperBound.y+s;n.userData=e;this.InsertLeaf(n);return n};y.prototype.DestroyProxy=
function(c){this.RemoveLeaf(c);this.FreeNode(c)};y.prototype.MoveProxy=function(c,n,e){g.b2Assert(c.IsLeaf());if(c.aabb.Contains(n))return false;this.RemoveLeaf(c);var a=g.b2_aabbExtension+g.b2_aabbMultiplier*(e.x>0?e.x:-e.x),e=g.b2_aabbExtension+g.b2_aabbMultiplier*(e.y>0?e.y:-e.y);c.aabb.lowerBound.x=n.lowerBound.x-a;c.aabb.lowerBound.y=n.lowerBound.y-e;c.aabb.upperBound.x=n.upperBound.x+a;c.aabb.upperBound.y=n.upperBound.y+e;this.InsertLeaf(c);return true};y.prototype.Rebalance=function(c){c===
void 0&&(c=0);if(this.m_root!=null)for(var e=0;e<c;e++){for(var n=this.m_root,a=0;n.IsLeaf()==false;)n=this.m_path>>a&1?n.child2:n.child1,a=a+1&31;++this.m_path;this.RemoveLeaf(n);this.InsertLeaf(n)}};y.prototype.GetFatAABB=function(c){return c.aabb};y.prototype.GetUserData=function(c){return c.userData};y.prototype.Query=function(c,n){if(this.m_root!=null){var e=new Vector,a=0;for(e[a++]=this.m_root;a>0;){var s=e[--a];if(s.aabb.TestOverlap(n))if(s.IsLeaf()){if(!c(s))break}else e[a++]=s.child1,e[a++]=
s.child2}}};y.prototype.RayCast=function(c,e){if(this.m_root!=null){var n=e.p1,a=e.p2,s=k.SubtractVV(n,a);s.Normalize();var s=k.CrossFV(1,s),j=k.AbsV(s),o=e.maxFraction,h=new r,l=0,p=0,l=n.x+o*(a.x-n.x),p=n.y+o*(a.y-n.y);h.lowerBound.x=Math.min(n.x,l);h.lowerBound.y=Math.min(n.y,p);h.upperBound.x=Math.max(n.x,l);h.upperBound.y=Math.max(n.y,p);var m=new Vector,w=0;for(m[w++]=this.m_root;w>0;)if(o=m[--w],o.aabb.TestOverlap(h)!=false&&(l=o.aabb.GetCenter(),p=o.aabb.GetExtents(),!(Math.abs(s.x*(n.x-l.x)+
s.y*(n.y-l.y))-j.x*p.x-j.y*p.y>0)))if(o.IsLeaf()){l=new E;l.p1=e.p1;l.p2=e.p2;l.maxFraction=e.maxFraction;o=c(l,o);if(o==0)break;if(o>0)l=n.x+o*(a.x-n.x),p=n.y+o*(a.y-n.y),h.lowerBound.x=Math.min(n.x,l),h.lowerBound.y=Math.min(n.y,p),h.upperBound.x=Math.max(n.x,l),h.upperBound.y=Math.max(n.y,p)}else m[w++]=o.child1,m[w++]=o.child2}};y.prototype.AllocateNode=function(){if(this.m_freeList){var c=this.m_freeList;this.m_freeList=c.parent;c.parent=null;c.child1=null;c.child2=null;return c}return new C};
y.prototype.FreeNode=function(c){c.parent=this.m_freeList;this.m_freeList=c};y.prototype.InsertLeaf=function(c){++this.m_insertionCount;if(this.m_root==null)this.m_root=c,this.m_root.parent=null;else{var n=c.aabb.GetCenter(),e=this.m_root;if(e.IsLeaf()==false){do var a=e.child1,e=e.child2,s=Math.abs((a.aabb.lowerBound.x+a.aabb.upperBound.x)/2-n.x)+Math.abs((a.aabb.lowerBound.y+a.aabb.upperBound.y)/2-n.y),j=Math.abs((e.aabb.lowerBound.x+e.aabb.upperBound.x)/2-n.x)+Math.abs((e.aabb.lowerBound.y+e.aabb.upperBound.y)/
2-n.y),e=s<j?a:e;while(e.IsLeaf()==false)}n=e.parent;a=this.AllocateNode();a.parent=n;a.userData=null;a.aabb.Combine(c.aabb,e.aabb);if(n){e.parent.child1==e?n.child1=a:n.child2=a;a.child1=e;a.child2=c;e.parent=a;c.parent=a;do{if(n.aabb.Contains(a.aabb))break;n.aabb.Combine(n.child1.aabb,n.child2.aabb);a=n;n=n.parent}while(n)}else a.child1=e,a.child2=c,e.parent=a,this.m_root=c.parent=a}};y.prototype.RemoveLeaf=function(c){if(c==this.m_root)this.m_root=null;else{var n=c.parent,e=n.parent,c=n.child1==
c?n.child2:n.child1;if(e){e.child1==n?e.child1=c:e.child2=c;c.parent=e;for(this.FreeNode(n);e;){n=e.aabb;e.aabb=r.Combine(e.child1.aabb,e.child2.aabb);if(n.Contains(e.aabb))break;e=e.parent}}else this.m_root=c,c.parent=null,this.FreeNode(n)}};G.b2DynamicTreeBroadPhase=function(){this.m_tree=new y;this.m_moveBuffer=new Vector;this.m_pairBuffer=new Vector;this.m_pairCount=0};G.prototype.CreateProxy=function(c,n){var e=this.m_tree.CreateProxy(c,n);++this.m_proxyCount;this.BufferMove(e);return e};G.prototype.DestroyProxy=
function(c){this.UnBufferMove(c);--this.m_proxyCount;this.m_tree.DestroyProxy(c)};G.prototype.MoveProxy=function(c,n,e){this.m_tree.MoveProxy(c,n,e)&&this.BufferMove(c)};G.prototype.TestOverlap=function(c,n){var e=this.m_tree.GetFatAABB(c),a=this.m_tree.GetFatAABB(n);return e.TestOverlap(a)};G.prototype.GetUserData=function(c){return this.m_tree.GetUserData(c)};G.prototype.GetFatAABB=function(c){return this.m_tree.GetFatAABB(c)};G.prototype.GetProxyCount=function(){return this.m_proxyCount};G.prototype.UpdatePairs=
function(c){for(var n=this,e=n.m_pairCount=0,a,e=0;e<n.m_moveBuffer.length;++e){a=n.m_moveBuffer[e];var s=n.m_tree.GetFatAABB(a);n.m_tree.Query(function(c){if(c==a)return true;n.m_pairCount==n.m_pairBuffer.length&&(n.m_pairBuffer[n.m_pairCount]=new J);var e=n.m_pairBuffer[n.m_pairCount];e.proxyA=c<a?c:a;e.proxyB=c>=a?c:a;++n.m_pairCount;return true},s)}for(e=n.m_moveBuffer.length=0;e<n.m_pairCount;){var s=n.m_pairBuffer[e],j=n.m_tree.GetUserData(s.proxyA),o=n.m_tree.GetUserData(s.proxyB);c(j,o);for(++e;e<
n.m_pairCount;){j=n.m_pairBuffer[e];if(j.proxyA!=s.proxyA||j.proxyB!=s.proxyB)break;++e}}};G.prototype.Query=function(c,n){this.m_tree.Query(c,n)};G.prototype.RayCast=function(c,n){this.m_tree.RayCast(c,n)};G.prototype.Validate=function(){};G.prototype.Rebalance=function(c){c===void 0&&(c=0);this.m_tree.Rebalance(c)};G.prototype.BufferMove=function(c){this.m_moveBuffer[this.m_moveBuffer.length]=c};G.prototype.UnBufferMove=function(c){this.m_moveBuffer.splice(parseInt(this.m_moveBuffer.indexOf(c)),
1)};G.prototype.ComparePairs=function(){return 0};G.__implements={};G.__implements[s]=true;C.b2DynamicTreeNode=function(){this.aabb=new r};C.prototype.IsLeaf=function(){return this.child1==null};J.b2DynamicTreePair=function(){};z.b2Manifold=function(){this.m_pointCount=0};z.prototype.b2Manifold=function(){this.m_points=new Vector(g.b2_maxManifoldPoints);for(var c=0;c<g.b2_maxManifoldPoints;c++)this.m_points[c]=new M;this.m_localPlaneNormal=new m;this.m_localPoint=new m};z.prototype.Reset=function(){for(var c=
0;c<g.b2_maxManifoldPoints;c++)(this.m_points[c]instanceof M?this.m_points[c]:null).Reset();this.m_localPlaneNormal.SetZero();this.m_localPoint.SetZero();this.m_pointCount=this.m_type=0};z.prototype.Set=function(c){this.m_pointCount=c.m_pointCount;for(var n=0;n<g.b2_maxManifoldPoints;n++)(this.m_points[n]instanceof M?this.m_points[n]:null).Set(c.m_points[n]);this.m_localPlaneNormal.SetV(c.m_localPlaneNormal);this.m_localPoint.SetV(c.m_localPoint);this.m_type=c.m_type};z.prototype.Copy=function(){var c=
new z;c.Set(this);return c};Box2D.postDefs.push(function(){Box2D.Collision.b2Manifold.e_circles=1;Box2D.Collision.b2Manifold.e_faceA=2;Box2D.Collision.b2Manifold.e_faceB=4});M.b2ManifoldPoint=function(){this.m_localPoint=new m;this.m_id=new u};M.prototype.b2ManifoldPoint=function(){this.Reset()};M.prototype.Reset=function(){this.m_localPoint.SetZero();this.m_tangentImpulse=this.m_normalImpulse=0;this.m_id.key=0};M.prototype.Set=function(c){this.m_localPoint.SetV(c.m_localPoint);this.m_normalImpulse=
c.m_normalImpulse;this.m_tangentImpulse=c.m_tangentImpulse;this.m_id.Set(c.m_id)};B.b2Point=function(){this.p=new m};B.prototype.Support=function(){return this.p};B.prototype.GetFirstVertex=function(){return this.p};E.b2RayCastInput=function(){this.p1=new m;this.p2=new m};E.prototype.b2RayCastInput=function(c,n,e){c===void 0&&(c=null);n===void 0&&(n=null);e===void 0&&(e=1);c&&this.p1.SetV(c);n&&this.p2.SetV(n);this.maxFraction=e};N.b2RayCastOutput=function(){this.normal=new m};K.b2Segment=function(){this.p1=
new m;this.p2=new m};K.prototype.TestSegment=function(c,n,e,a){a===void 0&&(a=0);var s=e.p1,j=e.p2.x-s.x,o=e.p2.y-s.y,e=this.p2.y-this.p1.y,h=-(this.p2.x-this.p1.x),l=100*Number.MIN_VALUE,p=-(j*e+o*h);if(p>l){var m=s.x-this.p1.x,w=s.y-this.p1.y,s=m*e+w*h;if(0<=s&&s<=a*p&&(a=-j*w+o*m,-l*p<=a&&a<=p*(1+l)))return s/=p,a=Math.sqrt(e*e+h*h),e/=a,h/=a,c[0]=s,n.Set(e,h),true}return false};K.prototype.Extend=function(c){this.ExtendForward(c);this.ExtendBackward(c)};K.prototype.ExtendForward=function(c){var n=
this.p2.x-this.p1.x,e=this.p2.y-this.p1.y,c=Math.min(n>0?(c.upperBound.x-this.p1.x)/n:n<0?(c.lowerBound.x-this.p1.x)/n:Number.POSITIVE_INFINITY,e>0?(c.upperBound.y-this.p1.y)/e:e<0?(c.lowerBound.y-this.p1.y)/e:Number.POSITIVE_INFINITY);this.p2.x=this.p1.x+n*c;this.p2.y=this.p1.y+e*c};K.prototype.ExtendBackward=function(c){var n=-this.p2.x+this.p1.x,e=-this.p2.y+this.p1.y,c=Math.min(n>0?(c.upperBound.x-this.p2.x)/n:n<0?(c.lowerBound.x-this.p2.x)/n:Number.POSITIVE_INFINITY,e>0?(c.upperBound.y-this.p2.y)/
e:e<0?(c.lowerBound.y-this.p2.y)/e:Number.POSITIVE_INFINITY);this.p1.x=this.p2.x+n*c;this.p1.y=this.p2.y+e*c};e.b2SeparationFunction=function(){this.m_localPoint=new m;this.m_axis=new m};e.prototype.Initialize=function(c,n,a,s,j){this.m_proxyA=n;this.m_proxyB=s;var o=parseInt(c.count);g.b2Assert(0<o&&o<3);var h,l,p,w,b=w=p=s=n=0,A=0,b=0;o==1?(this.m_type=e.e_points,h=this.m_proxyA.GetVertex(c.indexA[0]),l=this.m_proxyB.GetVertex(c.indexB[0]),o=h,c=a.R,n=a.position.x+(c.col1.x*o.x+c.col2.x*o.y),s=
a.position.y+(c.col1.y*o.x+c.col2.y*o.y),o=l,c=j.R,p=j.position.x+(c.col1.x*o.x+c.col2.x*o.y),w=j.position.y+(c.col1.y*o.x+c.col2.y*o.y),this.m_axis.x=p-n,this.m_axis.y=w-s,this.m_axis.Normalize()):(c.indexB[0]==c.indexB[1]?(this.m_type=e.e_faceA,n=this.m_proxyA.GetVertex(c.indexA[0]),s=this.m_proxyA.GetVertex(c.indexA[1]),l=this.m_proxyB.GetVertex(c.indexB[0]),this.m_localPoint.x=0.5*(n.x+s.x),this.m_localPoint.y=0.5*(n.y+s.y),this.m_axis=k.CrossVF(k.SubtractVV(s,n),1),this.m_axis.Normalize(),o=
this.m_axis,c=a.R,b=c.col1.x*o.x+c.col2.x*o.y,A=c.col1.y*o.x+c.col2.y*o.y,o=this.m_localPoint,c=a.R,n=a.position.x+(c.col1.x*o.x+c.col2.x*o.y),s=a.position.y+(c.col1.y*o.x+c.col2.y*o.y),o=l,c=j.R,p=j.position.x+(c.col1.x*o.x+c.col2.x*o.y),w=j.position.y+(c.col1.y*o.x+c.col2.y*o.y),b=(p-n)*b+(w-s)*A):c.indexA[0]==c.indexA[0]?(this.m_type=e.e_faceB,p=this.m_proxyB.GetVertex(c.indexB[0]),w=this.m_proxyB.GetVertex(c.indexB[1]),h=this.m_proxyA.GetVertex(c.indexA[0]),this.m_localPoint.x=0.5*(p.x+w.x),this.m_localPoint.y=
0.5*(p.y+w.y),this.m_axis=k.CrossVF(k.SubtractVV(w,p),1),this.m_axis.Normalize(),o=this.m_axis,c=j.R,b=c.col1.x*o.x+c.col2.x*o.y,A=c.col1.y*o.x+c.col2.y*o.y,o=this.m_localPoint,c=j.R,p=j.position.x+(c.col1.x*o.x+c.col2.x*o.y),w=j.position.y+(c.col1.y*o.x+c.col2.y*o.y),o=h,c=a.R,n=a.position.x+(c.col1.x*o.x+c.col2.x*o.y),s=a.position.y+(c.col1.y*o.x+c.col2.y*o.y),b=(n-p)*b+(s-w)*A):(n=this.m_proxyA.GetVertex(c.indexA[0]),s=this.m_proxyA.GetVertex(c.indexA[1]),p=this.m_proxyB.GetVertex(c.indexB[0]),
w=this.m_proxyB.GetVertex(c.indexB[1]),k.MulX(a,h),h=k.MulMV(a.R,k.SubtractVV(s,n)),k.MulX(j,l),b=k.MulMV(j.R,k.SubtractVV(w,p)),j=h.x*h.x+h.y*h.y,l=b.x*b.x+b.y*b.y,c=k.SubtractVV(b,h),a=h.x*c.x+h.y*c.y,c=b.x*c.x+b.y*c.y,h=h.x*b.x+h.y*b.y,A=j*l-h*h,b=0,A!=0&&(b=k.Clamp((h*c-a*l)/A,0,1)),(h*b+c)/l<0&&(b=k.Clamp((h-a)/j,0,1)),h=new m,h.x=n.x+b*(s.x-n.x),h.y=n.y+b*(s.y-n.y),l=new m,l.x=p.x+b*(w.x-p.x),l.y=p.y+b*(w.y-p.y),b==0||b==1?(this.m_type=e.e_faceB,this.m_axis=k.CrossVF(k.SubtractVV(w,p),1),this.m_axis.Normalize(),
this.m_localPoint=l):(this.m_type=e.e_faceA,this.m_axis=k.CrossVF(k.SubtractVV(s,n),1),this.m_localPoint=h)),b<0&&this.m_axis.NegativeSelf())};e.prototype.Evaluate=function(c,n){var a,s,o=0;switch(this.m_type){case e.e_points:return a=k.MulTMV(c.R,this.m_axis),s=k.MulTMV(n.R,this.m_axis.GetNegative()),a=this.m_proxyA.GetSupportVertex(a),s=this.m_proxyB.GetSupportVertex(s),a=k.MulX(c,a),s=k.MulX(n,s),o=(s.x-a.x)*this.m_axis.x+(s.y-a.y)*this.m_axis.y;case e.e_faceA:return o=k.MulMV(c.R,this.m_axis),
a=k.MulX(c,this.m_localPoint),s=k.MulTMV(n.R,o.GetNegative()),s=this.m_proxyB.GetSupportVertex(s),s=k.MulX(n,s),o=(s.x-a.x)*o.x+(s.y-a.y)*o.y;case e.e_faceB:return o=k.MulMV(n.R,this.m_axis),s=k.MulX(n,this.m_localPoint),a=k.MulTMV(c.R,o.GetNegative()),a=this.m_proxyA.GetSupportVertex(a),a=k.MulX(c,a),o=(a.x-s.x)*o.x+(a.y-s.y)*o.y;default:return g.b2Assert(false),0}};Box2D.postDefs.push(function(){Box2D.Collision.b2SeparationFunction.e_points=1;Box2D.Collision.b2SeparationFunction.e_faceA=2;Box2D.Collision.b2SeparationFunction.e_faceB=
4});j.b2Simplex=function(){this.m_v1=new o;this.m_v2=new o;this.m_v3=new o;this.m_vertices=new Vector(3)};j.prototype.b2Simplex=function(){this.m_vertices[0]=this.m_v1;this.m_vertices[1]=this.m_v2;this.m_vertices[2]=this.m_v3};j.prototype.ReadCache=function(c,n,e,a,s){g.b2Assert(0<=c.count&&c.count<=3);var o,j;this.m_count=c.count;for(var h=this.m_vertices,l=0;l<this.m_count;l++){var p=h[l];p.indexA=c.indexA[l];p.indexB=c.indexB[l];o=n.GetVertex(p.indexA);j=a.GetVertex(p.indexB);p.wA=k.MulX(e,o);
p.wB=k.MulX(s,j);p.w=k.SubtractVV(p.wB,p.wA);p.a=0}if(this.m_count>1&&(c=c.metric,o=this.GetMetric(),o<0.5*c||2*c<o||o<Number.MIN_VALUE))this.m_count=0;if(this.m_count==0)p=h[0],p.indexA=0,p.indexB=0,o=n.GetVertex(0),j=a.GetVertex(0),p.wA=k.MulX(e,o),p.wB=k.MulX(s,j),p.w=k.SubtractVV(p.wB,p.wA),this.m_count=1};j.prototype.WriteCache=function(c){c.metric=this.GetMetric();c.count=Box2D.parseUInt(this.m_count);for(var n=this.m_vertices,e=0;e<this.m_count;e++)c.indexA[e]=Box2D.parseUInt(n[e].indexA),
c.indexB[e]=Box2D.parseUInt(n[e].indexB)};j.prototype.GetSearchDirection=function(){switch(this.m_count){case 1:return this.m_v1.w.GetNegative();case 2:var c=k.SubtractVV(this.m_v2.w,this.m_v1.w);return k.CrossVV(c,this.m_v1.w.GetNegative())>0?k.CrossFV(1,c):k.CrossVF(c,1);default:return g.b2Assert(false),new m}};j.prototype.GetClosestPoint=function(){switch(this.m_count){case 0:return g.b2Assert(false),new m;case 1:return this.m_v1.w;case 2:return new m(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);default:return g.b2Assert(false),new m}};j.prototype.GetWitnessPoints=function(c,n){switch(this.m_count){case 0:g.b2Assert(false);break;case 1:c.SetV(this.m_v1.wA);n.SetV(this.m_v1.wB);break;case 2:c.x=this.m_v1.a*this.m_v1.wA.x+this.m_v2.a*this.m_v2.wA.x;c.y=this.m_v1.a*this.m_v1.wA.y+this.m_v2.a*this.m_v2.wA.y;n.x=this.m_v1.a*this.m_v1.wB.x+this.m_v2.a*this.m_v2.wB.x;n.y=this.m_v1.a*this.m_v1.wB.y+this.m_v2.a*this.m_v2.wB.y;break;case 3:n.x=c.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.y=c.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;break;default:g.b2Assert(false)}};j.prototype.GetMetric=function(){switch(this.m_count){case 0:return g.b2Assert(false),0;case 1:return 0;case 2:return k.SubtractVV(this.m_v1.w,this.m_v2.w).Length();case 3:return k.CrossVV(k.SubtractVV(this.m_v2.w,this.m_v1.w),k.SubtractVV(this.m_v3.w,this.m_v1.w));default:return g.b2Assert(false),
0}};j.prototype.Solve2=function(){var c=this.m_v1.w,n=this.m_v2.w,e=k.SubtractVV(n,c),c=-(c.x*e.x+c.y*e.y);c<=0?this.m_count=this.m_v1.a=1:(n=n.x*e.x+n.y*e.y,n<=0?(this.m_count=this.m_v2.a=1,this.m_v1.Set(this.m_v2)):(e=1/(n+c),this.m_v1.a=n*e,this.m_v2.a=c*e,this.m_count=2))};j.prototype.Solve3=function(){var c=this.m_v1.w,n=this.m_v2.w,e=this.m_v3.w,a=k.SubtractVV(n,c),s=k.Dot(c,a),o=k.Dot(n,a),s=-s,j=k.SubtractVV(e,c),h=k.Dot(c,j),l=k.Dot(e,j),h=-h,p=k.SubtractVV(e,n),w=k.Dot(n,p),p=k.Dot(e,p),
w=-w,j=k.CrossVV(a,j),a=j*k.CrossVV(n,e),e=j*k.CrossVV(e,c),c=j*k.CrossVV(c,n);s<=0&&h<=0?this.m_count=this.m_v1.a=1:o>0&&s>0&&c<=0?(l=1/(o+s),this.m_v1.a=o*l,this.m_v2.a=s*l,this.m_count=2):l>0&&h>0&&e<=0?(o=1/(l+h),this.m_v1.a=l*o,this.m_v3.a=h*o,this.m_count=2,this.m_v2.Set(this.m_v3)):o<=0&&w<=0?(this.m_count=this.m_v2.a=1,this.m_v1.Set(this.m_v2)):l<=0&&p<=0?(this.m_count=this.m_v3.a=1,this.m_v1.Set(this.m_v3)):p>0&&w>0&&a<=0?(o=1/(p+w),this.m_v2.a=p*o,this.m_v3.a=w*o,this.m_count=2,this.m_v1.Set(this.m_v3)):
(o=1/(a+e+c),this.m_v1.a=a*o,this.m_v2.a=e*o,this.m_v3.a=c*o,this.m_count=3)};h.b2SimplexCache=function(){this.indexA=new Vector_a2j_Number(3);this.indexB=new Vector_a2j_Number(3)};o.b2SimplexVertex=function(){};o.prototype.Set=function(c){this.wA.SetV(c.wA);this.wB.SetV(c.wB);this.w.SetV(c.w);this.a=c.a;this.indexA=c.indexA;this.indexB=c.indexB};w.b2TimeOfImpact=function(){};w.TimeOfImpact=function(c){++w.b2_toiCalls;var n=c.proxyA,e=c.proxyB,a=c.sweepA,s=c.sweepB;g.b2Assert(a.t0==s.t0);g.b2Assert(1-
a.t0>Number.MIN_VALUE);var o=n.m_radius+e.m_radius,c=c.tolerance,j=0,h=0,l=0;w.s_cache.count=0;for(w.s_distanceInput.useRadii=false;;){a.GetTransform(w.s_xfA,j);s.GetTransform(w.s_xfB,j);w.s_distanceInput.proxyA=n;w.s_distanceInput.proxyB=e;w.s_distanceInput.transformA=w.s_xfA;w.s_distanceInput.transformB=w.s_xfB;L.Distance(w.s_distanceOutput,w.s_cache,w.s_distanceInput);if(w.s_distanceOutput.distance<=0){j=1;break}w.s_fcn.Initialize(w.s_cache,n,w.s_xfA,e,w.s_xfB);var p=w.s_fcn.Evaluate(w.s_xfA,w.s_xfB);
if(p<=0){j=1;break}h==0&&(l=p>o?k.Max(o-c,0.75*o):k.Max(p-c,0.02*o));if(p-l<0.5*c){if(h==0){j=1;break}break}var b=j,m=j,A=1;a.GetTransform(w.s_xfA,A);s.GetTransform(w.s_xfB,A);var d=w.s_fcn.Evaluate(w.s_xfA,w.s_xfB);if(d>=l){j=1;break}for(var f=0;;){var y=0,y=f&1?m+(l-p)*(A-m)/(d-p):0.5*(m+A);a.GetTransform(w.s_xfA,y);s.GetTransform(w.s_xfB,y);var r=w.s_fcn.Evaluate(w.s_xfA,w.s_xfB);if(k.Abs(r-l)<0.025*c){b=y;break}r>l?(m=y,p=r):(A=y,d=r);++f;++w.b2_toiRootIters;if(f==50)break}w.b2_toiMaxRootIters=
k.Max(w.b2_toiMaxRootIters,f);if(b<(1+100*Number.MIN_VALUE)*j)break;j=b;h++;++w.b2_toiIters;if(h==1E3)break}w.b2_toiMaxIters=k.Max(w.b2_toiMaxIters,h);return j};Box2D.postDefs.push(function(){Box2D.Collision.b2TimeOfImpact.b2_toiCalls=0;Box2D.Collision.b2TimeOfImpact.b2_toiIters=0;Box2D.Collision.b2TimeOfImpact.b2_toiMaxIters=0;Box2D.Collision.b2TimeOfImpact.b2_toiRootIters=0;Box2D.Collision.b2TimeOfImpact.b2_toiMaxRootIters=0;Box2D.Collision.b2TimeOfImpact.s_cache=new h;Box2D.Collision.b2TimeOfImpact.s_distanceInput=
new F;Box2D.Collision.b2TimeOfImpact.s_xfA=new q;Box2D.Collision.b2TimeOfImpact.s_xfB=new q;Box2D.Collision.b2TimeOfImpact.s_fcn=new e;Box2D.Collision.b2TimeOfImpact.s_distanceOutput=new l});A.b2TOIInput=function(){this.proxyA=new H;this.proxyB=new H;this.sweepA=new d;this.sweepB=new d};p.b2WorldManifold=function(){this.m_normal=new m};p.prototype.b2WorldManifold=function(){this.m_points=new Vector(g.b2_maxManifoldPoints);for(var c=0;c<g.b2_maxManifoldPoints;c++)this.m_points[c]=new m};p.prototype.Initialize=
function(c,n,e,a,s){e===void 0&&(e=0);s===void 0&&(s=0);if(c.m_pointCount!=0){var o=0,j,h,l=0,p=0,w=0,b=0,m=0;j=0;switch(c.m_type){case z.e_circles:h=n.R;j=c.m_localPoint;o=n.position.x+h.col1.x*j.x+h.col2.x*j.y;n=n.position.y+h.col1.y*j.x+h.col2.y*j.y;h=a.R;j=c.m_points[0].m_localPoint;c=a.position.x+h.col1.x*j.x+h.col2.x*j.y;a=a.position.y+h.col1.y*j.x+h.col2.y*j.y;j=c-o;h=a-n;l=j*j+h*h;l>Number.MIN_VALUE*Number.MIN_VALUE?(l=Math.sqrt(l),this.m_normal.x=j/l,this.m_normal.y=h/l):(this.m_normal.x=
1,this.m_normal.y=0);j=n+e*this.m_normal.y;a-=s*this.m_normal.y;this.m_points[0].x=0.5*(o+e*this.m_normal.x+(c-s*this.m_normal.x));this.m_points[0].y=0.5*(j+a);break;case z.e_faceA:h=n.R;j=c.m_localPlaneNormal;l=h.col1.x*j.x+h.col2.x*j.y;p=h.col1.y*j.x+h.col2.y*j.y;h=n.R;j=c.m_localPoint;w=n.position.x+h.col1.x*j.x+h.col2.x*j.y;b=n.position.y+h.col1.y*j.x+h.col2.y*j.y;this.m_normal.x=l;this.m_normal.y=p;for(o=0;o<c.m_pointCount;o++)h=a.R,j=c.m_points[o].m_localPoint,m=a.position.x+h.col1.x*j.x+h.col2.x*
j.y,j=a.position.y+h.col1.y*j.x+h.col2.y*j.y,this.m_points[o].x=m+0.5*(e-(m-w)*l-(j-b)*p-s)*l,this.m_points[o].y=j+0.5*(e-(m-w)*l-(j-b)*p-s)*p;break;case z.e_faceB:h=a.R;j=c.m_localPlaneNormal;l=h.col1.x*j.x+h.col2.x*j.y;p=h.col1.y*j.x+h.col2.y*j.y;h=a.R;j=c.m_localPoint;w=a.position.x+h.col1.x*j.x+h.col2.x*j.y;b=a.position.y+h.col1.y*j.x+h.col2.y*j.y;this.m_normal.x=-l;this.m_normal.y=-p;for(o=0;o<c.m_pointCount;o++)h=n.R,j=c.m_points[o].m_localPoint,m=n.position.x+h.col1.x*j.x+h.col2.x*j.y,j=n.position.y+
h.col1.y*j.x+h.col2.y*j.y,this.m_points[o].x=m+0.5*(s-(m-w)*l-(j-b)*p-e)*l,this.m_points[o].y=j+0.5*(s-(m-w)*l-(j-b)*p-e)*p}}};c.ClipVertex=function(){this.v=new m;this.id=new u};c.prototype.Set=function(c){this.v.SetV(c.v);this.id.Set(c.id)};n.Features=function(){};Object.defineProperty(n.prototype,"referenceEdge",{enumerable:false,configurable:true,get:function(){return this._referenceEdge}});Object.defineProperty(n.prototype,"referenceEdge",{enumerable:false,configurable:true,set:function(c){c===
void 0&&(c=0);this._referenceEdge=c;this._m_id._key=this._m_id._key&4294967040|this._referenceEdge&255}});Object.defineProperty(n.prototype,"incidentEdge",{enumerable:false,configurable:true,get:function(){return this._incidentEdge}});Object.defineProperty(n.prototype,"incidentEdge",{enumerable:false,configurable:true,set:function(c){c===void 0&&(c=0);this._incidentEdge=c;this._m_id._key=this._m_id._key&4294902015|this._incidentEdge<<8&65280}});Object.defineProperty(n.prototype,"incidentVertex",{enumerable:false,
configurable:true,get:function(){return this._incidentVertex}});Object.defineProperty(n.prototype,"incidentVertex",{enumerable:false,configurable:true,set:function(c){c===void 0&&(c=0);this._incidentVertex=c;this._m_id._key=this._m_id._key&4278255615|this._incidentVertex<<16&16711680}});Object.defineProperty(n.prototype,"flip",{enumerable:false,configurable:true,get:function(){return this._flip}});Object.defineProperty(n.prototype,"flip",{enumerable:false,configurable:true,set:function(c){c===void 0&&
(c=0);this._flip=c;this._m_id._key=this._m_id._key&16777215|this._flip<<24&4278190080}})})();
(function(){var a=Box2D.Common.b2Settings,b=Box2D.Collision.Shapes.b2CircleShape,f=Box2D.Collision.Shapes.b2EdgeChainDef,g=Box2D.Collision.Shapes.b2EdgeShape,k=Box2D.Collision.Shapes.b2MassData,d=Box2D.Collision.Shapes.b2PolygonShape,q=Box2D.Collision.Shapes.b2Shape,m=Box2D.Common.Math.b2Mat22,r=Box2D.Common.Math.b2Math,I=Box2D.Common.Math.b2Transform,D=Box2D.Common.Math.b2Vec2,v=Box2D.Collision.b2Distance,u=Box2D.Collision.b2DistanceInput,t=Box2D.Collision.b2DistanceOutput,L=Box2D.Collision.b2DistanceProxy,
F=Box2D.Collision.b2SimplexCache;Box2D.inherit(b,Box2D.Collision.Shapes.b2Shape);b.prototype.__super=Box2D.Collision.Shapes.b2Shape.prototype;b.b2CircleShape=function(){Box2D.Collision.Shapes.b2Shape.b2Shape.apply(this,arguments);this.m_p=new D};b.prototype.Copy=function(){var a=new b;a.Set(this);return a};b.prototype.Set=function(a){this.__super.Set.call(this,a);Box2D.is(a,b)&&this.m_p.SetV((a instanceof b?a:null).m_p)};b.prototype.TestPoint=function(a,m){var b=a.R,d=a.position.x+(b.col1.x*this.m_p.x+
b.col2.x*this.m_p.y),b=a.position.y+(b.col1.y*this.m_p.x+b.col2.y*this.m_p.y),d=m.x-d,b=m.y-b;return d*d+b*b<=this.m_radius*this.m_radius};b.prototype.RayCast=function(a,b,m){var d=m.R,g=b.p1.x-(m.position.x+(d.col1.x*this.m_p.x+d.col2.x*this.m_p.y)),m=b.p1.y-(m.position.y+(d.col1.y*this.m_p.x+d.col2.y*this.m_p.y)),d=b.p2.x-b.p1.x,k=b.p2.y-b.p1.y,f=g*d+m*k,r=d*d+k*k,t=f*f-r*(g*g+m*m-this.m_radius*this.m_radius);if(t<0||r<Number.MIN_VALUE)return false;f=-(f+Math.sqrt(t));return 0<=f&&f<=b.maxFraction*
r?(f/=r,a.fraction=f,a.normal.x=g+f*d,a.normal.y=m+f*k,a.normal.Normalize(),true):false};b.prototype.ComputeAABB=function(a,b){var m=b.R,d=b.position.x+(m.col1.x*this.m_p.x+m.col2.x*this.m_p.y),m=b.position.y+(m.col1.y*this.m_p.x+m.col2.y*this.m_p.y);a.lowerBound.Set(d-this.m_radius,m-this.m_radius);a.upperBound.Set(d+this.m_radius,m+this.m_radius)};b.prototype.ComputeMass=function(l,b){b===void 0&&(b=0);l.mass=b*a.b2_pi*this.m_radius*this.m_radius;l.center.SetV(this.m_p);l.I=l.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))};b.prototype.ComputeSubmergedArea=function(a,b,m,d){b===void 0&&(b=0);var m=r.MulX(m,this.m_p),g=-(r.Dot(a,m)-b);if(g<-this.m_radius+Number.MIN_VALUE)return 0;if(g>this.m_radius)return d.SetV(m),Math.PI*this.m_radius*this.m_radius;var b=this.m_radius*this.m_radius,k=g*g,g=b*(Math.asin(g/this.m_radius)+Math.PI/2)+g*Math.sqrt(b-k),b=-2/3*Math.pow(b-k,1.5)/g;d.x=m.x+a.x*b;d.y=m.y+a.y*b;return g};b.prototype.GetLocalPosition=function(){return this.m_p};
b.prototype.SetLocalPosition=function(a){this.m_p.SetV(a)};b.prototype.GetRadius=function(){return this.m_radius};b.prototype.SetRadius=function(a){a===void 0&&(a=0);this.m_radius=a};b.prototype.b2CircleShape=function(a){a===void 0&&(a=0);this.__super.b2Shape.call(this);this.m_type=q.e_circleShape;this.m_radius=a};f.b2EdgeChainDef=function(){};f.prototype.b2EdgeChainDef=function(){this.vertexCount=0;this.isALoop=true;this.vertices=[]};Box2D.inherit(g,Box2D.Collision.Shapes.b2Shape);g.prototype.__super=
Box2D.Collision.Shapes.b2Shape.prototype;g.b2EdgeShape=function(){Box2D.Collision.Shapes.b2Shape.b2Shape.apply(this,arguments);this.s_supportVec=new D;this.m_v1=new D;this.m_v2=new D;this.m_coreV1=new D;this.m_coreV2=new D;this.m_normal=new D;this.m_direction=new D;this.m_cornerDir1=new D;this.m_cornerDir2=new D};g.prototype.TestPoint=function(){return false};g.prototype.RayCast=function(a,b,m){var d,g=b.p2.x-b.p1.x,k=b.p2.y-b.p1.y;d=m.R;var f=m.position.x+(d.col1.x*this.m_v1.x+d.col2.x*this.m_v1.y),
r=m.position.y+(d.col1.y*this.m_v1.x+d.col2.y*this.m_v1.y),t=m.position.y+(d.col1.y*this.m_v2.x+d.col2.y*this.m_v2.y)-r,m=-(m.position.x+(d.col1.x*this.m_v2.x+d.col2.x*this.m_v2.y)-f);d=100*Number.MIN_VALUE;var u=-(g*t+k*m);if(u>d){var f=b.p1.x-f,v=b.p1.y-r,r=f*t+v*m;if(0<=r&&r<=b.maxFraction*u&&(b=-g*v+k*f,-d*u<=b&&b<=u*(1+d)))return r/=u,a.fraction=r,b=Math.sqrt(t*t+m*m),a.normal.x=t/b,a.normal.y=m/b,true}return false};g.prototype.ComputeAABB=function(a,b){var m=b.R,d=b.position.x+(m.col1.x*this.m_v1.x+
m.col2.x*this.m_v1.y),g=b.position.y+(m.col1.y*this.m_v1.x+m.col2.y*this.m_v1.y),k=b.position.x+(m.col1.x*this.m_v2.x+m.col2.x*this.m_v2.y),m=b.position.y+(m.col1.y*this.m_v2.x+m.col2.y*this.m_v2.y);d<k?(a.lowerBound.x=d,a.upperBound.x=k):(a.lowerBound.x=k,a.upperBound.x=d);g<m?(a.lowerBound.y=g,a.upperBound.y=m):(a.lowerBound.y=m,a.upperBound.y=g)};g.prototype.ComputeMass=function(a){a.mass=0;a.center.SetV(this.m_v1);a.I=0};g.prototype.ComputeSubmergedArea=function(a,b,m,d){b===void 0&&(b=0);var g=
new D(a.x*b,a.y*b),k=r.MulX(m,this.m_v1),m=r.MulX(m,this.m_v2),f=r.Dot(a,k)-b,a=r.Dot(a,m)-b;if(f>0)if(a>0)return 0;else k.x=-a/(f-a)*k.x+f/(f-a)*m.x,k.y=-a/(f-a)*k.y+f/(f-a)*m.y;else if(a>0)m.x=-a/(f-a)*k.x+f/(f-a)*m.x,m.y=-a/(f-a)*k.y+f/(f-a)*m.y;d.x=(g.x+k.x+m.x)/3;d.y=(g.y+k.y+m.y)/3;return 0.5*((k.x-g.x)*(m.y-g.y)-(k.y-g.y)*(m.x-g.x))};g.prototype.GetLength=function(){return this.m_length};g.prototype.GetVertex1=function(){return this.m_v1};g.prototype.GetVertex2=function(){return this.m_v2};
g.prototype.GetCoreVertex1=function(){return this.m_coreV1};g.prototype.GetCoreVertex2=function(){return this.m_coreV2};g.prototype.GetNormalVector=function(){return this.m_normal};g.prototype.GetDirectionVector=function(){return this.m_direction};g.prototype.GetCorner1Vector=function(){return this.m_cornerDir1};g.prototype.GetCorner2Vector=function(){return this.m_cornerDir2};g.prototype.Corner1IsConvex=function(){return this.m_cornerConvex1};g.prototype.Corner2IsConvex=function(){return this.m_cornerConvex2};
g.prototype.GetFirstVertex=function(a){var m=a.R;return new D(a.position.x+(m.col1.x*this.m_coreV1.x+m.col2.x*this.m_coreV1.y),a.position.y+(m.col1.y*this.m_coreV1.x+m.col2.y*this.m_coreV1.y))};g.prototype.GetNextEdge=function(){return this.m_nextEdge};g.prototype.GetPrevEdge=function(){return this.m_prevEdge};g.prototype.Support=function(a,m,b){m===void 0&&(m=0);b===void 0&&(b=0);var d=a.R,g=a.position.x+(d.col1.x*this.m_coreV1.x+d.col2.x*this.m_coreV1.y),k=a.position.y+(d.col1.y*this.m_coreV1.x+
d.col2.y*this.m_coreV1.y),f=a.position.x+(d.col1.x*this.m_coreV2.x+d.col2.x*this.m_coreV2.y),a=a.position.y+(d.col1.y*this.m_coreV2.x+d.col2.y*this.m_coreV2.y);g*m+k*b>f*m+a*b?(this.s_supportVec.x=g,this.s_supportVec.y=k):(this.s_supportVec.x=f,this.s_supportVec.y=a);return this.s_supportVec};g.prototype.b2EdgeShape=function(m,b){this.__super.b2Shape.call(this);this.m_type=q.e_edgeShape;this.m_nextEdge=this.m_prevEdge=null;this.m_v1=m;this.m_v2=b;this.m_direction.Set(this.m_v2.x-this.m_v1.x,this.m_v2.y-
this.m_v1.y);this.m_length=this.m_direction.Normalize();this.m_normal.Set(this.m_direction.y,-this.m_direction.x);this.m_coreV1.Set(-a.b2_toiSlop*(this.m_normal.x-this.m_direction.x)+this.m_v1.x,-a.b2_toiSlop*(this.m_normal.y-this.m_direction.y)+this.m_v1.y);this.m_coreV2.Set(-a.b2_toiSlop*(this.m_normal.x+this.m_direction.x)+this.m_v2.x,-a.b2_toiSlop*(this.m_normal.y+this.m_direction.y)+this.m_v2.y);this.m_cornerDir1=this.m_normal;this.m_cornerDir2.Set(-this.m_normal.x,-this.m_normal.y)};g.prototype.SetPrevEdge=
function(a,m,b,d){this.m_prevEdge=a;this.m_coreV1=m;this.m_cornerDir1=b;this.m_cornerConvex1=d};g.prototype.SetNextEdge=function(a,m,b,d){this.m_nextEdge=a;this.m_coreV2=m;this.m_cornerDir2=b;this.m_cornerConvex2=d};k.b2MassData=function(){this.mass=0;this.center=new D(0,0);this.I=0};Box2D.inherit(d,Box2D.Collision.Shapes.b2Shape);d.prototype.__super=Box2D.Collision.Shapes.b2Shape.prototype;d.b2PolygonShape=function(){Box2D.Collision.Shapes.b2Shape.b2Shape.apply(this,arguments)};d.prototype.Copy=
function(){var a=new d;a.Set(this);return a};d.prototype.Set=function(a){this.__super.Set.call(this,a);if(Box2D.is(a,d)){a=a instanceof d?a:null;this.m_centroid.SetV(a.m_centroid);this.m_vertexCount=a.m_vertexCount;this.Reserve(this.m_vertexCount);for(var m=0;m<this.m_vertexCount;m++)this.m_vertices[m].SetV(a.m_vertices[m]),this.m_normals[m].SetV(a.m_normals[m])}};d.prototype.SetAsArray=function(a,m){m===void 0&&(m=0);for(var b=new Vector,d=0,g,d=0;d<a.length;++d)g=a[d],b.push(g);this.SetAsVector(b,
m)};d.AsArray=function(a,m){m===void 0&&(m=0);var b=new d;b.SetAsArray(a,m);return b};d.prototype.SetAsVector=function(m,b){b===void 0&&(b=0);if(b==0)b=m.length;a.b2Assert(2<=b);this.m_vertexCount=b;this.Reserve(b);for(var g=0,g=0;g<this.m_vertexCount;g++)this.m_vertices[g].SetV(m[g]);for(g=0;g<this.m_vertexCount;++g){var k=parseInt(g),f=parseInt(g+1<this.m_vertexCount?g+1:0),k=r.SubtractVV(this.m_vertices[f],this.m_vertices[k]);a.b2Assert(k.LengthSquared()>Number.MIN_VALUE);this.m_normals[g].SetV(r.CrossVF(k,
1));this.m_normals[g].Normalize()}this.m_centroid=d.ComputeCentroid(this.m_vertices,this.m_vertexCount)};d.AsVector=function(a,m){m===void 0&&(m=0);var b=new d;b.SetAsVector(a,m);return b};d.prototype.SetAsBox=function(a,m){a===void 0&&(a=0);m===void 0&&(m=0);this.m_vertexCount=4;this.Reserve(4);this.m_vertices[0].Set(-a,-m);this.m_vertices[1].Set(a,-m);this.m_vertices[2].Set(a,m);this.m_vertices[3].Set(-a,m);this.m_normals[0].Set(0,-1);this.m_normals[1].Set(1,0);this.m_normals[2].Set(0,1);this.m_normals[3].Set(-1,
0);this.m_centroid.SetZero()};d.AsBox=function(a,m){a===void 0&&(a=0);m===void 0&&(m=0);var b=new d;b.SetAsBox(a,m);return b};d.prototype.SetAsOrientedBox=function(a,m,b,d){a===void 0&&(a=0);m===void 0&&(m=0);b===void 0&&(b=null);d===void 0&&(d=0);this.m_vertexCount=4;this.Reserve(4);this.m_vertices[0].Set(-a,-m);this.m_vertices[1].Set(a,-m);this.m_vertices[2].Set(a,m);this.m_vertices[3].Set(-a,m);this.m_normals[0].Set(0,-1);this.m_normals[1].Set(1,0);this.m_normals[2].Set(0,1);this.m_normals[3].Set(-1,
0);this.m_centroid=b;a=new I;a.position=b;a.R.Set(d);for(b=0;b<this.m_vertexCount;++b)this.m_vertices[b]=r.MulX(a,this.m_vertices[b]),this.m_normals[b]=r.MulMV(a.R,this.m_normals[b])};d.AsOrientedBox=function(a,m,b,g){a===void 0&&(a=0);m===void 0&&(m=0);b===void 0&&(b=null);g===void 0&&(g=0);var k=new d;k.SetAsOrientedBox(a,m,b,g);return k};d.prototype.SetAsEdge=function(a,m){this.m_vertexCount=2;this.Reserve(2);this.m_vertices[0].SetV(a);this.m_vertices[1].SetV(m);this.m_centroid.x=0.5*(a.x+m.x);
this.m_centroid.y=0.5*(a.y+m.y);this.m_normals[0]=r.CrossVF(r.SubtractVV(m,a),1);this.m_normals[0].Normalize();this.m_normals[1].x=-this.m_normals[0].x;this.m_normals[1].y=-this.m_normals[0].y};d.AsEdge=function(a,m){var b=new d;b.SetAsEdge(a,m);return b};d.prototype.TestPoint=function(a,m){var b;b=a.R;for(var d=m.x-a.position.x,g=m.y-a.position.y,k=d*b.col1.x+g*b.col1.y,f=d*b.col2.x+g*b.col2.y,r=0;r<this.m_vertexCount;++r)if(b=this.m_vertices[r],d=k-b.x,g=f-b.y,b=this.m_normals[r],b.x*d+b.y*g>0)return false;
return true};d.prototype.RayCast=function(a,m,b){var d=0,g=m.maxFraction,k=0,f=0,r,t,k=m.p1.x-b.position.x,f=m.p1.y-b.position.y;r=b.R;var u=k*r.col1.x+f*r.col1.y,v=k*r.col2.x+f*r.col2.y,k=m.p2.x-b.position.x,f=m.p2.y-b.position.y;r=b.R;m=k*r.col1.x+f*r.col1.y-u;r=k*r.col2.x+f*r.col2.y-v;for(var q=-1,e=0;e<this.m_vertexCount;++e){t=this.m_vertices[e];k=t.x-u;f=t.y-v;t=this.m_normals[e];k=t.x*k+t.y*f;f=t.x*m+t.y*r;if(f==0){if(k<0)return false}else f<0&&k<d*f?(d=k/f,q=e):f>0&&k<g*f&&(g=k/f);if(g<d-
Number.MIN_VALUE)return false}return q>=0?(a.fraction=d,r=b.R,t=this.m_normals[q],a.normal.x=r.col1.x*t.x+r.col2.x*t.y,a.normal.y=r.col1.y*t.x+r.col2.y*t.y,true):false};d.prototype.ComputeAABB=function(a,m){for(var b=m.R,d=this.m_vertices[0],g=m.position.x+(b.col1.x*d.x+b.col2.x*d.y),k=m.position.y+(b.col1.y*d.x+b.col2.y*d.y),f=g,r=k,t=1;t<this.m_vertexCount;++t)var d=this.m_vertices[t],u=m.position.x+(b.col1.x*d.x+b.col2.x*d.y),d=m.position.y+(b.col1.y*d.x+b.col2.y*d.y),g=g<u?g:u,k=k<d?k:d,f=f>u?
f:u,r=r>d?r:d;a.lowerBound.x=g-this.m_radius;a.lowerBound.y=k-this.m_radius;a.upperBound.x=f+this.m_radius;a.upperBound.y=r+this.m_radius};d.prototype.ComputeMass=function(a,m){m===void 0&&(m=0);if(this.m_vertexCount==2)a.center.x=0.5*(this.m_vertices[0].x+this.m_vertices[1].x),a.center.y=0.5*(this.m_vertices[0].y+this.m_vertices[1].y),a.mass=0,a.I=0;else{for(var b=0,d=0,g=0,k=0,f=1/3,r=0;r<this.m_vertexCount;++r){var t=this.m_vertices[r],u=r+1<this.m_vertexCount?this.m_vertices[parseInt(r+1)]:this.m_vertices[0],
v=t.x-0,q=t.y-0,e=u.x-0,j=u.y-0,h=v*j-q*e,o=0.5*h;g+=o;b+=o*f*(0+t.x+u.x);d+=o*f*(0+t.y+u.y);t=v;k+=h*(f*(0.25*(t*t+e*t+e*e)+(0*t+0*e))+0+(f*(0.25*(q*q+j*q+j*j)+(0*q+0*j))+0))}a.mass=m*g;b*=1/g;d*=1/g;a.center.Set(b,d);a.I=m*k}};d.prototype.ComputeSubmergedArea=function(a,m,b,d){m===void 0&&(m=0);for(var g=r.MulTMV(b.R,a),f=m-r.Dot(a,b.position),t=new Vector_a2j_Number,u=0,v=-1,m=-1,q=false,a=a=0;a<this.m_vertexCount;++a){t[a]=r.Dot(g,this.m_vertices[a])-f;var I=t[a]<-Number.MIN_VALUE;a>0&&(I?q||
(v=a-1,u++):q&&(m=a-1,u++));q=I}switch(u){case 0:return q?(a=new k,this.ComputeMass(a,1),d.SetV(r.MulX(b,a.center)),a.mass):0;case 1:v==-1?v=this.m_vertexCount-1:m=this.m_vertexCount-1}a=parseInt((v+1)%this.m_vertexCount);g=parseInt((m+1)%this.m_vertexCount);f=(0-t[v])/(t[a]-t[v]);t=(0-t[m])/(t[g]-t[m]);v=new D(this.m_vertices[v].x*(1-f)+this.m_vertices[a].x*f,this.m_vertices[v].y*(1-f)+this.m_vertices[a].y*f);m=new D(this.m_vertices[m].x*(1-t)+this.m_vertices[g].x*t,this.m_vertices[m].y*(1-t)+this.m_vertices[g].y*
t);t=0;f=new D;for(u=this.m_vertices[a];a!=g;)a=(a+1)%this.m_vertexCount,q=a==g?m:this.m_vertices[a],I=0.5*((u.x-v.x)*(q.y-v.y)-(u.y-v.y)*(q.x-v.x)),t+=I,f.x+=I*(v.x+u.x+q.x)/3,f.y+=I*(v.y+u.y+q.y)/3,u=q;f.Multiply(1/t);d.SetV(r.MulX(b,f));return t};d.prototype.GetVertexCount=function(){return this.m_vertexCount};d.prototype.GetVertices=function(){return this.m_vertices};d.prototype.GetNormals=function(){return this.m_normals};d.prototype.GetSupport=function(a){for(var m=0,b=this.m_vertices[0].x*
a.x+this.m_vertices[0].y*a.y,d=1;d<this.m_vertexCount;++d){var g=this.m_vertices[d].x*a.x+this.m_vertices[d].y*a.y;g>b&&(m=d,b=g)}return m};d.prototype.GetSupportVertex=function(a){for(var m=0,b=this.m_vertices[0].x*a.x+this.m_vertices[0].y*a.y,d=1;d<this.m_vertexCount;++d){var g=this.m_vertices[d].x*a.x+this.m_vertices[d].y*a.y;g>b&&(m=d,b=g)}return this.m_vertices[m]};d.prototype.Validate=function(){return false};d.prototype.b2PolygonShape=function(){this.__super.b2Shape.call(this);this.m_type=
q.e_polygonShape;this.m_centroid=new D;this.m_vertices=new Vector;this.m_normals=new Vector};d.prototype.Reserve=function(a){a===void 0&&(a=0);for(var m=parseInt(this.m_vertices.length);m<a;m++)this.m_vertices[m]=new D,this.m_normals[m]=new D};d.ComputeCentroid=function(a,m){m===void 0&&(m=0);for(var b=new D,d=0,g=1/3,k=0;k<m;++k){var f=a[k],r=k+1<m?a[parseInt(k+1)]:a[0],t=0.5*((f.x-0)*(r.y-0)-(f.y-0)*(r.x-0));d+=t;b.x+=t*g*(0+f.x+r.x);b.y+=t*g*(0+f.y+r.y)}b.x*=1/d;b.y*=1/d;return b};d.ComputeOBB=
function(a,m,b){b===void 0&&(b=0);for(var d=0,g=new Vector(b+1),d=0;d<b;++d)g[d]=m[d];g[b]=g[0];m=Number.MAX_VALUE;for(d=1;d<=b;++d){var k=g[parseInt(d-1)],f=g[d].x-k.x,r=g[d].y-k.y,t=Math.sqrt(f*f+r*r);f/=t;r/=t;for(var u=-r,v=f,q=t=Number.MAX_VALUE,e=-Number.MAX_VALUE,j=-Number.MAX_VALUE,h=0;h<b;++h){var o=g[h].x-k.x,w=g[h].y-k.y,A=f*o+r*w,o=u*o+v*w;A<t&&(t=A);o<q&&(q=o);A>e&&(e=A);o>j&&(j=o)}h=(e-t)*(j-q);if(h<0.95*m)m=h,a.R.col1.x=f,a.R.col1.y=r,a.R.col2.x=u,a.R.col2.y=v,f=0.5*(t+e),r=0.5*(q+
j),u=a.R,a.center.x=k.x+(u.col1.x*f+u.col2.x*r),a.center.y=k.y+(u.col1.y*f+u.col2.y*r),a.extents.x=0.5*(e-t),a.extents.y=0.5*(j-q)}};Box2D.postDefs.push(function(){Box2D.Collision.Shapes.b2PolygonShape.s_mat=new m});q.b2Shape=function(){};q.prototype.Copy=function(){return null};q.prototype.Set=function(a){this.m_radius=a.m_radius};q.prototype.GetType=function(){return this.m_type};q.prototype.TestPoint=function(){return false};q.prototype.RayCast=function(){return false};q.prototype.ComputeAABB=
function(){};q.prototype.ComputeMass=function(){};q.prototype.ComputeSubmergedArea=function(){return 0};q.TestOverlap=function(a,m,b,d){var g=new u;g.proxyA=new L;g.proxyA.Set(a);g.proxyB=new L;g.proxyB.Set(b);g.transformA=m;g.transformB=d;g.useRadii=true;a=new F;a.count=0;m=new t;v.Distance(m,a,g);return m.distance<10*Number.MIN_VALUE};q.prototype.b2Shape=function(){this.m_type=q.e_unknownShape;this.m_radius=a.b2_linearSlop};Box2D.postDefs.push(function(){Box2D.Collision.Shapes.b2Shape.e_unknownShape=
-1;Box2D.Collision.Shapes.b2Shape.e_circleShape=0;Box2D.Collision.Shapes.b2Shape.e_polygonShape=1;Box2D.Collision.Shapes.b2Shape.e_edgeShape=2;Box2D.Collision.Shapes.b2Shape.e_shapeTypeCount=3;Box2D.Collision.Shapes.b2Shape.e_hitCollide=1;Box2D.Collision.Shapes.b2Shape.e_missCollide=0;Box2D.Collision.Shapes.b2Shape.e_startsInsideCollide=-1})})();
(function(){var a=Box2D.Common.b2Color,b=Box2D.Common.b2Settings,f=Box2D.Common.Math.b2Math;a.b2Color=function(){this._b=this._g=this._r=0};a.prototype.b2Color=function(a,b,d){a===void 0&&(a=0);b===void 0&&(b=0);d===void 0&&(d=0);this._r=Box2D.parseUInt(255*f.Clamp(a,0,1));this._g=Box2D.parseUInt(255*f.Clamp(b,0,1));this._b=Box2D.parseUInt(255*f.Clamp(d,0,1))};a.prototype.Set=function(a,b,d){a===void 0&&(a=0);b===void 0&&(b=0);d===void 0&&(d=0);this._r=Box2D.parseUInt(255*f.Clamp(a,0,1));this._g=
Box2D.parseUInt(255*f.Clamp(b,0,1));this._b=Box2D.parseUInt(255*f.Clamp(d,0,1))};Object.defineProperty(a.prototype,"r",{enumerable:false,configurable:true,set:function(a){a===void 0&&(a=0);this._r=Box2D.parseUInt(255*f.Clamp(a,0,1))}});Object.defineProperty(a.prototype,"g",{enumerable:false,configurable:true,set:function(a){a===void 0&&(a=0);this._g=Box2D.parseUInt(255*f.Clamp(a,0,1))}});Object.defineProperty(a.prototype,"b",{enumerable:false,configurable:true,set:function(a){a===void 0&&(a=0);this._b=
Box2D.parseUInt(255*f.Clamp(a,0,1))}});Object.defineProperty(a.prototype,"color",{enumerable:false,configurable:true,get:function(){return this._r<<16|this._g<<8|this._b}});b.b2Settings=function(){};b.b2MixFriction=function(a,b){a===void 0&&(a=0);b===void 0&&(b=0);return Math.sqrt(a*b)};b.b2MixRestitution=function(a,b){a===void 0&&(a=0);b===void 0&&(b=0);return a>b?a:b};b.b2Assert=function(a){if(!a)throw"Assertion Failed";};Box2D.postDefs.push(function(){Box2D.Common.b2Settings.VERSION="2.1alpha";
Box2D.Common.b2Settings.USHRT_MAX=65535;Box2D.Common.b2Settings.b2_pi=Math.PI;Box2D.Common.b2Settings.b2_maxManifoldPoints=2;Box2D.Common.b2Settings.b2_aabbExtension=0.1;Box2D.Common.b2Settings.b2_aabbMultiplier=2;Box2D.Common.b2Settings.b2_polygonRadius=2*b.b2_linearSlop;Box2D.Common.b2Settings.b2_linearSlop=0.0050;Box2D.Common.b2Settings.b2_angularSlop=2/180*b.b2_pi;Box2D.Common.b2Settings.b2_toiSlop=8*b.b2_linearSlop;Box2D.Common.b2Settings.b2_maxTOIContactsPerIsland=32;Box2D.Common.b2Settings.b2_maxTOIJointsPerIsland=
32;Box2D.Common.b2Settings.b2_velocityThreshold=1;Box2D.Common.b2Settings.b2_maxLinearCorrection=0.2;Box2D.Common.b2Settings.b2_maxAngularCorrection=8/180*b.b2_pi;Box2D.Common.b2Settings.b2_maxTranslation=2;Box2D.Common.b2Settings.b2_maxTranslationSquared=b.b2_maxTranslation*b.b2_maxTranslation;Box2D.Common.b2Settings.b2_maxRotation=0.5*b.b2_pi;Box2D.Common.b2Settings.b2_maxRotationSquared=b.b2_maxRotation*b.b2_maxRotation;Box2D.Common.b2Settings.b2_contactBaumgarte=0.2;Box2D.Common.b2Settings.b2_timeToSleep=
0.5;Box2D.Common.b2Settings.b2_linearSleepTolerance=0.01;Box2D.Common.b2Settings.b2_angularSleepTolerance=2/180*b.b2_pi})})();
(function(){var a=Box2D.Common.Math.b2Mat22,b=Box2D.Common.Math.b2Mat33,f=Box2D.Common.Math.b2Math,g=Box2D.Common.Math.b2Sweep,k=Box2D.Common.Math.b2Transform,d=Box2D.Common.Math.b2Vec2,q=Box2D.Common.Math.b2Vec3;a.b2Mat22=function(){this.col1=new d;this.col2=new d};a.prototype.b2Mat22=function(){this.SetIdentity()};a.FromAngle=function(m){m===void 0&&(m=0);var b=new a;b.Set(m);return b};a.FromVV=function(m,b){var d=new a;d.SetVV(m,b);return d};a.prototype.Set=function(a){a===void 0&&(a=0);var b=
Math.cos(a),a=Math.sin(a);this.col1.x=b;this.col2.x=-a;this.col1.y=a;this.col2.y=b};a.prototype.SetVV=function(a,b){this.col1.SetV(a);this.col2.SetV(b)};a.prototype.Copy=function(){var b=new a;b.SetM(this);return b};a.prototype.SetM=function(a){this.col1.SetV(a.col1);this.col2.SetV(a.col2)};a.prototype.AddM=function(a){this.col1.x+=a.col1.x;this.col1.y+=a.col1.y;this.col2.x+=a.col2.x;this.col2.y+=a.col2.y};a.prototype.SetIdentity=function(){this.col1.x=1;this.col2.x=0;this.col1.y=0;this.col2.y=1};
a.prototype.SetZero=function(){this.col1.x=0;this.col2.x=0;this.col1.y=0;this.col2.y=0};a.prototype.GetAngle=function(){return Math.atan2(this.col1.y,this.col1.x)};a.prototype.GetInverse=function(a){var b=this.col1.x,d=this.col2.x,g=this.col1.y,f=this.col2.y,k=b*f-d*g;k!=0&&(k=1/k);a.col1.x=k*f;a.col2.x=-k*d;a.col1.y=-k*g;a.col2.y=k*b;return a};a.prototype.Solve=function(a,b,d){b===void 0&&(b=0);d===void 0&&(d=0);var g=this.col1.x,f=this.col2.x,k=this.col1.y,t=this.col2.y,q=g*t-f*k;q!=0&&(q=1/q);
a.x=q*(t*b-f*d);a.y=q*(g*d-k*b);return a};a.prototype.Abs=function(){this.col1.Abs();this.col2.Abs()};b.b2Mat33=function(){this.col1=new q;this.col2=new q;this.col3=new q};b.prototype.b2Mat33=function(a,b,d){a===void 0&&(a=null);b===void 0&&(b=null);d===void 0&&(d=null);!a&&!b&&!d?(this.col1.SetZero(),this.col2.SetZero(),this.col3.SetZero()):(this.col1.SetV(a),this.col2.SetV(b),this.col3.SetV(d))};b.prototype.SetVVV=function(a,b,d){this.col1.SetV(a);this.col2.SetV(b);this.col3.SetV(d)};b.prototype.Copy=
function(){return new b(this.col1,this.col2,this.col3)};b.prototype.SetM=function(a){this.col1.SetV(a.col1);this.col2.SetV(a.col2);this.col3.SetV(a.col3)};b.prototype.AddM=function(a){this.col1.x+=a.col1.x;this.col1.y+=a.col1.y;this.col1.z+=a.col1.z;this.col2.x+=a.col2.x;this.col2.y+=a.col2.y;this.col2.z+=a.col2.z;this.col3.x+=a.col3.x;this.col3.y+=a.col3.y;this.col3.z+=a.col3.z};b.prototype.SetIdentity=function(){this.col1.x=1;this.col2.x=0;this.col3.x=0;this.col1.y=0;this.col2.y=1;this.col3.y=0;
this.col1.z=0;this.col2.z=0;this.col3.z=1};b.prototype.SetZero=function(){this.col1.x=0;this.col2.x=0;this.col3.x=0;this.col1.y=0;this.col2.y=0;this.col3.y=0;this.col1.z=0;this.col2.z=0;this.col3.z=0};b.prototype.Solve22=function(a,b,d){b===void 0&&(b=0);d===void 0&&(d=0);var g=this.col1.x,f=this.col2.x,k=this.col1.y,t=this.col2.y,q=g*t-f*k;q!=0&&(q=1/q);a.x=q*(t*b-f*d);a.y=q*(g*d-k*b);return a};b.prototype.Solve33=function(a,b,d,g){b===void 0&&(b=0);d===void 0&&(d=0);g===void 0&&(g=0);var f=this.col1.x,
k=this.col1.y,t=this.col1.z,q=this.col2.x,F=this.col2.y,l=this.col2.z,H=this.col3.x,y=this.col3.y,G=this.col3.z,C=f*(F*G-l*y)+k*(l*H-q*G)+t*(q*y-F*H);C!=0&&(C=1/C);a.x=C*(b*(F*G-l*y)+d*(l*H-q*G)+g*(q*y-F*H));a.y=C*(f*(d*G-g*y)+k*(g*H-b*G)+t*(b*y-d*H));a.z=C*(f*(F*g-l*d)+k*(l*b-q*g)+t*(q*d-F*b));return a};f.b2Math=function(){};f.IsValid=function(a){a===void 0&&(a=0);return isFinite(a)};f.Dot=function(a,b){return a.x*b.x+a.y*b.y};f.CrossVV=function(a,b){return a.x*b.y-a.y*b.x};f.CrossVF=function(a,
b){b===void 0&&(b=0);return new d(b*a.y,-b*a.x)};f.CrossFV=function(a,b){a===void 0&&(a=0);return new d(-a*b.y,a*b.x)};f.MulMV=function(a,b){return new d(a.col1.x*b.x+a.col2.x*b.y,a.col1.y*b.x+a.col2.y*b.y)};f.MulTMV=function(a,b){return new d(f.Dot(b,a.col1),f.Dot(b,a.col2))};f.MulX=function(a,b){var d=f.MulMV(a.R,b);d.x+=a.position.x;d.y+=a.position.y;return d};f.MulXT=function(a,b){var d=f.SubtractVV(b,a.position),g=d.x*a.R.col1.x+d.y*a.R.col1.y;d.y=d.x*a.R.col2.x+d.y*a.R.col2.y;d.x=g;return d};
f.AddVV=function(a,b){return new d(a.x+b.x,a.y+b.y)};f.SubtractVV=function(a,b){return new d(a.x-b.x,a.y-b.y)};f.Distance=function(a,b){var d=a.x-b.x,g=a.y-b.y;return Math.sqrt(d*d+g*g)};f.DistanceSquared=function(a,b){var d=a.x-b.x,g=a.y-b.y;return d*d+g*g};f.MulFV=function(a,b){a===void 0&&(a=0);return new d(a*b.x,a*b.y)};f.AddMM=function(b,d){return a.FromVV(f.AddVV(b.col1,d.col1),f.AddVV(b.col2,d.col2))};f.MulMM=function(b,d){return a.FromVV(f.MulMV(b,d.col1),f.MulMV(b,d.col2))};f.MulTMM=function(b,
g){var k=new d(f.Dot(b.col1,g.col1),f.Dot(b.col2,g.col1)),q=new d(f.Dot(b.col1,g.col2),f.Dot(b.col2,g.col2));return a.FromVV(k,q)};f.Abs=function(a){a===void 0&&(a=0);return a>0?a:-a};f.AbsV=function(a){return new d(f.Abs(a.x),f.Abs(a.y))};f.AbsM=function(b){return a.FromVV(f.AbsV(b.col1),f.AbsV(b.col2))};f.Min=function(a,b){a===void 0&&(a=0);b===void 0&&(b=0);return a<b?a:b};f.MinV=function(a,b){return new d(f.Min(a.x,b.x),f.Min(a.y,b.y))};f.Max=function(a,b){a===void 0&&(a=0);b===void 0&&(b=0);
return a>b?a:b};f.MaxV=function(a,b){return new d(f.Max(a.x,b.x),f.Max(a.y,b.y))};f.Clamp=function(a,b,d){a===void 0&&(a=0);b===void 0&&(b=0);d===void 0&&(d=0);return a<b?b:a>d?d:a};f.ClampV=function(a,b,d){return f.MaxV(b,f.MinV(a,d))};f.Swap=function(a,b){var d=a[0];a[0]=b[0];b[0]=d};f.Random=function(){return Math.random()*2-1};f.RandomRange=function(a,b){a===void 0&&(a=0);b===void 0&&(b=0);var d=Math.random();return(b-a)*d+a};f.NextPowerOfTwo=function(a){a===void 0&&(a=0);a|=a>>1&2147483647;a|=
a>>2&1073741823;a|=a>>4&268435455;a|=a>>8&16777215;a|=a>>16&65535;return a+1};f.IsPowerOfTwo=function(a){a===void 0&&(a=0);return a>0&&(a&a-1)==0};Box2D.postDefs.push(function(){Box2D.Common.Math.b2Math.b2Vec2_zero=new d(0,0);Box2D.Common.Math.b2Math.b2Mat22_identity=a.FromVV(new d(1,0),new d(0,1));Box2D.Common.Math.b2Math.b2Transform_identity=new k(f.b2Vec2_zero,f.b2Mat22_identity)});g.b2Sweep=function(){this.localCenter=new d;this.c0=new d;this.c=new d};g.prototype.Set=function(a){this.localCenter.SetV(a.localCenter);
this.c0.SetV(a.c0);this.c.SetV(a.c);this.a0=a.a0;this.a=a.a;this.t0=a.t0};g.prototype.Copy=function(){var a=new g;a.localCenter.SetV(this.localCenter);a.c0.SetV(this.c0);a.c.SetV(this.c);a.a0=this.a0;a.a=this.a;a.t0=this.t0;return a};g.prototype.GetTransform=function(a,b){b===void 0&&(b=0);a.position.x=(1-b)*this.c0.x+b*this.c.x;a.position.y=(1-b)*this.c0.y+b*this.c.y;a.R.Set((1-b)*this.a0+b*this.a);var d=a.R;a.position.x-=d.col1.x*this.localCenter.x+d.col2.x*this.localCenter.y;a.position.y-=d.col1.y*
this.localCenter.x+d.col2.y*this.localCenter.y};g.prototype.Advance=function(a){a===void 0&&(a=0);if(this.t0<a&&1-this.t0>Number.MIN_VALUE){var b=(a-this.t0)/(1-this.t0);this.c0.x=(1-b)*this.c0.x+b*this.c.x;this.c0.y=(1-b)*this.c0.y+b*this.c.y;this.a0=(1-b)*this.a0+b*this.a;this.t0=a}};k.b2Transform=function(){this.position=new d;this.R=new a};k.prototype.b2Transform=function(a,b){a===void 0&&(a=null);b===void 0&&(b=null);a&&(this.position.SetV(a),this.R.SetM(b))};k.prototype.Initialize=function(a,
b){this.position.SetV(a);this.R.SetM(b)};k.prototype.SetIdentity=function(){this.position.SetZero();this.R.SetIdentity()};k.prototype.Set=function(a){this.position.SetV(a.position);this.R.SetM(a.R)};k.prototype.GetAngle=function(){return Math.atan2(this.R.col1.y,this.R.col1.x)};d.b2Vec2=function(){};d.prototype.b2Vec2=function(a,b){a===void 0&&(a=0);b===void 0&&(b=0);this.x=a;this.y=b};d.prototype.SetZero=function(){this.y=this.x=0};d.prototype.Set=function(a,b){a===void 0&&(a=0);b===void 0&&(b=0);
this.x=a;this.y=b};d.prototype.SetV=function(a){this.x=a.x;this.y=a.y};d.prototype.GetNegative=function(){return new d(-this.x,-this.y)};d.prototype.NegativeSelf=function(){this.x=-this.x;this.y=-this.y};d.Make=function(a,b){a===void 0&&(a=0);b===void 0&&(b=0);return new d(a,b)};d.prototype.Copy=function(){return new d(this.x,this.y)};d.prototype.Add=function(a){this.x+=a.x;this.y+=a.y};d.prototype.Subtract=function(a){this.x-=a.x;this.y-=a.y};d.prototype.Multiply=function(a){a===void 0&&(a=0);this.x*=
a;this.y*=a};d.prototype.MulM=function(a){var b=this.x;this.x=a.col1.x*b+a.col2.x*this.y;this.y=a.col1.y*b+a.col2.y*this.y};d.prototype.MulTM=function(a){var b=f.Dot(this,a.col1);this.y=f.Dot(this,a.col2);this.x=b};d.prototype.CrossVF=function(a){a===void 0&&(a=0);var b=this.x;this.x=a*this.y;this.y=-a*b};d.prototype.CrossFV=function(a){a===void 0&&(a=0);var b=this.x;this.x=-a*this.y;this.y=a*b};d.prototype.MinV=function(a){this.x=this.x<a.x?this.x:a.x;this.y=this.y<a.y?this.y:a.y};d.prototype.MaxV=
function(a){this.x=this.x>a.x?this.x:a.x;this.y=this.y>a.y?this.y:a.y};d.prototype.Abs=function(){if(this.x<0)this.x=-this.x;if(this.y<0)this.y=-this.y};d.prototype.Length=function(){return Math.sqrt(this.x*this.x+this.y*this.y)};d.prototype.LengthSquared=function(){return this.x*this.x+this.y*this.y};d.prototype.Normalize=function(){var a=Math.sqrt(this.x*this.x+this.y*this.y);if(a<Number.MIN_VALUE)return 0;var b=1/a;this.x*=b;this.y*=b;return a};d.prototype.IsValid=function(){return f.IsValid(this.x)&&
f.IsValid(this.y)};q.b2Vec3=function(){};q.prototype.b2Vec3=function(a,b,d){a===void 0&&(a=0);b===void 0&&(b=0);d===void 0&&(d=0);this.x=a;this.y=b;this.z=d};q.prototype.SetZero=function(){this.x=this.y=this.z=0};q.prototype.Set=function(a,b,d){a===void 0&&(a=0);b===void 0&&(b=0);d===void 0&&(d=0);this.x=a;this.y=b;this.z=d};q.prototype.SetV=function(a){this.x=a.x;this.y=a.y;this.z=a.z};q.prototype.GetNegative=function(){return new q(-this.x,-this.y,-this.z)};q.prototype.NegativeSelf=function(){this.x=
-this.x;this.y=-this.y;this.z=-this.z};q.prototype.Copy=function(){return new q(this.x,this.y,this.z)};q.prototype.Add=function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z};q.prototype.Subtract=function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z};q.prototype.Multiply=function(a){a===void 0&&(a=0);this.x*=a;this.y*=a;this.z*=a}})();
(function(){var a=Box2D.Common.Math.b2Math,b=Box2D.Common.Math.b2Sweep,f=Box2D.Common.Math.b2Transform,g=Box2D.Common.Math.b2Vec2,k=Box2D.Common.b2Color,d=Box2D.Common.b2Settings,q=Box2D.Collision.b2AABB,m=Box2D.Collision.b2ContactPoint,r=Box2D.Collision.b2DynamicTreeBroadPhase,I=Box2D.Collision.b2RayCastInput,D=Box2D.Collision.b2RayCastOutput,v=Box2D.Collision.Shapes.b2CircleShape,u=Box2D.Collision.Shapes.b2EdgeShape,t=Box2D.Collision.Shapes.b2MassData,L=Box2D.Collision.Shapes.b2PolygonShape,F=Box2D.Collision.Shapes.b2Shape,
l=Box2D.Dynamics.b2Body,H=Box2D.Dynamics.b2BodyDef,y=Box2D.Dynamics.b2ContactFilter,G=Box2D.Dynamics.b2ContactImpulse,C=Box2D.Dynamics.b2ContactListener,J=Box2D.Dynamics.b2ContactManager,z=Box2D.Dynamics.b2DebugDraw,M=Box2D.Dynamics.b2DestructionListener,B=Box2D.Dynamics.b2FilterData,E=Box2D.Dynamics.b2Fixture,N=Box2D.Dynamics.b2FixtureDef,K=Box2D.Dynamics.b2Island,e=Box2D.Dynamics.b2TimeStep,j=Box2D.Dynamics.b2World,h=Box2D.Dynamics.Contacts.b2Contact,o=Box2D.Dynamics.Contacts.b2ContactFactory,w=
Box2D.Dynamics.Contacts.b2ContactSolver,A=Box2D.Dynamics.Joints.b2Joint,p=Box2D.Dynamics.Joints.b2PulleyJoint;l.b2Body=function(){this.m_xf=new f;this.m_sweep=new b;this.m_linearVelocity=new g;this.m_force=new g};l.prototype.connectEdges=function(c,n,e){e===void 0&&(e=0);var b=Math.atan2(n.GetDirectionVector().y,n.GetDirectionVector().x),e=Math.tan((b-e)*0.5),e=a.MulFV(e,n.GetDirectionVector()),e=a.SubtractVV(e,n.GetNormalVector()),e=a.MulFV(d.b2_toiSlop,e),e=a.AddVV(e,n.GetVertex1()),j=a.AddVV(c.GetDirectionVector(),
n.GetDirectionVector());j.Normalize();var o=a.Dot(c.GetDirectionVector(),n.GetNormalVector())>0;c.SetNextEdge(n,e,j,o);n.SetPrevEdge(c,e,j,o);return b};l.prototype.CreateFixture=function(c){if(this.m_world.IsLocked()==true)return null;var a=new E;a.Create(this,this.m_xf,c);this.m_flags&l.e_activeFlag&&a.CreateProxy(this.m_world.m_contactManager.m_broadPhase,this.m_xf);a.m_next=this.m_fixtureList;this.m_fixtureList=a;++this.m_fixtureCount;a.m_body=this;a.m_density>0&&this.ResetMassData();this.m_world.m_flags|=
j.e_newFixture;return a};l.prototype.CreateFixture2=function(c,a){a===void 0&&(a=0);var e=new N;e.shape=c;e.density=a;return this.CreateFixture(e)};l.prototype.DestroyFixture=function(c){if(this.m_world.IsLocked()!=true){for(var a=this.m_fixtureList,e=null;a!=null;){if(a==c){e?e.m_next=c.m_next:this.m_fixtureList=c.m_next;break}e=a;a=a.m_next}for(a=this.m_contactList;a;){var e=a.contact,a=a.next,b=e.GetFixtureA(),j=e.GetFixtureB();(c==b||c==j)&&this.m_world.m_contactManager.Destroy(e)}this.m_flags&
l.e_activeFlag&&c.DestroyProxy(this.m_world.m_contactManager.m_broadPhase);c.Destroy();c.m_body=null;c.m_next=null;--this.m_fixtureCount;this.ResetMassData()}};l.prototype.SetPositionAndAngle=function(c,a){a===void 0&&(a=0);var e;if(this.m_world.IsLocked()!=true){this.m_xf.R.Set(a);this.m_xf.position.SetV(c);e=this.m_xf.R;var b=this.m_sweep.localCenter;this.m_sweep.c.x=e.col1.x*b.x+e.col2.x*b.y;this.m_sweep.c.y=e.col1.y*b.x+e.col2.y*b.y;this.m_sweep.c.x+=this.m_xf.position.x;this.m_sweep.c.y+=this.m_xf.position.y;
this.m_sweep.c0.SetV(this.m_sweep.c);this.m_sweep.a0=this.m_sweep.a=a;b=this.m_world.m_contactManager.m_broadPhase;for(e=this.m_fixtureList;e;e=e.m_next)e.Synchronize(b,this.m_xf,this.m_xf);this.m_world.m_contactManager.FindNewContacts()}};l.prototype.SetTransform=function(c){this.SetPositionAndAngle(c.position,c.GetAngle())};l.prototype.GetTransform=function(){return this.m_xf};l.prototype.GetPosition=function(){return this.m_xf.position};l.prototype.SetPosition=function(c){this.SetPositionAndAngle(c,
this.GetAngle())};l.prototype.GetAngle=function(){return this.m_sweep.a};l.prototype.SetAngle=function(c){c===void 0&&(c=0);this.SetPositionAndAngle(this.GetPosition(),c)};l.prototype.GetWorldCenter=function(){return this.m_sweep.c};l.prototype.GetLocalCenter=function(){return this.m_sweep.localCenter};l.prototype.SetLinearVelocity=function(c){this.m_type!=l.b2_staticBody&&this.m_linearVelocity.SetV(c)};l.prototype.GetLinearVelocity=function(){return this.m_linearVelocity};l.prototype.SetAngularVelocity=
function(c){c===void 0&&(c=0);if(this.m_type!=l.b2_staticBody)this.m_angularVelocity=c};l.prototype.GetAngularVelocity=function(){return this.m_angularVelocity};l.prototype.GetDefinition=function(){var c=new H;c.type=this.GetType();c.allowSleep=(this.m_flags&l.e_allowSleepFlag)==l.e_allowSleepFlag;c.angle=this.GetAngle();c.angularDamping=this.m_angularDamping;c.angularVelocity=this.m_angularVelocity;c.fixedRotation=(this.m_flags&l.e_fixedRotationFlag)==l.e_fixedRotationFlag;c.bullet=(this.m_flags&
l.e_bulletFlag)==l.e_bulletFlag;c.awake=(this.m_flags&l.e_awakeFlag)==l.e_awakeFlag;c.linearDamping=this.m_linearDamping;c.linearVelocity.SetV(this.GetLinearVelocity());c.position=this.GetPosition();c.userData=this.GetUserData();return c};l.prototype.ApplyForce=function(c,a){this.m_type==l.b2_dynamicBody&&(this.IsAwake()==false&&this.SetAwake(true),this.m_force.x+=c.x,this.m_force.y+=c.y,this.m_torque+=(a.x-this.m_sweep.c.x)*c.y-(a.y-this.m_sweep.c.y)*c.x)};l.prototype.ApplyTorque=function(c){c===
void 0&&(c=0);this.m_type==l.b2_dynamicBody&&(this.IsAwake()==false&&this.SetAwake(true),this.m_torque+=c)};l.prototype.ApplyImpulse=function(c,a){this.m_type==l.b2_dynamicBody&&(this.IsAwake()==false&&this.SetAwake(true),this.m_linearVelocity.x+=this.m_invMass*c.x,this.m_linearVelocity.y+=this.m_invMass*c.y,this.m_angularVelocity+=this.m_invI*((a.x-this.m_sweep.c.x)*c.y-(a.y-this.m_sweep.c.y)*c.x))};l.prototype.Split=function(c){for(var e=this.GetLinearVelocity().Copy(),b=this.GetAngularVelocity(),
j=this.GetWorldCenter(),o=this.m_world.CreateBody(this.GetDefinition()),h,p=this.m_fixtureList;p;)if(c(p)){var d=p.m_next;h?h.m_next=d:this.m_fixtureList=d;this.m_fixtureCount--;p.m_next=o.m_fixtureList;o.m_fixtureList=p;o.m_fixtureCount++;p.m_body=o;p=d}else h=p,p=p.m_next;this.ResetMassData();o.ResetMassData();h=this.GetWorldCenter();c=o.GetWorldCenter();h=a.AddVV(e,a.CrossFV(b,a.SubtractVV(h,j)));e=a.AddVV(e,a.CrossFV(b,a.SubtractVV(c,j)));this.SetLinearVelocity(h);o.SetLinearVelocity(e);this.SetAngularVelocity(b);
o.SetAngularVelocity(b);this.SynchronizeFixtures();o.SynchronizeFixtures();return o};l.prototype.Merge=function(c){var a;for(a=c.m_fixtureList;a;){var e=a.m_next;c.m_fixtureCount--;a.m_next=this.m_fixtureList;this.m_fixtureList=a;this.m_fixtureCount++;a.m_body=o;a=e}b.m_fixtureCount=0;var b=this,o=c;b.GetWorldCenter();o.GetWorldCenter();b.GetLinearVelocity().Copy();o.GetLinearVelocity().Copy();b.GetAngularVelocity();o.GetAngularVelocity();b.ResetMassData();this.SynchronizeFixtures()};l.prototype.GetMass=
function(){return this.m_mass};l.prototype.GetInertia=function(){return this.m_I};l.prototype.GetMassData=function(c){c.mass=this.m_mass;c.I=this.m_I;c.center.SetV(this.m_sweep.localCenter)};l.prototype.SetMassData=function(c){d.b2Assert(this.m_world.IsLocked()==false);if(this.m_world.IsLocked()!=true&&this.m_type==l.b2_dynamicBody){this.m_invI=this.m_I=this.m_invMass=0;this.m_mass=c.mass;if(this.m_mass<=0)this.m_mass=1;this.m_invMass=1/this.m_mass;if(c.I>0&&(this.m_flags&l.e_fixedRotationFlag)==
0)this.m_I=c.I-this.m_mass*(c.center.x*c.center.x+c.center.y*c.center.y),this.m_invI=1/this.m_I;var e=this.m_sweep.c.Copy();this.m_sweep.localCenter.SetV(c.center);this.m_sweep.c0.SetV(a.MulX(this.m_xf,this.m_sweep.localCenter));this.m_sweep.c.SetV(this.m_sweep.c0);this.m_linearVelocity.x+=this.m_angularVelocity*-(this.m_sweep.c.y-e.y);this.m_linearVelocity.y+=this.m_angularVelocity*+(this.m_sweep.c.x-e.x)}};l.prototype.ResetMassData=function(){this.m_invI=this.m_I=this.m_invMass=this.m_mass=0;this.m_sweep.localCenter.SetZero();
if(!(this.m_type==l.b2_staticBody||this.m_type==l.b2_kinematicBody)){for(var c=g.Make(0,0),e=this.m_fixtureList;e;e=e.m_next)if(e.m_density!=0){var b=e.GetMassData();this.m_mass+=b.mass;c.x+=b.center.x*b.mass;c.y+=b.center.y*b.mass;this.m_I+=b.I}this.m_mass>0?(this.m_invMass=1/this.m_mass,c.x*=this.m_invMass,c.y*=this.m_invMass):this.m_invMass=this.m_mass=1;this.m_I>0&&(this.m_flags&l.e_fixedRotationFlag)==0?(this.m_I-=this.m_mass*(c.x*c.x+c.y*c.y),this.m_I*=this.m_inertiaScale,d.b2Assert(this.m_I>
0),this.m_invI=1/this.m_I):this.m_invI=this.m_I=0;e=this.m_sweep.c.Copy();this.m_sweep.localCenter.SetV(c);this.m_sweep.c0.SetV(a.MulX(this.m_xf,this.m_sweep.localCenter));this.m_sweep.c.SetV(this.m_sweep.c0);this.m_linearVelocity.x+=this.m_angularVelocity*-(this.m_sweep.c.y-e.y);this.m_linearVelocity.y+=this.m_angularVelocity*+(this.m_sweep.c.x-e.x)}};l.prototype.GetWorldPoint=function(c){var a=this.m_xf.R,c=new g(a.col1.x*c.x+a.col2.x*c.y,a.col1.y*c.x+a.col2.y*c.y);c.x+=this.m_xf.position.x;c.y+=
this.m_xf.position.y;return c};l.prototype.GetWorldVector=function(c){return a.MulMV(this.m_xf.R,c)};l.prototype.GetLocalPoint=function(c){return a.MulXT(this.m_xf,c)};l.prototype.GetLocalVector=function(c){return a.MulTMV(this.m_xf.R,c)};l.prototype.GetLinearVelocityFromWorldPoint=function(c){return new g(this.m_linearVelocity.x-this.m_angularVelocity*(c.y-this.m_sweep.c.y),this.m_linearVelocity.y+this.m_angularVelocity*(c.x-this.m_sweep.c.x))};l.prototype.GetLinearVelocityFromLocalPoint=function(c){var a=
this.m_xf.R,c=new g(a.col1.x*c.x+a.col2.x*c.y,a.col1.y*c.x+a.col2.y*c.y);c.x+=this.m_xf.position.x;c.y+=this.m_xf.position.y;return new g(this.m_linearVelocity.x-this.m_angularVelocity*(c.y-this.m_sweep.c.y),this.m_linearVelocity.y+this.m_angularVelocity*(c.x-this.m_sweep.c.x))};l.prototype.GetLinearDamping=function(){return this.m_linearDamping};l.prototype.SetLinearDamping=function(c){c===void 0&&(c=0);this.m_linearDamping=c};l.prototype.GetAngularDamping=function(){return this.m_angularDamping};
l.prototype.SetAngularDamping=function(c){c===void 0&&(c=0);this.m_angularDamping=c};l.prototype.SetType=function(c){c===void 0&&(c=0);if(this.m_type!=c){this.m_type=c;this.ResetMassData();if(this.m_type==l.b2_staticBody)this.m_linearVelocity.SetZero(),this.m_angularVelocity=0;this.SetAwake(true);this.m_force.SetZero();this.m_torque=0;for(c=this.m_contactList;c;c=c.next)c.contact.FlagForFiltering()}};l.prototype.GetType=function(){return this.m_type};l.prototype.SetBullet=function(c){c?this.m_flags|=
l.e_bulletFlag:this.m_flags&=~l.e_bulletFlag};l.prototype.IsBullet=function(){return(this.m_flags&l.e_bulletFlag)==l.e_bulletFlag};l.prototype.SetSleepingAllowed=function(c){c?this.m_flags|=l.e_allowSleepFlag:(this.m_flags&=~l.e_allowSleepFlag,this.SetAwake(true))};l.prototype.SetAwake=function(c){c?(this.m_flags|=l.e_awakeFlag,this.m_sleepTime=0):(this.m_flags&=~l.e_awakeFlag,this.m_sleepTime=0,this.m_linearVelocity.SetZero(),this.m_angularVelocity=0,this.m_force.SetZero(),this.m_torque=0)};l.prototype.IsAwake=
function(){return(this.m_flags&l.e_awakeFlag)==l.e_awakeFlag};l.prototype.SetFixedRotation=function(c){c?this.m_flags|=l.e_fixedRotationFlag:this.m_flags&=~l.e_fixedRotationFlag;this.ResetMassData()};l.prototype.IsFixedRotation=function(){return(this.m_flags&l.e_fixedRotationFlag)==l.e_fixedRotationFlag};l.prototype.SetActive=function(c){if(c!=this.IsActive()){var a;if(c){this.m_flags|=l.e_activeFlag;c=this.m_world.m_contactManager.m_broadPhase;for(a=this.m_fixtureList;a;a=a.m_next)a.CreateProxy(c,
this.m_xf)}else{this.m_flags&=~l.e_activeFlag;c=this.m_world.m_contactManager.m_broadPhase;for(a=this.m_fixtureList;a;a=a.m_next)a.DestroyProxy(c);for(c=this.m_contactList;c;)a=c,c=c.next,this.m_world.m_contactManager.Destroy(a.contact);this.m_contactList=null}}};l.prototype.IsActive=function(){return(this.m_flags&l.e_activeFlag)==l.e_activeFlag};l.prototype.IsSleepingAllowed=function(){return(this.m_flags&l.e_allowSleepFlag)==l.e_allowSleepFlag};l.prototype.GetFixtureList=function(){return this.m_fixtureList};
l.prototype.GetJointList=function(){return this.m_jointList};l.prototype.GetControllerList=function(){return this.m_controllerList};l.prototype.GetContactList=function(){return this.m_contactList};l.prototype.GetNext=function(){return this.m_next};l.prototype.GetUserData=function(){return this.m_userData};l.prototype.SetUserData=function(c){this.m_userData=c};l.prototype.GetWorld=function(){return this.m_world};l.prototype.b2Body=function(c,a){this.m_flags=0;c.bullet&&(this.m_flags|=l.e_bulletFlag);
c.fixedRotation&&(this.m_flags|=l.e_fixedRotationFlag);c.allowSleep&&(this.m_flags|=l.e_allowSleepFlag);c.awake&&(this.m_flags|=l.e_awakeFlag);c.active&&(this.m_flags|=l.e_activeFlag);this.m_world=a;this.m_xf.position.SetV(c.position);this.m_xf.R.Set(c.angle);this.m_sweep.localCenter.SetZero();this.m_sweep.t0=1;this.m_sweep.a0=this.m_sweep.a=c.angle;var e=this.m_xf.R,b=this.m_sweep.localCenter;this.m_sweep.c.x=e.col1.x*b.x+e.col2.x*b.y;this.m_sweep.c.y=e.col1.y*b.x+e.col2.y*b.y;this.m_sweep.c.x+=
this.m_xf.position.x;this.m_sweep.c.y+=this.m_xf.position.y;this.m_sweep.c0.SetV(this.m_sweep.c);this.m_contactList=this.m_controllerList=this.m_jointList=null;this.m_controllerCount=0;this.m_next=this.m_prev=null;this.m_linearVelocity.SetV(c.linearVelocity);this.m_angularVelocity=c.angularVelocity;this.m_linearDamping=c.linearDamping;this.m_angularDamping=c.angularDamping;this.m_force.Set(0,0);this.m_sleepTime=this.m_torque=0;this.m_type=c.type;this.m_invMass=this.m_type==l.b2_dynamicBody?this.m_mass=
1:this.m_mass=0;this.m_invI=this.m_I=0;this.m_inertiaScale=c.inertiaScale;this.m_userData=c.userData;this.m_fixtureList=null;this.m_fixtureCount=0};l.prototype.SynchronizeFixtures=function(){var a=l.s_xf1;a.R.Set(this.m_sweep.a0);var e=a.R,b=this.m_sweep.localCenter;a.position.x=this.m_sweep.c0.x-(e.col1.x*b.x+e.col2.x*b.y);a.position.y=this.m_sweep.c0.y-(e.col1.y*b.x+e.col2.y*b.y);b=this.m_world.m_contactManager.m_broadPhase;for(e=this.m_fixtureList;e;e=e.m_next)e.Synchronize(b,a,this.m_xf)};l.prototype.SynchronizeTransform=
function(){this.m_xf.R.Set(this.m_sweep.a);var a=this.m_xf.R,e=this.m_sweep.localCenter;this.m_xf.position.x=this.m_sweep.c.x-(a.col1.x*e.x+a.col2.x*e.y);this.m_xf.position.y=this.m_sweep.c.y-(a.col1.y*e.x+a.col2.y*e.y)};l.prototype.ShouldCollide=function(a){if(this.m_type!=l.b2_dynamicBody&&a.m_type!=l.b2_dynamicBody)return false;for(var e=this.m_jointList;e;e=e.next)if(e.other==a&&e.joint.m_collideConnected==false)return false;return true};l.prototype.Advance=function(a){a===void 0&&(a=0);this.m_sweep.Advance(a);
this.m_sweep.c.SetV(this.m_sweep.c0);this.m_sweep.a=this.m_sweep.a0;this.SynchronizeTransform()};Box2D.postDefs.push(function(){Box2D.Dynamics.b2Body.s_xf1=new f;Box2D.Dynamics.b2Body.e_islandFlag=1;Box2D.Dynamics.b2Body.e_awakeFlag=2;Box2D.Dynamics.b2Body.e_allowSleepFlag=4;Box2D.Dynamics.b2Body.e_bulletFlag=8;Box2D.Dynamics.b2Body.e_fixedRotationFlag=16;Box2D.Dynamics.b2Body.e_activeFlag=32;Box2D.Dynamics.b2Body.b2_staticBody=0;Box2D.Dynamics.b2Body.b2_kinematicBody=1;Box2D.Dynamics.b2Body.b2_dynamicBody=
2});H.b2BodyDef=function(){this.position=new g;this.linearVelocity=new g};H.prototype.b2BodyDef=function(){this.userData=null;this.position.Set(0,0);this.angle=0;this.linearVelocity.Set(0,0);this.angularDamping=this.linearDamping=this.angularVelocity=0;this.awake=this.allowSleep=true;this.bullet=this.fixedRotation=false;this.type=l.b2_staticBody;this.active=true;this.inertiaScale=1};y.b2ContactFilter=function(){};y.prototype.ShouldCollide=function(a,e){var b=a.GetFilterData(),o=e.GetFilterData();
return b.groupIndex==o.groupIndex&&b.groupIndex!=0?b.groupIndex>0:(b.maskBits&o.categoryBits)!=0&&(b.categoryBits&o.maskBits)!=0};y.prototype.RayCollide=function(a,e){return!a?true:this.ShouldCollide(a instanceof E?a:null,e)};Box2D.postDefs.push(function(){Box2D.Dynamics.b2ContactFilter.b2_defaultFilter=new y});G.b2ContactImpulse=function(){this.normalImpulses=new Vector_a2j_Number(d.b2_maxManifoldPoints);this.tangentImpulses=new Vector_a2j_Number(d.b2_maxManifoldPoints)};C.b2ContactListener=function(){};
C.prototype.BeginContact=function(){};C.prototype.EndContact=function(){};C.prototype.PreSolve=function(){};C.prototype.PostSolve=function(){};Box2D.postDefs.push(function(){Box2D.Dynamics.b2ContactListener.b2_defaultListener=new C});J.b2ContactManager=function(){};J.prototype.b2ContactManager=function(){this.m_world=null;this.m_contactCount=0;this.m_contactFilter=y.b2_defaultFilter;this.m_contactListener=C.b2_defaultListener;this.m_contactFactory=new o(this.m_allocator);this.m_broadPhase=new r};
J.prototype.AddPair=function(a,e){var b=a instanceof E?a:null,o=e instanceof E?e:null,j=b.GetBody(),h=o.GetBody();if(j!=h){for(var p=h.GetContactList();p;){if(p.other==j){var d=p.contact.GetFixtureA(),w=p.contact.GetFixtureB();if(d==b&&w==o)return;if(d==o&&w==b)return}p=p.next}if(h.ShouldCollide(j)!=false&&this.m_contactFilter.ShouldCollide(b,o)!=false){p=this.m_contactFactory.Create(b,o);b=p.GetFixtureA();o=p.GetFixtureB();j=b.m_body;h=o.m_body;p.m_prev=null;p.m_next=this.m_world.m_contactList;if(this.m_world.m_contactList!=
null)this.m_world.m_contactList.m_prev=p;this.m_world.m_contactList=p;p.m_nodeA.contact=p;p.m_nodeA.other=h;p.m_nodeA.prev=null;p.m_nodeA.next=j.m_contactList;if(j.m_contactList!=null)j.m_contactList.prev=p.m_nodeA;j.m_contactList=p.m_nodeA;p.m_nodeB.contact=p;p.m_nodeB.other=j;p.m_nodeB.prev=null;p.m_nodeB.next=h.m_contactList;if(h.m_contactList!=null)h.m_contactList.prev=p.m_nodeB;h.m_contactList=p.m_nodeB;++this.m_world.m_contactCount}}};J.prototype.FindNewContacts=function(){this.m_broadPhase.UpdatePairs(Box2D.generateCallback(this,
this.AddPair))};J.prototype.Destroy=function(a){var e=a.GetFixtureA(),b=a.GetFixtureB(),e=e.GetBody(),b=b.GetBody();a.IsTouching()&&this.m_contactListener.EndContact(a);if(a.m_prev)a.m_prev.m_next=a.m_next;if(a.m_next)a.m_next.m_prev=a.m_prev;if(a==this.m_world.m_contactList)this.m_world.m_contactList=a.m_next;if(a.m_nodeA.prev)a.m_nodeA.prev.next=a.m_nodeA.next;if(a.m_nodeA.next)a.m_nodeA.next.prev=a.m_nodeA.prev;if(a.m_nodeA==e.m_contactList)e.m_contactList=a.m_nodeA.next;if(a.m_nodeB.prev)a.m_nodeB.prev.next=
a.m_nodeB.next;if(a.m_nodeB.next)a.m_nodeB.next.prev=a.m_nodeB.prev;if(a.m_nodeB==b.m_contactList)b.m_contactList=a.m_nodeB.next;this.m_contactFactory.Destroy(a);--this.m_contactCount};J.prototype.Collide=function(){for(var a=this.m_world.m_contactList;a;){var e=a.GetFixtureA(),b=a.GetFixtureB(),o=e.GetBody(),j=b.GetBody();if(o.IsAwake()==false&&j.IsAwake()==false)a=a.GetNext();else{if(a.m_flags&h.e_filterFlag){if(j.ShouldCollide(o)==false){e=a;a=e.GetNext();this.Destroy(e);continue}if(this.m_contactFilter.ShouldCollide(e,
b)==false){e=a;a=e.GetNext();this.Destroy(e);continue}a.m_flags&=~h.e_filterFlag}this.m_broadPhase.TestOverlap(e.m_proxy,b.m_proxy)==false?(e=a,a=e.GetNext(),this.Destroy(e)):(a.Update(this.m_contactListener),a=a.GetNext())}}};Box2D.postDefs.push(function(){Box2D.Dynamics.b2ContactManager.s_evalCP=new m});z.b2DebugDraw=function(){};z.prototype.b2DebugDraw=function(){};z.prototype.SetFlags=function(){};z.prototype.GetFlags=function(){};z.prototype.AppendFlags=function(){};z.prototype.ClearFlags=function(){};
z.prototype.SetSprite=function(){};z.prototype.GetSprite=function(){};z.prototype.SetDrawScale=function(){};z.prototype.GetDrawScale=function(){};z.prototype.SetLineThickness=function(){};z.prototype.GetLineThickness=function(){};z.prototype.SetAlpha=function(){};z.prototype.GetAlpha=function(){};z.prototype.SetFillAlpha=function(){};z.prototype.GetFillAlpha=function(){};z.prototype.SetXFormScale=function(){};z.prototype.GetXFormScale=function(){};z.prototype.DrawPolygon=function(){};z.prototype.DrawSolidPolygon=
function(){};z.prototype.DrawCircle=function(){};z.prototype.DrawSolidCircle=function(){};z.prototype.DrawSegment=function(){};z.prototype.DrawTransform=function(){};Box2D.postDefs.push(function(){Box2D.Dynamics.b2DebugDraw.e_shapeBit=1;Box2D.Dynamics.b2DebugDraw.e_jointBit=2;Box2D.Dynamics.b2DebugDraw.e_aabbBit=4;Box2D.Dynamics.b2DebugDraw.e_pairBit=8;Box2D.Dynamics.b2DebugDraw.e_centerOfMassBit=16;Box2D.Dynamics.b2DebugDraw.e_controllerBit=32});M.b2DestructionListener=function(){};M.prototype.SayGoodbyeJoint=
function(){};M.prototype.SayGoodbyeFixture=function(){};B.b2FilterData=function(){this.categoryBits=1;this.maskBits=65535;this.groupIndex=0};B.prototype.Copy=function(){var a=new B;a.categoryBits=this.categoryBits;a.maskBits=this.maskBits;a.groupIndex=this.groupIndex;return a};E.b2Fixture=function(){this.m_filter=new B};E.prototype.GetType=function(){return this.m_shape.GetType()};E.prototype.GetShape=function(){return this.m_shape};E.prototype.SetSensor=function(a){if(this.m_isSensor!=a&&(this.m_isSensor=
a,this.m_body!=null))for(a=this.m_body.GetContactList();a;){var e=a.contact,b=e.GetFixtureA(),o=e.GetFixtureB();if(b==this||o==this)e.SetSensor(b.IsSensor()||o.IsSensor());a=a.next}};E.prototype.IsSensor=function(){return this.m_isSensor};E.prototype.SetFilterData=function(a){this.m_filter=a.Copy();if(!this.m_body)for(a=this.m_body.GetContactList();a;){var e=a.contact,b=e.GetFixtureA(),o=e.GetFixtureB();(b==this||o==this)&&e.FlagForFiltering();a=a.next}};E.prototype.GetFilterData=function(){return this.m_filter.Copy()};
E.prototype.GetBody=function(){return this.m_body};E.prototype.GetNext=function(){return this.m_next};E.prototype.GetUserData=function(){return this.m_userData};E.prototype.SetUserData=function(a){this.m_userData=a};E.prototype.TestPoint=function(a){return this.m_shape.TestPoint(this.m_body.GetTransform(),a)};E.prototype.RayCast=function(a,e){return this.m_shape.RayCast(a,e,this.m_body.GetTransform())};E.prototype.GetMassData=function(a){a===void 0&&(a=null);a==null&&(a=new t);this.m_shape.ComputeMass(a,
this.m_density);return a};E.prototype.SetDensity=function(a){a===void 0&&(a=0);this.m_density=a};E.prototype.GetDensity=function(){return this.m_density};E.prototype.GetFriction=function(){return this.m_friction};E.prototype.SetFriction=function(a){a===void 0&&(a=0);this.m_friction=a};E.prototype.GetRestitution=function(){return this.m_restitution};E.prototype.SetRestitution=function(a){a===void 0&&(a=0);this.m_restitution=a};E.prototype.GetAABB=function(){return this.m_aabb};E.prototype.b2Fixture=
function(){this.m_aabb=new q;this.m_shape=this.m_next=this.m_body=this.m_userData=null;this.m_restitution=this.m_friction=this.m_density=0};E.prototype.Create=function(a,e,b){this.m_userData=b.userData;this.m_friction=b.friction;this.m_restitution=b.restitution;this.m_body=a;this.m_next=null;this.m_filter=b.filter.Copy();this.m_isSensor=b.isSensor;this.m_shape=b.shape.Copy();this.m_density=b.density};E.prototype.Destroy=function(){this.m_shape=null};E.prototype.CreateProxy=function(a,e){this.m_shape.ComputeAABB(this.m_aabb,
e);this.m_proxy=a.CreateProxy(this.m_aabb,this)};E.prototype.DestroyProxy=function(a){if(this.m_proxy!=null)a.DestroyProxy(this.m_proxy),this.m_proxy=null};E.prototype.Synchronize=function(c,e,b){if(this.m_proxy){var o=new q,j=new q;this.m_shape.ComputeAABB(o,e);this.m_shape.ComputeAABB(j,b);this.m_aabb.Combine(o,j);e=a.SubtractVV(b.position,e.position);c.MoveProxy(this.m_proxy,this.m_aabb,e)}};N.b2FixtureDef=function(){this.filter=new B};N.prototype.b2FixtureDef=function(){this.userData=this.shape=
null;this.friction=0.2;this.density=this.restitution=0;this.filter.categoryBits=1;this.filter.maskBits=65535;this.filter.groupIndex=0;this.isSensor=false};K.b2Island=function(){};K.prototype.b2Island=function(){this.m_bodies=new Vector;this.m_contacts=new Vector;this.m_joints=new Vector};K.prototype.Initialize=function(a,e,b,o,j,h){a===void 0&&(a=0);e===void 0&&(e=0);b===void 0&&(b=0);var p=0;this.m_bodyCapacity=a;this.m_contactCapacity=e;this.m_jointCapacity=b;this.m_jointCount=this.m_contactCount=
this.m_bodyCount=0;this.m_allocator=o;this.m_listener=j;this.m_contactSolver=h;for(p=this.m_bodies.length;p<a;p++)this.m_bodies[p]=null;for(p=this.m_contacts.length;p<e;p++)this.m_contacts[p]=null;for(p=this.m_joints.length;p<b;p++)this.m_joints[p]=null};K.prototype.Clear=function(){this.m_jointCount=this.m_contactCount=this.m_bodyCount=0};K.prototype.Solve=function(c,e,b){for(var o=0,j=0,h,o=0;o<this.m_bodyCount;++o)j=this.m_bodies[o],j.GetType()==l.b2_dynamicBody&&(j.m_linearVelocity.x+=c.dt*(e.x+
j.m_invMass*j.m_force.x),j.m_linearVelocity.y+=c.dt*(e.y+j.m_invMass*j.m_force.y),j.m_angularVelocity+=c.dt*j.m_invI*j.m_torque,j.m_linearVelocity.Multiply(a.Clamp(1-c.dt*j.m_linearDamping,0,1)),j.m_angularVelocity*=a.Clamp(1-c.dt*j.m_angularDamping,0,1));this.m_contactSolver.Initialize(c,this.m_contacts,this.m_contactCount,this.m_allocator);e=this.m_contactSolver;e.InitVelocityConstraints(c);for(o=0;o<this.m_jointCount;++o)h=this.m_joints[o],h.InitVelocityConstraints(c);for(o=0;o<c.velocityIterations;++o){for(j=
0;j<this.m_jointCount;++j)h=this.m_joints[j],h.SolveVelocityConstraints(c);e.SolveVelocityConstraints()}for(o=0;o<this.m_jointCount;++o)h=this.m_joints[o],h.FinalizeVelocityConstraints();e.FinalizeVelocityConstraints();for(o=0;o<this.m_bodyCount;++o)if(j=this.m_bodies[o],j.GetType()!=l.b2_staticBody){var p=c.dt*j.m_linearVelocity.x,w=c.dt*j.m_linearVelocity.y;p*p+w*w>d.b2_maxTranslationSquared&&(j.m_linearVelocity.Normalize(),j.m_linearVelocity.x*=d.b2_maxTranslation*c.inv_dt,j.m_linearVelocity.y*=
d.b2_maxTranslation*c.inv_dt);p=c.dt*j.m_angularVelocity;if(p*p>d.b2_maxRotationSquared)j.m_angularVelocity=j.m_angularVelocity<0?-d.b2_maxRotation*c.inv_dt:d.b2_maxRotation*c.inv_dt;j.m_sweep.c0.SetV(j.m_sweep.c);j.m_sweep.a0=j.m_sweep.a;j.m_sweep.c.x+=c.dt*j.m_linearVelocity.x;j.m_sweep.c.y+=c.dt*j.m_linearVelocity.y;j.m_sweep.a+=c.dt*j.m_angularVelocity;j.SynchronizeTransform()}for(o=0;o<c.positionIterations;++o){p=e.SolvePositionConstraints(d.b2_contactBaumgarte);w=true;for(j=0;j<this.m_jointCount;++j)h=
this.m_joints[j],h=h.SolvePositionConstraints(d.b2_contactBaumgarte),w=w&&h;if(p&&w)break}this.Report(e.m_constraints);if(b){b=Number.MAX_VALUE;e=d.b2_linearSleepTolerance*d.b2_linearSleepTolerance;p=d.b2_angularSleepTolerance*d.b2_angularSleepTolerance;for(o=0;o<this.m_bodyCount;++o)if(j=this.m_bodies[o],j.GetType()!=l.b2_staticBody){if((j.m_flags&l.e_allowSleepFlag)==0)b=j.m_sleepTime=0;(j.m_flags&l.e_allowSleepFlag)==0||j.m_angularVelocity*j.m_angularVelocity>p||a.Dot(j.m_linearVelocity,j.m_linearVelocity)>
e?b=j.m_sleepTime=0:(j.m_sleepTime+=c.dt,b=a.Min(b,j.m_sleepTime))}if(b>=d.b2_timeToSleep)for(o=0;o<this.m_bodyCount;++o)j=this.m_bodies[o],j.SetAwake(false)}};K.prototype.SolveTOI=function(a){var e=0,b=0;this.m_contactSolver.Initialize(a,this.m_contacts,this.m_contactCount,this.m_allocator);for(var j=this.m_contactSolver,e=0;e<this.m_jointCount;++e)this.m_joints[e].InitVelocityConstraints(a);for(e=0;e<a.velocityIterations;++e){j.SolveVelocityConstraints();for(b=0;b<this.m_jointCount;++b)this.m_joints[b].SolveVelocityConstraints(a)}for(e=
0;e<this.m_bodyCount;++e)if(b=this.m_bodies[e],b.GetType()!=l.b2_staticBody){var o=a.dt*b.m_linearVelocity.x,h=a.dt*b.m_linearVelocity.y;o*o+h*h>d.b2_maxTranslationSquared&&(b.m_linearVelocity.Normalize(),b.m_linearVelocity.x*=d.b2_maxTranslation*a.inv_dt,b.m_linearVelocity.y*=d.b2_maxTranslation*a.inv_dt);o=a.dt*b.m_angularVelocity;if(o*o>d.b2_maxRotationSquared)b.m_angularVelocity=b.m_angularVelocity<0?-d.b2_maxRotation*a.inv_dt:d.b2_maxRotation*a.inv_dt;b.m_sweep.c0.SetV(b.m_sweep.c);b.m_sweep.a0=
b.m_sweep.a;b.m_sweep.c.x+=a.dt*b.m_linearVelocity.x;b.m_sweep.c.y+=a.dt*b.m_linearVelocity.y;b.m_sweep.a+=a.dt*b.m_angularVelocity;b.SynchronizeTransform()}for(e=0;e<a.positionIterations;++e){o=j.SolvePositionConstraints(0.75);h=true;for(b=0;b<this.m_jointCount;++b)var p=this.m_joints[b].SolvePositionConstraints(d.b2_contactBaumgarte),h=h&&p;if(o&&h)break}this.Report(j.m_constraints)};K.prototype.Report=function(a){if(this.m_listener!=null)for(var e=0;e<this.m_contactCount;++e){for(var b=this.m_contacts[e],
j=a[e],o=0;o<j.pointCount;++o)K.s_impulse.normalImpulses[o]=j.points[o].normalImpulse,K.s_impulse.tangentImpulses[o]=j.points[o].tangentImpulse;this.m_listener.PostSolve(b,K.s_impulse)}};K.prototype.AddBody=function(a){a.m_islandIndex=this.m_bodyCount;this.m_bodies[this.m_bodyCount++]=a};K.prototype.AddContact=function(a){this.m_contacts[this.m_contactCount++]=a};K.prototype.AddJoint=function(a){this.m_joints[this.m_jointCount++]=a};Box2D.postDefs.push(function(){Box2D.Dynamics.b2Island.s_impulse=
new G});e.b2TimeStep=function(){};e.prototype.Set=function(a){this.dt=a.dt;this.inv_dt=a.inv_dt;this.positionIterations=a.positionIterations;this.velocityIterations=a.velocityIterations;this.warmStarting=a.warmStarting};j.b2World=function(){this.s_stack=new Vector;this.m_contactManager=new J;this.m_contactSolver=new w;this.m_island=new K};j.prototype.b2World=function(a,e){this.m_controllerList=this.m_jointList=this.m_contactList=this.m_bodyList=this.m_debugDraw=this.m_destructionListener=null;this.m_controllerCount=
this.m_jointCount=this.m_contactCount=this.m_bodyCount=0;j.m_warmStarting=true;j.m_continuousPhysics=true;this.m_allowSleep=e;this.m_gravity=a;this.m_inv_dt0=0;this.m_contactManager.m_world=this;this.m_groundBody=this.CreateBody(new H)};j.prototype.SetDestructionListener=function(a){this.m_destructionListener=a};j.prototype.SetContactFilter=function(a){this.m_contactManager.m_contactFilter=a};j.prototype.SetContactListener=function(a){this.m_contactManager.m_contactListener=a};j.prototype.SetDebugDraw=
function(a){this.m_debugDraw=a};j.prototype.SetBroadPhase=function(a){var e=this.m_contactManager.m_broadPhase;this.m_contactManager.m_broadPhase=a;for(var b=this.m_bodyList;b;b=b.m_next)for(var j=b.m_fixtureList;j;j=j.m_next)j.m_proxy=a.CreateProxy(e.GetFatAABB(j.m_proxy),j)};j.prototype.Validate=function(){this.m_contactManager.m_broadPhase.Validate()};j.prototype.GetProxyCount=function(){return this.m_contactManager.m_broadPhase.GetProxyCount()};j.prototype.CreateBody=function(a){if(this.IsLocked()==
true)return null;a=new l(a,this);a.m_prev=null;if(a.m_next=this.m_bodyList)this.m_bodyList.m_prev=a;this.m_bodyList=a;++this.m_bodyCount;return a};j.prototype.DestroyBody=function(a){if(this.IsLocked()!=true){for(var e=a.m_jointList;e;){var b=e,e=e.next;this.m_destructionListener&&this.m_destructionListener.SayGoodbyeJoint(b.joint);this.DestroyJoint(b.joint)}for(e=a.m_controllerList;e;)b=e,e=e.nextController,b.controller.RemoveBody(a);for(e=a.m_contactList;e;)b=e,e=e.next,this.m_contactManager.Destroy(b.contact);
a.m_contactList=null;for(e=a.m_fixtureList;e;)b=e,e=e.m_next,this.m_destructionListener&&this.m_destructionListener.SayGoodbyeFixture(b),b.DestroyProxy(this.m_contactManager.m_broadPhase),b.Destroy();a.m_fixtureList=null;a.m_fixtureCount=0;if(a.m_prev)a.m_prev.m_next=a.m_next;if(a.m_next)a.m_next.m_prev=a.m_prev;if(a==this.m_bodyList)this.m_bodyList=a.m_next;--this.m_bodyCount}};j.prototype.CreateJoint=function(a){var e=A.Create(a,null);e.m_prev=null;if(e.m_next=this.m_jointList)this.m_jointList.m_prev=
e;this.m_jointList=e;++this.m_jointCount;e.m_edgeA.joint=e;e.m_edgeA.other=e.m_bodyB;e.m_edgeA.prev=null;if(e.m_edgeA.next=e.m_bodyA.m_jointList)e.m_bodyA.m_jointList.prev=e.m_edgeA;e.m_bodyA.m_jointList=e.m_edgeA;e.m_edgeB.joint=e;e.m_edgeB.other=e.m_bodyA;e.m_edgeB.prev=null;if(e.m_edgeB.next=e.m_bodyB.m_jointList)e.m_bodyB.m_jointList.prev=e.m_edgeB;e.m_bodyB.m_jointList=e.m_edgeB;var b=a.bodyA,j=a.bodyB;if(a.collideConnected==false)for(a=j.GetContactList();a;)a.other==b&&a.contact.FlagForFiltering(),
a=a.next;return e};j.prototype.DestroyJoint=function(a){var e=a.m_collideConnected;if(a.m_prev)a.m_prev.m_next=a.m_next;if(a.m_next)a.m_next.m_prev=a.m_prev;if(a==this.m_jointList)this.m_jointList=a.m_next;var b=a.m_bodyA,j=a.m_bodyB;b.SetAwake(true);j.SetAwake(true);if(a.m_edgeA.prev)a.m_edgeA.prev.next=a.m_edgeA.next;if(a.m_edgeA.next)a.m_edgeA.next.prev=a.m_edgeA.prev;if(a.m_edgeA==b.m_jointList)b.m_jointList=a.m_edgeA.next;a.m_edgeA.prev=null;a.m_edgeA.next=null;if(a.m_edgeB.prev)a.m_edgeB.prev.next=
a.m_edgeB.next;if(a.m_edgeB.next)a.m_edgeB.next.prev=a.m_edgeB.prev;if(a.m_edgeB==j.m_jointList)j.m_jointList=a.m_edgeB.next;a.m_edgeB.prev=null;a.m_edgeB.next=null;A.Destroy(a,null);--this.m_jointCount;if(e==false)for(a=j.GetContactList();a;)a.other==b&&a.contact.FlagForFiltering(),a=a.next};j.prototype.AddController=function(a){a.m_next=this.m_controllerList;a.m_prev=null;this.m_controllerList=a;a.m_world=this;this.m_controllerCount++;return a};j.prototype.RemoveController=function(a){if(a.m_prev)a.m_prev.m_next=
a.m_next;if(a.m_next)a.m_next.m_prev=a.m_prev;if(this.m_controllerList==a)this.m_controllerList=a.m_next;this.m_controllerCount--};j.prototype.CreateController=function(a){if(a.m_world!=this)throw Error("Controller can only be a member of one world");a.m_next=this.m_controllerList;a.m_prev=null;if(this.m_controllerList)this.m_controllerList.m_prev=a;this.m_controllerList=a;++this.m_controllerCount;a.m_world=this;return a};j.prototype.DestroyController=function(a){a.Clear();if(a.m_next)a.m_next.m_prev=
a.m_prev;if(a.m_prev)a.m_prev.m_next=a.m_next;if(a==this.m_controllerList)this.m_controllerList=a.m_next;--this.m_controllerCount};j.prototype.SetWarmStarting=function(a){j.m_warmStarting=a};j.prototype.SetContinuousPhysics=function(a){j.m_continuousPhysics=a};j.prototype.GetBodyCount=function(){return this.m_bodyCount};j.prototype.GetJointCount=function(){return this.m_jointCount};j.prototype.GetContactCount=function(){return this.m_contactCount};j.prototype.SetGravity=function(a){this.m_gravity=
a};j.prototype.GetGravity=function(){return this.m_gravity};j.prototype.GetGroundBody=function(){return this.m_groundBody};j.prototype.Step=function(a,e,b){a===void 0&&(a=0);e===void 0&&(e=0);b===void 0&&(b=0);this.m_flags&j.e_newFixture&&(this.m_contactManager.FindNewContacts(),this.m_flags&=~j.e_newFixture);this.m_flags|=j.e_locked;var o=j.s_timestep2;o.dt=a;o.velocityIterations=e;o.positionIterations=b;o.inv_dt=a>0?1/a:0;o.dtRatio=this.m_inv_dt0*a;o.warmStarting=j.m_warmStarting;this.m_contactManager.Collide();
o.dt>0&&this.Solve(o);j.m_continuousPhysics&&o.dt>0&&this.SolveTOI(o);if(o.dt>0)this.m_inv_dt0=o.inv_dt;this.m_flags&=~j.e_locked};j.prototype.ClearForces=function(){for(var a=this.m_bodyList;a;a=a.m_next)a.m_force.SetZero(),a.m_torque=0};j.prototype.DrawDebugData=function(){if(this.m_debugDraw!=null){this.m_debugDraw.m_sprite.graphics.clear();var a=this.m_debugDraw.GetFlags(),e,b,o;new g;new g;new g;var h;new q;new q;h=[new g,new g,new g,new g];var p=new k(0,0,0);if(a&z.e_shapeBit)for(e=this.m_bodyList;e;e=
e.m_next){h=e.m_xf;for(b=e.GetFixtureList();b;b=b.m_next)o=b.GetShape(),e.IsActive()==false?p.Set(0.5,0.5,0.3):e.GetType()==l.b2_staticBody?p.Set(0.5,0.9,0.5):e.GetType()==l.b2_kinematicBody?p.Set(0.5,0.5,0.9):e.IsAwake()==false?p.Set(0.6,0.6,0.6):p.Set(0.9,0.7,0.7),this.DrawShape(o,h,p)}if(a&z.e_jointBit)for(e=this.m_jointList;e;e=e.m_next)this.DrawJoint(e);if(a&z.e_controllerBit)for(e=this.m_controllerList;e;e=e.m_next)e.Draw(this.m_debugDraw);if(a&z.e_pairBit){p.Set(0.3,0.9,0.9);for(e=this.m_contactManager.m_contactList;e;e=
e.GetNext())o=e.GetFixtureA(),b=e.GetFixtureB(),o=o.GetAABB().GetCenter(),b=b.GetAABB().GetCenter(),this.m_debugDraw.DrawSegment(o,b,p)}if(a&z.e_aabbBit){o=this.m_contactManager.m_broadPhase;h=[new g,new g,new g,new g];for(e=this.m_bodyList;e;e=e.GetNext())if(e.IsActive()!=false)for(b=e.GetFixtureList();b;b=b.GetNext()){var d=o.GetFatAABB(b.m_proxy);h[0].Set(d.lowerBound.x,d.lowerBound.y);h[1].Set(d.upperBound.x,d.lowerBound.y);h[2].Set(d.upperBound.x,d.upperBound.y);h[3].Set(d.lowerBound.x,d.upperBound.y);
this.m_debugDraw.DrawPolygon(h,4,p)}}if(a&z.e_centerOfMassBit)for(e=this.m_bodyList;e;e=e.m_next)h=j.s_xf,h.R=e.m_xf.R,h.position=e.GetWorldCenter(),this.m_debugDraw.DrawTransform(h)}};j.prototype.QueryAABB=function(a,e){var b=this.m_contactManager.m_broadPhase;b.Query(function(e){return a(b.GetUserData(e))},e)};j.prototype.QueryShape=function(a,e,b){b===void 0&&(b=null);b==null&&(b=new f,b.SetIdentity());var o=this.m_contactManager.m_broadPhase,j=new q;e.ComputeAABB(j,b);o.Query(function(j){j=o.GetUserData(j)instanceof
E?o.GetUserData(j):null;return F.TestOverlap(e,b,j.GetShape(),j.GetBody().GetTransform())?a(j):true},j)};j.prototype.QueryPoint=function(a,e){var b=this.m_contactManager.m_broadPhase,j=new q;j.lowerBound.Set(e.x-d.b2_linearSlop,e.y-d.b2_linearSlop);j.upperBound.Set(e.x+d.b2_linearSlop,e.y+d.b2_linearSlop);b.Query(function(j){j=b.GetUserData(j)instanceof E?b.GetUserData(j):null;return j.TestPoint(e)?a(j):true},j)};j.prototype.RayCast=function(a,e,b){var j=this.m_contactManager.m_broadPhase,o=new D,
h=new I(e,b);j.RayCast(function(h,p){var d=j.GetUserData(p),d=d instanceof E?d:null;if(d.RayCast(o,h)){var w=o.fraction,f=new g((1-w)*e.x+w*b.x,(1-w)*e.y+w*b.y);return a(d,f,o.normal,w)}return h.maxFraction},h)};j.prototype.RayCastOne=function(a,e){var b;this.RayCast(function(a,e,c,j){j===void 0&&(j=0);b=a;return j},a,e);return b};j.prototype.RayCastAll=function(a,e){var b=new Vector;this.RayCast(function(a){b[b.length]=a;return 1},a,e);return b};j.prototype.GetBodyList=function(){return this.m_bodyList};
j.prototype.GetJointList=function(){return this.m_jointList};j.prototype.GetContactList=function(){return this.m_contactList};j.prototype.IsLocked=function(){return(this.m_flags&j.e_locked)>0};j.prototype.Solve=function(a){for(var e,b=this.m_controllerList;b;b=b.m_next)b.Step(a);b=this.m_island;b.Initialize(this.m_bodyCount,this.m_contactCount,this.m_jointCount,null,this.m_contactManager.m_contactListener,this.m_contactSolver);for(e=this.m_bodyList;e;e=e.m_next)e.m_flags&=~l.e_islandFlag;for(var j=
this.m_contactList;j;j=j.m_next)j.m_flags&=~h.e_islandFlag;for(j=this.m_jointList;j;j=j.m_next)j.m_islandFlag=false;parseInt(this.m_bodyCount);for(var j=this.s_stack,o=this.m_bodyList;o;o=o.m_next)if(!(o.m_flags&l.e_islandFlag)&&!(o.IsAwake()==false||o.IsActive()==false)&&o.GetType()!=l.b2_staticBody){b.Clear();var p=0;j[p++]=o;for(o.m_flags|=l.e_islandFlag;p>0;)if(e=j[--p],b.AddBody(e),e.IsAwake()==false&&e.SetAwake(true),e.GetType()!=l.b2_staticBody){for(var d,w=e.m_contactList;w;w=w.next)if(!(w.contact.m_flags&
h.e_islandFlag)&&!(w.contact.IsSensor()==true||w.contact.IsEnabled()==false||w.contact.IsTouching()==false))b.AddContact(w.contact),w.contact.m_flags|=h.e_islandFlag,d=w.other,d.m_flags&l.e_islandFlag||(j[p++]=d,d.m_flags|=l.e_islandFlag);for(e=e.m_jointList;e;e=e.next)if(e.joint.m_islandFlag!=true&&(d=e.other,d.IsActive()!=false))b.AddJoint(e.joint),e.joint.m_islandFlag=true,d.m_flags&l.e_islandFlag||(j[p++]=d,d.m_flags|=l.e_islandFlag)}b.Solve(a,this.m_gravity,this.m_allowSleep);for(p=0;p<b.m_bodyCount;++p)e=
b.m_bodies[p],e.GetType()==l.b2_staticBody&&(e.m_flags&=~l.e_islandFlag)}for(p=0;p<j.length;++p){if(!j[p])break;j[p]=null}for(e=this.m_bodyList;e;e=e.m_next)e.IsAwake()==false||e.IsActive()==false||e.GetType()!=l.b2_staticBody&&e.SynchronizeFixtures();this.m_contactManager.FindNewContacts()};j.prototype.SolveTOI=function(a){var e,b,o,p=this.m_island;p.Initialize(this.m_bodyCount,d.b2_maxTOIContactsPerIsland,d.b2_maxTOIJointsPerIsland,null,this.m_contactManager.m_contactListener,this.m_contactSolver);
var w=j.s_queue;for(e=this.m_bodyList;e;e=e.m_next)e.m_flags&=~l.e_islandFlag,e.m_sweep.t0=0;for(o=this.m_contactList;o;o=o.m_next)o.m_flags&=~(h.e_toiFlag|h.e_islandFlag);for(o=this.m_jointList;o;o=o.m_next)o.m_islandFlag=false;for(;;){var g=null,f=1;for(o=this.m_contactList;o;o=o.m_next)if(!(o.IsSensor()==true||o.IsEnabled()==false||o.IsContinuous()==false)){e=1;if(o.m_flags&h.e_toiFlag)e=o.m_toi;else{e=o.m_fixtureA;b=o.m_fixtureB;e=e.m_body;b=b.m_body;if((e.GetType()!=l.b2_dynamicBody||e.IsAwake()==
false)&&(b.GetType()!=l.b2_dynamicBody||b.IsAwake()==false))continue;var A=e.m_sweep.t0;if(e.m_sweep.t0<b.m_sweep.t0)A=b.m_sweep.t0,e.m_sweep.Advance(A);else if(b.m_sweep.t0<e.m_sweep.t0)A=e.m_sweep.t0,b.m_sweep.Advance(A);e=o.ComputeTOI(e.m_sweep,b.m_sweep);d.b2Assert(0<=e&&e<=1);e>0&&e<1&&(e=(1-e)*A+e,e>1&&(e=1));o.m_toi=e;o.m_flags|=h.e_toiFlag}Number.MIN_VALUE<e&&e<f&&(g=o,f=e)}if(g==null||1-100*Number.MIN_VALUE<f)break;e=g.m_fixtureA;b=g.m_fixtureB;e=e.m_body;b=b.m_body;j.s_backupA.Set(e.m_sweep);
j.s_backupB.Set(b.m_sweep);e.Advance(f);b.Advance(f);g.Update(this.m_contactManager.m_contactListener);g.m_flags&=~h.e_toiFlag;if(g.IsSensor()==true||g.IsEnabled()==false)e.m_sweep.Set(j.s_backupA),b.m_sweep.Set(j.s_backupB),e.SynchronizeTransform(),b.SynchronizeTransform();else if(g.IsTouching()!=false){e.GetType()!=l.b2_dynamicBody&&(e=b);p.Clear();g=o=0;w[o+g++]=e;for(e.m_flags|=l.e_islandFlag;g>0;)if(e=w[o++],--g,p.AddBody(e),e.IsAwake()==false&&e.SetAwake(true),e.GetType()==l.b2_dynamicBody){for(b=
e.m_contactList;b;b=b.next){if(p.m_contactCount==p.m_contactCapacity)break;if(!(b.contact.m_flags&h.e_islandFlag)&&!(b.contact.IsSensor()==true||b.contact.IsEnabled()==false||b.contact.IsTouching()==false))p.AddContact(b.contact),b.contact.m_flags|=h.e_islandFlag,A=b.other,A.m_flags&l.e_islandFlag||(A.GetType()!=l.b2_staticBody&&(A.Advance(f),A.SetAwake(true)),w[o+g]=A,++g,A.m_flags|=l.e_islandFlag)}for(e=e.m_jointList;e;e=e.next)if(p.m_jointCount!=p.m_jointCapacity&&e.joint.m_islandFlag!=true&&(A=
e.other,A.IsActive()!=false))p.AddJoint(e.joint),e.joint.m_islandFlag=true,A.m_flags&l.e_islandFlag||(A.GetType()!=l.b2_staticBody&&(A.Advance(f),A.SetAwake(true)),w[o+g]=A,++g,A.m_flags|=l.e_islandFlag)}o=j.s_timestep;o.warmStarting=false;o.dt=(1-f)*a.dt;o.inv_dt=1/o.dt;o.dtRatio=0;o.velocityIterations=a.velocityIterations;o.positionIterations=a.positionIterations;p.SolveTOI(o);for(f=f=0;f<p.m_bodyCount;++f)if(e=p.m_bodies[f],e.m_flags&=~l.e_islandFlag,e.IsAwake()!=false&&e.GetType()==l.b2_dynamicBody){e.SynchronizeFixtures();
for(b=e.m_contactList;b;b=b.next)b.contact.m_flags&=~h.e_toiFlag}for(f=0;f<p.m_contactCount;++f)o=p.m_contacts[f],o.m_flags&=~(h.e_toiFlag|h.e_islandFlag);for(f=0;f<p.m_jointCount;++f)o=p.m_joints[f],o.m_islandFlag=false;this.m_contactManager.FindNewContacts()}}};j.prototype.DrawJoint=function(a){var e=a.GetBodyA(),b=a.GetBodyB(),o=e.m_xf.position,h=b.m_xf.position,d=a.GetAnchorA(),w=a.GetAnchorB(),g=j.s_jointColor;switch(a.m_type){case A.e_distanceJoint:this.m_debugDraw.DrawSegment(d,w,g);break;
case A.e_pulleyJoint:e=a instanceof p?a:null;a=e.GetGroundAnchorA();e=e.GetGroundAnchorB();this.m_debugDraw.DrawSegment(a,d,g);this.m_debugDraw.DrawSegment(e,w,g);this.m_debugDraw.DrawSegment(a,e,g);break;case A.e_mouseJoint:this.m_debugDraw.DrawSegment(d,w,g);break;default:e!=this.m_groundBody&&this.m_debugDraw.DrawSegment(o,d,g),this.m_debugDraw.DrawSegment(d,w,g),b!=this.m_groundBody&&this.m_debugDraw.DrawSegment(h,w,g)}};j.prototype.DrawShape=function(e,b,o){switch(e.m_type){case F.e_circleShape:var j=
e instanceof v?e:null;this.m_debugDraw.DrawSolidCircle(a.MulX(b,j.m_p),j.m_radius,b.R.col1,o);break;case F.e_polygonShape:for(var j=0,j=e instanceof L?e:null,e=parseInt(j.GetVertexCount()),h=j.GetVertices(),p=new Vector(e),j=0;j<e;++j)p[j]=a.MulX(b,h[j]);this.m_debugDraw.DrawSolidPolygon(p,e,o);break;case F.e_edgeShape:j=e instanceof u?e:null,this.m_debugDraw.DrawSegment(a.MulX(b,j.GetVertex1()),a.MulX(b,j.GetVertex2()),o)}};Box2D.postDefs.push(function(){Box2D.Dynamics.b2World.s_timestep2=new e;
Box2D.Dynamics.b2World.s_xf=new f;Box2D.Dynamics.b2World.s_backupA=new b;Box2D.Dynamics.b2World.s_backupB=new b;Box2D.Dynamics.b2World.s_timestep=new e;Box2D.Dynamics.b2World.s_queue=new Vector;Box2D.Dynamics.b2World.s_jointColor=new k(0.5,0.8,0.8);Box2D.Dynamics.b2World.e_newFixture=1;Box2D.Dynamics.b2World.e_locked=2})})();
(function(){var a=Box2D.Collision.Shapes.b2CircleShape,b=Box2D.Collision.Shapes.b2EdgeShape,f=Box2D.Collision.Shapes.b2PolygonShape,g=Box2D.Collision.Shapes.b2Shape,k=Box2D.Dynamics.Contacts.b2CircleContact,d=Box2D.Dynamics.Contacts.b2Contact,q=Box2D.Dynamics.Contacts.b2ContactConstraint,m=Box2D.Dynamics.Contacts.b2ContactConstraintPoint,r=Box2D.Dynamics.Contacts.b2ContactEdge,I=Box2D.Dynamics.Contacts.b2ContactFactory,D=Box2D.Dynamics.Contacts.b2ContactRegister,v=Box2D.Dynamics.Contacts.b2ContactResult,
u=Box2D.Dynamics.Contacts.b2ContactSolver,t=Box2D.Dynamics.Contacts.b2EdgeAndCircleContact,L=Box2D.Dynamics.Contacts.b2NullContact,F=Box2D.Dynamics.Contacts.b2PolyAndCircleContact,l=Box2D.Dynamics.Contacts.b2PolyAndEdgeContact,H=Box2D.Dynamics.Contacts.b2PolygonContact,y=Box2D.Dynamics.Contacts.b2PositionSolverManifold,G=Box2D.Dynamics.b2Body,C=Box2D.Dynamics.b2TimeStep,J=Box2D.Common.b2Settings,z=Box2D.Common.Math.b2Mat22,M=Box2D.Common.Math.b2Math,B=Box2D.Common.Math.b2Vec2,E=Box2D.Collision.b2Collision,
N=Box2D.Collision.b2ContactID,K=Box2D.Collision.b2Manifold,e=Box2D.Collision.b2TimeOfImpact,j=Box2D.Collision.b2TOIInput,h=Box2D.Collision.b2WorldManifold;Box2D.inherit(k,Box2D.Dynamics.Contacts.b2Contact);k.prototype.__super=Box2D.Dynamics.Contacts.b2Contact.prototype;k.b2CircleContact=function(){Box2D.Dynamics.Contacts.b2Contact.b2Contact.apply(this,arguments)};k.Create=function(){return new k};k.Destroy=function(){};k.prototype.Reset=function(a,e){this.__super.Reset.call(this,a,e)};k.prototype.Evaluate=
function(){var e=this.m_fixtureA.GetBody(),b=this.m_fixtureB.GetBody();E.CollideCircles(this.m_manifold,this.m_fixtureA.GetShape()instanceof a?this.m_fixtureA.GetShape():null,e.m_xf,this.m_fixtureB.GetShape()instanceof a?this.m_fixtureB.GetShape():null,b.m_xf)};d.b2Contact=function(){this.m_nodeA=new r;this.m_nodeB=new r;this.m_manifold=new K;this.m_oldManifold=new K};d.prototype.GetManifold=function(){return this.m_manifold};d.prototype.GetWorldManifold=function(a){var e=this.m_fixtureA.GetBody(),
b=this.m_fixtureB.GetBody(),j=this.m_fixtureA.GetShape(),c=this.m_fixtureB.GetShape();a.Initialize(this.m_manifold,e.GetTransform(),j.m_radius,b.GetTransform(),c.m_radius)};d.prototype.IsTouching=function(){return(this.m_flags&d.e_touchingFlag)==d.e_touchingFlag};d.prototype.IsContinuous=function(){return(this.m_flags&d.e_continuousFlag)==d.e_continuousFlag};d.prototype.SetSensor=function(a){a?this.m_flags|=d.e_sensorFlag:this.m_flags&=~d.e_sensorFlag};d.prototype.IsSensor=function(){return(this.m_flags&
d.e_sensorFlag)==d.e_sensorFlag};d.prototype.SetEnabled=function(a){a?this.m_flags|=d.e_enabledFlag:this.m_flags&=~d.e_enabledFlag};d.prototype.IsEnabled=function(){return(this.m_flags&d.e_enabledFlag)==d.e_enabledFlag};d.prototype.GetNext=function(){return this.m_next};d.prototype.GetFixtureA=function(){return this.m_fixtureA};d.prototype.GetFixtureB=function(){return this.m_fixtureB};d.prototype.FlagForFiltering=function(){this.m_flags|=d.e_filterFlag};d.prototype.b2Contact=function(){};d.prototype.Reset=
function(a,e){a===void 0&&(a=null);e===void 0&&(e=null);this.m_flags=d.e_enabledFlag;if(!a||!e)this.m_fixtureB=this.m_fixtureA=null;else{if(a.IsSensor()||e.IsSensor())this.m_flags|=d.e_sensorFlag;var b=a.GetBody(),j=e.GetBody();if(b.GetType()!=G.b2_dynamicBody||b.IsBullet()||j.GetType()!=G.b2_dynamicBody||j.IsBullet())this.m_flags|=d.e_continuousFlag;this.m_fixtureA=a;this.m_fixtureB=e;this.m_manifold.m_pointCount=0;this.m_next=this.m_prev=null;this.m_nodeA.contact=null;this.m_nodeA.prev=null;this.m_nodeA.next=
null;this.m_nodeA.other=null;this.m_nodeB.contact=null;this.m_nodeB.prev=null;this.m_nodeB.next=null;this.m_nodeB.other=null}};d.prototype.Update=function(a){var e=this.m_oldManifold;this.m_oldManifold=this.m_manifold;this.m_manifold=e;this.m_flags|=d.e_enabledFlag;var b=false,e=(this.m_flags&d.e_touchingFlag)==d.e_touchingFlag,j=this.m_fixtureA.m_body,c=this.m_fixtureB.m_body,h=this.m_fixtureA.m_aabb.TestOverlap(this.m_fixtureB.m_aabb);if(this.m_flags&d.e_sensorFlag)h&&(b=this.m_fixtureA.GetShape(),
h=this.m_fixtureB.GetShape(),j=j.GetTransform(),c=c.GetTransform(),b=g.TestOverlap(b,j,h,c)),this.m_manifold.m_pointCount=0;else{j.GetType()!=G.b2_dynamicBody||j.IsBullet()||c.GetType()!=G.b2_dynamicBody||c.IsBullet()?this.m_flags|=d.e_continuousFlag:this.m_flags&=~d.e_continuousFlag;if(h){this.Evaluate();b=this.m_manifold.m_pointCount>0;for(h=0;h<this.m_manifold.m_pointCount;++h){var f=this.m_manifold.m_points[h];f.m_normalImpulse=0;f.m_tangentImpulse=0;for(var k=f.m_id,l=0;l<this.m_oldManifold.m_pointCount;++l){var m=
this.m_oldManifold.m_points[l];if(m.m_id.key==k.key){f.m_normalImpulse=m.m_normalImpulse;f.m_tangentImpulse=m.m_tangentImpulse;break}}}}else this.m_manifold.m_pointCount=0;b!=e&&(j.SetAwake(true),c.SetAwake(true))}b?this.m_flags|=d.e_touchingFlag:this.m_flags&=~d.e_touchingFlag;e==false&&b==true&&a.BeginContact(this);e==true&&b==false&&a.EndContact(this);(this.m_flags&d.e_sensorFlag)==0&&a.PreSolve(this,this.m_oldManifold)};d.prototype.Evaluate=function(){};d.prototype.ComputeTOI=function(a,b){d.s_input.proxyA.Set(this.m_fixtureA.GetShape());
d.s_input.proxyB.Set(this.m_fixtureB.GetShape());d.s_input.sweepA=a;d.s_input.sweepB=b;d.s_input.tolerance=J.b2_linearSlop;return e.TimeOfImpact(d.s_input)};Box2D.postDefs.push(function(){Box2D.Dynamics.Contacts.b2Contact.e_sensorFlag=1;Box2D.Dynamics.Contacts.b2Contact.e_continuousFlag=2;Box2D.Dynamics.Contacts.b2Contact.e_islandFlag=4;Box2D.Dynamics.Contacts.b2Contact.e_toiFlag=8;Box2D.Dynamics.Contacts.b2Contact.e_touchingFlag=16;Box2D.Dynamics.Contacts.b2Contact.e_enabledFlag=32;Box2D.Dynamics.Contacts.b2Contact.e_filterFlag=
64;Box2D.Dynamics.Contacts.b2Contact.s_input=new j});q.b2ContactConstraint=function(){this.localPlaneNormal=new B;this.localPoint=new B;this.normal=new B;this.normalMass=new z;this.K=new z};q.prototype.b2ContactConstraint=function(){this.points=new Vector(J.b2_maxManifoldPoints);for(var a=0;a<J.b2_maxManifoldPoints;a++)this.points[a]=new m};m.b2ContactConstraintPoint=function(){this.localPoint=new B;this.rA=new B;this.rB=new B};r.b2ContactEdge=function(){};I.b2ContactFactory=function(){};I.prototype.b2ContactFactory=
function(a){this.m_allocator=a;this.InitializeRegisters()};I.prototype.AddType=function(a,e,b,j){b===void 0&&(b=0);j===void 0&&(j=0);this.m_registers[b][j].createFcn=a;this.m_registers[b][j].destroyFcn=e;this.m_registers[b][j].primary=true;if(b!=j)this.m_registers[j][b].createFcn=a,this.m_registers[j][b].destroyFcn=e,this.m_registers[j][b].primary=false};I.prototype.InitializeRegisters=function(){this.m_registers=new Vector(g.e_shapeTypeCount);for(var a=0;a<g.e_shapeTypeCount;a++){this.m_registers[a]=
new Vector(g.e_shapeTypeCount);for(var e=0;e<g.e_shapeTypeCount;e++)this.m_registers[a][e]=new D}this.AddType(k.Create,k.Destroy,g.e_circleShape,g.e_circleShape);this.AddType(F.Create,F.Destroy,g.e_polygonShape,g.e_circleShape);this.AddType(H.Create,H.Destroy,g.e_polygonShape,g.e_polygonShape);this.AddType(t.Create,t.Destroy,g.e_edgeShape,g.e_circleShape);this.AddType(l.Create,l.Destroy,g.e_polygonShape,g.e_edgeShape)};I.prototype.Create=function(a,e){var b=parseInt(a.GetType()),j=parseInt(e.GetType()),
b=this.m_registers[b][j];if(b.pool)return j=b.pool,b.pool=j.m_next,b.poolCount--,j.Reset(a,e),j;j=b.createFcn;return j!=null?(b.primary?(j=j(this.m_allocator),j.Reset(a,e)):(j=j(this.m_allocator),j.Reset(e,a)),j):null};I.prototype.Destroy=function(a){a.m_manifold.m_pointCount>0&&(a.m_fixtureA.m_body.SetAwake(true),a.m_fixtureB.m_body.SetAwake(true));var e=parseInt(a.m_fixtureA.GetType()),b=parseInt(a.m_fixtureB.GetType()),e=this.m_registers[e][b];e.poolCount++;a.m_next=e.pool;e.pool=a;e=e.destroyFcn;
e(a,this.m_allocator)};D.b2ContactRegister=function(){};v.b2ContactResult=function(){this.position=new B;this.normal=new B;this.id=new N};u.b2ContactSolver=function(){this.m_step=new C;this.m_constraints=new Vector};u.prototype.b2ContactSolver=function(){};u.prototype.Initialize=function(a,e,b,j){b===void 0&&(b=0);var c;this.m_step.Set(a);this.m_allocator=j;a=0;for(this.m_constraintCount=b;this.m_constraints.length<this.m_constraintCount;)this.m_constraints[this.m_constraints.length]=new q;for(a=
0;a<b;++a){c=e[a];var j=c.m_fixtureA,h=c.m_fixtureB,d=j.m_shape.m_radius,g=h.m_shape.m_radius,f=j.m_body,k=h.m_body,l=c.GetManifold(),m=J.b2MixFriction(j.GetFriction(),h.GetFriction()),t=J.b2MixRestitution(j.GetRestitution(),h.GetRestitution()),r=f.m_linearVelocity.x,v=f.m_linearVelocity.y,y=k.m_linearVelocity.x,z=k.m_linearVelocity.y,C=f.m_angularVelocity,G=k.m_angularVelocity;J.b2Assert(l.m_pointCount>0);u.s_worldManifold.Initialize(l,f.m_xf,d,k.m_xf,g);h=u.s_worldManifold.m_normal.x;c=u.s_worldManifold.m_normal.y;
j=this.m_constraints[a];j.bodyA=f;j.bodyB=k;j.manifold=l;j.normal.x=h;j.normal.y=c;j.pointCount=l.m_pointCount;j.friction=m;j.restitution=t;j.localPlaneNormal.x=l.m_localPlaneNormal.x;j.localPlaneNormal.y=l.m_localPlaneNormal.y;j.localPoint.x=l.m_localPoint.x;j.localPoint.y=l.m_localPoint.y;j.radius=d+g;j.type=l.m_type;for(d=0;d<j.pointCount;++d){m=l.m_points[d];g=j.points[d];g.normalImpulse=m.m_normalImpulse;g.tangentImpulse=m.m_tangentImpulse;g.localPoint.SetV(m.m_localPoint);var m=g.rA.x=u.s_worldManifold.m_points[d].x-
f.m_sweep.c.x,t=g.rA.y=u.s_worldManifold.m_points[d].y-f.m_sweep.c.y,D=g.rB.x=u.s_worldManifold.m_points[d].x-k.m_sweep.c.x,H=g.rB.y=u.s_worldManifold.m_points[d].y-k.m_sweep.c.y,B=m*c-t*h,F=D*c-H*h;B*=B;F*=F;g.normalMass=1/(f.m_invMass+k.m_invMass+f.m_invI*B+k.m_invI*F);var E=f.m_mass*f.m_invMass+k.m_mass*k.m_invMass;E+=f.m_mass*f.m_invI*B+k.m_mass*k.m_invI*F;g.equalizedMass=1/E;F=c;E=-h;B=m*E-t*F;F=D*E-H*F;B*=B;F*=F;g.tangentMass=1/(f.m_invMass+k.m_invMass+f.m_invI*B+k.m_invI*F);g.velocityBias=
0;m=j.normal.x*(y+-G*H-r- -C*t)+j.normal.y*(z+G*D-v-C*m);m<-J.b2_velocityThreshold&&(g.velocityBias+=-j.restitution*m)}if(j.pointCount==2)z=j.points[0],y=j.points[1],l=f.m_invMass,f=f.m_invI,r=k.m_invMass,k=k.m_invI,v=z.rA.x*c-z.rA.y*h,z=z.rB.x*c-z.rB.y*h,C=y.rA.x*c-y.rA.y*h,y=y.rB.x*c-y.rB.y*h,h=l+r+f*v*v+k*z*z,c=l+r+f*C*C+k*y*y,k=l+r+f*v*C+k*z*y,h*h<100*(h*c-k*k)?(j.K.col1.Set(h,k),j.K.col2.Set(k,c),j.K.GetInverse(j.normalMass)):j.pointCount=1}};u.prototype.InitVelocityConstraints=function(a){for(var e=
0;e<this.m_constraintCount;++e){var b=this.m_constraints[e],j=b.bodyA,c=b.bodyB,h=j.m_invMass,d=j.m_invI,g=c.m_invMass,f=c.m_invI,k=b.normal.x,l=b.normal.y,m=l,t=-k,q=0,u=0;if(a.warmStarting){u=b.pointCount;for(q=0;q<u;++q){var r=b.points[q];r.normalImpulse*=a.dtRatio;r.tangentImpulse*=a.dtRatio;var v=r.normalImpulse*k+r.tangentImpulse*m,y=r.normalImpulse*l+r.tangentImpulse*t;j.m_angularVelocity-=d*(r.rA.x*y-r.rA.y*v);j.m_linearVelocity.x-=h*v;j.m_linearVelocity.y-=h*y;c.m_angularVelocity+=f*(r.rB.x*
y-r.rB.y*v);c.m_linearVelocity.x+=g*v;c.m_linearVelocity.y+=g*y}}else{u=b.pointCount;for(q=0;q<u;++q)j=b.points[q],j.normalImpulse=0,j.tangentImpulse=0}}};u.prototype.SolveVelocityConstraints=function(){for(var a=0,e,b=0,j=0,c=0,h=j=j=b=b=0,d=b=b=0,g=b=c=0,f=0,k,l=0;l<this.m_constraintCount;++l){var c=this.m_constraints[l],m=c.bodyA,t=c.bodyB,q=m.m_angularVelocity,r=t.m_angularVelocity,u=m.m_linearVelocity,v=t.m_linearVelocity,y=m.m_invMass,z=m.m_invI,C=t.m_invMass,F=t.m_invI,g=c.normal.x,B=f=c.normal.y;
k=-g;d=c.friction;for(a=0;a<c.pointCount;a++)e=c.points[a],b=v.x-r*e.rB.y-u.x+q*e.rA.y,j=v.y+r*e.rB.x-u.y-q*e.rA.x,b=b*B+j*k,b=e.tangentMass*-b,j=d*e.normalImpulse,j=M.Clamp(e.tangentImpulse+b,-j,j),b=j-e.tangentImpulse,h=b*B,b*=k,u.x-=y*h,u.y-=y*b,q-=z*(e.rA.x*b-e.rA.y*h),v.x+=C*h,v.y+=C*b,r+=F*(e.rB.x*b-e.rB.y*h),e.tangentImpulse=j;parseInt(c.pointCount);if(c.pointCount==1)e=c.points[0],b=v.x+-r*e.rB.y-u.x- -q*e.rA.y,j=v.y+r*e.rB.x-u.y-q*e.rA.x,c=b*g+j*f,b=-e.normalMass*(c-e.velocityBias),j=e.normalImpulse+
b,j=j>0?j:0,b=j-e.normalImpulse,h=b*g,b*=f,u.x-=y*h,u.y-=y*b,q-=z*(e.rA.x*b-e.rA.y*h),v.x+=C*h,v.y+=C*b,r+=F*(e.rB.x*b-e.rB.y*h),e.normalImpulse=j;else{e=c.points[0];var a=c.points[1],b=e.normalImpulse,d=a.normalImpulse,D=(v.x-r*e.rB.y-u.x+q*e.rA.y)*g+(v.y+r*e.rB.x-u.y-q*e.rA.x)*f,G=(v.x-r*a.rB.y-u.x+q*a.rA.y)*g+(v.y+r*a.rB.x-u.y-q*a.rA.x)*f,j=D-e.velocityBias,h=G-a.velocityBias;k=c.K;j-=k.col1.x*b+k.col2.x*d;for(h-=k.col1.y*b+k.col2.y*d;;){k=c.normalMass;B=-(k.col1.x*j+k.col2.x*h);k=-(k.col1.y*j+
k.col2.y*h);if(B>=0&&k>=0){b=B-b;d=k-d;c=b*g;b*=f;g*=d;f*=d;u.x-=y*(c+g);u.y-=y*(b+f);q-=z*(e.rA.x*b-e.rA.y*c+a.rA.x*f-a.rA.y*g);v.x+=C*(c+g);v.y+=C*(b+f);r+=F*(e.rB.x*b-e.rB.y*c+a.rB.x*f-a.rB.y*g);e.normalImpulse=B;a.normalImpulse=k;break}B=-e.normalMass*j;k=0;G=c.K.col1.y*B+h;if(B>=0&&G>=0){b=B-b;d=k-d;c=b*g;b*=f;g*=d;f*=d;u.x-=y*(c+g);u.y-=y*(b+f);q-=z*(e.rA.x*b-e.rA.y*c+a.rA.x*f-a.rA.y*g);v.x+=C*(c+g);v.y+=C*(b+f);r+=F*(e.rB.x*b-e.rB.y*c+a.rB.x*f-a.rB.y*g);e.normalImpulse=B;a.normalImpulse=k;
break}B=0;k=-a.normalMass*h;D=c.K.col2.x*k+j;if(k>=0&&D>=0){b=B-b;d=k-d;c=b*g;b*=f;g*=d;f*=d;u.x-=y*(c+g);u.y-=y*(b+f);q-=z*(e.rA.x*b-e.rA.y*c+a.rA.x*f-a.rA.y*g);v.x+=C*(c+g);v.y+=C*(b+f);r+=F*(e.rB.x*b-e.rB.y*c+a.rB.x*f-a.rB.y*g);e.normalImpulse=B;a.normalImpulse=k;break}k=B=0;D=j;G=h;if(D>=0&&G>=0){b=B-b;d=k-d;c=b*g;b*=f;g*=d;f*=d;u.x-=y*(c+g);u.y-=y*(b+f);q-=z*(e.rA.x*b-e.rA.y*c+a.rA.x*f-a.rA.y*g);v.x+=C*(c+g);v.y+=C*(b+f);r+=F*(e.rB.x*b-e.rB.y*c+a.rB.x*f-a.rB.y*g);e.normalImpulse=B;a.normalImpulse=
k;break}break}}m.m_angularVelocity=q;t.m_angularVelocity=r}};u.prototype.FinalizeVelocityConstraints=function(){for(var a=0;a<this.m_constraintCount;++a)for(var e=this.m_constraints[a],b=e.manifold,j=0;j<e.pointCount;++j){var c=b.m_points[j],h=e.points[j];c.m_normalImpulse=h.normalImpulse;c.m_tangentImpulse=h.tangentImpulse}};u.prototype.SolvePositionConstraints=function(a){a===void 0&&(a=0);for(var e=0,b=0;b<this.m_constraintCount;b++){var j=this.m_constraints[b],c=j.bodyA,h=j.bodyB,d=c.m_mass*c.m_invMass,
g=c.m_mass*c.m_invI,f=h.m_mass*h.m_invMass,k=h.m_mass*h.m_invI;u.s_psm.Initialize(j);for(var l=u.s_psm.m_normal,m=0;m<j.pointCount;m++){var t=j.points[m],q=u.s_psm.m_points[m],r=u.s_psm.m_separations[m],v=q.x-c.m_sweep.c.x,y=q.y-c.m_sweep.c.y,z=q.x-h.m_sweep.c.x,q=q.y-h.m_sweep.c.y,e=e<r?e:r,r=M.Clamp(a*(r+J.b2_linearSlop),-J.b2_maxLinearCorrection,0);r*=-t.equalizedMass;t=r*l.x;r*=l.y;c.m_sweep.c.x-=d*t;c.m_sweep.c.y-=d*r;c.m_sweep.a-=g*(v*r-y*t);c.SynchronizeTransform();h.m_sweep.c.x+=f*t;h.m_sweep.c.y+=
f*r;h.m_sweep.a+=k*(z*r-q*t);h.SynchronizeTransform()}}return e>-1.5*J.b2_linearSlop};Box2D.postDefs.push(function(){Box2D.Dynamics.Contacts.b2ContactSolver.s_worldManifold=new h;Box2D.Dynamics.Contacts.b2ContactSolver.s_psm=new y});Box2D.inherit(t,Box2D.Dynamics.Contacts.b2Contact);t.prototype.__super=Box2D.Dynamics.Contacts.b2Contact.prototype;t.b2EdgeAndCircleContact=function(){Box2D.Dynamics.Contacts.b2Contact.b2Contact.apply(this,arguments)};t.Create=function(){return new t};t.Destroy=function(){};
t.prototype.Reset=function(a,e){this.__super.Reset.call(this,a,e)};t.prototype.Evaluate=function(){var e=this.m_fixtureA.GetBody(),j=this.m_fixtureB.GetBody();this.b2CollideEdgeAndCircle(this.m_manifold,this.m_fixtureA.GetShape()instanceof b?this.m_fixtureA.GetShape():null,e.m_xf,this.m_fixtureB.GetShape()instanceof a?this.m_fixtureB.GetShape():null,j.m_xf)};t.prototype.b2CollideEdgeAndCircle=function(){};Box2D.inherit(L,Box2D.Dynamics.Contacts.b2Contact);L.prototype.__super=Box2D.Dynamics.Contacts.b2Contact.prototype;
L.b2NullContact=function(){Box2D.Dynamics.Contacts.b2Contact.b2Contact.apply(this,arguments)};L.prototype.b2NullContact=function(){this.__super.b2Contact.call(this)};L.prototype.Evaluate=function(){};Box2D.inherit(F,Box2D.Dynamics.Contacts.b2Contact);F.prototype.__super=Box2D.Dynamics.Contacts.b2Contact.prototype;F.b2PolyAndCircleContact=function(){Box2D.Dynamics.Contacts.b2Contact.b2Contact.apply(this,arguments)};F.Create=function(){return new F};F.Destroy=function(){};F.prototype.Reset=function(a,
e){this.__super.Reset.call(this,a,e);J.b2Assert(a.GetType()==g.e_polygonShape);J.b2Assert(e.GetType()==g.e_circleShape)};F.prototype.Evaluate=function(){var e=this.m_fixtureA.m_body,b=this.m_fixtureB.m_body;E.CollidePolygonAndCircle(this.m_manifold,this.m_fixtureA.GetShape()instanceof f?this.m_fixtureA.GetShape():null,e.m_xf,this.m_fixtureB.GetShape()instanceof a?this.m_fixtureB.GetShape():null,b.m_xf)};Box2D.inherit(l,Box2D.Dynamics.Contacts.b2Contact);l.prototype.__super=Box2D.Dynamics.Contacts.b2Contact.prototype;
l.b2PolyAndEdgeContact=function(){Box2D.Dynamics.Contacts.b2Contact.b2Contact.apply(this,arguments)};l.Create=function(){return new l};l.Destroy=function(){};l.prototype.Reset=function(a,e){this.__super.Reset.call(this,a,e);J.b2Assert(a.GetType()==g.e_polygonShape);J.b2Assert(e.GetType()==g.e_edgeShape)};l.prototype.Evaluate=function(){var a=this.m_fixtureA.GetBody(),e=this.m_fixtureB.GetBody();this.b2CollidePolyAndEdge(this.m_manifold,this.m_fixtureA.GetShape()instanceof f?this.m_fixtureA.GetShape():
null,a.m_xf,this.m_fixtureB.GetShape()instanceof b?this.m_fixtureB.GetShape():null,e.m_xf)};l.prototype.b2CollidePolyAndEdge=function(){};Box2D.inherit(H,Box2D.Dynamics.Contacts.b2Contact);H.prototype.__super=Box2D.Dynamics.Contacts.b2Contact.prototype;H.b2PolygonContact=function(){Box2D.Dynamics.Contacts.b2Contact.b2Contact.apply(this,arguments)};H.Create=function(){return new H};H.Destroy=function(){};H.prototype.Reset=function(a,e){this.__super.Reset.call(this,a,e)};H.prototype.Evaluate=function(){var a=
this.m_fixtureA.GetBody(),e=this.m_fixtureB.GetBody();E.CollidePolygons(this.m_manifold,this.m_fixtureA.GetShape()instanceof f?this.m_fixtureA.GetShape():null,a.m_xf,this.m_fixtureB.GetShape()instanceof f?this.m_fixtureB.GetShape():null,e.m_xf)};y.b2PositionSolverManifold=function(){};y.prototype.b2PositionSolverManifold=function(){this.m_normal=new B;this.m_separations=new Vector_a2j_Number(J.b2_maxManifoldPoints);this.m_points=new Vector(J.b2_maxManifoldPoints);for(var a=0;a<J.b2_maxManifoldPoints;a++)this.m_points[a]=
new B};y.prototype.Initialize=function(a){J.b2Assert(a.pointCount>0);var e=0,b=0,j=0,c,h=0,d=0;switch(a.type){case K.e_circles:c=a.bodyA.m_xf.R;j=a.localPoint;e=a.bodyA.m_xf.position.x+(c.col1.x*j.x+c.col2.x*j.y);b=a.bodyA.m_xf.position.y+(c.col1.y*j.x+c.col2.y*j.y);c=a.bodyB.m_xf.R;j=a.points[0].localPoint;h=a.bodyB.m_xf.position.x+(c.col1.x*j.x+c.col2.x*j.y);c=a.bodyB.m_xf.position.y+(c.col1.y*j.x+c.col2.y*j.y);var j=h-e,d=c-b,g=j*j+d*d;g>Number.MIN_VALUE*Number.MIN_VALUE?(g=Math.sqrt(g),this.m_normal.x=
j/g,this.m_normal.y=d/g):(this.m_normal.x=1,this.m_normal.y=0);this.m_points[0].x=0.5*(e+h);this.m_points[0].y=0.5*(b+c);this.m_separations[0]=j*this.m_normal.x+d*this.m_normal.y-a.radius;break;case K.e_faceA:c=a.bodyA.m_xf.R;j=a.localPlaneNormal;this.m_normal.x=c.col1.x*j.x+c.col2.x*j.y;this.m_normal.y=c.col1.y*j.x+c.col2.y*j.y;c=a.bodyA.m_xf.R;j=a.localPoint;h=a.bodyA.m_xf.position.x+(c.col1.x*j.x+c.col2.x*j.y);d=a.bodyA.m_xf.position.y+(c.col1.y*j.x+c.col2.y*j.y);c=a.bodyB.m_xf.R;for(e=0;e<a.pointCount;++e)j=
a.points[e].localPoint,b=a.bodyB.m_xf.position.x+(c.col1.x*j.x+c.col2.x*j.y),j=a.bodyB.m_xf.position.y+(c.col1.y*j.x+c.col2.y*j.y),this.m_separations[e]=(b-h)*this.m_normal.x+(j-d)*this.m_normal.y-a.radius,this.m_points[e].x=b,this.m_points[e].y=j;break;case K.e_faceB:c=a.bodyB.m_xf.R;j=a.localPlaneNormal;this.m_normal.x=c.col1.x*j.x+c.col2.x*j.y;this.m_normal.y=c.col1.y*j.x+c.col2.y*j.y;c=a.bodyB.m_xf.R;j=a.localPoint;h=a.bodyB.m_xf.position.x+(c.col1.x*j.x+c.col2.x*j.y);d=a.bodyB.m_xf.position.y+
(c.col1.y*j.x+c.col2.y*j.y);c=a.bodyA.m_xf.R;for(e=0;e<a.pointCount;++e)j=a.points[e].localPoint,b=a.bodyA.m_xf.position.x+(c.col1.x*j.x+c.col2.x*j.y),j=a.bodyA.m_xf.position.y+(c.col1.y*j.x+c.col2.y*j.y),this.m_separations[e]=(b-h)*this.m_normal.x+(j-d)*this.m_normal.y-a.radius,this.m_points[e].Set(b,j);this.m_normal.x*=-1;this.m_normal.y*=-1}};Box2D.postDefs.push(function(){Box2D.Dynamics.Contacts.b2PositionSolverManifold.circlePointA=new B;Box2D.Dynamics.Contacts.b2PositionSolverManifold.circlePointB=
new B})})();
(function(){var a=Box2D.Common.Math.b2Mat22,b=Box2D.Common.Math.b2Math,f=Box2D.Common.Math.b2Vec2,g=Box2D.Common.b2Color,k=Box2D.Dynamics.Controllers.b2BuoyancyController,d=Box2D.Dynamics.Controllers.b2ConstantAccelController,q=Box2D.Dynamics.Controllers.b2ConstantForceController,m=Box2D.Dynamics.Controllers.b2Controller,r=Box2D.Dynamics.Controllers.b2ControllerEdge,I=Box2D.Dynamics.Controllers.b2GravityController,D=Box2D.Dynamics.Controllers.b2TensorDampingController;Box2D.inherit(k,Box2D.Dynamics.Controllers.b2Controller);
k.prototype.__super=Box2D.Dynamics.Controllers.b2Controller.prototype;k.b2BuoyancyController=function(){Box2D.Dynamics.Controllers.b2Controller.b2Controller.apply(this,arguments);this.normal=new f(0,-1);this.density=this.offset=0;this.velocity=new f(0,0);this.linearDrag=2;this.angularDrag=1;this.useDensity=false;this.useWorldGravity=true;this.gravity=null};k.prototype.Step=function(){if(this.m_bodyList){if(this.useWorldGravity)this.gravity=this.GetWorld().GetGravity().Copy();for(var a=this.m_bodyList;a;a=
a.nextBody){var b=a.body;if(b.IsAwake()!=false){for(var d=new f,g=new f,k=0,l=0,m=b.GetFixtureList();m;m=m.GetNext()){var q=new f,r=m.GetShape().ComputeSubmergedArea(this.normal,this.offset,b.GetTransform(),q);k+=r;d.x+=r*q.x;d.y+=r*q.y;var C=0,C=1;l+=r*C;g.x+=r*q.x*C;g.y+=r*q.y*C}d.x/=k;d.y/=k;g.x/=l;g.y/=l;k<Number.MIN_VALUE||(l=this.gravity.GetNegative(),l.Multiply(this.density*k),b.ApplyForce(l,g),g=b.GetLinearVelocityFromWorldPoint(d),g.Subtract(this.velocity),g.Multiply(-this.linearDrag*k),
b.ApplyForce(g,d),b.ApplyTorque(-b.GetInertia()/b.GetMass()*k*b.GetAngularVelocity()*this.angularDrag))}}}};k.prototype.Draw=function(a){var b=new f,d=new f;b.x=this.normal.x*this.offset+this.normal.y*1E3;b.y=this.normal.y*this.offset-this.normal.x*1E3;d.x=this.normal.x*this.offset-this.normal.y*1E3;d.y=this.normal.y*this.offset+this.normal.x*1E3;var k=new g(0,0,1);a.DrawSegment(b,d,k)};Box2D.inherit(d,Box2D.Dynamics.Controllers.b2Controller);d.prototype.__super=Box2D.Dynamics.Controllers.b2Controller.prototype;
d.b2ConstantAccelController=function(){Box2D.Dynamics.Controllers.b2Controller.b2Controller.apply(this,arguments);this.A=new f(0,0)};d.prototype.Step=function(a){for(var a=new f(this.A.x*a.dt,this.A.y*a.dt),b=this.m_bodyList;b;b=b.nextBody){var d=b.body;d.IsAwake()&&d.SetLinearVelocity(new f(d.GetLinearVelocity().x+a.x,d.GetLinearVelocity().y+a.y))}};Box2D.inherit(q,Box2D.Dynamics.Controllers.b2Controller);q.prototype.__super=Box2D.Dynamics.Controllers.b2Controller.prototype;q.b2ConstantForceController=
function(){Box2D.Dynamics.Controllers.b2Controller.b2Controller.apply(this,arguments);this.F=new f(0,0)};q.prototype.Step=function(){for(var a=this.m_bodyList;a;a=a.nextBody){var b=a.body;b.IsAwake()&&b.ApplyForce(this.F,b.GetWorldCenter())}};m.b2Controller=function(){};m.prototype.Step=function(){};m.prototype.Draw=function(){};m.prototype.AddBody=function(a){var b=new r;b.controller=this;b.body=a;b.nextBody=this.m_bodyList;b.prevBody=null;this.m_bodyList=b;if(b.nextBody)b.nextBody.prevBody=b;this.m_bodyCount++;
b.nextController=a.m_controllerList;b.prevController=null;a.m_controllerList=b;if(b.nextController)b.nextController.prevController=b;a.m_controllerCount++};m.prototype.RemoveBody=function(a){for(var b=a.m_controllerList;b&&b.controller!=this;)b=b.nextController;if(b.prevBody)b.prevBody.nextBody=b.nextBody;if(b.nextBody)b.nextBody.prevBody=b.prevBody;if(b.nextController)b.nextController.prevController=b.prevController;if(b.prevController)b.prevController.nextController=b.nextController;if(this.m_bodyList==
b)this.m_bodyList=b.nextBody;if(a.m_controllerList==b)a.m_controllerList=b.nextController;a.m_controllerCount--;this.m_bodyCount--};m.prototype.Clear=function(){for(;this.m_bodyList;)this.RemoveBody(this.m_bodyList.body)};m.prototype.GetNext=function(){return this.m_next};m.prototype.GetWorld=function(){return this.m_world};m.prototype.GetBodyList=function(){return this.m_bodyList};r.b2ControllerEdge=function(){};Box2D.inherit(I,Box2D.Dynamics.Controllers.b2Controller);I.prototype.__super=Box2D.Dynamics.Controllers.b2Controller.prototype;
I.b2GravityController=function(){Box2D.Dynamics.Controllers.b2Controller.b2Controller.apply(this,arguments);this.G=1;this.invSqr=true};I.prototype.Step=function(){var a=null,b=null,d=null,g=0,k=null,l=null,m=null,q=0,r=0,C=0,q=null;if(this.invSqr)for(a=this.m_bodyList;a;a=a.nextBody){b=a.body;d=b.GetWorldCenter();g=b.GetMass();for(k=this.m_bodyList;k!=a;k=k.nextBody)l=k.body,m=l.GetWorldCenter(),q=m.x-d.x,r=m.y-d.y,C=q*q+r*r,C<Number.MIN_VALUE||(q=new f(q,r),q.Multiply(this.G/C/Math.sqrt(C)*g*l.GetMass()),
b.IsAwake()&&b.ApplyForce(q,d),q.Multiply(-1),l.IsAwake()&&l.ApplyForce(q,m))}else for(a=this.m_bodyList;a;a=a.nextBody){b=a.body;d=b.GetWorldCenter();g=b.GetMass();for(k=this.m_bodyList;k!=a;k=k.nextBody)l=k.body,m=l.GetWorldCenter(),q=m.x-d.x,r=m.y-d.y,C=q*q+r*r,C<Number.MIN_VALUE||(q=new f(q,r),q.Multiply(this.G/C*g*l.GetMass()),b.IsAwake()&&b.ApplyForce(q,d),q.Multiply(-1),l.IsAwake()&&l.ApplyForce(q,m))}};Box2D.inherit(D,Box2D.Dynamics.Controllers.b2Controller);D.prototype.__super=Box2D.Dynamics.Controllers.b2Controller.prototype;
D.b2TensorDampingController=function(){Box2D.Dynamics.Controllers.b2Controller.b2Controller.apply(this,arguments);this.T=new a;this.maxTimestep=0};D.prototype.SetAxisAligned=function(a,b){a===void 0&&(a=0);b===void 0&&(b=0);this.T.col1.x=-a;this.T.col1.y=0;this.T.col2.x=0;this.T.col2.y=-b;this.maxTimestep=a>0||b>0?1/Math.max(a,b):0};D.prototype.Step=function(a){a=a.dt;if(!(a<=Number.MIN_VALUE)){if(a>this.maxTimestep&&this.maxTimestep>0)a=this.maxTimestep;for(var d=this.m_bodyList;d;d=d.nextBody){var g=
d.body;if(g.IsAwake()){var k=g.GetWorldVector(b.MulMV(this.T,g.GetLocalVector(g.GetLinearVelocity())));g.SetLinearVelocity(new f(g.GetLinearVelocity().x+k.x*a,g.GetLinearVelocity().y+k.y*a))}}}}})();
(function(){var a=Box2D.Common.b2Settings,b=Box2D.Common.Math.b2Mat22,f=Box2D.Common.Math.b2Mat33,g=Box2D.Common.Math.b2Math,k=Box2D.Common.Math.b2Vec2,d=Box2D.Common.Math.b2Vec3,q=Box2D.Dynamics.Joints.b2DistanceJoint,m=Box2D.Dynamics.Joints.b2DistanceJointDef,r=Box2D.Dynamics.Joints.b2FrictionJoint,I=Box2D.Dynamics.Joints.b2FrictionJointDef,D=Box2D.Dynamics.Joints.b2GearJoint,v=Box2D.Dynamics.Joints.b2GearJointDef,u=Box2D.Dynamics.Joints.b2Jacobian,t=Box2D.Dynamics.Joints.b2Joint,L=Box2D.Dynamics.Joints.b2JointDef,
F=Box2D.Dynamics.Joints.b2JointEdge,l=Box2D.Dynamics.Joints.b2LineJoint,H=Box2D.Dynamics.Joints.b2LineJointDef,y=Box2D.Dynamics.Joints.b2MouseJoint,G=Box2D.Dynamics.Joints.b2MouseJointDef,C=Box2D.Dynamics.Joints.b2PrismaticJoint,J=Box2D.Dynamics.Joints.b2PrismaticJointDef,z=Box2D.Dynamics.Joints.b2PulleyJoint,M=Box2D.Dynamics.Joints.b2PulleyJointDef,B=Box2D.Dynamics.Joints.b2RevoluteJoint,E=Box2D.Dynamics.Joints.b2RevoluteJointDef,N=Box2D.Dynamics.Joints.b2WeldJoint,K=Box2D.Dynamics.Joints.b2WeldJointDef;
Box2D.inherit(q,Box2D.Dynamics.Joints.b2Joint);q.prototype.__super=Box2D.Dynamics.Joints.b2Joint.prototype;q.b2DistanceJoint=function(){Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this,arguments);this.m_localAnchor1=new k;this.m_localAnchor2=new k;this.m_u=new k};q.prototype.GetAnchorA=function(){return this.m_bodyA.GetWorldPoint(this.m_localAnchor1)};q.prototype.GetAnchorB=function(){return this.m_bodyB.GetWorldPoint(this.m_localAnchor2)};q.prototype.GetReactionForce=function(a){a===void 0&&(a=0);
return new k(a*this.m_impulse*this.m_u.x,a*this.m_impulse*this.m_u.y)};q.prototype.GetReactionTorque=function(){return 0};q.prototype.GetLength=function(){return this.m_length};q.prototype.SetLength=function(a){a===void 0&&(a=0);this.m_length=a};q.prototype.GetFrequency=function(){return this.m_frequencyHz};q.prototype.SetFrequency=function(a){a===void 0&&(a=0);this.m_frequencyHz=a};q.prototype.GetDampingRatio=function(){return this.m_dampingRatio};q.prototype.SetDampingRatio=function(a){a===void 0&&
(a=0);this.m_dampingRatio=a};q.prototype.b2DistanceJoint=function(a){this.__super.b2Joint.call(this,a);this.m_localAnchor1.SetV(a.localAnchorA);this.m_localAnchor2.SetV(a.localAnchorB);this.m_length=a.length;this.m_frequencyHz=a.frequencyHz;this.m_dampingRatio=a.dampingRatio;this.m_bias=this.m_gamma=this.m_impulse=0};q.prototype.InitVelocityConstraints=function(e){var b,h=0,o=this.m_bodyA,d=this.m_bodyB;b=o.m_xf.R;var g=this.m_localAnchor1.x-o.m_sweep.localCenter.x,p=this.m_localAnchor1.y-o.m_sweep.localCenter.y,
h=b.col1.x*g+b.col2.x*p,p=b.col1.y*g+b.col2.y*p,g=h;b=d.m_xf.R;var c=this.m_localAnchor2.x-d.m_sweep.localCenter.x,n=this.m_localAnchor2.y-d.m_sweep.localCenter.y,h=b.col1.x*c+b.col2.x*n,n=b.col1.y*c+b.col2.y*n,c=h;this.m_u.x=d.m_sweep.c.x+c-o.m_sweep.c.x-g;this.m_u.y=d.m_sweep.c.y+n-o.m_sweep.c.y-p;h=Math.sqrt(this.m_u.x*this.m_u.x+this.m_u.y*this.m_u.y);h>a.b2_linearSlop?this.m_u.Multiply(1/h):this.m_u.SetZero();b=g*this.m_u.y-p*this.m_u.x;var f=c*this.m_u.y-n*this.m_u.x;b=o.m_invMass+o.m_invI*
b*b+d.m_invMass+d.m_invI*f*f;this.m_mass=b!=0?1/b:0;if(this.m_frequencyHz>0){h-=this.m_length;var f=2*Math.PI*this.m_frequencyHz,k=this.m_mass*f*f;this.m_gamma=e.dt*(2*this.m_mass*this.m_dampingRatio*f+e.dt*k);this.m_gamma=this.m_gamma!=0?1/this.m_gamma:0;this.m_bias=h*e.dt*k*this.m_gamma;this.m_mass=b+this.m_gamma;this.m_mass=this.m_mass!=0?1/this.m_mass:0}e.warmStarting?(this.m_impulse*=e.dtRatio,e=this.m_impulse*this.m_u.x,b=this.m_impulse*this.m_u.y,o.m_linearVelocity.x-=o.m_invMass*e,o.m_linearVelocity.y-=
o.m_invMass*b,o.m_angularVelocity-=o.m_invI*(g*b-p*e),d.m_linearVelocity.x+=d.m_invMass*e,d.m_linearVelocity.y+=d.m_invMass*b,d.m_angularVelocity+=d.m_invI*(c*b-n*e)):this.m_impulse=0};q.prototype.SolveVelocityConstraints=function(){var a,b=this.m_bodyA,h=this.m_bodyB;a=b.m_xf.R;var o=this.m_localAnchor1.x-b.m_sweep.localCenter.x,d=this.m_localAnchor1.y-b.m_sweep.localCenter.y,g=a.col1.x*o+a.col2.x*d,d=a.col1.y*o+a.col2.y*d,o=g;a=h.m_xf.R;var p=this.m_localAnchor2.x-h.m_sweep.localCenter.x,c=this.m_localAnchor2.y-
h.m_sweep.localCenter.y,g=a.col1.x*p+a.col2.x*c,c=a.col1.y*p+a.col2.y*c,p=g,g=-this.m_mass*(this.m_u.x*(h.m_linearVelocity.x+-h.m_angularVelocity*c-(b.m_linearVelocity.x+-b.m_angularVelocity*d))+this.m_u.y*(h.m_linearVelocity.y+h.m_angularVelocity*p-(b.m_linearVelocity.y+b.m_angularVelocity*o))+this.m_bias+this.m_gamma*this.m_impulse);this.m_impulse+=g;a=g*this.m_u.x;g*=this.m_u.y;b.m_linearVelocity.x-=b.m_invMass*a;b.m_linearVelocity.y-=b.m_invMass*g;b.m_angularVelocity-=b.m_invI*(o*g-d*a);h.m_linearVelocity.x+=
h.m_invMass*a;h.m_linearVelocity.y+=h.m_invMass*g;h.m_angularVelocity+=h.m_invI*(p*g-c*a)};q.prototype.SolvePositionConstraints=function(){var e;if(this.m_frequencyHz>0)return true;var b=this.m_bodyA,h=this.m_bodyB;e=b.m_xf.R;var o=this.m_localAnchor1.x-b.m_sweep.localCenter.x,d=this.m_localAnchor1.y-b.m_sweep.localCenter.y,f=e.col1.x*o+e.col2.x*d,d=e.col1.y*o+e.col2.y*d,o=f;e=h.m_xf.R;var p=this.m_localAnchor2.x-h.m_sweep.localCenter.x,c=this.m_localAnchor2.y-h.m_sweep.localCenter.y,f=e.col1.x*p+
e.col2.x*c,c=e.col1.y*p+e.col2.y*c,p=f,f=h.m_sweep.c.x+p-b.m_sweep.c.x-o,n=h.m_sweep.c.y+c-b.m_sweep.c.y-d;e=Math.sqrt(f*f+n*n);f/=e;n/=e;e-=this.m_length;e=g.Clamp(e,-a.b2_maxLinearCorrection,a.b2_maxLinearCorrection);var k=-this.m_mass*e;this.m_u.Set(f,n);f=k*this.m_u.x;n=k*this.m_u.y;b.m_sweep.c.x-=b.m_invMass*f;b.m_sweep.c.y-=b.m_invMass*n;b.m_sweep.a-=b.m_invI*(o*n-d*f);h.m_sweep.c.x+=h.m_invMass*f;h.m_sweep.c.y+=h.m_invMass*n;h.m_sweep.a+=h.m_invI*(p*n-c*f);b.SynchronizeTransform();h.SynchronizeTransform();
return g.Abs(e)<a.b2_linearSlop};Box2D.inherit(m,Box2D.Dynamics.Joints.b2JointDef);m.prototype.__super=Box2D.Dynamics.Joints.b2JointDef.prototype;m.b2DistanceJointDef=function(){Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this,arguments);this.localAnchorA=new k;this.localAnchorB=new k};m.prototype.b2DistanceJointDef=function(){this.__super.b2JointDef.call(this);this.type=t.e_distanceJoint;this.length=1;this.dampingRatio=this.frequencyHz=0};m.prototype.Initialize=function(a,b,h,o){this.bodyA=
a;this.bodyB=b;this.localAnchorA.SetV(this.bodyA.GetLocalPoint(h));this.localAnchorB.SetV(this.bodyB.GetLocalPoint(o));a=o.x-h.x;h=o.y-h.y;this.length=Math.sqrt(a*a+h*h);this.dampingRatio=this.frequencyHz=0};Box2D.inherit(r,Box2D.Dynamics.Joints.b2Joint);r.prototype.__super=Box2D.Dynamics.Joints.b2Joint.prototype;r.b2FrictionJoint=function(){Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this,arguments);this.m_localAnchorA=new k;this.m_localAnchorB=new k;this.m_linearMass=new b;this.m_linearImpulse=
new k};r.prototype.GetAnchorA=function(){return this.m_bodyA.GetWorldPoint(this.m_localAnchorA)};r.prototype.GetAnchorB=function(){return this.m_bodyB.GetWorldPoint(this.m_localAnchorB)};r.prototype.GetReactionForce=function(a){a===void 0&&(a=0);return new k(a*this.m_linearImpulse.x,a*this.m_linearImpulse.y)};r.prototype.GetReactionTorque=function(a){a===void 0&&(a=0);return a*this.m_angularImpulse};r.prototype.SetMaxForce=function(a){a===void 0&&(a=0);this.m_maxForce=a};r.prototype.GetMaxForce=function(){return this.m_maxForce};
r.prototype.SetMaxTorque=function(a){a===void 0&&(a=0);this.m_maxTorque=a};r.prototype.GetMaxTorque=function(){return this.m_maxTorque};r.prototype.b2FrictionJoint=function(a){this.__super.b2Joint.call(this,a);this.m_localAnchorA.SetV(a.localAnchorA);this.m_localAnchorB.SetV(a.localAnchorB);this.m_linearMass.SetZero();this.m_angularMass=0;this.m_linearImpulse.SetZero();this.m_angularImpulse=0;this.m_maxForce=a.maxForce;this.m_maxTorque=a.maxTorque};r.prototype.InitVelocityConstraints=function(a){var j,
h=0,o=this.m_bodyA,d=this.m_bodyB;j=o.m_xf.R;var g=this.m_localAnchorA.x-o.m_sweep.localCenter.x,f=this.m_localAnchorA.y-o.m_sweep.localCenter.y,h=j.col1.x*g+j.col2.x*f,f=j.col1.y*g+j.col2.y*f,g=h;j=d.m_xf.R;var c=this.m_localAnchorB.x-d.m_sweep.localCenter.x,n=this.m_localAnchorB.y-d.m_sweep.localCenter.y,h=j.col1.x*c+j.col2.x*n,n=j.col1.y*c+j.col2.y*n,c=h;j=o.m_invMass;var h=d.m_invMass,k=o.m_invI,m=d.m_invI,l=new b;l.col1.x=j+h;l.col2.x=0;l.col1.y=0;l.col2.y=j+h;l.col1.x+=k*f*f;l.col2.x+=-k*g*
f;l.col1.y+=-k*g*f;l.col2.y+=k*g*g;l.col1.x+=m*n*n;l.col2.x+=-m*c*n;l.col1.y+=-m*c*n;l.col2.y+=m*c*c;l.GetInverse(this.m_linearMass);this.m_angularMass=k+m;if(this.m_angularMass>0)this.m_angularMass=1/this.m_angularMass;a.warmStarting?(this.m_linearImpulse.x*=a.dtRatio,this.m_linearImpulse.y*=a.dtRatio,this.m_angularImpulse*=a.dtRatio,a=this.m_linearImpulse,o.m_linearVelocity.x-=j*a.x,o.m_linearVelocity.y-=j*a.y,o.m_angularVelocity-=k*(g*a.y-f*a.x+this.m_angularImpulse),d.m_linearVelocity.x+=h*a.x,
d.m_linearVelocity.y+=h*a.y,d.m_angularVelocity+=m*(c*a.y-n*a.x+this.m_angularImpulse)):(this.m_linearImpulse.SetZero(),this.m_angularImpulse=0)};r.prototype.SolveVelocityConstraints=function(a){var b,h=0,o=this.m_bodyA,d=this.m_bodyB,f=o.m_linearVelocity,p=o.m_angularVelocity,c=d.m_linearVelocity,n=d.m_angularVelocity,l=o.m_invMass,m=d.m_invMass,q=o.m_invI,t=d.m_invI;b=o.m_xf.R;var r=this.m_localAnchorA.x-o.m_sweep.localCenter.x,v=this.m_localAnchorA.y-o.m_sweep.localCenter.y,h=b.col1.x*r+b.col2.x*
v,v=b.col1.y*r+b.col2.y*v,r=h;b=d.m_xf.R;var u=this.m_localAnchorB.x-d.m_sweep.localCenter.x,y=this.m_localAnchorB.y-d.m_sweep.localCenter.y,h=b.col1.x*u+b.col2.x*y,y=b.col1.y*u+b.col2.y*y,u=h;b=0;var h=-this.m_angularMass*(n-p),z=this.m_angularImpulse;b=a.dt*this.m_maxTorque;this.m_angularImpulse=g.Clamp(this.m_angularImpulse+h,-b,b);h=this.m_angularImpulse-z;p-=q*h;n+=t*h;b=g.MulMV(this.m_linearMass,new k(-(c.x-n*y-f.x+p*v),-(c.y+n*u-f.y-p*r)));h=this.m_linearImpulse.Copy();this.m_linearImpulse.Add(b);
b=a.dt*this.m_maxForce;this.m_linearImpulse.LengthSquared()>b*b&&(this.m_linearImpulse.Normalize(),this.m_linearImpulse.Multiply(b));b=g.SubtractVV(this.m_linearImpulse,h);f.x-=l*b.x;f.y-=l*b.y;p-=q*(r*b.y-v*b.x);c.x+=m*b.x;c.y+=m*b.y;n+=t*(u*b.y-y*b.x);o.m_angularVelocity=p;d.m_angularVelocity=n};r.prototype.SolvePositionConstraints=function(){return true};Box2D.inherit(I,Box2D.Dynamics.Joints.b2JointDef);I.prototype.__super=Box2D.Dynamics.Joints.b2JointDef.prototype;I.b2FrictionJointDef=function(){Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this,
arguments);this.localAnchorA=new k;this.localAnchorB=new k};I.prototype.b2FrictionJointDef=function(){this.__super.b2JointDef.call(this);this.type=t.e_frictionJoint;this.maxTorque=this.maxForce=0};I.prototype.Initialize=function(a,b,h){this.bodyA=a;this.bodyB=b;this.localAnchorA.SetV(this.bodyA.GetLocalPoint(h));this.localAnchorB.SetV(this.bodyB.GetLocalPoint(h))};Box2D.inherit(D,Box2D.Dynamics.Joints.b2Joint);D.prototype.__super=Box2D.Dynamics.Joints.b2Joint.prototype;D.b2GearJoint=function(){Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this,
arguments);this.m_groundAnchor1=new k;this.m_groundAnchor2=new k;this.m_localAnchor1=new k;this.m_localAnchor2=new k;this.m_J=new u};D.prototype.GetAnchorA=function(){return this.m_bodyA.GetWorldPoint(this.m_localAnchor1)};D.prototype.GetAnchorB=function(){return this.m_bodyB.GetWorldPoint(this.m_localAnchor2)};D.prototype.GetReactionForce=function(a){a===void 0&&(a=0);return new k(a*this.m_impulse*this.m_J.linearB.x,a*this.m_impulse*this.m_J.linearB.y)};D.prototype.GetReactionTorque=function(a){a===
void 0&&(a=0);var b=this.m_bodyB.m_xf.R,h=this.m_localAnchor1.x-this.m_bodyB.m_sweep.localCenter.x,d=this.m_localAnchor1.y-this.m_bodyB.m_sweep.localCenter.y,g=b.col1.x*h+b.col2.x*d,d=b.col1.y*h+b.col2.y*d;return a*(this.m_impulse*this.m_J.angularB-g*this.m_impulse*this.m_J.linearB.y+d*this.m_impulse*this.m_J.linearB.x)};D.prototype.GetRatio=function(){return this.m_ratio};D.prototype.SetRatio=function(a){a===void 0&&(a=0);this.m_ratio=a};D.prototype.b2GearJoint=function(a){this.__super.b2Joint.call(this,
a);var b=parseInt(a.joint1.m_type),h=parseInt(a.joint2.m_type);this.m_prismatic2=this.m_revolute2=this.m_prismatic1=this.m_revolute1=null;var d=0,g=0;this.m_ground1=a.joint1.GetBodyA();this.m_bodyA=a.joint1.GetBodyB();b==t.e_revoluteJoint?(this.m_revolute1=a.joint1 instanceof B?a.joint1:null,this.m_groundAnchor1.SetV(this.m_revolute1.m_localAnchor1),this.m_localAnchor1.SetV(this.m_revolute1.m_localAnchor2),d=this.m_revolute1.GetJointAngle()):(this.m_prismatic1=a.joint1 instanceof C?a.joint1:null,
this.m_groundAnchor1.SetV(this.m_prismatic1.m_localAnchor1),this.m_localAnchor1.SetV(this.m_prismatic1.m_localAnchor2),d=this.m_prismatic1.GetJointTranslation());this.m_ground2=a.joint2.GetBodyA();this.m_bodyB=a.joint2.GetBodyB();h==t.e_revoluteJoint?(this.m_revolute2=a.joint2 instanceof B?a.joint2:null,this.m_groundAnchor2.SetV(this.m_revolute2.m_localAnchor1),this.m_localAnchor2.SetV(this.m_revolute2.m_localAnchor2),g=this.m_revolute2.GetJointAngle()):(this.m_prismatic2=a.joint2 instanceof C?a.joint2:
null,this.m_groundAnchor2.SetV(this.m_prismatic2.m_localAnchor1),this.m_localAnchor2.SetV(this.m_prismatic2.m_localAnchor2),g=this.m_prismatic2.GetJointTranslation());this.m_ratio=a.ratio;this.m_constant=d+this.m_ratio*g;this.m_impulse=0};D.prototype.InitVelocityConstraints=function(a){var b=this.m_ground1,h=this.m_ground2,d=this.m_bodyA,g=this.m_bodyB,f=0,k=0,c=0,n=0,l=c=0,m=0;this.m_J.SetZero();this.m_revolute1?(this.m_J.angularA=-1,m+=d.m_invI):(b=b.m_xf.R,k=this.m_prismatic1.m_localXAxis1,f=b.col1.x*
k.x+b.col2.x*k.y,k=b.col1.y*k.x+b.col2.y*k.y,b=d.m_xf.R,c=this.m_localAnchor1.x-d.m_sweep.localCenter.x,n=this.m_localAnchor1.y-d.m_sweep.localCenter.y,l=b.col1.x*c+b.col2.x*n,n=b.col1.y*c+b.col2.y*n,c=l*k-n*f,this.m_J.linearA.Set(-f,-k),this.m_J.angularA=-c,m+=d.m_invMass+d.m_invI*c*c);this.m_revolute2?(this.m_J.angularB=-this.m_ratio,m+=this.m_ratio*this.m_ratio*g.m_invI):(b=h.m_xf.R,k=this.m_prismatic2.m_localXAxis1,f=b.col1.x*k.x+b.col2.x*k.y,k=b.col1.y*k.x+b.col2.y*k.y,b=g.m_xf.R,c=this.m_localAnchor2.x-
g.m_sweep.localCenter.x,n=this.m_localAnchor2.y-g.m_sweep.localCenter.y,l=b.col1.x*c+b.col2.x*n,n=b.col1.y*c+b.col2.y*n,c=l*k-n*f,this.m_J.linearB.Set(-this.m_ratio*f,-this.m_ratio*k),this.m_J.angularB=-this.m_ratio*c,m+=this.m_ratio*this.m_ratio*(g.m_invMass+g.m_invI*c*c));this.m_mass=m>0?1/m:0;a.warmStarting?(d.m_linearVelocity.x+=d.m_invMass*this.m_impulse*this.m_J.linearA.x,d.m_linearVelocity.y+=d.m_invMass*this.m_impulse*this.m_J.linearA.y,d.m_angularVelocity+=d.m_invI*this.m_impulse*this.m_J.angularA,
g.m_linearVelocity.x+=g.m_invMass*this.m_impulse*this.m_J.linearB.x,g.m_linearVelocity.y+=g.m_invMass*this.m_impulse*this.m_J.linearB.y,g.m_angularVelocity+=g.m_invI*this.m_impulse*this.m_J.angularB):this.m_impulse=0};D.prototype.SolveVelocityConstraints=function(){var a=this.m_bodyA,b=this.m_bodyB,h=-this.m_mass*this.m_J.Compute(a.m_linearVelocity,a.m_angularVelocity,b.m_linearVelocity,b.m_angularVelocity);this.m_impulse+=h;a.m_linearVelocity.x+=a.m_invMass*h*this.m_J.linearA.x;a.m_linearVelocity.y+=
a.m_invMass*h*this.m_J.linearA.y;a.m_angularVelocity+=a.m_invI*h*this.m_J.angularA;b.m_linearVelocity.x+=b.m_invMass*h*this.m_J.linearB.x;b.m_linearVelocity.y+=b.m_invMass*h*this.m_J.linearB.y;b.m_angularVelocity+=b.m_invI*h*this.m_J.angularB};D.prototype.SolvePositionConstraints=function(){var b=this.m_bodyA,j=this.m_bodyB,h=0,d=0,h=this.m_revolute1?this.m_revolute1.GetJointAngle():this.m_prismatic1.GetJointTranslation(),d=this.m_revolute2?this.m_revolute2.GetJointAngle():this.m_prismatic2.GetJointTranslation(),
h=-this.m_mass*(this.m_constant-(h+this.m_ratio*d));b.m_sweep.c.x+=b.m_invMass*h*this.m_J.linearA.x;b.m_sweep.c.y+=b.m_invMass*h*this.m_J.linearA.y;b.m_sweep.a+=b.m_invI*h*this.m_J.angularA;j.m_sweep.c.x+=j.m_invMass*h*this.m_J.linearB.x;j.m_sweep.c.y+=j.m_invMass*h*this.m_J.linearB.y;j.m_sweep.a+=j.m_invI*h*this.m_J.angularB;b.SynchronizeTransform();j.SynchronizeTransform();return 0<a.b2_linearSlop};Box2D.inherit(v,Box2D.Dynamics.Joints.b2JointDef);v.prototype.__super=Box2D.Dynamics.Joints.b2JointDef.prototype;
v.b2GearJointDef=function(){Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this,arguments)};v.prototype.b2GearJointDef=function(){this.__super.b2JointDef.call(this);this.type=t.e_gearJoint;this.joint2=this.joint1=null;this.ratio=1};u.b2Jacobian=function(){this.linearA=new k;this.linearB=new k};u.prototype.SetZero=function(){this.linearA.SetZero();this.angularA=0;this.linearB.SetZero();this.angularB=0};u.prototype.Set=function(a,b,h,d){b===void 0&&(b=0);d===void 0&&(d=0);this.linearA.SetV(a);this.angularA=
b;this.linearB.SetV(h);this.angularB=d};u.prototype.Compute=function(a,b,h,d){b===void 0&&(b=0);d===void 0&&(d=0);return this.linearA.x*a.x+this.linearA.y*a.y+this.angularA*b+(this.linearB.x*h.x+this.linearB.y*h.y)+this.angularB*d};t.b2Joint=function(){this.m_edgeA=new F;this.m_edgeB=new F;this.m_localCenterA=new k;this.m_localCenterB=new k};t.prototype.GetType=function(){return this.m_type};t.prototype.GetAnchorA=function(){return null};t.prototype.GetAnchorB=function(){return null};t.prototype.GetReactionForce=
function(){return null};t.prototype.GetReactionTorque=function(){return 0};t.prototype.GetBodyA=function(){return this.m_bodyA};t.prototype.GetBodyB=function(){return this.m_bodyB};t.prototype.GetNext=function(){return this.m_next};t.prototype.GetUserData=function(){return this.m_userData};t.prototype.SetUserData=function(a){this.m_userData=a};t.prototype.IsActive=function(){return this.m_bodyA.IsActive()&&this.m_bodyB.IsActive()};t.Create=function(a){var b=null;switch(a.type){case t.e_distanceJoint:b=
new q(a instanceof m?a:null);break;case t.e_mouseJoint:b=new y(a instanceof G?a:null);break;case t.e_prismaticJoint:b=new C(a instanceof J?a:null);break;case t.e_revoluteJoint:b=new B(a instanceof E?a:null);break;case t.e_pulleyJoint:b=new z(a instanceof M?a:null);break;case t.e_gearJoint:b=new D(a instanceof v?a:null);break;case t.e_lineJoint:b=new l(a instanceof H?a:null);break;case t.e_weldJoint:b=new N(a instanceof K?a:null);break;case t.e_frictionJoint:b=new r(a instanceof I?a:null)}return b};
t.Destroy=function(){};t.prototype.b2Joint=function(b){a.b2Assert(b.bodyA!=b.bodyB);this.m_type=b.type;this.m_next=this.m_prev=null;this.m_bodyA=b.bodyA;this.m_bodyB=b.bodyB;this.m_collideConnected=b.collideConnected;this.m_islandFlag=false;this.m_userData=b.userData};t.prototype.InitVelocityConstraints=function(){};t.prototype.SolveVelocityConstraints=function(){};t.prototype.FinalizeVelocityConstraints=function(){};t.prototype.SolvePositionConstraints=function(){return false};Box2D.postDefs.push(function(){Box2D.Dynamics.Joints.b2Joint.e_unknownJoint=
0;Box2D.Dynamics.Joints.b2Joint.e_revoluteJoint=1;Box2D.Dynamics.Joints.b2Joint.e_prismaticJoint=2;Box2D.Dynamics.Joints.b2Joint.e_distanceJoint=3;Box2D.Dynamics.Joints.b2Joint.e_pulleyJoint=4;Box2D.Dynamics.Joints.b2Joint.e_mouseJoint=5;Box2D.Dynamics.Joints.b2Joint.e_gearJoint=6;Box2D.Dynamics.Joints.b2Joint.e_lineJoint=7;Box2D.Dynamics.Joints.b2Joint.e_weldJoint=8;Box2D.Dynamics.Joints.b2Joint.e_frictionJoint=9;Box2D.Dynamics.Joints.b2Joint.e_inactiveLimit=0;Box2D.Dynamics.Joints.b2Joint.e_atLowerLimit=
1;Box2D.Dynamics.Joints.b2Joint.e_atUpperLimit=2;Box2D.Dynamics.Joints.b2Joint.e_equalLimits=3});L.b2JointDef=function(){};L.prototype.b2JointDef=function(){this.type=t.e_unknownJoint;this.bodyB=this.bodyA=this.userData=null;this.collideConnected=false};F.b2JointEdge=function(){};Box2D.inherit(l,Box2D.Dynamics.Joints.b2Joint);l.prototype.__super=Box2D.Dynamics.Joints.b2Joint.prototype;l.b2LineJoint=function(){Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this,arguments);this.m_localAnchor1=new k;this.m_localAnchor2=
new k;this.m_localXAxis1=new k;this.m_localYAxis1=new k;this.m_axis=new k;this.m_perp=new k;this.m_K=new b;this.m_impulse=new k};l.prototype.GetAnchorA=function(){return this.m_bodyA.GetWorldPoint(this.m_localAnchor1)};l.prototype.GetAnchorB=function(){return this.m_bodyB.GetWorldPoint(this.m_localAnchor2)};l.prototype.GetReactionForce=function(a){a===void 0&&(a=0);return new k(a*(this.m_impulse.x*this.m_perp.x+(this.m_motorImpulse+this.m_impulse.y)*this.m_axis.x),a*(this.m_impulse.x*this.m_perp.y+
(this.m_motorImpulse+this.m_impulse.y)*this.m_axis.y))};l.prototype.GetReactionTorque=function(a){a===void 0&&(a=0);return a*this.m_impulse.y};l.prototype.GetJointTranslation=function(){var a=this.m_bodyA,b=this.m_bodyB,h=a.GetWorldPoint(this.m_localAnchor1),d=b.GetWorldPoint(this.m_localAnchor2),b=d.x-h.x,h=d.y-h.y,a=a.GetWorldVector(this.m_localXAxis1);return a.x*b+a.y*h};l.prototype.GetJointSpeed=function(){var a=this.m_bodyA,b=this.m_bodyB,h;h=a.m_xf.R;var d=this.m_localAnchor1.x-a.m_sweep.localCenter.x,
g=this.m_localAnchor1.y-a.m_sweep.localCenter.y,f=h.col1.x*d+h.col2.x*g,g=h.col1.y*d+h.col2.y*g,d=f;h=b.m_xf.R;var k=this.m_localAnchor2.x-b.m_sweep.localCenter.x,c=this.m_localAnchor2.y-b.m_sweep.localCenter.y,f=h.col1.x*k+h.col2.x*c,c=h.col1.y*k+h.col2.y*c,k=f;h=b.m_sweep.c.x+k-(a.m_sweep.c.x+d);var f=b.m_sweep.c.y+c-(a.m_sweep.c.y+g),n=a.GetWorldVector(this.m_localXAxis1),l=a.m_linearVelocity,m=b.m_linearVelocity,a=a.m_angularVelocity,b=b.m_angularVelocity;return h*-a*n.y+f*a*n.x+(n.x*(m.x+-b*
c-l.x- -a*g)+n.y*(m.y+b*k-l.y-a*d))};l.prototype.IsLimitEnabled=function(){return this.m_enableLimit};l.prototype.EnableLimit=function(a){this.m_bodyA.SetAwake(true);this.m_bodyB.SetAwake(true);this.m_enableLimit=a};l.prototype.GetLowerLimit=function(){return this.m_lowerTranslation};l.prototype.GetUpperLimit=function(){return this.m_upperTranslation};l.prototype.SetLimits=function(a,b){a===void 0&&(a=0);b===void 0&&(b=0);this.m_bodyA.SetAwake(true);this.m_bodyB.SetAwake(true);this.m_lowerTranslation=
a;this.m_upperTranslation=b};l.prototype.IsMotorEnabled=function(){return this.m_enableMotor};l.prototype.EnableMotor=function(a){this.m_bodyA.SetAwake(true);this.m_bodyB.SetAwake(true);this.m_enableMotor=a};l.prototype.SetMotorSpeed=function(a){a===void 0&&(a=0);this.m_bodyA.SetAwake(true);this.m_bodyB.SetAwake(true);this.m_motorSpeed=a};l.prototype.GetMotorSpeed=function(){return this.m_motorSpeed};l.prototype.SetMaxMotorForce=function(a){a===void 0&&(a=0);this.m_bodyA.SetAwake(true);this.m_bodyB.SetAwake(true);
this.m_maxMotorForce=a};l.prototype.GetMaxMotorForce=function(){return this.m_maxMotorForce};l.prototype.GetMotorForce=function(){return this.m_motorImpulse};l.prototype.b2LineJoint=function(a){this.__super.b2Joint.call(this,a);this.m_localAnchor1.SetV(a.localAnchorA);this.m_localAnchor2.SetV(a.localAnchorB);this.m_localXAxis1.SetV(a.localAxisA);this.m_localYAxis1.x=-this.m_localXAxis1.y;this.m_localYAxis1.y=this.m_localXAxis1.x;this.m_impulse.SetZero();this.m_motorImpulse=this.m_motorMass=0;this.m_lowerTranslation=
a.lowerTranslation;this.m_upperTranslation=a.upperTranslation;this.m_maxMotorForce=a.maxMotorForce;this.m_motorSpeed=a.motorSpeed;this.m_enableLimit=a.enableLimit;this.m_enableMotor=a.enableMotor;this.m_limitState=t.e_inactiveLimit;this.m_axis.SetZero();this.m_perp.SetZero()};l.prototype.InitVelocityConstraints=function(b){var j=this.m_bodyA,h=this.m_bodyB,d,f=0;this.m_localCenterA.SetV(j.GetLocalCenter());this.m_localCenterB.SetV(h.GetLocalCenter());var k=j.GetTransform();h.GetTransform();d=j.m_xf.R;
var p=this.m_localAnchor1.x-this.m_localCenterA.x,c=this.m_localAnchor1.y-this.m_localCenterA.y,f=d.col1.x*p+d.col2.x*c,c=d.col1.y*p+d.col2.y*c,p=f;d=h.m_xf.R;var n=this.m_localAnchor2.x-this.m_localCenterB.x,l=this.m_localAnchor2.y-this.m_localCenterB.y,f=d.col1.x*n+d.col2.x*l,l=d.col1.y*n+d.col2.y*l,n=f;d=h.m_sweep.c.x+n-j.m_sweep.c.x-p;f=h.m_sweep.c.y+l-j.m_sweep.c.y-c;this.m_invMassA=j.m_invMass;this.m_invMassB=h.m_invMass;this.m_invIA=j.m_invI;this.m_invIB=h.m_invI;this.m_axis.SetV(g.MulMV(k.R,
this.m_localXAxis1));this.m_a1=(d+p)*this.m_axis.y-(f+c)*this.m_axis.x;this.m_a2=n*this.m_axis.y-l*this.m_axis.x;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;this.m_motorMass=this.m_motorMass>Number.MIN_VALUE?1/this.m_motorMass:0;this.m_perp.SetV(g.MulMV(k.R,this.m_localYAxis1));this.m_s1=(d+p)*this.m_perp.y-(f+c)*this.m_perp.x;this.m_s2=n*this.m_perp.y-l*this.m_perp.x;k=this.m_invMassA;p=this.m_invMassB;c=this.m_invIA;n=this.m_invIB;
this.m_K.col1.x=k+p+c*this.m_s1*this.m_s1+n*this.m_s2*this.m_s2;this.m_K.col1.y=c*this.m_s1*this.m_a1+n*this.m_s2*this.m_a2;this.m_K.col2.x=this.m_K.col1.y;this.m_K.col2.y=k+p+c*this.m_a1*this.m_a1+n*this.m_a2*this.m_a2;if(this.m_enableLimit)if(d=this.m_axis.x*d+this.m_axis.y*f,g.Abs(this.m_upperTranslation-this.m_lowerTranslation)<2*a.b2_linearSlop)this.m_limitState=t.e_equalLimits;else if(d<=this.m_lowerTranslation){if(this.m_limitState!=t.e_atLowerLimit)this.m_limitState=t.e_atLowerLimit,this.m_impulse.y=
0}else if(d>=this.m_upperTranslation){if(this.m_limitState!=t.e_atUpperLimit)this.m_limitState=t.e_atUpperLimit,this.m_impulse.y=0}else this.m_limitState=t.e_inactiveLimit,this.m_impulse.y=0;else this.m_limitState=t.e_inactiveLimit;if(this.m_enableMotor==false)this.m_motorImpulse=0;b.warmStarting?(this.m_impulse.x*=b.dtRatio,this.m_impulse.y*=b.dtRatio,this.m_motorImpulse*=b.dtRatio,b=this.m_impulse.x*this.m_perp.x+(this.m_motorImpulse+this.m_impulse.y)*this.m_axis.x,d=this.m_impulse.x*this.m_perp.y+
(this.m_motorImpulse+this.m_impulse.y)*this.m_axis.y,f=this.m_impulse.x*this.m_s1+(this.m_motorImpulse+this.m_impulse.y)*this.m_a1,k=this.m_impulse.x*this.m_s2+(this.m_motorImpulse+this.m_impulse.y)*this.m_a2,j.m_linearVelocity.x-=this.m_invMassA*b,j.m_linearVelocity.y-=this.m_invMassA*d,j.m_angularVelocity-=this.m_invIA*f,h.m_linearVelocity.x+=this.m_invMassB*b,h.m_linearVelocity.y+=this.m_invMassB*d,h.m_angularVelocity+=this.m_invIB*k):(this.m_impulse.SetZero(),this.m_motorImpulse=0)};l.prototype.SolveVelocityConstraints=
function(a){var b=this.m_bodyA,h=this.m_bodyB,d=b.m_linearVelocity,f=b.m_angularVelocity,l=h.m_linearVelocity,p=h.m_angularVelocity,c=0,n=0,m=0,q=0;if(this.m_enableMotor&&this.m_limitState!=t.e_equalLimits)q=this.m_motorMass*(this.m_motorSpeed-(this.m_axis.x*(l.x-d.x)+this.m_axis.y*(l.y-d.y)+this.m_a2*p-this.m_a1*f)),c=this.m_motorImpulse,n=a.dt*this.m_maxMotorForce,this.m_motorImpulse=g.Clamp(this.m_motorImpulse+q,-n,n),q=this.m_motorImpulse-c,c=q*this.m_axis.x,n=q*this.m_axis.y,m=q*this.m_a1,q*=
this.m_a2,d.x-=this.m_invMassA*c,d.y-=this.m_invMassA*n,f-=this.m_invIA*m,l.x+=this.m_invMassB*c,l.y+=this.m_invMassB*n,p+=this.m_invIB*q;n=this.m_perp.x*(l.x-d.x)+this.m_perp.y*(l.y-d.y)+this.m_s2*p-this.m_s1*f;if(this.m_enableLimit&&this.m_limitState!=t.e_inactiveLimit){m=this.m_axis.x*(l.x-d.x)+this.m_axis.y*(l.y-d.y)+this.m_a2*p-this.m_a1*f;c=this.m_impulse.Copy();a=this.m_K.Solve(new k,-n,-m);this.m_impulse.Add(a);if(this.m_limitState==t.e_atLowerLimit)this.m_impulse.y=g.Max(this.m_impulse.y,
0);else if(this.m_limitState==t.e_atUpperLimit)this.m_impulse.y=g.Min(this.m_impulse.y,0);n=-n-(this.m_impulse.y-c.y)*this.m_K.col2.x;m=0;m=this.m_K.col1.x!=0?n/this.m_K.col1.x+c.x:c.x;this.m_impulse.x=m;a.x=this.m_impulse.x-c.x;a.y=this.m_impulse.y-c.y;c=a.x*this.m_perp.x+a.y*this.m_axis.x;n=a.x*this.m_perp.y+a.y*this.m_axis.y;m=a.x*this.m_s1+a.y*this.m_a1;q=a.x*this.m_s2+a.y*this.m_a2}else a=0,a=this.m_K.col1.x!=0?-n/this.m_K.col1.x:0,this.m_impulse.x+=a,c=a*this.m_perp.x,n=a*this.m_perp.y,m=a*
this.m_s1,q=a*this.m_s2;d.x-=this.m_invMassA*c;d.y-=this.m_invMassA*n;f-=this.m_invIA*m;l.x+=this.m_invMassB*c;l.y+=this.m_invMassB*n;p+=this.m_invIB*q;b.m_linearVelocity.SetV(d);b.m_angularVelocity=f;h.m_linearVelocity.SetV(l);h.m_angularVelocity=p};l.prototype.SolvePositionConstraints=function(){var e=this.m_bodyA,j=this.m_bodyB,h=e.m_sweep.c,d=e.m_sweep.a,f=j.m_sweep.c,l=j.m_sweep.a,p,c=0,n=0,m=0,q=0,r=p=0,t=0,n=false,v=0,u=b.FromAngle(d),m=b.FromAngle(l);p=u;var t=this.m_localAnchor1.x-this.m_localCenterA.x,
y=this.m_localAnchor1.y-this.m_localCenterA.y,c=p.col1.x*t+p.col2.x*y,y=p.col1.y*t+p.col2.y*y,t=c;p=m;m=this.m_localAnchor2.x-this.m_localCenterB.x;q=this.m_localAnchor2.y-this.m_localCenterB.y;c=p.col1.x*m+p.col2.x*q;q=p.col1.y*m+p.col2.y*q;m=c;p=f.x+m-h.x-t;c=f.y+q-h.y-y;if(this.m_enableLimit){this.m_axis=g.MulMV(u,this.m_localXAxis1);this.m_a1=(p+t)*this.m_axis.y-(c+y)*this.m_axis.x;this.m_a2=m*this.m_axis.y-q*this.m_axis.x;var z=this.m_axis.x*p+this.m_axis.y*c;g.Abs(this.m_upperTranslation-this.m_lowerTranslation)<
2*a.b2_linearSlop?(v=g.Clamp(z,-a.b2_maxLinearCorrection,a.b2_maxLinearCorrection),r=g.Abs(z),n=true):z<=this.m_lowerTranslation?(v=g.Clamp(z-this.m_lowerTranslation+a.b2_linearSlop,-a.b2_maxLinearCorrection,0),r=this.m_lowerTranslation-z,n=true):z>=this.m_upperTranslation&&(v=g.Clamp(z-this.m_upperTranslation+a.b2_linearSlop,0,a.b2_maxLinearCorrection),r=z-this.m_upperTranslation,n=true)}this.m_perp=g.MulMV(u,this.m_localYAxis1);this.m_s1=(p+t)*this.m_perp.y-(c+y)*this.m_perp.x;this.m_s2=m*this.m_perp.y-
q*this.m_perp.x;u=new k;y=this.m_perp.x*p+this.m_perp.y*c;r=g.Max(r,g.Abs(y));t=0;n?(n=this.m_invMassA,m=this.m_invMassB,q=this.m_invIA,p=this.m_invIB,this.m_K.col1.x=n+m+q*this.m_s1*this.m_s1+p*this.m_s2*this.m_s2,this.m_K.col1.y=q*this.m_s1*this.m_a1+p*this.m_s2*this.m_a2,this.m_K.col2.x=this.m_K.col1.y,this.m_K.col2.y=n+m+q*this.m_a1*this.m_a1+p*this.m_a2*this.m_a2,this.m_K.Solve(u,-y,-v)):(n=this.m_invMassA,m=this.m_invMassB,q=this.m_invIA,p=this.m_invIB,v=n+m+q*this.m_s1*this.m_s1+p*this.m_s2*
this.m_s2,n=0,u.x=v!=0?-y/v:0,u.y=0);v=u.x*this.m_perp.x+u.y*this.m_axis.x;n=u.x*this.m_perp.y+u.y*this.m_axis.y;y=u.x*this.m_s1+u.y*this.m_a1;u=u.x*this.m_s2+u.y*this.m_a2;h.x-=this.m_invMassA*v;h.y-=this.m_invMassA*n;d-=this.m_invIA*y;f.x+=this.m_invMassB*v;f.y+=this.m_invMassB*n;l+=this.m_invIB*u;e.m_sweep.a=d;j.m_sweep.a=l;e.SynchronizeTransform();j.SynchronizeTransform();return r<=a.b2_linearSlop&&t<=a.b2_angularSlop};Box2D.inherit(H,Box2D.Dynamics.Joints.b2JointDef);H.prototype.__super=Box2D.Dynamics.Joints.b2JointDef.prototype;
H.b2LineJointDef=function(){Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this,arguments);this.localAnchorA=new k;this.localAnchorB=new k;this.localAxisA=new k};H.prototype.b2LineJointDef=function(){this.__super.b2JointDef.call(this);this.type=t.e_lineJoint;this.localAxisA.Set(1,0);this.enableLimit=false;this.upperTranslation=this.lowerTranslation=0;this.enableMotor=false;this.motorSpeed=this.maxMotorForce=0};H.prototype.Initialize=function(a,b,d,o){this.bodyA=a;this.bodyB=b;this.localAnchorA=
this.bodyA.GetLocalPoint(d);this.localAnchorB=this.bodyB.GetLocalPoint(d);this.localAxisA=this.bodyA.GetLocalVector(o)};Box2D.inherit(y,Box2D.Dynamics.Joints.b2Joint);y.prototype.__super=Box2D.Dynamics.Joints.b2Joint.prototype;y.b2MouseJoint=function(){Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this,arguments);this.K=new b;this.K1=new b;this.K2=new b;this.m_localAnchor=new k;this.m_target=new k;this.m_impulse=new k;this.m_mass=new b;this.m_C=new k};y.prototype.GetAnchorA=function(){return this.m_target};
y.prototype.GetAnchorB=function(){return this.m_bodyB.GetWorldPoint(this.m_localAnchor)};y.prototype.GetReactionForce=function(a){a===void 0&&(a=0);return new k(a*this.m_impulse.x,a*this.m_impulse.y)};y.prototype.GetReactionTorque=function(){return 0};y.prototype.GetTarget=function(){return this.m_target};y.prototype.SetTarget=function(a){this.m_bodyB.IsAwake()==false&&this.m_bodyB.SetAwake(true);this.m_target=a};y.prototype.GetMaxForce=function(){return this.m_maxForce};y.prototype.SetMaxForce=function(a){a===
void 0&&(a=0);this.m_maxForce=a};y.prototype.GetFrequency=function(){return this.m_frequencyHz};y.prototype.SetFrequency=function(a){a===void 0&&(a=0);this.m_frequencyHz=a};y.prototype.GetDampingRatio=function(){return this.m_dampingRatio};y.prototype.SetDampingRatio=function(a){a===void 0&&(a=0);this.m_dampingRatio=a};y.prototype.b2MouseJoint=function(a){this.__super.b2Joint.call(this,a);this.m_target.SetV(a.target);var b=this.m_target.x-this.m_bodyB.m_xf.position.x,d=this.m_target.y-this.m_bodyB.m_xf.position.y,
o=this.m_bodyB.m_xf.R;this.m_localAnchor.x=b*o.col1.x+d*o.col1.y;this.m_localAnchor.y=b*o.col2.x+d*o.col2.y;this.m_maxForce=a.maxForce;this.m_impulse.SetZero();this.m_frequencyHz=a.frequencyHz;this.m_dampingRatio=a.dampingRatio;this.m_gamma=this.m_beta=0};y.prototype.InitVelocityConstraints=function(a){var b=this.m_bodyB,d=b.GetMass(),o=2*Math.PI*this.m_frequencyHz,g=d*o*o;this.m_gamma=a.dt*(2*d*this.m_dampingRatio*o+a.dt*g);this.m_gamma=this.m_gamma!=0?1/this.m_gamma:0;this.m_beta=a.dt*g*this.m_gamma;
var g=b.m_xf.R,d=this.m_localAnchor.x-b.m_sweep.localCenter.x,o=this.m_localAnchor.y-b.m_sweep.localCenter.y,f=g.col1.x*d+g.col2.x*o,o=g.col1.y*d+g.col2.y*o,d=f,g=b.m_invMass,f=b.m_invI;this.K1.col1.x=g;this.K1.col2.x=0;this.K1.col1.y=0;this.K1.col2.y=g;this.K2.col1.x=f*o*o;this.K2.col2.x=-f*d*o;this.K2.col1.y=-f*d*o;this.K2.col2.y=f*d*d;this.K.SetM(this.K1);this.K.AddM(this.K2);this.K.col1.x+=this.m_gamma;this.K.col2.y+=this.m_gamma;this.K.GetInverse(this.m_mass);this.m_C.x=b.m_sweep.c.x+d-this.m_target.x;
this.m_C.y=b.m_sweep.c.y+o-this.m_target.y;b.m_angularVelocity*=0.98;this.m_impulse.x*=a.dtRatio;this.m_impulse.y*=a.dtRatio;b.m_linearVelocity.x+=g*this.m_impulse.x;b.m_linearVelocity.y+=g*this.m_impulse.y;b.m_angularVelocity+=f*(d*this.m_impulse.y-o*this.m_impulse.x)};y.prototype.SolveVelocityConstraints=function(a){var b=this.m_bodyB,d,o=0,g=0;d=b.m_xf.R;var f=this.m_localAnchor.x-b.m_sweep.localCenter.x,k=this.m_localAnchor.y-b.m_sweep.localCenter.y,o=d.col1.x*f+d.col2.x*k,k=d.col1.y*f+d.col2.y*
k,f=o,o=b.m_linearVelocity.x+-b.m_angularVelocity*k,c=b.m_linearVelocity.y+b.m_angularVelocity*f;d=this.m_mass;o=o+this.m_beta*this.m_C.x+this.m_gamma*this.m_impulse.x;g=c+this.m_beta*this.m_C.y+this.m_gamma*this.m_impulse.y;c=-(d.col1.x*o+d.col2.x*g);g=-(d.col1.y*o+d.col2.y*g);d=this.m_impulse.x;o=this.m_impulse.y;this.m_impulse.x+=c;this.m_impulse.y+=g;a=a.dt*this.m_maxForce;this.m_impulse.LengthSquared()>a*a&&this.m_impulse.Multiply(a/this.m_impulse.Length());c=this.m_impulse.x-d;g=this.m_impulse.y-
o;b.m_linearVelocity.x+=b.m_invMass*c;b.m_linearVelocity.y+=b.m_invMass*g;b.m_angularVelocity+=b.m_invI*(f*g-k*c)};y.prototype.SolvePositionConstraints=function(){return true};Box2D.inherit(G,Box2D.Dynamics.Joints.b2JointDef);G.prototype.__super=Box2D.Dynamics.Joints.b2JointDef.prototype;G.b2MouseJointDef=function(){Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this,arguments);this.target=new k};G.prototype.b2MouseJointDef=function(){this.__super.b2JointDef.call(this);this.type=t.e_mouseJoint;
this.maxForce=0;this.frequencyHz=5;this.dampingRatio=0.7};Box2D.inherit(C,Box2D.Dynamics.Joints.b2Joint);C.prototype.__super=Box2D.Dynamics.Joints.b2Joint.prototype;C.b2PrismaticJoint=function(){Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this,arguments);this.m_localAnchor1=new k;this.m_localAnchor2=new k;this.m_localXAxis1=new k;this.m_localYAxis1=new k;this.m_axis=new k;this.m_perp=new k;this.m_K=new f;this.m_impulse=new d};C.prototype.GetAnchorA=function(){return this.m_bodyA.GetWorldPoint(this.m_localAnchor1)};
C.prototype.GetAnchorB=function(){return this.m_bodyB.GetWorldPoint(this.m_localAnchor2)};C.prototype.GetReactionForce=function(a){a===void 0&&(a=0);return new k(a*(this.m_impulse.x*this.m_perp.x+(this.m_motorImpulse+this.m_impulse.z)*this.m_axis.x),a*(this.m_impulse.x*this.m_perp.y+(this.m_motorImpulse+this.m_impulse.z)*this.m_axis.y))};C.prototype.GetReactionTorque=function(a){a===void 0&&(a=0);return a*this.m_impulse.y};C.prototype.GetJointTranslation=function(){var a=this.m_bodyA,b=this.m_bodyB,
d=a.GetWorldPoint(this.m_localAnchor1),g=b.GetWorldPoint(this.m_localAnchor2),b=g.x-d.x,d=g.y-d.y,a=a.GetWorldVector(this.m_localXAxis1);return a.x*b+a.y*d};C.prototype.GetJointSpeed=function(){var a=this.m_bodyA,b=this.m_bodyB,d;d=a.m_xf.R;var g=this.m_localAnchor1.x-a.m_sweep.localCenter.x,f=this.m_localAnchor1.y-a.m_sweep.localCenter.y,k=d.col1.x*g+d.col2.x*f,f=d.col1.y*g+d.col2.y*f,g=k;d=b.m_xf.R;var p=this.m_localAnchor2.x-b.m_sweep.localCenter.x,c=this.m_localAnchor2.y-b.m_sweep.localCenter.y,
k=d.col1.x*p+d.col2.x*c,c=d.col1.y*p+d.col2.y*c,p=k;d=b.m_sweep.c.x+p-(a.m_sweep.c.x+g);var k=b.m_sweep.c.y+c-(a.m_sweep.c.y+f),n=a.GetWorldVector(this.m_localXAxis1),m=a.m_linearVelocity,l=b.m_linearVelocity,a=a.m_angularVelocity,b=b.m_angularVelocity;return d*-a*n.y+k*a*n.x+(n.x*(l.x+-b*c-m.x- -a*f)+n.y*(l.y+b*p-m.y-a*g))};C.prototype.IsLimitEnabled=function(){return this.m_enableLimit};C.prototype.EnableLimit=function(a){this.m_bodyA.SetAwake(true);this.m_bodyB.SetAwake(true);this.m_enableLimit=
a};C.prototype.GetLowerLimit=function(){return this.m_lowerTranslation};C.prototype.GetUpperLimit=function(){return this.m_upperTranslation};C.prototype.SetLimits=function(a,b){a===void 0&&(a=0);b===void 0&&(b=0);this.m_bodyA.SetAwake(true);this.m_bodyB.SetAwake(true);this.m_lowerTranslation=a;this.m_upperTranslation=b};C.prototype.IsMotorEnabled=function(){return this.m_enableMotor};C.prototype.EnableMotor=function(a){this.m_bodyA.SetAwake(true);this.m_bodyB.SetAwake(true);this.m_enableMotor=a};
C.prototype.SetMotorSpeed=function(a){a===void 0&&(a=0);this.m_bodyA.SetAwake(true);this.m_bodyB.SetAwake(true);this.m_motorSpeed=a};C.prototype.GetMotorSpeed=function(){return this.m_motorSpeed};C.prototype.SetMaxMotorForce=function(a){a===void 0&&(a=0);this.m_bodyA.SetAwake(true);this.m_bodyB.SetAwake(true);this.m_maxMotorForce=a};C.prototype.GetMotorForce=function(){return this.m_motorImpulse};C.prototype.b2PrismaticJoint=function(a){this.__super.b2Joint.call(this,a);this.m_localAnchor1.SetV(a.localAnchorA);
this.m_localAnchor2.SetV(a.localAnchorB);this.m_localXAxis1.SetV(a.localAxisA);this.m_localYAxis1.x=-this.m_localXAxis1.y;this.m_localYAxis1.y=this.m_localXAxis1.x;this.m_refAngle=a.referenceAngle;this.m_impulse.SetZero();this.m_motorImpulse=this.m_motorMass=0;this.m_lowerTranslation=a.lowerTranslation;this.m_upperTranslation=a.upperTranslation;this.m_maxMotorForce=a.maxMotorForce;this.m_motorSpeed=a.motorSpeed;this.m_enableLimit=a.enableLimit;this.m_enableMotor=a.enableMotor;this.m_limitState=t.e_inactiveLimit;
this.m_axis.SetZero();this.m_perp.SetZero()};C.prototype.InitVelocityConstraints=function(b){var d=this.m_bodyA,h=this.m_bodyB,o,f=0;this.m_localCenterA.SetV(d.GetLocalCenter());this.m_localCenterB.SetV(h.GetLocalCenter());var k=d.GetTransform();h.GetTransform();o=d.m_xf.R;var p=this.m_localAnchor1.x-this.m_localCenterA.x,c=this.m_localAnchor1.y-this.m_localCenterA.y,f=o.col1.x*p+o.col2.x*c,c=o.col1.y*p+o.col2.y*c,p=f;o=h.m_xf.R;var n=this.m_localAnchor2.x-this.m_localCenterB.x,m=this.m_localAnchor2.y-
this.m_localCenterB.y,f=o.col1.x*n+o.col2.x*m,m=o.col1.y*n+o.col2.y*m,n=f;o=h.m_sweep.c.x+n-d.m_sweep.c.x-p;f=h.m_sweep.c.y+m-d.m_sweep.c.y-c;this.m_invMassA=d.m_invMass;this.m_invMassB=h.m_invMass;this.m_invIA=d.m_invI;this.m_invIB=h.m_invI;this.m_axis.SetV(g.MulMV(k.R,this.m_localXAxis1));this.m_a1=(o+p)*this.m_axis.y-(f+c)*this.m_axis.x;this.m_a2=n*this.m_axis.y-m*this.m_axis.x;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;if(this.m_motorMass>
Number.MIN_VALUE)this.m_motorMass=1/this.m_motorMass;this.m_perp.SetV(g.MulMV(k.R,this.m_localYAxis1));this.m_s1=(o+p)*this.m_perp.y-(f+c)*this.m_perp.x;this.m_s2=n*this.m_perp.y-m*this.m_perp.x;k=this.m_invMassA;p=this.m_invMassB;c=this.m_invIA;n=this.m_invIB;this.m_K.col1.x=k+p+c*this.m_s1*this.m_s1+n*this.m_s2*this.m_s2;this.m_K.col1.y=c*this.m_s1+n*this.m_s2;this.m_K.col1.z=c*this.m_s1*this.m_a1+n*this.m_s2*this.m_a2;this.m_K.col2.x=this.m_K.col1.y;this.m_K.col2.y=c+n;this.m_K.col2.z=c*this.m_a1+
n*this.m_a2;this.m_K.col3.x=this.m_K.col1.z;this.m_K.col3.y=this.m_K.col2.z;this.m_K.col3.z=k+p+c*this.m_a1*this.m_a1+n*this.m_a2*this.m_a2;if(this.m_enableLimit)if(o=this.m_axis.x*o+this.m_axis.y*f,g.Abs(this.m_upperTranslation-this.m_lowerTranslation)<2*a.b2_linearSlop)this.m_limitState=t.e_equalLimits;else if(o<=this.m_lowerTranslation){if(this.m_limitState!=t.e_atLowerLimit)this.m_limitState=t.e_atLowerLimit,this.m_impulse.z=0}else if(o>=this.m_upperTranslation){if(this.m_limitState!=t.e_atUpperLimit)this.m_limitState=
t.e_atUpperLimit,this.m_impulse.z=0}else this.m_limitState=t.e_inactiveLimit,this.m_impulse.z=0;else this.m_limitState=t.e_inactiveLimit;if(this.m_enableMotor==false)this.m_motorImpulse=0;b.warmStarting?(this.m_impulse.x*=b.dtRatio,this.m_impulse.y*=b.dtRatio,this.m_motorImpulse*=b.dtRatio,b=this.m_impulse.x*this.m_perp.x+(this.m_motorImpulse+this.m_impulse.z)*this.m_axis.x,o=this.m_impulse.x*this.m_perp.y+(this.m_motorImpulse+this.m_impulse.z)*this.m_axis.y,f=this.m_impulse.x*this.m_s1+this.m_impulse.y+
(this.m_motorImpulse+this.m_impulse.z)*this.m_a1,k=this.m_impulse.x*this.m_s2+this.m_impulse.y+(this.m_motorImpulse+this.m_impulse.z)*this.m_a2,d.m_linearVelocity.x-=this.m_invMassA*b,d.m_linearVelocity.y-=this.m_invMassA*o,d.m_angularVelocity-=this.m_invIA*f,h.m_linearVelocity.x+=this.m_invMassB*b,h.m_linearVelocity.y+=this.m_invMassB*o,h.m_angularVelocity+=this.m_invIB*k):(this.m_impulse.SetZero(),this.m_motorImpulse=0)};C.prototype.SolveVelocityConstraints=function(a){var b=this.m_bodyA,h=this.m_bodyB,
o=b.m_linearVelocity,f=b.m_angularVelocity,m=h.m_linearVelocity,p=h.m_angularVelocity,c=0,n=0,l=0,q=0;if(this.m_enableMotor&&this.m_limitState!=t.e_equalLimits)q=this.m_motorMass*(this.m_motorSpeed-(this.m_axis.x*(m.x-o.x)+this.m_axis.y*(m.y-o.y)+this.m_a2*p-this.m_a1*f)),c=this.m_motorImpulse,a=a.dt*this.m_maxMotorForce,this.m_motorImpulse=g.Clamp(this.m_motorImpulse+q,-a,a),q=this.m_motorImpulse-c,c=q*this.m_axis.x,n=q*this.m_axis.y,l=q*this.m_a1,q*=this.m_a2,o.x-=this.m_invMassA*c,o.y-=this.m_invMassA*
n,f-=this.m_invIA*l,m.x+=this.m_invMassB*c,m.y+=this.m_invMassB*n,p+=this.m_invIB*q;l=this.m_perp.x*(m.x-o.x)+this.m_perp.y*(m.y-o.y)+this.m_s2*p-this.m_s1*f;n=p-f;if(this.m_enableLimit&&this.m_limitState!=t.e_inactiveLimit){a=this.m_axis.x*(m.x-o.x)+this.m_axis.y*(m.y-o.y)+this.m_a2*p-this.m_a1*f;c=this.m_impulse.Copy();a=this.m_K.Solve33(new d,-l,-n,-a);this.m_impulse.Add(a);if(this.m_limitState==t.e_atLowerLimit)this.m_impulse.z=g.Max(this.m_impulse.z,0);else if(this.m_limitState==t.e_atUpperLimit)this.m_impulse.z=
g.Min(this.m_impulse.z,0);l=-l-(this.m_impulse.z-c.z)*this.m_K.col3.x;n=-n-(this.m_impulse.z-c.z)*this.m_K.col3.y;n=this.m_K.Solve22(new k,l,n);n.x+=c.x;n.y+=c.y;this.m_impulse.x=n.x;this.m_impulse.y=n.y;a.x=this.m_impulse.x-c.x;a.y=this.m_impulse.y-c.y;a.z=this.m_impulse.z-c.z;c=a.x*this.m_perp.x+a.z*this.m_axis.x;n=a.x*this.m_perp.y+a.z*this.m_axis.y;l=a.x*this.m_s1+a.y+a.z*this.m_a1;q=a.x*this.m_s2+a.y+a.z*this.m_a2}else a=this.m_K.Solve22(new k,-l,-n),this.m_impulse.x+=a.x,this.m_impulse.y+=a.y,
c=a.x*this.m_perp.x,n=a.x*this.m_perp.y,l=a.x*this.m_s1+a.y,q=a.x*this.m_s2+a.y;o.x-=this.m_invMassA*c;o.y-=this.m_invMassA*n;f-=this.m_invIA*l;m.x+=this.m_invMassB*c;m.y+=this.m_invMassB*n;p+=this.m_invIB*q;b.m_linearVelocity.SetV(o);b.m_angularVelocity=f;h.m_linearVelocity.SetV(m);h.m_angularVelocity=p};C.prototype.SolvePositionConstraints=function(){var e=this.m_bodyA,j=this.m_bodyB,h=e.m_sweep.c,o=e.m_sweep.a,f=j.m_sweep.c,m=j.m_sweep.a,p,c=0,n=0,l=0,q=c=p=0,t=0,n=false,r=0,v=b.FromAngle(o),u=
b.FromAngle(m);p=v;var t=this.m_localAnchor1.x-this.m_localCenterA.x,y=this.m_localAnchor1.y-this.m_localCenterA.y,c=p.col1.x*t+p.col2.x*y,y=p.col1.y*t+p.col2.y*y,t=c;p=u;u=this.m_localAnchor2.x-this.m_localCenterB.x;l=this.m_localAnchor2.y-this.m_localCenterB.y;c=p.col1.x*u+p.col2.x*l;l=p.col1.y*u+p.col2.y*l;u=c;p=f.x+u-h.x-t;c=f.y+l-h.y-y;if(this.m_enableLimit){this.m_axis=g.MulMV(v,this.m_localXAxis1);this.m_a1=(p+t)*this.m_axis.y-(c+y)*this.m_axis.x;this.m_a2=u*this.m_axis.y-l*this.m_axis.x;var z=
this.m_axis.x*p+this.m_axis.y*c;g.Abs(this.m_upperTranslation-this.m_lowerTranslation)<2*a.b2_linearSlop?(r=g.Clamp(z,-a.b2_maxLinearCorrection,a.b2_maxLinearCorrection),q=g.Abs(z),n=true):z<=this.m_lowerTranslation?(r=g.Clamp(z-this.m_lowerTranslation+a.b2_linearSlop,-a.b2_maxLinearCorrection,0),q=this.m_lowerTranslation-z,n=true):z>=this.m_upperTranslation&&(r=g.Clamp(z-this.m_upperTranslation+a.b2_linearSlop,0,a.b2_maxLinearCorrection),q=z-this.m_upperTranslation,n=true)}this.m_perp=g.MulMV(v,
this.m_localYAxis1);this.m_s1=(p+t)*this.m_perp.y-(c+y)*this.m_perp.x;this.m_s2=u*this.m_perp.y-l*this.m_perp.x;v=new d;y=this.m_perp.x*p+this.m_perp.y*c;u=m-o-this.m_refAngle;q=g.Max(q,g.Abs(y));t=g.Abs(u);n?(n=this.m_invMassA,l=this.m_invMassB,p=this.m_invIA,c=this.m_invIB,this.m_K.col1.x=n+l+p*this.m_s1*this.m_s1+c*this.m_s2*this.m_s2,this.m_K.col1.y=p*this.m_s1+c*this.m_s2,this.m_K.col1.z=p*this.m_s1*this.m_a1+c*this.m_s2*this.m_a2,this.m_K.col2.x=this.m_K.col1.y,this.m_K.col2.y=p+c,this.m_K.col2.z=
p*this.m_a1+c*this.m_a2,this.m_K.col3.x=this.m_K.col1.z,this.m_K.col3.y=this.m_K.col2.z,this.m_K.col3.z=n+l+p*this.m_a1*this.m_a1+c*this.m_a2*this.m_a2,this.m_K.Solve33(v,-y,-u,-r)):(n=this.m_invMassA,l=this.m_invMassB,p=this.m_invIA,c=this.m_invIB,r=p*this.m_s1+c*this.m_s2,z=p+c,this.m_K.col1.Set(n+l+p*this.m_s1*this.m_s1+c*this.m_s2*this.m_s2,r,0),this.m_K.col2.Set(r,z,0),r=this.m_K.Solve22(new k,-y,-u),v.x=r.x,v.y=r.y,v.z=0);r=v.x*this.m_perp.x+v.z*this.m_axis.x;n=v.x*this.m_perp.y+v.z*this.m_axis.y;
y=v.x*this.m_s1+v.y+v.z*this.m_a1;v=v.x*this.m_s2+v.y+v.z*this.m_a2;h.x-=this.m_invMassA*r;h.y-=this.m_invMassA*n;o-=this.m_invIA*y;f.x+=this.m_invMassB*r;f.y+=this.m_invMassB*n;m+=this.m_invIB*v;e.m_sweep.a=o;j.m_sweep.a=m;e.SynchronizeTransform();j.SynchronizeTransform();return q<=a.b2_linearSlop&&t<=a.b2_angularSlop};Box2D.inherit(J,Box2D.Dynamics.Joints.b2JointDef);J.prototype.__super=Box2D.Dynamics.Joints.b2JointDef.prototype;J.b2PrismaticJointDef=function(){Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this,
arguments);this.localAnchorA=new k;this.localAnchorB=new k;this.localAxisA=new k};J.prototype.b2PrismaticJointDef=function(){this.__super.b2JointDef.call(this);this.type=t.e_prismaticJoint;this.localAxisA.Set(1,0);this.referenceAngle=0;this.enableLimit=false;this.upperTranslation=this.lowerTranslation=0;this.enableMotor=false;this.motorSpeed=this.maxMotorForce=0};J.prototype.Initialize=function(a,b,d,g){this.bodyA=a;this.bodyB=b;this.localAnchorA=this.bodyA.GetLocalPoint(d);this.localAnchorB=this.bodyB.GetLocalPoint(d);
this.localAxisA=this.bodyA.GetLocalVector(g);this.referenceAngle=this.bodyB.GetAngle()-this.bodyA.GetAngle()};Box2D.inherit(z,Box2D.Dynamics.Joints.b2Joint);z.prototype.__super=Box2D.Dynamics.Joints.b2Joint.prototype;z.b2PulleyJoint=function(){Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this,arguments);this.m_groundAnchor1=new k;this.m_groundAnchor2=new k;this.m_localAnchor1=new k;this.m_localAnchor2=new k;this.m_u1=new k;this.m_u2=new k};z.prototype.GetAnchorA=function(){return this.m_bodyA.GetWorldPoint(this.m_localAnchor1)};
z.prototype.GetAnchorB=function(){return this.m_bodyB.GetWorldPoint(this.m_localAnchor2)};z.prototype.GetReactionForce=function(a){a===void 0&&(a=0);return new k(a*this.m_impulse*this.m_u2.x,a*this.m_impulse*this.m_u2.y)};z.prototype.GetReactionTorque=function(){return 0};z.prototype.GetGroundAnchorA=function(){var a=this.m_ground.m_xf.position.Copy();a.Add(this.m_groundAnchor1);return a};z.prototype.GetGroundAnchorB=function(){var a=this.m_ground.m_xf.position.Copy();a.Add(this.m_groundAnchor2);
return a};z.prototype.GetLength1=function(){var a=this.m_bodyA.GetWorldPoint(this.m_localAnchor1),b=a.x-(this.m_ground.m_xf.position.x+this.m_groundAnchor1.x),a=a.y-(this.m_ground.m_xf.position.y+this.m_groundAnchor1.y);return Math.sqrt(b*b+a*a)};z.prototype.GetLength2=function(){var a=this.m_bodyB.GetWorldPoint(this.m_localAnchor2),b=a.x-(this.m_ground.m_xf.position.x+this.m_groundAnchor2.x),a=a.y-(this.m_ground.m_xf.position.y+this.m_groundAnchor2.y);return Math.sqrt(b*b+a*a)};z.prototype.GetRatio=
function(){return this.m_ratio};z.prototype.b2PulleyJoint=function(a){this.__super.b2Joint.call(this,a);this.m_ground=this.m_bodyA.m_world.m_groundBody;this.m_groundAnchor1.x=a.groundAnchorA.x-this.m_ground.m_xf.position.x;this.m_groundAnchor1.y=a.groundAnchorA.y-this.m_ground.m_xf.position.y;this.m_groundAnchor2.x=a.groundAnchorB.x-this.m_ground.m_xf.position.x;this.m_groundAnchor2.y=a.groundAnchorB.y-this.m_ground.m_xf.position.y;this.m_localAnchor1.SetV(a.localAnchorA);this.m_localAnchor2.SetV(a.localAnchorB);
this.m_ratio=a.ratio;this.m_constant=a.lengthA+this.m_ratio*a.lengthB;this.m_maxLength1=g.Min(a.maxLengthA,this.m_constant-this.m_ratio*z.b2_minPulleyLength);this.m_maxLength2=g.Min(a.maxLengthB,(this.m_constant-z.b2_minPulleyLength)/this.m_ratio);this.m_limitImpulse2=this.m_limitImpulse1=this.m_impulse=0};z.prototype.InitVelocityConstraints=function(b){var d=this.m_bodyA,h=this.m_bodyB,g;g=d.m_xf.R;var f=this.m_localAnchor1.x-d.m_sweep.localCenter.x,k=this.m_localAnchor1.y-d.m_sweep.localCenter.y,
l=g.col1.x*f+g.col2.x*k,k=g.col1.y*f+g.col2.y*k,f=l;g=h.m_xf.R;var c=this.m_localAnchor2.x-h.m_sweep.localCenter.x,n=this.m_localAnchor2.y-h.m_sweep.localCenter.y,l=g.col1.x*c+g.col2.x*n,n=g.col1.y*c+g.col2.y*n,c=l;g=h.m_sweep.c.x+c;var l=h.m_sweep.c.y+n,m=this.m_ground.m_xf.position.x+this.m_groundAnchor2.x,q=this.m_ground.m_xf.position.y+this.m_groundAnchor2.y;this.m_u1.Set(d.m_sweep.c.x+f-(this.m_ground.m_xf.position.x+this.m_groundAnchor1.x),d.m_sweep.c.y+k-(this.m_ground.m_xf.position.y+this.m_groundAnchor1.y));
this.m_u2.Set(g-m,l-q);g=this.m_u1.Length();l=this.m_u2.Length();g>a.b2_linearSlop?this.m_u1.Multiply(1/g):this.m_u1.SetZero();l>a.b2_linearSlop?this.m_u2.Multiply(1/l):this.m_u2.SetZero();this.m_constant-g-this.m_ratio*l>0?(this.m_state=t.e_inactiveLimit,this.m_impulse=0):this.m_state=t.e_atUpperLimit;g<this.m_maxLength1?(this.m_limitState1=t.e_inactiveLimit,this.m_limitImpulse1=0):this.m_limitState1=t.e_atUpperLimit;l<this.m_maxLength2?(this.m_limitState2=t.e_inactiveLimit,this.m_limitImpulse2=
0):this.m_limitState2=t.e_atUpperLimit;g=f*this.m_u1.y-k*this.m_u1.x;l=c*this.m_u2.y-n*this.m_u2.x;this.m_limitMass1=d.m_invMass+d.m_invI*g*g;this.m_limitMass2=h.m_invMass+h.m_invI*l*l;this.m_pulleyMass=this.m_limitMass1+this.m_ratio*this.m_ratio*this.m_limitMass2;this.m_limitMass1=1/this.m_limitMass1;this.m_limitMass2=1/this.m_limitMass2;this.m_pulleyMass=1/this.m_pulleyMass;b.warmStarting?(this.m_impulse*=b.dtRatio,this.m_limitImpulse1*=b.dtRatio,this.m_limitImpulse2*=b.dtRatio,b=(-this.m_impulse-
this.m_limitImpulse1)*this.m_u1.x,g=(-this.m_impulse-this.m_limitImpulse1)*this.m_u1.y,l=(-this.m_ratio*this.m_impulse-this.m_limitImpulse2)*this.m_u2.x,m=(-this.m_ratio*this.m_impulse-this.m_limitImpulse2)*this.m_u2.y,d.m_linearVelocity.x+=d.m_invMass*b,d.m_linearVelocity.y+=d.m_invMass*g,d.m_angularVelocity+=d.m_invI*(f*g-k*b),h.m_linearVelocity.x+=h.m_invMass*l,h.m_linearVelocity.y+=h.m_invMass*m,h.m_angularVelocity+=h.m_invI*(c*m-n*l)):this.m_limitImpulse2=this.m_limitImpulse1=this.m_impulse=
0};z.prototype.SolveVelocityConstraints=function(){var a=this.m_bodyA,b=this.m_bodyB,d;d=a.m_xf.R;var f=this.m_localAnchor1.x-a.m_sweep.localCenter.x,k=this.m_localAnchor1.y-a.m_sweep.localCenter.y,l=d.col1.x*f+d.col2.x*k,k=d.col1.y*f+d.col2.y*k,f=l;d=b.m_xf.R;var m=this.m_localAnchor2.x-b.m_sweep.localCenter.x,c=this.m_localAnchor2.y-b.m_sweep.localCenter.y,l=d.col1.x*m+d.col2.x*c,c=d.col1.y*m+d.col2.y*c,m=l,n=l=d=0,s=0;d=s=d=s=n=l=d=0;if(this.m_state==t.e_atUpperLimit)d=a.m_linearVelocity.x+-a.m_angularVelocity*
k,l=a.m_linearVelocity.y+a.m_angularVelocity*f,n=b.m_linearVelocity.x+-b.m_angularVelocity*c,s=b.m_linearVelocity.y+b.m_angularVelocity*m,d=-(this.m_u1.x*d+this.m_u1.y*l)-this.m_ratio*(this.m_u2.x*n+this.m_u2.y*s),s=this.m_pulleyMass*-d,d=this.m_impulse,this.m_impulse=g.Max(0,this.m_impulse+s),s=this.m_impulse-d,d=-s*this.m_u1.x,l=-s*this.m_u1.y,n=-this.m_ratio*s*this.m_u2.x,s=-this.m_ratio*s*this.m_u2.y,a.m_linearVelocity.x+=a.m_invMass*d,a.m_linearVelocity.y+=a.m_invMass*l,a.m_angularVelocity+=
a.m_invI*(f*l-k*d),b.m_linearVelocity.x+=b.m_invMass*n,b.m_linearVelocity.y+=b.m_invMass*s,b.m_angularVelocity+=b.m_invI*(m*s-c*n);if(this.m_limitState1==t.e_atUpperLimit)d=a.m_linearVelocity.x+-a.m_angularVelocity*k,l=a.m_linearVelocity.y+a.m_angularVelocity*f,d=-(this.m_u1.x*d+this.m_u1.y*l),s=-this.m_limitMass1*d,d=this.m_limitImpulse1,this.m_limitImpulse1=g.Max(0,this.m_limitImpulse1+s),s=this.m_limitImpulse1-d,d=-s*this.m_u1.x,l=-s*this.m_u1.y,a.m_linearVelocity.x+=a.m_invMass*d,a.m_linearVelocity.y+=
a.m_invMass*l,a.m_angularVelocity+=a.m_invI*(f*l-k*d);if(this.m_limitState2==t.e_atUpperLimit)n=b.m_linearVelocity.x+-b.m_angularVelocity*c,s=b.m_linearVelocity.y+b.m_angularVelocity*m,d=-(this.m_u2.x*n+this.m_u2.y*s),s=-this.m_limitMass2*d,d=this.m_limitImpulse2,this.m_limitImpulse2=g.Max(0,this.m_limitImpulse2+s),s=this.m_limitImpulse2-d,n=-s*this.m_u2.x,s=-s*this.m_u2.y,b.m_linearVelocity.x+=b.m_invMass*n,b.m_linearVelocity.y+=b.m_invMass*s,b.m_angularVelocity+=b.m_invI*(m*s-c*n)};z.prototype.SolvePositionConstraints=
function(){var b=this.m_bodyA,d=this.m_bodyB,h,f=this.m_ground.m_xf.position.x+this.m_groundAnchor1.x,k=this.m_ground.m_xf.position.y+this.m_groundAnchor1.y,l=this.m_ground.m_xf.position.x+this.m_groundAnchor2.x,m=this.m_ground.m_xf.position.y+this.m_groundAnchor2.y,c=0,n=0,s=0,q=0,r=h=0,v=0,u=0,y=r=u=h=r=h=0;if(this.m_state==t.e_atUpperLimit)h=b.m_xf.R,c=this.m_localAnchor1.x-b.m_sweep.localCenter.x,n=this.m_localAnchor1.y-b.m_sweep.localCenter.y,r=h.col1.x*c+h.col2.x*n,n=h.col1.y*c+h.col2.y*n,c=
r,h=d.m_xf.R,s=this.m_localAnchor2.x-d.m_sweep.localCenter.x,q=this.m_localAnchor2.y-d.m_sweep.localCenter.y,r=h.col1.x*s+h.col2.x*q,q=h.col1.y*s+h.col2.y*q,s=r,h=b.m_sweep.c.x+c,r=b.m_sweep.c.y+n,v=d.m_sweep.c.x+s,u=d.m_sweep.c.y+q,this.m_u1.Set(h-f,r-k),this.m_u2.Set(v-l,u-m),h=this.m_u1.Length(),r=this.m_u2.Length(),h>a.b2_linearSlop?this.m_u1.Multiply(1/h):this.m_u1.SetZero(),r>a.b2_linearSlop?this.m_u2.Multiply(1/r):this.m_u2.SetZero(),h=this.m_constant-h-this.m_ratio*r,y=g.Max(y,-h),h=g.Clamp(h+
a.b2_linearSlop,-a.b2_maxLinearCorrection,0),u=-this.m_pulleyMass*h,h=-u*this.m_u1.x,r=-u*this.m_u1.y,v=-this.m_ratio*u*this.m_u2.x,u=-this.m_ratio*u*this.m_u2.y,b.m_sweep.c.x+=b.m_invMass*h,b.m_sweep.c.y+=b.m_invMass*r,b.m_sweep.a+=b.m_invI*(c*r-n*h),d.m_sweep.c.x+=d.m_invMass*v,d.m_sweep.c.y+=d.m_invMass*u,d.m_sweep.a+=d.m_invI*(s*u-q*v),b.SynchronizeTransform(),d.SynchronizeTransform();if(this.m_limitState1==t.e_atUpperLimit)h=b.m_xf.R,c=this.m_localAnchor1.x-b.m_sweep.localCenter.x,n=this.m_localAnchor1.y-
b.m_sweep.localCenter.y,r=h.col1.x*c+h.col2.x*n,n=h.col1.y*c+h.col2.y*n,c=r,h=b.m_sweep.c.x+c,r=b.m_sweep.c.y+n,this.m_u1.Set(h-f,r-k),h=this.m_u1.Length(),h>a.b2_linearSlop?(this.m_u1.x*=1/h,this.m_u1.y*=1/h):this.m_u1.SetZero(),h=this.m_maxLength1-h,y=g.Max(y,-h),h=g.Clamp(h+a.b2_linearSlop,-a.b2_maxLinearCorrection,0),u=-this.m_limitMass1*h,h=-u*this.m_u1.x,r=-u*this.m_u1.y,b.m_sweep.c.x+=b.m_invMass*h,b.m_sweep.c.y+=b.m_invMass*r,b.m_sweep.a+=b.m_invI*(c*r-n*h),b.SynchronizeTransform();if(this.m_limitState2==
t.e_atUpperLimit)h=d.m_xf.R,s=this.m_localAnchor2.x-d.m_sweep.localCenter.x,q=this.m_localAnchor2.y-d.m_sweep.localCenter.y,r=h.col1.x*s+h.col2.x*q,q=h.col1.y*s+h.col2.y*q,s=r,v=d.m_sweep.c.x+s,u=d.m_sweep.c.y+q,this.m_u2.Set(v-l,u-m),r=this.m_u2.Length(),r>a.b2_linearSlop?(this.m_u2.x*=1/r,this.m_u2.y*=1/r):this.m_u2.SetZero(),h=this.m_maxLength2-r,y=g.Max(y,-h),h=g.Clamp(h+a.b2_linearSlop,-a.b2_maxLinearCorrection,0),u=-this.m_limitMass2*h,v=-u*this.m_u2.x,u=-u*this.m_u2.y,d.m_sweep.c.x+=d.m_invMass*
v,d.m_sweep.c.y+=d.m_invMass*u,d.m_sweep.a+=d.m_invI*(s*u-q*v),d.SynchronizeTransform();return y<a.b2_linearSlop};Box2D.postDefs.push(function(){Box2D.Dynamics.Joints.b2PulleyJoint.b2_minPulleyLength=2});Box2D.inherit(M,Box2D.Dynamics.Joints.b2JointDef);M.prototype.__super=Box2D.Dynamics.Joints.b2JointDef.prototype;M.b2PulleyJointDef=function(){Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this,arguments);this.groundAnchorA=new k;this.groundAnchorB=new k;this.localAnchorA=new k;this.localAnchorB=
new k};M.prototype.b2PulleyJointDef=function(){this.__super.b2JointDef.call(this);this.type=t.e_pulleyJoint;this.groundAnchorA.Set(-1,1);this.groundAnchorB.Set(1,1);this.localAnchorA.Set(-1,0);this.localAnchorB.Set(1,0);this.maxLengthB=this.lengthB=this.maxLengthA=this.lengthA=0;this.ratio=1;this.collideConnected=true};M.prototype.Initialize=function(a,b,d,g,f,k,l){l===void 0&&(l=0);this.bodyA=a;this.bodyB=b;this.groundAnchorA.SetV(d);this.groundAnchorB.SetV(g);this.localAnchorA=this.bodyA.GetLocalPoint(f);
this.localAnchorB=this.bodyB.GetLocalPoint(k);a=f.x-d.x;d=f.y-d.y;this.lengthA=Math.sqrt(a*a+d*d);d=k.x-g.x;g=k.y-g.y;this.lengthB=Math.sqrt(d*d+g*g);this.ratio=l;l=this.lengthA+this.ratio*this.lengthB;this.maxLengthA=l-this.ratio*z.b2_minPulleyLength;this.maxLengthB=(l-z.b2_minPulleyLength)/this.ratio};Box2D.inherit(B,Box2D.Dynamics.Joints.b2Joint);B.prototype.__super=Box2D.Dynamics.Joints.b2Joint.prototype;B.b2RevoluteJoint=function(){Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this,arguments);
this.K=new b;this.K1=new b;this.K2=new b;this.K3=new b;this.impulse3=new d;this.impulse2=new k;this.reduced=new k;this.m_localAnchor1=new k;this.m_localAnchor2=new k;this.m_impulse=new d;this.m_mass=new f};B.prototype.GetAnchorA=function(){return this.m_bodyA.GetWorldPoint(this.m_localAnchor1)};B.prototype.GetAnchorB=function(){return this.m_bodyB.GetWorldPoint(this.m_localAnchor2)};B.prototype.GetReactionForce=function(a){a===void 0&&(a=0);return new k(a*this.m_impulse.x,a*this.m_impulse.y)};B.prototype.GetReactionTorque=
function(a){a===void 0&&(a=0);return a*this.m_impulse.z};B.prototype.GetJointAngle=function(){return this.m_bodyB.m_sweep.a-this.m_bodyA.m_sweep.a-this.m_referenceAngle};B.prototype.GetJointSpeed=function(){return this.m_bodyB.m_angularVelocity-this.m_bodyA.m_angularVelocity};B.prototype.IsLimitEnabled=function(){return this.m_enableLimit};B.prototype.EnableLimit=function(a){this.m_enableLimit=a};B.prototype.GetLowerLimit=function(){return this.m_lowerAngle};B.prototype.GetUpperLimit=function(){return this.m_upperAngle};
B.prototype.SetLimits=function(a,b){a===void 0&&(a=0);b===void 0&&(b=0);this.m_lowerAngle=a;this.m_upperAngle=b};B.prototype.IsMotorEnabled=function(){this.m_bodyA.SetAwake(true);this.m_bodyB.SetAwake(true);return this.m_enableMotor};B.prototype.EnableMotor=function(a){this.m_enableMotor=a};B.prototype.SetMotorSpeed=function(a){a===void 0&&(a=0);this.m_bodyA.SetAwake(true);this.m_bodyB.SetAwake(true);this.m_motorSpeed=a};B.prototype.GetMotorSpeed=function(){return this.m_motorSpeed};B.prototype.SetMaxMotorTorque=
function(a){a===void 0&&(a=0);this.m_maxMotorTorque=a};B.prototype.GetMotorTorque=function(){return this.m_maxMotorTorque};B.prototype.b2RevoluteJoint=function(a){this.__super.b2Joint.call(this,a);this.m_localAnchor1.SetV(a.localAnchorA);this.m_localAnchor2.SetV(a.localAnchorB);this.m_referenceAngle=a.referenceAngle;this.m_impulse.SetZero();this.m_motorImpulse=0;this.m_lowerAngle=a.lowerAngle;this.m_upperAngle=a.upperAngle;this.m_maxMotorTorque=a.maxMotorTorque;this.m_motorSpeed=a.motorSpeed;this.m_enableLimit=
a.enableLimit;this.m_enableMotor=a.enableMotor;this.m_limitState=t.e_inactiveLimit};B.prototype.InitVelocityConstraints=function(b){var d=this.m_bodyA,h=this.m_bodyB,f,k=0;f=d.m_xf.R;var l=this.m_localAnchor1.x-d.m_sweep.localCenter.x,m=this.m_localAnchor1.y-d.m_sweep.localCenter.y,k=f.col1.x*l+f.col2.x*m,m=f.col1.y*l+f.col2.y*m,l=k;f=h.m_xf.R;var c=this.m_localAnchor2.x-h.m_sweep.localCenter.x,n=this.m_localAnchor2.y-h.m_sweep.localCenter.y,k=f.col1.x*c+f.col2.x*n,n=f.col1.y*c+f.col2.y*n,c=k;f=d.m_invMass;
var k=h.m_invMass,s=d.m_invI,q=h.m_invI;this.m_mass.col1.x=f+k+m*m*s+n*n*q;this.m_mass.col2.x=-m*l*s-n*c*q;this.m_mass.col3.x=-m*s-n*q;this.m_mass.col1.y=this.m_mass.col2.x;this.m_mass.col2.y=f+k+l*l*s+c*c*q;this.m_mass.col3.y=l*s+c*q;this.m_mass.col1.z=this.m_mass.col3.x;this.m_mass.col2.z=this.m_mass.col3.y;this.m_mass.col3.z=s+q;this.m_motorMass=1/(s+q);if(this.m_enableMotor==false)this.m_motorImpulse=0;if(this.m_enableLimit){var r=h.m_sweep.a-d.m_sweep.a-this.m_referenceAngle;if(g.Abs(this.m_upperAngle-
this.m_lowerAngle)<2*a.b2_angularSlop)this.m_limitState=t.e_equalLimits;else if(r<=this.m_lowerAngle){if(this.m_limitState!=t.e_atLowerLimit)this.m_impulse.z=0;this.m_limitState=t.e_atLowerLimit}else if(r>=this.m_upperAngle){if(this.m_limitState!=t.e_atUpperLimit)this.m_impulse.z=0;this.m_limitState=t.e_atUpperLimit}else this.m_limitState=t.e_inactiveLimit,this.m_impulse.z=0}else this.m_limitState=t.e_inactiveLimit;b.warmStarting?(this.m_impulse.x*=b.dtRatio,this.m_impulse.y*=b.dtRatio,this.m_motorImpulse*=
b.dtRatio,b=this.m_impulse.x,r=this.m_impulse.y,d.m_linearVelocity.x-=f*b,d.m_linearVelocity.y-=f*r,d.m_angularVelocity-=s*(l*r-m*b+this.m_motorImpulse+this.m_impulse.z),h.m_linearVelocity.x+=k*b,h.m_linearVelocity.y+=k*r,h.m_angularVelocity+=q*(c*r-n*b+this.m_motorImpulse+this.m_impulse.z)):(this.m_impulse.SetZero(),this.m_motorImpulse=0)};B.prototype.SolveVelocityConstraints=function(a){var b=this.m_bodyA,d=this.m_bodyB,f=0,k=f=0,l=0,m=0,c=0,n=b.m_linearVelocity,q=b.m_angularVelocity,r=d.m_linearVelocity,
v=d.m_angularVelocity,u=b.m_invMass,y=d.m_invMass,z=b.m_invI,C=d.m_invI;if(this.m_enableMotor&&this.m_limitState!=t.e_equalLimits)k=this.m_motorMass*-(v-q-this.m_motorSpeed),l=this.m_motorImpulse,m=a.dt*this.m_maxMotorTorque,this.m_motorImpulse=g.Clamp(this.m_motorImpulse+k,-m,m),k=this.m_motorImpulse-l,q-=z*k,v+=C*k;if(this.m_enableLimit&&this.m_limitState!=t.e_inactiveLimit){var a=b.m_xf.R,k=this.m_localAnchor1.x-b.m_sweep.localCenter.x,l=this.m_localAnchor1.y-b.m_sweep.localCenter.y,f=a.col1.x*
k+a.col2.x*l,l=a.col1.y*k+a.col2.y*l,k=f,a=d.m_xf.R,m=this.m_localAnchor2.x-d.m_sweep.localCenter.x,c=this.m_localAnchor2.y-d.m_sweep.localCenter.y,f=a.col1.x*m+a.col2.x*c,c=a.col1.y*m+a.col2.y*c,m=f,a=r.x+-v*c-n.x- -q*l,B=r.y+v*m-n.y-q*k;this.m_mass.Solve33(this.impulse3,-a,-B,-(v-q));if(this.m_limitState==t.e_equalLimits)this.m_impulse.Add(this.impulse3);else if(this.m_limitState==t.e_atLowerLimit){if(f=this.m_impulse.z+this.impulse3.z,f<0)this.m_mass.Solve22(this.reduced,-a,-B),this.impulse3.x=
this.reduced.x,this.impulse3.y=this.reduced.y,this.impulse3.z=-this.m_impulse.z,this.m_impulse.x+=this.reduced.x,this.m_impulse.y+=this.reduced.y,this.m_impulse.z=0}else if(this.m_limitState==t.e_atUpperLimit&&(f=this.m_impulse.z+this.impulse3.z,f>0))this.m_mass.Solve22(this.reduced,-a,-B),this.impulse3.x=this.reduced.x,this.impulse3.y=this.reduced.y,this.impulse3.z=-this.m_impulse.z,this.m_impulse.x+=this.reduced.x,this.m_impulse.y+=this.reduced.y,this.m_impulse.z=0;n.x-=u*this.impulse3.x;n.y-=u*
this.impulse3.y;q-=z*(k*this.impulse3.y-l*this.impulse3.x+this.impulse3.z);r.x+=y*this.impulse3.x;r.y+=y*this.impulse3.y;v+=C*(m*this.impulse3.y-c*this.impulse3.x+this.impulse3.z)}else a=b.m_xf.R,k=this.m_localAnchor1.x-b.m_sweep.localCenter.x,l=this.m_localAnchor1.y-b.m_sweep.localCenter.y,f=a.col1.x*k+a.col2.x*l,l=a.col1.y*k+a.col2.y*l,k=f,a=d.m_xf.R,m=this.m_localAnchor2.x-d.m_sweep.localCenter.x,c=this.m_localAnchor2.y-d.m_sweep.localCenter.y,f=a.col1.x*m+a.col2.x*c,c=a.col1.y*m+a.col2.y*c,m=
f,this.m_mass.Solve22(this.impulse2,-(r.x+-v*c-n.x- -q*l),-(r.y+v*m-n.y-q*k)),this.m_impulse.x+=this.impulse2.x,this.m_impulse.y+=this.impulse2.y,n.x-=u*this.impulse2.x,n.y-=u*this.impulse2.y,q-=z*(k*this.impulse2.y-l*this.impulse2.x),r.x+=y*this.impulse2.x,r.y+=y*this.impulse2.y,v+=C*(m*this.impulse2.y-c*this.impulse2.x);b.m_linearVelocity.SetV(n);b.m_angularVelocity=q;d.m_linearVelocity.SetV(r);d.m_angularVelocity=v};B.prototype.SolvePositionConstraints=function(){var b=0,d,h=this.m_bodyA,f=this.m_bodyB,
k=0,l=d=0,m=0,c=0;if(this.m_enableLimit&&this.m_limitState!=t.e_inactiveLimit){var b=f.m_sweep.a-h.m_sweep.a-this.m_referenceAngle,n=0;this.m_limitState==t.e_equalLimits?(b=g.Clamp(b-this.m_lowerAngle,-a.b2_maxAngularCorrection,a.b2_maxAngularCorrection),n=-this.m_motorMass*b,k=g.Abs(b)):this.m_limitState==t.e_atLowerLimit?(b-=this.m_lowerAngle,k=-b,b=g.Clamp(b+a.b2_angularSlop,-a.b2_maxAngularCorrection,0),n=-this.m_motorMass*b):this.m_limitState==t.e_atUpperLimit&&(b-=this.m_upperAngle,k=b,b=g.Clamp(b-
a.b2_angularSlop,0,a.b2_maxAngularCorrection),n=-this.m_motorMass*b);h.m_sweep.a-=h.m_invI*n;f.m_sweep.a+=f.m_invI*n;h.SynchronizeTransform();f.SynchronizeTransform()}d=h.m_xf.R;n=this.m_localAnchor1.x-h.m_sweep.localCenter.x;b=this.m_localAnchor1.y-h.m_sweep.localCenter.y;l=d.col1.x*n+d.col2.x*b;b=d.col1.y*n+d.col2.y*b;n=l;d=f.m_xf.R;var q=this.m_localAnchor2.x-f.m_sweep.localCenter.x,r=this.m_localAnchor2.y-f.m_sweep.localCenter.y,l=d.col1.x*q+d.col2.x*r,r=d.col1.y*q+d.col2.y*r,q=l,m=f.m_sweep.c.x+
q-h.m_sweep.c.x-n,c=f.m_sweep.c.y+r-h.m_sweep.c.y-b,v=m*m+c*c;d=Math.sqrt(v);var l=h.m_invMass,u=f.m_invMass,y=h.m_invI,z=f.m_invI,C=10*a.b2_linearSlop;v>C*C&&(v=1/(l+u),m=v*-m,c=v*-c,h.m_sweep.c.x-=0.5*l*m,h.m_sweep.c.y-=0.5*l*c,f.m_sweep.c.x+=0.5*u*m,f.m_sweep.c.y+=0.5*u*c,m=f.m_sweep.c.x+q-h.m_sweep.c.x-n,c=f.m_sweep.c.y+r-h.m_sweep.c.y-b);this.K1.col1.x=l+u;this.K1.col2.x=0;this.K1.col1.y=0;this.K1.col2.y=l+u;this.K2.col1.x=y*b*b;this.K2.col2.x=-y*n*b;this.K2.col1.y=-y*n*b;this.K2.col2.y=y*n*
n;this.K3.col1.x=z*r*r;this.K3.col2.x=-z*q*r;this.K3.col1.y=-z*q*r;this.K3.col2.y=z*q*q;this.K.SetM(this.K1);this.K.AddM(this.K2);this.K.AddM(this.K3);this.K.Solve(B.tImpulse,-m,-c);m=B.tImpulse.x;c=B.tImpulse.y;h.m_sweep.c.x-=h.m_invMass*m;h.m_sweep.c.y-=h.m_invMass*c;h.m_sweep.a-=h.m_invI*(n*c-b*m);f.m_sweep.c.x+=f.m_invMass*m;f.m_sweep.c.y+=f.m_invMass*c;f.m_sweep.a+=f.m_invI*(q*c-r*m);h.SynchronizeTransform();f.SynchronizeTransform();return d<=a.b2_linearSlop&&k<=a.b2_angularSlop};Box2D.postDefs.push(function(){Box2D.Dynamics.Joints.b2RevoluteJoint.tImpulse=
new k});Box2D.inherit(E,Box2D.Dynamics.Joints.b2JointDef);E.prototype.__super=Box2D.Dynamics.Joints.b2JointDef.prototype;E.b2RevoluteJointDef=function(){Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this,arguments);this.localAnchorA=new k;this.localAnchorB=new k};E.prototype.b2RevoluteJointDef=function(){this.__super.b2JointDef.call(this);this.type=t.e_revoluteJoint;this.localAnchorA.Set(0,0);this.localAnchorB.Set(0,0);this.motorSpeed=this.maxMotorTorque=this.upperAngle=this.lowerAngle=this.referenceAngle=
0;this.enableMotor=this.enableLimit=false};E.prototype.Initialize=function(a,b,d){this.bodyA=a;this.bodyB=b;this.localAnchorA=this.bodyA.GetLocalPoint(d);this.localAnchorB=this.bodyB.GetLocalPoint(d);this.referenceAngle=this.bodyB.GetAngle()-this.bodyA.GetAngle()};Box2D.inherit(N,Box2D.Dynamics.Joints.b2Joint);N.prototype.__super=Box2D.Dynamics.Joints.b2Joint.prototype;N.b2WeldJoint=function(){Box2D.Dynamics.Joints.b2Joint.b2Joint.apply(this,arguments);this.m_localAnchorA=new k;this.m_localAnchorB=
new k;this.m_impulse=new d;this.m_mass=new f};N.prototype.GetAnchorA=function(){return this.m_bodyA.GetWorldPoint(this.m_localAnchorA)};N.prototype.GetAnchorB=function(){return this.m_bodyB.GetWorldPoint(this.m_localAnchorB)};N.prototype.GetReactionForce=function(a){a===void 0&&(a=0);return new k(a*this.m_impulse.x,a*this.m_impulse.y)};N.prototype.GetReactionTorque=function(a){a===void 0&&(a=0);return a*this.m_impulse.z};N.prototype.b2WeldJoint=function(a){this.__super.b2Joint.call(this,a);this.m_localAnchorA.SetV(a.localAnchorA);
this.m_localAnchorB.SetV(a.localAnchorB);this.m_referenceAngle=a.referenceAngle;this.m_impulse.SetZero();this.m_mass=new f};N.prototype.InitVelocityConstraints=function(a){var b,d=0,f=this.m_bodyA,g=this.m_bodyB;b=f.m_xf.R;var k=this.m_localAnchorA.x-f.m_sweep.localCenter.x,l=this.m_localAnchorA.y-f.m_sweep.localCenter.y,d=b.col1.x*k+b.col2.x*l,l=b.col1.y*k+b.col2.y*l,k=d;b=g.m_xf.R;var c=this.m_localAnchorB.x-g.m_sweep.localCenter.x,m=this.m_localAnchorB.y-g.m_sweep.localCenter.y,d=b.col1.x*c+b.col2.x*
m,m=b.col1.y*c+b.col2.y*m,c=d;b=f.m_invMass;var d=g.m_invMass,q=f.m_invI,r=g.m_invI;this.m_mass.col1.x=b+d+l*l*q+m*m*r;this.m_mass.col2.x=-l*k*q-m*c*r;this.m_mass.col3.x=-l*q-m*r;this.m_mass.col1.y=this.m_mass.col2.x;this.m_mass.col2.y=b+d+k*k*q+c*c*r;this.m_mass.col3.y=k*q+c*r;this.m_mass.col1.z=this.m_mass.col3.x;this.m_mass.col2.z=this.m_mass.col3.y;this.m_mass.col3.z=q+r;a.warmStarting?(this.m_impulse.x*=a.dtRatio,this.m_impulse.y*=a.dtRatio,this.m_impulse.z*=a.dtRatio,f.m_linearVelocity.x-=b*
this.m_impulse.x,f.m_linearVelocity.y-=b*this.m_impulse.y,f.m_angularVelocity-=q*(k*this.m_impulse.y-l*this.m_impulse.x+this.m_impulse.z),g.m_linearVelocity.x+=d*this.m_impulse.x,g.m_linearVelocity.y+=d*this.m_impulse.y,g.m_angularVelocity+=r*(c*this.m_impulse.y-m*this.m_impulse.x+this.m_impulse.z)):this.m_impulse.SetZero()};N.prototype.SolveVelocityConstraints=function(){var a,b=0,f=this.m_bodyA,g=this.m_bodyB,k=f.m_linearVelocity,l=f.m_angularVelocity,m=g.m_linearVelocity,c=g.m_angularVelocity,
n=f.m_invMass,q=g.m_invMass,r=f.m_invI,t=g.m_invI;a=f.m_xf.R;var v=this.m_localAnchorA.x-f.m_sweep.localCenter.x,u=this.m_localAnchorA.y-f.m_sweep.localCenter.y,b=a.col1.x*v+a.col2.x*u,u=a.col1.y*v+a.col2.y*u,v=b;a=g.m_xf.R;var y=this.m_localAnchorB.x-g.m_sweep.localCenter.x,z=this.m_localAnchorB.y-g.m_sweep.localCenter.y,b=a.col1.x*y+a.col2.x*z,z=a.col1.y*y+a.col2.y*z,y=b;a=m.x-c*z-k.x+l*u;var b=m.y+c*y-k.y-l*v,C=c-l,B=new d;this.m_mass.Solve33(B,-a,-b,-C);this.m_impulse.Add(B);k.x-=n*B.x;k.y-=n*
B.y;l-=r*(v*B.y-u*B.x+B.z);m.x+=q*B.x;m.y+=q*B.y;c+=t*(y*B.y-z*B.x+B.z);f.m_angularVelocity=l;g.m_angularVelocity=c};N.prototype.SolvePositionConstraints=function(){var b,f=0,h=this.m_bodyA,k=this.m_bodyB;b=h.m_xf.R;var l=this.m_localAnchorA.x-h.m_sweep.localCenter.x,m=this.m_localAnchorA.y-h.m_sweep.localCenter.y,f=b.col1.x*l+b.col2.x*m,m=b.col1.y*l+b.col2.y*m,l=f;b=k.m_xf.R;var p=this.m_localAnchorB.x-k.m_sweep.localCenter.x,c=this.m_localAnchorB.y-k.m_sweep.localCenter.y,f=b.col1.x*p+b.col2.x*
c,c=b.col1.y*p+b.col2.y*c,p=f;b=h.m_invMass;var f=k.m_invMass,n=h.m_invI,q=k.m_invI,r=k.m_sweep.c.x+p-h.m_sweep.c.x-l,t=k.m_sweep.c.y+c-h.m_sweep.c.y-m,v=k.m_sweep.a-h.m_sweep.a-this.m_referenceAngle,u=10*a.b2_linearSlop,y=Math.sqrt(r*r+t*t),z=g.Abs(v);y>u&&(n*=1,q*=1);this.m_mass.col1.x=b+f+m*m*n+c*c*q;this.m_mass.col2.x=-m*l*n-c*p*q;this.m_mass.col3.x=-m*n-c*q;this.m_mass.col1.y=this.m_mass.col2.x;this.m_mass.col2.y=b+f+l*l*n+p*p*q;this.m_mass.col3.y=l*n+p*q;this.m_mass.col1.z=this.m_mass.col3.x;
this.m_mass.col2.z=this.m_mass.col3.y;this.m_mass.col3.z=n+q;u=new d;this.m_mass.Solve33(u,-r,-t,-v);h.m_sweep.c.x-=b*u.x;h.m_sweep.c.y-=b*u.y;h.m_sweep.a-=n*(l*u.y-m*u.x+u.z);k.m_sweep.c.x+=f*u.x;k.m_sweep.c.y+=f*u.y;k.m_sweep.a+=q*(p*u.y-c*u.x+u.z);h.SynchronizeTransform();k.SynchronizeTransform();return y<=a.b2_linearSlop&&z<=a.b2_angularSlop};Box2D.inherit(K,Box2D.Dynamics.Joints.b2JointDef);K.prototype.__super=Box2D.Dynamics.Joints.b2JointDef.prototype;K.b2WeldJointDef=function(){Box2D.Dynamics.Joints.b2JointDef.b2JointDef.apply(this,
arguments);this.localAnchorA=new k;this.localAnchorB=new k};K.prototype.b2WeldJointDef=function(){this.__super.b2JointDef.call(this);this.type=t.e_weldJoint;this.referenceAngle=0};K.prototype.Initialize=function(a,b,d){this.bodyA=a;this.bodyB=b;this.localAnchorA.SetV(this.bodyA.GetLocalPoint(d));this.localAnchorB.SetV(this.bodyB.GetLocalPoint(d));this.referenceAngle=this.bodyB.GetAngle()-this.bodyA.GetAngle()}})();
(function(){var a=Box2D.Dynamics.b2DebugDraw;a.b2DebugDraw=function(){this.m_xformScale=this.m_fillAlpha=this.m_alpha=this.m_lineThickness=this.m_drawScale=1;var a=this;this.m_sprite={graphics:{clear:function(){a.m_ctx.clearRect(0,0,a.m_ctx.canvas.width,a.m_ctx.canvas.height)}}}};a.prototype._color=function(a,f){return"rgba("+((a&16711680)>>16)+","+((a&65280)>>8)+","+(a&255)+","+f+")"};a.prototype.b2DebugDraw=function(){this.m_drawFlags=0};a.prototype.SetFlags=function(a){a===void 0&&(a=0);this.m_drawFlags=
a};a.prototype.GetFlags=function(){return this.m_drawFlags};a.prototype.AppendFlags=function(a){a===void 0&&(a=0);this.m_drawFlags|=a};a.prototype.ClearFlags=function(a){a===void 0&&(a=0);this.m_drawFlags&=~a};a.prototype.SetSprite=function(a){this.m_ctx=a};a.prototype.GetSprite=function(){return this.m_ctx};a.prototype.SetDrawScale=function(a){a===void 0&&(a=0);this.m_drawScale=a};a.prototype.GetDrawScale=function(){return this.m_drawScale};a.prototype.SetLineThickness=function(a){a===void 0&&(a=
0);this.m_lineThickness=a;this.m_ctx.strokeWidth=a};a.prototype.GetLineThickness=function(){return this.m_lineThickness};a.prototype.SetAlpha=function(a){a===void 0&&(a=0);this.m_alpha=a};a.prototype.GetAlpha=function(){return this.m_alpha};a.prototype.SetFillAlpha=function(a){a===void 0&&(a=0);this.m_fillAlpha=a};a.prototype.GetFillAlpha=function(){return this.m_fillAlpha};a.prototype.SetXFormScale=function(a){a===void 0&&(a=0);this.m_xformScale=a};a.prototype.GetXFormScale=function(){return this.m_xformScale};
a.prototype.DrawPolygon=function(a,f,g){if(f){var k=this.m_ctx,d=this.m_drawScale;k.beginPath();k.strokeStyle=this._color(g.color,this.m_alpha);k.moveTo(a[0].x*d,a[0].y*d);for(g=1;g<f;g++)k.lineTo(a[g].x*d,a[g].y*d);k.lineTo(a[0].x*d,a[0].y*d);k.closePath();k.stroke()}};a.prototype.DrawSolidPolygon=function(a,f,g){if(f){var k=this.m_ctx,d=this.m_drawScale;k.beginPath();k.strokeStyle=this._color(g.color,this.m_alpha);k.fillStyle=this._color(g.color,this.m_fillAlpha);k.moveTo(a[0].x*d,a[0].y*d);for(g=
1;g<f;g++)k.lineTo(a[g].x*d,a[g].y*d);k.lineTo(a[0].x*d,a[0].y*d);k.closePath();k.fill();k.stroke()}};a.prototype.DrawCircle=function(a,f,g){if(f){var k=this.m_ctx,d=this.m_drawScale;k.beginPath();k.strokeStyle=this._color(g.color,this.m_alpha);k.arc(a.x*d,a.y*d,f*d,0,Math.PI*2,true);k.closePath();k.stroke()}};a.prototype.DrawSolidCircle=function(a,f,g,k){if(f){var d=this.m_ctx,q=this.m_drawScale,m=a.x*q,r=a.y*q;d.moveTo(0,0);d.beginPath();d.strokeStyle=this._color(k.color,this.m_alpha);d.fillStyle=
this._color(k.color,this.m_fillAlpha);d.arc(m,r,f*q,0,Math.PI*2,true);d.moveTo(m,r);d.lineTo((a.x+g.x*f)*q,(a.y+g.y*f)*q);d.closePath();d.fill();d.stroke()}};a.prototype.DrawSegment=function(a,f,g){var k=this.m_ctx,d=this.m_drawScale;k.strokeStyle=this._color(g.color,this.m_alpha);k.beginPath();k.moveTo(a.x*d,a.y*d);k.lineTo(f.x*d,f.y*d);k.closePath();k.stroke()};a.prototype.DrawTransform=function(a){var f=this.m_ctx,g=this.m_drawScale;f.beginPath();f.strokeStyle=this._color(16711680,this.m_alpha);
f.moveTo(a.position.x*g,a.position.y*g);f.lineTo((a.position.x+this.m_xformScale*a.R.col1.x)*g,(a.position.y+this.m_xformScale*a.R.col1.y)*g);f.strokeStyle=this._color(65280,this.m_alpha);f.moveTo(a.position.x*g,a.position.y*g);f.lineTo((a.position.x+this.m_xformScale*a.R.col2.x)*g,(a.position.y+this.m_xformScale*a.R.col2.y)*g);f.closePath();f.stroke()}})();var i;for(i=0;i<Box2D.postDefs.length;++i)Box2D.postDefs[i]();delete Box2D.postDefs;
var b2Vec2=Box2D.Common.Math.b2Vec2,b2BodyDef=Box2D.Dynamics.b2BodyDef,b2Body=Box2D.Dynamics.b2Body,b2FixtureDef=Box2D.Dynamics.b2FixtureDef,b2Fixture=Box2D.Dynamics.b2Fixture,b2World=Box2D.Dynamics.b2World,b2MassData=Box2D.Collision.Shapes.b2MassData,b2PolygonShape=Box2D.Collision.Shapes.b2PolygonShape,b2CircleShape=Box2D.Collision.Shapes.b2CircleShape,b2DebugDraw=Box2D.Dynamics.b2DebugDraw,Firmament={log:function(a,b){if(window.console&&(b!=true||this._logHistory.indexOf(a)==-1))this._logHistory.push(a),
window.console.log(a)},_logHistory:[],images:{},loadImage:function(a){var b=document.createElement("img");b.src=a;return this.images[a]=b},extend:function(){var a,b,f,g,k,d=arguments[0]||{},q=1,m=arguments.length,r=false;typeof d==="boolean"&&(r=d,d=arguments[1]||{},q=2);typeof d!=="object"&&!FHelper.isFunction(d)&&(d={});if(m===q)return d;for(;q<m;q++)if((a=arguments[q])!=null)for(b in a)f=d[b],g=a[b],d!==g&&(r&&g&&(Firmament.isPlainObject(g)||(k=Firmament.isArray(g)))?(k?(k=false,f=f&&Firmament.isArray(f)?
f:[]):f=f&&Firmament.isPlainObject(f)?f:{},d[b]=Firmament.FHelper.extend(r,f,g)):g!==void 0&&(d[b]=g));return d},isArray:function(a){return toString.call(a)=="[object Array]"?true:false},isPlainObject:function(a){if(!a)return false;if(a.constructor&&!hasOwn.call(a,"constructor")&&!hasOwn.call(a.constructor.prototype,"isPrototypeOf"))return false;for(var b in a);return b===void 0||hasOwn.call(a,b)},isFunction:function(a){return typeof a=="function"?true:false},isMobileSafari:function(){return navigator.userAgent.match(/(iPod|iPhone|iPad)/)},
getSoundManager:function(){if(this.soundManager==void 0)this.soundManager=new FSoundManager;return this.soundManager},loadSound:function(a,b){this.log(_BrowserDetect.browser);_BrowserDetect.browser=="Firefox"&&(a=a.replace(".mp3",".ogg"));return this.getSoundManager().loadSound(a,b)},getElementOffset:function(a){for(var b=0,f=0;a&&!isNaN(a.offsetLeft)&&!isNaN(a.offsetTop);)b+=a.offsetLeft,f+=a.offsetTop,a=a.offsetParent;return{y:f,x:b}}};
if(!Function.prototype.bind)Function.prototype.bind=function(a){if(typeof this!=="function")throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var b=[].slice,f=b.call(arguments,1),g=this,k=function(){},d=function(){return g.apply(this instanceof k?this:a||{},f.concat(b.call(arguments)))};d.prototype=this.prototype;return d};
if(!Object.create)Object.create=function(a){function b(){}if(arguments.length>1)throw Error("Object.create implementation only accepts the first parameter.");b.prototype=a;return new b};
var _BrowserDetect={init:function(){this.browser=this.searchString(this.dataBrowser)||"An unknown browser";this.version=this.searchVersion(navigator.userAgent)||this.searchVersion(navigator.appVersion)||"an unknown version";this.OS=this.searchString(this.dataOS)||"an unknown OS"},searchString:function(a){for(var b=0;b<a.length;b++){var f=a[b].string,g=a[b].prop;this.versionSearchString=a[b].versionSearch||a[b].identity;if(f){if(f.indexOf(a[b].subString)!=-1)return a[b].identity}else if(g)return a[b].identity}},
searchVersion:function(a){var b=a.indexOf(this.versionSearchString);return b==-1?void 0:parseFloat(a.substring(b+this.versionSearchString.length+1))},dataBrowser:[{string:navigator.userAgent,subString:"Chrome",identity:"Chrome"},{string:navigator.userAgent,subString:"OmniWeb",versionSearch:"OmniWeb/",identity:"OmniWeb"},{string:navigator.vendor,subString:"Apple",identity:"Safari",versionSearch:"Version"},{prop:window.opera,identity:"Opera",versionSearch:"Version"},{string:navigator.vendor,subString:"iCab",
identity:"iCab"},{string:navigator.vendor,subString:"KDE",identity:"Konqueror"},{string:navigator.userAgent,subString:"Firefox",identity:"Firefox"},{string:navigator.vendor,subString:"Camino",identity:"Camino"},{string:navigator.userAgent,subString:"Netscape",identity:"Netscape"},{string:navigator.userAgent,subString:"MSIE",identity:"Explorer",versionSearch:"MSIE"},{string:navigator.userAgent,subString:"Gecko",identity:"Mozilla",versionSearch:"rv"},{string:navigator.userAgent,subString:"Mozilla",
identity:"Netscape",versionSearch:"Mozilla"}],dataOS:[{string:navigator.platform,subString:"Win",identity:"Windows"},{string:navigator.platform,subString:"Mac",identity:"Mac"},{string:navigator.userAgent,subString:"iPhone",identity:"iPhone/iPod"},{string:navigator.platform,subString:"Linux",identity:"Linux"}]};_BrowserDetect.init();function FObservable(){}
FObservable.prototype.connect=function(a,b,f){if(this._connections==void 0)this._connections={};this._connections[a]==void 0&&(this._connections[a]=[]);f==void 0&&(f=this);this._connections[a].push({func:b,scope:f})};FObservable.prototype.disconnect=function(a,b){if(this._connections==void 0)this._connections={};if(b!=void 0){var f=this._connections[a];if(f!=void 0)for(var g=0;g<f.length;g++)f[g]==b&&f.splice(g,1)}else a!=void 0?this._connections[a]=[]:this._connections={}};
FObservable.prototype.emit=function(a,b){if(this._connections==void 0)this._connections={};var f=this._connections[a];b==void 0&&(b=[]);if(f!=void 0)for(var g=0;g<f.length;g++)f[g].func.apply(f[g].scope,b)};function FResourcePool(a){this.constructorFunc=a;this.availablePool=[];this.totalPool=[]}FResourcePool.prototype.get=function(){var a;this.availablePool.length>0?a=this.availablePool.pop():(a=new this.constructorFunc,this.totalPool.push(a));return a};FResourcePool.prototype.addBack=function(a){this.availablePool.push(a)};
function FVector(a,b){a==void 0&&(a=0);b==void 0&&(b=0);if(isNaN(a))throw"x IS NAN!!!!!!";this.x=a;this.y=b}FVector.prototype=new Box2D.Common.Math.b2Vec2;FWorldPositional.prototype=new FObservable;FWorldPositional.prototype.constuctor=FWorldPositional;FWorldPositional.prototype.parent=FObservable.prototype;function FWorldPositional(){this.position=new FVector(0,0);this.positionBase="w";this.angle=0}FWorldPositional.prototype.setPosition=function(a){this.position=a};
FWorldPositional.prototype.getPosition=function(){return this.position};FWorldPositional.prototype.getPositionX=function(){return this.getPosition().x};FWorldPositional.prototype.getPositionY=function(){return this.getPosition().y};FWorldPositional.prototype.getAngle=function(){return 0};FWorldPositional.prototype.setAngle=function(){};FRenderable.prototype=new FWorldPositional;FRenderable.prototype.constructor=FRenderable;
function FRenderable(){this.renderer=null;this.imageScale=100;this.zPosition=0;this.color="#000000"}FRenderable.prototype.getRelativeCameraPosition=function(){if(this.positionBase=="c")return this.position};FRenderable.prototype.getImageScale=function(){return this.imageScale};FRenderable.prototype.getShapes=function(){return[]};FRenderable.prototype.setRenderer=function(a){this.renderer=a};FRenderable.prototype.getRenderer=function(){return this.renderer};FRenderable.prototype.getCurrentImage=function(){return null};
FRenderable.prototype.getZPosition=function(){return this.zPosition};FRenderable.prototype.setZPosition=function(a){this.zPosition=a};FRenderable.prototype.setColor=function(a){this.color=a};FRenderable.prototype.getColor=function(){return this.color};FPhysicsEntity.prototype=new FRenderable;FPhysicsEntity.prototype.constructor=FPhysicsEntity;
function FPhysicsEntity(a,b){this.world=a;this.config=b;var f=new b2BodyDef,g=0;b.position?(f.position.x=b.position.x,f.position.y=b.position.y):(f.position.x=0,f.position.y=0);if(b.positionX!=void 0)f.position.x=b.positionX;if(b.positionY!=void 0)f.position.y=b.positionY;f.type=b.type=="static"?b2Body.b2_staticBody:Box2D.Dynamics.b2Body.b2_dynamicBody;if(b.angle)f.angle=b.angle;f.userData=this;this.body=this.world.b2world.CreateBody(f);for(f=0;f<b.shapes.length;f++){var k=new b2FixtureDef,d=b.shapes[f];
if(d.type=="box")d.width=d.width!=void 0?d.width:1,d.height=d.height!=void 0?d.height:1,k.shape=new b2PolygonShape,k.shape.SetAsBox(d.width/2,d.height/2),g=d.width;else if(d.type=="circle")g=d.radius*2,k.shape=new b2CircleShape(d.radius);k.density=d.density!=void 0?d.density:1;k.friction=d.friction!=void 0?d.friction:1;k.restitution=d.restitution!=void 0?d.restitution:0;this.body.CreateFixture(k)}this.body.ResetMassData();this.zPosition=0;b.maxLifeSeconds&&setTimeout(function(){this.destroy()}.bind(this),
b.maxLifeSeconds*1E3);b.color&&this.setColor(b.color);if(b.image){if(typeof b.image=="string")f=document.createElement("img"),f.src=b.image,b.image=f;this.currentImage=b.image;this.setRenderer(new FSpriteRenderer);if(b.imageScale)b.imageScale=="auto"?b.imageWidth?this.imageScale=b.imageWidth/g:(Firmament.log("Image width must be set for auto scale! Defaulting to 1:1"),this.imageScale=100):this.imageScale=b.imageScale}else this.setRenderer(new FWireframeRenderer)}
FPhysicsEntity.prototype.getShapes=function(){for(var a=[],b=this.body.GetFixtureList();b;)a.push(b.GetShape()),b=b.GetNext();return a};FPhysicsEntity.prototype.getPosition=function(){return this.body.GetPosition()};FPhysicsEntity.prototype.getAngle=function(){return this.body.GetAngle()};FPhysicsEntity.prototype.getCurrentImage=function(){return this.currentImage};FPhysicsEntity.prototype.setVelocity=function(a){this.body.SetLinearVelocity(a)};
FPhysicsEntity.prototype.destroy=function(){this.world.b2world.DestroyBody(this.body);this.world.destroyEntity(this)};FPhysicsEntity.prototype.deleteLater=FPhysicsEntity.prototype.destroy;function FWorld(){}FWorld.prototype={entities:[]};FWorld.prototype.step=function(){};FWorld.prototype.addEntity=function(a){this.entities.push(a)};FWorld.prototype.destroyEntity=function(a){this.entities.splice(this.entities.indexOf(a),1)};FWorld.prototype.getAllEntities=function(){return this.entities};
FPhysicsWorld.prototype.getEntitiesInBox=function(){Firmament.log("getEntitiesInBox Not Implemented!")};function FPhysicsWorld(a){this.collisions=[];this.b2world=new b2World(new b2Vec2(a.x,a.y),true);this.b2world.SetContactListener({BeginContact:function(a){this.collisions.push(a)}.bind(this),EndContact:function(){},PreSolve:function(){},PostSolve:function(){}})}FPhysicsWorld.prototype=new FWorld;
FPhysicsWorld.prototype.step=function(a){this.collisions=[];this.b2world.Step(1/a,10,10);for(a=0;a<this.collisions.length;a++){var b=this.collisions[a],f=b.m_fixtureA.m_body.m_userData,g=b.m_fixtureB.m_body.m_userData;f.emit("collide",[g,b]);g.emit("collide",[f,b])}this.b2world.ClearForces()};FPhysicsWorld.prototype.setGravity=function(a){this.b2world.SetGravity(a)};FPhysicsWorld.prototype.createEntity=function(a){var b=new FPhysicsEntity(this,a);this.addEntity(b);a.init&&a.init.apply(b,[]);return b};
FPhysicsWorld.prototype.getEntitiesInBox=function(a,b,f,g){var k=[],d=new Box2D.Collision.b2AABB;d.upperBound.Set(f,g);d.lowerBound.Set(a,b);this.b2world.QueryAABB(function(a){k.push(a.GetBody().GetUserData());return true},d);return k};function FRenderer(){}FRenderer.prototype.render=function(){};function FWireframeRenderer(){}FWireframeRenderer.prototype=new FRenderer;
FWireframeRenderer.prototype.render=function(a,b,f){var g=b.getShapes();a.fillStyle=b.getColor();a.strokeStyle=b.getColor();for(var k=b.getAngle(),d=0;d<g.length;d++){var q=g[d],m=b.getPosition();q.m_vertices?this.renderPolygon(a,q,m,k):this.renderCircle(a,q,m,f)}};FWireframeRenderer.prototype.renderCircle=function(a,b,f,g){var k=g.getTopLeftPosition();a.beginPath();a.arc((f.x-k.x)*g.getZoom(),(f.y-k.y)*g.getZoom(),b.m_radius*g.getZoom(),0,Math.PI*2,true);a.closePath();a.fill()};
FWireframeRenderer.prototype.renderPolygon=function(a,b,f){a.beginPath();for(var b=b.GetVertices(),g=0;g<b.length;g++){a.moveTo((b[g].x+f.x)*100,(b[g].y+f.y)*100);var k=g+1;k>=b.length&&(k=0);a.lineTo((b[k].x+f.x)*100,(b[k].y+f.y)*100)}a.closePath();a.stroke()};function FSpriteRenderer(){}FSpriteRenderer.prototype=new FRenderer;
FSpriteRenderer.prototype.render=function(a,b,f){var g=f.getTopLeftPosition(),k=b.getPosition(),d=b.getAngle(),q=b.getCurrentImage(),b=f.getZoom()/b.getImageScale();a.save();var m=(k.x-g.x)*f.getZoom(),g=(k.y-g.y)*f.getZoom();a.translate(m,g);b!=1&&a.scale(b,b);f.getZoom();d!=0&&a.rotate(d);a.drawImage(q,0-q.width/2,0-q.height/2);a.restore()};
function FGame(){window.setInterval(this._frameCount.bind(this),1E3);this.fpsGoal=30;this.instep=this.frames=0;this.cameras=[];this.worlds=[];this.fps=0;this.stepInterval=null}FGame.prototype=new FObservable;FGame.prototype.startSimulation=function(){this.stepInterval=window.setInterval(this._step.bind(this),1E3/this.fpsGoal)};FGame.prototype.stopSimulation=function(){window.clearInterval(this.stepInterval)};FGame.prototype.addCamera=function(a){a.setGame(this);this.cameras.push(a)};
FGame.prototype.addCanvas=function(a){a=new FCamera(a);this.addCamera(a);return a};FGame.prototype.addWorld=function(a){this.worlds.push(a)};FGame.prototype._step=function(){if(!this.instep){this.instep=true;this.emit("beginStep");for(var a=0;a<this.worlds.length;a++)this.worlds[a].step(this.fpsGoal);this.emit("endStep");this.emit("endRender");for(a=0;a<this.cameras.length;a++)this.cameras[a].render(this.worlds);this.emit("endRender");this.frames++;this.instep=false}};
FGame.prototype._frameCount=function(){this.fps=this.frames;this.emit("fpsUpdate",[this.fps]);this.frames=0};function FCamera(a){this.canvas=a;if(!Firmament.isMobileSafari())window.onresize=this.canvasResized.bind(this);this.game=null;this.zoom=100;this.topLeftPosition=new FVector;this.setPosition(new FVector(0,0));this.canvasResized()}FCamera.prototype=new FWorldPositional;
FCamera.prototype.render=function(a){var b=this.getCanvas().getContext("2d");b.clearRect(0,0,this.width,this.height);this.emit("beginRender",[b]);for(var f=[],g=0;g<a.length;g++)var k=a[g].getEntitiesInBox(this.position.x-this.width/2/this.zoom,this.position.y-this.height/2/this.zoom,this.position.x+this.width/2/this.zoom,this.position.y+this.height/2/this.zoom),f=f.concat(k);f.sort(function(a,b){return a.getZPosition()-b.getZPosition()});for(a=0;a<f.length;a++)g=f[a],g.getRenderer().render(b,g,this);
this.emit("endRender",[b])};FCamera.prototype.getCanvas=function(){return this.canvas};FCamera.prototype.setGame=function(a){this.game=a};FCamera.prototype.setWidth=function(a){this.width=a;this.calculateTopLeftPosition()};FCamera.prototype.getWidth=function(){return this.width};FCamera.prototype.setHeight=function(a){this.height=a;this.calculateTopLeftPosition()};FCamera.prototype.getHeight=function(){return this.height};FCamera.prototype.getZoom=function(){return this.zoom};
FCamera.prototype.setZoom=function(a){this.zoom=a;this.calculateTopLeftPosition()};FCamera.prototype.setPosition=function(a){this.position=a;this.calculateTopLeftPosition()};FCamera.prototype.getTopLeftPosition=function(){return this.topLeftPosition};FCamera.prototype.calculateTopLeftPosition=function(){this.topLeftPosition.x=this.position.x-this.width/this.zoom/2;this.topLeftPosition.y=this.position.y-this.height/this.zoom/2};
FCamera.prototype.canvasResized=function(){this.width=this.canvas.clientWidth;this.height=this.canvas.clientHeight;this.canvas.width=this.width;this.canvas.height=this.height;this.calculateTopLeftPosition()};
function FInput(a){a==void 0&&(a=document);this.listenElement=a;this.keysPressed={};a.onkeyup=this._keyup.bind(this);a.onkeydown=this._keydown.bind(this);a.ontouchstart=this._mouseDown.bind(this);a.ontouchend=this._mouseUp.bind(this);a.ontouchmove=this._mouseMove.bind(this);a.onmousedown=this._mouseDown.bind(this);a.onmouseup=this._mouseUp.bind(this);a.onmousemove=this._mouseMove.bind(this);a.selectstart=function(){return false};this.mouseY=this.mouseX=0;this.rightMouseDown=this.leftMouseDown=false}
FInput.prototype=new FObservable;FInput.prototype._mouseDown=function(a){this._updateMousePos(a);this.leftMouseDown=true;this.emit("mouseDown",[a])};FInput.prototype._mouseUp=function(a){this.leftMouseDown=false;this._updateMousePos(a);this.emit("mouseUp",[a])};FInput.prototype._mouseMove=function(a){this._updateMousePos(a);this.leftMouseDown&&this.emit("mouseDrag",[a]);this.emit("mouseMove",[a])};FInput.prototype.getMouseScreenPos=function(){return new FVector(this.mouseX,this.mouseY)};
FInput.prototype.getMouseWorldPos=function(a){var b=Firmament.getElementOffset(a.getCanvas()),f=this.mouseX-b.x,b=this.mouseY-b.y,b=a.getTopLeftPosition(),a=a.getZoom(),f=this.mouseX/a+b.x,b=this.mouseY/a+b.y;return new FVector(f,b)};FInput.prototype._updateMousePos=function(a){if(a.x!==void 0)this.mouseX=a.x,this.mouseY=a.y;else if(a.clientX!==void 0)this.mouseX=a.clientX,this.mouseY=a.clientY;else if(a.pageX!==void 0)this.mouseX=a.pageX,this.mouseY=a.pageY};
FInput.prototype._keyup=function(a){var b=this._getKeyCode(a);this.keysPressed[b]=false;this.emit("keyUp",[b,a])};FInput.prototype._keydown=function(a){var b=this._getKeyCode(a);this.keysPressed[b]=true;this.emit("keyDown",[b,a])};FInput.prototype._getKeyCode=function(a){var b;if(window.event)b=a.keyCode;else if(a.which)b=a.which;return b};FInput.prototype.isKeyPressed=function(a){return this.keysPressed[a]?true:false};FInput.prototype.isMousePressed=function(a){switch(a){case "left":return this.leftMouseDown}};
var FTriangulator={EPSILON:1.0E-10,area:function(a){for(var b=a.length,f=0,g=b-1,k=0;k<b;g=k++)f+=a[g].x*a[k].y-a[k].x*a[g].y;return f*0.5},insideTriangle:function(a,b,f,g,k,d,q,m){return(k-f)*(m-g)-(d-g)*(q-f)>=0&&(a-k)*(m-d)-(b-d)*(q-k)>=0&&(f-a)*(m-b)-(g-b)*(q-a)>=0},snip:function(a,b,f,g,k,d){var q,m,r,I,D,v,u,t,L;m=a[d[b]].x;r=a[d[b]].y;I=a[d[f]].x;D=a[d[f]].y;v=a[d[g]].x;u=a[d[g]].y;if(this.EPSILON>(I-m)*(u-r)-(D-r)*(v-m))return false;for(q=0;q<k;q++)if(!(q==b||q==f||q==g))if(t=a[d[q]].x,L=
a[d[q]].y,this.insideTriangle(m,r,I,D,v,u,t,L))return false;return true},process:function(a,b){var f=a.length;if(f<3)return false;var g=[];if(0<this.area(a))for(var k=0;k<f;k++)g[k]=k;else for(k=0;k<f;k++)g[k]=f-1-k;for(var d=2*f,q=0,k=f-1;f>2;){if(0>=d--)return false;var m=k;f<=m&&(m=0);k=m+1;f<=k&&(k=0);var r=k+1;f<=r&&(r=0);if(this.snip(a,m,k,r,f,g)){d=g[m];m=g[k];r=g[r];b.push(a[d]);b.push(a[m]);b.push(a[r]);q++;for(r=k,d=k+1;d<f;r++,d++)g[r]=g[d];f--;d=2*f}}return true},getTriangles:function(a){var b=
[],f=[];if(!this.process(a,b))return false;for(var a=b.length/3,g=0;g<a;g++)f.push([b[g*3],b[g*3+1],b[g*3+2]]);return f}};function FSound(a,b){this.fileName=a;this.duration=b}FSound.prototype=new FObservable;FSound.prototype.play=function(){return Firmament.getSoundManager().play(this)};function FSoundPlayer(a){a!=void 0?(this.audioObj=new Audio(a.fileName),this.setSound(a)):this.audioObj=new Audio}FSoundPlayer.prototype=new FObservable;
FSoundPlayer.prototype.setSound=function(a){this.soundObj=a;this.audioObj.src=a.fileName;this.audioObj.load()};FSoundPlayer.prototype.play=function(){this.audioObj.play();var a=5;if((!this.audioObj.duration||isNaN(this.audioObj.duration))&&this.soundObj.duration!=void 0)a=this.soundObj.duration;setTimeout(function(){this.emit("canCleanUp",[this])}.bind(this),(a+1)*1E3)};function FSoundManager(){this.cache={};this.playerPool=new FResourcePool(FSoundPlayer)}FSoundManager.prototype=new FObservable;
FSoundManager.prototype.loadSound=function(a,b){this.cache[a]={};this.cache[a].sound=new FSound(a,b);this.cache[a].player=new FSoundPlayer(this.cache[a].sound);return this.cache[a].sound};FSoundManager.prototype.getSoundPlayer=function(a){var b=this.playerPool.get();b.disconnect();b.setSound(a);b.connect("canCleanUp",function(a){this.playerPool.addBack(a)}.bind(this));return b};FSoundManager.prototype.play=function(a){a=this.getSoundPlayer(a);a.play();return a};
var FHelper={centerCameraOnEntity:function(a){fgame.getMainCamera().setPosition({x:a.getPositionX(),y:a.getPositionY()})},shootBulletFromEntityToMouse:function(a,b,f,g,k){a=a.getMouseWorldPos(b);g=g.getPosition();a=Math.atan2(a.y-g.y,a.x-g.x);k.positionX=g.x+Math.cos(a)*1.1;k.positionY=g.y+Math.sin(a)*1.1;f.createEntity(k).setVelocity({x:Math.cos(a)*10,y:Math.sin(a)*10})},moveEntityAtAngle:function(a,b,f){a.setVelocity(a.getVelocityX()+Math.cos(b)*f,a.getVelocityY()+Math.sin(b)*f)},pointEntityTowardsPoint:function(a,
b,f){b-=a.getPositionX();f-=a.getPositionY();f=Math.atan2(f,b);a.setAngle(f)}};FHelper.pointEntityTowardsMouse=function(a){FHelper.pointEntityTowardsPoint(a,this.getMouseWorldX(),this.getMouseWorldY())};FHelper.getMouseWorldX=function(){var a=fgame.getMainCamera();return fgame.getMouseX()/a.getZoom()+(a.getPositionX()-a.getWidth()/a.getZoom()/2)};FHelper.getMouseWorldY=function(){var a=fgame.getMainCamera();return fgame.getMouseY()/a.getZoom()+(a.getPositionY()-a.getHeight()/a.getZoom()/2)};
FHelper.shootBulletFromEntity=function(a,b){b.positionX=a.getPositionX()+Math.cos(a.getAngle())*1.1;b.positionY=a.getPositionY()+Math.sin(a.getAngle())*1.1;fgame.createEntity(b).setVelocity({x:Math.cos(a.getAngle())*10,y:Math.sin(a.getAngle())*10})};
FHelper.getImageScale=function(a){if(typeof a!="object")throw"Param is not an object";if(a.imageWidth&&a.entityWidth)return a.imageWidth/a.entityWidth;else if(a.imageWidth&&a.entityRadius)return a.imageWidth/(a.entityRadius*2);else throw"required parameters imageWidth and either entityRadius or entityWidth missing.";};
FHelper.css=function(a){if(typeof a!="object")return"";var b="";for(key in a){for(var f=key,g=/[A-Z]/.exec(f);g&&typeof g[0]!="undefined";)f=f.split(g[0]).join("-"+g[0].toLowerCase()),g=/[A-Z]/.exec(f);b+=f+":";b+=a[key]+";"}return b};FHelper.debug=function(a,b){b||(b=0);var f="";for(i in a){f+="\n";for(var g=0;g<b;g++)f+=" ";f=typeof a[i]=="object"?f+i+"->"+FHelper.debug(a[i],b+5):f+i+"->"+a[i]}return f};
FHelper.extend=function(){var a,b,f,g,k,d=arguments[0]||{},q=1,m=arguments.length,r=false;typeof d==="boolean"&&(r=d,d=arguments[1]||{},q=2);typeof d!=="object"&&!FHelper.isFunction(d)&&(d={});if(m===q)return d;for(;q<m;q++)if((a=arguments[q])!=null)for(b in a)f=d[b],g=a[b],d!==g&&(r&&g&&(FHelper.isPlainObject(g)||(k=FHelper.isArray(g)))?(k?(k=false,f=f&&FHelper.isArray(f)?f:[]):f=f&&FHelper.isPlainObject(f)?f:{},d[b]=FHelper.extend(r,f,g)):g!==void 0&&(d[b]=g));return d};
FHelper.isArray=function(a){return toString.call(a)=="[object Array]"?true:false};FHelper.isPlainObject=function(a){if(!a)return false;if(a.constructor&&!hasOwn.call(a,"constructor")&&!hasOwn.call(a.constructor.prototype,"isPrototypeOf"))return false;for(var b in a);return b===void 0||hasOwn.call(a,b)};FHelper.isFunction=function(a){return typeof a=="function"?true:false};FHelper.dec2hex=function(a){return a.toString(16)};FHelper.getGlobalObject=function(){return function(){return this}.call(null)};
FHelper.pi=3.14159265358979;FHelper.oneEightyDevPi=180/FHelper.pi;FHelper.piDevOneEighty=FHelper.pi/180;FHelper.rad2Deg=function(a){return a*this.pi180};FHelper.deg2Rad=function(a){return this.piDevOneEighty*a};FHelper.polyShape=function(a,b){shapes=FGame.triangulateShape(a);var f=[];for(x=0;x<shapes.length;x++)f[x]=FHelper.extend({},b,{type:"polygon",vectors:shapes[x]});return f};
FHelper.breakEntity=function(a,b){for(var f=0;f<a.shapes.length;f++){var g=a.shapes[f];g.type=="polygon"&&FGame.createEntity(FHelper.extend({},b,{positionX:a.getPositionX(),positionY:a.getPositionY(),angle:a.getAngle(),shapes:FHelper.polyShape(g.vectors,{})}))}a.deleteLater()};
FHelper.explodeEntity=function(a,b,f){for(var g=0;g<a.shapes.length;g++){var k=a.shapes[g];if(k.type=="polygon"){for(var k=k.vectors,d=0;d<f;d++)k=FGame.subdivideShape(k);k=FGame.triangulateShape(k);for(d=0;d<k.length;d++)FGame.createEntity(FHelper.extend({},b,{positionX:a.getPositionX(),positionY:a.getPositionY(),angle:a.getAngle(),shapes:FHelper.polyShape(k[d],{})}))}}a.deleteLater()};FHelper.vectorDistance=function(a,b){return Math.sqrt(Math.pow(b.x-a.x,2)+Math.pow(b.y-a.y,2))};
FHelper.includeDirectory=function(a,b){b||(b="*.js");for(var f=FGame.getDirectoryContents(a,b),g=0;g<f.length;g++)include(a+"/"+f[g])};FHelper.isInt=function(a){var b=parseInt(a);return isNaN(b)?false:a==b&&a.toString()==b.toString()};
FHelper.keyboard={keyNames:{8:"backspace",9:"tab",13:"enter",16:"shift",17:"ctrl",18:"alt",19:"pause",20:"caps-lock",27:"esc",32:"space",33:"pg-up",34:"pg-down",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",16777222:"insert",16777223:"delete",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",61:"equals",65:"a",66:"b",67:"c",68:"d",69:"e",70:"f",71:"g",72:"h",73:"i",74:"j",75:"k",76:"l",77:"m",78:"n",79:"o",80:"p",81:"q",82:"r",83:"s",84:"t",85:"u",86:"v",87:"w",88:"x",
89:"y",90:"z",93:"context",96:"num-0",97:"num-1",98:"num-2",99:"num-3",100:"num-4",101:"num-5",102:"num-6",103:"num-7",104:"num-8",105:"num-9",106:"num-multiply",107:"num-plus",109:"num-minus",110:"num-period",111:"num-division",112:"f1",113:"f2",114:"f3",115:"f4",116:"f5",117:"f6",118:"f7",119:"f8",120:"f9",121:"f10",122:"f11",123:"f12",187:"equals",188:",",190:".",191:"/",220:"\\",224:"win"}};
FHelper.findEntities=function(a,b){for(var f=fg.getAllEntities(),g=[],k=0;k<f.length;k++)f[k][a]==b&&g.push(f[k]);return g};FHelper.getKeyCode=function(a){if(!FHelper.keyboard.keyMap){var b={},f;for(f in FHelper.keyboard.keyNames)b[FHelper.keyboard.keyNames[f]]=f;FHelper.keyboard.keyMap=b}return FHelper.keyboard.keyMap[a]};FHelper.isKeyPressed=function(a){return FGame.isKeyPressed({key:FHelper.getKeyCode(a)})};String.prototype.trim=function(){return this.replace(/^\s+|\s+$/,"")};
String.prototype.replaceAll=function(a,b){for(var f="",g=this.toString();;)if(f=g.replace(a,b),f==g)break;else g=f;return f};
var FEntityRepo={elements:{},addEntityType:function(a,b){for(var f=[],g=0;g<b.shapes.length;g++){var k=b.shapes[g];if(k.type=="polygon"){var d=FTriangulator.getTriangles(k.vectors);if(d!==false)for(var q=0;q<d.length;q++){var m=this.clone(k);m.vectors=d[q];m.type="triangle";f.push(m)}}else f.push(k)}b.shapes=f;this.elements[a]=b},getEntityType:function(a){var b=this.clone(this.elements[a]);b._entityTypeName=a;return b},createEntity:function(a){return FGame.createEntity(this.getEntityType(a))},clone:function(a){return new function(a){for(var f in a)this[f]=
a[f]}(a)}};
function FStateMachine(a){this.states=a;this.currentStateId=this.currentState=null;this.setState=function(a){if(a!=this.currentStateId)if(this.currentState!=null&&typeof this.stopState=="function"&&this.currentState.stopState.call(this),this.states[a])this.currentState=this.states[a],this.currentStateId=a,typeof this.currentState.initState=="function"&&this.currentState.initState.call(this);else throw"State of type "+a+" Is not a valid state object";};this.getState=function(){return this.currentState};this.callState=
function(a,f){this.currentState[a].apply(this,f)}};