Make .bullet serialization mode robust:

Deal with broken DNA serialization. Bullet 2.76 release revision 2035 - 2046 was broken, and this includes the Maya Dynamica plugin.
Added some workaround to deal with the broken .bullet files, instead of crashing.
This commit is contained in:
erwin.coumans
2010-03-02 09:32:34 +00:00
parent c517f14dd4
commit 8fbe399ea4
19 changed files with 741 additions and 577 deletions

View File

@@ -42,12 +42,9 @@ subject to the following restrictions:
#include "LinearMath/btSerializer.h" #include "LinearMath/btSerializer.h"
#include "btBulletFile.h" #include "btBulletFile.h"
#include "btBulletWorldImporter.h" #include "btBulletWorldImporter.h"
#endif //TEST_SERIALIZATION #endif //TEST_SERIALIZATION
#include "BulletCollision/Gimpact/btGImpactCollisionAlgorithm.h"
#include <stdio.h> //printf debugging #include <stdio.h> //printf debugging
@@ -109,6 +106,8 @@ void SerializeDemo::setupEmptyDynamicsWorld()
m_dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher,m_broadphase,m_solver,m_collisionConfiguration); m_dynamicsWorld = new btDiscreteDynamicsWorld(m_dispatcher,m_broadphase,m_solver,m_collisionConfiguration);
btGImpactCollisionAlgorithm::registerAlgorithm((btCollisionDispatcher*)m_dynamicsWorld->getDispatcher());
m_dynamicsWorld->setGravity(btVector3(0,-10,0)); m_dynamicsWorld->setGravity(btVector3(0,-10,0));
} }
@@ -123,7 +122,7 @@ void SerializeDemo::initPhysics()
setupEmptyDynamicsWorld(); setupEmptyDynamicsWorld();
btBulletWorldImporter* fileLoader = new btBulletWorldImporter(m_dynamicsWorld); btBulletWorldImporter* fileLoader = new btBulletWorldImporter(m_dynamicsWorld);
//fileLoader->setVerboseMode(true); // fileLoader->setVerboseMode(true);
if (!fileLoader->loadFile("testFile.bullet")) if (!fileLoader->loadFile("testFile.bullet"))
{ {

View File

@@ -40,6 +40,7 @@
#include "bullet_btPositionAndRadius.h" #include "bullet_btPositionAndRadius.h"
#include "bullet_btMultiSphereShapeData.h" #include "bullet_btMultiSphereShapeData.h"
#include "bullet_btIntIndexData.h" #include "bullet_btIntIndexData.h"
#include "bullet_btShortIntIndexData.h"
#include "bullet_btShortIntIndexTripletData.h" #include "bullet_btShortIntIndexTripletData.h"
#include "bullet_btMeshPartData.h" #include "bullet_btMeshPartData.h"
#include "bullet_btStridingMeshInterfaceData.h" #include "bullet_btStridingMeshInterfaceData.h"

View File

@@ -47,6 +47,7 @@ namespace Bullet {
class btPositionAndRadius; class btPositionAndRadius;
class btMultiSphereShapeData; class btMultiSphereShapeData;
class btIntIndexData; class btIntIndexData;
class btShortIntIndexData;
class btShortIntIndexTripletData; class btShortIntIndexTripletData;
class btMeshPartData; class btMeshPartData;
class btStridingMeshInterfaceData; class btStridingMeshInterfaceData;

View File

@@ -35,6 +35,7 @@ namespace Bullet {
btVector3DoubleData *m_vertices3d; btVector3DoubleData *m_vertices3d;
btIntIndexData *m_indices32; btIntIndexData *m_indices32;
btShortIntIndexTripletData *m_3indices16; btShortIntIndexTripletData *m_3indices16;
btShortIntIndexData *m_indices16;
int m_numTriangles; int m_numTriangles;
int m_numVertices; int m_numVertices;
}; };

View File

@@ -37,6 +37,7 @@ namespace Bullet {
int m_escapeIndex; int m_escapeIndex;
int m_subPart; int m_subPart;
int m_triangleIndex; int m_triangleIndex;
char m_pad[4];
}; };
} }

View File

@@ -37,6 +37,7 @@ namespace Bullet {
int m_escapeIndex; int m_escapeIndex;
int m_subPart; int m_subPart;
int m_triangleIndex; int m_triangleIndex;
char m_pad[4];
}; };
} }

View File

@@ -41,9 +41,9 @@ namespace Bullet {
int m_numQuantizedContiguousNodes; int m_numQuantizedContiguousNodes;
btOptimizedBvhNodeFloatData *m_contiguousNodesPtr; btOptimizedBvhNodeFloatData *m_contiguousNodesPtr;
btQuantizedBvhNodeData *m_quantizedContiguousNodesPtr; btQuantizedBvhNodeData *m_quantizedContiguousNodesPtr;
btBvhSubtreeInfoData *m_subTreeInfoPtr;
int m_traversalMode; int m_traversalMode;
int m_numSubtreeHeaders; int m_numSubtreeHeaders;
btBvhSubtreeInfoData *m_subTreeInfoPtr;
}; };
} }

View File

@@ -0,0 +1,40 @@
/* 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_BTSHORTINTINDEXDATA__H__
#define __BULLET_BTSHORTINTINDEXDATA__H__
// -------------------------------------------------- //
#include "bullet_Common.h"
namespace Bullet {
// ---------------------------------------------- //
class btShortIntIndexData
{
public:
short m_value;
char m_pad[2];
};
}
#endif//__BULLET_BTSHORTINTINDEXDATA__H__

View File

@@ -99,6 +99,7 @@ namespace bParse {
btHashMap<btHashString,int> mTypeLookup; btHashMap<btHashString,int> mTypeLookup;
int mPtrLen; int mPtrLen;

View File

@@ -200,6 +200,24 @@ void bFile::parseInternal(bool verboseDumpAllTypes, char* memDna,int memDnaLengt
mFileDNA = new bDNA(); mFileDNA = new bDNA();
mFileDNA->init(blenderData+sdnaPos, mFileLen-sdnaPos, (mFlags & FD_ENDIAN_SWAP)!=0); mFileDNA->init(blenderData+sdnaPos, mFileLen-sdnaPos, (mFlags & FD_ENDIAN_SWAP)!=0);
if (mVersion==276)
{
int i;
for (i=0;i<mFileDNA->getNumNames();i++)
{
if (strcmp(mFileDNA->getName(i),"int")==0)
{
mFlags |= FD_BROKEN_DNA;
}
}
if ((mFlags&FD_BROKEN_DNA)!=0)
{
printf("warning: fixing some broken DNA version\n");
}
}
if (verboseDumpAllTypes) if (verboseDumpAllTypes)
{ {
mFileDNA->dumpTypeDefinitions(); mFileDNA->dumpTypeDefinitions();
@@ -211,7 +229,7 @@ void bFile::parseInternal(bool verboseDumpAllTypes, char* memDna,int memDnaLengt
mMemoryDNA->init(memDna,memDnaLength,littleEndian==0); mMemoryDNA->init(memDna,memDnaLength,littleEndian==0);
///@todo we need a better version check, add version/sub version info from FileGlobal into memory DNA/header files ///@todo we need a better version check, add version/sub version info from FileGlobal into memory DNA/header files
@@ -276,6 +294,34 @@ char* bFile::readStruct(char *head, bChunkInd& dataChunk)
oldType = mFileDNA->getType(oldStruct[0]); oldType = mFileDNA->getType(oldStruct[0]);
oldLen = mFileDNA->getLength(oldStruct[0]); oldLen = mFileDNA->getLength(oldStruct[0]);
if ((mFlags&FD_BROKEN_DNA)!=0)
{
if ((strcmp(oldType,"btQuantizedBvhNodeData")==0)&&oldLen==20)
{
return 0;
}
if ((strcmp(oldType,"btShortIntIndexData")==0))
{
int allocLen = 2;
char *dataAlloc = new char[(dataChunk.nr*allocLen)+1];
memset(dataAlloc, 0, (dataChunk.nr*allocLen)+1);
short* dest = (short*) dataAlloc;
const short* src = (short*) head;
for (int i=0;i<dataChunk.nr;i++)
{
dest[i] = src[i];
if (mFlags &FD_ENDIAN_SWAP)
{
SWITCH_SHORT(dest[i]);
}
}
addDataBlock(dataAlloc);
return dataAlloc;
}
}
///don't try to convert Link block data, just memcpy it. Other data can be converted. ///don't try to convert Link block data, just memcpy it. Other data can be converted.
if (strcmp("Link",oldType)!=0) if (strcmp("Link",oldType)!=0)
{ {
@@ -507,7 +553,7 @@ void bFile::swapData(char *data, short type, int arraySize)
void bFile::safeSwapPtr(char *dst, char *src) void bFile::safeSwapPtr(char *dst, const char *src)
{ {
int ptrFile = mFileDNA->getPointerSize(); int ptrFile = mFileDNA->getPointerSize();
int ptrMem = mMemoryDNA->getPointerSize(); int ptrMem = mMemoryDNA->getPointerSize();
@@ -535,8 +581,12 @@ void bFile::safeSwapPtr(char *dst, char *src)
//deal with pointers the Blender .blend style way, see //deal with pointers the Blender .blend style way, see
//readfile.c in the Blender source tree //readfile.c in the Blender source tree
long64 longValue = *((long64*)src); long64 longValue = *((long64*)src);
//endian swap for 64bit pointer otherwise truncation will fail due to trailing zeros
if (mFlags & FD_ENDIAN_SWAP)
SWITCH_LONGINT(longValue);
*((int*)dst) = (int)(longValue>>3); *((int*)dst) = (int)(longValue>>3);
} }
} }
else if (ptrMem==8 && ptrFile==4) else if (ptrMem==8 && ptrFile==4)
{ {
@@ -576,9 +626,18 @@ void bFile::getMatchingFileDNA(short* dna_addr, const char* lookupName, const c
const char* type = mFileDNA->getType(dna_addr[0]); const char* type = mFileDNA->getType(dna_addr[0]);
const char* name = mFileDNA->getName(dna_addr[1]); const char* name = mFileDNA->getName(dna_addr[1]);
int eleLen = mFileDNA->getElementSize(dna_addr[0], dna_addr[1]);
int eleLen = mFileDNA->getElementSize(dna_addr[0], dna_addr[1]);
if ((mFlags&FD_BROKEN_DNA)!=0)
{
if ((strcmp(type,"short")==0)&&(strcmp(name,"int")==0))
{
eleLen = 0;
}
}
if (strcmp(lookupName, name)==0) if (strcmp(lookupName, name)==0)
{ {
//int arrayLenold = mFileDNA->getArraySize((char*)name.c_str()); //int arrayLenold = mFileDNA->getArraySize((char*)name.c_str());
@@ -739,7 +798,7 @@ void bFile::resolvePointersMismatch()
// printf("pointer not found: %x\n",cur); // printf("pointer not found: %x\n",cur);
} }
} }
for (i=0;i< m_pointerPtrFixupArray.size();i++) for (i=0;i< m_pointerPtrFixupArray.size();i++)
{ {
char* cur= m_pointerPtrFixupArray.at(i); char* cur= m_pointerPtrFixupArray.at(i);
void** ptrptr = (void**)cur; void** ptrptr = (void**)cur;
@@ -751,30 +810,32 @@ void bFile::resolvePointersMismatch()
void **array= (void**)(*(ptrptr)); void **array= (void**)(*(ptrptr));
int ptrMem = mMemoryDNA->getPointerSize(); int ptrMem = mMemoryDNA->getPointerSize();
int ptrFile = mFileDNA->getPointerSize(); int ptrFile = mFileDNA->getPointerSize();
int n=0, n2=0; int n=0;
int swapoffs = 2; void *lookup = array[n];
void *np = array[n];
while(np) if (lookup)
{ {
if (ptrMem > ptrFile) char *oldPtr = (char*)array;
btAlignedObjectArray<btPointerUid> pointers;
while(lookup)
{ {
safeSwapPtr((char*)&array[n2], (char*)&array[n]); btPointerUid dp = {0};
np = findLibPointer(array[n2]); safeSwapPtr((char*)dp.m_uniqueIds, (char*)(oldPtr + (n * ptrFile)));
lookup = findLibPointer(dp.m_ptr);
if (!lookup) break;
pointers.push_back(dp);
++n;
} }
else if (ptrMem < ptrFile)
{
safeSwapPtr((char*)&array[n], (char*)&array[n2]);
np = findLibPointer(array[n]);
}
else
np = findLibPointer(array[n]);
if (np) for (int j=0; j<n; ++j)
array[n] = np; {
++n; array[j] = findLibPointer(pointers[j].m_ptr);
n2 += swapoffs; assert(array[j]);
}
} }
} }
} }
@@ -1202,8 +1263,11 @@ int bFile::getNextBlock(bChunkInd *dataChunk, const char *dataPtr, const int fl
{ {
long64 oldPtr =0; long64 oldPtr =0;
memcpy(&oldPtr, &head.m_uniqueInts[0], 8); memcpy(&oldPtr, &head.m_uniqueInts[0], 8);
if (swap)
SWITCH_LONGINT(oldPtr);
chunk.m_uniqueInt = (int)(oldPtr >> 3); chunk.m_uniqueInt = (int)(oldPtr >> 3);
} }
chunk.dna_nr = head.dna_nr; chunk.dna_nr = head.dna_nr;
chunk.nr = head.nr; chunk.nr = head.nr;

View File

@@ -32,7 +32,8 @@ namespace bParse {
FD_FILE_64 =8, FD_FILE_64 =8,
FD_BITS_VARIES =16, FD_BITS_VARIES =16,
FD_VERSION_VARIES = 32, FD_VERSION_VARIES = 32,
FD_DOUBLE_PRECISION =64 FD_DOUBLE_PRECISION =64,
FD_BROKEN_DNA = 128
}; };
@@ -71,7 +72,7 @@ namespace bParse {
// buffer offset util // buffer offset util
int getNextBlock(bChunkInd *dataChunk, const char *dataPtr, const int flags); int getNextBlock(bChunkInd *dataChunk, const char *dataPtr, const int flags);
void safeSwapPtr(char *dst, char *src); void safeSwapPtr(char *dst, const char *src);
virtual void parseHeader(); virtual void parseHeader();

View File

@@ -108,6 +108,8 @@ void btBulletFile::parseData()
printf ("Chunk size = %d",CHUNK_HEADER_LEN); printf ("Chunk size = %d",CHUNK_HEADER_LEN);
printf ("File chunk size = %d",ChunkUtils::getOffset(mFlags)); printf ("File chunk size = %d",ChunkUtils::getOffset(mFlags));
const bool brokenDNA = (mFlags&FD_BROKEN_DNA)!=0;
//const bool swap = (mFlags&FD_ENDIAN_SWAP)!=0; //const bool swap = (mFlags&FD_ENDIAN_SWAP)!=0;
@@ -126,71 +128,74 @@ void btBulletFile::parseData()
while (dataChunk.code != DNA1) while (dataChunk.code != DNA1)
{ {
if (!brokenDNA || (dataChunk.code != BT_QUANTIZED_BVH_CODE) )
// one behind
if (dataChunk.code == SDNA) break;
//if (dataChunk.code == DNA1) break;
// same as (BHEAD+DATA dependency)
dataPtrHead = dataPtr+ChunkUtils::getOffset(mFlags);
if (dataChunk.dna_nr>=0)
{ {
char *id = readStruct(dataPtrHead, dataChunk);
// lookup maps // one behind
if (id) if (dataChunk.code == SDNA) break;
//if (dataChunk.code == DNA1) break;
// same as (BHEAD+DATA dependency)
dataPtrHead = dataPtr+ChunkUtils::getOffset(mFlags);
if (dataChunk.dna_nr>=0)
{ {
mLibPointers.insert(dataChunk.oldPtr, (bStructHandle*)id); char *id = readStruct(dataPtrHead, dataChunk);
m_chunks.push_back(dataChunk); // lookup maps
// block it if (id)
//bListBasePtr *listID = mMain->getListBasePtr(dataChunk.code); {
//if (listID) mLibPointers.insert(dataChunk.oldPtr, (bStructHandle*)id);
// listID->push_back((bStructHandle*)id);
}
if (dataChunk.code == BT_RIGIDBODY_CODE) m_chunks.push_back(dataChunk);
// block it
//bListBasePtr *listID = mMain->getListBasePtr(dataChunk.code);
//if (listID)
// listID->push_back((bStructHandle*)id);
}
if (dataChunk.code == BT_RIGIDBODY_CODE)
{
m_rigidBodies.push_back((bStructHandle*) id);
}
if (dataChunk.code == BT_CONSTRAINT_CODE)
{
m_constraints.push_back((bStructHandle*) id);
}
if (dataChunk.code == BT_QUANTIZED_BVH_CODE)
{
m_bvhs.push_back((bStructHandle*) id);
}
if (dataChunk.code == BT_TRIANLGE_INFO_MAP)
{
m_triangleInfoMaps.push_back((bStructHandle*) id);
}
if (dataChunk.code == BT_COLLISIONOBJECT_CODE)
{
m_collisionObjects.push_back((bStructHandle*) id);
}
if (dataChunk.code == BT_SHAPE_CODE)
{
m_collisionShapes.push_back((bStructHandle*) id);
}
// if (dataChunk.code == GLOB)
// {
// m_glob = (bStructHandle*) id;
// }
} else
{ {
m_rigidBodies.push_back((bStructHandle*) id); printf("unknown chunk\n");
}
if (dataChunk.code == BT_CONSTRAINT_CODE) mLibPointers.insert(dataChunk.oldPtr, (bStructHandle*)dataPtrHead);
{
m_constraints.push_back((bStructHandle*) id);
} }
if (dataChunk.code == BT_QUANTIZED_BVH_CODE)
{
m_bvhs.push_back((bStructHandle*) id);
}
if (dataChunk.code == BT_TRIANLGE_INFO_MAP)
{
m_triangleInfoMaps.push_back((bStructHandle*) id);
}
if (dataChunk.code == BT_COLLISIONOBJECT_CODE)
{
m_collisionObjects.push_back((bStructHandle*) id);
}
if (dataChunk.code == BT_SHAPE_CODE)
{
m_collisionShapes.push_back((bStructHandle*) id);
}
// if (dataChunk.code == GLOB)
// {
// m_glob = (bStructHandle*) id;
// }
} else } else
{ {
printf("unknown chunk\n"); printf("skipping BT_QUANTIZED_BVH_CODE due to broken DNA\n");
mLibPointers.insert(dataChunk.oldPtr, (bStructHandle*)dataPtrHead);
} }
// next please! // next please!

View File

@@ -5,6 +5,7 @@
#include "btBulletDynamicsCommon.h" #include "btBulletDynamicsCommon.h"
#include "BulletCollision/Gimpact/btGImpactShape.h" #include "BulletCollision/Gimpact/btGImpactShape.h"
//#define USE_INTERNAL_EDGE_UTILITY //#define USE_INTERNAL_EDGE_UTILITY
#ifdef USE_INTERNAL_EDGE_UTILITY #ifdef USE_INTERNAL_EDGE_UTILITY
#include "BulletCollision/CollisionDispatch/btInternalEdgeUtility.h" #include "BulletCollision/CollisionDispatch/btInternalEdgeUtility.h"
@@ -106,8 +107,17 @@ btTriangleIndexVertexArray* btBulletWorldImporter::createMeshInterface(btStridin
} else } else
{ {
meshPart.m_indexType = PHY_SHORT; meshPart.m_indexType = PHY_SHORT;
meshPart.m_triangleIndexStride = sizeof(btShortIntIndexTripletData); if (meshData.m_meshPartsPtr[i].m_3indices16)
meshPart.m_triangleIndexBase = (const unsigned char*)meshData.m_meshPartsPtr[i].m_3indices16; {
meshPart.m_triangleIndexStride = sizeof(btShortIntIndexTripletData);
meshPart.m_triangleIndexBase = (const unsigned char*)meshData.m_meshPartsPtr[i].m_3indices16;
}
if (meshData.m_meshPartsPtr[i].m_indices16)
{
meshPart.m_triangleIndexStride = 3*sizeof(short int);
meshPart.m_triangleIndexBase = (const unsigned char*)meshData.m_meshPartsPtr[i].m_indices16;
}
} }
if (meshData.m_meshPartsPtr[i].m_vertices3f) if (meshData.m_meshPartsPtr[i].m_vertices3f)
@@ -124,8 +134,10 @@ btTriangleIndexVertexArray* btBulletWorldImporter::createMeshInterface(btStridin
meshPart.m_numTriangles = meshData.m_meshPartsPtr[i].m_numTriangles; meshPart.m_numTriangles = meshData.m_meshPartsPtr[i].m_numTriangles;
meshPart.m_numVertices = meshData.m_meshPartsPtr[i].m_numVertices; meshPart.m_numVertices = meshData.m_meshPartsPtr[i].m_numVertices;
if (meshPart.m_triangleIndexBase && meshPart.m_vertexBase)
meshInterface->addIndexedMesh(meshPart,meshPart.m_indexType); {
meshInterface->addIndexedMesh(meshPart,meshPart.m_indexType);
}
} }
return meshInterface; return meshInterface;
@@ -338,13 +350,17 @@ btCollisionShape* btBulletWorldImporter::convertCollisionShape( btCollisionShap
{ {
btTriangleMeshShapeData* trimesh = (btTriangleMeshShapeData*)shapeData; btTriangleMeshShapeData* trimesh = (btTriangleMeshShapeData*)shapeData;
btTriangleIndexVertexArray* meshInterface = createMeshInterface(trimesh->m_meshInterface); btTriangleIndexVertexArray* meshInterface = createMeshInterface(trimesh->m_meshInterface);
if (!meshInterface->getNumSubParts())
{
return 0;
}
btVector3 scaling; scaling.deSerializeFloat(trimesh->m_meshInterface.m_scaling); btVector3 scaling; scaling.deSerializeFloat(trimesh->m_meshInterface.m_scaling);
meshInterface->setScaling(scaling); meshInterface->setScaling(scaling);
btOptimizedBvh* bvh = 0; btOptimizedBvh* bvh = 0;
#if 1 #if 0
if (trimesh->m_quantizedFloatBvh) if (trimesh->m_quantizedFloatBvh)
{ {
btOptimizedBvh** bvhPtr = m_bvhMap.find(trimesh->m_quantizedFloatBvh); btOptimizedBvh** bvhPtr = m_bvhMap.find(trimesh->m_quantizedFloatBvh);
@@ -512,6 +528,11 @@ bool btBulletWorldImporter::loadFileFromMemory( bParse::btBulletFile* bulletFil
startTransform.deSerializeDouble(colObjData->m_collisionObjectData.m_worldTransform); startTransform.deSerializeDouble(colObjData->m_collisionObjectData.m_worldTransform);
// startTransform.setBasis(btMatrix3x3::getIdentity()); // startTransform.setBasis(btMatrix3x3::getIdentity());
btCollisionShape* shape = (btCollisionShape*)*shapePtr; btCollisionShape* shape = (btCollisionShape*)*shapePtr;
if (shape->isNonMoving())
{
mass = 0.f;
}
if (mass) if (mass)
{ {
shape->calculateLocalInertia(mass,localInertia); shape->calculateLocalInertia(mass,localInertia);
@@ -548,6 +569,10 @@ bool btBulletWorldImporter::loadFileFromMemory( bParse::btBulletFile* bulletFil
startTransform.deSerializeFloat(colObjData->m_collisionObjectData.m_worldTransform); startTransform.deSerializeFloat(colObjData->m_collisionObjectData.m_worldTransform);
// startTransform.setBasis(btMatrix3x3::getIdentity()); // startTransform.setBasis(btMatrix3x3::getIdentity());
btCollisionShape* shape = (btCollisionShape*)*shapePtr; btCollisionShape* shape = (btCollisionShape*)*shapePtr;
if (shape->isNonMoving())
{
mass = 0.f;
}
if (mass) if (mass)
{ {
shape->calculateLocalInertia(mass,localInertia); shape->calculateLocalInertia(mass,localInertia);

View File

@@ -141,6 +141,11 @@ BT_DECLARE_ALIGNED_ALLOCATOR();
return (proxyType < CONCAVE_SHAPES_START_HERE); return (proxyType < CONCAVE_SHAPES_START_HERE);
} }
static SIMD_FORCE_INLINE bool isNonMoving(int proxyType)
{
return (isConcave(proxyType) && !(proxyType==GIMPACT_SHAPE_PROXYTYPE));
}
static SIMD_FORCE_INLINE bool isConcave(int proxyType) static SIMD_FORCE_INLINE bool isConcave(int proxyType)
{ {
return ((proxyType > CONCAVE_SHAPES_START_HERE) && return ((proxyType > CONCAVE_SHAPES_START_HERE) &&

View File

@@ -71,6 +71,10 @@ public:
{ {
return btBroadphaseProxy::isConvex(getShapeType()); return btBroadphaseProxy::isConvex(getShapeType());
} }
SIMD_FORCE_INLINE bool isNonMoving() const
{
return btBroadphaseProxy::isNonMoving(getShapeType());
}
SIMD_FORCE_INLINE bool isConcave() const SIMD_FORCE_INLINE bool isConcave() const
{ {
return btBroadphaseProxy::isConcave(getShapeType()); return btBroadphaseProxy::isConcave(getShapeType());

View File

@@ -220,6 +220,7 @@ const char* btStridingMeshInterface::serialize(void* dataBuffer, btSerializer* s
getLockedReadOnlyVertexIndexBase(&vertexbase,numverts,type,stride,&indexbase,indexstride,numtriangles,gfxindextype,part); getLockedReadOnlyVertexIndexBase(&vertexbase,numverts,type,stride,&indexbase,indexstride,numtriangles,gfxindextype,part);
memPtr->m_numTriangles = numtriangles;//indices = 3*numtriangles memPtr->m_numTriangles = numtriangles;//indices = 3*numtriangles
memPtr->m_numVertices = numverts; memPtr->m_numVertices = numverts;
memPtr->m_indices16 = 0;
memPtr->m_indices32 = 0; memPtr->m_indices32 = 0;
memPtr->m_3indices16 = 0; memPtr->m_3indices16 = 0;
memPtr->m_vertices3f = 0; memPtr->m_vertices3f = 0;

View File

@@ -104,7 +104,11 @@ struct btIntIndexData
int m_value; int m_value;
}; };
struct btShortIntIndexData
{
short m_value;
char m_pad[2];
};
struct btShortIntIndexTripletData struct btShortIntIndexTripletData
{ {
@@ -121,6 +125,8 @@ struct btMeshPartData
btIntIndexData *m_indices32; btIntIndexData *m_indices32;
btShortIntIndexTripletData *m_3indices16; btShortIntIndexTripletData *m_3indices16;
btShortIntIndexData *m_indices16;//backwards compatibility
int m_numTriangles;//length of m_indices = m_numTriangles int m_numTriangles;//length of m_indices = m_numTriangles
int m_numVertices; int m_numVertices;
}; };

View File

@@ -881,22 +881,24 @@ btScalar btGImpactCollisionAlgorithm::calculateTimeOfImpact(btCollisionObject* b
///////////////////////////////////// REGISTERING ALGORITHM ////////////////////////////////////////////// ///////////////////////////////////// REGISTERING ALGORITHM //////////////////////////////////////////////
btGImpactCollisionAlgorithm::CreateFunc g_gimpact_cf;
//! Use this function for register the algorithm externally //! Use this function for register the algorithm externally
void btGImpactCollisionAlgorithm::registerAlgorithm(btCollisionDispatcher * dispatcher) void btGImpactCollisionAlgorithm::registerAlgorithm(btCollisionDispatcher * dispatcher)
{ {
static btGImpactCollisionAlgorithm::CreateFunc s_gimpact_cf;
int i; int i;
for ( i = 0;i < MAX_BROADPHASE_COLLISION_TYPES ;i++ ) for ( i = 0;i < MAX_BROADPHASE_COLLISION_TYPES ;i++ )
{ {
dispatcher->registerCollisionCreateFunc(GIMPACT_SHAPE_PROXYTYPE,i ,&g_gimpact_cf); dispatcher->registerCollisionCreateFunc(GIMPACT_SHAPE_PROXYTYPE,i ,&s_gimpact_cf);
} }
for ( i = 0;i < MAX_BROADPHASE_COLLISION_TYPES ;i++ ) for ( i = 0;i < MAX_BROADPHASE_COLLISION_TYPES ;i++ )
{ {
dispatcher->registerCollisionCreateFunc(i,GIMPACT_SHAPE_PROXYTYPE ,&g_gimpact_cf); dispatcher->registerCollisionCreateFunc(i,GIMPACT_SHAPE_PROXYTYPE ,&s_gimpact_cf);
} }
} }

View File

@@ -1,5 +1,5 @@
unsigned char sBulletDNAstr64[]= { unsigned char sBulletDNAstr64[]= {
83,68,78,65,78,65,77,69,-80,0,0,0,109,95,115,105,122,101,0,109, 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, 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, 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, 108,108,105,115,105,111,110,79,98,106,101,99,116,115,0,109,95,99,111,110,
@@ -39,253 +39,256 @@ unsigned char sBulletDNAstr64[]= {
83,104,97,112,101,68,97,116,97,0,42,109,95,108,111,99,97,108,80,111, 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, 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, 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,118,97,108,117,101,115,91,51,93,0, 109,95,118,97,108,117,101,0,109,95,112,97,100,91,50,93,0,109,95,118,
109,95,112,97,100,91,50,93,0,42,109,95,118,101,114,116,105,99,101,115, 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, 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, 105,110,100,105,99,101,115,51,50,0,42,109,95,51,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, 115,49,54,0,42,109,95,105,110,100,105,99,101,115,49,54,0,109,95,110,
95,110,117,109,86,101,114,116,105,99,101,115,0,42,109,95,109,101,115,104, 117,109,84,114,105,97,110,103,108,101,115,0,109,95,110,117,109,86,101,114,
80,97,114,116,115,80,116,114,0,109,95,115,99,97,108,105,110,103,0,109, 116,105,99,101,115,0,42,109,95,109,101,115,104,80,97,114,116,115,80,116,
95,110,117,109,77,101,115,104,80,97,114,116,115,0,109,95,109,101,115,104, 114,0,109,95,115,99,97,108,105,110,103,0,109,95,110,117,109,77,101,115,
73,110,116,101,114,102,97,99,101,0,42,109,95,113,117,97,110,116,105,122, 104,80,97,114,116,115,0,109,95,109,101,115,104,73,110,116,101,114,102,97,
101,100,70,108,111,97,116,66,118,104,0,42,109,95,113,117,97,110,116,105, 99,101,0,42,109,95,113,117,97,110,116,105,122,101,100,70,108,111,97,116,
122,101,100,68,111,117,98,108,101,66,118,104,0,42,109,95,116,114,105,97, 66,118,104,0,42,109,95,113,117,97,110,116,105,122,101,100,68,111,117,98,
110,103,108,101,73,110,102,111,77,97,112,0,109,95,112,97,100,51,91,52, 108,101,66,118,104,0,42,109,95,116,114,105,97,110,103,108,101,73,110,102,
93,0,109,95,116,114,97,110,115,102,111,114,109,0,42,109,95,99,104,105, 111,77,97,112,0,109,95,112,97,100,51,91,52,93,0,109,95,116,114,97,
108,100,83,104,97,112,101,0,109,95,99,104,105,108,100,83,104,97,112,101, 110,115,102,111,114,109,0,42,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, 0,109,95,99,104,105,108,100,83,104,97,112,101,84,121,112,101,0,109,95,
109,95,99,104,105,108,100,83,104,97,112,101,80,116,114,0,109,95,110,117, 99,104,105,108,100,77,97,114,103,105,110,0,42,109,95,99,104,105,108,100,
109,67,104,105,108,100,83,104,97,112,101,115,0,109,95,117,112,65,120,105, 83,104,97,112,101,80,116,114,0,109,95,110,117,109,67,104,105,108,100,83,
115,0,109,95,102,108,97,103,115,0,109,95,101,100,103,101,86,48,86,49, 104,97,112,101,115,0,109,95,117,112,65,120,105,115,0,109,95,102,108,97,
65,110,103,108,101,0,109,95,101,100,103,101,86,49,86,50,65,110,103,108, 103,115,0,109,95,101,100,103,101,86,48,86,49,65,110,103,108,101,0,109,
101,0,109,95,101,100,103,101,86,50,86,48,65,110,103,108,101,0,42,109, 95,101,100,103,101,86,49,86,50,65,110,103,108,101,0,109,95,101,100,103,
95,104,97,115,104,84,97,98,108,101,80,116,114,0,42,109,95,110,101,120, 101,86,50,86,48,65,110,103,108,101,0,42,109,95,104,97,115,104,84,97,
116,80,116,114,0,42,109,95,118,97,108,117,101,65,114,114,97,121,80,116, 98,108,101,80,116,114,0,42,109,95,110,101,120,116,80,116,114,0,42,109,
114,0,42,109,95,107,101,121,65,114,114,97,121,80,116,114,0,109,95,99, 95,118,97,108,117,101,65,114,114,97,121,80,116,114,0,42,109,95,107,101,
111,110,118,101,120,69,112,115,105,108,111,110,0,109,95,112,108,97,110,97, 121,65,114,114,97,121,80,116,114,0,109,95,99,111,110,118,101,120,69,112,
114,69,112,115,105,108,111,110,0,109,95,101,113,117,97,108,86,101,114,116, 115,105,108,111,110,0,109,95,112,108,97,110,97,114,69,112,115,105,108,111,
101,120,84,104,114,101,115,104,111,108,100,0,109,95,101,100,103,101,68,105, 110,0,109,95,101,113,117,97,108,86,101,114,116,101,120,84,104,114,101,115,
115,116,97,110,99,101,84,104,114,101,115,104,111,108,100,0,109,95,122,101, 104,111,108,100,0,109,95,101,100,103,101,68,105,115,116,97,110,99,101,84,
114,111,65,114,101,97,84,104,114,101,115,104,111,108,100,0,109,95,110,101, 104,114,101,115,104,111,108,100,0,109,95,122,101,114,111,65,114,101,97,84,
120,116,83,105,122,101,0,109,95,104,97,115,104,84,97,98,108,101,83,105, 104,114,101,115,104,111,108,100,0,109,95,110,101,120,116,83,105,122,101,0,
122,101,0,109,95,110,117,109,86,97,108,117,101,115,0,109,95,110,117,109, 109,95,104,97,115,104,84,97,98,108,101,83,105,122,101,0,109,95,110,117,
75,101,121,115,0,109,95,103,105,109,112,97,99,116,83,117,98,84,121,112, 109,86,97,108,117,101,115,0,109,95,110,117,109,75,101,121,115,0,109,95,
101,0,42,109,95,117,110,115,99,97,108,101,100,80,111,105,110,116,115,70, 103,105,109,112,97,99,116,83,117,98,84,121,112,101,0,42,109,95,117,110,
108,111,97,116,80,116,114,0,42,109,95,117,110,115,99,97,108,101,100,80, 115,99,97,108,101,100,80,111,105,110,116,115,70,108,111,97,116,80,116,114,
111,105,110,116,115,68,111,117,98,108,101,80,116,114,0,109,95,110,117,109, 0,42,109,95,117,110,115,99,97,108,101,100,80,111,105,110,116,115,68,111,
85,110,115,99,97,108,101,100,80,111,105,110,116,115,0,109,95,112,97,100, 117,98,108,101,80,116,114,0,109,95,110,117,109,85,110,115,99,97,108,101,
100,105,110,103,51,91,52,93,0,42,109,95,98,114,111,97,100,112,104,97, 100,80,111,105,110,116,115,0,109,95,112,97,100,100,105,110,103,51,91,52,
115,101,72,97,110,100,108,101,0,42,109,95,99,111,108,108,105,115,105,111, 93,0,42,109,95,98,114,111,97,100,112,104,97,115,101,72,97,110,100,108,
110,83,104,97,112,101,0,42,109,95,114,111,111,116,67,111,108,108,105,115, 101,0,42,109,95,99,111,108,108,105,115,105,111,110,83,104,97,112,101,0,
105,111,110,83,104,97,112,101,0,109,95,119,111,114,108,100,84,114,97,110, 42,109,95,114,111,111,116,67,111,108,108,105,115,105,111,110,83,104,97,112,
115,102,111,114,109,0,109,95,105,110,116,101,114,112,111,108,97,116,105,111, 101,0,109,95,119,111,114,108,100,84,114,97,110,115,102,111,114,109,0,109,
110,87,111,114,108,100,84,114,97,110,115,102,111,114,109,0,109,95,105,110, 95,105,110,116,101,114,112,111,108,97,116,105,111,110,87,111,114,108,100,84,
116,101,114,112,111,108,97,116,105,111,110,76,105,110,101,97,114,86,101,108, 114,97,110,115,102,111,114,109,0,109,95,105,110,116,101,114,112,111,108,97,
111,99,105,116,121,0,109,95,105,110,116,101,114,112,111,108,97,116,105,111, 116,105,111,110,76,105,110,101,97,114,86,101,108,111,99,105,116,121,0,109,
110,65,110,103,117,108,97,114,86,101,108,111,99,105,116,121,0,109,95,97, 95,105,110,116,101,114,112,111,108,97,116,105,111,110,65,110,103,117,108,97,
110,105,115,111,116,114,111,112,105,99,70,114,105,99,116,105,111,110,0,109, 114,86,101,108,111,99,105,116,121,0,109,95,97,110,105,115,111,116,114,111,
95,99,111,110,116,97,99,116,80,114,111,99,101,115,115,105,110,103,84,104, 112,105,99,70,114,105,99,116,105,111,110,0,109,95,99,111,110,116,97,99,
114,101,115,104,111,108,100,0,109,95,100,101,97,99,116,105,118,97,116,105, 116,80,114,111,99,101,115,115,105,110,103,84,104,114,101,115,104,111,108,100,
111,110,84,105,109,101,0,109,95,102,114,105,99,116,105,111,110,0,109,95, 0,109,95,100,101,97,99,116,105,118,97,116,105,111,110,84,105,109,101,0,
114,101,115,116,105,116,117,116,105,111,110,0,109,95,104,105,116,70,114,97, 109,95,102,114,105,99,116,105,111,110,0,109,95,114,101,115,116,105,116,117,
99,116,105,111,110,0,109,95,99,99,100,83,119,101,112,116,83,112,104,101, 116,105,111,110,0,109,95,104,105,116,70,114,97,99,116,105,111,110,0,109,
114,101,82,97,100,105,117,115,0,109,95,99,99,100,77,111,116,105,111,110, 95,99,99,100,83,119,101,112,116,83,112,104,101,114,101,82,97,100,105,117,
84,104,114,101,115,104,111,108,100,0,109,95,104,97,115,65,110,105,115,111, 115,0,109,95,99,99,100,77,111,116,105,111,110,84,104,114,101,115,104,111,
116,114,111,112,105,99,70,114,105,99,116,105,111,110,0,109,95,99,111,108, 108,100,0,109,95,104,97,115,65,110,105,115,111,116,114,111,112,105,99,70,
108,105,115,105,111,110,70,108,97,103,115,0,109,95,105,115,108,97,110,100, 114,105,99,116,105,111,110,0,109,95,99,111,108,108,105,115,105,111,110,70,
84,97,103,49,0,109,95,99,111,109,112,97,110,105,111,110,73,100,0,109, 108,97,103,115,0,109,95,105,115,108,97,110,100,84,97,103,49,0,109,95,
95,97,99,116,105,118,97,116,105,111,110,83,116,97,116,101,49,0,109,95, 99,111,109,112,97,110,105,111,110,73,100,0,109,95,97,99,116,105,118,97,
105,110,116,101,114,110,97,108,84,121,112,101,0,109,95,99,104,101,99,107, 116,105,111,110,83,116,97,116,101,49,0,109,95,105,110,116,101,114,110,97,
67,111,108,108,105,100,101,87,105,116,104,0,109,95,99,111,108,108,105,115, 108,84,121,112,101,0,109,95,99,104,101,99,107,67,111,108,108,105,100,101,
105,111,110,79,98,106,101,99,116,68,97,116,97,0,109,95,105,110,118,73, 87,105,116,104,0,109,95,99,111,108,108,105,115,105,111,110,79,98,106,101,
110,101,114,116,105,97,84,101,110,115,111,114,87,111,114,108,100,0,109,95, 99,116,68,97,116,97,0,109,95,105,110,118,73,110,101,114,116,105,97,84,
108,105,110,101,97,114,86,101,108,111,99,105,116,121,0,109,95,97,110,103, 101,110,115,111,114,87,111,114,108,100,0,109,95,108,105,110,101,97,114,86,
117,108,97,114,86,101,108,111,99,105,116,121,0,109,95,97,110,103,117,108, 101,108,111,99,105,116,121,0,109,95,97,110,103,117,108,97,114,86,101,108,
97,114,70,97,99,116,111,114,0,109,95,108,105,110,101,97,114,70,97,99, 111,99,105,116,121,0,109,95,97,110,103,117,108,97,114,70,97,99,116,111,
116,111,114,0,109,95,103,114,97,118,105,116,121,0,109,95,103,114,97,118, 114,0,109,95,108,105,110,101,97,114,70,97,99,116,111,114,0,109,95,103,
105,116,121,95,97,99,99,101,108,101,114,97,116,105,111,110,0,109,95,105, 114,97,118,105,116,121,0,109,95,103,114,97,118,105,116,121,95,97,99,99,
110,118,73,110,101,114,116,105,97,76,111,99,97,108,0,109,95,116,111,116, 101,108,101,114,97,116,105,111,110,0,109,95,105,110,118,73,110,101,114,116,
97,108,70,111,114,99,101,0,109,95,116,111,116,97,108,84,111,114,113,117, 105,97,76,111,99,97,108,0,109,95,116,111,116,97,108,70,111,114,99,101,
101,0,109,95,105,110,118,101,114,115,101,77,97,115,115,0,109,95,108,105, 0,109,95,116,111,116,97,108,84,111,114,113,117,101,0,109,95,105,110,118,
110,101,97,114,68,97,109,112,105,110,103,0,109,95,97,110,103,117,108,97, 101,114,115,101,77,97,115,115,0,109,95,108,105,110,101,97,114,68,97,109,
114,68,97,109,112,105,110,103,0,109,95,97,100,100,105,116,105,111,110,97, 112,105,110,103,0,109,95,97,110,103,117,108,97,114,68,97,109,112,105,110,
108,68,97,109,112,105,110,103,70,97,99,116,111,114,0,109,95,97,100,100, 103,0,109,95,97,100,100,105,116,105,111,110,97,108,68,97,109,112,105,110,
105,116,105,111,110,97,108,76,105,110,101,97,114,68,97,109,112,105,110,103, 103,70,97,99,116,111,114,0,109,95,97,100,100,105,116,105,111,110,97,108,
84,104,114,101,115,104,111,108,100,83,113,114,0,109,95,97,100,100,105,116, 76,105,110,101,97,114,68,97,109,112,105,110,103,84,104,114,101,115,104,111,
105,111,110,97,108,65,110,103,117,108,97,114,68,97,109,112,105,110,103,84, 108,100,83,113,114,0,109,95,97,100,100,105,116,105,111,110,97,108,65,110,
104,114,101,115,104,111,108,100,83,113,114,0,109,95,97,100,100,105,116,105, 103,117,108,97,114,68,97,109,112,105,110,103,84,104,114,101,115,104,111,108,
111,110,97,108,65,110,103,117,108,97,114,68,97,109,112,105,110,103,70,97, 100,83,113,114,0,109,95,97,100,100,105,116,105,111,110,97,108,65,110,103,
99,116,111,114,0,109,95,108,105,110,101,97,114,83,108,101,101,112,105,110, 117,108,97,114,68,97,109,112,105,110,103,70,97,99,116,111,114,0,109,95,
103,84,104,114,101,115,104,111,108,100,0,109,95,97,110,103,117,108,97,114, 108,105,110,101,97,114,83,108,101,101,112,105,110,103,84,104,114,101,115,104,
83,108,101,101,112,105,110,103,84,104,114,101,115,104,111,108,100,0,109,95, 111,108,100,0,109,95,97,110,103,117,108,97,114,83,108,101,101,112,105,110,
97,100,100,105,116,105,111,110,97,108,68,97,109,112,105,110,103,0,109,95, 103,84,104,114,101,115,104,111,108,100,0,109,95,97,100,100,105,116,105,111,
110,117,109,67,111,110,115,116,114,97,105,110,116,82,111,119,115,0,110,117, 110,97,108,68,97,109,112,105,110,103,0,109,95,110,117,109,67,111,110,115,
98,0,42,109,95,114,98,65,0,42,109,95,114,98,66,0,109,95,111,98, 116,114,97,105,110,116,82,111,119,115,0,110,117,98,0,42,109,95,114,98,
106,101,99,116,84,121,112,101,0,109,95,117,115,101,114,67,111,110,115,116, 65,0,42,109,95,114,98,66,0,109,95,111,98,106,101,99,116,84,121,112,
114,97,105,110,116,84,121,112,101,0,109,95,117,115,101,114,67,111,110,115, 101,0,109,95,117,115,101,114,67,111,110,115,116,114,97,105,110,116,84,121,
116,114,97,105,110,116,73,100,0,109,95,110,101,101,100,115,70,101,101,100, 112,101,0,109,95,117,115,101,114,67,111,110,115,116,114,97,105,110,116,73,
98,97,99,107,0,109,95,97,112,112,108,105,101,100,73,109,112,117,108,115, 100,0,109,95,110,101,101,100,115,70,101,101,100,98,97,99,107,0,109,95,
101,0,109,95,100,98,103,68,114,97,119,83,105,122,101,0,109,95,100,105, 97,112,112,108,105,101,100,73,109,112,117,108,115,101,0,109,95,100,98,103,
115,97,98,108,101,67,111,108,108,105,115,105,111,110,115,66,101,116,119,101, 68,114,97,119,83,105,122,101,0,109,95,100,105,115,97,98,108,101,67,111,
101,110,76,105,110,107,101,100,66,111,100,105,101,115,0,109,95,112,97,100, 108,108,105,115,105,111,110,115,66,101,116,119,101,101,110,76,105,110,107,101,
52,91,52,93,0,109,95,116,121,112,101,67,111,110,115,116,114,97,105,110, 100,66,111,100,105,101,115,0,109,95,112,97,100,52,91,52,93,0,109,95,
116,68,97,116,97,0,109,95,112,105,118,111,116,73,110,65,0,109,95,112, 116,121,112,101,67,111,110,115,116,114,97,105,110,116,68,97,116,97,0,109,
105,118,111,116,73,110,66,0,109,95,114,98,65,70,114,97,109,101,0,109, 95,112,105,118,111,116,73,110,65,0,109,95,112,105,118,111,116,73,110,66,
95,114,98,66,70,114,97,109,101,0,109,95,117,115,101,82,101,102,101,114, 0,109,95,114,98,65,70,114,97,109,101,0,109,95,114,98,66,70,114,97,
101,110,99,101,70,114,97,109,101,65,0,109,95,97,110,103,117,108,97,114, 109,101,0,109,95,117,115,101,82,101,102,101,114,101,110,99,101,70,114,97,
79,110,108,121,0,109,95,101,110,97,98,108,101,65,110,103,117,108,97,114, 109,101,65,0,109,95,97,110,103,117,108,97,114,79,110,108,121,0,109,95,
77,111,116,111,114,0,109,95,109,111,116,111,114,84,97,114,103,101,116,86, 101,110,97,98,108,101,65,110,103,117,108,97,114,77,111,116,111,114,0,109,
101,108,111,99,105,116,121,0,109,95,109,97,120,77,111,116,111,114,73,109, 95,109,111,116,111,114,84,97,114,103,101,116,86,101,108,111,99,105,116,121,
112,117,108,115,101,0,109,95,108,111,119,101,114,76,105,109,105,116,0,109, 0,109,95,109,97,120,77,111,116,111,114,73,109,112,117,108,115,101,0,109,
95,117,112,112,101,114,76,105,109,105,116,0,109,95,108,105,109,105,116,83, 95,108,111,119,101,114,76,105,109,105,116,0,109,95,117,112,112,101,114,76,
111,102,116,110,101,115,115,0,109,95,98,105,97,115,70,97,99,116,111,114, 105,109,105,116,0,109,95,108,105,109,105,116,83,111,102,116,110,101,115,115,
0,109,95,114,101,108,97,120,97,116,105,111,110,70,97,99,116,111,114,0, 0,109,95,98,105,97,115,70,97,99,116,111,114,0,109,95,114,101,108,97,
109,95,115,119,105,110,103,83,112,97,110,49,0,109,95,115,119,105,110,103, 120,97,116,105,111,110,70,97,99,116,111,114,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, 83,112,97,110,49,0,109,95,115,119,105,110,103,83,112,97,110,50,0,109,
100,97,109,112,105,110,103,0,109,95,108,105,110,101,97,114,85,112,112,101, 95,116,119,105,115,116,83,112,97,110,0,109,95,100,97,109,112,105,110,103,
114,76,105,109,105,116,0,109,95,108,105,110,101,97,114,76,111,119,101,114, 0,109,95,108,105,110,101,97,114,85,112,112,101,114,76,105,109,105,116,0,
76,105,109,105,116,0,109,95,97,110,103,117,108,97,114,85,112,112,101,114, 109,95,108,105,110,101,97,114,76,111,119,101,114,76,105,109,105,116,0,109,
76,105,109,105,116,0,109,95,97,110,103,117,108,97,114,76,111,119,101,114, 95,97,110,103,117,108,97,114,85,112,112,101,114,76,105,109,105,116,0,109,
76,105,109,105,116,0,109,95,117,115,101,76,105,110,101,97,114,82,101,102, 95,97,110,103,117,108,97,114,76,111,119,101,114,76,105,109,105,116,0,109,
101,114,101,110,99,101,70,114,97,109,101,65,0,109,95,117,115,101,79,102, 95,117,115,101,76,105,110,101,97,114,82,101,102,101,114,101,110,99,101,70,
102,115,101,116,70,111,114,67,111,110,115,116,114,97,105,110,116,70,114,97, 114,97,109,101,65,0,109,95,117,115,101,79,102,102,115,101,116,70,111,114,
109,101,0,0,84,89,80,69,57,0,0,0,99,104,97,114,0,117,99,104, 67,111,110,115,116,114,97,105,110,116,70,114,97,109,101,0,84,89,80,69,
97,114,0,115,104,111,114,116,0,117,115,104,111,114,116,0,105,110,116,0, 58,0,0,0,99,104,97,114,0,117,99,104,97,114,0,115,104,111,114,116,
108,111,110,103,0,117,108,111,110,103,0,102,108,111,97,116,0,100,111,117, 0,117,115,104,111,114,116,0,105,110,116,0,108,111,110,103,0,117,108,111,
98,108,101,0,118,111,105,100,0,80,111,105,110,116,101,114,65,114,114,97, 110,103,0,102,108,111,97,116,0,100,111,117,98,108,101,0,118,111,105,100,
121,0,98,116,80,104,121,115,105,99,115,83,121,115,116,101,109,0,76,105, 0,80,111,105,110,116,101,114,65,114,114,97,121,0,98,116,80,104,121,115,
115,116,66,97,115,101,0,98,116,86,101,99,116,111,114,51,70,108,111,97, 105,99,115,83,121,115,116,101,109,0,76,105,115,116,66,97,115,101,0,98,
116,68,97,116,97,0,98,116,86,101,99,116,111,114,51,68,111,117,98,108, 116,86,101,99,116,111,114,51,70,108,111,97,116,68,97,116,97,0,98,116,
101,68,97,116,97,0,98,116,77,97,116,114,105,120,51,120,51,70,108,111, 86,101,99,116,111,114,51,68,111,117,98,108,101,68,97,116,97,0,98,116,
97,116,68,97,116,97,0,98,116,77,97,116,114,105,120,51,120,51,68,111, 77,97,116,114,105,120,51,120,51,70,108,111,97,116,68,97,116,97,0,98,
117,98,108,101,68,97,116,97,0,98,116,84,114,97,110,115,102,111,114,109, 116,77,97,116,114,105,120,51,120,51,68,111,117,98,108,101,68,97,116,97,
70,108,111,97,116,68,97,116,97,0,98,116,84,114,97,110,115,102,111,114, 0,98,116,84,114,97,110,115,102,111,114,109,70,108,111,97,116,68,97,116,
109,68,111,117,98,108,101,68,97,116,97,0,98,116,66,118,104,83,117,98, 97,0,98,116,84,114,97,110,115,102,111,114,109,68,111,117,98,108,101,68,
116,114,101,101,73,110,102,111,68,97,116,97,0,98,116,79,112,116,105,109, 97,116,97,0,98,116,66,118,104,83,117,98,116,114,101,101,73,110,102,111,
105,122,101,100,66,118,104,78,111,100,101,70,108,111,97,116,68,97,116,97, 68,97,116,97,0,98,116,79,112,116,105,109,105,122,101,100,66,118,104,78,
0,98,116,79,112,116,105,109,105,122,101,100,66,118,104,78,111,100,101,68, 111,100,101,70,108,111,97,116,68,97,116,97,0,98,116,79,112,116,105,109,
111,117,98,108,101,68,97,116,97,0,98,116,81,117,97,110,116,105,122,101, 105,122,101,100,66,118,104,78,111,100,101,68,111,117,98,108,101,68,97,116,
100,66,118,104,78,111,100,101,68,97,116,97,0,98,116,81,117,97,110,116, 97,0,98,116,81,117,97,110,116,105,122,101,100,66,118,104,78,111,100,101,
105,122,101,100,66,118,104,70,108,111,97,116,68,97,116,97,0,98,116,81, 68,97,116,97,0,98,116,81,117,97,110,116,105,122,101,100,66,118,104,70,
117,97,110,116,105,122,101,100,66,118,104,68,111,117,98,108,101,68,97,116, 108,111,97,116,68,97,116,97,0,98,116,81,117,97,110,116,105,122,101,100,
97,0,98,116,67,111,108,108,105,115,105,111,110,83,104,97,112,101,68,97, 66,118,104,68,111,117,98,108,101,68,97,116,97,0,98,116,67,111,108,108,
116,97,0,98,116,83,116,97,116,105,99,80,108,97,110,101,83,104,97,112, 105,115,105,111,110,83,104,97,112,101,68,97,116,97,0,98,116,83,116,97,
101,68,97,116,97,0,98,116,67,111,110,118,101,120,73,110,116,101,114,110, 116,105,99,80,108,97,110,101,83,104,97,112,101,68,97,116,97,0,98,116,
97,108,83,104,97,112,101,68,97,116,97,0,98,116,80,111,115,105,116,105, 67,111,110,118,101,120,73,110,116,101,114,110,97,108,83,104,97,112,101,68,
111,110,65,110,100,82,97,100,105,117,115,0,98,116,77,117,108,116,105,83, 97,116,97,0,98,116,80,111,115,105,116,105,111,110,65,110,100,82,97,100,
112,104,101,114,101,83,104,97,112,101,68,97,116,97,0,98,116,73,110,116, 105,117,115,0,98,116,77,117,108,116,105,83,112,104,101,114,101,83,104,97,
73,110,100,101,120,68,97,116,97,0,98,116,83,104,111,114,116,73,110,116, 112,101,68,97,116,97,0,98,116,73,110,116,73,110,100,101,120,68,97,116,
73,110,100,101,120,84,114,105,112,108,101,116,68,97,116,97,0,98,116,77, 97,0,98,116,83,104,111,114,116,73,110,116,73,110,100,101,120,68,97,116,
101,115,104,80,97,114,116,68,97,116,97,0,98,116,83,116,114,105,100,105, 97,0,98,116,83,104,111,114,116,73,110,116,73,110,100,101,120,84,114,105,
110,103,77,101,115,104,73,110,116,101,114,102,97,99,101,68,97,116,97,0, 112,108,101,116,68,97,116,97,0,98,116,77,101,115,104,80,97,114,116,68,
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,83,116,114,105,100,105,110,103,77,101,115,104,73,110,
97,116,97,0,98,116,84,114,105,97,110,103,108,101,73,110,102,111,77,97, 116,101,114,102,97,99,101,68,97,116,97,0,98,116,84,114,105,97,110,103,
112,68,97,116,97,0,98,116,67,111,109,112,111,117,110,100,83,104,97,112, 108,101,77,101,115,104,83,104,97,112,101,68,97,116,97,0,98,116,84,114,
101,67,104,105,108,100,68,97,116,97,0,98,116,67,111,109,112,111,117,110, 105,97,110,103,108,101,73,110,102,111,77,97,112,68,97,116,97,0,98,116,
100,83,104,97,112,101,68,97,116,97,0,98,116,67,121,108,105,110,100,101, 67,111,109,112,111,117,110,100,83,104,97,112,101,67,104,105,108,100,68,97,
114,83,104,97,112,101,68,97,116,97,0,98,116,67,97,112,115,117,108,101, 116,97,0,98,116,67,111,109,112,111,117,110,100,83,104,97,112,101,68,97,
83,104,97,112,101,68,97,116,97,0,98,116,84,114,105,97,110,103,108,101, 116,97,0,98,116,67,121,108,105,110,100,101,114,83,104,97,112,101,68,97,
73,110,102,111,68,97,116,97,0,98,116,71,73,109,112,97,99,116,77,101, 116,97,0,98,116,67,97,112,115,117,108,101,83,104,97,112,101,68,97,116,
115,104,83,104,97,112,101,68,97,116,97,0,98,116,67,111,110,118,101,120, 97,0,98,116,84,114,105,97,110,103,108,101,73,110,102,111,68,97,116,97,
72,117,108,108,83,104,97,112,101,68,97,116,97,0,98,116,67,111,108,108, 0,98,116,71,73,109,112,97,99,116,77,101,115,104,83,104,97,112,101,68,
105,115,105,111,110,79,98,106,101,99,116,68,111,117,98,108,101,68,97,116, 97,116,97,0,98,116,67,111,110,118,101,120,72,117,108,108,83,104,97,112,
97,0,98,116,67,111,108,108,105,115,105,111,110,79,98,106,101,99,116,70, 101,68,97,116,97,0,98,116,67,111,108,108,105,115,105,111,110,79,98,106,
108,111,97,116,68,97,116,97,0,98,116,82,105,103,105,100,66,111,100,121, 101,99,116,68,111,117,98,108,101,68,97,116,97,0,98,116,67,111,108,108,
70,108,111,97,116,68,97,116,97,0,98,116,82,105,103,105,100,66,111,100, 105,115,105,111,110,79,98,106,101,99,116,70,108,111,97,116,68,97,116,97,
121,68,111,117,98,108,101,68,97,116,97,0,98,116,67,111,110,115,116,114, 0,98,116,82,105,103,105,100,66,111,100,121,70,108,111,97,116,68,97,116,
97,105,110,116,73,110,102,111,49,0,98,116,84,121,112,101,100,67,111,110, 97,0,98,116,82,105,103,105,100,66,111,100,121,68,111,117,98,108,101,68,
115,116,114,97,105,110,116,68,97,116,97,0,98,116,82,105,103,105,100,66, 97,116,97,0,98,116,67,111,110,115,116,114,97,105,110,116,73,110,102,111,
111,100,121,68,97,116,97,0,98,116,80,111,105,110,116,50,80,111,105,110, 49,0,98,116,84,121,112,101,100,67,111,110,115,116,114,97,105,110,116,68,
116,67,111,110,115,116,114,97,105,110,116,70,108,111,97,116,68,97,116,97, 97,116,97,0,98,116,82,105,103,105,100,66,111,100,121,68,97,116,97,0,
0,98,116,80,111,105,110,116,50,80,111,105,110,116,67,111,110,115,116,114, 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, 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, 103,101,67,111,110,115,116,114,97,105,110,116,70,108,111,97,116,68,97,116,
116,97,0,98,116,72,105,110,103,101,67,111,110,115,116,114,97,105,110,116, 97,0,98,116,67,111,110,101,84,119,105,115,116,67,111,110,115,116,114,97,
70,108,111,97,116,68,97,116,97,0,98,116,67,111,110,101,84,119,105,115, 105,110,116,68,97,116,97,0,98,116,71,101,110,101,114,105,99,54,68,111,
116,67,111,110,115,116,114,97,105,110,116,68,97,116,97,0,98,116,71,101, 102,67,111,110,115,116,114,97,105,110,116,68,97,116,97,0,98,116,83,108,
110,101,114,105,99,54,68,111,102,67,111,110,115,116,114,97,105,110,116,68, 105,100,101,114,67,111,110,115,116,114,97,105,110,116,68,97,116,97,0,0,
97,116,97,0,98,116,83,108,105,100,101,114,67,111,110,115,116,114,97,105, 84,76,69,78,1,0,1,0,2,0,2,0,4,0,4,0,4,0,4,0,
110,116,68,97,116,97,0,0,84,76,69,78,1,0,1,0,2,0,2,0, 8,0,0,0,16,0,48,0,16,0,16,0,32,0,48,0,96,0,64,0,
4,0,4,0,4,0,4,0,8,0,0,0,16,0,48,0,16,0,16,0, -128,0,20,0,48,0,80,0,16,0,96,0,-112,0,16,0,56,0,56,0,
32,0,48,0,96,0,64,0,-128,0,20,0,48,0,80,0,16,0,96,0, 20,0,72,0,4,0,4,0,8,0,48,0,32,0,80,0,72,0,80,0,
-112,0,16,0,56,0,56,0,20,0,72,0,4,0,8,0,40,0,32,0, 32,0,64,0,64,0,16,0,72,0,80,0,-40,1,8,1,-16,1,-88,3,
80,0,72,0,80,0,32,0,64,0,64,0,16,0,72,0,80,0,-40,1, 8,0,56,0,0,0,88,0,120,0,96,1,-32,0,-40,0,0,1,-48,0,
8,1,-16,1,-88,3,8,0,56,0,0,0,88,0,120,0,96,1,-32,0, 83,84,82,67,47,0,0,0,10,0,3,0,4,0,0,0,4,0,1,0,
-40,0,0,1,-48,0,0,0,83,84,82,67,46,0,0,0,10,0,3,0, 9,0,2,0,11,0,3,0,10,0,3,0,10,0,4,0,10,0,5,0,
4,0,0,0,4,0,1,0,9,0,2,0,11,0,3,0,10,0,3,0, 12,0,2,0,9,0,6,0,9,0,7,0,13,0,1,0,7,0,8,0,
10,0,4,0,10,0,5,0,12,0,2,0,9,0,6,0,9,0,7,0, 14,0,1,0,8,0,8,0,15,0,1,0,13,0,9,0,16,0,1,0,
13,0,1,0,7,0,8,0,14,0,1,0,8,0,8,0,15,0,1,0, 14,0,9,0,17,0,2,0,15,0,10,0,13,0,11,0,18,0,2,0,
13,0,9,0,16,0,1,0,14,0,9,0,17,0,2,0,15,0,10,0, 16,0,10,0,14,0,11,0,19,0,4,0,4,0,12,0,4,0,13,0,
13,0,11,0,18,0,2,0,16,0,10,0,14,0,11,0,19,0,4,0, 2,0,14,0,2,0,15,0,20,0,6,0,13,0,16,0,13,0,17,0,
4,0,12,0,4,0,13,0,2,0,14,0,2,0,15,0,20,0,6,0, 4,0,18,0,4,0,19,0,4,0,20,0,0,0,21,0,21,0,6,0,
13,0,16,0,13,0,17,0,4,0,18,0,4,0,19,0,4,0,20,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,21,0,6,0,14,0,16,0,14,0,17,0,4,0,18,0, 0,0,21,0,22,0,3,0,2,0,14,0,2,0,15,0,4,0,22,0,
4,0,19,0,4,0,20,0,0,0,21,0,22,0,3,0,2,0,14,0, 23,0,12,0,13,0,23,0,13,0,24,0,13,0,25,0,4,0,26,0,
2,0,15,0,4,0,22,0,23,0,12,0,13,0,23,0,13,0,24,0, 4,0,27,0,4,0,28,0,4,0,29,0,20,0,30,0,22,0,31,0,
13,0,25,0,4,0,26,0,4,0,27,0,4,0,28,0,4,0,29,0, 19,0,32,0,4,0,33,0,4,0,34,0,24,0,12,0,14,0,23,0,
20,0,30,0,22,0,31,0,19,0,32,0,4,0,33,0,4,0,34,0, 14,0,24,0,14,0,25,0,4,0,26,0,4,0,27,0,4,0,28,0,
24,0,12,0,14,0,23,0,14,0,24,0,14,0,25,0,4,0,26,0, 4,0,29,0,21,0,30,0,22,0,31,0,4,0,33,0,4,0,34,0,
4,0,27,0,4,0,28,0,4,0,29,0,21,0,30,0,22,0,31,0, 19,0,32,0,25,0,3,0,0,0,35,0,4,0,36,0,0,0,37,0,
4,0,33,0,4,0,34,0,19,0,32,0,25,0,3,0,0,0,35,0, 26,0,5,0,25,0,38,0,13,0,39,0,13,0,40,0,7,0,41,0,
4,0,36,0,0,0,37,0,26,0,5,0,25,0,38,0,13,0,39,0, 0,0,21,0,27,0,5,0,25,0,38,0,13,0,39,0,13,0,42,0,
13,0,40,0,7,0,41,0,0,0,21,0,27,0,5,0,25,0,38,0, 7,0,43,0,4,0,44,0,28,0,2,0,13,0,45,0,7,0,46,0,
13,0,39,0,13,0,42,0,7,0,43,0,4,0,44,0,28,0,2,0, 29,0,4,0,27,0,47,0,28,0,48,0,4,0,49,0,0,0,37,0,
13,0,45,0,7,0,46,0,29,0,4,0,27,0,47,0,28,0,48,0, 30,0,1,0,4,0,50,0,31,0,2,0,2,0,50,0,0,0,51,0,
4,0,49,0,0,0,37,0,30,0,1,0,4,0,50,0,31,0,2,0, 32,0,2,0,2,0,52,0,0,0,51,0,33,0,7,0,13,0,53,0,
2,0,51,0,0,0,52,0,32,0,6,0,13,0,53,0,14,0,54,0, 14,0,54,0,30,0,55,0,32,0,56,0,31,0,57,0,4,0,58,0,
30,0,55,0,31,0,56,0,4,0,57,0,4,0,58,0,33,0,4,0, 4,0,59,0,34,0,4,0,33,0,60,0,13,0,61,0,4,0,62,0,
32,0,59,0,13,0,60,0,4,0,61,0,0,0,37,0,34,0,7,0, 0,0,37,0,35,0,7,0,25,0,38,0,34,0,63,0,23,0,64,0,
25,0,38,0,33,0,62,0,23,0,63,0,24,0,64,0,35,0,65,0, 24,0,65,0,36,0,66,0,7,0,43,0,0,0,67,0,37,0,4,0,
7,0,43,0,0,0,66,0,36,0,4,0,17,0,67,0,25,0,68,0, 17,0,68,0,25,0,69,0,4,0,70,0,7,0,71,0,38,0,4,0,
4,0,69,0,7,0,70,0,37,0,4,0,25,0,38,0,36,0,71,0, 25,0,38,0,37,0,72,0,4,0,73,0,7,0,43,0,39,0,3,0,
4,0,72,0,7,0,43,0,38,0,3,0,27,0,47,0,4,0,73,0, 27,0,47,0,4,0,74,0,0,0,37,0,40,0,3,0,27,0,47,0,
0,0,37,0,39,0,3,0,27,0,47,0,4,0,73,0,0,0,37,0, 4,0,74,0,0,0,37,0,41,0,4,0,4,0,75,0,7,0,76,0,
40,0,4,0,4,0,74,0,7,0,75,0,7,0,76,0,7,0,77,0, 7,0,77,0,7,0,78,0,36,0,14,0,4,0,79,0,4,0,80,0,
35,0,14,0,4,0,78,0,4,0,79,0,40,0,80,0,4,0,81,0, 41,0,81,0,4,0,82,0,7,0,83,0,7,0,84,0,7,0,85,0,
7,0,82,0,7,0,83,0,7,0,84,0,7,0,85,0,7,0,86,0, 7,0,86,0,7,0,87,0,4,0,88,0,4,0,89,0,4,0,90,0,
4,0,87,0,4,0,88,0,4,0,89,0,4,0,90,0,0,0,37,0, 4,0,91,0,0,0,37,0,42,0,5,0,25,0,38,0,34,0,63,0,
41,0,5,0,25,0,38,0,33,0,62,0,13,0,39,0,7,0,43,0, 13,0,39,0,7,0,43,0,4,0,92,0,43,0,5,0,27,0,47,0,
4,0,91,0,42,0,5,0,27,0,47,0,13,0,92,0,14,0,93,0, 13,0,93,0,14,0,94,0,4,0,95,0,0,0,96,0,44,0,24,0,
4,0,94,0,0,0,95,0,43,0,24,0,9,0,96,0,9,0,97,0, 9,0,97,0,9,0,98,0,25,0,99,0,0,0,35,0,18,0,100,0,
25,0,98,0,0,0,35,0,18,0,99,0,18,0,100,0,14,0,101,0, 18,0,101,0,14,0,102,0,14,0,103,0,14,0,104,0,8,0,105,0,
14,0,102,0,14,0,103,0,8,0,104,0,8,0,105,0,8,0,106,0, 8,0,106,0,8,0,107,0,8,0,108,0,8,0,109,0,8,0,110,0,
8,0,107,0,8,0,108,0,8,0,109,0,8,0,110,0,4,0,111,0, 8,0,111,0,4,0,112,0,4,0,113,0,4,0,114,0,4,0,115,0,
4,0,112,0,4,0,113,0,4,0,114,0,4,0,115,0,4,0,116,0, 4,0,116,0,4,0,117,0,4,0,118,0,0,0,37,0,45,0,23,0,
4,0,117,0,0,0,37,0,44,0,23,0,9,0,96,0,9,0,97,0, 9,0,97,0,9,0,98,0,25,0,99,0,0,0,35,0,17,0,100,0,
25,0,98,0,0,0,35,0,17,0,99,0,17,0,100,0,13,0,101,0, 17,0,101,0,13,0,102,0,13,0,103,0,13,0,104,0,7,0,105,0,
13,0,102,0,13,0,103,0,7,0,104,0,7,0,105,0,7,0,106,0, 7,0,106,0,7,0,107,0,7,0,108,0,7,0,109,0,7,0,110,0,
7,0,107,0,7,0,108,0,7,0,109,0,7,0,110,0,4,0,111,0, 7,0,111,0,4,0,112,0,4,0,113,0,4,0,114,0,4,0,115,0,
4,0,112,0,4,0,113,0,4,0,114,0,4,0,115,0,4,0,116,0, 4,0,116,0,4,0,117,0,4,0,118,0,46,0,21,0,45,0,119,0,
4,0,117,0,45,0,21,0,44,0,118,0,15,0,119,0,13,0,120,0, 15,0,120,0,13,0,121,0,13,0,122,0,13,0,123,0,13,0,124,0,
13,0,121,0,13,0,122,0,13,0,123,0,13,0,124,0,13,0,125,0, 13,0,125,0,13,0,126,0,13,0,127,0,13,0,-128,0,13,0,-127,0,
13,0,126,0,13,0,127,0,13,0,-128,0,7,0,-127,0,7,0,-126,0, 7,0,-126,0,7,0,-125,0,7,0,-124,0,7,0,-123,0,7,0,-122,0,
7,0,-125,0,7,0,-124,0,7,0,-123,0,7,0,-122,0,7,0,-121,0, 7,0,-121,0,7,0,-120,0,7,0,-119,0,7,0,-118,0,4,0,-117,0,
7,0,-120,0,7,0,-119,0,4,0,-118,0,46,0,22,0,43,0,118,0, 47,0,22,0,44,0,119,0,16,0,120,0,14,0,121,0,14,0,122,0,
16,0,119,0,14,0,120,0,14,0,121,0,14,0,122,0,14,0,123,0, 14,0,123,0,14,0,124,0,14,0,125,0,14,0,126,0,14,0,127,0,
14,0,124,0,14,0,125,0,14,0,126,0,14,0,127,0,14,0,-128,0, 14,0,-128,0,14,0,-127,0,8,0,-126,0,8,0,-125,0,8,0,-124,0,
8,0,-127,0,8,0,-126,0,8,0,-125,0,8,0,-124,0,8,0,-123,0, 8,0,-123,0,8,0,-122,0,8,0,-121,0,8,0,-120,0,8,0,-119,0,
8,0,-122,0,8,0,-121,0,8,0,-120,0,8,0,-119,0,4,0,-118,0, 8,0,-118,0,4,0,-117,0,0,0,37,0,48,0,2,0,4,0,-116,0,
0,0,37,0,47,0,2,0,4,0,-117,0,4,0,-116,0,48,0,11,0, 4,0,-115,0,49,0,11,0,50,0,-114,0,50,0,-113,0,0,0,35,0,
49,0,-115,0,49,0,-114,0,0,0,35,0,4,0,-113,0,4,0,-112,0, 4,0,-112,0,4,0,-111,0,4,0,-110,0,4,0,-109,0,7,0,-108,0,
4,0,-111,0,4,0,-110,0,7,0,-109,0,7,0,-108,0,4,0,-107,0, 7,0,-107,0,4,0,-106,0,0,0,-105,0,51,0,3,0,49,0,-104,0,
0,0,-106,0,50,0,3,0,48,0,-105,0,13,0,-104,0,13,0,-103,0, 13,0,-103,0,13,0,-102,0,52,0,3,0,49,0,-104,0,14,0,-103,0,
51,0,3,0,48,0,-105,0,14,0,-104,0,14,0,-103,0,52,0,13,0, 14,0,-102,0,53,0,13,0,49,0,-104,0,18,0,-101,0,18,0,-100,0,
48,0,-105,0,18,0,-102,0,18,0,-101,0,4,0,-100,0,4,0,-99,0, 4,0,-99,0,4,0,-98,0,4,0,-97,0,7,0,-96,0,7,0,-95,0,
4,0,-98,0,7,0,-97,0,7,0,-96,0,7,0,-95,0,7,0,-94,0, 7,0,-94,0,7,0,-93,0,7,0,-92,0,7,0,-91,0,7,0,-90,0,
7,0,-93,0,7,0,-92,0,7,0,-91,0,53,0,13,0,48,0,-105,0, 54,0,13,0,49,0,-104,0,17,0,-101,0,17,0,-100,0,4,0,-99,0,
17,0,-102,0,17,0,-101,0,4,0,-100,0,4,0,-99,0,4,0,-98,0, 4,0,-98,0,4,0,-97,0,7,0,-96,0,7,0,-95,0,7,0,-94,0,
7,0,-97,0,7,0,-96,0,7,0,-95,0,7,0,-94,0,7,0,-93,0, 7,0,-93,0,7,0,-92,0,7,0,-91,0,7,0,-90,0,55,0,11,0,
7,0,-92,0,7,0,-91,0,54,0,11,0,48,0,-105,0,17,0,-102,0, 49,0,-104,0,17,0,-101,0,17,0,-100,0,7,0,-89,0,7,0,-88,0,
17,0,-101,0,7,0,-90,0,7,0,-89,0,7,0,-88,0,7,0,-93,0, 7,0,-87,0,7,0,-92,0,7,0,-91,0,7,0,-90,0,7,0,-86,0,
7,0,-92,0,7,0,-91,0,7,0,-87,0,0,0,21,0,55,0,9,0, 0,0,21,0,56,0,9,0,49,0,-104,0,17,0,-101,0,17,0,-100,0,
48,0,-105,0,17,0,-102,0,17,0,-101,0,13,0,-86,0,13,0,-85,0, 13,0,-85,0,13,0,-84,0,13,0,-83,0,13,0,-82,0,4,0,-81,0,
13,0,-84,0,13,0,-83,0,4,0,-82,0,4,0,-81,0,56,0,9,0, 4,0,-80,0,57,0,9,0,49,0,-104,0,17,0,-101,0,17,0,-100,0,
48,0,-105,0,17,0,-102,0,17,0,-101,0,7,0,-86,0,7,0,-85,0, 7,0,-85,0,7,0,-84,0,7,0,-83,0,7,0,-82,0,4,0,-81,0,
7,0,-84,0,7,0,-83,0,4,0,-82,0,4,0,-81,0,}; 4,0,-80,0,};
int sBulletDNAlen64= sizeof(sBulletDNAstr64); int sBulletDNAlen64= sizeof(sBulletDNAstr64);
unsigned char sBulletDNAstr[]= { unsigned char sBulletDNAstr[]= {
83,68,78,65,78,65,77,69,-80,0,0,0,109,95,115,105,122,101,0,109, 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, 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, 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, 108,108,105,115,105,111,110,79,98,106,101,99,116,115,0,109,95,99,111,110,
@@ -325,247 +328,250 @@ unsigned char sBulletDNAstr[]= {
83,104,97,112,101,68,97,116,97,0,42,109,95,108,111,99,97,108,80,111, 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, 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, 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,118,97,108,117,101,115,91,51,93,0, 109,95,118,97,108,117,101,0,109,95,112,97,100,91,50,93,0,109,95,118,
109,95,112,97,100,91,50,93,0,42,109,95,118,101,114,116,105,99,101,115, 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, 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, 105,110,100,105,99,101,115,51,50,0,42,109,95,51,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, 115,49,54,0,42,109,95,105,110,100,105,99,101,115,49,54,0,109,95,110,
95,110,117,109,86,101,114,116,105,99,101,115,0,42,109,95,109,101,115,104, 117,109,84,114,105,97,110,103,108,101,115,0,109,95,110,117,109,86,101,114,
80,97,114,116,115,80,116,114,0,109,95,115,99,97,108,105,110,103,0,109, 116,105,99,101,115,0,42,109,95,109,101,115,104,80,97,114,116,115,80,116,
95,110,117,109,77,101,115,104,80,97,114,116,115,0,109,95,109,101,115,104, 114,0,109,95,115,99,97,108,105,110,103,0,109,95,110,117,109,77,101,115,
73,110,116,101,114,102,97,99,101,0,42,109,95,113,117,97,110,116,105,122, 104,80,97,114,116,115,0,109,95,109,101,115,104,73,110,116,101,114,102,97,
101,100,70,108,111,97,116,66,118,104,0,42,109,95,113,117,97,110,116,105, 99,101,0,42,109,95,113,117,97,110,116,105,122,101,100,70,108,111,97,116,
122,101,100,68,111,117,98,108,101,66,118,104,0,42,109,95,116,114,105,97, 66,118,104,0,42,109,95,113,117,97,110,116,105,122,101,100,68,111,117,98,
110,103,108,101,73,110,102,111,77,97,112,0,109,95,112,97,100,51,91,52, 108,101,66,118,104,0,42,109,95,116,114,105,97,110,103,108,101,73,110,102,
93,0,109,95,116,114,97,110,115,102,111,114,109,0,42,109,95,99,104,105, 111,77,97,112,0,109,95,112,97,100,51,91,52,93,0,109,95,116,114,97,
108,100,83,104,97,112,101,0,109,95,99,104,105,108,100,83,104,97,112,101, 110,115,102,111,114,109,0,42,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, 0,109,95,99,104,105,108,100,83,104,97,112,101,84,121,112,101,0,109,95,
109,95,99,104,105,108,100,83,104,97,112,101,80,116,114,0,109,95,110,117, 99,104,105,108,100,77,97,114,103,105,110,0,42,109,95,99,104,105,108,100,
109,67,104,105,108,100,83,104,97,112,101,115,0,109,95,117,112,65,120,105, 83,104,97,112,101,80,116,114,0,109,95,110,117,109,67,104,105,108,100,83,
115,0,109,95,102,108,97,103,115,0,109,95,101,100,103,101,86,48,86,49, 104,97,112,101,115,0,109,95,117,112,65,120,105,115,0,109,95,102,108,97,
65,110,103,108,101,0,109,95,101,100,103,101,86,49,86,50,65,110,103,108, 103,115,0,109,95,101,100,103,101,86,48,86,49,65,110,103,108,101,0,109,
101,0,109,95,101,100,103,101,86,50,86,48,65,110,103,108,101,0,42,109, 95,101,100,103,101,86,49,86,50,65,110,103,108,101,0,109,95,101,100,103,
95,104,97,115,104,84,97,98,108,101,80,116,114,0,42,109,95,110,101,120, 101,86,50,86,48,65,110,103,108,101,0,42,109,95,104,97,115,104,84,97,
116,80,116,114,0,42,109,95,118,97,108,117,101,65,114,114,97,121,80,116, 98,108,101,80,116,114,0,42,109,95,110,101,120,116,80,116,114,0,42,109,
114,0,42,109,95,107,101,121,65,114,114,97,121,80,116,114,0,109,95,99, 95,118,97,108,117,101,65,114,114,97,121,80,116,114,0,42,109,95,107,101,
111,110,118,101,120,69,112,115,105,108,111,110,0,109,95,112,108,97,110,97, 121,65,114,114,97,121,80,116,114,0,109,95,99,111,110,118,101,120,69,112,
114,69,112,115,105,108,111,110,0,109,95,101,113,117,97,108,86,101,114,116, 115,105,108,111,110,0,109,95,112,108,97,110,97,114,69,112,115,105,108,111,
101,120,84,104,114,101,115,104,111,108,100,0,109,95,101,100,103,101,68,105, 110,0,109,95,101,113,117,97,108,86,101,114,116,101,120,84,104,114,101,115,
115,116,97,110,99,101,84,104,114,101,115,104,111,108,100,0,109,95,122,101, 104,111,108,100,0,109,95,101,100,103,101,68,105,115,116,97,110,99,101,84,
114,111,65,114,101,97,84,104,114,101,115,104,111,108,100,0,109,95,110,101, 104,114,101,115,104,111,108,100,0,109,95,122,101,114,111,65,114,101,97,84,
120,116,83,105,122,101,0,109,95,104,97,115,104,84,97,98,108,101,83,105, 104,114,101,115,104,111,108,100,0,109,95,110,101,120,116,83,105,122,101,0,
122,101,0,109,95,110,117,109,86,97,108,117,101,115,0,109,95,110,117,109, 109,95,104,97,115,104,84,97,98,108,101,83,105,122,101,0,109,95,110,117,
75,101,121,115,0,109,95,103,105,109,112,97,99,116,83,117,98,84,121,112, 109,86,97,108,117,101,115,0,109,95,110,117,109,75,101,121,115,0,109,95,
101,0,42,109,95,117,110,115,99,97,108,101,100,80,111,105,110,116,115,70, 103,105,109,112,97,99,116,83,117,98,84,121,112,101,0,42,109,95,117,110,
108,111,97,116,80,116,114,0,42,109,95,117,110,115,99,97,108,101,100,80, 115,99,97,108,101,100,80,111,105,110,116,115,70,108,111,97,116,80,116,114,
111,105,110,116,115,68,111,117,98,108,101,80,116,114,0,109,95,110,117,109, 0,42,109,95,117,110,115,99,97,108,101,100,80,111,105,110,116,115,68,111,
85,110,115,99,97,108,101,100,80,111,105,110,116,115,0,109,95,112,97,100, 117,98,108,101,80,116,114,0,109,95,110,117,109,85,110,115,99,97,108,101,
100,105,110,103,51,91,52,93,0,42,109,95,98,114,111,97,100,112,104,97, 100,80,111,105,110,116,115,0,109,95,112,97,100,100,105,110,103,51,91,52,
115,101,72,97,110,100,108,101,0,42,109,95,99,111,108,108,105,115,105,111, 93,0,42,109,95,98,114,111,97,100,112,104,97,115,101,72,97,110,100,108,
110,83,104,97,112,101,0,42,109,95,114,111,111,116,67,111,108,108,105,115, 101,0,42,109,95,99,111,108,108,105,115,105,111,110,83,104,97,112,101,0,
105,111,110,83,104,97,112,101,0,109,95,119,111,114,108,100,84,114,97,110, 42,109,95,114,111,111,116,67,111,108,108,105,115,105,111,110,83,104,97,112,
115,102,111,114,109,0,109,95,105,110,116,101,114,112,111,108,97,116,105,111, 101,0,109,95,119,111,114,108,100,84,114,97,110,115,102,111,114,109,0,109,
110,87,111,114,108,100,84,114,97,110,115,102,111,114,109,0,109,95,105,110, 95,105,110,116,101,114,112,111,108,97,116,105,111,110,87,111,114,108,100,84,
116,101,114,112,111,108,97,116,105,111,110,76,105,110,101,97,114,86,101,108, 114,97,110,115,102,111,114,109,0,109,95,105,110,116,101,114,112,111,108,97,
111,99,105,116,121,0,109,95,105,110,116,101,114,112,111,108,97,116,105,111, 116,105,111,110,76,105,110,101,97,114,86,101,108,111,99,105,116,121,0,109,
110,65,110,103,117,108,97,114,86,101,108,111,99,105,116,121,0,109,95,97, 95,105,110,116,101,114,112,111,108,97,116,105,111,110,65,110,103,117,108,97,
110,105,115,111,116,114,111,112,105,99,70,114,105,99,116,105,111,110,0,109, 114,86,101,108,111,99,105,116,121,0,109,95,97,110,105,115,111,116,114,111,
95,99,111,110,116,97,99,116,80,114,111,99,101,115,115,105,110,103,84,104, 112,105,99,70,114,105,99,116,105,111,110,0,109,95,99,111,110,116,97,99,
114,101,115,104,111,108,100,0,109,95,100,101,97,99,116,105,118,97,116,105, 116,80,114,111,99,101,115,115,105,110,103,84,104,114,101,115,104,111,108,100,
111,110,84,105,109,101,0,109,95,102,114,105,99,116,105,111,110,0,109,95, 0,109,95,100,101,97,99,116,105,118,97,116,105,111,110,84,105,109,101,0,
114,101,115,116,105,116,117,116,105,111,110,0,109,95,104,105,116,70,114,97, 109,95,102,114,105,99,116,105,111,110,0,109,95,114,101,115,116,105,116,117,
99,116,105,111,110,0,109,95,99,99,100,83,119,101,112,116,83,112,104,101, 116,105,111,110,0,109,95,104,105,116,70,114,97,99,116,105,111,110,0,109,
114,101,82,97,100,105,117,115,0,109,95,99,99,100,77,111,116,105,111,110, 95,99,99,100,83,119,101,112,116,83,112,104,101,114,101,82,97,100,105,117,
84,104,114,101,115,104,111,108,100,0,109,95,104,97,115,65,110,105,115,111, 115,0,109,95,99,99,100,77,111,116,105,111,110,84,104,114,101,115,104,111,
116,114,111,112,105,99,70,114,105,99,116,105,111,110,0,109,95,99,111,108, 108,100,0,109,95,104,97,115,65,110,105,115,111,116,114,111,112,105,99,70,
108,105,115,105,111,110,70,108,97,103,115,0,109,95,105,115,108,97,110,100, 114,105,99,116,105,111,110,0,109,95,99,111,108,108,105,115,105,111,110,70,
84,97,103,49,0,109,95,99,111,109,112,97,110,105,111,110,73,100,0,109, 108,97,103,115,0,109,95,105,115,108,97,110,100,84,97,103,49,0,109,95,
95,97,99,116,105,118,97,116,105,111,110,83,116,97,116,101,49,0,109,95, 99,111,109,112,97,110,105,111,110,73,100,0,109,95,97,99,116,105,118,97,
105,110,116,101,114,110,97,108,84,121,112,101,0,109,95,99,104,101,99,107, 116,105,111,110,83,116,97,116,101,49,0,109,95,105,110,116,101,114,110,97,
67,111,108,108,105,100,101,87,105,116,104,0,109,95,99,111,108,108,105,115, 108,84,121,112,101,0,109,95,99,104,101,99,107,67,111,108,108,105,100,101,
105,111,110,79,98,106,101,99,116,68,97,116,97,0,109,95,105,110,118,73, 87,105,116,104,0,109,95,99,111,108,108,105,115,105,111,110,79,98,106,101,
110,101,114,116,105,97,84,101,110,115,111,114,87,111,114,108,100,0,109,95, 99,116,68,97,116,97,0,109,95,105,110,118,73,110,101,114,116,105,97,84,
108,105,110,101,97,114,86,101,108,111,99,105,116,121,0,109,95,97,110,103, 101,110,115,111,114,87,111,114,108,100,0,109,95,108,105,110,101,97,114,86,
117,108,97,114,86,101,108,111,99,105,116,121,0,109,95,97,110,103,117,108, 101,108,111,99,105,116,121,0,109,95,97,110,103,117,108,97,114,86,101,108,
97,114,70,97,99,116,111,114,0,109,95,108,105,110,101,97,114,70,97,99, 111,99,105,116,121,0,109,95,97,110,103,117,108,97,114,70,97,99,116,111,
116,111,114,0,109,95,103,114,97,118,105,116,121,0,109,95,103,114,97,118, 114,0,109,95,108,105,110,101,97,114,70,97,99,116,111,114,0,109,95,103,
105,116,121,95,97,99,99,101,108,101,114,97,116,105,111,110,0,109,95,105, 114,97,118,105,116,121,0,109,95,103,114,97,118,105,116,121,95,97,99,99,
110,118,73,110,101,114,116,105,97,76,111,99,97,108,0,109,95,116,111,116, 101,108,101,114,97,116,105,111,110,0,109,95,105,110,118,73,110,101,114,116,
97,108,70,111,114,99,101,0,109,95,116,111,116,97,108,84,111,114,113,117, 105,97,76,111,99,97,108,0,109,95,116,111,116,97,108,70,111,114,99,101,
101,0,109,95,105,110,118,101,114,115,101,77,97,115,115,0,109,95,108,105, 0,109,95,116,111,116,97,108,84,111,114,113,117,101,0,109,95,105,110,118,
110,101,97,114,68,97,109,112,105,110,103,0,109,95,97,110,103,117,108,97, 101,114,115,101,77,97,115,115,0,109,95,108,105,110,101,97,114,68,97,109,
114,68,97,109,112,105,110,103,0,109,95,97,100,100,105,116,105,111,110,97, 112,105,110,103,0,109,95,97,110,103,117,108,97,114,68,97,109,112,105,110,
108,68,97,109,112,105,110,103,70,97,99,116,111,114,0,109,95,97,100,100, 103,0,109,95,97,100,100,105,116,105,111,110,97,108,68,97,109,112,105,110,
105,116,105,111,110,97,108,76,105,110,101,97,114,68,97,109,112,105,110,103, 103,70,97,99,116,111,114,0,109,95,97,100,100,105,116,105,111,110,97,108,
84,104,114,101,115,104,111,108,100,83,113,114,0,109,95,97,100,100,105,116, 76,105,110,101,97,114,68,97,109,112,105,110,103,84,104,114,101,115,104,111,
105,111,110,97,108,65,110,103,117,108,97,114,68,97,109,112,105,110,103,84, 108,100,83,113,114,0,109,95,97,100,100,105,116,105,111,110,97,108,65,110,
104,114,101,115,104,111,108,100,83,113,114,0,109,95,97,100,100,105,116,105, 103,117,108,97,114,68,97,109,112,105,110,103,84,104,114,101,115,104,111,108,
111,110,97,108,65,110,103,117,108,97,114,68,97,109,112,105,110,103,70,97, 100,83,113,114,0,109,95,97,100,100,105,116,105,111,110,97,108,65,110,103,
99,116,111,114,0,109,95,108,105,110,101,97,114,83,108,101,101,112,105,110, 117,108,97,114,68,97,109,112,105,110,103,70,97,99,116,111,114,0,109,95,
103,84,104,114,101,115,104,111,108,100,0,109,95,97,110,103,117,108,97,114, 108,105,110,101,97,114,83,108,101,101,112,105,110,103,84,104,114,101,115,104,
83,108,101,101,112,105,110,103,84,104,114,101,115,104,111,108,100,0,109,95, 111,108,100,0,109,95,97,110,103,117,108,97,114,83,108,101,101,112,105,110,
97,100,100,105,116,105,111,110,97,108,68,97,109,112,105,110,103,0,109,95, 103,84,104,114,101,115,104,111,108,100,0,109,95,97,100,100,105,116,105,111,
110,117,109,67,111,110,115,116,114,97,105,110,116,82,111,119,115,0,110,117, 110,97,108,68,97,109,112,105,110,103,0,109,95,110,117,109,67,111,110,115,
98,0,42,109,95,114,98,65,0,42,109,95,114,98,66,0,109,95,111,98, 116,114,97,105,110,116,82,111,119,115,0,110,117,98,0,42,109,95,114,98,
106,101,99,116,84,121,112,101,0,109,95,117,115,101,114,67,111,110,115,116, 65,0,42,109,95,114,98,66,0,109,95,111,98,106,101,99,116,84,121,112,
114,97,105,110,116,84,121,112,101,0,109,95,117,115,101,114,67,111,110,115, 101,0,109,95,117,115,101,114,67,111,110,115,116,114,97,105,110,116,84,121,
116,114,97,105,110,116,73,100,0,109,95,110,101,101,100,115,70,101,101,100, 112,101,0,109,95,117,115,101,114,67,111,110,115,116,114,97,105,110,116,73,
98,97,99,107,0,109,95,97,112,112,108,105,101,100,73,109,112,117,108,115, 100,0,109,95,110,101,101,100,115,70,101,101,100,98,97,99,107,0,109,95,
101,0,109,95,100,98,103,68,114,97,119,83,105,122,101,0,109,95,100,105, 97,112,112,108,105,101,100,73,109,112,117,108,115,101,0,109,95,100,98,103,
115,97,98,108,101,67,111,108,108,105,115,105,111,110,115,66,101,116,119,101, 68,114,97,119,83,105,122,101,0,109,95,100,105,115,97,98,108,101,67,111,
101,110,76,105,110,107,101,100,66,111,100,105,101,115,0,109,95,112,97,100, 108,108,105,115,105,111,110,115,66,101,116,119,101,101,110,76,105,110,107,101,
52,91,52,93,0,109,95,116,121,112,101,67,111,110,115,116,114,97,105,110, 100,66,111,100,105,101,115,0,109,95,112,97,100,52,91,52,93,0,109,95,
116,68,97,116,97,0,109,95,112,105,118,111,116,73,110,65,0,109,95,112, 116,121,112,101,67,111,110,115,116,114,97,105,110,116,68,97,116,97,0,109,
105,118,111,116,73,110,66,0,109,95,114,98,65,70,114,97,109,101,0,109, 95,112,105,118,111,116,73,110,65,0,109,95,112,105,118,111,116,73,110,66,
95,114,98,66,70,114,97,109,101,0,109,95,117,115,101,82,101,102,101,114, 0,109,95,114,98,65,70,114,97,109,101,0,109,95,114,98,66,70,114,97,
101,110,99,101,70,114,97,109,101,65,0,109,95,97,110,103,117,108,97,114, 109,101,0,109,95,117,115,101,82,101,102,101,114,101,110,99,101,70,114,97,
79,110,108,121,0,109,95,101,110,97,98,108,101,65,110,103,117,108,97,114, 109,101,65,0,109,95,97,110,103,117,108,97,114,79,110,108,121,0,109,95,
77,111,116,111,114,0,109,95,109,111,116,111,114,84,97,114,103,101,116,86, 101,110,97,98,108,101,65,110,103,117,108,97,114,77,111,116,111,114,0,109,
101,108,111,99,105,116,121,0,109,95,109,97,120,77,111,116,111,114,73,109, 95,109,111,116,111,114,84,97,114,103,101,116,86,101,108,111,99,105,116,121,
112,117,108,115,101,0,109,95,108,111,119,101,114,76,105,109,105,116,0,109, 0,109,95,109,97,120,77,111,116,111,114,73,109,112,117,108,115,101,0,109,
95,117,112,112,101,114,76,105,109,105,116,0,109,95,108,105,109,105,116,83, 95,108,111,119,101,114,76,105,109,105,116,0,109,95,117,112,112,101,114,76,
111,102,116,110,101,115,115,0,109,95,98,105,97,115,70,97,99,116,111,114, 105,109,105,116,0,109,95,108,105,109,105,116,83,111,102,116,110,101,115,115,
0,109,95,114,101,108,97,120,97,116,105,111,110,70,97,99,116,111,114,0, 0,109,95,98,105,97,115,70,97,99,116,111,114,0,109,95,114,101,108,97,
109,95,115,119,105,110,103,83,112,97,110,49,0,109,95,115,119,105,110,103, 120,97,116,105,111,110,70,97,99,116,111,114,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, 83,112,97,110,49,0,109,95,115,119,105,110,103,83,112,97,110,50,0,109,
100,97,109,112,105,110,103,0,109,95,108,105,110,101,97,114,85,112,112,101, 95,116,119,105,115,116,83,112,97,110,0,109,95,100,97,109,112,105,110,103,
114,76,105,109,105,116,0,109,95,108,105,110,101,97,114,76,111,119,101,114, 0,109,95,108,105,110,101,97,114,85,112,112,101,114,76,105,109,105,116,0,
76,105,109,105,116,0,109,95,97,110,103,117,108,97,114,85,112,112,101,114, 109,95,108,105,110,101,97,114,76,111,119,101,114,76,105,109,105,116,0,109,
76,105,109,105,116,0,109,95,97,110,103,117,108,97,114,76,111,119,101,114, 95,97,110,103,117,108,97,114,85,112,112,101,114,76,105,109,105,116,0,109,
76,105,109,105,116,0,109,95,117,115,101,76,105,110,101,97,114,82,101,102, 95,97,110,103,117,108,97,114,76,111,119,101,114,76,105,109,105,116,0,109,
101,114,101,110,99,101,70,114,97,109,101,65,0,109,95,117,115,101,79,102, 95,117,115,101,76,105,110,101,97,114,82,101,102,101,114,101,110,99,101,70,
102,115,101,116,70,111,114,67,111,110,115,116,114,97,105,110,116,70,114,97, 114,97,109,101,65,0,109,95,117,115,101,79,102,102,115,101,116,70,111,114,
109,101,0,0,84,89,80,69,57,0,0,0,99,104,97,114,0,117,99,104, 67,111,110,115,116,114,97,105,110,116,70,114,97,109,101,0,84,89,80,69,
97,114,0,115,104,111,114,116,0,117,115,104,111,114,116,0,105,110,116,0, 58,0,0,0,99,104,97,114,0,117,99,104,97,114,0,115,104,111,114,116,
108,111,110,103,0,117,108,111,110,103,0,102,108,111,97,116,0,100,111,117, 0,117,115,104,111,114,116,0,105,110,116,0,108,111,110,103,0,117,108,111,
98,108,101,0,118,111,105,100,0,80,111,105,110,116,101,114,65,114,114,97, 110,103,0,102,108,111,97,116,0,100,111,117,98,108,101,0,118,111,105,100,
121,0,98,116,80,104,121,115,105,99,115,83,121,115,116,101,109,0,76,105, 0,80,111,105,110,116,101,114,65,114,114,97,121,0,98,116,80,104,121,115,
115,116,66,97,115,101,0,98,116,86,101,99,116,111,114,51,70,108,111,97, 105,99,115,83,121,115,116,101,109,0,76,105,115,116,66,97,115,101,0,98,
116,68,97,116,97,0,98,116,86,101,99,116,111,114,51,68,111,117,98,108, 116,86,101,99,116,111,114,51,70,108,111,97,116,68,97,116,97,0,98,116,
101,68,97,116,97,0,98,116,77,97,116,114,105,120,51,120,51,70,108,111, 86,101,99,116,111,114,51,68,111,117,98,108,101,68,97,116,97,0,98,116,
97,116,68,97,116,97,0,98,116,77,97,116,114,105,120,51,120,51,68,111, 77,97,116,114,105,120,51,120,51,70,108,111,97,116,68,97,116,97,0,98,
117,98,108,101,68,97,116,97,0,98,116,84,114,97,110,115,102,111,114,109, 116,77,97,116,114,105,120,51,120,51,68,111,117,98,108,101,68,97,116,97,
70,108,111,97,116,68,97,116,97,0,98,116,84,114,97,110,115,102,111,114, 0,98,116,84,114,97,110,115,102,111,114,109,70,108,111,97,116,68,97,116,
109,68,111,117,98,108,101,68,97,116,97,0,98,116,66,118,104,83,117,98, 97,0,98,116,84,114,97,110,115,102,111,114,109,68,111,117,98,108,101,68,
116,114,101,101,73,110,102,111,68,97,116,97,0,98,116,79,112,116,105,109, 97,116,97,0,98,116,66,118,104,83,117,98,116,114,101,101,73,110,102,111,
105,122,101,100,66,118,104,78,111,100,101,70,108,111,97,116,68,97,116,97, 68,97,116,97,0,98,116,79,112,116,105,109,105,122,101,100,66,118,104,78,
0,98,116,79,112,116,105,109,105,122,101,100,66,118,104,78,111,100,101,68, 111,100,101,70,108,111,97,116,68,97,116,97,0,98,116,79,112,116,105,109,
111,117,98,108,101,68,97,116,97,0,98,116,81,117,97,110,116,105,122,101, 105,122,101,100,66,118,104,78,111,100,101,68,111,117,98,108,101,68,97,116,
100,66,118,104,78,111,100,101,68,97,116,97,0,98,116,81,117,97,110,116, 97,0,98,116,81,117,97,110,116,105,122,101,100,66,118,104,78,111,100,101,
105,122,101,100,66,118,104,70,108,111,97,116,68,97,116,97,0,98,116,81, 68,97,116,97,0,98,116,81,117,97,110,116,105,122,101,100,66,118,104,70,
117,97,110,116,105,122,101,100,66,118,104,68,111,117,98,108,101,68,97,116, 108,111,97,116,68,97,116,97,0,98,116,81,117,97,110,116,105,122,101,100,
97,0,98,116,67,111,108,108,105,115,105,111,110,83,104,97,112,101,68,97, 66,118,104,68,111,117,98,108,101,68,97,116,97,0,98,116,67,111,108,108,
116,97,0,98,116,83,116,97,116,105,99,80,108,97,110,101,83,104,97,112, 105,115,105,111,110,83,104,97,112,101,68,97,116,97,0,98,116,83,116,97,
101,68,97,116,97,0,98,116,67,111,110,118,101,120,73,110,116,101,114,110, 116,105,99,80,108,97,110,101,83,104,97,112,101,68,97,116,97,0,98,116,
97,108,83,104,97,112,101,68,97,116,97,0,98,116,80,111,115,105,116,105, 67,111,110,118,101,120,73,110,116,101,114,110,97,108,83,104,97,112,101,68,
111,110,65,110,100,82,97,100,105,117,115,0,98,116,77,117,108,116,105,83, 97,116,97,0,98,116,80,111,115,105,116,105,111,110,65,110,100,82,97,100,
112,104,101,114,101,83,104,97,112,101,68,97,116,97,0,98,116,73,110,116, 105,117,115,0,98,116,77,117,108,116,105,83,112,104,101,114,101,83,104,97,
73,110,100,101,120,68,97,116,97,0,98,116,83,104,111,114,116,73,110,116, 112,101,68,97,116,97,0,98,116,73,110,116,73,110,100,101,120,68,97,116,
73,110,100,101,120,84,114,105,112,108,101,116,68,97,116,97,0,98,116,77, 97,0,98,116,83,104,111,114,116,73,110,116,73,110,100,101,120,68,97,116,
101,115,104,80,97,114,116,68,97,116,97,0,98,116,83,116,114,105,100,105, 97,0,98,116,83,104,111,114,116,73,110,116,73,110,100,101,120,84,114,105,
110,103,77,101,115,104,73,110,116,101,114,102,97,99,101,68,97,116,97,0, 112,108,101,116,68,97,116,97,0,98,116,77,101,115,104,80,97,114,116,68,
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,83,116,114,105,100,105,110,103,77,101,115,104,73,110,
97,116,97,0,98,116,84,114,105,97,110,103,108,101,73,110,102,111,77,97, 116,101,114,102,97,99,101,68,97,116,97,0,98,116,84,114,105,97,110,103,
112,68,97,116,97,0,98,116,67,111,109,112,111,117,110,100,83,104,97,112, 108,101,77,101,115,104,83,104,97,112,101,68,97,116,97,0,98,116,84,114,
101,67,104,105,108,100,68,97,116,97,0,98,116,67,111,109,112,111,117,110, 105,97,110,103,108,101,73,110,102,111,77,97,112,68,97,116,97,0,98,116,
100,83,104,97,112,101,68,97,116,97,0,98,116,67,121,108,105,110,100,101, 67,111,109,112,111,117,110,100,83,104,97,112,101,67,104,105,108,100,68,97,
114,83,104,97,112,101,68,97,116,97,0,98,116,67,97,112,115,117,108,101, 116,97,0,98,116,67,111,109,112,111,117,110,100,83,104,97,112,101,68,97,
83,104,97,112,101,68,97,116,97,0,98,116,84,114,105,97,110,103,108,101, 116,97,0,98,116,67,121,108,105,110,100,101,114,83,104,97,112,101,68,97,
73,110,102,111,68,97,116,97,0,98,116,71,73,109,112,97,99,116,77,101, 116,97,0,98,116,67,97,112,115,117,108,101,83,104,97,112,101,68,97,116,
115,104,83,104,97,112,101,68,97,116,97,0,98,116,67,111,110,118,101,120, 97,0,98,116,84,114,105,97,110,103,108,101,73,110,102,111,68,97,116,97,
72,117,108,108,83,104,97,112,101,68,97,116,97,0,98,116,67,111,108,108, 0,98,116,71,73,109,112,97,99,116,77,101,115,104,83,104,97,112,101,68,
105,115,105,111,110,79,98,106,101,99,116,68,111,117,98,108,101,68,97,116, 97,116,97,0,98,116,67,111,110,118,101,120,72,117,108,108,83,104,97,112,
97,0,98,116,67,111,108,108,105,115,105,111,110,79,98,106,101,99,116,70, 101,68,97,116,97,0,98,116,67,111,108,108,105,115,105,111,110,79,98,106,
108,111,97,116,68,97,116,97,0,98,116,82,105,103,105,100,66,111,100,121, 101,99,116,68,111,117,98,108,101,68,97,116,97,0,98,116,67,111,108,108,
70,108,111,97,116,68,97,116,97,0,98,116,82,105,103,105,100,66,111,100, 105,115,105,111,110,79,98,106,101,99,116,70,108,111,97,116,68,97,116,97,
121,68,111,117,98,108,101,68,97,116,97,0,98,116,67,111,110,115,116,114, 0,98,116,82,105,103,105,100,66,111,100,121,70,108,111,97,116,68,97,116,
97,105,110,116,73,110,102,111,49,0,98,116,84,121,112,101,100,67,111,110, 97,0,98,116,82,105,103,105,100,66,111,100,121,68,111,117,98,108,101,68,
115,116,114,97,105,110,116,68,97,116,97,0,98,116,82,105,103,105,100,66, 97,116,97,0,98,116,67,111,110,115,116,114,97,105,110,116,73,110,102,111,
111,100,121,68,97,116,97,0,98,116,80,111,105,110,116,50,80,111,105,110, 49,0,98,116,84,121,112,101,100,67,111,110,115,116,114,97,105,110,116,68,
116,67,111,110,115,116,114,97,105,110,116,70,108,111,97,116,68,97,116,97, 97,116,97,0,98,116,82,105,103,105,100,66,111,100,121,68,97,116,97,0,
0,98,116,80,111,105,110,116,50,80,111,105,110,116,67,111,110,115,116,114, 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, 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, 103,101,67,111,110,115,116,114,97,105,110,116,70,108,111,97,116,68,97,116,
116,97,0,98,116,72,105,110,103,101,67,111,110,115,116,114,97,105,110,116, 97,0,98,116,67,111,110,101,84,119,105,115,116,67,111,110,115,116,114,97,
70,108,111,97,116,68,97,116,97,0,98,116,67,111,110,101,84,119,105,115, 105,110,116,68,97,116,97,0,98,116,71,101,110,101,114,105,99,54,68,111,
116,67,111,110,115,116,114,97,105,110,116,68,97,116,97,0,98,116,71,101, 102,67,111,110,115,116,114,97,105,110,116,68,97,116,97,0,98,116,83,108,
110,101,114,105,99,54,68,111,102,67,111,110,115,116,114,97,105,110,116,68, 105,100,101,114,67,111,110,115,116,114,97,105,110,116,68,97,116,97,0,0,
97,116,97,0,98,116,83,108,105,100,101,114,67,111,110,115,116,114,97,105, 84,76,69,78,1,0,1,0,2,0,2,0,4,0,4,0,4,0,4,0,
110,116,68,97,116,97,0,0,84,76,69,78,1,0,1,0,2,0,2,0, 8,0,0,0,12,0,36,0,8,0,16,0,32,0,48,0,96,0,64,0,
4,0,4,0,4,0,4,0,8,0,0,0,12,0,36,0,8,0,16,0, -128,0,20,0,48,0,80,0,16,0,84,0,-124,0,12,0,52,0,52,0,
32,0,48,0,96,0,64,0,-128,0,20,0,48,0,80,0,16,0,84,0, 20,0,64,0,4,0,4,0,8,0,28,0,28,0,60,0,56,0,76,0,
-124,0,12,0,52,0,52,0,20,0,64,0,4,0,8,0,24,0,28,0, 24,0,60,0,60,0,16,0,64,0,68,0,-56,1,-8,0,-32,1,-104,3,
60,0,56,0,76,0,24,0,60,0,60,0,16,0,64,0,68,0,-56,1, 8,0,44,0,0,0,76,0,108,0,84,1,-44,0,-52,0,-12,0,-60,0,
-8,0,-32,1,-104,3,8,0,44,0,0,0,76,0,108,0,84,1,-44,0, 83,84,82,67,47,0,0,0,10,0,3,0,4,0,0,0,4,0,1,0,
-52,0,-12,0,-60,0,0,0,83,84,82,67,46,0,0,0,10,0,3,0, 9,0,2,0,11,0,3,0,10,0,3,0,10,0,4,0,10,0,5,0,
4,0,0,0,4,0,1,0,9,0,2,0,11,0,3,0,10,0,3,0, 12,0,2,0,9,0,6,0,9,0,7,0,13,0,1,0,7,0,8,0,
10,0,4,0,10,0,5,0,12,0,2,0,9,0,6,0,9,0,7,0, 14,0,1,0,8,0,8,0,15,0,1,0,13,0,9,0,16,0,1,0,
13,0,1,0,7,0,8,0,14,0,1,0,8,0,8,0,15,0,1,0, 14,0,9,0,17,0,2,0,15,0,10,0,13,0,11,0,18,0,2,0,
13,0,9,0,16,0,1,0,14,0,9,0,17,0,2,0,15,0,10,0, 16,0,10,0,14,0,11,0,19,0,4,0,4,0,12,0,4,0,13,0,
13,0,11,0,18,0,2,0,16,0,10,0,14,0,11,0,19,0,4,0, 2,0,14,0,2,0,15,0,20,0,6,0,13,0,16,0,13,0,17,0,
4,0,12,0,4,0,13,0,2,0,14,0,2,0,15,0,20,0,6,0, 4,0,18,0,4,0,19,0,4,0,20,0,0,0,21,0,21,0,6,0,
13,0,16,0,13,0,17,0,4,0,18,0,4,0,19,0,4,0,20,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,21,0,6,0,14,0,16,0,14,0,17,0,4,0,18,0, 0,0,21,0,22,0,3,0,2,0,14,0,2,0,15,0,4,0,22,0,
4,0,19,0,4,0,20,0,0,0,21,0,22,0,3,0,2,0,14,0, 23,0,12,0,13,0,23,0,13,0,24,0,13,0,25,0,4,0,26,0,
2,0,15,0,4,0,22,0,23,0,12,0,13,0,23,0,13,0,24,0, 4,0,27,0,4,0,28,0,4,0,29,0,20,0,30,0,22,0,31,0,
13,0,25,0,4,0,26,0,4,0,27,0,4,0,28,0,4,0,29,0, 19,0,32,0,4,0,33,0,4,0,34,0,24,0,12,0,14,0,23,0,
20,0,30,0,22,0,31,0,19,0,32,0,4,0,33,0,4,0,34,0, 14,0,24,0,14,0,25,0,4,0,26,0,4,0,27,0,4,0,28,0,
24,0,12,0,14,0,23,0,14,0,24,0,14,0,25,0,4,0,26,0, 4,0,29,0,21,0,30,0,22,0,31,0,4,0,33,0,4,0,34,0,
4,0,27,0,4,0,28,0,4,0,29,0,21,0,30,0,22,0,31,0, 19,0,32,0,25,0,3,0,0,0,35,0,4,0,36,0,0,0,37,0,
4,0,33,0,4,0,34,0,19,0,32,0,25,0,3,0,0,0,35,0, 26,0,5,0,25,0,38,0,13,0,39,0,13,0,40,0,7,0,41,0,
4,0,36,0,0,0,37,0,26,0,5,0,25,0,38,0,13,0,39,0, 0,0,21,0,27,0,5,0,25,0,38,0,13,0,39,0,13,0,42,0,
13,0,40,0,7,0,41,0,0,0,21,0,27,0,5,0,25,0,38,0, 7,0,43,0,4,0,44,0,28,0,2,0,13,0,45,0,7,0,46,0,
13,0,39,0,13,0,42,0,7,0,43,0,4,0,44,0,28,0,2,0, 29,0,4,0,27,0,47,0,28,0,48,0,4,0,49,0,0,0,37,0,
13,0,45,0,7,0,46,0,29,0,4,0,27,0,47,0,28,0,48,0, 30,0,1,0,4,0,50,0,31,0,2,0,2,0,50,0,0,0,51,0,
4,0,49,0,0,0,37,0,30,0,1,0,4,0,50,0,31,0,2,0, 32,0,2,0,2,0,52,0,0,0,51,0,33,0,7,0,13,0,53,0,
2,0,51,0,0,0,52,0,32,0,6,0,13,0,53,0,14,0,54,0, 14,0,54,0,30,0,55,0,32,0,56,0,31,0,57,0,4,0,58,0,
30,0,55,0,31,0,56,0,4,0,57,0,4,0,58,0,33,0,4,0, 4,0,59,0,34,0,4,0,33,0,60,0,13,0,61,0,4,0,62,0,
32,0,59,0,13,0,60,0,4,0,61,0,0,0,37,0,34,0,7,0, 0,0,37,0,35,0,7,0,25,0,38,0,34,0,63,0,23,0,64,0,
25,0,38,0,33,0,62,0,23,0,63,0,24,0,64,0,35,0,65,0, 24,0,65,0,36,0,66,0,7,0,43,0,0,0,67,0,37,0,4,0,
7,0,43,0,0,0,66,0,36,0,4,0,17,0,67,0,25,0,68,0, 17,0,68,0,25,0,69,0,4,0,70,0,7,0,71,0,38,0,4,0,
4,0,69,0,7,0,70,0,37,0,4,0,25,0,38,0,36,0,71,0, 25,0,38,0,37,0,72,0,4,0,73,0,7,0,43,0,39,0,3,0,
4,0,72,0,7,0,43,0,38,0,3,0,27,0,47,0,4,0,73,0, 27,0,47,0,4,0,74,0,0,0,37,0,40,0,3,0,27,0,47,0,
0,0,37,0,39,0,3,0,27,0,47,0,4,0,73,0,0,0,37,0, 4,0,74,0,0,0,37,0,41,0,4,0,4,0,75,0,7,0,76,0,
40,0,4,0,4,0,74,0,7,0,75,0,7,0,76,0,7,0,77,0, 7,0,77,0,7,0,78,0,36,0,14,0,4,0,79,0,4,0,80,0,
35,0,14,0,4,0,78,0,4,0,79,0,40,0,80,0,4,0,81,0, 41,0,81,0,4,0,82,0,7,0,83,0,7,0,84,0,7,0,85,0,
7,0,82,0,7,0,83,0,7,0,84,0,7,0,85,0,7,0,86,0, 7,0,86,0,7,0,87,0,4,0,88,0,4,0,89,0,4,0,90,0,
4,0,87,0,4,0,88,0,4,0,89,0,4,0,90,0,0,0,37,0, 4,0,91,0,0,0,37,0,42,0,5,0,25,0,38,0,34,0,63,0,
41,0,5,0,25,0,38,0,33,0,62,0,13,0,39,0,7,0,43,0, 13,0,39,0,7,0,43,0,4,0,92,0,43,0,5,0,27,0,47,0,
4,0,91,0,42,0,5,0,27,0,47,0,13,0,92,0,14,0,93,0, 13,0,93,0,14,0,94,0,4,0,95,0,0,0,96,0,44,0,24,0,
4,0,94,0,0,0,95,0,43,0,24,0,9,0,96,0,9,0,97,0, 9,0,97,0,9,0,98,0,25,0,99,0,0,0,35,0,18,0,100,0,
25,0,98,0,0,0,35,0,18,0,99,0,18,0,100,0,14,0,101,0, 18,0,101,0,14,0,102,0,14,0,103,0,14,0,104,0,8,0,105,0,
14,0,102,0,14,0,103,0,8,0,104,0,8,0,105,0,8,0,106,0, 8,0,106,0,8,0,107,0,8,0,108,0,8,0,109,0,8,0,110,0,
8,0,107,0,8,0,108,0,8,0,109,0,8,0,110,0,4,0,111,0, 8,0,111,0,4,0,112,0,4,0,113,0,4,0,114,0,4,0,115,0,
4,0,112,0,4,0,113,0,4,0,114,0,4,0,115,0,4,0,116,0, 4,0,116,0,4,0,117,0,4,0,118,0,0,0,37,0,45,0,23,0,
4,0,117,0,0,0,37,0,44,0,23,0,9,0,96,0,9,0,97,0, 9,0,97,0,9,0,98,0,25,0,99,0,0,0,35,0,17,0,100,0,
25,0,98,0,0,0,35,0,17,0,99,0,17,0,100,0,13,0,101,0, 17,0,101,0,13,0,102,0,13,0,103,0,13,0,104,0,7,0,105,0,
13,0,102,0,13,0,103,0,7,0,104,0,7,0,105,0,7,0,106,0, 7,0,106,0,7,0,107,0,7,0,108,0,7,0,109,0,7,0,110,0,
7,0,107,0,7,0,108,0,7,0,109,0,7,0,110,0,4,0,111,0, 7,0,111,0,4,0,112,0,4,0,113,0,4,0,114,0,4,0,115,0,
4,0,112,0,4,0,113,0,4,0,114,0,4,0,115,0,4,0,116,0, 4,0,116,0,4,0,117,0,4,0,118,0,46,0,21,0,45,0,119,0,
4,0,117,0,45,0,21,0,44,0,118,0,15,0,119,0,13,0,120,0, 15,0,120,0,13,0,121,0,13,0,122,0,13,0,123,0,13,0,124,0,
13,0,121,0,13,0,122,0,13,0,123,0,13,0,124,0,13,0,125,0, 13,0,125,0,13,0,126,0,13,0,127,0,13,0,-128,0,13,0,-127,0,
13,0,126,0,13,0,127,0,13,0,-128,0,7,0,-127,0,7,0,-126,0, 7,0,-126,0,7,0,-125,0,7,0,-124,0,7,0,-123,0,7,0,-122,0,
7,0,-125,0,7,0,-124,0,7,0,-123,0,7,0,-122,0,7,0,-121,0, 7,0,-121,0,7,0,-120,0,7,0,-119,0,7,0,-118,0,4,0,-117,0,
7,0,-120,0,7,0,-119,0,4,0,-118,0,46,0,22,0,43,0,118,0, 47,0,22,0,44,0,119,0,16,0,120,0,14,0,121,0,14,0,122,0,
16,0,119,0,14,0,120,0,14,0,121,0,14,0,122,0,14,0,123,0, 14,0,123,0,14,0,124,0,14,0,125,0,14,0,126,0,14,0,127,0,
14,0,124,0,14,0,125,0,14,0,126,0,14,0,127,0,14,0,-128,0, 14,0,-128,0,14,0,-127,0,8,0,-126,0,8,0,-125,0,8,0,-124,0,
8,0,-127,0,8,0,-126,0,8,0,-125,0,8,0,-124,0,8,0,-123,0, 8,0,-123,0,8,0,-122,0,8,0,-121,0,8,0,-120,0,8,0,-119,0,
8,0,-122,0,8,0,-121,0,8,0,-120,0,8,0,-119,0,4,0,-118,0, 8,0,-118,0,4,0,-117,0,0,0,37,0,48,0,2,0,4,0,-116,0,
0,0,37,0,47,0,2,0,4,0,-117,0,4,0,-116,0,48,0,11,0, 4,0,-115,0,49,0,11,0,50,0,-114,0,50,0,-113,0,0,0,35,0,
49,0,-115,0,49,0,-114,0,0,0,35,0,4,0,-113,0,4,0,-112,0, 4,0,-112,0,4,0,-111,0,4,0,-110,0,4,0,-109,0,7,0,-108,0,
4,0,-111,0,4,0,-110,0,7,0,-109,0,7,0,-108,0,4,0,-107,0, 7,0,-107,0,4,0,-106,0,0,0,-105,0,51,0,3,0,49,0,-104,0,
0,0,-106,0,50,0,3,0,48,0,-105,0,13,0,-104,0,13,0,-103,0, 13,0,-103,0,13,0,-102,0,52,0,3,0,49,0,-104,0,14,0,-103,0,
51,0,3,0,48,0,-105,0,14,0,-104,0,14,0,-103,0,52,0,13,0, 14,0,-102,0,53,0,13,0,49,0,-104,0,18,0,-101,0,18,0,-100,0,
48,0,-105,0,18,0,-102,0,18,0,-101,0,4,0,-100,0,4,0,-99,0, 4,0,-99,0,4,0,-98,0,4,0,-97,0,7,0,-96,0,7,0,-95,0,
4,0,-98,0,7,0,-97,0,7,0,-96,0,7,0,-95,0,7,0,-94,0, 7,0,-94,0,7,0,-93,0,7,0,-92,0,7,0,-91,0,7,0,-90,0,
7,0,-93,0,7,0,-92,0,7,0,-91,0,53,0,13,0,48,0,-105,0, 54,0,13,0,49,0,-104,0,17,0,-101,0,17,0,-100,0,4,0,-99,0,
17,0,-102,0,17,0,-101,0,4,0,-100,0,4,0,-99,0,4,0,-98,0, 4,0,-98,0,4,0,-97,0,7,0,-96,0,7,0,-95,0,7,0,-94,0,
7,0,-97,0,7,0,-96,0,7,0,-95,0,7,0,-94,0,7,0,-93,0, 7,0,-93,0,7,0,-92,0,7,0,-91,0,7,0,-90,0,55,0,11,0,
7,0,-92,0,7,0,-91,0,54,0,11,0,48,0,-105,0,17,0,-102,0, 49,0,-104,0,17,0,-101,0,17,0,-100,0,7,0,-89,0,7,0,-88,0,
17,0,-101,0,7,0,-90,0,7,0,-89,0,7,0,-88,0,7,0,-93,0, 7,0,-87,0,7,0,-92,0,7,0,-91,0,7,0,-90,0,7,0,-86,0,
7,0,-92,0,7,0,-91,0,7,0,-87,0,0,0,21,0,55,0,9,0, 0,0,21,0,56,0,9,0,49,0,-104,0,17,0,-101,0,17,0,-100,0,
48,0,-105,0,17,0,-102,0,17,0,-101,0,13,0,-86,0,13,0,-85,0, 13,0,-85,0,13,0,-84,0,13,0,-83,0,13,0,-82,0,4,0,-81,0,
13,0,-84,0,13,0,-83,0,4,0,-82,0,4,0,-81,0,56,0,9,0, 4,0,-80,0,57,0,9,0,49,0,-104,0,17,0,-101,0,17,0,-100,0,
48,0,-105,0,17,0,-102,0,17,0,-101,0,7,0,-86,0,7,0,-85,0, 7,0,-85,0,7,0,-84,0,7,0,-83,0,7,0,-82,0,4,0,-81,0,
7,0,-84,0,7,0,-83,0,4,0,-82,0,4,0,-81,0,}; 4,0,-80,0,};
int sBulletDNAlen= sizeof(sBulletDNAstr); int sBulletDNAlen= sizeof(sBulletDNAstr);