more work on Bullet serialization (added support for btConvexHullSupport)

This commit is contained in:
erwin.coumans
2010-01-23 00:58:47 +00:00
parent 0f707603f1
commit 5378cf4c8a
16 changed files with 329 additions and 121 deletions

View File

@@ -1,4 +1,4 @@
SUBDIRS( OpenGL BasicDemo Benchmarks Box2dDemo SerializeDemo )
SUBDIRS( OpenGL BasicDemo Benchmarks Box2dDemo ConvexDecompositionDemo SerializeDemo )
#todo: re-enable the rest of the demos again

View File

@@ -12,15 +12,36 @@ SET(GLUT_ROOT ${BULLET_PHYSICS_SOURCE_DIR}/Glut)
########################################################
INCLUDE_DIRECTORIES(
${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL ${BULLET_PHYSICS_SOURCE_DIR}/Extras/ConvexDecomposition
${BULLET_PHYSICS_SOURCE_DIR}/src
${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL
${BULLET_PHYSICS_SOURCE_DIR}/Extras/ConvexDecomposition
${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/BulletFileLoader
)
IF (USE_GLUT)
LINK_LIBRARIES(
OpenGLSupport BulletDynamics BulletCollision LinearMath BulletFileLoader ConvexDecomposition ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY}
)
ADD_EXECUTABLE(AppConvexDecompositionDemo
main.cpp
ConvexDecompositionDemo.cpp
ConvexDecompositionDemo.h
)
ELSE (USE_GLUT)
LINK_LIBRARIES(
OpenGLSupport BulletDynamics BulletCollision LinearMath ConvexDecomposition ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY}
)
OpenGLSupport BulletDynamics BulletCollision LinearMath BulletFileLoader ConvexDecomposition ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY}
)
ADD_EXECUTABLE(AppConvexDecompositionDemo
main.cpp
ConvexDecompositionDemo.cpp
)
ADD_EXECUTABLE(AppConvexDecompositionDemo
WIN32
../OpenGL/Win32AppMain.cpp
ConvexDecompositionDemo.cpp
ConvexDecompositionDemo.h
Win32ConvexDecompositionDemo.cpp
)
ENDIF (USE_GLUT)

View File

@@ -23,6 +23,14 @@ subject to the following restrictions:
#include "LinearMath/btGeometryUtil.h"
#include "BulletCollision/CollisionShapes/btShapeHull.h"
#define TEST_SERIALIZATION
#ifdef TEST_SERIALIZATION
#include "LinearMath/btSerializer.h"
#include "btBulletFile.h"
#include "btBulletFileLoader.h"
#endif
//#define USE_PARALLEL_DISPATCHER 1
#ifdef USE_PARALLEL_DISPATCHER
#include "../../Extras/BulletMultiThreaded/SpuGatheringCollisionDispatcher.h"
@@ -91,27 +99,9 @@ bool MyContactCallback (
}
void ConvexDecompositionDemo::initPhysics(const char* filename)
void ConvexDecompositionDemo::setupEmptyDynamicsWorld()
{
gContactAddedCallback = &MyContactCallback;
setTexturing(true);
setShadows(true);
setCameraDistance(26.f);
ConvexDecomposition::WavefrontObj wo;
tcount = wo.loadObj(filename);
if (!tcount)
{
//when running this app from visual studio, the default starting folder is different, so make a second attempt...
tcount = wo.loadObj("../../file.obj");
}
m_collisionConfiguration = new btDefaultCollisionConfiguration();
m_collisionConfiguration = new btDefaultCollisionConfiguration();
#ifdef USE_PARALLEL_DISPATCHER
#ifdef USE_WIN32_THREADING
@@ -151,6 +141,30 @@ void ConvexDecompositionDemo::initPhysics(const char* filename)
m_dynamicsWorld->getDispatchInfo().m_enableSPU = true;
#endif //USE_PARALLEL_DISPATCHER
}
void ConvexDecompositionDemo::initPhysics(const char* filename)
{
gContactAddedCallback = &MyContactCallback;
setTexturing(true);
setShadows(true);
setCameraDistance(26.f);
ConvexDecomposition::WavefrontObj wo;
tcount = wo.loadObj(filename);
if (!tcount)
{
//when running this app from visual studio, the default starting folder is different, so make a second attempt...
tcount = wo.loadObj("../../file.obj");
}
setupEmptyDynamicsWorld();
btTransform startTransform;
startTransform.setIdentity();
startTransform.setOrigin(btVector3(0,-4.5,0));
@@ -293,7 +307,7 @@ void ConvexDecompositionDemo::initPhysics(const char* filename)
btConvexHullShape* convexShape = new btConvexHullShape(&(vertices[0].getX()),vertices.size());
#endif
convexShape->setMargin(0.01);
convexShape->setMargin(0.01f);
m_convexShapes.push_back(convexShape);
m_convexCentroids.push_back(centroid);
m_convexDemo->m_collisionShapes.push_back(convexShape);
@@ -371,7 +385,7 @@ void ConvexDecompositionDemo::initPhysics(const char* filename)
btTransform startTransform;
startTransform.setIdentity();
startTransform.setOrigin(btVector3(0,2,0));
startTransform.setOrigin(btVector3(0,2,14));
localCreateRigidBody(mass, startTransform,convexShape);
@@ -438,6 +452,9 @@ void ConvexDecompositionDemo::initPhysics(const char* filename)
trans.setOrigin(centroid);
btConvexHullShape* convexShape = convexDecomposition.m_convexShapes[i];
compound->addChildShape(trans,convexShape);
btRigidBody* body = localCreateRigidBody( 1.0, trans,convexShape);
}
btScalar mass=10.f;
trans.setOrigin(-convexDecompositionObjectOffset);
@@ -464,6 +481,30 @@ void ConvexDecompositionDemo::initPhysics(const char* filename)
}
#ifdef TEST_SERIALIZATION
//test serializing this
int maxSerializeBufferSize = 1024*1024*5;
btDefaultSerializer* serializer = new btDefaultSerializer(maxSerializeBufferSize);
m_dynamicsWorld->serialize(serializer);
FILE* f2 = fopen("testFile.bullet","wb");
fwrite(serializer->getBufferPointer(),serializer->getCurrentBufferSize(),1,f2);
fclose(f2);
exitPhysics();
//now try again from the loaded file
setupEmptyDynamicsWorld();
btBulletFileLoader* fileLoader = new btBulletFileLoader(m_dynamicsWorld);
fileLoader->loadFileFromMemory("testFile.bullet");
#endif //TEST_SERIALIZATION
}
@@ -481,7 +522,7 @@ void ConvexDecompositionDemo::clientMoveAndDisplay()
renderme();
glFlush();
glutSwapBuffers();
swapBuffers();
}
@@ -499,7 +540,7 @@ void ConvexDecompositionDemo::displayCallback(void) {
glFlush();
glutSwapBuffers();
swapBuffers();
}
@@ -532,12 +573,16 @@ void ConvexDecompositionDemo::exitPhysics()
delete shape;
}
m_collisionShapes.clear();
for (i=0;i<m_trimeshes.size();i++)
{
btTriangleMesh* mesh = m_trimeshes[i];
delete mesh;
}
m_trimeshes.clear();
//delete dynamics world
delete m_dynamicsWorld;

View File

@@ -15,7 +15,15 @@ subject to the following restrictions:
#ifndef CONVEX_DECOMPOSITION_DEMO_H
#define CONVEX_DECOMPOSITION_DEMO_H
#ifdef _WINDOWS
#include "Win32DemoApplication.h"
#define PlatformDemoApplication Win32DemoApplication
#else
#include "GlutDemoApplication.h"
#define PlatformDemoApplication GlutDemoApplication
#endif
#include "LinearMath/btAlignedObjectArray.h"
class btBroadphaseInterface;
@@ -28,9 +36,10 @@ class btDefaultCollisionConfiguration;
class btTriangleMesh;
///ConvexDecompositionDemo shows automatic convex decomposition of a concave mesh
class ConvexDecompositionDemo : public GlutDemoApplication
class ConvexDecompositionDemo : public PlatformDemoApplication
{
void setupEmptyDynamicsWorld();
public:

View File

@@ -0,0 +1,25 @@
#ifdef _WINDOWS
/*
Bullet Continuous Collision Detection and Physics Library
Copyright (c) 2003-2010 Erwin Coumans http://bulletphysics.org
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.
*/
#include "ConvexDecompositionDemo.h"
///The 'createDemo' function is called from Bullet/Demos/OpenGL/Win32AppMain.cpp to instantiate this particular demo
DemoApplication* createDemo()
{
return new ConvexDecompositionDemo();
}
#endif

View File

@@ -25,7 +25,6 @@ IF (USE_GLUT)
ADD_EXECUTABLE(AppSerializeDemo
main.cpp
${SERIALIZE_FILES}
SerializeDemo.cpp
SerializeDemo.h
)
@@ -39,7 +38,6 @@ ELSE (USE_GLUT)
WIN32
../OpenGL/Win32AppMain.cpp
Win32SerializeDemo.cpp
${SERIALIZE_FILES}
SerializeDemo.cpp
SerializeDemo.h
)

View File

@@ -29,6 +29,7 @@
#include "bullet_btConvexInternalShapeData.h"
#include "bullet_btPositionAndRadius.h"
#include "bullet_btMultiSphereShapeData.h"
#include "bullet_btConvexHullShapeData.h"
#include "bullet_btCollisionObjectData.h"
#include "bullet_btRigidBodyData.h"
#endif//__BULLET_H__

View File

@@ -36,6 +36,7 @@ namespace Bullet {
class btConvexInternalShapeData;
class btPositionAndRadius;
class btMultiSphereShapeData;
class btConvexHullShapeData;
class btCollisionObjectData;
class btRigidBodyData;
}

View File

@@ -0,0 +1,43 @@
/* Copyright (C) 2006-2009 Erwin Coumans & Charlie C
*
* 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.
*/
// Auto generated from makesdna dna.c
#ifndef __BULLET_BTCONVEXHULLSHAPEDATA__H__
#define __BULLET_BTCONVEXHULLSHAPEDATA__H__
// -------------------------------------------------- //
#include "bullet_Common.h"
#include "bullet_btConvexInternalShapeData.h"
namespace Bullet {
// ---------------------------------------------- //
class btConvexHullShapeData
{
public:
btConvexInternalShapeData m_convexInternalShapeData;
btVector3Data *m_unscaledPointsPtr;
int m_numUnscaledPoints;
char m_padding[4];
};
}
#endif//__BULLET_BTCONVEXHULLSHAPEDATA__H__

View File

@@ -65,6 +65,7 @@ bool btBulletFileLoader::loadFileFromMemory( bParse::btBulletFile* bulletFile2)
case BOX_SHAPE_PROXYTYPE:
case SPHERE_SHAPE_PROXYTYPE:
case MULTI_SPHERE_SHAPE_PROXYTYPE:
case CONVEX_HULL_SHAPE_PROXYTYPE:
{
btConvexInternalShapeData* bsd = (btConvexInternalShapeData*)shapeData;
btVector3 implicitShapeDimensions;
@@ -97,7 +98,6 @@ bool btBulletFileLoader::loadFileFromMemory( bParse::btBulletFile* bulletFile2)
}
case MULTI_SPHERE_SHAPE_PROXYTYPE:
{
#if 1
btMultiSphereShapeData* mss = (btMultiSphereShapeData*)bsd;
int numSpheres = mss->m_localPositionArraySize;
@@ -105,16 +105,26 @@ bool btBulletFileLoader::loadFileFromMemory( bParse::btBulletFile* bulletFile2)
btAlignedObjectArray<btScalar> radii;
radii.resize(numSpheres);
tmpPos.resize(numSpheres);
for (int i=0;i<numSpheres;i++)
{
tmpPos[i].deSerialize(mss->m_localPositionArrayPtr[i].m_pos);
radii[i] = mss->m_localPositionArrayPtr[i].m_radius;
}
shape = new btMultiSphereShape(&tmpPos[0],&radii[0],numSpheres);
#endif
break;
}
case CONVEX_HULL_SHAPE_PROXYTYPE:
{
btConvexHullShapeData* convexData = (btConvexHullShapeData*)bsd;
int numPoints = convexData->m_numUnscaledPoints;
btAlignedObjectArray<btVector3> tmpPoints;
tmpPoints.resize(numPoints);
for (int i=0;i<numPoints;i++)
{
tmpPoints[i].deSerialize(convexData->m_unscaledPointsPtr[i]);
}
shape = new btConvexHullShape(&tmpPoints[0].getX(),numPoints,sizeof(btVector3));
break;
}
default:

View File

@@ -1,3 +1,5 @@
delete dnaString.txt
Debug\HeaderGenerator.exe
python bulletGenerate.py

View File

@@ -125,6 +125,7 @@ typedef unsigned long uintptr_t;
#include "BulletCollision/CollisionShapes/btCollisionShape.h"
#include "BulletCollision/CollisionShapes/btConvexInternalShape.h"
#include "BulletCollision/CollisionShapes/btMultiSphereShape.h"
#include "BulletCollision/CollisionShapes/btConvexHullShape.h"
#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
#include "BulletDynamics/Dynamics/btRigidBody.h"
@@ -148,6 +149,7 @@ char *includefiles[] = {
"../../../src/BulletCollision/CollisionShapes/btCollisionShape.h",
"../../../src/BulletCollision/CollisionShapes/btConvexInternalShape.h",
"../../../src/BulletCollision/CollisionShapes/btMultiSphereShape.h",
"../../../src/BulletCollision/CollisionShapes/btConvexHullShape.h",
"../../../src/BulletCollision/CollisionDispatch/btCollisionObject.h",
"../../../src/BulletDynamics/Dynamics/btRigidBody.h",
// empty string to indicate end of includefiles

View File

@@ -17,7 +17,7 @@ subject to the following restrictions:
#include "BulletCollision/CollisionShapes/btCollisionMargin.h"
#include "LinearMath/btQuaternion.h"
#include "LinearMath/btSerializer.h"
btConvexHullShape ::btConvexHullShape (const btScalar* points,int numPoints,int stride) : btPolyhedralConvexAabbCachingShape ()
{
@@ -186,3 +186,28 @@ bool btConvexHullShape::isInside(const btVector3& ,btScalar ) const
return false;
}
///fills the dataBuffer and returns the struct name (and 0 on failure)
const char* btConvexHullShape::serialize(void* dataBuffer, btSerializer* serializer) const
{
btConvexHullShapeData* shapeData = (btConvexHullShapeData*) dataBuffer;
btConvexInternalShape::serialize(&shapeData->m_convexInternalShapeData, serializer);
int numElem = m_unscaledPoints.size();
shapeData->m_numUnscaledPoints = numElem;
shapeData->m_unscaledPointsPtr = numElem ? (btVector3Data*)&m_unscaledPoints[0]: 0;
if (numElem)
{
btChunk* chunk = serializer->allocate(sizeof(btVector3Data),numElem);
btVector3Data* memPtr = (btVector3Data*)chunk->m_oldPtr;
for (int i=0;i<numElem;i++,memPtr++)
{
m_unscaledPoints[i].serialize(*memPtr);
}
serializer->finalizeChunk(chunk,"btVector3Data",BT_ARRAY_CODE,(void*)&m_unscaledPoints[0]);
}
return "btConvexHullShapeData";
}

View File

@@ -89,8 +89,29 @@ public:
///in case we receive negative scaling
virtual void setLocalScaling(const btVector3& scaling);
virtual int calculateSerializeBufferSize();
///fills the dataBuffer and returns the struct name (and 0 on failure)
virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
};
struct btConvexHullShapeData
{
btConvexInternalShapeData m_convexInternalShapeData;
btVector3Data *m_unscaledPointsPtr;
int m_numUnscaledPoints;
char m_padding[4];
};
SIMD_FORCE_INLINE int btConvexHullShape::calculateSerializeBufferSize()
{
return sizeof(btConvexHullShapeData);
}
#endif //CONVEX_HULL_SHAPE_H

View File

@@ -158,7 +158,7 @@ const char* btMultiSphereShape::serialize(void* dataBuffer, btSerializer* serial
m_localPositionArray[i].serialize(memPtr->m_pos);
memPtr->m_radius = m_radiArray[i];
}
serializer->finalizeChunk(chunk,"btVector3Data",BT_ARRAY_CODE,(void*)&m_localPositionArray[0]);
serializer->finalizeChunk(chunk,"btPositionAndRadius",BT_ARRAY_CODE,(void*)&m_localPositionArray[0]);
}
return "btMultiSphereShapeData";

View File

@@ -1,5 +1,5 @@
unsigned char sBulletDNAstr[]= {
83,68,78,65,78,65,77,69,68,0,0,0,109,95,115,105,122,101,0,109,
83,68,78,65,78,65,77,69,70,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,
@@ -16,84 +16,89 @@ unsigned char sBulletDNAstr[]= {
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,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,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,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,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,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,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,105,110,116,101,114,110,97,108,84,121,112,101,0,42,109,95,117,
115,101,114,79,98,106,101,99,116,80,111,105,110,116,101,114,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,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,105,110,118,
101,114,115,101,77,97,115,115,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,
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,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,
65,114,114,97,121,83,105,122,101,0,42,109,95,117,110,115,99,97,108,101,
100,80,111,105,110,116,115,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,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,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,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,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,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,
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,105,110,116,101,114,110,97,108,84,121,112,101,0,42,109,95,
117,115,101,114,79,98,106,101,99,116,80,111,105,110,116,101,114,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,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,105,110,
118,101,114,115,101,77,97,115,115,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,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,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,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,
84,89,80,69,23,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,98,116,83,99,97,108,97,114,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,68,97,116,97,0,98,116,77,97,116,114,105,120,51,120,51,68,97,116,
97,0,98,116,84,114,97,110,115,102,111,114,109,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,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,67,111,108,108,105,115,105,111,110,79,
98,106,101,99,116,68,97,116,97,0,98,116,82,105,103,105,100,66,111,100,
121,68,97,116,97,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,4,0,12,0,36,0,8,0,
16,0,48,0,64,0,12,0,52,0,20,0,64,0,-8,0,-32,1,0,0,
83,84,82,67,12,0,0,0,11,0,3,0,4,0,0,0,4,0,1,0,
9,0,2,0,12,0,3,0,11,0,3,0,11,0,4,0,11,0,5,0,
13,0,2,0,9,0,6,0,9,0,7,0,14,0,1,0,10,0,8,0,
15,0,1,0,14,0,9,0,16,0,2,0,15,0,10,0,14,0,11,0,
17,0,3,0,9,0,12,0,4,0,13,0,0,0,14,0,18,0,5,0,
17,0,15,0,14,0,16,0,14,0,17,0,10,0,18,0,0,0,14,0,
19,0,2,0,14,0,19,0,10,0,20,0,20,0,4,0,18,0,21,0,
19,0,22,0,4,0,23,0,0,0,14,0,21,0,23,0,16,0,24,0,
16,0,25,0,14,0,26,0,14,0,27,0,14,0,28,0,4,0,29,0,
10,0,30,0,9,0,31,0,9,0,32,0,17,0,33,0,4,0,34,0,
4,0,35,0,4,0,36,0,4,0,37,0,10,0,38,0,10,0,39,0,
10,0,40,0,4,0,41,0,9,0,42,0,10,0,43,0,10,0,44,0,
10,0,45,0,4,0,46,0,22,0,21,0,21,0,47,0,15,0,48,0,
14,0,49,0,14,0,50,0,10,0,51,0,14,0,52,0,14,0,53,0,
14,0,54,0,14,0,55,0,14,0,56,0,14,0,57,0,14,0,58,0,
10,0,59,0,10,0,60,0,4,0,61,0,10,0,62,0,10,0,63,0,
10,0,64,0,10,0,65,0,10,0,66,0,10,0,67,0,};
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,0,0,0,84,89,80,69,24,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,98,116,83,99,97,108,97,114,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,68,97,116,97,0,98,116,77,97,116,114,105,120,51,120,
51,68,97,116,97,0,98,116,84,114,97,110,115,102,111,114,109,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,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,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,97,116,97,0,98,116,82,105,
103,105,100,66,111,100,121,68,97,116,97,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,4,0,12,0,
36,0,8,0,16,0,48,0,64,0,12,0,52,0,20,0,64,0,64,0,
-8,0,-32,1,83,84,82,67,13,0,0,0,11,0,3,0,4,0,0,0,
4,0,1,0,9,0,2,0,12,0,3,0,11,0,3,0,11,0,4,0,
11,0,5,0,13,0,2,0,9,0,6,0,9,0,7,0,14,0,1,0,
10,0,8,0,15,0,1,0,14,0,9,0,16,0,2,0,15,0,10,0,
14,0,11,0,17,0,3,0,9,0,12,0,4,0,13,0,0,0,14,0,
18,0,5,0,17,0,15,0,14,0,16,0,14,0,17,0,10,0,18,0,
0,0,14,0,19,0,2,0,14,0,19,0,10,0,20,0,20,0,4,0,
18,0,21,0,19,0,22,0,4,0,23,0,0,0,14,0,21,0,4,0,
18,0,21,0,14,0,24,0,4,0,25,0,0,0,14,0,22,0,23,0,
16,0,26,0,16,0,27,0,14,0,28,0,14,0,29,0,14,0,30,0,
4,0,31,0,10,0,32,0,9,0,33,0,9,0,34,0,17,0,35,0,
4,0,36,0,4,0,37,0,4,0,38,0,4,0,39,0,10,0,40,0,
10,0,41,0,10,0,42,0,4,0,43,0,9,0,44,0,10,0,45,0,
10,0,46,0,10,0,47,0,4,0,48,0,23,0,21,0,22,0,49,0,
15,0,50,0,14,0,51,0,14,0,52,0,10,0,53,0,14,0,54,0,
14,0,55,0,14,0,56,0,14,0,57,0,14,0,58,0,14,0,59,0,
14,0,60,0,10,0,61,0,10,0,62,0,4,0,63,0,10,0,64,0,
10,0,65,0,10,0,66,0,10,0,67,0,10,0,68,0,10,0,69,0,
};
int sBulletDNAlen= sizeof(sBulletDNAstr);