From 032c6bfe2c6a792c8af247cc69a11514ec78c691 Mon Sep 17 00:00:00 2001 From: "erwin.coumans" Date: Wed, 1 Dec 2010 05:55:08 +0000 Subject: [PATCH] add initial support for soft body / cloth serialization, and updated SerializeDemo to load soft bodies/cloth. Serializes soft body nodes (vertices), links, faces, tetrahedra, materials, anchors with rigid bodies. Some todo's are serialization of pose, constraints between soft bodies --- Demos/SerializeDemo/CMakeLists.txt | 5 +- Demos/SerializeDemo/SerializeDemo.cpp | 159 ++- Demos/SoftDemo/SoftDemo.cpp | 7 +- .../BulletFileLoader/btBulletFile.cpp | 5 + .../Serialize/BulletFileLoader/btBulletFile.h | 2 + .../btBulletWorldImporter.cpp | 36 +- .../btBulletWorldImporter.h | 5 +- Extras/Serialize/makesdna/makesdna.cpp | 4 +- src/BulletSoftBody/CMakeLists.txt | 1 + .../btDefaultSoftBodySolver.cpp | 15 +- src/BulletSoftBody/btSoftBody.cpp | 228 +++- src/BulletSoftBody/btSoftBody.h | 25 +- src/BulletSoftBody/btSoftBodyData.h | 161 +++ .../btSoftRigidDynamicsWorld.cpp | 46 +- src/BulletSoftBody/btSoftRigidDynamicsWorld.h | 2 + src/LinearMath/btScalar.h | 2 +- src/LinearMath/btSerializer.cpp | 1009 ++++++++++------- src/LinearMath/btSerializer.h | 6 +- 18 files changed, 1257 insertions(+), 461 deletions(-) create mode 100644 src/BulletSoftBody/btSoftBodyData.h diff --git a/Demos/SerializeDemo/CMakeLists.txt b/Demos/SerializeDemo/CMakeLists.txt index c19521c72..c4e96ceca 100644 --- a/Demos/SerializeDemo/CMakeLists.txt +++ b/Demos/SerializeDemo/CMakeLists.txt @@ -18,10 +18,11 @@ ${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/BulletFileLoader ${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/BulletWorldImporter ) +ADD_DEFINITIONS(-DDESERIALIZE_SOFT_BODIES) IF (USE_GLUT) LINK_LIBRARIES( - OpenGLSupport BulletWorldImporter BulletDynamics BulletCollision BulletFileLoader LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} + OpenGLSupport BulletWorldImporter BulletSoftBody BulletDynamics BulletCollision BulletFileLoader LinearMath ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ) IF (WIN32) @@ -59,7 +60,7 @@ IF (USE_GLUT) ELSE (USE_GLUT) LINK_LIBRARIES( - OpenGLSupport BulletWorldImporter BulletDynamics BulletCollision BulletFileLoader LinearMath ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} + OpenGLSupport BulletWorldImporter BulletSoftBody BulletDynamics BulletCollision BulletFileLoader LinearMath ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ) ADD_EXECUTABLE(AppSerializeDemo diff --git a/Demos/SerializeDemo/SerializeDemo.cpp b/Demos/SerializeDemo/SerializeDemo.cpp index 3beda6235..0f6e12b5a 100644 --- a/Demos/SerializeDemo/SerializeDemo.cpp +++ b/Demos/SerializeDemo/SerializeDemo.cpp @@ -15,6 +15,7 @@ subject to the following restrictions: #define TEST_SERIALIZATION 1 +//#define DESERIALIZE_SOFT_BODIES 1 #ifdef BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES #define CREATE_NEW_BULLETFILE 1 @@ -48,6 +49,12 @@ subject to the following restrictions: #include //printf debugging +#ifdef DESERIALIZE_SOFT_BODIES +#include "BulletSoftBody/btSoftRigidDynamicsWorld.h" +#include "BulletSoftBody/btSoftBodyRigidBodyCollisionConfiguration.h" +#endif + + void SerializeDemo::clientMoveAndDisplay() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -89,10 +96,17 @@ void SerializeDemo::displayCallback(void) { + void SerializeDemo::setupEmptyDynamicsWorld() { ///collision configuration contains default setup for memory, collision setup + //m_collisionConfiguration = new btDefaultCollisionConfiguration(); +#ifdef DESERIALIZE_SOFT_BODIES + m_collisionConfiguration = new btSoftBodyRigidBodyCollisionConfiguration(); +#else m_collisionConfiguration = new btDefaultCollisionConfiguration(); +#endif //DESERIALIZE_SOFT_BODIES + //m_collisionConfiguration->setConvexConvexMultipointIterations(); ///use the default collision dispatcher. For parallel processing you can use a diffent dispatcher (see Extras/BulletMultiThreaded) @@ -104,14 +118,151 @@ void SerializeDemo::setupEmptyDynamicsWorld() btSequentialImpulseConstraintSolver* sol = new btSequentialImpulseConstraintSolver; m_solver = sol; +#ifdef DESERIALIZE_SOFT_BODIES + m_dynamicsWorld = new btSoftRigidDynamicsWorld(m_dispatcher,m_broadphase,m_solver,m_collisionConfiguration); +#else m_dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher,m_broadphase,m_solver,m_collisionConfiguration); +#endif //DESERIALIZE_SOFT_BODIES - btGImpactCollisionAlgorithm::registerAlgorithm((btCollisionDispatcher*)m_dynamicsWorld->getDispatcher()); + //btGImpactCollisionAlgorithm::registerAlgorithm((btCollisionDispatcher*)m_dynamicsWorld->getDispatcher()); m_dynamicsWorld->setGravity(btVector3(0,-10,0)); } +btAlignedObjectArray vtx; +btAlignedObjectArray masses; + +#ifdef DESERIALIZE_SOFT_BODIES +#include "BulletSoftBody/btSoftBodyData.h" +class MySoftBulletWorldImporter : public btBulletWorldImporter +{ + + btSoftRigidDynamicsWorld* m_softRigidWorld; +public: + + MySoftBulletWorldImporter(btSoftRigidDynamicsWorld* world) + :btBulletWorldImporter(world), + m_softRigidWorld(world) + { + + } + + virtual bool convertAllObjects( bParse::btBulletFile* bulletFile2) + { + bool result = btBulletWorldImporter::convertAllObjects(bulletFile2); + int i; + //now the soft bodies + for (i=0;im_softBodies.size();i++) + { + if (bulletFile2->getFlags() & bParse::FD_DOUBLE_PRECISION) + { + btAssert(0); //not yet + //btSoftBodyFloatData* colObjData = (btSoftBodyFloatData*)bulletFile2->m_softBodies[i]; + } else + { + btSoftBodyFloatData* colObjData = (btSoftBodyFloatData*)bulletFile2->m_softBodies[i]; + int i; + int numNodes = colObjData->m_numNodes; + + for (i=0;im_numLinks;i++) + { + SoftBodyLinkData& link = colObjData->m_links[i]; + + } + + + + vtx.resize(numNodes); + masses.resize(numNodes); + + for (i=0;im_nodes[i]; + vtx[i].deSerializeFloat(node.m_position); + masses[i] = node.m_inverseMass? 1./node.m_inverseMass : 0.f; + } + + btSoftBody* psb=new btSoftBody(&m_softRigidWorld->getWorldInfo(),numNodes,&vtx[0],&masses[0]); + +#if 0 + for (i=0;im_nodes[i]; + if (!node.m_inverseMass) + { + btScalar mass = node.m_inverseMass? 1.f/node.m_inverseMass : 0; + psb->setMass(i,mass); + } + } +#endif + + + for (i=0;im_numLinks;i++) + { + SoftBodyLinkData& link = colObjData->m_links[i]; + psb->appendLink(link.m_nodeIndices[0],link.m_nodeIndices[1]); + } + + for (i=0;im_numFaces;i++) + { + SoftBodyFaceData& face = colObjData->m_faces[i]; + psb->appendFace(face.m_nodeIndices[0],face.m_nodeIndices[1],face.m_nodeIndices[2]); + } + + + // psb->randomizeConstraints(); + + + //psb->updateNormals(); + //psb->updateBounds(); + //psb->updateConstants(); + + + psb->m_cfg.piterations=colObjData->m_config.m_positionIterations; + psb->m_cfg.diterations=colObjData->m_config.m_driftIterations; + psb->m_cfg.citerations=colObjData->m_config.m_clusterIterations; + psb->m_cfg.viterations=colObjData->m_config.m_velocityIterations; + + + //psb->setTotalMass(0.1); + psb->m_cfg.aeromodel = (btSoftBody::eAeroModel::_)colObjData->m_config.m_aeroModel; + psb->m_cfg.kLF = colObjData->m_config.m_lift; + psb->m_cfg.kDG = colObjData->m_config.m_drag; + //psb->addForce(btVector3(0,2,0),0); + + + //anchors + for (i=0;im_numAnchors;i++) + { + btCollisionObject** colAptr = m_bodyMap.find(colObjData->m_anchors[i].m_rigidBody); + if (colAptr && *colAptr) + { + btRigidBody* body = btRigidBody::upcast(*colAptr); + if (body) + { + bool disableCollision = false; + btVector3 localPivot; + localPivot.deSerializeFloat(colObjData->m_anchors[i].m_localFrame); + psb->appendAnchor(colObjData->m_anchors[i].m_nodeIndex,body,localPivot, disableCollision); + } + } + } + + m_softRigidWorld->getWorldInfo().m_dispatcher = m_softRigidWorld->getDispatcher(); + m_softRigidWorld->addSoftBody(psb); + + + } + } + + return result; + + } +}; +#endif //DESERIALIZE_SOFT_BODIES + + void SerializeDemo::initPhysics() { setTexturing(true); @@ -121,7 +272,11 @@ void SerializeDemo::initPhysics() setupEmptyDynamicsWorld(); +#ifdef DESERIALIZE_SOFT_BODIES + btBulletWorldImporter* fileLoader = new MySoftBulletWorldImporter((btSoftRigidDynamicsWorld*)m_dynamicsWorld); +#else btBulletWorldImporter* fileLoader = new btBulletWorldImporter(m_dynamicsWorld); +#endif //DESERIALIZE_SOFT_BODIES // fileLoader->setVerboseMode(true); if (!fileLoader->loadFile("testFile.bullet")) @@ -247,7 +402,7 @@ void SerializeDemo::initPhysics() fclose(f2); } - clientResetScene(); + //clientResetScene(); } diff --git a/Demos/SoftDemo/SoftDemo.cpp b/Demos/SoftDemo/SoftDemo.cpp index 06ba9e6c8..086c60f22 100644 --- a/Demos/SoftDemo/SoftDemo.cpp +++ b/Demos/SoftDemo/SoftDemo.cpp @@ -53,6 +53,7 @@ static float waveheight = 5.f; const float TRIANGLE_SIZE=8.f; +#define DEMO_MODE_TIMEOUT 500.f #ifdef _DEBUG @@ -1388,12 +1389,12 @@ void SoftDemo::clientMoveAndDisplay() if (sDemoMode) { - static int demoCounter = 500; - demoCounter--; + static float demoCounter = DEMO_MODE_TIMEOUT; + demoCounter-= dt; if (demoCounter<0) { - demoCounter=500; + demoCounter=DEMO_MODE_TIMEOUT; current_demo++; current_demo=current_demo%(sizeof(demofncs)/sizeof(demofncs[0])); clientResetScene(); diff --git a/Extras/Serialize/BulletFileLoader/btBulletFile.cpp b/Extras/Serialize/BulletFileLoader/btBulletFile.cpp index 0307b3163..44acc0d3c 100644 --- a/Extras/Serialize/BulletFileLoader/btBulletFile.cpp +++ b/Extras/Serialize/BulletFileLoader/btBulletFile.cpp @@ -164,6 +164,11 @@ void btBulletFile::parseData() // listID->push_back((bStructHandle*)id); } + if (dataChunk.code == BT_SOFTBODY_CODE) + { + m_softBodies.push_back((bStructHandle*) id); + } + if (dataChunk.code == BT_RIGIDBODY_CODE) { m_rigidBodies.push_back((bStructHandle*) id); diff --git a/Extras/Serialize/BulletFileLoader/btBulletFile.h b/Extras/Serialize/BulletFileLoader/btBulletFile.h index 2575cdb4e..e82c3e943 100644 --- a/Extras/Serialize/BulletFileLoader/btBulletFile.h +++ b/Extras/Serialize/BulletFileLoader/btBulletFile.h @@ -38,6 +38,8 @@ namespace bParse { public: + btAlignedObjectArray m_softBodies; + btAlignedObjectArray m_rigidBodies; btAlignedObjectArray m_collisionObjects; diff --git a/Extras/Serialize/BulletWorldImporter/btBulletWorldImporter.cpp b/Extras/Serialize/BulletWorldImporter/btBulletWorldImporter.cpp index 3912e74ce..f031fa72d 100644 --- a/Extras/Serialize/BulletWorldImporter/btBulletWorldImporter.cpp +++ b/Extras/Serialize/BulletWorldImporter/btBulletWorldImporter.cpp @@ -6,6 +6,7 @@ #include "BulletCollision/Gimpact/btGImpactShape.h" + //#define USE_INTERNAL_EDGE_UTILITY #ifdef USE_INTERNAL_EDGE_UTILITY #include "BulletCollision/CollisionDispatch/btInternalEdgeUtility.h" @@ -476,6 +477,10 @@ bool btBulletWorldImporter::loadFileFromMemory( bParse::btBulletFile* bulletFil bool btBulletWorldImporter::convertAllObjects( bParse::btBulletFile* bulletFile2) { + + m_shapeMap.clear(); + m_bodyMap.clear(); + int i; for (i=0;im_bvhs.size();i++) @@ -496,7 +501,7 @@ bool btBulletWorldImporter::convertAllObjects( bParse::btBulletFile* bulletFile - btHashMap shapeMap; + for (i=0;im_collisionShapes.size();i++) { @@ -505,7 +510,7 @@ bool btBulletWorldImporter::convertAllObjects( bParse::btBulletFile* bulletFile if (shape) { // printf("shapeMap.insert(%x,%x)\n",shapeData,shape); - shapeMap.insert(shapeData,shape); + m_shapeMap.insert(shapeData,shape); } if (shape&& shapeData->m_name) @@ -516,7 +521,12 @@ bool btBulletWorldImporter::convertAllObjects( bParse::btBulletFile* bulletFile } } - btHashMap bodyMap; + + + + + + for (i=0;im_rigidBodies.size();i++) { @@ -526,7 +536,7 @@ bool btBulletWorldImporter::convertAllObjects( bParse::btBulletFile* bulletFile btScalar mass = btScalar(colObjData->m_inverseMass? 1.f/colObjData->m_inverseMass : 0.f); btVector3 localInertia; localInertia.setZero(); - btCollisionShape** shapePtr = shapeMap.find(colObjData->m_collisionObjectData.m_collisionShape); + btCollisionShape** shapePtr = m_shapeMap.find(colObjData->m_collisionObjectData.m_collisionShape); if (shapePtr && *shapePtr) { btTransform startTransform; @@ -555,7 +565,7 @@ bool btBulletWorldImporter::convertAllObjects( bParse::btBulletFile* bulletFile } } #endif //USE_INTERNAL_EDGE_UTILITY - bodyMap.insert(colObjData,body); + m_bodyMap.insert(colObjData,body); } else { printf("error: no shape found\n"); @@ -567,7 +577,7 @@ bool btBulletWorldImporter::convertAllObjects( bParse::btBulletFile* bulletFile btScalar mass = btScalar(colObjData->m_inverseMass? 1.f/colObjData->m_inverseMass : 0.f); btVector3 localInertia; localInertia.setZero(); - btCollisionShape** shapePtr = shapeMap.find(colObjData->m_collisionObjectData.m_collisionShape); + btCollisionShape** shapePtr = m_shapeMap.find(colObjData->m_collisionObjectData.m_collisionShape); if (shapePtr && *shapePtr) { btTransform startTransform; @@ -594,7 +604,7 @@ bool btBulletWorldImporter::convertAllObjects( bParse::btBulletFile* bulletFile } } #endif //USE_INTERNAL_EDGE_UTILITY - bodyMap.insert(colObjData,body); + m_bodyMap.insert(colObjData,body); } else { printf("error: no shape found\n"); @@ -607,7 +617,7 @@ bool btBulletWorldImporter::convertAllObjects( bParse::btBulletFile* bulletFile if (bulletFile2->getFlags() & bParse::FD_DOUBLE_PRECISION) { btCollisionObjectDoubleData* colObjData = (btCollisionObjectDoubleData*)bulletFile2->m_collisionObjects[i]; - btCollisionShape** shapePtr = shapeMap.find(colObjData->m_collisionShape); + btCollisionShape** shapePtr = m_shapeMap.find(colObjData->m_collisionShape); if (shapePtr && *shapePtr) { btTransform startTransform; @@ -625,7 +635,7 @@ bool btBulletWorldImporter::convertAllObjects( bParse::btBulletFile* bulletFile } } #endif //USE_INTERNAL_EDGE_UTILITY - bodyMap.insert(colObjData,body); + m_bodyMap.insert(colObjData,body); } else { printf("error: no shape found\n"); @@ -634,7 +644,7 @@ bool btBulletWorldImporter::convertAllObjects( bParse::btBulletFile* bulletFile } else { btCollisionObjectFloatData* colObjData = (btCollisionObjectFloatData*)bulletFile2->m_collisionObjects[i]; - btCollisionShape** shapePtr = shapeMap.find(colObjData->m_collisionShape); + btCollisionShape** shapePtr = m_shapeMap.find(colObjData->m_collisionShape); if (shapePtr && *shapePtr) { btTransform startTransform; @@ -652,7 +662,7 @@ bool btBulletWorldImporter::convertAllObjects( bParse::btBulletFile* bulletFile } } #endif //USE_INTERNAL_EDGE_UTILITY - bodyMap.insert(colObjData,body); + m_bodyMap.insert(colObjData,body); } else { printf("error: no shape found\n"); @@ -666,8 +676,8 @@ bool btBulletWorldImporter::convertAllObjects( bParse::btBulletFile* bulletFile for (i=0;im_constraints.size();i++) { btTypedConstraintData* constraintData = (btTypedConstraintData*)bulletFile2->m_constraints[i]; - btCollisionObject** colAptr = bodyMap.find(constraintData->m_rbA); - btCollisionObject** colBptr = bodyMap.find(constraintData->m_rbB); + btCollisionObject** colAptr = m_bodyMap.find(constraintData->m_rbA); + btCollisionObject** colBptr = m_bodyMap.find(constraintData->m_rbB); btRigidBody* rbA = 0; btRigidBody* rbB = 0; diff --git a/Extras/Serialize/BulletWorldImporter/btBulletWorldImporter.h b/Extras/Serialize/BulletWorldImporter/btBulletWorldImporter.h index ff043a7c4..d04225087 100644 --- a/Extras/Serialize/BulletWorldImporter/btBulletWorldImporter.h +++ b/Extras/Serialize/BulletWorldImporter/btBulletWorldImporter.h @@ -80,6 +80,9 @@ protected: btHashMap m_nameConstraintMap; btHashMap m_objectNameMap; + btHashMap m_shapeMap; + btHashMap m_bodyMap; + //methods btTriangleIndexVertexArray* createMeshInterface(btStridingMeshInterfaceData& meshData); @@ -106,7 +109,7 @@ public: bool loadFileFromMemory(bParse::btBulletFile* file); //call make sure bulletFile2 has been parsed, either using btBulletFile::parse or btBulletWorldImporter::loadFileFromMemory - bool convertAllObjects(bParse::btBulletFile* file); + virtual bool convertAllObjects(bParse::btBulletFile* file); void setVerboseMode(bool verboseDumpAllTypes) { diff --git a/Extras/Serialize/makesdna/makesdna.cpp b/Extras/Serialize/makesdna/makesdna.cpp index 854f8e7a3..1653236a3 100644 --- a/Extras/Serialize/makesdna/makesdna.cpp +++ b/Extras/Serialize/makesdna/makesdna.cpp @@ -144,7 +144,7 @@ typedef unsigned long uintptr_t; #include "BulletDynamics/ConstraintSolver/btSliderConstraint.h" #include "BulletDynamics/Dynamics/btRigidBody.h" - +#include "BulletSoftBody/btSoftBodyData.h" #ifdef HAVE_CONFIG_H #include @@ -183,7 +183,7 @@ char *includefiles[] = { "../../../src/BulletDynamics/ConstraintSolver/btConeTwistConstraint.h", "../../../src/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.h", "../../../src/BulletDynamics/ConstraintSolver/btSliderConstraint.h", - + "../../../src/BulletSoftBody/btSoftBodyData.h", // empty string to indicate end of includefiles "" }; diff --git a/src/BulletSoftBody/CMakeLists.txt b/src/BulletSoftBody/CMakeLists.txt index 466e40bc8..105379582 100644 --- a/src/BulletSoftBody/CMakeLists.txt +++ b/src/BulletSoftBody/CMakeLists.txt @@ -20,6 +20,7 @@ SET(BulletSoftBody_SRCS SET(BulletSoftBody_HDRS btSoftBody.h + btSoftBodyData.h btSoftBodyConcaveCollisionAlgorithm.h btSoftBodyHelpers.h btSoftBodyRigidBodyCollisionConfiguration.h diff --git a/src/BulletSoftBody/btDefaultSoftBodySolver.cpp b/src/BulletSoftBody/btDefaultSoftBodySolver.cpp index 4c6d28532..903d1efe5 100644 --- a/src/BulletSoftBody/btDefaultSoftBodySolver.cpp +++ b/src/BulletSoftBody/btDefaultSoftBodySolver.cpp @@ -47,7 +47,10 @@ void btDefaultSoftBodySolver::updateSoftBodies( ) for ( int i=0; i < m_softBodySet.size(); i++) { btSoftBody* psb=(btSoftBody*)m_softBodySet[i]; - psb->integrateMotion(); + if (psb->isActive()) + { + psb->integrateMotion(); + } } } // updateSoftBodies @@ -62,7 +65,10 @@ void btDefaultSoftBodySolver::solveConstraints( float solverdt ) for(int i=0; i < m_softBodySet.size(); ++i) { btSoftBody* psb = static_cast(m_softBodySet[i]); - psb->solveConstraints(); + if (psb->isActive()) + { + psb->solveConstraints(); + } } } // btDefaultSoftBodySolver::solveConstraints @@ -122,7 +128,10 @@ void btDefaultSoftBodySolver::predictMotion( float timeStep ) { btSoftBody* psb = m_softBodySet[i]; - psb->predictMotion(timeStep); + if (psb->isActive()) + { + psb->predictMotion(timeStep); + } } } diff --git a/src/BulletSoftBody/btSoftBody.cpp b/src/BulletSoftBody/btSoftBody.cpp index 612f1df57..a822b1d52 100644 --- a/src/BulletSoftBody/btSoftBody.cpp +++ b/src/BulletSoftBody/btSoftBody.cpp @@ -16,6 +16,8 @@ subject to the following restrictions: #include "btSoftBodyInternals.h" #include "BulletSoftBody/btSoftBodySolvers.h" +#include "btSoftBodyData.h" +#include "LinearMath/btSerializer.h" // btSoftBody::btSoftBody(btSoftBodyWorldInfo* worldInfo,int node_count, const btVector3* x, const btScalar* m) @@ -337,7 +339,15 @@ void btSoftBody::appendTetra(int node0, } // + void btSoftBody::appendAnchor(int node,btRigidBody* body, bool disableCollisionBetweenLinkedBodies) +{ + btVector3 local = body->getWorldTransform().inverse()*m_nodes[node].m_x; + appendAnchor(node,body,local,disableCollisionBetweenLinkedBodies); +} + +// +void btSoftBody::appendAnchor(int node,btRigidBody* body, const btVector3& localPivot,bool disableCollisionBetweenLinkedBodies) { if (disableCollisionBetweenLinkedBodies) { @@ -350,7 +360,7 @@ void btSoftBody::appendAnchor(int node,btRigidBody* body, bool disableCollisio Anchor a; a.m_node = &m_nodes[node]; a.m_body = body; - a.m_local = body->getInterpolationWorldTransform().inverse()*a.m_node->m_x; + a.m_local = localPivot; a.m_node->m_battach = 1; m_anchors.push_back(a); } @@ -1957,7 +1967,7 @@ bool btSoftBody::checkContact( btCollisionObject* colObj, btVector3 nrm; btCollisionShape *shp = colObj->getCollisionShape(); btRigidBody *tmpRigid = btRigidBody::upcast(colObj); - const btTransform &wtr = tmpRigid ? tmpRigid->getInterpolationWorldTransform() : colObj->getWorldTransform(); + const btTransform &wtr = tmpRigid ? tmpRigid->getWorldTransform() : colObj->getWorldTransform(); btScalar dst = m_worldInfo->m_sparsesdf.Evaluate( wtr.invXform(x), @@ -2388,7 +2398,10 @@ void btSoftBody::applyClusters(bool drift) } for(i=0;i0) m_nodes[i].m_x+=deltas[i]/weights[i]; + if(weights[i]>0) + { + m_nodes[i].m_x+=deltas[i]/weights[i]; + } } } @@ -2729,7 +2742,7 @@ void btSoftBody::PSolve_Anchors(btSoftBody* psb,btScalar kst,btScalar ti) for(int i=0,ni=psb->m_anchors.size();im_anchors[i]; - const btTransform& t=a.m_body->getInterpolationWorldTransform(); + const btTransform& t=a.m_body->getWorldTransform(); Node& n=*a.m_node; const btVector3 wa=t*a.m_local; const btVector3 va=a.m_body->getVelocityInLocalPoint(a.m_c1)*dt; @@ -2891,7 +2904,8 @@ void btSoftBody::defaultCollisionHandler(btCollisionObject* pco) { btSoftColliders::CollideSDF_RS docollide; btRigidBody* prb1=btRigidBody::upcast(pco); - btTransform wtr=prb1 ? prb1->getInterpolationWorldTransform() : pco->getWorldTransform(); + //btTransform wtr=prb1 ? prb1->getWorldTransform() : pco->getWorldTransform(); + btTransform wtr=pco->getWorldTransform(); const btTransform ctr=pco->getWorldTransform(); const btScalar timemargin=(wtr.getOrigin()-ctr.getOrigin()).length(); @@ -2899,7 +2913,7 @@ void btSoftBody::defaultCollisionHandler(btCollisionObject* pco) btVector3 mins; btVector3 maxs; ATTRIBUTE_ALIGNED16(btDbvtVolume) volume; - pco->getCollisionShape()->getAabb( pco->getInterpolationWorldTransform(), + pco->getCollisionShape()->getAabb( pco->getWorldTransform(), mins, maxs); volume=btDbvtVolume::FromMM(mins,maxs); @@ -2986,3 +3000,205 @@ const btVector3& btSoftBody::getWindVelocity() { return m_windVelocity; } + + + +int btSoftBody::calculateSerializeBufferSize() const +{ + int sz = sizeof(btSoftBodyData); + return sz; +} + + ///fills the dataBuffer and returns the struct name (and 0 on failure) +const char* btSoftBody::serialize(void* dataBuffer, class btSerializer* serializer) const +{ + btSoftBodyData* sbd = (btSoftBodyData*) dataBuffer; + + btCollisionObject::serialize(&sbd->m_collisionObjectData, serializer); + + + sbd->m_numMaterials = m_materials.size(); + sbd->m_materials = sbd->m_numMaterials? (SoftBodyMaterialData**) serializer->getUniquePointer((void*)&m_materials): 0; + + if (sbd->m_materials) + { + int sz = sizeof(SoftBodyMaterialData*); + int numElem = sbd->m_numMaterials; + btChunk* chunk = serializer->allocate(sz,numElem); + //SoftBodyMaterialData** memPtr = chunk->m_oldPtr; + SoftBodyMaterialData** memPtr = (SoftBodyMaterialData**)chunk->m_oldPtr; + for (int i=0;igetUniquePointer((void*)mat) : 0; + if (!serializer->findPointer(mat)) + { + //serialize it here + btChunk* chunk = serializer->allocate(sizeof(SoftBodyMaterialData),1); + SoftBodyMaterialData* memPtr = (SoftBodyMaterialData*)chunk->m_oldPtr; + memPtr->m_flags = mat->m_flags; + memPtr->m_angularStiffness = mat->m_kAST; + memPtr->m_linearStiffness = mat->m_kLST; + memPtr->m_volumeStiffness = mat->m_kVST; + serializer->finalizeChunk(chunk,"SoftBodyMaterialData",BT_SBMATERIAL_CODE,mat); + } + } + serializer->finalizeChunk(chunk,"SoftBodyMaterialData",BT_ARRAY_CODE,(void*) &m_materials); + } + + + + + sbd->m_numNodes = m_nodes.size(); + sbd->m_nodes = sbd->m_numNodes ? (SoftBodyNodeData*)serializer->getUniquePointer((void*)&m_nodes[0]): 0; + if (sbd->m_nodes) + { + int sz = sizeof(SoftBodyNodeData); + int numElem = sbd->m_numNodes; + btChunk* chunk = serializer->allocate(sz,numElem); + SoftBodyNodeData* memPtr = (SoftBodyNodeData*)chunk->m_oldPtr; + for (int i=0;im_accumulatedForce); + memPtr->m_area = m_nodes[i].m_area; + memPtr->m_attach = m_nodes[i].m_battach; + memPtr->m_inverseMass = m_nodes[i].m_im; + memPtr->m_material = m_nodes[i].m_material? (SoftBodyMaterialData*)serializer->getUniquePointer((void*) m_nodes[i].m_material):0; + m_nodes[i].m_n.serializeFloat(memPtr->m_normal); + m_nodes[i].m_x.serializeFloat(memPtr->m_position); + m_nodes[i].m_q.serializeFloat(memPtr->m_previousPosition); + m_nodes[i].m_v.serializeFloat(memPtr->m_velocity); + } + serializer->finalizeChunk(chunk,"SoftBodyNodeData",BT_SBNODE_CODE,(void*) &m_nodes[0]); + } + + sbd->m_numLinks = m_links.size(); + sbd->m_links = sbd->m_numLinks? (SoftBodyLinkData*) serializer->getUniquePointer((void*)&m_links[0]):0; + if (sbd->m_links) + { + int sz = sizeof(SoftBodyLinkData); + int numElem = sbd->m_numLinks; + btChunk* chunk = serializer->allocate(sz,numElem); + SoftBodyLinkData* memPtr = (SoftBodyLinkData*)chunk->m_oldPtr; + for (int i=0;im_bbending = m_links[i].m_bbending; + memPtr->m_c0 = m_links[i].m_c0; + memPtr->m_c1 = m_links[i].m_c1; + memPtr->m_c2 = m_links[i].m_c2; + m_links[i].m_c3.serializeFloat(memPtr->m_c3); + memPtr->m_material = m_links[i].m_material? (SoftBodyMaterialData*)serializer->getUniquePointer((void*) m_links[i].m_material):0; + memPtr->m_nodeIndices[0] = m_links[i].m_n[0] ? m_links[i].m_n[0] - &m_nodes[0]: -1; + memPtr->m_nodeIndices[1] = m_links[i].m_n[1] ? m_links[i].m_n[1] - &m_nodes[0]: -1; + btAssert(memPtr->m_nodeIndices[0]m_nodeIndices[1]m_restLength = m_links[i].m_rl; + } + serializer->finalizeChunk(chunk,"SoftBodyLinkData",BT_ARRAY_CODE,(void*) &m_links[0]); + + } + + + sbd->m_numFaces = m_faces.size(); + sbd->m_faces = sbd->m_numFaces? (SoftBodyFaceData*) serializer->getUniquePointer((void*)&m_faces[0]):0; + if (sbd->m_faces) + { + int sz = sizeof(SoftBodyFaceData); + int numElem = sbd->m_numFaces; + btChunk* chunk = serializer->allocate(sz,numElem); + SoftBodyFaceData* memPtr = (SoftBodyFaceData*)chunk->m_oldPtr; + for (int i=0;im_material = m_faces[i].m_material ? (SoftBodyMaterialData*) serializer->getUniquePointer((void*)m_faces[i].m_material): 0; + m_faces[i].m_normal.serializeFloat( memPtr->m_normal); + for (int j=0;j<3;j++) + { + memPtr->m_nodeIndices[j] = m_faces[i].m_n[j]? m_faces[i].m_n[j] - &m_nodes[0]: -1; + } + memPtr->m_restArea = m_faces[i].m_ra; + } + serializer->finalizeChunk(chunk,"SoftBodyFaceData",BT_ARRAY_CODE,(void*) &m_faces[0]); + } + + + sbd->m_numTetrahedra = m_tetras.size(); + sbd->m_tetrahedra = sbd->m_numTetrahedra ? (SoftBodyTetraData*) serializer->getUniquePointer((void*)&m_tetras[0]):0; + if (sbd->m_tetrahedra) + { + int sz = sizeof(SoftBodyTetraData); + int numElem = sbd->m_numTetrahedra; + btChunk* chunk = serializer->allocate(sz,numElem); + SoftBodyTetraData* memPtr = (SoftBodyTetraData*)chunk->m_oldPtr; + for (int i=0;im_c0[j] ); + memPtr->m_nodeIndices[j] = m_tetras[j].m_n[j]? m_tetras[j].m_n[j]-&m_nodes[0] : -1; + } + memPtr->m_c1 = m_tetras[i].m_c1; + memPtr->m_c2 = m_tetras[i].m_c2; + memPtr->m_material = m_tetras[i].m_material ? (SoftBodyMaterialData*)serializer->getUniquePointer((void*) m_tetras[i].m_material): 0; + memPtr->m_restVolume = m_tetras[i].m_rv; + } + serializer->finalizeChunk(chunk,"SoftBodyTetraData",BT_ARRAY_CODE,(void*) &m_tetras[0]); + } + + sbd->m_numAnchors = m_anchors.size(); + sbd->m_anchors = sbd->m_numAnchors ? (SoftRigidAnchorData*) serializer->getUniquePointer((void*)&m_anchors[0]):0; + if (sbd->m_anchors) + { + int sz = sizeof(SoftRigidAnchorData); + int numElem = sbd->m_numAnchors; + btChunk* chunk = serializer->allocate(sz,numElem); + SoftRigidAnchorData* memPtr = (SoftRigidAnchorData*)chunk->m_oldPtr; + for (int i=0;im_c0); + m_anchors[i].m_c1.serializeFloat(memPtr->m_c1); + memPtr->m_c2 = m_anchors[i].m_c2; + m_anchors[i].m_local.serializeFloat(memPtr->m_localFrame); + memPtr->m_nodeIndex = m_anchors[i].m_node? m_anchors[i].m_node-&m_nodes[0]: -1; + + memPtr->m_rigidBody = m_anchors[i].m_body? (btRigidBodyData*) serializer->getUniquePointer((void*)m_anchors[i].m_body): 0; + btAssert(memPtr->m_nodeIndex < m_nodes.size()); + } + serializer->finalizeChunk(chunk,"SoftRigidAnchorData",BT_ARRAY_CODE,(void*) &m_anchors[0]); + } + + + + sbd->m_config.m_baumgarte = m_cfg.kVCF; + sbd->m_config.m_pressure = m_cfg.kPR; + sbd->m_config.m_aeroModel = this->m_cfg.aeromodel; + sbd->m_config.m_lift = m_cfg.kLF; + sbd->m_config.m_drag = m_cfg.kDG; + sbd->m_config.m_positionIterations = m_cfg.piterations; + sbd->m_config.m_driftIterations = m_cfg.diterations; + sbd->m_config.m_clusterIterations = m_cfg.citerations; + sbd->m_config.m_velocityIterations = m_cfg.viterations; + sbd->m_config.m_maxVolume = m_cfg.maxvolume; + sbd->m_config.m_damping = m_cfg.kDP; + sbd->m_config.m_poseMatch = m_cfg.kMT; + sbd->m_config.m_collisionFlags = m_cfg.collisions; + sbd->m_config.m_volume = m_cfg.kVC; + sbd->m_config.m_rigidContactHardness = m_cfg.kCHR; + sbd->m_config.m_kineticContactHardness = m_cfg.kKHR; + sbd->m_config.m_softContactHardness = m_cfg.kSHR; + sbd->m_config.m_anchorHardness = m_cfg.kAHR; + sbd->m_config.m_timeScale = m_cfg.timescale; + sbd->m_config.m_maxVolume = m_cfg.maxvolume; + sbd->m_config.m_softRigidClusterHardness = m_cfg.kSRHR_CL; + sbd->m_config.m_softKineticClusterHardness = m_cfg.kSKHR_CL; + sbd->m_config.m_softSoftClusterHardness = m_cfg.kSSHR_CL; + sbd->m_config.m_softRigidClusterImpulseSplit = m_cfg.kSR_SPLT_CL; + sbd->m_config.m_softKineticClusterImpulseSplit = m_cfg.kSK_SPLT_CL; + sbd->m_config.m_softSoftClusterImpulseSplit = m_cfg.kSS_SPLT_CL; + + + //not yet + sbd->m_pose = 0; + + return btSoftBodyDataName; +} + diff --git a/src/BulletSoftBody/btSoftBody.h b/src/BulletSoftBody/btSoftBody.h index 76dd02f59..36492550e 100644 --- a/src/BulletSoftBody/btSoftBody.h +++ b/src/BulletSoftBody/btSoftBody.h @@ -27,6 +27,14 @@ subject to the following restrictions: #include "btSparseSDF.h" #include "BulletCollision/BroadphaseCollision/btDbvt.h" +//#ifdef BT_USE_DOUBLE_PRECISION +//#define btRigidBodyData btRigidBodyDoubleData +//#define btRigidBodyDataName "btRigidBodyDoubleData" +//#else +#define btSoftBodyData btSoftBodyFloatData +#define btSoftBodyDataName "btSoftBodyFloatData" +//#endif //BT_USE_DOUBLE_PRECISION + class btBroadphaseInterface; class btDispatcher; @@ -366,7 +374,11 @@ public: void activate() const { - if(m_rigid) m_rigid->activate(); + if(m_rigid) + m_rigid->activate(); + if (m_collisionObject) + m_collisionObject->activate(); + } const btMatrix3x3& invWorldInertia() const { @@ -730,6 +742,7 @@ public: /* Append anchor */ void appendAnchor( int node, btRigidBody* body, bool disableCollisionBetweenLinkedBodies=false); + void appendAnchor(int node,btRigidBody* body, const btVector3& localPivot,bool disableCollisionBetweenLinkedBodies=false); /* Append linear joint */ void appendLinearJoint(const LJoint::Specs& specs,Cluster* body0,Body body1); void appendLinearJoint(const LJoint::Specs& specs,Body body=Body()); @@ -911,8 +924,18 @@ public: static psolver_t getSolver(ePSolver::_ solver); static vsolver_t getSolver(eVSolver::_ solver); + + virtual int calculateSerializeBufferSize() const; + + ///fills the dataBuffer and returns the struct name (and 0 on failure) + virtual const char* serialize(void* dataBuffer, class btSerializer* serializer) const; + + //virtual void serializeSingleObject(class btSerializer* serializer) const; + + }; + #endif //_BT_SOFT_BODY_H diff --git a/src/BulletSoftBody/btSoftBodyData.h b/src/BulletSoftBody/btSoftBodyData.h new file mode 100644 index 000000000..01db6c390 --- /dev/null +++ b/src/BulletSoftBody/btSoftBodyData.h @@ -0,0 +1,161 @@ +/* +Bullet Continuous Collision Detection and Physics Library +Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ + +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. +*/ + +#ifndef BT_SOFTBODY_FLOAT_DATA +#define BT_SOFTBODY_FLOAT_DATA + +#include "BulletCollision/CollisionDispatch/btCollisionObject.h" + + + +struct SoftBodyMaterialData +{ + float m_linearStiffness; + float m_angularStiffness; + float m_volumeStiffness; + int m_flags; +}; + +struct SoftBodyNodeData +{ + SoftBodyMaterialData *m_material; + btVector3FloatData m_position; + btVector3FloatData m_previousPosition; + btVector3FloatData m_velocity; + btVector3FloatData m_accumulatedForce; + btVector3FloatData m_normal; + float m_inverseMass; + float m_area; + int m_attach; + int m_pad; +}; + +struct SoftBodyLinkData +{ + SoftBodyMaterialData *m_material; + int m_nodeIndices[2]; // Node pointers + btVector3FloatData m_c3; // gradient + float m_restLength; // Rest length + int m_bbending; // Bending link + float m_c0; // (ima+imb)*kLST + float m_c1; // rl^2 + float m_c2; // |gradient|^2/c0 + int m_pad; +}; + +struct SoftBodyFaceData +{ + btVector3FloatData m_normal; // Normal + SoftBodyMaterialData *m_material; + int m_nodeIndices[3]; // Node pointers + float m_restArea; // Rest area +}; + +struct SoftBodyTetraData +{ + btVector3FloatData m_c0[4]; // gradients + SoftBodyMaterialData *m_material; + int m_nodeIndices[4]; // Node pointers + float m_restVolume; // Rest volume + float m_c1; // (4*kVST)/(im0+im1+im2+im3) + float m_c2; // m_c1/sum(|g0..3|^2) + int m_pad; +}; + +struct SoftRigidAnchorData +{ + btMatrix3x3FloatData m_c0; // Impulse matrix + btVector3FloatData m_c1; // Relative anchor + btVector3FloatData m_localFrame; // Anchor position in body space + btRigidBodyData *m_rigidBody; + int m_nodeIndex; // Node pointer + float m_c2; // ima*dt +}; + + + +struct SoftBodyConfigData +{ + int m_aeroModel; // Aerodynamic model (default: V_Point) + float m_baumgarte; // Velocities correction factor (Baumgarte) + float m_damping; // Damping coefficient [0,1] + float m_drag; // Drag coefficient [0,+inf] + float m_lift; // Lift coefficient [0,+inf] + float m_pressure; // Pressure coefficient [-inf,+inf] + float m_volume; // Volume conversation coefficient [0,+inf] + float m_dynamicFriction; // Dynamic friction coefficient [0,1] + float m_poseMatch; // Pose matching coefficient [0,1] + float m_rigidContactHardness; // Rigid contacts hardness [0,1] + float m_kineticContactHardness; // Kinetic contacts hardness [0,1] + float m_softContactHardness; // Soft contacts hardness [0,1] + float m_anchorHardness; // Anchors hardness [0,1] + float m_softRigidClusterHardness; // Soft vs rigid hardness [0,1] (cluster only) + float m_softKineticClusterHardness; // Soft vs kinetic hardness [0,1] (cluster only) + float m_softSoftClusterHardness; // Soft vs soft hardness [0,1] (cluster only) + float m_softRigidClusterImpulseSplit; // Soft vs rigid impulse split [0,1] (cluster only) + float m_softKineticClusterImpulseSplit; // Soft vs rigid impulse split [0,1] (cluster only) + float m_softSoftClusterImpulseSplit; // Soft vs rigid impulse split [0,1] (cluster only) + float m_maxVolume; // Maximum volume ratio for pose + float m_timeScale; // Time scale + int m_velocityIterations; // Velocities solver iterations + int m_positionIterations; // Positions solver iterations + int m_driftIterations; // Drift solver iterations + int m_clusterIterations; // Cluster solver iterations + int m_collisionFlags; // Collisions flags +}; + +struct SoftBodyPoseData +{ + btMatrix3x3FloatData m_rot; // Rotation + btMatrix3x3FloatData m_scale; // Scale + btMatrix3x3FloatData m_aqq; // Base scaling + btVector3FloatData m_positions; // Reference positions + btVector3FloatData m_com; // COM + + int m_bvolume; // Is valid + int m_bframe; // Is frame + float m_restVolume; // Rest volume + int m_numPositions; + float *m_weights; // Weights + int m_numWeigts; + int m_pad; +}; + + +///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 +struct btSoftBodyFloatData +{ + btCollisionObjectFloatData m_collisionObjectData; + + SoftBodyPoseData *m_pose; + SoftBodyMaterialData **m_materials; + SoftBodyNodeData *m_nodes; + SoftBodyLinkData *m_links; + SoftBodyFaceData *m_faces; + SoftBodyTetraData *m_tetrahedra; + SoftRigidAnchorData *m_anchors; + + int m_numMaterials; + int m_numNodes; + int m_numLinks; + int m_numFaces; + int m_numTetrahedra; + int m_numAnchors; + + SoftBodyConfigData m_config; +}; + +#endif //BT_SOFTBODY_FLOAT_DATA + diff --git a/src/BulletSoftBody/btSoftRigidDynamicsWorld.cpp b/src/BulletSoftBody/btSoftRigidDynamicsWorld.cpp index 9d1a7eb3d..84ac67eb8 100644 --- a/src/BulletSoftBody/btSoftRigidDynamicsWorld.cpp +++ b/src/BulletSoftBody/btSoftRigidDynamicsWorld.cpp @@ -22,7 +22,7 @@ subject to the following restrictions: #include "btSoftBodyHelpers.h" #include "btSoftBodySolvers.h" #include "btDefaultSoftBodySolver.h" - +#include "LinearMath/btSerializer.h" btSoftRigidDynamicsWorld::btSoftRigidDynamicsWorld( @@ -51,6 +51,15 @@ btSoftRigidDynamicsWorld::btSoftRigidDynamicsWorld( m_sbi.m_sparsesdf.Initialize(); m_sbi.m_sparsesdf.Reset(); + m_sbi.air_density = (btScalar)1.2; + m_sbi.water_density = 0; + m_sbi.water_offset = 0; + m_sbi.water_normal = btVector3(0,0,0); + m_sbi.m_gravity.setValue(0,-10,0); + + m_sbi.m_sparsesdf.Initialize(); + + } btSoftRigidDynamicsWorld::~btSoftRigidDynamicsWorld() @@ -303,3 +312,38 @@ void btSoftRigidDynamicsWorld::rayTestSingle(const btTransform& rayFromTrans,con btCollisionWorld::rayTestSingle(rayFromTrans,rayToTrans,collisionObject,collisionShape,colObjWorldTransform,resultCallback); } } + + +void btSoftRigidDynamicsWorld::serializeSoftBodies(btSerializer* serializer) +{ + int i; + //serialize all collision objects + for (i=0;igetInternalType() & btCollisionObject::CO_SOFT_BODY) + { + int len = colObj->calculateSerializeBufferSize(); + btChunk* chunk = serializer->allocate(len,1); + const char* structType = colObj->serialize(chunk->m_oldPtr, serializer); + serializer->finalizeChunk(chunk,structType,BT_SOFTBODY_CODE,colObj); + } + } + +} + +void btSoftRigidDynamicsWorld::serialize(btSerializer* serializer) +{ + + serializer->startSerialization(); + + serializeSoftBodies(serializer); + + serializeRigidBodies(serializer); + + serializeCollisionObjects(serializer); + + serializer->finishSerialization(); +} + + diff --git a/src/BulletSoftBody/btSoftRigidDynamicsWorld.h b/src/BulletSoftBody/btSoftRigidDynamicsWorld.h index d2153f239..7d8d0cb7d 100644 --- a/src/BulletSoftBody/btSoftRigidDynamicsWorld.h +++ b/src/BulletSoftBody/btSoftRigidDynamicsWorld.h @@ -44,6 +44,7 @@ protected: void solveSoftBodiesConstraints( btScalar timeStep ); + void serializeSoftBodies(btSerializer* serializer); public: @@ -95,6 +96,7 @@ public: const btTransform& colObjWorldTransform, RayResultCallback& resultCallback); + virtual void serialize(btSerializer* serializer); }; diff --git a/src/LinearMath/btScalar.h b/src/LinearMath/btScalar.h index 7417d6f57..165626d53 100644 --- a/src/LinearMath/btScalar.h +++ b/src/LinearMath/btScalar.h @@ -30,7 +30,7 @@ subject to the following restrictions: #include /* SVN $Revision$ on $Date$ from http://bullet.googlecode.com*/ -#define BT_BULLET_VERSION 277 +#define BT_BULLET_VERSION 278 inline int btGetVersion() { diff --git a/src/LinearMath/btSerializer.cpp b/src/LinearMath/btSerializer.cpp index 10f613a0a..9133d48c6 100644 --- a/src/LinearMath/btSerializer.cpp +++ b/src/LinearMath/btSerializer.cpp @@ -1,294 +1,5 @@ -unsigned char sBulletDNAstr64[]= { -83,68,78,65,78,65,77,69,-79,0,0,0,109,95,115,105,122,101,0,109, -95,99,97,112,97,99,105,116,121,0,42,109,95,100,97,116,97,0,109,95, -99,111,108,108,105,115,105,111,110,83,104,97,112,101,115,0,109,95,99,111, -108,108,105,115,105,111,110,79,98,106,101,99,116,115,0,109,95,99,111,110, -115,116,114,97,105,110,116,115,0,42,102,105,114,115,116,0,42,108,97,115, -116,0,109,95,102,108,111,97,116,115,91,52,93,0,109,95,101,108,91,51, -93,0,109,95,98,97,115,105,115,0,109,95,111,114,105,103,105,110,0,109, -95,114,111,111,116,78,111,100,101,73,110,100,101,120,0,109,95,115,117,98, -116,114,101,101,83,105,122,101,0,109,95,113,117,97,110,116,105,122,101,100, -65,97,98,98,77,105,110,91,51,93,0,109,95,113,117,97,110,116,105,122, -101,100,65,97,98,98,77,97,120,91,51,93,0,109,95,97,97,98,98,77, -105,110,79,114,103,0,109,95,97,97,98,98,77,97,120,79,114,103,0,109, -95,101,115,99,97,112,101,73,110,100,101,120,0,109,95,115,117,98,80,97, -114,116,0,109,95,116,114,105,97,110,103,108,101,73,110,100,101,120,0,109, -95,112,97,100,91,52,93,0,109,95,101,115,99,97,112,101,73,110,100,101, -120,79,114,84,114,105,97,110,103,108,101,73,110,100,101,120,0,109,95,98, -118,104,65,97,98,98,77,105,110,0,109,95,98,118,104,65,97,98,98,77, -97,120,0,109,95,98,118,104,81,117,97,110,116,105,122,97,116,105,111,110, -0,109,95,99,117,114,78,111,100,101,73,110,100,101,120,0,109,95,117,115, -101,81,117,97,110,116,105,122,97,116,105,111,110,0,109,95,110,117,109,67, -111,110,116,105,103,117,111,117,115,76,101,97,102,78,111,100,101,115,0,109, -95,110,117,109,81,117,97,110,116,105,122,101,100,67,111,110,116,105,103,117, -111,117,115,78,111,100,101,115,0,42,109,95,99,111,110,116,105,103,117,111, -117,115,78,111,100,101,115,80,116,114,0,42,109,95,113,117,97,110,116,105, -122,101,100,67,111,110,116,105,103,117,111,117,115,78,111,100,101,115,80,116, -114,0,42,109,95,115,117,98,84,114,101,101,73,110,102,111,80,116,114,0, -109,95,116,114,97,118,101,114,115,97,108,77,111,100,101,0,109,95,110,117, -109,83,117,98,116,114,101,101,72,101,97,100,101,114,115,0,42,109,95,110, -97,109,101,0,109,95,115,104,97,112,101,84,121,112,101,0,109,95,112,97, -100,100,105,110,103,91,52,93,0,109,95,99,111,108,108,105,115,105,111,110, -83,104,97,112,101,68,97,116,97,0,109,95,108,111,99,97,108,83,99,97, -108,105,110,103,0,109,95,112,108,97,110,101,78,111,114,109,97,108,0,109, -95,112,108,97,110,101,67,111,110,115,116,97,110,116,0,109,95,105,109,112, -108,105,99,105,116,83,104,97,112,101,68,105,109,101,110,115,105,111,110,115, -0,109,95,99,111,108,108,105,115,105,111,110,77,97,114,103,105,110,0,109, -95,112,97,100,100,105,110,103,0,109,95,112,111,115,0,109,95,114,97,100, -105,117,115,0,109,95,99,111,110,118,101,120,73,110,116,101,114,110,97,108, -83,104,97,112,101,68,97,116,97,0,42,109,95,108,111,99,97,108,80,111, -115,105,116,105,111,110,65,114,114,97,121,80,116,114,0,109,95,108,111,99, -97,108,80,111,115,105,116,105,111,110,65,114,114,97,121,83,105,122,101,0, -109,95,118,97,108,117,101,0,109,95,112,97,100,91,50,93,0,109,95,118, -97,108,117,101,115,91,51,93,0,42,109,95,118,101,114,116,105,99,101,115, -51,102,0,42,109,95,118,101,114,116,105,99,101,115,51,100,0,42,109,95, -105,110,100,105,99,101,115,51,50,0,42,109,95,51,105,110,100,105,99,101, -115,49,54,0,42,109,95,105,110,100,105,99,101,115,49,54,0,109,95,110, -117,109,84,114,105,97,110,103,108,101,115,0,109,95,110,117,109,86,101,114, -116,105,99,101,115,0,42,109,95,109,101,115,104,80,97,114,116,115,80,116, -114,0,109,95,115,99,97,108,105,110,103,0,109,95,110,117,109,77,101,115, -104,80,97,114,116,115,0,109,95,109,101,115,104,73,110,116,101,114,102,97, -99,101,0,42,109,95,113,117,97,110,116,105,122,101,100,70,108,111,97,116, -66,118,104,0,42,109,95,113,117,97,110,116,105,122,101,100,68,111,117,98, -108,101,66,118,104,0,42,109,95,116,114,105,97,110,103,108,101,73,110,102, -111,77,97,112,0,109,95,112,97,100,51,91,52,93,0,109,95,116,114,97, -110,115,102,111,114,109,0,42,109,95,99,104,105,108,100,83,104,97,112,101, -0,109,95,99,104,105,108,100,83,104,97,112,101,84,121,112,101,0,109,95, -99,104,105,108,100,77,97,114,103,105,110,0,42,109,95,99,104,105,108,100, -83,104,97,112,101,80,116,114,0,109,95,110,117,109,67,104,105,108,100,83, -104,97,112,101,115,0,109,95,117,112,65,120,105,115,0,109,95,102,108,97, -103,115,0,109,95,101,100,103,101,86,48,86,49,65,110,103,108,101,0,109, -95,101,100,103,101,86,49,86,50,65,110,103,108,101,0,109,95,101,100,103, -101,86,50,86,48,65,110,103,108,101,0,42,109,95,104,97,115,104,84,97, -98,108,101,80,116,114,0,42,109,95,110,101,120,116,80,116,114,0,42,109, -95,118,97,108,117,101,65,114,114,97,121,80,116,114,0,42,109,95,107,101, -121,65,114,114,97,121,80,116,114,0,109,95,99,111,110,118,101,120,69,112, -115,105,108,111,110,0,109,95,112,108,97,110,97,114,69,112,115,105,108,111, -110,0,109,95,101,113,117,97,108,86,101,114,116,101,120,84,104,114,101,115, -104,111,108,100,0,109,95,101,100,103,101,68,105,115,116,97,110,99,101,84, -104,114,101,115,104,111,108,100,0,109,95,122,101,114,111,65,114,101,97,84, -104,114,101,115,104,111,108,100,0,109,95,110,101,120,116,83,105,122,101,0, -109,95,104,97,115,104,84,97,98,108,101,83,105,122,101,0,109,95,110,117, -109,86,97,108,117,101,115,0,109,95,110,117,109,75,101,121,115,0,109,95, -103,105,109,112,97,99,116,83,117,98,84,121,112,101,0,42,109,95,117,110, -115,99,97,108,101,100,80,111,105,110,116,115,70,108,111,97,116,80,116,114, -0,42,109,95,117,110,115,99,97,108,101,100,80,111,105,110,116,115,68,111, -117,98,108,101,80,116,114,0,109,95,110,117,109,85,110,115,99,97,108,101, -100,80,111,105,110,116,115,0,109,95,112,97,100,100,105,110,103,51,91,52, -93,0,42,109,95,98,114,111,97,100,112,104,97,115,101,72,97,110,100,108, -101,0,42,109,95,99,111,108,108,105,115,105,111,110,83,104,97,112,101,0, -42,109,95,114,111,111,116,67,111,108,108,105,115,105,111,110,83,104,97,112, -101,0,109,95,119,111,114,108,100,84,114,97,110,115,102,111,114,109,0,109, -95,105,110,116,101,114,112,111,108,97,116,105,111,110,87,111,114,108,100,84, -114,97,110,115,102,111,114,109,0,109,95,105,110,116,101,114,112,111,108,97, -116,105,111,110,76,105,110,101,97,114,86,101,108,111,99,105,116,121,0,109, -95,105,110,116,101,114,112,111,108,97,116,105,111,110,65,110,103,117,108,97, -114,86,101,108,111,99,105,116,121,0,109,95,97,110,105,115,111,116,114,111, -112,105,99,70,114,105,99,116,105,111,110,0,109,95,99,111,110,116,97,99, -116,80,114,111,99,101,115,115,105,110,103,84,104,114,101,115,104,111,108,100, -0,109,95,100,101,97,99,116,105,118,97,116,105,111,110,84,105,109,101,0, -109,95,102,114,105,99,116,105,111,110,0,109,95,114,101,115,116,105,116,117, -116,105,111,110,0,109,95,104,105,116,70,114,97,99,116,105,111,110,0,109, -95,99,99,100,83,119,101,112,116,83,112,104,101,114,101,82,97,100,105,117, -115,0,109,95,99,99,100,77,111,116,105,111,110,84,104,114,101,115,104,111, -108,100,0,109,95,104,97,115,65,110,105,115,111,116,114,111,112,105,99,70, -114,105,99,116,105,111,110,0,109,95,99,111,108,108,105,115,105,111,110,70, -108,97,103,115,0,109,95,105,115,108,97,110,100,84,97,103,49,0,109,95, -99,111,109,112,97,110,105,111,110,73,100,0,109,95,97,99,116,105,118,97, -116,105,111,110,83,116,97,116,101,49,0,109,95,105,110,116,101,114,110,97, -108,84,121,112,101,0,109,95,99,104,101,99,107,67,111,108,108,105,100,101, -87,105,116,104,0,109,95,99,111,108,108,105,115,105,111,110,79,98,106,101, -99,116,68,97,116,97,0,109,95,105,110,118,73,110,101,114,116,105,97,84, -101,110,115,111,114,87,111,114,108,100,0,109,95,108,105,110,101,97,114,86, -101,108,111,99,105,116,121,0,109,95,97,110,103,117,108,97,114,86,101,108, -111,99,105,116,121,0,109,95,97,110,103,117,108,97,114,70,97,99,116,111, -114,0,109,95,108,105,110,101,97,114,70,97,99,116,111,114,0,109,95,103, -114,97,118,105,116,121,0,109,95,103,114,97,118,105,116,121,95,97,99,99, -101,108,101,114,97,116,105,111,110,0,109,95,105,110,118,73,110,101,114,116, -105,97,76,111,99,97,108,0,109,95,116,111,116,97,108,70,111,114,99,101, -0,109,95,116,111,116,97,108,84,111,114,113,117,101,0,109,95,105,110,118, -101,114,115,101,77,97,115,115,0,109,95,108,105,110,101,97,114,68,97,109, -112,105,110,103,0,109,95,97,110,103,117,108,97,114,68,97,109,112,105,110, -103,0,109,95,97,100,100,105,116,105,111,110,97,108,68,97,109,112,105,110, -103,70,97,99,116,111,114,0,109,95,97,100,100,105,116,105,111,110,97,108, -76,105,110,101,97,114,68,97,109,112,105,110,103,84,104,114,101,115,104,111, -108,100,83,113,114,0,109,95,97,100,100,105,116,105,111,110,97,108,65,110, -103,117,108,97,114,68,97,109,112,105,110,103,84,104,114,101,115,104,111,108, -100,83,113,114,0,109,95,97,100,100,105,116,105,111,110,97,108,65,110,103, -117,108,97,114,68,97,109,112,105,110,103,70,97,99,116,111,114,0,109,95, -108,105,110,101,97,114,83,108,101,101,112,105,110,103,84,104,114,101,115,104, -111,108,100,0,109,95,97,110,103,117,108,97,114,83,108,101,101,112,105,110, -103,84,104,114,101,115,104,111,108,100,0,109,95,97,100,100,105,116,105,111, -110,97,108,68,97,109,112,105,110,103,0,109,95,110,117,109,67,111,110,115, -116,114,97,105,110,116,82,111,119,115,0,110,117,98,0,42,109,95,114,98, -65,0,42,109,95,114,98,66,0,109,95,111,98,106,101,99,116,84,121,112, -101,0,109,95,117,115,101,114,67,111,110,115,116,114,97,105,110,116,84,121, -112,101,0,109,95,117,115,101,114,67,111,110,115,116,114,97,105,110,116,73, -100,0,109,95,110,101,101,100,115,70,101,101,100,98,97,99,107,0,109,95, -97,112,112,108,105,101,100,73,109,112,117,108,115,101,0,109,95,100,98,103, -68,114,97,119,83,105,122,101,0,109,95,100,105,115,97,98,108,101,67,111, -108,108,105,115,105,111,110,115,66,101,116,119,101,101,110,76,105,110,107,101, -100,66,111,100,105,101,115,0,109,95,112,97,100,52,91,52,93,0,109,95, -116,121,112,101,67,111,110,115,116,114,97,105,110,116,68,97,116,97,0,109, -95,112,105,118,111,116,73,110,65,0,109,95,112,105,118,111,116,73,110,66, -0,109,95,114,98,65,70,114,97,109,101,0,109,95,114,98,66,70,114,97, -109,101,0,109,95,117,115,101,82,101,102,101,114,101,110,99,101,70,114,97, -109,101,65,0,109,95,97,110,103,117,108,97,114,79,110,108,121,0,109,95, -101,110,97,98,108,101,65,110,103,117,108,97,114,77,111,116,111,114,0,109, -95,109,111,116,111,114,84,97,114,103,101,116,86,101,108,111,99,105,116,121, -0,109,95,109,97,120,77,111,116,111,114,73,109,112,117,108,115,101,0,109, -95,108,111,119,101,114,76,105,109,105,116,0,109,95,117,112,112,101,114,76, -105,109,105,116,0,109,95,108,105,109,105,116,83,111,102,116,110,101,115,115, -0,109,95,98,105,97,115,70,97,99,116,111,114,0,109,95,114,101,108,97, -120,97,116,105,111,110,70,97,99,116,111,114,0,109,95,115,119,105,110,103, -83,112,97,110,49,0,109,95,115,119,105,110,103,83,112,97,110,50,0,109, -95,116,119,105,115,116,83,112,97,110,0,109,95,100,97,109,112,105,110,103, -0,109,95,108,105,110,101,97,114,85,112,112,101,114,76,105,109,105,116,0, -109,95,108,105,110,101,97,114,76,111,119,101,114,76,105,109,105,116,0,109, -95,97,110,103,117,108,97,114,85,112,112,101,114,76,105,109,105,116,0,109, -95,97,110,103,117,108,97,114,76,111,119,101,114,76,105,109,105,116,0,109, -95,117,115,101,76,105,110,101,97,114,82,101,102,101,114,101,110,99,101,70, -114,97,109,101,65,0,109,95,117,115,101,79,102,102,115,101,116,70,111,114, -67,111,110,115,116,114,97,105,110,116,70,114,97,109,101,0,84,89,80,69, -58,0,0,0,99,104,97,114,0,117,99,104,97,114,0,115,104,111,114,116, -0,117,115,104,111,114,116,0,105,110,116,0,108,111,110,103,0,117,108,111, -110,103,0,102,108,111,97,116,0,100,111,117,98,108,101,0,118,111,105,100, -0,80,111,105,110,116,101,114,65,114,114,97,121,0,98,116,80,104,121,115, -105,99,115,83,121,115,116,101,109,0,76,105,115,116,66,97,115,101,0,98, -116,86,101,99,116,111,114,51,70,108,111,97,116,68,97,116,97,0,98,116, -86,101,99,116,111,114,51,68,111,117,98,108,101,68,97,116,97,0,98,116, -77,97,116,114,105,120,51,120,51,70,108,111,97,116,68,97,116,97,0,98, -116,77,97,116,114,105,120,51,120,51,68,111,117,98,108,101,68,97,116,97, -0,98,116,84,114,97,110,115,102,111,114,109,70,108,111,97,116,68,97,116, -97,0,98,116,84,114,97,110,115,102,111,114,109,68,111,117,98,108,101,68, -97,116,97,0,98,116,66,118,104,83,117,98,116,114,101,101,73,110,102,111, -68,97,116,97,0,98,116,79,112,116,105,109,105,122,101,100,66,118,104,78, -111,100,101,70,108,111,97,116,68,97,116,97,0,98,116,79,112,116,105,109, -105,122,101,100,66,118,104,78,111,100,101,68,111,117,98,108,101,68,97,116, -97,0,98,116,81,117,97,110,116,105,122,101,100,66,118,104,78,111,100,101, -68,97,116,97,0,98,116,81,117,97,110,116,105,122,101,100,66,118,104,70, -108,111,97,116,68,97,116,97,0,98,116,81,117,97,110,116,105,122,101,100, -66,118,104,68,111,117,98,108,101,68,97,116,97,0,98,116,67,111,108,108, -105,115,105,111,110,83,104,97,112,101,68,97,116,97,0,98,116,83,116,97, -116,105,99,80,108,97,110,101,83,104,97,112,101,68,97,116,97,0,98,116, -67,111,110,118,101,120,73,110,116,101,114,110,97,108,83,104,97,112,101,68, -97,116,97,0,98,116,80,111,115,105,116,105,111,110,65,110,100,82,97,100, -105,117,115,0,98,116,77,117,108,116,105,83,112,104,101,114,101,83,104,97, -112,101,68,97,116,97,0,98,116,73,110,116,73,110,100,101,120,68,97,116, -97,0,98,116,83,104,111,114,116,73,110,116,73,110,100,101,120,68,97,116, -97,0,98,116,83,104,111,114,116,73,110,116,73,110,100,101,120,84,114,105, -112,108,101,116,68,97,116,97,0,98,116,77,101,115,104,80,97,114,116,68, -97,116,97,0,98,116,83,116,114,105,100,105,110,103,77,101,115,104,73,110, -116,101,114,102,97,99,101,68,97,116,97,0,98,116,84,114,105,97,110,103, -108,101,77,101,115,104,83,104,97,112,101,68,97,116,97,0,98,116,84,114, -105,97,110,103,108,101,73,110,102,111,77,97,112,68,97,116,97,0,98,116, -67,111,109,112,111,117,110,100,83,104,97,112,101,67,104,105,108,100,68,97, -116,97,0,98,116,67,111,109,112,111,117,110,100,83,104,97,112,101,68,97, -116,97,0,98,116,67,121,108,105,110,100,101,114,83,104,97,112,101,68,97, -116,97,0,98,116,67,97,112,115,117,108,101,83,104,97,112,101,68,97,116, -97,0,98,116,84,114,105,97,110,103,108,101,73,110,102,111,68,97,116,97, -0,98,116,71,73,109,112,97,99,116,77,101,115,104,83,104,97,112,101,68, -97,116,97,0,98,116,67,111,110,118,101,120,72,117,108,108,83,104,97,112, -101,68,97,116,97,0,98,116,67,111,108,108,105,115,105,111,110,79,98,106, -101,99,116,68,111,117,98,108,101,68,97,116,97,0,98,116,67,111,108,108, -105,115,105,111,110,79,98,106,101,99,116,70,108,111,97,116,68,97,116,97, -0,98,116,82,105,103,105,100,66,111,100,121,70,108,111,97,116,68,97,116, -97,0,98,116,82,105,103,105,100,66,111,100,121,68,111,117,98,108,101,68, -97,116,97,0,98,116,67,111,110,115,116,114,97,105,110,116,73,110,102,111, -49,0,98,116,84,121,112,101,100,67,111,110,115,116,114,97,105,110,116,68, -97,116,97,0,98,116,82,105,103,105,100,66,111,100,121,68,97,116,97,0, -98,116,80,111,105,110,116,50,80,111,105,110,116,67,111,110,115,116,114,97, -105,110,116,70,108,111,97,116,68,97,116,97,0,98,116,80,111,105,110,116, -50,80,111,105,110,116,67,111,110,115,116,114,97,105,110,116,68,111,117,98, -108,101,68,97,116,97,0,98,116,72,105,110,103,101,67,111,110,115,116,114, -97,105,110,116,68,111,117,98,108,101,68,97,116,97,0,98,116,72,105,110, -103,101,67,111,110,115,116,114,97,105,110,116,70,108,111,97,116,68,97,116, -97,0,98,116,67,111,110,101,84,119,105,115,116,67,111,110,115,116,114,97, -105,110,116,68,97,116,97,0,98,116,71,101,110,101,114,105,99,54,68,111, -102,67,111,110,115,116,114,97,105,110,116,68,97,116,97,0,98,116,83,108, -105,100,101,114,67,111,110,115,116,114,97,105,110,116,68,97,116,97,0,0, -84,76,69,78,1,0,1,0,2,0,2,0,4,0,4,0,4,0,4,0, -8,0,0,0,16,0,48,0,16,0,16,0,32,0,48,0,96,0,64,0, --128,0,20,0,48,0,80,0,16,0,96,0,-112,0,16,0,56,0,56,0, -20,0,72,0,4,0,4,0,8,0,48,0,32,0,80,0,72,0,80,0, -32,0,64,0,64,0,16,0,72,0,80,0,-40,1,8,1,-16,1,-88,3, -8,0,56,0,0,0,88,0,120,0,96,1,-32,0,-40,0,0,1,-48,0, -83,84,82,67,47,0,0,0,10,0,3,0,4,0,0,0,4,0,1,0, -9,0,2,0,11,0,3,0,10,0,3,0,10,0,4,0,10,0,5,0, -12,0,2,0,9,0,6,0,9,0,7,0,13,0,1,0,7,0,8,0, -14,0,1,0,8,0,8,0,15,0,1,0,13,0,9,0,16,0,1,0, -14,0,9,0,17,0,2,0,15,0,10,0,13,0,11,0,18,0,2,0, -16,0,10,0,14,0,11,0,19,0,4,0,4,0,12,0,4,0,13,0, -2,0,14,0,2,0,15,0,20,0,6,0,13,0,16,0,13,0,17,0, -4,0,18,0,4,0,19,0,4,0,20,0,0,0,21,0,21,0,6,0, -14,0,16,0,14,0,17,0,4,0,18,0,4,0,19,0,4,0,20,0, -0,0,21,0,22,0,3,0,2,0,14,0,2,0,15,0,4,0,22,0, -23,0,12,0,13,0,23,0,13,0,24,0,13,0,25,0,4,0,26,0, -4,0,27,0,4,0,28,0,4,0,29,0,20,0,30,0,22,0,31,0, -19,0,32,0,4,0,33,0,4,0,34,0,24,0,12,0,14,0,23,0, -14,0,24,0,14,0,25,0,4,0,26,0,4,0,27,0,4,0,28,0, -4,0,29,0,21,0,30,0,22,0,31,0,4,0,33,0,4,0,34,0, -19,0,32,0,25,0,3,0,0,0,35,0,4,0,36,0,0,0,37,0, -26,0,5,0,25,0,38,0,13,0,39,0,13,0,40,0,7,0,41,0, -0,0,21,0,27,0,5,0,25,0,38,0,13,0,39,0,13,0,42,0, -7,0,43,0,4,0,44,0,28,0,2,0,13,0,45,0,7,0,46,0, -29,0,4,0,27,0,47,0,28,0,48,0,4,0,49,0,0,0,37,0, -30,0,1,0,4,0,50,0,31,0,2,0,2,0,50,0,0,0,51,0, -32,0,2,0,2,0,52,0,0,0,51,0,33,0,7,0,13,0,53,0, -14,0,54,0,30,0,55,0,32,0,56,0,31,0,57,0,4,0,58,0, -4,0,59,0,34,0,4,0,33,0,60,0,13,0,61,0,4,0,62,0, -0,0,37,0,35,0,7,0,25,0,38,0,34,0,63,0,23,0,64,0, -24,0,65,0,36,0,66,0,7,0,43,0,0,0,67,0,37,0,4,0, -17,0,68,0,25,0,69,0,4,0,70,0,7,0,71,0,38,0,4,0, -25,0,38,0,37,0,72,0,4,0,73,0,7,0,43,0,39,0,3,0, -27,0,47,0,4,0,74,0,0,0,37,0,40,0,3,0,27,0,47,0, -4,0,74,0,0,0,37,0,41,0,4,0,4,0,75,0,7,0,76,0, -7,0,77,0,7,0,78,0,36,0,14,0,4,0,79,0,4,0,80,0, -41,0,81,0,4,0,82,0,7,0,83,0,7,0,84,0,7,0,85,0, -7,0,86,0,7,0,87,0,4,0,88,0,4,0,89,0,4,0,90,0, -4,0,91,0,0,0,37,0,42,0,5,0,25,0,38,0,34,0,63,0, -13,0,39,0,7,0,43,0,4,0,92,0,43,0,5,0,27,0,47,0, -13,0,93,0,14,0,94,0,4,0,95,0,0,0,96,0,44,0,24,0, -9,0,97,0,9,0,98,0,25,0,99,0,0,0,35,0,18,0,100,0, -18,0,101,0,14,0,102,0,14,0,103,0,14,0,104,0,8,0,105,0, -8,0,106,0,8,0,107,0,8,0,108,0,8,0,109,0,8,0,110,0, -8,0,111,0,4,0,112,0,4,0,113,0,4,0,114,0,4,0,115,0, -4,0,116,0,4,0,117,0,4,0,118,0,0,0,37,0,45,0,23,0, -9,0,97,0,9,0,98,0,25,0,99,0,0,0,35,0,17,0,100,0, -17,0,101,0,13,0,102,0,13,0,103,0,13,0,104,0,7,0,105,0, -7,0,106,0,7,0,107,0,7,0,108,0,7,0,109,0,7,0,110,0, -7,0,111,0,4,0,112,0,4,0,113,0,4,0,114,0,4,0,115,0, -4,0,116,0,4,0,117,0,4,0,118,0,46,0,21,0,45,0,119,0, -15,0,120,0,13,0,121,0,13,0,122,0,13,0,123,0,13,0,124,0, -13,0,125,0,13,0,126,0,13,0,127,0,13,0,-128,0,13,0,-127,0, -7,0,-126,0,7,0,-125,0,7,0,-124,0,7,0,-123,0,7,0,-122,0, -7,0,-121,0,7,0,-120,0,7,0,-119,0,7,0,-118,0,4,0,-117,0, -47,0,22,0,44,0,119,0,16,0,120,0,14,0,121,0,14,0,122,0, -14,0,123,0,14,0,124,0,14,0,125,0,14,0,126,0,14,0,127,0, -14,0,-128,0,14,0,-127,0,8,0,-126,0,8,0,-125,0,8,0,-124,0, -8,0,-123,0,8,0,-122,0,8,0,-121,0,8,0,-120,0,8,0,-119,0, -8,0,-118,0,4,0,-117,0,0,0,37,0,48,0,2,0,4,0,-116,0, -4,0,-115,0,49,0,11,0,50,0,-114,0,50,0,-113,0,0,0,35,0, -4,0,-112,0,4,0,-111,0,4,0,-110,0,4,0,-109,0,7,0,-108,0, -7,0,-107,0,4,0,-106,0,0,0,-105,0,51,0,3,0,49,0,-104,0, -13,0,-103,0,13,0,-102,0,52,0,3,0,49,0,-104,0,14,0,-103,0, -14,0,-102,0,53,0,13,0,49,0,-104,0,18,0,-101,0,18,0,-100,0, -4,0,-99,0,4,0,-98,0,4,0,-97,0,7,0,-96,0,7,0,-95,0, -7,0,-94,0,7,0,-93,0,7,0,-92,0,7,0,-91,0,7,0,-90,0, -54,0,13,0,49,0,-104,0,17,0,-101,0,17,0,-100,0,4,0,-99,0, -4,0,-98,0,4,0,-97,0,7,0,-96,0,7,0,-95,0,7,0,-94,0, -7,0,-93,0,7,0,-92,0,7,0,-91,0,7,0,-90,0,55,0,11,0, -49,0,-104,0,17,0,-101,0,17,0,-100,0,7,0,-89,0,7,0,-88,0, -7,0,-87,0,7,0,-92,0,7,0,-91,0,7,0,-90,0,7,0,-86,0, -0,0,21,0,56,0,9,0,49,0,-104,0,17,0,-101,0,17,0,-100,0, -13,0,-85,0,13,0,-84,0,13,0,-83,0,13,0,-82,0,4,0,-81,0, -4,0,-80,0,57,0,9,0,49,0,-104,0,17,0,-101,0,17,0,-100,0, -7,0,-85,0,7,0,-84,0,7,0,-83,0,7,0,-82,0,4,0,-81,0, -4,0,-80,0,}; -int sBulletDNAlen64= sizeof(sBulletDNAstr64); - unsigned char sBulletDNAstr[]= { -83,68,78,65,78,65,77,69,-79,0,0,0,109,95,115,105,122,101,0,109, +83,68,78,65,78,65,77,69,-4,0,0,0,109,95,115,105,122,101,0,109, 95,99,97,112,97,99,105,116,121,0,42,109,95,100,97,116,97,0,109,95, 99,111,108,108,105,115,105,111,110,83,104,97,112,101,115,0,109,95,99,111, 108,108,105,115,105,111,110,79,98,106,101,99,116,115,0,109,95,99,111,110, @@ -438,140 +149,590 @@ unsigned char sBulletDNAstr[]= { 95,97,110,103,117,108,97,114,76,111,119,101,114,76,105,109,105,116,0,109, 95,117,115,101,76,105,110,101,97,114,82,101,102,101,114,101,110,99,101,70, 114,97,109,101,65,0,109,95,117,115,101,79,102,102,115,101,116,70,111,114, -67,111,110,115,116,114,97,105,110,116,70,114,97,109,101,0,84,89,80,69, -58,0,0,0,99,104,97,114,0,117,99,104,97,114,0,115,104,111,114,116, -0,117,115,104,111,114,116,0,105,110,116,0,108,111,110,103,0,117,108,111, -110,103,0,102,108,111,97,116,0,100,111,117,98,108,101,0,118,111,105,100, -0,80,111,105,110,116,101,114,65,114,114,97,121,0,98,116,80,104,121,115, -105,99,115,83,121,115,116,101,109,0,76,105,115,116,66,97,115,101,0,98, -116,86,101,99,116,111,114,51,70,108,111,97,116,68,97,116,97,0,98,116, -86,101,99,116,111,114,51,68,111,117,98,108,101,68,97,116,97,0,98,116, -77,97,116,114,105,120,51,120,51,70,108,111,97,116,68,97,116,97,0,98, -116,77,97,116,114,105,120,51,120,51,68,111,117,98,108,101,68,97,116,97, -0,98,116,84,114,97,110,115,102,111,114,109,70,108,111,97,116,68,97,116, -97,0,98,116,84,114,97,110,115,102,111,114,109,68,111,117,98,108,101,68, -97,116,97,0,98,116,66,118,104,83,117,98,116,114,101,101,73,110,102,111, -68,97,116,97,0,98,116,79,112,116,105,109,105,122,101,100,66,118,104,78, -111,100,101,70,108,111,97,116,68,97,116,97,0,98,116,79,112,116,105,109, -105,122,101,100,66,118,104,78,111,100,101,68,111,117,98,108,101,68,97,116, -97,0,98,116,81,117,97,110,116,105,122,101,100,66,118,104,78,111,100,101, -68,97,116,97,0,98,116,81,117,97,110,116,105,122,101,100,66,118,104,70, -108,111,97,116,68,97,116,97,0,98,116,81,117,97,110,116,105,122,101,100, -66,118,104,68,111,117,98,108,101,68,97,116,97,0,98,116,67,111,108,108, -105,115,105,111,110,83,104,97,112,101,68,97,116,97,0,98,116,83,116,97, -116,105,99,80,108,97,110,101,83,104,97,112,101,68,97,116,97,0,98,116, -67,111,110,118,101,120,73,110,116,101,114,110,97,108,83,104,97,112,101,68, -97,116,97,0,98,116,80,111,115,105,116,105,111,110,65,110,100,82,97,100, -105,117,115,0,98,116,77,117,108,116,105,83,112,104,101,114,101,83,104,97, -112,101,68,97,116,97,0,98,116,73,110,116,73,110,100,101,120,68,97,116, -97,0,98,116,83,104,111,114,116,73,110,116,73,110,100,101,120,68,97,116, -97,0,98,116,83,104,111,114,116,73,110,116,73,110,100,101,120,84,114,105, -112,108,101,116,68,97,116,97,0,98,116,77,101,115,104,80,97,114,116,68, -97,116,97,0,98,116,83,116,114,105,100,105,110,103,77,101,115,104,73,110, -116,101,114,102,97,99,101,68,97,116,97,0,98,116,84,114,105,97,110,103, -108,101,77,101,115,104,83,104,97,112,101,68,97,116,97,0,98,116,84,114, -105,97,110,103,108,101,73,110,102,111,77,97,112,68,97,116,97,0,98,116, -67,111,109,112,111,117,110,100,83,104,97,112,101,67,104,105,108,100,68,97, -116,97,0,98,116,67,111,109,112,111,117,110,100,83,104,97,112,101,68,97, -116,97,0,98,116,67,121,108,105,110,100,101,114,83,104,97,112,101,68,97, -116,97,0,98,116,67,97,112,115,117,108,101,83,104,97,112,101,68,97,116, -97,0,98,116,84,114,105,97,110,103,108,101,73,110,102,111,68,97,116,97, -0,98,116,71,73,109,112,97,99,116,77,101,115,104,83,104,97,112,101,68, -97,116,97,0,98,116,67,111,110,118,101,120,72,117,108,108,83,104,97,112, -101,68,97,116,97,0,98,116,67,111,108,108,105,115,105,111,110,79,98,106, -101,99,116,68,111,117,98,108,101,68,97,116,97,0,98,116,67,111,108,108, -105,115,105,111,110,79,98,106,101,99,116,70,108,111,97,116,68,97,116,97, -0,98,116,82,105,103,105,100,66,111,100,121,70,108,111,97,116,68,97,116, -97,0,98,116,82,105,103,105,100,66,111,100,121,68,111,117,98,108,101,68, -97,116,97,0,98,116,67,111,110,115,116,114,97,105,110,116,73,110,102,111, -49,0,98,116,84,121,112,101,100,67,111,110,115,116,114,97,105,110,116,68, -97,116,97,0,98,116,82,105,103,105,100,66,111,100,121,68,97,116,97,0, -98,116,80,111,105,110,116,50,80,111,105,110,116,67,111,110,115,116,114,97, -105,110,116,70,108,111,97,116,68,97,116,97,0,98,116,80,111,105,110,116, -50,80,111,105,110,116,67,111,110,115,116,114,97,105,110,116,68,111,117,98, -108,101,68,97,116,97,0,98,116,72,105,110,103,101,67,111,110,115,116,114, -97,105,110,116,68,111,117,98,108,101,68,97,116,97,0,98,116,72,105,110, -103,101,67,111,110,115,116,114,97,105,110,116,70,108,111,97,116,68,97,116, -97,0,98,116,67,111,110,101,84,119,105,115,116,67,111,110,115,116,114,97, -105,110,116,68,97,116,97,0,98,116,71,101,110,101,114,105,99,54,68,111, -102,67,111,110,115,116,114,97,105,110,116,68,97,116,97,0,98,116,83,108, -105,100,101,114,67,111,110,115,116,114,97,105,110,116,68,97,116,97,0,0, -84,76,69,78,1,0,1,0,2,0,2,0,4,0,4,0,4,0,4,0, -8,0,0,0,12,0,36,0,8,0,16,0,32,0,48,0,96,0,64,0, --128,0,20,0,48,0,80,0,16,0,84,0,-124,0,12,0,52,0,52,0, -20,0,64,0,4,0,4,0,8,0,28,0,28,0,60,0,56,0,76,0, -24,0,60,0,60,0,16,0,64,0,68,0,-56,1,-8,0,-32,1,-104,3, -8,0,44,0,0,0,76,0,108,0,84,1,-44,0,-52,0,-12,0,-60,0, -83,84,82,67,47,0,0,0,10,0,3,0,4,0,0,0,4,0,1,0, -9,0,2,0,11,0,3,0,10,0,3,0,10,0,4,0,10,0,5,0, -12,0,2,0,9,0,6,0,9,0,7,0,13,0,1,0,7,0,8,0, -14,0,1,0,8,0,8,0,15,0,1,0,13,0,9,0,16,0,1,0, -14,0,9,0,17,0,2,0,15,0,10,0,13,0,11,0,18,0,2,0, -16,0,10,0,14,0,11,0,19,0,4,0,4,0,12,0,4,0,13,0, -2,0,14,0,2,0,15,0,20,0,6,0,13,0,16,0,13,0,17,0, -4,0,18,0,4,0,19,0,4,0,20,0,0,0,21,0,21,0,6,0, -14,0,16,0,14,0,17,0,4,0,18,0,4,0,19,0,4,0,20,0, -0,0,21,0,22,0,3,0,2,0,14,0,2,0,15,0,4,0,22,0, -23,0,12,0,13,0,23,0,13,0,24,0,13,0,25,0,4,0,26,0, -4,0,27,0,4,0,28,0,4,0,29,0,20,0,30,0,22,0,31,0, -19,0,32,0,4,0,33,0,4,0,34,0,24,0,12,0,14,0,23,0, -14,0,24,0,14,0,25,0,4,0,26,0,4,0,27,0,4,0,28,0, -4,0,29,0,21,0,30,0,22,0,31,0,4,0,33,0,4,0,34,0, -19,0,32,0,25,0,3,0,0,0,35,0,4,0,36,0,0,0,37,0, -26,0,5,0,25,0,38,0,13,0,39,0,13,0,40,0,7,0,41,0, -0,0,21,0,27,0,5,0,25,0,38,0,13,0,39,0,13,0,42,0, -7,0,43,0,4,0,44,0,28,0,2,0,13,0,45,0,7,0,46,0, -29,0,4,0,27,0,47,0,28,0,48,0,4,0,49,0,0,0,37,0, -30,0,1,0,4,0,50,0,31,0,2,0,2,0,50,0,0,0,51,0, -32,0,2,0,2,0,52,0,0,0,51,0,33,0,7,0,13,0,53,0, -14,0,54,0,30,0,55,0,32,0,56,0,31,0,57,0,4,0,58,0, -4,0,59,0,34,0,4,0,33,0,60,0,13,0,61,0,4,0,62,0, -0,0,37,0,35,0,7,0,25,0,38,0,34,0,63,0,23,0,64,0, -24,0,65,0,36,0,66,0,7,0,43,0,0,0,67,0,37,0,4,0, -17,0,68,0,25,0,69,0,4,0,70,0,7,0,71,0,38,0,4,0, -25,0,38,0,37,0,72,0,4,0,73,0,7,0,43,0,39,0,3,0, -27,0,47,0,4,0,74,0,0,0,37,0,40,0,3,0,27,0,47,0, -4,0,74,0,0,0,37,0,41,0,4,0,4,0,75,0,7,0,76,0, -7,0,77,0,7,0,78,0,36,0,14,0,4,0,79,0,4,0,80,0, -41,0,81,0,4,0,82,0,7,0,83,0,7,0,84,0,7,0,85,0, -7,0,86,0,7,0,87,0,4,0,88,0,4,0,89,0,4,0,90,0, -4,0,91,0,0,0,37,0,42,0,5,0,25,0,38,0,34,0,63,0, -13,0,39,0,7,0,43,0,4,0,92,0,43,0,5,0,27,0,47,0, -13,0,93,0,14,0,94,0,4,0,95,0,0,0,96,0,44,0,24,0, -9,0,97,0,9,0,98,0,25,0,99,0,0,0,35,0,18,0,100,0, -18,0,101,0,14,0,102,0,14,0,103,0,14,0,104,0,8,0,105,0, -8,0,106,0,8,0,107,0,8,0,108,0,8,0,109,0,8,0,110,0, -8,0,111,0,4,0,112,0,4,0,113,0,4,0,114,0,4,0,115,0, -4,0,116,0,4,0,117,0,4,0,118,0,0,0,37,0,45,0,23,0, -9,0,97,0,9,0,98,0,25,0,99,0,0,0,35,0,17,0,100,0, -17,0,101,0,13,0,102,0,13,0,103,0,13,0,104,0,7,0,105,0, -7,0,106,0,7,0,107,0,7,0,108,0,7,0,109,0,7,0,110,0, -7,0,111,0,4,0,112,0,4,0,113,0,4,0,114,0,4,0,115,0, -4,0,116,0,4,0,117,0,4,0,118,0,46,0,21,0,45,0,119,0, -15,0,120,0,13,0,121,0,13,0,122,0,13,0,123,0,13,0,124,0, -13,0,125,0,13,0,126,0,13,0,127,0,13,0,-128,0,13,0,-127,0, -7,0,-126,0,7,0,-125,0,7,0,-124,0,7,0,-123,0,7,0,-122,0, -7,0,-121,0,7,0,-120,0,7,0,-119,0,7,0,-118,0,4,0,-117,0, -47,0,22,0,44,0,119,0,16,0,120,0,14,0,121,0,14,0,122,0, -14,0,123,0,14,0,124,0,14,0,125,0,14,0,126,0,14,0,127,0, -14,0,-128,0,14,0,-127,0,8,0,-126,0,8,0,-125,0,8,0,-124,0, -8,0,-123,0,8,0,-122,0,8,0,-121,0,8,0,-120,0,8,0,-119,0, -8,0,-118,0,4,0,-117,0,0,0,37,0,48,0,2,0,4,0,-116,0, -4,0,-115,0,49,0,11,0,50,0,-114,0,50,0,-113,0,0,0,35,0, -4,0,-112,0,4,0,-111,0,4,0,-110,0,4,0,-109,0,7,0,-108,0, -7,0,-107,0,4,0,-106,0,0,0,-105,0,51,0,3,0,49,0,-104,0, -13,0,-103,0,13,0,-102,0,52,0,3,0,49,0,-104,0,14,0,-103,0, -14,0,-102,0,53,0,13,0,49,0,-104,0,18,0,-101,0,18,0,-100,0, +67,111,110,115,116,114,97,105,110,116,70,114,97,109,101,0,109,95,108,105, +110,101,97,114,83,116,105,102,102,110,101,115,115,0,109,95,97,110,103,117, +108,97,114,83,116,105,102,102,110,101,115,115,0,109,95,118,111,108,117,109, +101,83,116,105,102,102,110,101,115,115,0,42,109,95,109,97,116,101,114,105, +97,108,0,109,95,112,111,115,105,116,105,111,110,0,109,95,112,114,101,118, +105,111,117,115,80,111,115,105,116,105,111,110,0,109,95,118,101,108,111,99, +105,116,121,0,109,95,97,99,99,117,109,117,108,97,116,101,100,70,111,114, +99,101,0,109,95,110,111,114,109,97,108,0,109,95,97,114,101,97,0,109, +95,97,116,116,97,99,104,0,109,95,112,97,100,0,109,95,110,111,100,101, +73,110,100,105,99,101,115,91,50,93,0,109,95,99,51,0,109,95,114,101, +115,116,76,101,110,103,116,104,0,109,95,98,98,101,110,100,105,110,103,0, +109,95,99,48,0,109,95,99,49,0,109,95,99,50,0,109,95,110,111,100, +101,73,110,100,105,99,101,115,91,51,93,0,109,95,114,101,115,116,65,114, +101,97,0,109,95,99,48,91,52,93,0,109,95,110,111,100,101,73,110,100, +105,99,101,115,91,52,93,0,109,95,114,101,115,116,86,111,108,117,109,101, +0,109,95,108,111,99,97,108,70,114,97,109,101,0,42,109,95,114,105,103, +105,100,66,111,100,121,0,109,95,110,111,100,101,73,110,100,101,120,0,109, +95,97,101,114,111,77,111,100,101,108,0,109,95,98,97,117,109,103,97,114, +116,101,0,109,95,100,114,97,103,0,109,95,108,105,102,116,0,109,95,112, +114,101,115,115,117,114,101,0,109,95,118,111,108,117,109,101,0,109,95,100, +121,110,97,109,105,99,70,114,105,99,116,105,111,110,0,109,95,112,111,115, +101,77,97,116,99,104,0,109,95,114,105,103,105,100,67,111,110,116,97,99, +116,72,97,114,100,110,101,115,115,0,109,95,107,105,110,101,116,105,99,67, +111,110,116,97,99,116,72,97,114,100,110,101,115,115,0,109,95,115,111,102, +116,67,111,110,116,97,99,116,72,97,114,100,110,101,115,115,0,109,95,97, +110,99,104,111,114,72,97,114,100,110,101,115,115,0,109,95,115,111,102,116, +82,105,103,105,100,67,108,117,115,116,101,114,72,97,114,100,110,101,115,115, +0,109,95,115,111,102,116,75,105,110,101,116,105,99,67,108,117,115,116,101, +114,72,97,114,100,110,101,115,115,0,109,95,115,111,102,116,83,111,102,116, +67,108,117,115,116,101,114,72,97,114,100,110,101,115,115,0,109,95,115,111, +102,116,82,105,103,105,100,67,108,117,115,116,101,114,73,109,112,117,108,115, +101,83,112,108,105,116,0,109,95,115,111,102,116,75,105,110,101,116,105,99, +67,108,117,115,116,101,114,73,109,112,117,108,115,101,83,112,108,105,116,0, +109,95,115,111,102,116,83,111,102,116,67,108,117,115,116,101,114,73,109,112, +117,108,115,101,83,112,108,105,116,0,109,95,109,97,120,86,111,108,117,109, +101,0,109,95,116,105,109,101,83,99,97,108,101,0,109,95,118,101,108,111, +99,105,116,121,73,116,101,114,97,116,105,111,110,115,0,109,95,112,111,115, +105,116,105,111,110,73,116,101,114,97,116,105,111,110,115,0,109,95,100,114, +105,102,116,73,116,101,114,97,116,105,111,110,115,0,109,95,99,108,117,115, +116,101,114,73,116,101,114,97,116,105,111,110,115,0,109,95,114,111,116,0, +109,95,115,99,97,108,101,0,109,95,97,113,113,0,109,95,112,111,115,105, +116,105,111,110,115,0,109,95,99,111,109,0,109,95,98,118,111,108,117,109, +101,0,109,95,98,102,114,97,109,101,0,109,95,110,117,109,80,111,115,105, +116,105,111,110,115,0,42,109,95,119,101,105,103,104,116,115,0,109,95,110, +117,109,87,101,105,103,116,115,0,42,109,95,112,111,115,101,0,42,42,109, +95,109,97,116,101,114,105,97,108,115,0,42,109,95,110,111,100,101,115,0, +42,109,95,108,105,110,107,115,0,42,109,95,102,97,99,101,115,0,42,109, +95,116,101,116,114,97,104,101,100,114,97,0,42,109,95,97,110,99,104,111, +114,115,0,109,95,110,117,109,77,97,116,101,114,105,97,108,115,0,109,95, +110,117,109,78,111,100,101,115,0,109,95,110,117,109,76,105,110,107,115,0, +109,95,110,117,109,70,97,99,101,115,0,109,95,110,117,109,84,101,116,114, +97,104,101,100,114,97,0,109,95,110,117,109,65,110,99,104,111,114,115,0, +109,95,99,111,110,102,105,103,0,0,0,0,84,89,80,69,67,0,0,0, +99,104,97,114,0,117,99,104,97,114,0,115,104,111,114,116,0,117,115,104, +111,114,116,0,105,110,116,0,108,111,110,103,0,117,108,111,110,103,0,102, +108,111,97,116,0,100,111,117,98,108,101,0,118,111,105,100,0,80,111,105, +110,116,101,114,65,114,114,97,121,0,98,116,80,104,121,115,105,99,115,83, +121,115,116,101,109,0,76,105,115,116,66,97,115,101,0,98,116,86,101,99, +116,111,114,51,70,108,111,97,116,68,97,116,97,0,98,116,86,101,99,116, +111,114,51,68,111,117,98,108,101,68,97,116,97,0,98,116,77,97,116,114, +105,120,51,120,51,70,108,111,97,116,68,97,116,97,0,98,116,77,97,116, +114,105,120,51,120,51,68,111,117,98,108,101,68,97,116,97,0,98,116,84, +114,97,110,115,102,111,114,109,70,108,111,97,116,68,97,116,97,0,98,116, +84,114,97,110,115,102,111,114,109,68,111,117,98,108,101,68,97,116,97,0, +98,116,66,118,104,83,117,98,116,114,101,101,73,110,102,111,68,97,116,97, +0,98,116,79,112,116,105,109,105,122,101,100,66,118,104,78,111,100,101,70, +108,111,97,116,68,97,116,97,0,98,116,79,112,116,105,109,105,122,101,100, +66,118,104,78,111,100,101,68,111,117,98,108,101,68,97,116,97,0,98,116, +81,117,97,110,116,105,122,101,100,66,118,104,78,111,100,101,68,97,116,97, +0,98,116,81,117,97,110,116,105,122,101,100,66,118,104,70,108,111,97,116, +68,97,116,97,0,98,116,81,117,97,110,116,105,122,101,100,66,118,104,68, +111,117,98,108,101,68,97,116,97,0,98,116,67,111,108,108,105,115,105,111, +110,83,104,97,112,101,68,97,116,97,0,98,116,83,116,97,116,105,99,80, +108,97,110,101,83,104,97,112,101,68,97,116,97,0,98,116,67,111,110,118, +101,120,73,110,116,101,114,110,97,108,83,104,97,112,101,68,97,116,97,0, +98,116,80,111,115,105,116,105,111,110,65,110,100,82,97,100,105,117,115,0, +98,116,77,117,108,116,105,83,112,104,101,114,101,83,104,97,112,101,68,97, +116,97,0,98,116,73,110,116,73,110,100,101,120,68,97,116,97,0,98,116, +83,104,111,114,116,73,110,116,73,110,100,101,120,68,97,116,97,0,98,116, +83,104,111,114,116,73,110,116,73,110,100,101,120,84,114,105,112,108,101,116, +68,97,116,97,0,98,116,77,101,115,104,80,97,114,116,68,97,116,97,0, +98,116,83,116,114,105,100,105,110,103,77,101,115,104,73,110,116,101,114,102, +97,99,101,68,97,116,97,0,98,116,84,114,105,97,110,103,108,101,77,101, +115,104,83,104,97,112,101,68,97,116,97,0,98,116,84,114,105,97,110,103, +108,101,73,110,102,111,77,97,112,68,97,116,97,0,98,116,67,111,109,112, +111,117,110,100,83,104,97,112,101,67,104,105,108,100,68,97,116,97,0,98, +116,67,111,109,112,111,117,110,100,83,104,97,112,101,68,97,116,97,0,98, +116,67,121,108,105,110,100,101,114,83,104,97,112,101,68,97,116,97,0,98, +116,67,97,112,115,117,108,101,83,104,97,112,101,68,97,116,97,0,98,116, +84,114,105,97,110,103,108,101,73,110,102,111,68,97,116,97,0,98,116,71, +73,109,112,97,99,116,77,101,115,104,83,104,97,112,101,68,97,116,97,0, +98,116,67,111,110,118,101,120,72,117,108,108,83,104,97,112,101,68,97,116, +97,0,98,116,67,111,108,108,105,115,105,111,110,79,98,106,101,99,116,68, +111,117,98,108,101,68,97,116,97,0,98,116,67,111,108,108,105,115,105,111, +110,79,98,106,101,99,116,70,108,111,97,116,68,97,116,97,0,98,116,82, +105,103,105,100,66,111,100,121,70,108,111,97,116,68,97,116,97,0,98,116, +82,105,103,105,100,66,111,100,121,68,111,117,98,108,101,68,97,116,97,0, +98,116,67,111,110,115,116,114,97,105,110,116,73,110,102,111,49,0,98,116, +84,121,112,101,100,67,111,110,115,116,114,97,105,110,116,68,97,116,97,0, +98,116,82,105,103,105,100,66,111,100,121,68,97,116,97,0,98,116,80,111, +105,110,116,50,80,111,105,110,116,67,111,110,115,116,114,97,105,110,116,70, +108,111,97,116,68,97,116,97,0,98,116,80,111,105,110,116,50,80,111,105, +110,116,67,111,110,115,116,114,97,105,110,116,68,111,117,98,108,101,68,97, +116,97,0,98,116,72,105,110,103,101,67,111,110,115,116,114,97,105,110,116, +68,111,117,98,108,101,68,97,116,97,0,98,116,72,105,110,103,101,67,111, +110,115,116,114,97,105,110,116,70,108,111,97,116,68,97,116,97,0,98,116, +67,111,110,101,84,119,105,115,116,67,111,110,115,116,114,97,105,110,116,68, +97,116,97,0,98,116,71,101,110,101,114,105,99,54,68,111,102,67,111,110, +115,116,114,97,105,110,116,68,97,116,97,0,98,116,83,108,105,100,101,114, +67,111,110,115,116,114,97,105,110,116,68,97,116,97,0,83,111,102,116,66, +111,100,121,77,97,116,101,114,105,97,108,68,97,116,97,0,83,111,102,116, +66,111,100,121,78,111,100,101,68,97,116,97,0,83,111,102,116,66,111,100, +121,76,105,110,107,68,97,116,97,0,83,111,102,116,66,111,100,121,70,97, +99,101,68,97,116,97,0,83,111,102,116,66,111,100,121,84,101,116,114,97, +68,97,116,97,0,83,111,102,116,82,105,103,105,100,65,110,99,104,111,114, +68,97,116,97,0,83,111,102,116,66,111,100,121,67,111,110,102,105,103,68, +97,116,97,0,83,111,102,116,66,111,100,121,80,111,115,101,68,97,116,97, +0,98,116,83,111,102,116,66,111,100,121,70,108,111,97,116,68,97,116,97, +0,0,0,0,84,76,69,78,1,0,1,0,2,0,2,0,4,0,4,0, +4,0,4,0,8,0,0,0,12,0,36,0,8,0,16,0,32,0,48,0, +96,0,64,0,-128,0,20,0,48,0,80,0,16,0,84,0,-124,0,12,0, +52,0,52,0,20,0,64,0,4,0,4,0,8,0,28,0,28,0,60,0, +56,0,76,0,24,0,60,0,60,0,16,0,64,0,68,0,-56,1,-8,0, +-32,1,-104,3,8,0,44,0,0,0,76,0,108,0,84,1,-44,0,-52,0, +-12,0,-60,0,16,0,100,0,52,0,36,0,100,0,92,0,104,0,-52,0, +-108,1,0,0,83,84,82,67,56,0,0,0,10,0,3,0,4,0,0,0, +4,0,1,0,9,0,2,0,11,0,3,0,10,0,3,0,10,0,4,0, +10,0,5,0,12,0,2,0,9,0,6,0,9,0,7,0,13,0,1,0, +7,0,8,0,14,0,1,0,8,0,8,0,15,0,1,0,13,0,9,0, +16,0,1,0,14,0,9,0,17,0,2,0,15,0,10,0,13,0,11,0, +18,0,2,0,16,0,10,0,14,0,11,0,19,0,4,0,4,0,12,0, +4,0,13,0,2,0,14,0,2,0,15,0,20,0,6,0,13,0,16,0, +13,0,17,0,4,0,18,0,4,0,19,0,4,0,20,0,0,0,21,0, +21,0,6,0,14,0,16,0,14,0,17,0,4,0,18,0,4,0,19,0, +4,0,20,0,0,0,21,0,22,0,3,0,2,0,14,0,2,0,15,0, +4,0,22,0,23,0,12,0,13,0,23,0,13,0,24,0,13,0,25,0, +4,0,26,0,4,0,27,0,4,0,28,0,4,0,29,0,20,0,30,0, +22,0,31,0,19,0,32,0,4,0,33,0,4,0,34,0,24,0,12,0, +14,0,23,0,14,0,24,0,14,0,25,0,4,0,26,0,4,0,27,0, +4,0,28,0,4,0,29,0,21,0,30,0,22,0,31,0,4,0,33,0, +4,0,34,0,19,0,32,0,25,0,3,0,0,0,35,0,4,0,36,0, +0,0,37,0,26,0,5,0,25,0,38,0,13,0,39,0,13,0,40,0, +7,0,41,0,0,0,21,0,27,0,5,0,25,0,38,0,13,0,39,0, +13,0,42,0,7,0,43,0,4,0,44,0,28,0,2,0,13,0,45,0, +7,0,46,0,29,0,4,0,27,0,47,0,28,0,48,0,4,0,49,0, +0,0,37,0,30,0,1,0,4,0,50,0,31,0,2,0,2,0,50,0, +0,0,51,0,32,0,2,0,2,0,52,0,0,0,51,0,33,0,7,0, +13,0,53,0,14,0,54,0,30,0,55,0,32,0,56,0,31,0,57,0, +4,0,58,0,4,0,59,0,34,0,4,0,33,0,60,0,13,0,61,0, +4,0,62,0,0,0,37,0,35,0,7,0,25,0,38,0,34,0,63,0, +23,0,64,0,24,0,65,0,36,0,66,0,7,0,43,0,0,0,67,0, +37,0,4,0,17,0,68,0,25,0,69,0,4,0,70,0,7,0,71,0, +38,0,4,0,25,0,38,0,37,0,72,0,4,0,73,0,7,0,43,0, +39,0,3,0,27,0,47,0,4,0,74,0,0,0,37,0,40,0,3,0, +27,0,47,0,4,0,74,0,0,0,37,0,41,0,4,0,4,0,75,0, +7,0,76,0,7,0,77,0,7,0,78,0,36,0,14,0,4,0,79,0, +4,0,80,0,41,0,81,0,4,0,82,0,7,0,83,0,7,0,84,0, +7,0,85,0,7,0,86,0,7,0,87,0,4,0,88,0,4,0,89,0, +4,0,90,0,4,0,91,0,0,0,37,0,42,0,5,0,25,0,38,0, +34,0,63,0,13,0,39,0,7,0,43,0,4,0,92,0,43,0,5,0, +27,0,47,0,13,0,93,0,14,0,94,0,4,0,95,0,0,0,96,0, +44,0,24,0,9,0,97,0,9,0,98,0,25,0,99,0,0,0,35,0, +18,0,100,0,18,0,101,0,14,0,102,0,14,0,103,0,14,0,104,0, +8,0,105,0,8,0,106,0,8,0,107,0,8,0,108,0,8,0,109,0, +8,0,110,0,8,0,111,0,4,0,112,0,4,0,113,0,4,0,114,0, +4,0,115,0,4,0,116,0,4,0,117,0,4,0,118,0,0,0,37,0, +45,0,23,0,9,0,97,0,9,0,98,0,25,0,99,0,0,0,35,0, +17,0,100,0,17,0,101,0,13,0,102,0,13,0,103,0,13,0,104,0, +7,0,105,0,7,0,106,0,7,0,107,0,7,0,108,0,7,0,109,0, +7,0,110,0,7,0,111,0,4,0,112,0,4,0,113,0,4,0,114,0, +4,0,115,0,4,0,116,0,4,0,117,0,4,0,118,0,46,0,21,0, +45,0,119,0,15,0,120,0,13,0,121,0,13,0,122,0,13,0,123,0, +13,0,124,0,13,0,125,0,13,0,126,0,13,0,127,0,13,0,-128,0, +13,0,-127,0,7,0,-126,0,7,0,-125,0,7,0,-124,0,7,0,-123,0, +7,0,-122,0,7,0,-121,0,7,0,-120,0,7,0,-119,0,7,0,-118,0, +4,0,-117,0,47,0,22,0,44,0,119,0,16,0,120,0,14,0,121,0, +14,0,122,0,14,0,123,0,14,0,124,0,14,0,125,0,14,0,126,0, +14,0,127,0,14,0,-128,0,14,0,-127,0,8,0,-126,0,8,0,-125,0, +8,0,-124,0,8,0,-123,0,8,0,-122,0,8,0,-121,0,8,0,-120,0, +8,0,-119,0,8,0,-118,0,4,0,-117,0,0,0,37,0,48,0,2,0, +4,0,-116,0,4,0,-115,0,49,0,11,0,50,0,-114,0,50,0,-113,0, +0,0,35,0,4,0,-112,0,4,0,-111,0,4,0,-110,0,4,0,-109,0, +7,0,-108,0,7,0,-107,0,4,0,-106,0,0,0,-105,0,51,0,3,0, +49,0,-104,0,13,0,-103,0,13,0,-102,0,52,0,3,0,49,0,-104,0, +14,0,-103,0,14,0,-102,0,53,0,13,0,49,0,-104,0,18,0,-101,0, +18,0,-100,0,4,0,-99,0,4,0,-98,0,4,0,-97,0,7,0,-96,0, +7,0,-95,0,7,0,-94,0,7,0,-93,0,7,0,-92,0,7,0,-91,0, +7,0,-90,0,54,0,13,0,49,0,-104,0,17,0,-101,0,17,0,-100,0, 4,0,-99,0,4,0,-98,0,4,0,-97,0,7,0,-96,0,7,0,-95,0, 7,0,-94,0,7,0,-93,0,7,0,-92,0,7,0,-91,0,7,0,-90,0, -54,0,13,0,49,0,-104,0,17,0,-101,0,17,0,-100,0,4,0,-99,0, -4,0,-98,0,4,0,-97,0,7,0,-96,0,7,0,-95,0,7,0,-94,0, -7,0,-93,0,7,0,-92,0,7,0,-91,0,7,0,-90,0,55,0,11,0, -49,0,-104,0,17,0,-101,0,17,0,-100,0,7,0,-89,0,7,0,-88,0, -7,0,-87,0,7,0,-92,0,7,0,-91,0,7,0,-90,0,7,0,-86,0, -0,0,21,0,56,0,9,0,49,0,-104,0,17,0,-101,0,17,0,-100,0, -13,0,-85,0,13,0,-84,0,13,0,-83,0,13,0,-82,0,4,0,-81,0, -4,0,-80,0,57,0,9,0,49,0,-104,0,17,0,-101,0,17,0,-100,0, -7,0,-85,0,7,0,-84,0,7,0,-83,0,7,0,-82,0,4,0,-81,0, -4,0,-80,0,}; +55,0,11,0,49,0,-104,0,17,0,-101,0,17,0,-100,0,7,0,-89,0, +7,0,-88,0,7,0,-87,0,7,0,-92,0,7,0,-91,0,7,0,-90,0, +7,0,-86,0,0,0,21,0,56,0,9,0,49,0,-104,0,17,0,-101,0, +17,0,-100,0,13,0,-85,0,13,0,-84,0,13,0,-83,0,13,0,-82,0, +4,0,-81,0,4,0,-80,0,57,0,9,0,49,0,-104,0,17,0,-101,0, +17,0,-100,0,7,0,-85,0,7,0,-84,0,7,0,-83,0,7,0,-82,0, +4,0,-81,0,4,0,-80,0,58,0,4,0,7,0,-79,0,7,0,-78,0, +7,0,-77,0,4,0,75,0,59,0,10,0,58,0,-76,0,13,0,-75,0, +13,0,-74,0,13,0,-73,0,13,0,-72,0,13,0,-71,0,7,0,-126,0, +7,0,-70,0,4,0,-69,0,4,0,-68,0,60,0,9,0,58,0,-76,0, +4,0,-67,0,13,0,-66,0,7,0,-65,0,4,0,-64,0,7,0,-63,0, +7,0,-62,0,7,0,-61,0,4,0,-68,0,61,0,4,0,13,0,-71,0, +58,0,-76,0,4,0,-60,0,7,0,-59,0,62,0,7,0,13,0,-58,0, +58,0,-76,0,4,0,-57,0,7,0,-56,0,7,0,-62,0,7,0,-61,0, +4,0,-68,0,63,0,6,0,15,0,-63,0,13,0,-62,0,13,0,-55,0, +50,0,-54,0,4,0,-53,0,7,0,-61,0,64,0,26,0,4,0,-52,0, +7,0,-51,0,7,0,-86,0,7,0,-50,0,7,0,-49,0,7,0,-48,0, +7,0,-47,0,7,0,-46,0,7,0,-45,0,7,0,-44,0,7,0,-43,0, +7,0,-42,0,7,0,-41,0,7,0,-40,0,7,0,-39,0,7,0,-38,0, +7,0,-37,0,7,0,-36,0,7,0,-35,0,7,0,-34,0,7,0,-33,0, +4,0,-32,0,4,0,-31,0,4,0,-30,0,4,0,-29,0,4,0,113,0, +65,0,12,0,15,0,-28,0,15,0,-27,0,15,0,-26,0,13,0,-25,0, +13,0,-24,0,4,0,-23,0,4,0,-22,0,7,0,-56,0,4,0,-21,0, +7,0,-20,0,4,0,-19,0,4,0,-68,0,66,0,15,0,45,0,119,0, +65,0,-18,0,58,0,-17,0,59,0,-16,0,60,0,-15,0,61,0,-14,0, +62,0,-13,0,63,0,-12,0,4,0,-11,0,4,0,-10,0,4,0,-9,0, +4,0,-8,0,4,0,-7,0,4,0,-6,0,64,0,-5,0,}; int sBulletDNAlen= sizeof(sBulletDNAstr); +unsigned char sBulletDNAstr64[]= { +83,68,78,65,78,65,77,69,-4,0,0,0,109,95,115,105,122,101,0,109, +95,99,97,112,97,99,105,116,121,0,42,109,95,100,97,116,97,0,109,95, +99,111,108,108,105,115,105,111,110,83,104,97,112,101,115,0,109,95,99,111, +108,108,105,115,105,111,110,79,98,106,101,99,116,115,0,109,95,99,111,110, +115,116,114,97,105,110,116,115,0,42,102,105,114,115,116,0,42,108,97,115, +116,0,109,95,102,108,111,97,116,115,91,52,93,0,109,95,101,108,91,51, +93,0,109,95,98,97,115,105,115,0,109,95,111,114,105,103,105,110,0,109, +95,114,111,111,116,78,111,100,101,73,110,100,101,120,0,109,95,115,117,98, +116,114,101,101,83,105,122,101,0,109,95,113,117,97,110,116,105,122,101,100, +65,97,98,98,77,105,110,91,51,93,0,109,95,113,117,97,110,116,105,122, +101,100,65,97,98,98,77,97,120,91,51,93,0,109,95,97,97,98,98,77, +105,110,79,114,103,0,109,95,97,97,98,98,77,97,120,79,114,103,0,109, +95,101,115,99,97,112,101,73,110,100,101,120,0,109,95,115,117,98,80,97, +114,116,0,109,95,116,114,105,97,110,103,108,101,73,110,100,101,120,0,109, +95,112,97,100,91,52,93,0,109,95,101,115,99,97,112,101,73,110,100,101, +120,79,114,84,114,105,97,110,103,108,101,73,110,100,101,120,0,109,95,98, +118,104,65,97,98,98,77,105,110,0,109,95,98,118,104,65,97,98,98,77, +97,120,0,109,95,98,118,104,81,117,97,110,116,105,122,97,116,105,111,110, +0,109,95,99,117,114,78,111,100,101,73,110,100,101,120,0,109,95,117,115, +101,81,117,97,110,116,105,122,97,116,105,111,110,0,109,95,110,117,109,67, +111,110,116,105,103,117,111,117,115,76,101,97,102,78,111,100,101,115,0,109, +95,110,117,109,81,117,97,110,116,105,122,101,100,67,111,110,116,105,103,117, +111,117,115,78,111,100,101,115,0,42,109,95,99,111,110,116,105,103,117,111, +117,115,78,111,100,101,115,80,116,114,0,42,109,95,113,117,97,110,116,105, +122,101,100,67,111,110,116,105,103,117,111,117,115,78,111,100,101,115,80,116, +114,0,42,109,95,115,117,98,84,114,101,101,73,110,102,111,80,116,114,0, +109,95,116,114,97,118,101,114,115,97,108,77,111,100,101,0,109,95,110,117, +109,83,117,98,116,114,101,101,72,101,97,100,101,114,115,0,42,109,95,110, +97,109,101,0,109,95,115,104,97,112,101,84,121,112,101,0,109,95,112,97, +100,100,105,110,103,91,52,93,0,109,95,99,111,108,108,105,115,105,111,110, +83,104,97,112,101,68,97,116,97,0,109,95,108,111,99,97,108,83,99,97, +108,105,110,103,0,109,95,112,108,97,110,101,78,111,114,109,97,108,0,109, +95,112,108,97,110,101,67,111,110,115,116,97,110,116,0,109,95,105,109,112, +108,105,99,105,116,83,104,97,112,101,68,105,109,101,110,115,105,111,110,115, +0,109,95,99,111,108,108,105,115,105,111,110,77,97,114,103,105,110,0,109, +95,112,97,100,100,105,110,103,0,109,95,112,111,115,0,109,95,114,97,100, +105,117,115,0,109,95,99,111,110,118,101,120,73,110,116,101,114,110,97,108, +83,104,97,112,101,68,97,116,97,0,42,109,95,108,111,99,97,108,80,111, +115,105,116,105,111,110,65,114,114,97,121,80,116,114,0,109,95,108,111,99, +97,108,80,111,115,105,116,105,111,110,65,114,114,97,121,83,105,122,101,0, +109,95,118,97,108,117,101,0,109,95,112,97,100,91,50,93,0,109,95,118, +97,108,117,101,115,91,51,93,0,42,109,95,118,101,114,116,105,99,101,115, +51,102,0,42,109,95,118,101,114,116,105,99,101,115,51,100,0,42,109,95, +105,110,100,105,99,101,115,51,50,0,42,109,95,51,105,110,100,105,99,101, +115,49,54,0,42,109,95,105,110,100,105,99,101,115,49,54,0,109,95,110, +117,109,84,114,105,97,110,103,108,101,115,0,109,95,110,117,109,86,101,114, +116,105,99,101,115,0,42,109,95,109,101,115,104,80,97,114,116,115,80,116, +114,0,109,95,115,99,97,108,105,110,103,0,109,95,110,117,109,77,101,115, +104,80,97,114,116,115,0,109,95,109,101,115,104,73,110,116,101,114,102,97, +99,101,0,42,109,95,113,117,97,110,116,105,122,101,100,70,108,111,97,116, +66,118,104,0,42,109,95,113,117,97,110,116,105,122,101,100,68,111,117,98, +108,101,66,118,104,0,42,109,95,116,114,105,97,110,103,108,101,73,110,102, +111,77,97,112,0,109,95,112,97,100,51,91,52,93,0,109,95,116,114,97, +110,115,102,111,114,109,0,42,109,95,99,104,105,108,100,83,104,97,112,101, +0,109,95,99,104,105,108,100,83,104,97,112,101,84,121,112,101,0,109,95, +99,104,105,108,100,77,97,114,103,105,110,0,42,109,95,99,104,105,108,100, +83,104,97,112,101,80,116,114,0,109,95,110,117,109,67,104,105,108,100,83, +104,97,112,101,115,0,109,95,117,112,65,120,105,115,0,109,95,102,108,97, +103,115,0,109,95,101,100,103,101,86,48,86,49,65,110,103,108,101,0,109, +95,101,100,103,101,86,49,86,50,65,110,103,108,101,0,109,95,101,100,103, +101,86,50,86,48,65,110,103,108,101,0,42,109,95,104,97,115,104,84,97, +98,108,101,80,116,114,0,42,109,95,110,101,120,116,80,116,114,0,42,109, +95,118,97,108,117,101,65,114,114,97,121,80,116,114,0,42,109,95,107,101, +121,65,114,114,97,121,80,116,114,0,109,95,99,111,110,118,101,120,69,112, +115,105,108,111,110,0,109,95,112,108,97,110,97,114,69,112,115,105,108,111, +110,0,109,95,101,113,117,97,108,86,101,114,116,101,120,84,104,114,101,115, +104,111,108,100,0,109,95,101,100,103,101,68,105,115,116,97,110,99,101,84, +104,114,101,115,104,111,108,100,0,109,95,122,101,114,111,65,114,101,97,84, +104,114,101,115,104,111,108,100,0,109,95,110,101,120,116,83,105,122,101,0, +109,95,104,97,115,104,84,97,98,108,101,83,105,122,101,0,109,95,110,117, +109,86,97,108,117,101,115,0,109,95,110,117,109,75,101,121,115,0,109,95, +103,105,109,112,97,99,116,83,117,98,84,121,112,101,0,42,109,95,117,110, +115,99,97,108,101,100,80,111,105,110,116,115,70,108,111,97,116,80,116,114, +0,42,109,95,117,110,115,99,97,108,101,100,80,111,105,110,116,115,68,111, +117,98,108,101,80,116,114,0,109,95,110,117,109,85,110,115,99,97,108,101, +100,80,111,105,110,116,115,0,109,95,112,97,100,100,105,110,103,51,91,52, +93,0,42,109,95,98,114,111,97,100,112,104,97,115,101,72,97,110,100,108, +101,0,42,109,95,99,111,108,108,105,115,105,111,110,83,104,97,112,101,0, +42,109,95,114,111,111,116,67,111,108,108,105,115,105,111,110,83,104,97,112, +101,0,109,95,119,111,114,108,100,84,114,97,110,115,102,111,114,109,0,109, +95,105,110,116,101,114,112,111,108,97,116,105,111,110,87,111,114,108,100,84, +114,97,110,115,102,111,114,109,0,109,95,105,110,116,101,114,112,111,108,97, +116,105,111,110,76,105,110,101,97,114,86,101,108,111,99,105,116,121,0,109, +95,105,110,116,101,114,112,111,108,97,116,105,111,110,65,110,103,117,108,97, +114,86,101,108,111,99,105,116,121,0,109,95,97,110,105,115,111,116,114,111, +112,105,99,70,114,105,99,116,105,111,110,0,109,95,99,111,110,116,97,99, +116,80,114,111,99,101,115,115,105,110,103,84,104,114,101,115,104,111,108,100, +0,109,95,100,101,97,99,116,105,118,97,116,105,111,110,84,105,109,101,0, +109,95,102,114,105,99,116,105,111,110,0,109,95,114,101,115,116,105,116,117, +116,105,111,110,0,109,95,104,105,116,70,114,97,99,116,105,111,110,0,109, +95,99,99,100,83,119,101,112,116,83,112,104,101,114,101,82,97,100,105,117, +115,0,109,95,99,99,100,77,111,116,105,111,110,84,104,114,101,115,104,111, +108,100,0,109,95,104,97,115,65,110,105,115,111,116,114,111,112,105,99,70, +114,105,99,116,105,111,110,0,109,95,99,111,108,108,105,115,105,111,110,70, +108,97,103,115,0,109,95,105,115,108,97,110,100,84,97,103,49,0,109,95, +99,111,109,112,97,110,105,111,110,73,100,0,109,95,97,99,116,105,118,97, +116,105,111,110,83,116,97,116,101,49,0,109,95,105,110,116,101,114,110,97, +108,84,121,112,101,0,109,95,99,104,101,99,107,67,111,108,108,105,100,101, +87,105,116,104,0,109,95,99,111,108,108,105,115,105,111,110,79,98,106,101, +99,116,68,97,116,97,0,109,95,105,110,118,73,110,101,114,116,105,97,84, +101,110,115,111,114,87,111,114,108,100,0,109,95,108,105,110,101,97,114,86, +101,108,111,99,105,116,121,0,109,95,97,110,103,117,108,97,114,86,101,108, +111,99,105,116,121,0,109,95,97,110,103,117,108,97,114,70,97,99,116,111, +114,0,109,95,108,105,110,101,97,114,70,97,99,116,111,114,0,109,95,103, +114,97,118,105,116,121,0,109,95,103,114,97,118,105,116,121,95,97,99,99, +101,108,101,114,97,116,105,111,110,0,109,95,105,110,118,73,110,101,114,116, +105,97,76,111,99,97,108,0,109,95,116,111,116,97,108,70,111,114,99,101, +0,109,95,116,111,116,97,108,84,111,114,113,117,101,0,109,95,105,110,118, +101,114,115,101,77,97,115,115,0,109,95,108,105,110,101,97,114,68,97,109, +112,105,110,103,0,109,95,97,110,103,117,108,97,114,68,97,109,112,105,110, +103,0,109,95,97,100,100,105,116,105,111,110,97,108,68,97,109,112,105,110, +103,70,97,99,116,111,114,0,109,95,97,100,100,105,116,105,111,110,97,108, +76,105,110,101,97,114,68,97,109,112,105,110,103,84,104,114,101,115,104,111, +108,100,83,113,114,0,109,95,97,100,100,105,116,105,111,110,97,108,65,110, +103,117,108,97,114,68,97,109,112,105,110,103,84,104,114,101,115,104,111,108, +100,83,113,114,0,109,95,97,100,100,105,116,105,111,110,97,108,65,110,103, +117,108,97,114,68,97,109,112,105,110,103,70,97,99,116,111,114,0,109,95, +108,105,110,101,97,114,83,108,101,101,112,105,110,103,84,104,114,101,115,104, +111,108,100,0,109,95,97,110,103,117,108,97,114,83,108,101,101,112,105,110, +103,84,104,114,101,115,104,111,108,100,0,109,95,97,100,100,105,116,105,111, +110,97,108,68,97,109,112,105,110,103,0,109,95,110,117,109,67,111,110,115, +116,114,97,105,110,116,82,111,119,115,0,110,117,98,0,42,109,95,114,98, +65,0,42,109,95,114,98,66,0,109,95,111,98,106,101,99,116,84,121,112, +101,0,109,95,117,115,101,114,67,111,110,115,116,114,97,105,110,116,84,121, +112,101,0,109,95,117,115,101,114,67,111,110,115,116,114,97,105,110,116,73, +100,0,109,95,110,101,101,100,115,70,101,101,100,98,97,99,107,0,109,95, +97,112,112,108,105,101,100,73,109,112,117,108,115,101,0,109,95,100,98,103, +68,114,97,119,83,105,122,101,0,109,95,100,105,115,97,98,108,101,67,111, +108,108,105,115,105,111,110,115,66,101,116,119,101,101,110,76,105,110,107,101, +100,66,111,100,105,101,115,0,109,95,112,97,100,52,91,52,93,0,109,95, +116,121,112,101,67,111,110,115,116,114,97,105,110,116,68,97,116,97,0,109, +95,112,105,118,111,116,73,110,65,0,109,95,112,105,118,111,116,73,110,66, +0,109,95,114,98,65,70,114,97,109,101,0,109,95,114,98,66,70,114,97, +109,101,0,109,95,117,115,101,82,101,102,101,114,101,110,99,101,70,114,97, +109,101,65,0,109,95,97,110,103,117,108,97,114,79,110,108,121,0,109,95, +101,110,97,98,108,101,65,110,103,117,108,97,114,77,111,116,111,114,0,109, +95,109,111,116,111,114,84,97,114,103,101,116,86,101,108,111,99,105,116,121, +0,109,95,109,97,120,77,111,116,111,114,73,109,112,117,108,115,101,0,109, +95,108,111,119,101,114,76,105,109,105,116,0,109,95,117,112,112,101,114,76, +105,109,105,116,0,109,95,108,105,109,105,116,83,111,102,116,110,101,115,115, +0,109,95,98,105,97,115,70,97,99,116,111,114,0,109,95,114,101,108,97, +120,97,116,105,111,110,70,97,99,116,111,114,0,109,95,115,119,105,110,103, +83,112,97,110,49,0,109,95,115,119,105,110,103,83,112,97,110,50,0,109, +95,116,119,105,115,116,83,112,97,110,0,109,95,100,97,109,112,105,110,103, +0,109,95,108,105,110,101,97,114,85,112,112,101,114,76,105,109,105,116,0, +109,95,108,105,110,101,97,114,76,111,119,101,114,76,105,109,105,116,0,109, +95,97,110,103,117,108,97,114,85,112,112,101,114,76,105,109,105,116,0,109, +95,97,110,103,117,108,97,114,76,111,119,101,114,76,105,109,105,116,0,109, +95,117,115,101,76,105,110,101,97,114,82,101,102,101,114,101,110,99,101,70, +114,97,109,101,65,0,109,95,117,115,101,79,102,102,115,101,116,70,111,114, +67,111,110,115,116,114,97,105,110,116,70,114,97,109,101,0,109,95,108,105, +110,101,97,114,83,116,105,102,102,110,101,115,115,0,109,95,97,110,103,117, +108,97,114,83,116,105,102,102,110,101,115,115,0,109,95,118,111,108,117,109, +101,83,116,105,102,102,110,101,115,115,0,42,109,95,109,97,116,101,114,105, +97,108,0,109,95,112,111,115,105,116,105,111,110,0,109,95,112,114,101,118, +105,111,117,115,80,111,115,105,116,105,111,110,0,109,95,118,101,108,111,99, +105,116,121,0,109,95,97,99,99,117,109,117,108,97,116,101,100,70,111,114, +99,101,0,109,95,110,111,114,109,97,108,0,109,95,97,114,101,97,0,109, +95,97,116,116,97,99,104,0,109,95,112,97,100,0,109,95,110,111,100,101, +73,110,100,105,99,101,115,91,50,93,0,109,95,99,51,0,109,95,114,101, +115,116,76,101,110,103,116,104,0,109,95,98,98,101,110,100,105,110,103,0, +109,95,99,48,0,109,95,99,49,0,109,95,99,50,0,109,95,110,111,100, +101,73,110,100,105,99,101,115,91,51,93,0,109,95,114,101,115,116,65,114, +101,97,0,109,95,99,48,91,52,93,0,109,95,110,111,100,101,73,110,100, +105,99,101,115,91,52,93,0,109,95,114,101,115,116,86,111,108,117,109,101, +0,109,95,108,111,99,97,108,70,114,97,109,101,0,42,109,95,114,105,103, +105,100,66,111,100,121,0,109,95,110,111,100,101,73,110,100,101,120,0,109, +95,97,101,114,111,77,111,100,101,108,0,109,95,98,97,117,109,103,97,114, +116,101,0,109,95,100,114,97,103,0,109,95,108,105,102,116,0,109,95,112, +114,101,115,115,117,114,101,0,109,95,118,111,108,117,109,101,0,109,95,100, +121,110,97,109,105,99,70,114,105,99,116,105,111,110,0,109,95,112,111,115, +101,77,97,116,99,104,0,109,95,114,105,103,105,100,67,111,110,116,97,99, +116,72,97,114,100,110,101,115,115,0,109,95,107,105,110,101,116,105,99,67, +111,110,116,97,99,116,72,97,114,100,110,101,115,115,0,109,95,115,111,102, +116,67,111,110,116,97,99,116,72,97,114,100,110,101,115,115,0,109,95,97, +110,99,104,111,114,72,97,114,100,110,101,115,115,0,109,95,115,111,102,116, +82,105,103,105,100,67,108,117,115,116,101,114,72,97,114,100,110,101,115,115, +0,109,95,115,111,102,116,75,105,110,101,116,105,99,67,108,117,115,116,101, +114,72,97,114,100,110,101,115,115,0,109,95,115,111,102,116,83,111,102,116, +67,108,117,115,116,101,114,72,97,114,100,110,101,115,115,0,109,95,115,111, +102,116,82,105,103,105,100,67,108,117,115,116,101,114,73,109,112,117,108,115, +101,83,112,108,105,116,0,109,95,115,111,102,116,75,105,110,101,116,105,99, +67,108,117,115,116,101,114,73,109,112,117,108,115,101,83,112,108,105,116,0, +109,95,115,111,102,116,83,111,102,116,67,108,117,115,116,101,114,73,109,112, +117,108,115,101,83,112,108,105,116,0,109,95,109,97,120,86,111,108,117,109, +101,0,109,95,116,105,109,101,83,99,97,108,101,0,109,95,118,101,108,111, +99,105,116,121,73,116,101,114,97,116,105,111,110,115,0,109,95,112,111,115, +105,116,105,111,110,73,116,101,114,97,116,105,111,110,115,0,109,95,100,114, +105,102,116,73,116,101,114,97,116,105,111,110,115,0,109,95,99,108,117,115, +116,101,114,73,116,101,114,97,116,105,111,110,115,0,109,95,114,111,116,0, +109,95,115,99,97,108,101,0,109,95,97,113,113,0,109,95,112,111,115,105, +116,105,111,110,115,0,109,95,99,111,109,0,109,95,98,118,111,108,117,109, +101,0,109,95,98,102,114,97,109,101,0,109,95,110,117,109,80,111,115,105, +116,105,111,110,115,0,42,109,95,119,101,105,103,104,116,115,0,109,95,110, +117,109,87,101,105,103,116,115,0,42,109,95,112,111,115,101,0,42,42,109, +95,109,97,116,101,114,105,97,108,115,0,42,109,95,110,111,100,101,115,0, +42,109,95,108,105,110,107,115,0,42,109,95,102,97,99,101,115,0,42,109, +95,116,101,116,114,97,104,101,100,114,97,0,42,109,95,97,110,99,104,111, +114,115,0,109,95,110,117,109,77,97,116,101,114,105,97,108,115,0,109,95, +110,117,109,78,111,100,101,115,0,109,95,110,117,109,76,105,110,107,115,0, +109,95,110,117,109,70,97,99,101,115,0,109,95,110,117,109,84,101,116,114, +97,104,101,100,114,97,0,109,95,110,117,109,65,110,99,104,111,114,115,0, +109,95,99,111,110,102,105,103,0,0,0,0,84,89,80,69,67,0,0,0, +99,104,97,114,0,117,99,104,97,114,0,115,104,111,114,116,0,117,115,104, +111,114,116,0,105,110,116,0,108,111,110,103,0,117,108,111,110,103,0,102, +108,111,97,116,0,100,111,117,98,108,101,0,118,111,105,100,0,80,111,105, +110,116,101,114,65,114,114,97,121,0,98,116,80,104,121,115,105,99,115,83, +121,115,116,101,109,0,76,105,115,116,66,97,115,101,0,98,116,86,101,99, +116,111,114,51,70,108,111,97,116,68,97,116,97,0,98,116,86,101,99,116, +111,114,51,68,111,117,98,108,101,68,97,116,97,0,98,116,77,97,116,114, +105,120,51,120,51,70,108,111,97,116,68,97,116,97,0,98,116,77,97,116, +114,105,120,51,120,51,68,111,117,98,108,101,68,97,116,97,0,98,116,84, +114,97,110,115,102,111,114,109,70,108,111,97,116,68,97,116,97,0,98,116, +84,114,97,110,115,102,111,114,109,68,111,117,98,108,101,68,97,116,97,0, +98,116,66,118,104,83,117,98,116,114,101,101,73,110,102,111,68,97,116,97, +0,98,116,79,112,116,105,109,105,122,101,100,66,118,104,78,111,100,101,70, +108,111,97,116,68,97,116,97,0,98,116,79,112,116,105,109,105,122,101,100, +66,118,104,78,111,100,101,68,111,117,98,108,101,68,97,116,97,0,98,116, +81,117,97,110,116,105,122,101,100,66,118,104,78,111,100,101,68,97,116,97, +0,98,116,81,117,97,110,116,105,122,101,100,66,118,104,70,108,111,97,116, +68,97,116,97,0,98,116,81,117,97,110,116,105,122,101,100,66,118,104,68, +111,117,98,108,101,68,97,116,97,0,98,116,67,111,108,108,105,115,105,111, +110,83,104,97,112,101,68,97,116,97,0,98,116,83,116,97,116,105,99,80, +108,97,110,101,83,104,97,112,101,68,97,116,97,0,98,116,67,111,110,118, +101,120,73,110,116,101,114,110,97,108,83,104,97,112,101,68,97,116,97,0, +98,116,80,111,115,105,116,105,111,110,65,110,100,82,97,100,105,117,115,0, +98,116,77,117,108,116,105,83,112,104,101,114,101,83,104,97,112,101,68,97, +116,97,0,98,116,73,110,116,73,110,100,101,120,68,97,116,97,0,98,116, +83,104,111,114,116,73,110,116,73,110,100,101,120,68,97,116,97,0,98,116, +83,104,111,114,116,73,110,116,73,110,100,101,120,84,114,105,112,108,101,116, +68,97,116,97,0,98,116,77,101,115,104,80,97,114,116,68,97,116,97,0, +98,116,83,116,114,105,100,105,110,103,77,101,115,104,73,110,116,101,114,102, +97,99,101,68,97,116,97,0,98,116,84,114,105,97,110,103,108,101,77,101, +115,104,83,104,97,112,101,68,97,116,97,0,98,116,84,114,105,97,110,103, +108,101,73,110,102,111,77,97,112,68,97,116,97,0,98,116,67,111,109,112, +111,117,110,100,83,104,97,112,101,67,104,105,108,100,68,97,116,97,0,98, +116,67,111,109,112,111,117,110,100,83,104,97,112,101,68,97,116,97,0,98, +116,67,121,108,105,110,100,101,114,83,104,97,112,101,68,97,116,97,0,98, +116,67,97,112,115,117,108,101,83,104,97,112,101,68,97,116,97,0,98,116, +84,114,105,97,110,103,108,101,73,110,102,111,68,97,116,97,0,98,116,71, +73,109,112,97,99,116,77,101,115,104,83,104,97,112,101,68,97,116,97,0, +98,116,67,111,110,118,101,120,72,117,108,108,83,104,97,112,101,68,97,116, +97,0,98,116,67,111,108,108,105,115,105,111,110,79,98,106,101,99,116,68, +111,117,98,108,101,68,97,116,97,0,98,116,67,111,108,108,105,115,105,111, +110,79,98,106,101,99,116,70,108,111,97,116,68,97,116,97,0,98,116,82, +105,103,105,100,66,111,100,121,70,108,111,97,116,68,97,116,97,0,98,116, +82,105,103,105,100,66,111,100,121,68,111,117,98,108,101,68,97,116,97,0, +98,116,67,111,110,115,116,114,97,105,110,116,73,110,102,111,49,0,98,116, +84,121,112,101,100,67,111,110,115,116,114,97,105,110,116,68,97,116,97,0, +98,116,82,105,103,105,100,66,111,100,121,68,97,116,97,0,98,116,80,111, +105,110,116,50,80,111,105,110,116,67,111,110,115,116,114,97,105,110,116,70, +108,111,97,116,68,97,116,97,0,98,116,80,111,105,110,116,50,80,111,105, +110,116,67,111,110,115,116,114,97,105,110,116,68,111,117,98,108,101,68,97, +116,97,0,98,116,72,105,110,103,101,67,111,110,115,116,114,97,105,110,116, +68,111,117,98,108,101,68,97,116,97,0,98,116,72,105,110,103,101,67,111, +110,115,116,114,97,105,110,116,70,108,111,97,116,68,97,116,97,0,98,116, +67,111,110,101,84,119,105,115,116,67,111,110,115,116,114,97,105,110,116,68, +97,116,97,0,98,116,71,101,110,101,114,105,99,54,68,111,102,67,111,110, +115,116,114,97,105,110,116,68,97,116,97,0,98,116,83,108,105,100,101,114, +67,111,110,115,116,114,97,105,110,116,68,97,116,97,0,83,111,102,116,66, +111,100,121,77,97,116,101,114,105,97,108,68,97,116,97,0,83,111,102,116, +66,111,100,121,78,111,100,101,68,97,116,97,0,83,111,102,116,66,111,100, +121,76,105,110,107,68,97,116,97,0,83,111,102,116,66,111,100,121,70,97, +99,101,68,97,116,97,0,83,111,102,116,66,111,100,121,84,101,116,114,97, +68,97,116,97,0,83,111,102,116,82,105,103,105,100,65,110,99,104,111,114, +68,97,116,97,0,83,111,102,116,66,111,100,121,67,111,110,102,105,103,68, +97,116,97,0,83,111,102,116,66,111,100,121,80,111,115,101,68,97,116,97, +0,98,116,83,111,102,116,66,111,100,121,70,108,111,97,116,68,97,116,97, +0,0,0,0,84,76,69,78,1,0,1,0,2,0,2,0,4,0,4,0, +4,0,4,0,8,0,0,0,16,0,48,0,16,0,16,0,32,0,48,0, +96,0,64,0,-128,0,20,0,48,0,80,0,16,0,96,0,-112,0,16,0, +56,0,56,0,20,0,72,0,4,0,4,0,8,0,48,0,32,0,80,0, +72,0,80,0,32,0,64,0,64,0,16,0,72,0,80,0,-40,1,8,1, +-16,1,-88,3,8,0,56,0,0,0,88,0,120,0,96,1,-32,0,-40,0, +0,1,-48,0,16,0,104,0,56,0,40,0,104,0,96,0,104,0,-48,0, +-64,1,0,0,83,84,82,67,56,0,0,0,10,0,3,0,4,0,0,0, +4,0,1,0,9,0,2,0,11,0,3,0,10,0,3,0,10,0,4,0, +10,0,5,0,12,0,2,0,9,0,6,0,9,0,7,0,13,0,1,0, +7,0,8,0,14,0,1,0,8,0,8,0,15,0,1,0,13,0,9,0, +16,0,1,0,14,0,9,0,17,0,2,0,15,0,10,0,13,0,11,0, +18,0,2,0,16,0,10,0,14,0,11,0,19,0,4,0,4,0,12,0, +4,0,13,0,2,0,14,0,2,0,15,0,20,0,6,0,13,0,16,0, +13,0,17,0,4,0,18,0,4,0,19,0,4,0,20,0,0,0,21,0, +21,0,6,0,14,0,16,0,14,0,17,0,4,0,18,0,4,0,19,0, +4,0,20,0,0,0,21,0,22,0,3,0,2,0,14,0,2,0,15,0, +4,0,22,0,23,0,12,0,13,0,23,0,13,0,24,0,13,0,25,0, +4,0,26,0,4,0,27,0,4,0,28,0,4,0,29,0,20,0,30,0, +22,0,31,0,19,0,32,0,4,0,33,0,4,0,34,0,24,0,12,0, +14,0,23,0,14,0,24,0,14,0,25,0,4,0,26,0,4,0,27,0, +4,0,28,0,4,0,29,0,21,0,30,0,22,0,31,0,4,0,33,0, +4,0,34,0,19,0,32,0,25,0,3,0,0,0,35,0,4,0,36,0, +0,0,37,0,26,0,5,0,25,0,38,0,13,0,39,0,13,0,40,0, +7,0,41,0,0,0,21,0,27,0,5,0,25,0,38,0,13,0,39,0, +13,0,42,0,7,0,43,0,4,0,44,0,28,0,2,0,13,0,45,0, +7,0,46,0,29,0,4,0,27,0,47,0,28,0,48,0,4,0,49,0, +0,0,37,0,30,0,1,0,4,0,50,0,31,0,2,0,2,0,50,0, +0,0,51,0,32,0,2,0,2,0,52,0,0,0,51,0,33,0,7,0, +13,0,53,0,14,0,54,0,30,0,55,0,32,0,56,0,31,0,57,0, +4,0,58,0,4,0,59,0,34,0,4,0,33,0,60,0,13,0,61,0, +4,0,62,0,0,0,37,0,35,0,7,0,25,0,38,0,34,0,63,0, +23,0,64,0,24,0,65,0,36,0,66,0,7,0,43,0,0,0,67,0, +37,0,4,0,17,0,68,0,25,0,69,0,4,0,70,0,7,0,71,0, +38,0,4,0,25,0,38,0,37,0,72,0,4,0,73,0,7,0,43,0, +39,0,3,0,27,0,47,0,4,0,74,0,0,0,37,0,40,0,3,0, +27,0,47,0,4,0,74,0,0,0,37,0,41,0,4,0,4,0,75,0, +7,0,76,0,7,0,77,0,7,0,78,0,36,0,14,0,4,0,79,0, +4,0,80,0,41,0,81,0,4,0,82,0,7,0,83,0,7,0,84,0, +7,0,85,0,7,0,86,0,7,0,87,0,4,0,88,0,4,0,89,0, +4,0,90,0,4,0,91,0,0,0,37,0,42,0,5,0,25,0,38,0, +34,0,63,0,13,0,39,0,7,0,43,0,4,0,92,0,43,0,5,0, +27,0,47,0,13,0,93,0,14,0,94,0,4,0,95,0,0,0,96,0, +44,0,24,0,9,0,97,0,9,0,98,0,25,0,99,0,0,0,35,0, +18,0,100,0,18,0,101,0,14,0,102,0,14,0,103,0,14,0,104,0, +8,0,105,0,8,0,106,0,8,0,107,0,8,0,108,0,8,0,109,0, +8,0,110,0,8,0,111,0,4,0,112,0,4,0,113,0,4,0,114,0, +4,0,115,0,4,0,116,0,4,0,117,0,4,0,118,0,0,0,37,0, +45,0,23,0,9,0,97,0,9,0,98,0,25,0,99,0,0,0,35,0, +17,0,100,0,17,0,101,0,13,0,102,0,13,0,103,0,13,0,104,0, +7,0,105,0,7,0,106,0,7,0,107,0,7,0,108,0,7,0,109,0, +7,0,110,0,7,0,111,0,4,0,112,0,4,0,113,0,4,0,114,0, +4,0,115,0,4,0,116,0,4,0,117,0,4,0,118,0,46,0,21,0, +45,0,119,0,15,0,120,0,13,0,121,0,13,0,122,0,13,0,123,0, +13,0,124,0,13,0,125,0,13,0,126,0,13,0,127,0,13,0,-128,0, +13,0,-127,0,7,0,-126,0,7,0,-125,0,7,0,-124,0,7,0,-123,0, +7,0,-122,0,7,0,-121,0,7,0,-120,0,7,0,-119,0,7,0,-118,0, +4,0,-117,0,47,0,22,0,44,0,119,0,16,0,120,0,14,0,121,0, +14,0,122,0,14,0,123,0,14,0,124,0,14,0,125,0,14,0,126,0, +14,0,127,0,14,0,-128,0,14,0,-127,0,8,0,-126,0,8,0,-125,0, +8,0,-124,0,8,0,-123,0,8,0,-122,0,8,0,-121,0,8,0,-120,0, +8,0,-119,0,8,0,-118,0,4,0,-117,0,0,0,37,0,48,0,2,0, +4,0,-116,0,4,0,-115,0,49,0,11,0,50,0,-114,0,50,0,-113,0, +0,0,35,0,4,0,-112,0,4,0,-111,0,4,0,-110,0,4,0,-109,0, +7,0,-108,0,7,0,-107,0,4,0,-106,0,0,0,-105,0,51,0,3,0, +49,0,-104,0,13,0,-103,0,13,0,-102,0,52,0,3,0,49,0,-104,0, +14,0,-103,0,14,0,-102,0,53,0,13,0,49,0,-104,0,18,0,-101,0, +18,0,-100,0,4,0,-99,0,4,0,-98,0,4,0,-97,0,7,0,-96,0, +7,0,-95,0,7,0,-94,0,7,0,-93,0,7,0,-92,0,7,0,-91,0, +7,0,-90,0,54,0,13,0,49,0,-104,0,17,0,-101,0,17,0,-100,0, +4,0,-99,0,4,0,-98,0,4,0,-97,0,7,0,-96,0,7,0,-95,0, +7,0,-94,0,7,0,-93,0,7,0,-92,0,7,0,-91,0,7,0,-90,0, +55,0,11,0,49,0,-104,0,17,0,-101,0,17,0,-100,0,7,0,-89,0, +7,0,-88,0,7,0,-87,0,7,0,-92,0,7,0,-91,0,7,0,-90,0, +7,0,-86,0,0,0,21,0,56,0,9,0,49,0,-104,0,17,0,-101,0, +17,0,-100,0,13,0,-85,0,13,0,-84,0,13,0,-83,0,13,0,-82,0, +4,0,-81,0,4,0,-80,0,57,0,9,0,49,0,-104,0,17,0,-101,0, +17,0,-100,0,7,0,-85,0,7,0,-84,0,7,0,-83,0,7,0,-82,0, +4,0,-81,0,4,0,-80,0,58,0,4,0,7,0,-79,0,7,0,-78,0, +7,0,-77,0,4,0,75,0,59,0,10,0,58,0,-76,0,13,0,-75,0, +13,0,-74,0,13,0,-73,0,13,0,-72,0,13,0,-71,0,7,0,-126,0, +7,0,-70,0,4,0,-69,0,4,0,-68,0,60,0,9,0,58,0,-76,0, +4,0,-67,0,13,0,-66,0,7,0,-65,0,4,0,-64,0,7,0,-63,0, +7,0,-62,0,7,0,-61,0,4,0,-68,0,61,0,4,0,13,0,-71,0, +58,0,-76,0,4,0,-60,0,7,0,-59,0,62,0,7,0,13,0,-58,0, +58,0,-76,0,4,0,-57,0,7,0,-56,0,7,0,-62,0,7,0,-61,0, +4,0,-68,0,63,0,6,0,15,0,-63,0,13,0,-62,0,13,0,-55,0, +50,0,-54,0,4,0,-53,0,7,0,-61,0,64,0,26,0,4,0,-52,0, +7,0,-51,0,7,0,-86,0,7,0,-50,0,7,0,-49,0,7,0,-48,0, +7,0,-47,0,7,0,-46,0,7,0,-45,0,7,0,-44,0,7,0,-43,0, +7,0,-42,0,7,0,-41,0,7,0,-40,0,7,0,-39,0,7,0,-38,0, +7,0,-37,0,7,0,-36,0,7,0,-35,0,7,0,-34,0,7,0,-33,0, +4,0,-32,0,4,0,-31,0,4,0,-30,0,4,0,-29,0,4,0,113,0, +65,0,12,0,15,0,-28,0,15,0,-27,0,15,0,-26,0,13,0,-25,0, +13,0,-24,0,4,0,-23,0,4,0,-22,0,7,0,-56,0,4,0,-21,0, +7,0,-20,0,4,0,-19,0,4,0,-68,0,66,0,15,0,45,0,119,0, +65,0,-18,0,58,0,-17,0,59,0,-16,0,60,0,-15,0,61,0,-14,0, +62,0,-13,0,63,0,-12,0,4,0,-11,0,4,0,-10,0,4,0,-9,0, +4,0,-8,0,4,0,-7,0,4,0,-6,0,64,0,-5,0,}; +int sBulletDNAlen64= sizeof(sBulletDNAstr64); diff --git a/src/LinearMath/btSerializer.h b/src/LinearMath/btSerializer.h index 855313830..a15363145 100644 --- a/src/LinearMath/btSerializer.h +++ b/src/LinearMath/btSerializer.h @@ -111,6 +111,7 @@ public: # define MAKE_ID(a,b,c,d) ( (int)(d)<<24 | (int)(c)<<16 | (b)<<8 | (a) ) #endif +#define BT_SOFTBODY_CODE MAKE_ID('S','B','D','Y') #define BT_COLLISIONOBJECT_CODE MAKE_ID('C','O','B','J') #define BT_RIGIDBODY_CODE MAKE_ID('R','B','D','Y') #define BT_CONSTRAINT_CODE MAKE_ID('C','O','N','S') @@ -119,10 +120,11 @@ public: #define BT_TRIANLGE_INFO_MAP MAKE_ID('T','M','A','P') #define BT_SHAPE_CODE MAKE_ID('S','H','A','P') #define BT_ARRAY_CODE MAKE_ID('A','R','A','Y') +#define BT_SBMATERIAL_CODE MAKE_ID('S','B','M','T') +#define BT_SBNODE_CODE MAKE_ID('S','B','N','D') #define BT_DNA_CODE MAKE_ID('D','N','A','1') - struct btPointerUid { union @@ -453,7 +455,7 @@ public: m_buffer[9] = '2'; m_buffer[10] = '7'; - m_buffer[11] = '7'; + m_buffer[11] = '8'; }