From bc0d5090900a2314d1eacbd764d5a5f2f1fd3bab Mon Sep 17 00:00:00 2001 From: David Rose Date: Thu, 30 Jun 2005 17:42:21 +0000 Subject: [PATCH] bam 5.0, new Geom implementation is now official --- direct/src/ffi/Sources.pp | 1 - direct/src/ffi/genPyCodeNative | 4 - dtool/Config.pp | 8 +- dtool/LocalSetup.pp | 3 - dtool/pptempl/Template.gmsvc.pp | 34 +- .../interrogate/interfaceMakerPythonObj.cxx | 13 +- .../interfaceMakerPythonSimple.cxx | 12 +- panda/metalibs/pandadx7/Sources.pp | 5 +- panda/metalibs/pandadx7/pandadx7.cxx | 6 + panda/metalibs/pandadx9/Sources.pp | 5 +- panda/metalibs/pandadx9/pandadx9.cxx | 2 +- panda/metalibs/pandaegg/Sources.pp | 2 +- panda/metalibs/pandaegg/pandaegg.cxx | 2 - panda/src/builder/Sources.pp | 58 - panda/src/builder/builder.I | 82 - panda/src/builder/builder.cxx | 247 - panda/src/builder/builder.h | 211 - panda/src/builder/builderAttrib.I | 82 - panda/src/builder/builderAttrib.cxx | 24 - panda/src/builder/builderAttrib.h | 72 - panda/src/builder/builderAttribTempl.I | 323 - panda/src/builder/builderAttribTempl.h | 88 - panda/src/builder/builderBucket.I | 134 - panda/src/builder/builderBucket.cxx | 285 - panda/src/builder/builderBucket.h | 116 - panda/src/builder/builderBucketNode.I | 115 - panda/src/builder/builderBucketNode.cxx | 102 - panda/src/builder/builderBucketNode.h | 73 - panda/src/builder/builderFuncs.I | 950 - panda/src/builder/builderFuncs.h | 76 - panda/src/builder/builderMisc.cxx | 49 - panda/src/builder/builderMisc.h | 31 - panda/src/builder/builderNormalVisualizer.I | 24 - panda/src/builder/builderNormalVisualizer.cxx | 79 - panda/src/builder/builderNormalVisualizer.h | 66 - panda/src/builder/builderPrim.I | 78 - panda/src/builder/builderPrim.cxx | 273 - panda/src/builder/builderPrim.h | 135 - panda/src/builder/builderPrimTempl.I | 1067 -- panda/src/builder/builderPrimTempl.h | 168 - panda/src/builder/builderProperties.cxx | 128 - panda/src/builder/builderProperties.h | 130 - panda/src/builder/builderTypes.cxx | 108 - panda/src/builder/builderTypes.h | 80 - panda/src/builder/builderVertex.I | 278 - panda/src/builder/builderVertex.cxx | 24 - panda/src/builder/builderVertex.h | 132 - panda/src/builder/builderVertexTempl.I | 434 - panda/src/builder/builderVertexTempl.h | 102 - panda/src/builder/builder_compare.I | 37 - panda/src/builder/builder_compare.h | 40 - panda/src/builder/builder_composite1.cxx | 13 - panda/src/builder/builder_composite2.cxx | 6 - panda/src/builder/builder_headers.h | 51 - panda/src/builder/config_builder.cxx | 44 - panda/src/builder/config_builder.h | 29 - panda/src/builder/mesher.cxx | 25 - panda/src/builder/mesher.h | 60 - panda/src/builder/mesherConfig.h | 37 - panda/src/builder/mesherEdge.I | 162 - panda/src/builder/mesherEdge.h | 77 - panda/src/builder/mesherFanMaker.I | 394 - panda/src/builder/mesherFanMaker.h | 94 - panda/src/builder/mesherStrip.I | 1651 -- panda/src/builder/mesherStrip.h | 149 - panda/src/builder/mesherTempl.I | 692 - panda/src/builder/mesherTempl.h | 91 - panda/src/builder/test_builder.cxx | 211 - panda/src/builder/test_builder_data.cxx | 718 - panda/src/chan/animChannelMatrixXfmTable.I | 32 +- panda/src/chan/animChannelMatrixXfmTable.cxx | 68 +- panda/src/chan/animChannelMatrixXfmTable.h | 5 +- panda/src/chan/animChannelScalarTable.I | 4 +- panda/src/chan/animChannelScalarTable.N | 3 - panda/src/chan/animChannelScalarTable.h | 3 +- panda/src/char/Sources.pp | 12 +- panda/src/char/char_composite2.cxx | 3 - panda/src/char/char_headers.h | 37 - panda/src/char/character.I | 11 - panda/src/char/character.cxx | 106 +- panda/src/char/character.h | 13 - panda/src/char/characterVertexSlider.h | 2 - panda/src/char/computedVertices.I | 52 - panda/src/char/computedVertices.cxx | 465 - panda/src/char/computedVertices.h | 115 - panda/src/char/computedVerticesMorph.I | 150 - panda/src/char/computedVerticesMorph.cxx | 107 - panda/src/char/computedVerticesMorph.h | 136 - panda/src/char/config_char.cxx | 5 - panda/src/char/dynamicVertices.cxx | 113 - panda/src/char/dynamicVertices.h | 76 - panda/src/char/jointVertexTransform.h | 2 - panda/src/collide/collisionInvSphere.cxx | 82 +- panda/src/collide/collisionLine.cxx | 80 +- panda/src/collide/collisionNode.cxx | 20 - panda/src/collide/collisionPlane.cxx | 91 +- panda/src/collide/collisionPolygon.cxx | 152 +- panda/src/collide/collisionRay.cxx | 80 +- panda/src/collide/collisionSegment.cxx | 60 +- panda/src/collide/collisionSolid.cxx | 13 +- panda/src/collide/collisionSphere.cxx | 85 +- panda/src/collide/collisionTraverser.cxx | 78 +- panda/src/collide/collisionTube.cxx | 149 +- panda/src/collide/collisionVisualizer.cxx | 100 +- panda/src/display/graphicsEngine.cxx | 10 +- panda/src/display/graphicsStateGuardian.cxx | 38 +- panda/src/display/graphicsStateGuardian.h | 34 +- panda/src/display/standardMunger.cxx | 26 +- panda/src/display/standardMunger.h | 10 +- panda/src/distort/projectionScreen.cxx | 371 +- panda/src/distort/projectionScreen.h | 1 - panda/src/dxgsg7/Sources.pp | 5 +- panda/src/dxgsg8/dxGeomMunger8.cxx | 38 +- panda/src/dxgsg8/dxGeomMunger8.h | 10 +- panda/src/dxgsg8/dxGraphicsStateGuardian8.cxx | 90 +- panda/src/dxgsg8/dxGraphicsStateGuardian8.h | 27 +- panda/src/dxgsg8/dxIndexBufferContext8.cxx | 4 +- panda/src/dxgsg8/dxIndexBufferContext8.h | 2 +- panda/src/dxgsg8/dxVertexBufferContext8.cxx | 12 +- panda/src/dxgsg8/dxVertexBufferContext8.h | 2 +- panda/src/dxgsg9/Sources.pp | 5 +- panda/src/egg/config_egg.cxx | 2 +- panda/src/egg/eggAnimData.N | 2 - panda/src/egg/eggAnimData.h | 3 + panda/src/egg2pg/Sources.pp | 5 +- panda/src/egg2pg/characterMaker.cxx | 138 +- panda/src/egg2pg/characterMaker.h | 7 - panda/src/egg2pg/computedVerticesMaker.I | 17 - panda/src/egg2pg/computedVerticesMaker.cxx | 586 - panda/src/egg2pg/computedVerticesMaker.h | 174 - .../src/egg2pg/computedVerticesMakerEntity.I | 83 - .../src/egg2pg/computedVerticesMakerEntity.h | 77 - panda/src/egg2pg/egg2pg_composite1.cxx | 1 - panda/src/egg2pg/eggLoader.I | 2 +- panda/src/egg2pg/eggLoader.cxx | 485 +- panda/src/egg2pg/eggLoader.h | 33 +- panda/src/egg2pg/eggRenderState.I | 2 +- panda/src/egg2pg/eggRenderState.cxx | 12 +- panda/src/egg2pg/eggRenderState.h | 4 +- panda/src/express/config_express.cxx | 2 +- panda/src/framework/windowFramework.cxx | 205 +- panda/src/glstuff/glGeomContext_src.h | 4 +- panda/src/glstuff/glGeomMunger_src.cxx | 32 +- panda/src/glstuff/glGeomMunger_src.h | 10 +- .../src/glstuff/glGraphicsStateGuardian_src.I | 41 - .../glstuff/glGraphicsStateGuardian_src.cxx | 1342 +- .../src/glstuff/glGraphicsStateGuardian_src.h | 52 +- panda/src/glstuff/glIndexBufferContext_src.I | 2 +- panda/src/glstuff/glIndexBufferContext_src.h | 2 +- panda/src/glstuff/glVertexBufferContext_src.I | 2 +- panda/src/glstuff/glVertexBufferContext_src.h | 2 +- panda/src/gobj/Sources.pp | 140 +- panda/src/gobj/config_gobj.cxx | 132 +- panda/src/gobj/config_gobj.h | 5 - panda/src/gobj/drawable.cxx | 4 +- panda/src/gobj/drawable.h | 8 +- panda/src/gobj/geom.I | 610 +- panda/src/gobj/geom.cxx | 2066 +- panda/src/gobj/geom.h | 425 +- .../{qpgeomCacheEntry.I => geomCacheEntry.I} | 24 +- ...pgeomCacheEntry.cxx => geomCacheEntry.cxx} | 54 +- .../{qpgeomCacheEntry.h => geomCacheEntry.h} | 36 +- ...pgeomCacheManager.I => geomCacheManager.I} | 14 +- ...mCacheManager.cxx => geomCacheManager.cxx} | 48 +- ...pgeomCacheManager.h => geomCacheManager.h} | 28 +- panda/src/gobj/geomContext.I | 62 - panda/src/gobj/geomContext.h | 8 - .../gobj/{qpgeomEnums.cxx => geomEnums.cxx} | 36 +- panda/src/gobj/{qpgeomEnums.h => geomEnums.h} | 18 +- panda/src/gobj/geomLine.cxx | 111 - panda/src/gobj/geomLine.h | 82 - .../gobj/{qpgeomLines.cxx => geomLines.cxx} | 80 +- panda/src/gobj/{qpgeomLines.h => geomLines.h} | 32 +- panda/src/gobj/geomLinestrip.cxx | 123 - panda/src/gobj/geomLinestrip.h | 81 - ...pgeomLinestrips.cxx => geomLinestrips.cxx} | 90 +- .../{qpgeomLinestrips.h => geomLinestrips.h} | 34 +- .../src/gobj/{qpgeomMunger.I => geomMunger.I} | 76 +- .../gobj/{qpgeomMunger.cxx => geomMunger.cxx} | 148 +- .../src/gobj/{qpgeomMunger.h => geomMunger.h} | 88 +- panda/src/gobj/geomPoint.cxx | 119 - panda/src/gobj/geomPoint.h | 82 - .../gobj/{qpgeomPoints.cxx => geomPoints.cxx} | 70 +- .../src/gobj/{qpgeomPoints.h => geomPoints.h} | 30 +- panda/src/gobj/geomPolygon.cxx | 91 - panda/src/gobj/geomPolygon.h | 76 - .../{qpgeomPrimitive.I => geomPrimitive.I} | 126 +- ...{qpgeomPrimitive.cxx => geomPrimitive.cxx} | 429 +- .../{qpgeomPrimitive.h => geomPrimitive.h} | 76 +- panda/src/gobj/geomQuad.cxx | 141 - panda/src/gobj/geomQuad.h | 74 - panda/src/gobj/geomSphere.cxx | 79 - panda/src/gobj/geomSphere.h | 89 - panda/src/gobj/geomSprite.I | 168 - panda/src/gobj/geomSprite.cxx | 175 - panda/src/gobj/geomSprite.h | 121 - panda/src/gobj/geomTri.cxx | 255 - panda/src/gobj/geomTri.h | 74 - ...{qpgeomTriangles.cxx => geomTriangles.cxx} | 78 +- .../{qpgeomTriangles.h => geomTriangles.h} | 32 +- panda/src/gobj/geomTrifan.cxx | 421 - panda/src/gobj/geomTrifan.h | 77 - .../{qpgeomTrifans.cxx => geomTrifans.cxx} | 76 +- .../gobj/{qpgeomTrifans.h => geomTrifans.h} | 34 +- panda/src/gobj/geomTristrip.cxx | 530 - panda/src/gobj/geomTristrip.h | 76 - ...{qpgeomTristrips.cxx => geomTristrips.cxx} | 104 +- .../{qpgeomTristrips.h => geomTristrips.h} | 36 +- ...mationSpec.I => geomVertexAnimationSpec.I} | 70 +- ...onSpec.cxx => geomVertexAnimationSpec.cxx} | 18 +- ...mationSpec.h => geomVertexAnimationSpec.h} | 32 +- ...ertexArrayData.I => geomVertexArrayData.I} | 46 +- ...xArrayData.cxx => geomVertexArrayData.cxx} | 266 +- ...ertexArrayData.h => geomVertexArrayData.h} | 55 +- ...xArrayFormat.I => geomVertexArrayFormat.I} | 56 +- ...ayFormat.cxx => geomVertexArrayFormat.cxx} | 274 +- ...xArrayFormat.h => geomVertexArrayFormat.h} | 104 +- ...pgeomVertexColumn.I => geomVertexColumn.I} | 138 +- ...mVertexColumn.cxx => geomVertexColumn.cxx} | 374 +- ...pgeomVertexColumn.h => geomVertexColumn.h} | 50 +- .../{qpgeomVertexData.I => geomVertexData.I} | 140 +- ...pgeomVertexData.cxx => geomVertexData.cxx} | 470 +- .../{qpgeomVertexData.h => geomVertexData.h} | 106 +- ...pgeomVertexFormat.I => geomVertexFormat.I} | 172 +- ...mVertexFormat.cxx => geomVertexFormat.cxx} | 250 +- ...pgeomVertexFormat.h => geomVertexFormat.h} | 147 +- ...pgeomVertexReader.I => geomVertexReader.I} | 154 +- ...mVertexReader.cxx => geomVertexReader.cxx} | 26 +- ...pgeomVertexReader.h => geomVertexReader.h} | 44 +- ...mVertexRewriter.I => geomVertexRewriter.I} | 162 +- ...texRewriter.cxx => geomVertexRewriter.cxx} | 4 +- ...mVertexRewriter.h => geomVertexRewriter.h} | 38 +- ...pgeomVertexWriter.I => geomVertexWriter.I} | 240 +- ...mVertexWriter.cxx => geomVertexWriter.cxx} | 26 +- ...pgeomVertexWriter.h => geomVertexWriter.h} | 44 +- panda/src/gobj/geomprimitives.h | 33 - panda/src/gobj/gobj_composite1.cxx | 52 +- panda/src/gobj/gobj_composite2.cxx | 1 - panda/src/gobj/indexBufferContext.I | 4 +- panda/src/gobj/indexBufferContext.h | 12 +- panda/src/gobj/lens.cxx | 293 +- panda/src/gobj/lens.h | 6 +- panda/src/gobj/preparedGraphicsObjects.cxx | 28 +- panda/src/gobj/preparedGraphicsObjects.h | 20 +- panda/src/gobj/qpgeom.I | 295 - panda/src/gobj/qpgeom.cxx | 1138 -- panda/src/gobj/qpgeom.h | 234 - panda/src/gobj/qpgeomPrimitive.N | 2 - panda/src/gobj/sliderTable.h | 2 - panda/src/gobj/texture.cxx | 114 +- panda/src/gobj/texture.h | 2 +- panda/src/gobj/textureStage.cxx | 9 +- panda/src/gobj/transformBlend.h | 2 - panda/src/gobj/transformBlendTable.h | 2 - panda/src/gobj/transformTable.h | 2 - panda/src/gobj/userVertexSlider.h | 2 - panda/src/gobj/userVertexTransform.h | 2 - panda/src/gobj/vertexBufferContext.I | 4 +- panda/src/gobj/vertexBufferContext.h | 12 +- panda/src/gobj/vertexSlider.h | 2 - panda/src/gobj/vertexTransform.h | 2 - panda/src/grutil/cardMaker.cxx | 114 +- panda/src/grutil/frameRateMeter.cxx | 2 +- panda/src/grutil/lineSegs.I | 68 +- panda/src/grutil/lineSegs.cxx | 231 +- panda/src/grutil/lineSegs.h | 17 +- panda/src/grutil/multitexReducer.cxx | 189 +- panda/src/gsgbase/graphicsStateGuardianBase.h | 46 +- panda/src/gsgmisc/Sources.pp | 10 +- panda/src/gsgmisc/geomIssuer.I | 82 - panda/src/gsgmisc/geomIssuer.cxx | 170 - panda/src/gsgmisc/geomIssuer.h | 100 - panda/src/linmath/Sources.pp | 19 +- panda/src/linmath/aa_luse.h | 67 + panda/src/linmath/coordinateSystem.cxx | 32 +- panda/src/linmath/ioPtaDatagramLinMath.I | 58 - panda/src/linmath/ioPtaDatagramLinMath.cxx | 24 - panda/src/linmath/ioPtaDatagramLinMath.h | 75 - panda/src/linmath/lcast_to_src.I | 2 +- panda/src/linmath/lcast_to_src.h | 2 +- panda/src/linmath/linmath_composite1.cxx | 4 - panda/src/linmath/linmath_composite2.cxx | 1 - panda/src/linmath/luse.N | 16 - panda/src/linmath/luse.h | 40 +- panda/src/linmath/pta_Colorf.cxx | 24 - panda/src/linmath/pta_Colorf.h | 50 - panda/src/linmath/pta_Normalf.cxx | 24 - panda/src/linmath/pta_Normalf.h | 50 - panda/src/linmath/pta_TexCoordf.cxx | 24 - panda/src/linmath/pta_TexCoordf.h | 50 - panda/src/linmath/pta_Vertexf.cxx | 24 - panda/src/linmath/pta_Vertexf.h | 50 - panda/src/mathutil/fftCompressor.cxx | 5 +- panda/src/mesadisplay/Sources.pp | 2 - panda/src/parametrics/ropeNode.cxx | 639 +- panda/src/parametrics/ropeNode.h | 26 +- panda/src/parametrics/sheetNode.cxx | 191 +- .../particlesystem/geomParticleRenderer.cxx | 4 +- .../particlesystem/lineParticleRenderer.cxx | 97 +- .../src/particlesystem/lineParticleRenderer.h | 13 +- .../particlesystem/pointParticleRenderer.cxx | 85 +- .../particlesystem/pointParticleRenderer.h | 13 +- .../sparkleParticleRenderer.cxx | 187 +- .../particlesystem/sparkleParticleRenderer.h | 13 +- .../particlesystem/spriteParticleRenderer.I | 18 - .../particlesystem/spriteParticleRenderer.cxx | 495 +- .../particlesystem/spriteParticleRenderer.h | 19 +- panda/src/pgraph/bamFile.cxx | 18 + panda/src/pgraph/bamFile.h | 3 +- panda/src/pgraph/cullFaceAttrib.cxx | 4 +- panda/src/pgraph/cullResult.h | 2 +- panda/src/pgraph/cullTraverser.cxx | 86 +- panda/src/pgraph/cullableObject.cxx | 193 +- panda/src/pgraph/cullableObject.h | 12 +- panda/src/pgraph/geomNode.I | 2 +- panda/src/pgraph/geomNode.cxx | 66 +- panda/src/pgraph/geomTransformer.I | 70 +- panda/src/pgraph/geomTransformer.cxx | 400 +- panda/src/pgraph/geomTransformer.h | 98 +- panda/src/pgraph/lodNode.cxx | 6 - panda/src/pgraph/nodePath.cxx | 16 + panda/src/pgraph/nodePath.h | 2 + panda/src/pgraph/pandaNode.cxx | 16 +- panda/src/pgraph/portalClipper.cxx | 98 +- panda/src/pgraph/portalClipper.h | 12 +- panda/src/pgraph/renderModeAttrib.I | 8 +- panda/src/pgraph/renderModeAttrib.cxx | 15 +- panda/src/pgraph/renderModeAttrib.h | 2 +- panda/src/pgraph/renderState.h | 4 +- panda/src/pgraph/sceneGraphAnalyzer.cxx | 181 +- panda/src/pgraph/sceneGraphAnalyzer.h | 13 +- panda/src/pgraph/sceneGraphReducer.cxx | 40 +- panda/src/pgraph/stateMunger.h | 10 +- panda/src/pgraph/texGenAttrib.I | 4 +- panda/src/pgraph/texGenAttrib.h | 2 +- panda/src/pgraph/texMatrixAttrib.I | 4 +- panda/src/pgraph/texMatrixAttrib.cxx | 33 +- panda/src/pgraph/texMatrixAttrib.h | 2 +- panda/src/pgraph/textureAttrib.cxx | 99 +- panda/src/pgraph/transformState.I | 4 +- panda/src/pgraph/transformState.cxx | 7 +- panda/src/pgraph/transformState.h | 2 +- panda/src/pgui/pgFrameStyle.cxx | 528 +- panda/src/putil/Sources.pp | 7 +- panda/src/putil/bam.h | 24 +- panda/src/putil/bamEndian.cxx | 56 + panda/src/putil/bamEndian.h | 42 + panda/src/putil/bamReader.I | 14 + panda/src/putil/bamReader.cxx | 21 + panda/src/putil/bamReader.h | 7 +- panda/src/putil/bamWriter.I | 15 + panda/src/putil/bamWriter.cxx | 17 + panda/src/putil/bamWriter.h | 10 +- panda/src/putil/config_util.cxx | 9 + panda/src/putil/config_util.h | 3 + panda/src/putil/cycleData.cxx | 23 + panda/src/putil/cycleData.h | 3 + panda/src/putil/ioPtaDatagramFloat.cxx | 10 +- panda/src/putil/ioPtaDatagramFloat.h | 6 +- panda/src/putil/ioPtaDatagramInt.cxx | 12 +- panda/src/putil/ioPtaDatagramInt.h | 6 +- panda/src/putil/ioPtaDatagramShort.cxx | 12 +- panda/src/putil/ioPtaDatagramShort.h | 6 +- panda/src/putil/pta_int.N | 3 - panda/src/putil/putil_composite1.cxx | 1 + panda/src/text/Sources.pp | 3 - panda/src/text/cmss12.bam.c | 15765 ++++++++-------- panda/src/text/cmss12.bam.pz.c | 5067 ++--- panda/src/text/config_text.cxx | 6 +- panda/src/text/dynamicTextGlyph.cxx | 118 +- panda/src/text/geomTextGlyph.I | 4 +- panda/src/text/geomTextGlyph.cxx | 6 +- panda/src/text/geomTextGlyph.h | 14 +- panda/src/text/qpgeomTextGlyph.I | 47 - panda/src/text/qpgeomTextGlyph.cxx | 101 - panda/src/text/qpgeomTextGlyph.h | 77 - panda/src/text/staticTextFont.cxx | 88 +- panda/src/text/staticTextFont.h | 8 +- panda/src/text/textAssembler.I | 4 +- panda/src/text/textAssembler.cxx | 6 +- panda/src/text/textAssembler.h | 8 +- panda/src/text/textGlyph.I | 13 +- panda/src/text/textGlyph.h | 4 +- panda/src/text/textNode.I | 4 +- panda/src/text/textNode.cxx | 421 +- panda/src/text/textNode.h | 6 +- panda/src/text/text_composite1.cxx | 1 - panda/src/tform/mouseWatcher.I | 2 +- panda/src/tform/mouseWatcher.cxx | 39 +- panda/src/tform/mouseWatcher.h | 7 +- pandatool/src/bam/Sources.pp | 2 +- pandatool/src/bam/bamToEgg.cxx | 177 +- pandatool/src/bam/bamToEgg.h | 10 +- pandatool/src/egg-qtess/Sources.pp | 2 +- pandatool/src/mayaprogs/Sources.pp | 2 +- pandatool/src/ptloader/Sources.pp | 2 +- 396 files changed, 18241 insertions(+), 41423 deletions(-) delete mode 100755 direct/src/ffi/genPyCodeNative delete mode 100644 panda/src/builder/Sources.pp delete mode 100644 panda/src/builder/builder.I delete mode 100644 panda/src/builder/builder.cxx delete mode 100644 panda/src/builder/builder.h delete mode 100644 panda/src/builder/builderAttrib.I delete mode 100644 panda/src/builder/builderAttrib.cxx delete mode 100644 panda/src/builder/builderAttrib.h delete mode 100644 panda/src/builder/builderAttribTempl.I delete mode 100644 panda/src/builder/builderAttribTempl.h delete mode 100644 panda/src/builder/builderBucket.I delete mode 100644 panda/src/builder/builderBucket.cxx delete mode 100644 panda/src/builder/builderBucket.h delete mode 100644 panda/src/builder/builderBucketNode.I delete mode 100644 panda/src/builder/builderBucketNode.cxx delete mode 100644 panda/src/builder/builderBucketNode.h delete mode 100644 panda/src/builder/builderFuncs.I delete mode 100644 panda/src/builder/builderFuncs.h delete mode 100644 panda/src/builder/builderMisc.cxx delete mode 100644 panda/src/builder/builderMisc.h delete mode 100644 panda/src/builder/builderNormalVisualizer.I delete mode 100644 panda/src/builder/builderNormalVisualizer.cxx delete mode 100644 panda/src/builder/builderNormalVisualizer.h delete mode 100644 panda/src/builder/builderPrim.I delete mode 100644 panda/src/builder/builderPrim.cxx delete mode 100644 panda/src/builder/builderPrim.h delete mode 100644 panda/src/builder/builderPrimTempl.I delete mode 100644 panda/src/builder/builderPrimTempl.h delete mode 100644 panda/src/builder/builderProperties.cxx delete mode 100644 panda/src/builder/builderProperties.h delete mode 100644 panda/src/builder/builderTypes.cxx delete mode 100644 panda/src/builder/builderTypes.h delete mode 100644 panda/src/builder/builderVertex.I delete mode 100644 panda/src/builder/builderVertex.cxx delete mode 100644 panda/src/builder/builderVertex.h delete mode 100644 panda/src/builder/builderVertexTempl.I delete mode 100644 panda/src/builder/builderVertexTempl.h delete mode 100644 panda/src/builder/builder_compare.I delete mode 100644 panda/src/builder/builder_compare.h delete mode 100644 panda/src/builder/builder_composite1.cxx delete mode 100644 panda/src/builder/builder_composite2.cxx delete mode 100644 panda/src/builder/builder_headers.h delete mode 100644 panda/src/builder/config_builder.cxx delete mode 100644 panda/src/builder/config_builder.h delete mode 100644 panda/src/builder/mesher.cxx delete mode 100644 panda/src/builder/mesher.h delete mode 100644 panda/src/builder/mesherConfig.h delete mode 100644 panda/src/builder/mesherEdge.I delete mode 100644 panda/src/builder/mesherEdge.h delete mode 100644 panda/src/builder/mesherFanMaker.I delete mode 100644 panda/src/builder/mesherFanMaker.h delete mode 100644 panda/src/builder/mesherStrip.I delete mode 100644 panda/src/builder/mesherStrip.h delete mode 100644 panda/src/builder/mesherTempl.I delete mode 100644 panda/src/builder/mesherTempl.h delete mode 100644 panda/src/builder/test_builder.cxx delete mode 100644 panda/src/builder/test_builder_data.cxx delete mode 100644 panda/src/chan/animChannelScalarTable.N delete mode 100644 panda/src/char/char_headers.h delete mode 100644 panda/src/char/computedVertices.I delete mode 100644 panda/src/char/computedVertices.cxx delete mode 100644 panda/src/char/computedVertices.h delete mode 100644 panda/src/char/computedVerticesMorph.I delete mode 100644 panda/src/char/computedVerticesMorph.cxx delete mode 100644 panda/src/char/computedVerticesMorph.h delete mode 100644 panda/src/char/dynamicVertices.cxx delete mode 100644 panda/src/char/dynamicVertices.h delete mode 100644 panda/src/egg/eggAnimData.N delete mode 100644 panda/src/egg2pg/computedVerticesMaker.I delete mode 100644 panda/src/egg2pg/computedVerticesMaker.cxx delete mode 100644 panda/src/egg2pg/computedVerticesMaker.h delete mode 100644 panda/src/egg2pg/computedVerticesMakerEntity.I delete mode 100644 panda/src/egg2pg/computedVerticesMakerEntity.h rename panda/src/gobj/{qpgeomCacheEntry.I => geomCacheEntry.I} (78%) rename panda/src/gobj/{qpgeomCacheEntry.cxx => geomCacheEntry.cxx} (75%) rename panda/src/gobj/{qpgeomCacheEntry.h => geomCacheEntry.h} (66%) rename panda/src/gobj/{qpgeomCacheManager.I => geomCacheManager.I} (88%) rename panda/src/gobj/{qpgeomCacheManager.cxx => geomCacheManager.cxx} (70%) rename panda/src/gobj/{qpgeomCacheManager.h => geomCacheManager.h} (85%) rename panda/src/gobj/{qpgeomEnums.cxx => geomEnums.cxx} (67%) rename panda/src/gobj/{qpgeomEnums.h => geomEnums.h} (94%) delete mode 100644 panda/src/gobj/geomLine.cxx delete mode 100644 panda/src/gobj/geomLine.h rename panda/src/gobj/{qpgeomLines.cxx => geomLines.cxx} (77%) rename panda/src/gobj/{qpgeomLines.h => geomLines.h} (71%) delete mode 100644 panda/src/gobj/geomLinestrip.cxx delete mode 100644 panda/src/gobj/geomLinestrip.h rename panda/src/gobj/{qpgeomLinestrips.cxx => geomLinestrips.cxx} (77%) rename panda/src/gobj/{qpgeomLinestrips.h => geomLinestrips.h} (68%) rename panda/src/gobj/{qpgeomMunger.I => geomMunger.I} (81%) rename panda/src/gobj/{qpgeomMunger.cxx => geomMunger.cxx} (77%) rename panda/src/gobj/{qpgeomMunger.h => geomMunger.h} (61%) delete mode 100644 panda/src/gobj/geomPoint.cxx delete mode 100644 panda/src/gobj/geomPoint.h rename panda/src/gobj/{qpgeomPoints.cxx => geomPoints.cxx} (79%) rename panda/src/gobj/{qpgeomPoints.h => geomPoints.h} (73%) delete mode 100644 panda/src/gobj/geomPolygon.cxx delete mode 100644 panda/src/gobj/geomPolygon.h rename panda/src/gobj/{qpgeomPrimitive.I => geomPrimitive.I} (81%) rename panda/src/gobj/{qpgeomPrimitive.cxx => geomPrimitive.cxx} (83%) rename panda/src/gobj/{qpgeomPrimitive.h => geomPrimitive.h} (80%) delete mode 100644 panda/src/gobj/geomQuad.cxx delete mode 100644 panda/src/gobj/geomQuad.h delete mode 100644 panda/src/gobj/geomSphere.cxx delete mode 100644 panda/src/gobj/geomSphere.h delete mode 100644 panda/src/gobj/geomSprite.I delete mode 100644 panda/src/gobj/geomSprite.cxx delete mode 100644 panda/src/gobj/geomSprite.h delete mode 100644 panda/src/gobj/geomTri.cxx delete mode 100644 panda/src/gobj/geomTri.h rename panda/src/gobj/{qpgeomTriangles.cxx => geomTriangles.cxx} (80%) rename panda/src/gobj/{qpgeomTriangles.h => geomTriangles.h} (69%) delete mode 100644 panda/src/gobj/geomTrifan.cxx delete mode 100644 panda/src/gobj/geomTrifan.h rename panda/src/gobj/{qpgeomTrifans.cxx => geomTrifans.cxx} (79%) rename panda/src/gobj/{qpgeomTrifans.h => geomTrifans.h} (68%) delete mode 100644 panda/src/gobj/geomTristrip.cxx delete mode 100644 panda/src/gobj/geomTristrip.h rename panda/src/gobj/{qpgeomTristrips.cxx => geomTristrips.cxx} (83%) rename panda/src/gobj/{qpgeomTristrips.h => geomTristrips.h} (67%) rename panda/src/gobj/{qpgeomVertexAnimationSpec.I => geomVertexAnimationSpec.I} (76%) rename panda/src/gobj/{qpgeomVertexAnimationSpec.cxx => geomVertexAnimationSpec.cxx} (84%) rename panda/src/gobj/{qpgeomVertexAnimationSpec.h => geomVertexAnimationSpec.h} (70%) rename panda/src/gobj/{qpgeomVertexArrayData.I => geomVertexArrayData.I} (79%) rename panda/src/gobj/{qpgeomVertexArrayData.cxx => geomVertexArrayData.cxx} (69%) rename panda/src/gobj/{qpgeomVertexArrayData.h => geomVertexArrayData.h} (78%) rename panda/src/gobj/{qpgeomVertexArrayFormat.I => geomVertexArrayFormat.I} (77%) rename panda/src/gobj/{qpgeomVertexArrayFormat.cxx => geomVertexArrayFormat.cxx} (73%) rename panda/src/gobj/{qpgeomVertexArrayFormat.h => geomVertexArrayFormat.h} (55%) rename panda/src/gobj/{qpgeomVertexColumn.I => geomVertexColumn.I} (82%) rename panda/src/gobj/{qpgeomVertexColumn.cxx => geomVertexColumn.cxx} (80%) rename panda/src/gobj/{qpgeomVertexColumn.h => geomVertexColumn.h} (87%) rename panda/src/gobj/{qpgeomVertexData.I => geomVertexData.I} (81%) rename panda/src/gobj/{qpgeomVertexData.cxx => geomVertexData.cxx} (82%) rename panda/src/gobj/{qpgeomVertexData.h => geomVertexData.h} (77%) rename panda/src/gobj/{qpgeomVertexFormat.I => geomVertexFormat.I} (80%) rename panda/src/gobj/{qpgeomVertexFormat.cxx => geomVertexFormat.cxx} (82%) rename panda/src/gobj/{qpgeomVertexFormat.h => geomVertexFormat.h} (61%) rename panda/src/gobj/{qpgeomVertexReader.I => geomVertexReader.I} (79%) rename panda/src/gobj/{qpgeomVertexReader.cxx => geomVertexReader.cxx} (77%) rename panda/src/gobj/{qpgeomVertexReader.h => geomVertexReader.h} (79%) rename panda/src/gobj/{qpgeomVertexRewriter.I => geomVertexRewriter.I} (68%) rename panda/src/gobj/{qpgeomVertexRewriter.cxx => geomVertexRewriter.cxx} (90%) rename panda/src/gobj/{qpgeomVertexRewriter.h => geomVertexRewriter.h} (68%) rename panda/src/gobj/{qpgeomVertexWriter.I => geomVertexWriter.I} (82%) rename panda/src/gobj/{qpgeomVertexWriter.cxx => geomVertexWriter.cxx} (78%) rename panda/src/gobj/{qpgeomVertexWriter.h => geomVertexWriter.h} (85%) delete mode 100644 panda/src/gobj/geomprimitives.h delete mode 100644 panda/src/gobj/qpgeom.I delete mode 100644 panda/src/gobj/qpgeom.cxx delete mode 100644 panda/src/gobj/qpgeom.h delete mode 100644 panda/src/gobj/qpgeomPrimitive.N delete mode 100644 panda/src/gsgmisc/geomIssuer.I delete mode 100644 panda/src/gsgmisc/geomIssuer.cxx delete mode 100644 panda/src/gsgmisc/geomIssuer.h create mode 100644 panda/src/linmath/aa_luse.h delete mode 100644 panda/src/linmath/ioPtaDatagramLinMath.I delete mode 100644 panda/src/linmath/ioPtaDatagramLinMath.cxx delete mode 100644 panda/src/linmath/ioPtaDatagramLinMath.h delete mode 100644 panda/src/linmath/pta_Colorf.cxx delete mode 100644 panda/src/linmath/pta_Colorf.h delete mode 100644 panda/src/linmath/pta_Normalf.cxx delete mode 100644 panda/src/linmath/pta_Normalf.h delete mode 100644 panda/src/linmath/pta_TexCoordf.cxx delete mode 100644 panda/src/linmath/pta_TexCoordf.h delete mode 100644 panda/src/linmath/pta_Vertexf.cxx delete mode 100644 panda/src/linmath/pta_Vertexf.h create mode 100644 panda/src/putil/bamEndian.cxx create mode 100644 panda/src/putil/bamEndian.h delete mode 100644 panda/src/putil/pta_int.N delete mode 100644 panda/src/text/qpgeomTextGlyph.I delete mode 100644 panda/src/text/qpgeomTextGlyph.cxx delete mode 100644 panda/src/text/qpgeomTextGlyph.h diff --git a/direct/src/ffi/Sources.pp b/direct/src/ffi/Sources.pp index 64a16c90cb..f66f402092 100644 --- a/direct/src/ffi/Sources.pp +++ b/direct/src/ffi/Sources.pp @@ -6,7 +6,6 @@ #define INSTALL_SCRIPTS $[INSTALL_SCRIPTS] genPyCode.bat #else #define INSTALL_SCRIPTS $[INSTALL_SCRIPTS] genPyCode - #define INSTALL_SCRIPTS $[INSTALL_SCRIPTS] genPyCodeNative #endif #include $[THISDIRPREFIX]genPyCode.pp diff --git a/direct/src/ffi/genPyCodeNative b/direct/src/ffi/genPyCodeNative deleted file mode 100755 index 243c95b72c..0000000000 --- a/direct/src/ffi/genPyCodeNative +++ /dev/null @@ -1,4 +0,0 @@ -#! /bin/sh - -echo "genPyCodeNative is now deprecated; just use genPyCode." -exit 1 diff --git a/dtool/Config.pp b/dtool/Config.pp index 6b1465796a..40550eadf0 100644 --- a/dtool/Config.pp +++ b/dtool/Config.pp @@ -102,10 +102,6 @@ // #define INSTALL_LIB_DIR /usr/lib/python2.2/site-packages -// If you want to use python 2.2 or earlier, you may need this defined: -// (Later versions of Python handle signed and unsigned integers differently). -// #define USE_PYTHON_2_2_OR_EARLIER - // The character used to separate components of an OS-specific // directory name depends on the platform (it is '/' on Unix, '\' on @@ -813,8 +809,8 @@ // a running program without crashing the running instance. However, // it doesn't understanding installing a program from a subdirectory, // so we have to cd into the source directory first. -#defer INSTALL $[if $[ne $[dir $[local]], ./],cd ./$[dir $[local]] &&] install -m $[INSTALL_UMASK_DATA] $[notdir $[local]] $[dest]/ -#defer INSTALL_PROG $[if $[ne $[dir $[local]], ./],cd ./$[dir $[local]] &&] install -m $[INSTALL_UMASK_PROG] $[notdir $[local]] $[dest]/ +#defer INSTALL $[if $[ne $[dir $[local]], ./],cd ./$[dir $[local]] &&] install -m $[INSTALL_UMASK_DATA] -p $[notdir $[local]] $[dest]/ +#defer INSTALL_PROG $[if $[ne $[dir $[local]], ./],cd ./$[dir $[local]] &&] install -m $[INSTALL_UMASK_PROG] -p $[notdir $[local]] $[dest]/ // Variable definitions for building with the Irix MIPSPro compiler. #if $[eq $[USE_COMPILER], MIPS] diff --git a/dtool/LocalSetup.pp b/dtool/LocalSetup.pp index a997209921..b4cc60caa2 100644 --- a/dtool/LocalSetup.pp +++ b/dtool/LocalSetup.pp @@ -448,7 +448,4 @@ $[cdefine VC6_STYLE_ALLOCATOR] $[cdefine MODERN_STYLE_ALLOCATOR] $[cdefine NO_STYLE_ALLOCATOR] -/* Define if you want to use Python before 2.3. */ -$[cdefine USE_PYTHON_2_2_OR_EARLIER] - #end dtool_config.h diff --git a/dtool/pptempl/Template.gmsvc.pp b/dtool/pptempl/Template.gmsvc.pp index acc6acc93e..124ff875d6 100644 --- a/dtool/pptempl/Template.gmsvc.pp +++ b/dtool/pptempl/Template.gmsvc.pp @@ -427,19 +427,19 @@ $[TAB] rm -f $[sort $[installed_files]] $[install_lib_dir]/$[get_dllname $[TARGET]].$[dlllib] : $[ODIR]/$[get_dllname $[TARGET]].$[dlllib] #define local $[get_dllname $[TARGET]].$[dlllib] #define dest $[install_lib_dir] -$[TAB] cp -f $[ODIR]/$[local] $[dest]/ +$[TAB] cp -p -f $[ODIR]/$[local] $[dest]/ #endif $[install_lib_dir]/$[get_dllname $[TARGET]].lib : $[ODIR]/$[get_dllname $[TARGET]].lib #define local $[get_dllname $[TARGET]].lib #define dest $[install_lib_dir] -$[TAB] cp -f $[ODIR]/$[local] $[dest]/ +$[TAB] cp -p -f $[ODIR]/$[local] $[dest]/ #if $[and $[build_dlls],$[build_pdbs]] $[install_lib_dir]/$[get_dllname $[TARGET]].pdb : $[ODIR]/$[get_dllname $[TARGET]].pdb #define local $[get_dllname $[TARGET]].pdb #define dest $[install_lib_dir] -$[TAB] cp -f $[ODIR]/$[local] $[dest]/ +$[TAB] cp -p -f $[ODIR]/$[local] $[dest]/ #endif #if $[igatescan] @@ -458,7 +458,7 @@ $[TAB] cp -f $[ODIR]/$[local] $[dest]/ $[igatedb:$[ODIR]/%=$[install_igatedb_dir]/%] : $[igatedb] #define local $[igatedb] #define dest $[install_igatedb_dir] -$[TAB] cp -f $[local] $[dest]/ +$[TAB] cp -p -f $[local] $[dest]/ // We have to split this out as a separate rule to properly support // parallel make. @@ -610,7 +610,7 @@ $[TAB] rm -f $[sort $[installed_files]] $[install_lib_dir]/$[get_dllname $[TARGET]].lib : $[ODIR]/$[get_dllname $[TARGET]].lib #define local $[get_dllname $[TARGET]].lib #define dest $[install_lib_dir] -$[TAB] cp -f $[ODIR]/$[local] $[dest]/ +$[TAB] cp -p -f $[ODIR]/$[local] $[dest]/ #end static_lib_target ss_lib_target @@ -645,7 +645,7 @@ $[TAB] rm -f $[sort $[installed_files]] #define local $[TARGET] #define dest $[install_bin_dir] $[install_bin_dir]/$[TARGET] : $[ODIR]/$[TARGET] -$[TAB] cp -f $[ODIR]/$[local] $[dest]/ +$[TAB] cp -p -f $[ODIR]/$[local] $[dest]/ #end sed_bin_target @@ -699,13 +699,13 @@ $[TAB] rm -f $[sort $[installed_files]] $[install_bin_dir]/$[TARGET].exe : $[ODIR]/$[TARGET].exe #define local $[TARGET].exe #define dest $[install_bin_dir] -$[TAB] cp -f $[ODIR]/$[local] $[dest]/ +$[TAB] cp -p -f $[ODIR]/$[local] $[dest]/ #if $[build_pdbs] $[install_bin_dir]/$[TARGET].pdb : $[ODIR]/$[TARGET].pdb #define local $[TARGET].pdb #define dest $[install_bin_dir] -$[TAB] cp -f $[ODIR]/$[local] $[dest]/ +$[TAB] cp -p -f $[ODIR]/$[local] $[dest]/ #endif #if $[bin_postprocess_target] @@ -717,7 +717,7 @@ $[TAB] rm -f $[output_exe] $[TAB] $[bin_postprocess_cmd] $[bin_postprocess_arg1] $[input_exe] $[bin_postprocess_arg2] $[output_exe] $[install_bin_dir]/$[bin_postprocess_target].exe : $[output_exe] -$[TAB] cp -f $[output_exe] $[install_bin_dir]/ +$[TAB] cp -p -f $[output_exe] $[install_bin_dir]/ #endif #end bin_target @@ -850,14 +850,14 @@ $[TAB] $[COMPILE_C++] $[install_bin_dir]/$[file] : $[file] #define local $[file] #define dest $[install_bin_dir] -$[TAB] chmod +x $[local]; cp -f $[local] $[dest]/ +$[TAB] chmod +x $[local]; cp -p -f $[local] $[dest]/ #end file #foreach file $[install_headers] $[install_headers_dir]/$[file] : $[file] #define local $[file] #define dest $[install_headers_dir] -$[TAB] cp -f $[local] $[dest]/ +$[TAB] cp -p -f $[local] $[dest]/ #end file #foreach file $[install_parser_inc] @@ -866,12 +866,12 @@ $[install_parser_inc_dir]/$[file] : $[notdir $[file]] #define local $[notdir $[file]] #define dest $[install_parser_inc_dir]/$[dir $[file]] $[TAB] mkdir -p $[install_parser_inc_dir]/$[dir $[file]] || echo -$[TAB] cp -f $[local] $[dest] +$[TAB] cp -p -f $[local] $[dest] #else $[install_parser_inc_dir]/$[file] : $[file] #define local $[file] #define dest $[install_parser_inc_dir] -$[TAB] cp -f $[local] $[dest]/ +$[TAB] cp -p -f $[local] $[dest]/ #endif #end file @@ -879,21 +879,21 @@ $[TAB] cp -f $[local] $[dest]/ $[install_data_dir]/$[file] : $[file] #define local $[file] #define dest $[install_data_dir] -$[TAB] cp -f $[local] $[dest]/ +$[TAB] cp -p -f $[local] $[dest]/ #end file #foreach file $[install_config] $[install_config_dir]/$[file] : $[file] #define local $[file] #define dest $[install_config_dir] -$[TAB] cp -f $[local] $[dest]/ +$[TAB] cp -p -f $[local] $[dest]/ #end file #foreach file $[install_py] $[install_py_dir]/$[file] : $[file] #define local $[file] #define dest $[install_py_dir] -$[TAB] cp -f $[local] $[dest]/ +$[TAB] cp -p -f $[local] $[dest]/ #end file #if $[install_py] @@ -1049,7 +1049,7 @@ $[TAB] @test -d $[install_headers_dir] || mkdir -p $[install_headers_dir] $[install_headers_dir]/$[CONFIG_HEADER] : $[CONFIG_HEADER] #define local $[CONFIG_HEADER] #define dest $[install_headers_dir] -$[TAB] cp -f $[local] $[dest]/ +$[TAB] cp -p -f $[local] $[dest]/ #endif // Finally, the rules to freshen the Makefile itself. diff --git a/dtool/src/interrogate/interfaceMakerPythonObj.cxx b/dtool/src/interrogate/interfaceMakerPythonObj.cxx index 541258061f..4eb38ac477 100644 --- a/dtool/src/interrogate/interfaceMakerPythonObj.cxx +++ b/dtool/src/interrogate/interfaceMakerPythonObj.cxx @@ -394,12 +394,15 @@ write_function_instance(ostream &out, int indent_level, extra_cleanup += " Py_XDECREF(" + param_name + "_long);"; expected_params += "long"; - #ifndef USE_PYTHON_2_2_OR_EARLIER } else if (TypeManager::is_unsigned_integer(type)) { - out << "unsigned int " << param_name; - format_specifiers += "I"; // This requires Python 2.3 or better + out << "PyObject *" << param_name; + format_specifiers += "O"; parameter_list += ", &" + param_name; - #endif + extra_convert += " PyObject *" + param_name + "_uint = PyNumber_Long(" + param_name + ");"; + extra_param_check += "|| (" + param_name + "_uint == NULL)"; + pexpr_string = "(unsigned int)PyLong_AsUnsignedLong(" + param_name + "_uint)"; + extra_cleanup += " Py_XDECREF(" + param_name + "_uint);"; + expected_params += "unsigned int"; } else if (TypeManager::is_integer(type)) { out << "int " << param_name; @@ -571,11 +574,9 @@ pack_return_value(ostream &out, int indent_level, indent(out, indent_level) << "return PyLong_FromLongLong(" << return_expr << ");\n"; - #ifndef USE_PYTHON_2_2_OR_EARLIER } else if (TypeManager::is_unsigned_integer(type)) { indent(out, indent_level) << "return PyLong_FromUnsignedLong(" << return_expr << ");\n"; - #endif } else if (TypeManager::is_integer(type)) { indent(out, indent_level) diff --git a/dtool/src/interrogate/interfaceMakerPythonSimple.cxx b/dtool/src/interrogate/interfaceMakerPythonSimple.cxx index 5611a7fbf2..10d1dc0210 100644 --- a/dtool/src/interrogate/interfaceMakerPythonSimple.cxx +++ b/dtool/src/interrogate/interfaceMakerPythonSimple.cxx @@ -303,12 +303,14 @@ void InterfaceMakerPythonSimple::write_function_instance(ostream &out, Interface pexpr_string = "PyLong_AsLongLong(" + param_name + "_long)"; extra_cleanup += " Py_XDECREF(" + param_name + "_long);"; - #ifndef USE_PYTHON_2_2_OR_EARLIER } else if (TypeManager::is_unsigned_integer(type)) { - out << "unsigned int " << param_name; - format_specifiers += "I"; // This requires Python 2.3 or better + out << "PyObject *" << param_name; + format_specifiers += "O"; parameter_list += ", &" + param_name; - #endif + extra_convert += " PyObject *" + param_name + "_uint = PyNumber_Long(" + param_name + ");"; + extra_param_check += "|| (" + param_name + "_uint == NULL)"; + pexpr_string = "(unsigned int)PyLong_AsUnsignedLong(" + param_name + "_uint)"; + extra_cleanup += " Py_XDECREF(" + param_name + "_uint);"; } else if (TypeManager::is_integer(type)) { out << "int " << param_name; @@ -463,11 +465,9 @@ pack_return_value(ostream &out, int indent_level, indent(out, indent_level) << "return PyLong_FromLongLong(" << return_expr << ");\n"; - #ifndef USE_PYTHON_2_2_OR_EARLIER } else if (TypeManager::is_unsigned_integer(type)) { indent(out, indent_level) << "return PyLong_FromUnsignedLong(" << return_expr << ");\n"; - #endif } else if (TypeManager::is_integer(type)) { indent(out, indent_level) diff --git a/panda/metalibs/pandadx7/Sources.pp b/panda/metalibs/pandadx7/Sources.pp index ffd0ccc6da..3a1a17d1b0 100644 --- a/panda/metalibs/pandadx7/Sources.pp +++ b/panda/metalibs/pandadx7/Sources.pp @@ -1,4 +1,7 @@ -#define BUILD_DIRECTORY $[HAVE_DX] +// DX7 build is temporarily disabled until we bring it up-to-date with +// the new Geom rewrite. +#define BUILD_DIRECTORY +//#define BUILD_DIRECTORY $[HAVE_DX] // DIR_TYPE "metalib" indicates we are building a shared library that // consists mostly of references to other shared libraries. Under diff --git a/panda/metalibs/pandadx7/pandadx7.cxx b/panda/metalibs/pandadx7/pandadx7.cxx index b7c5115fa2..a718930f58 100644 --- a/panda/metalibs/pandadx7/pandadx7.cxx +++ b/panda/metalibs/pandadx7/pandadx7.cxx @@ -7,6 +7,12 @@ #include "config_dxgsg7.h" +// By including checkPandaVersion.h, we guarantee that runtime +// attempts to load libpandadx7.dll will fail if they +// inadvertently link with the wrong version of libdtool.dll. + +#include "checkPandaVersion.h" + //////////////////////////////////////////////////////////////////// // Function: init_libpandadx7 // Description: Initializes the library. This must be called at diff --git a/panda/metalibs/pandadx9/Sources.pp b/panda/metalibs/pandadx9/Sources.pp index 5e14560049..e465c5a625 100755 --- a/panda/metalibs/pandadx9/Sources.pp +++ b/panda/metalibs/pandadx9/Sources.pp @@ -1,4 +1,7 @@ -#define BUILD_DIRECTORY $[HAVE_DX] +// DX9 build is temporarily disabled until we bring it up-to-date with +// the new Geom rewrite. +#define BUILD_DIRECTORY +//#define BUILD_DIRECTORY $[HAVE_DX] // DIR_TYPE "metalib" indicates we are building a shared library that // consists mostly of references to other shared libraries. Under diff --git a/panda/metalibs/pandadx9/pandadx9.cxx b/panda/metalibs/pandadx9/pandadx9.cxx index ec5dae0c16..1c8ec86469 100755 --- a/panda/metalibs/pandadx9/pandadx9.cxx +++ b/panda/metalibs/pandadx9/pandadx9.cxx @@ -8,7 +8,7 @@ #include "config_dxgsg9.h" // By including checkPandaVersion.h, we guarantee that runtime -// attempts to load libpandadx8.dll will fail if they +// attempts to load libpandadx9.dll will fail if they // inadvertently link with the wrong version of libdtool.dll. #include "checkPandaVersion.h" diff --git a/panda/metalibs/pandaegg/Sources.pp b/panda/metalibs/pandaegg/Sources.pp index cbd4f54236..ab5d0c6969 100644 --- a/panda/metalibs/pandaegg/Sources.pp +++ b/panda/metalibs/pandaegg/Sources.pp @@ -8,7 +8,7 @@ #define BUILDING_DLL BUILDING_PANDAEGG #define COMPONENT_LIBS \ - egg2pg egg2sg egg builder + egg2pg egg2sg egg #define LOCAL_LIBS putil express #define OTHER_LIBS interrogatedb:c dconfig:c dtoolconfig:m \ diff --git a/panda/metalibs/pandaegg/pandaegg.cxx b/panda/metalibs/pandaegg/pandaegg.cxx index d9369babdd..10afe6d392 100644 --- a/panda/metalibs/pandaegg/pandaegg.cxx +++ b/panda/metalibs/pandaegg/pandaegg.cxx @@ -6,7 +6,6 @@ #include "pandaegg.h" #include "config_egg.h" -#include "config_builder.h" #include "config_egg2pg.h" // By including checkPandaVersion.h, we guarantee that runtime @@ -26,6 +25,5 @@ void init_libpandaegg() { init_libegg(); - init_libbuilder(); init_libegg2pg(); } diff --git a/panda/src/builder/Sources.pp b/panda/src/builder/Sources.pp deleted file mode 100644 index 576d5d4ef9..0000000000 --- a/panda/src/builder/Sources.pp +++ /dev/null @@ -1,58 +0,0 @@ -#define OTHER_LIBS interrogatedb:c dconfig:c dtoolconfig:m \ - dtoolutil:c dtoolbase:c dtool:m - -#begin lib_target - #define TARGET builder - #define LOCAL_LIBS \ - pgraph linmath gobj putil gsgbase mathutil pnmimage \ - pandabase - - #define COMBINED_SOURCES $[TARGET]_composite1.cxx $[TARGET]_composite2.cxx - - #define SOURCES \ - builder.I builder.h \ - builder_compare.I builder_compare.h \ - builderAttrib.I builderAttrib.h \ - builderAttribTempl.I builderAttribTempl.h builderBucket.I \ - builderBucket.h builderBucketNode.I builderBucketNode.h \ - builderFuncs.I builderFuncs.h builderMisc.h \ - builderNormalVisualizer.I builderNormalVisualizer.h \ - builderPrim.I builderPrim.h builderPrimTempl.I \ - builderPrimTempl.h builderProperties.h builderTypes.h \ - builderVertex.I builderVertex.h builderVertexTempl.I \ - builderVertexTempl.h config_builder.h mesher.h \ - mesherConfig.h mesherEdge.I mesherEdge.h mesherFanMaker.I \ - mesherFanMaker.h mesherStrip.I mesherStrip.h mesherTempl.I \ - mesherTempl.h - - #define INCLUDED_SOURCES \ - builder.cxx builderAttrib.cxx builderBucket.cxx \ - builderBucketNode.cxx builderMisc.cxx \ - builderNormalVisualizer.cxx builderPrim.cxx \ - builderProperties.cxx builderTypes.cxx builderVertex.cxx \ - config_builder.cxx mesher.cxx - - #define INSTALL_HEADERS \ - builder.I builder.h \ - builder_compare.I builder_compare.h \ - builderAttrib.I builderAttrib.h \ - builderAttribTempl.I builderAttribTempl.h builderBucket.I \ - builderBucket.h builderBucketNode.I builderBucketNode.h \ - builderNormalVisualizer.I builderNormalVisualizer.h \ - builderPrim.I builderPrim.h \ - builderPrimTempl.I builderPrimTempl.h builderProperties.h \ - builderTypes.h builderVertex.I builderVertex.h builderVertexTempl.I \ - builderVertexTempl.h config_builder.h - -#end lib_target - -#begin test_bin_target - #define TARGET test_builder - #define LOCAL_LIBS \ - builder - - #define SOURCES \ - test_builder.cxx test_builder_data.cxx - -#end test_bin_target - diff --git a/panda/src/builder/builder.I b/panda/src/builder/builder.I deleted file mode 100644 index 9afe42c607..0000000000 --- a/panda/src/builder/builder.I +++ /dev/null @@ -1,82 +0,0 @@ -// Filename: builder.I -// Created by: drose (09Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - - - -//////////////////////////////////////////////////////////////////// -// Function: Builder::add_prim -// Access: Public -// Description: Adds the indicated nonindexed primitive, along with -// its associated bucket, to the builder's internal -// structures. This copies all relevant information -// into the builder. -// -// Returns true if the primitive was successfully added, -// false if it was invalid for some reason (for -// instance, a polygon with two vertices). -//////////////////////////////////////////////////////////////////// -INLINE bool Builder:: -add_prim(const BuilderBucket &bucket, - const BuilderPrim &prim) { - add_bucket(bucket); - return ((BuilderBucketNode &)(*_bi)).add_prim(prim); -} - - -//////////////////////////////////////////////////////////////////// -// Function: Builder::add_prim -// Access: Public -// Description: Adds the indicated indexed primitive, along with -// its associated bucket, to the builder's internal -// structures. This copies all relevant information -// into the builder. -// -// Returns true if the primitive was successfully added, -// false if it was invalid for some reason (for -// instance, a polygon with two vertices). -//////////////////////////////////////////////////////////////////// -INLINE bool Builder:: -add_prim(const BuilderBucket &bucket, - const BuilderPrimI &prim) { - add_bucket(bucket); - return ((BuilderBucketNode &)(*_bi)).add_prim(prim); -} - - -//////////////////////////////////////////////////////////////////// -// Function: Builder::add_prim_nonindexed -// Access: Public -// Description: Adds the specified indexed primitive as if it were -// nonindexed. This simply looks up each coordinate -// value on the prim in its associated array and stores -// a nonindexed primitive with the actual coordinate -// values, instead of the index numbers. -// -// This is handy for having code that calls the builder -// and might want to build either indexed or nonindexed -// geometry, as selected by the user at run-time. -// Simply build indexed geometry in all cases, then call -// either add_prim or add_prim_nonindexed, according to -// the user's selection. -//////////////////////////////////////////////////////////////////// -INLINE bool Builder:: -add_prim_nonindexed(const BuilderBucket &bucket, - const BuilderPrimI &prim) { - add_bucket(bucket); - return ((BuilderBucketNode &)(*_bi)).add_prim_nonindexed(prim); -} diff --git a/panda/src/builder/builder.cxx b/panda/src/builder/builder.cxx deleted file mode 100644 index f6e88e437c..0000000000 --- a/panda/src/builder/builder.cxx +++ /dev/null @@ -1,247 +0,0 @@ -// Filename: builder.cxx -// Created by: drose (09Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "builderFuncs.h" -#include "builderMisc.h" -#include "notify.h" -#include "pmap.h" -#include "builder.h" -#include "pandaNode.h" -#include "geomNode.h" -#include "dcast.h" - -//////////////////////////////////////////////////////////////////// -// Function: Builder::Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -Builder:: -Builder() { - _bi = _buckets.end(); -} - -//////////////////////////////////////////////////////////////////// -// Function: Builder::Destructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -Builder:: -~Builder() { - // Free all the buckets we allocated. We allocated 'em, we free - // 'em. - Buckets::iterator bi; - for (bi = _buckets.begin(); - bi != _buckets.end(); - ++bi) { - BuilderBucket *bucket = (*bi).get_bucket(); - delete bucket; - } -} - - -// We use the NodeMap class to build up a map of Nodes to GeomNodes. -// There may be several buckets that point to the same Node; these -// should all be given the same GeomNode, when possible. - -// However, if two buckets have different sets of scene graph -// properties--in particular, the _hidden member is different--they -// must be given separate GeomNodes. - -// Furthermore, it's possible to name each bucket. If two buckets -// with the same Node pointer have different names, then they should -// be given two different GeomNodes. - -class NodeMap : public Namable { -public: - NodeMap(PandaNode *node, const BuilderBucket *bucket) - : _node(node), _bucket(bucket) { } - - bool operator < (const NodeMap &other) const { - if (_node != other._node) { - return _node < other._node; - } - if (_bucket->_hidden != other._bucket->_hidden) { - return _bucket->_hidden < other._bucket->_hidden; - } - if (_bucket->get_name() != other._bucket->get_name()) { - return _bucket->get_name() < other._bucket->get_name(); - } - return 0; - } - - PandaNode *_node; - - // Although a bucket pointer is stored here in the NodeMap class, - // you should not use it except to extract the name and/or the - // _trans member. Remember, this bucket pointer stands for any of - // possibly several bucket pointers, all different, except that they - // share the same name. - const BuilderBucket *_bucket; -}; - - - -//////////////////////////////////////////////////////////////////// -// Function: Builder::build -// Access: Public -// Description: Creates Geoms for all the primitives added to all -// buckets, and adds them where appropriate to place -// them in the scene graph under their respective -// parents, and/or returns a single GeomNode that -// contains all geometry whose bucket did not reference -// a particular scene graph node to parent them to. -// -// If a bucket's _node pointer was a GeomNode, the -// geometry will be added directly to that node. If the -// _node pointer was any other kind of node, a GeomNode -// will be created and parented to that node, and its -// name will be the name of the bucket. In this case, -// the name of the bucket can also be used to -// differentiate nodes: if two buckets reference the -// same node, but have different names, then two -// different GeomNodes are created, one with each name. -//////////////////////////////////////////////////////////////////// -GeomNode *Builder:: -build(const string &default_name) { - typedef pmap GeomNodeMap; - GeomNodeMap geom_nodes; - - // First, build all the Geoms and create GeomNodes for them. Each - // unique Node gets its own GeomNode. If the Node is itself a - // GeomNode, that GeomNode is used directly. - Buckets::iterator i; - for (i = _buckets.begin(); - i != _buckets.end(); - ++i) { - BuilderBucket *bucket = (*i).get_bucket(); - PandaNode *node = bucket->_node; - GeomNode *geom_node = NULL; - - if (node != (PandaNode *)NULL && - node->is_of_type(GeomNode::get_class_type())) { - // The node is a GeomNode. In this case, we simply use that - // node. We can't separate them out by name in this case; we'll - // just assign to it the first nonempty name we encounter. - geom_node = DCAST(GeomNode, node); - - // Since the caller already created this GeomNode and passed it - // in, we'll leave it up to the caller to name the node and set - // up the state transitions leading into it. - - } else { - // The node is not a GeomNode, so look it up in the map. - GeomNodeMap::iterator f = geom_nodes.find(NodeMap(node, bucket)); - if (f != geom_nodes.end()) { - geom_node = (*f).second; - - } else { - // No such node/name combination. Create a new one. - geom_node = bucket->make_geom_node(); - if (geom_node != NULL) { - geom_nodes[NodeMap(node, bucket)] = geom_node; - } - } - } - - if (geom_node != NULL) { - (*i).build(geom_node); - } - } - - // Now go through and parent the geom_nodes under their respective - // group nodes. Save out the geom_node associated with a NULL Node; - // this one is returned from this function. - - GeomNode *base_geom_node = NULL; - - GeomNodeMap::iterator gi; - - for (gi = geom_nodes.begin(); - gi != geom_nodes.end(); - ++gi) { - const NodeMap &nm = (*gi).first; - GeomNode *geom_node = (*gi).second; - - PandaNode *node = nm._node; - const string &name = nm._bucket->get_name(); - - // Assign the name to the geom, if it doesn't have one already. - if (!geom_node->has_name()) { - if (!name.empty()) { - geom_node->set_name(name); - - } else if (!default_name.empty()) { - geom_node->set_name(default_name); - } - } - - // Only reparent the geom_node if it has no parent already. - int num_parents = geom_node->get_num_parents(); - if (num_parents == 0) { - if (geom_node->get_num_geoms() == 0) { - // If there was nothing added, never mind. - delete geom_node; - - } else if (node==NULL) { - nassertr(base_geom_node == NULL, NULL); - if (!nm._bucket->_hidden) { - base_geom_node = geom_node; - } - - } else { - if (nm._bucket->_hidden) { - // If the contents of the bucket are supposed to be hidden, - // add the GeomNode as a stashed child. - node->add_stashed(geom_node); - } else { - // Otherwise, in the normal case, the GeomNode is a normal, - // visible child of its parent. - node->add_child(geom_node); - } - } - } - } - - return base_geom_node; -} - - -//////////////////////////////////////////////////////////////////// -// Function: Builder::add_bucket -// Access: Protected -// Description: Adds a new BuilderBucket just like the given one to -// the set of all used BuilderBuckets, and makes it the -// current bucket. Future primitives will be added to -// this bucket. -//////////////////////////////////////////////////////////////////// -void Builder:: -add_bucket(const BuilderBucket &bucket) { - // Optimization: maybe it's the same bucket we used last time. - if (_bi != _buckets.end() && - (*_bi) == BuilderBucketNode((BuilderBucket *)&bucket)) { - return; - } - - // Nope. Look again. - _bi = _buckets.find((BuilderBucket *)&bucket); - if (_bi == _buckets.end()) { - BuilderBucket *new_bucket = bucket.make_copy(); - _bi = _buckets.insert(new_bucket).first; - } -} - diff --git a/panda/src/builder/builder.h b/panda/src/builder/builder.h deleted file mode 100644 index 470c8b14b6..0000000000 --- a/panda/src/builder/builder.h +++ /dev/null @@ -1,211 +0,0 @@ -// Filename: builder.h -// Created by: drose (09Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef BUILDER_H -#define BUILDER_H - -//////////////////////////////////////////////////////////////////// -// -// Builder -// -// The builder accepts as input a loose collection of polygons with -// various attributes, sizes, and shapes, and does all the work of -// grouping relating polygons and creating triangle strips, etc., -// ultimately storing the resulting optimized geometry into one or -// more GeomNodes. -// -// It is intended that the builder should be the single entry point -// for all code wishing to create geometry in the scene graph. The -// builder can know about the kinds of geometry that are optimal for a -// particular platform, or even about the kinds of geometry that are -// available for a given platform. (For instance, perhaps on some -// bizarre platform, triangle strips do not exist, but quadstrips are -// really fast. User code should not create triangle strips -// directly.) -// -// Actually, there are two fairly separate pieces in this package. -// The first is the builder itself, which handles the interface to -// user code, and is responsible for collecting polygons from the -// caller, sorting them according to their attributes, and creating -// Geoms that represent the resulting geometry. The second piece is -// the mesher, which receives geometry from the builder and tries to -// create optimal triangle strips (or whichever kind of higher-level -// structure is most appropriate) from them, which it hands back to -// the builder. -// -// It is possible to use the builder without invoking the mesher, in -// which case the builder will create Geoms with the individual prims -// exactly as the user passed them in. It is not possible to use the -// mesher without first going through the builder. -// -// -// The general system of using the builder is as follows: -// -// (a) Create a Builder object. -// -// (b) Iterate through the polygons. For each polygon: -// -// (c) Create a BuilderBucket object and assign to it the -// scene-graph level attributes, such as texture, lighting, -// etc. for your polygon. If several polygons share the same -// attributes, they can of course use the same bucket. But -// there's no reason to be afraid of creating a new bucket -// object each time, if that's more convenient. -// -// (d) Create a BuilderPrim object to describe the polygon. If -// the polygon is to have a polygon color or polygon normal, -// set these on the BuilderPrim. -// -// (e) Iterate through the polygon vertices, in counterclockwise -// order when viewed from the front of the polygon. For each -// vertex: -// -// (f) Create a BuilderVertex object. If the vertex has a -// texture coordinate, normal, or color, set this on the -// BuilderVertex. -// -// (g) Add the BuilderVertex to the BuilderPrim. -// -// (h) Add the BuilderPrim to the Builder. -// -// (i) Call Builder::build() and receive your new geometry! -// -// All of these objects--BuilderBucket, BuilderPrim, and -// BuilderVertex--can, and probably should, be ordinary local -// variables. When they are added into their respective data -// structures they are copied, not referenced, so there's no need to -// try to keep them around after that. -// -// The BuilderBucket is the builder's system for grouping polygons -// that share similar characteristings. Polygons that were added to -// the builder with equivalent (though not necessarily identical) -// buckets may be candidates for joining together into triangle strips -// when possible. -// -// -// That's the basic operation. There are lots of fancy features on -// top of that. -// -// * Other kinds of geometry than polygons are supported. Presently, -// these are light points and line segments. To add these kinds of -// geometry, call set_type() on your BuilderPrim with either -// BPT_point or BPT_line. -// -// * Indexed geometry is supported as well as nonindexed. Indexed -// geometry means that the vertices, UV's, etc. are referenced -// indirectly; an index number into a table is stored instead of -// the actual coordinate values. Indexed geometry may be freely -// mixed in with nonindexed geometry; the builder will sort them -// out (although each polygon must be either entirely indexed or -// entirely nonindexed). To create indexed geometry, use a -// BuilderPrimI object, and assign to it a number of BuilderVertexI -// vertices. The coordinate values you will assign are ushort -// array index numbers. Store the array pointers these refer to in -// the BuilderBucket, via set_coords(), set_normals(), etc. -// -// * The builder is to a certain extent scene-graph aware. In the -// normal usage, you give it a bunch of polygons which are all -// lumped together, and when you call build() it allocates and -// returns a GeomNode which has all of your geometry in it. -// However, you can also ask it to distribute the geometry -// throughout a pre-existing scene graph. To do this, assign the -// _node pointer of your BuilderBucket to point to the node each -// polygon belongs under, as you create the polygons. Now when you -// call build(), the builder will create all the polygons under the -// nodes you indicated, creating new GeomNodes whenever necessary. -// The advantage to this method is that you don't have to process -// your polygons in scene-graph order; the builder can sort them -// out for you. Another advantage is it allows the builder to set -// up the state for you, see the next point: -// -// * It is only when you are taking advantage of the scene-graph -// awareness of the builder that the builder can assign the state -// transitions (like texturing, etc.) you specify to the geometry -// it builds. This is because the state transitions are stored on -// the arcs of the scene graph, and in non-scene graph mode there -// are no arcs! -// -// * You can fine-tune the mesher behavior via a number of parameters -// on the BuilderBucket. Look in builderProperties.h for these -// parameters (BuilderBucket inherits from BuilderProperties). -// This is also where you turn the mesher off if you don't want it. -// -// * You can set global properties on all buckets easily either by -// creating your own default BuilderBucket that you use to -// initialize each individual BuilderBucket you create, or by -// changing the parameters stored in the bucket pointed to by -// BuilderBucket::get_default_bucket(), which is what is used to -// initialize any BuilderBucket created with a default constructor. -// It is suggested that the get_default_bucket() pointer be used to -// define global defaults at applications start-up, while a local -// default BuilderBucket should be used for local defaults. -// -// * You can also control the binning behavior, if you have some -// particular user-specific parameters you want your geometry to be -// grouped on. To do this, subclass from BuilderBucket and -// redefine the comparison operator (it's a virtual function), as -// well as the make_copy() function. -// -//////////////////////////////////////////////////////////////////// - - - -#include "pandabase.h" - -#include "builderAttrib.h" -#include "builderBucketNode.h" - -#include "pointerTo.h" - -#include "pset.h" - - -class GeomNode; - - -//////////////////////////////////////////////////////////////////// -// Class : Builder -// Description : The main driver class to the builder package. See -// the comments above. -//////////////////////////////////////////////////////////////////// -class EXPCL_PANDAEGG Builder { -public: - Builder(); - ~Builder(); - - INLINE bool add_prim(const BuilderBucket &bucket, - const BuilderPrim &prim); - INLINE bool add_prim(const BuilderBucket &bucket, - const BuilderPrimI &prim); - INLINE bool add_prim_nonindexed(const BuilderBucket &bucket, - const BuilderPrimI &prim); - - GeomNode *build(const string &default_name = ""); - -protected: - void add_bucket(const BuilderBucket &bucket); - - typedef pset Buckets; - - Buckets _buckets; - Buckets::iterator _bi; -}; - -#include "builder.I" - -#endif diff --git a/panda/src/builder/builderAttrib.I b/panda/src/builder/builderAttrib.I deleted file mode 100644 index 4f06d868ea..0000000000 --- a/panda/src/builder/builderAttrib.I +++ /dev/null @@ -1,82 +0,0 @@ -// Filename: builderAttrib.I -// Created by: drose (22Jan99) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderAttrib::set_normal_value -// Access: Public -// Description: Reassigns the normal, without knowing whether the -// attribute is indexed or nonindexed. A nonindexed -// attribute will look up the index in the array and -// store the resulting value, while an indexed attribute -// will just store the index number (which assumes the -// array is the same one it's indexing on). -//////////////////////////////////////////////////////////////////// -INLINE void BuilderAttrib:: -set_normal_value(const BuilderN *array, ushort index) { - set_normal(array[index]); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderAttrib::set_color_value -// Access: Public -// Description: Reassigns the color, without knowing whether the -// attribute is indexed or nonindexed. A nonindexed -// attribute will look up the index in the array and -// store the resulting value, while an indexed attribute -// will just store the index number (which assumes the -// array is the same one it's indexing on). -//////////////////////////////////////////////////////////////////// -INLINE void BuilderAttrib:: -set_color_value(const BuilderC *array, ushort index) { - set_color(array[index]); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderAttribI::set_normal_value -// Access: Public -// Description: Reassigns the normal, without knowing whether the -// attribute is indexed or nonindexed. A nonindexed -// attribute will look up the index in the array and -// store the resulting value, while an indexed attribute -// will just store the index number (which assumes the -// array is the same one it's indexing on). -//////////////////////////////////////////////////////////////////// -INLINE void BuilderAttribI:: -set_normal_value(const BuilderN *, ushort index) { - set_normal(index); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderAttribI::set_color_value -// Access: Public -// Description: Reassigns the color, without knowing whether the -// attribute is indexed or nonindexed. A nonindexed -// attribute will look up the index in the array and -// store the resulting value, while an indexed attribute -// will just store the index number (which assumes the -// array is the same one it's indexing on). -//////////////////////////////////////////////////////////////////// -INLINE void BuilderAttribI:: -set_color_value(const BuilderC *, ushort index) { - set_color(index); -} diff --git a/panda/src/builder/builderAttrib.cxx b/panda/src/builder/builderAttrib.cxx deleted file mode 100644 index 55b85d0535..0000000000 --- a/panda/src/builder/builderAttrib.cxx +++ /dev/null @@ -1,24 +0,0 @@ -// Filename: builderAttrib.cxx -// Created by: drose (11May00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "builderAttrib.h" - -// Tell GCC that we'll take care of the instantiation explicitly here. -#ifdef __GNUC__ -#pragma implementation -#endif diff --git a/panda/src/builder/builderAttrib.h b/panda/src/builder/builderAttrib.h deleted file mode 100644 index 2973e6a064..0000000000 --- a/panda/src/builder/builderAttrib.h +++ /dev/null @@ -1,72 +0,0 @@ -// Filename: builderAttrib.h -// Created by: drose (22Jan99) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef BUILDERATTRIB_H -#define BUILDERATTRIB_H - -//////////////////////////////////////////////////////////////////// -// -// BuilderAttrib, BuilderAttribI -// -// This is the parent class of both BuilderVertex and BuilderPrim, and -// contains the attribute values which may be set on either of them: -// specifically, normal, color, and pixel size. (Pixel size is the -// thickness of the lines, for a polygon or a line, or the size of the -// point, in pixels.) -// -// Like BuilderPrim and BuilderVertex, the two classes BuilderAttrib -// and BuilderAttribI are actually both instantiations of the same -// template class, BuilderAttribTempl. -// -//////////////////////////////////////////////////////////////////// - -#include "pandabase.h" - -#include "builderAttribTempl.h" - -#define BUILDERATTRIBTEMPL_BUILDERV BuilderAttribTempl -EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEGG, EXPTP_PANDAEGG, BUILDERATTRIBTEMPL_BUILDERV); -#define BUILDERATTRIBTEMPL_USHORT BuilderAttribTempl -EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEGG, EXPTP_PANDAEGG, BUILDERATTRIBTEMPL_USHORT); - -class EXPCL_PANDAEGG BuilderAttrib - : public BuilderAttribTempl { -public: - BuilderAttrib() {} - - INLINE void set_normal_value(const BuilderN *array, ushort index); - INLINE void set_color_value(const BuilderC *array, ushort index); -}; - -class EXPCL_PANDAEGG BuilderAttribI - : public BuilderAttribTempl { -public: - BuilderAttribI() {} - - INLINE void set_normal_value(const BuilderN *array, ushort index); - INLINE void set_color_value(const BuilderC *array, ushort index); -}; - -#include "builderAttrib.I" - -// Tell GCC that we'll take care of the instantiation explicitly here. -#ifdef __GNUC__ -#pragma interface -#endif - -#endif diff --git a/panda/src/builder/builderAttribTempl.I b/panda/src/builder/builderAttribTempl.I deleted file mode 100644 index b226605524..0000000000 --- a/panda/src/builder/builderAttribTempl.I +++ /dev/null @@ -1,323 +0,0 @@ -// Filename: builderAttribTempl.I -// Created by: drose (17Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderAttribTempl::Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderAttribTempl:: -BuilderAttribTempl() { - _flags = 0; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderAttribTempl::Copy constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderAttribTempl:: -BuilderAttribTempl(const BuilderAttribTempl ©) { - (*this) = copy; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderAttribTempl::Copy assignment operator -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderAttribTempl &BuilderAttribTempl:: -operator = (const BuilderAttribTempl ©) { - _normal = copy._normal; - _color = copy._color; - _pixel_size = copy._pixel_size; - _flags = copy._flags; - - return *this; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderAttribTempl::clear -// Access: Public -// Description: Resets the attribute flags to their original, empty -// state--where no attributes have been applied. -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderAttribTempl &BuilderAttribTempl:: -clear() { - _flags = 0; - return *this; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderAttribTempl::has_normal -// Access: Public -// Description: Returns true if the attribute has a normal. -//////////////////////////////////////////////////////////////////// -template -INLINE bool BuilderAttribTempl:: -has_normal() const { - return (_flags & BAF_normal)!=0; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderAttribTempl::get_normal -// Access: Public -// Description: Returns the attribute's normal. It is an error to -// call this without first verifying that has_normal() is -// true. -//////////////////////////////////////////////////////////////////// -template -INLINE TYPENAME BuilderAttribTempl::NType BuilderAttribTempl:: -get_normal() const { - nassertr(has_normal(), _normal); - return _normal; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderAttribTempl::set_normal -// Access: Public -// Description: Resets the attribute's normal. -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderAttribTempl &BuilderAttribTempl:: -set_normal(const NType &n) { - _flags |= BAF_normal; - _normal = n; - return *this; -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderAttribTempl::clear_normal -// Access: Public -// Description: Removes the attribute's normal. -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderAttribTempl &BuilderAttribTempl:: -clear_normal() { - _flags &= ~BAF_normal; - return *this; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderAttribTempl::has_color -// Access: Public -// Description: Returns true if the attribute has a color. -//////////////////////////////////////////////////////////////////// -template -INLINE bool BuilderAttribTempl:: -has_color() const { - return (_flags & BAF_color)!=0; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderAttribTempl::get_color -// Access: Public -// Description: Returns the attribute's color. It is an error to -// call this without first verifying that has_color() is -// true. -//////////////////////////////////////////////////////////////////// -template -INLINE TYPENAME BuilderAttribTempl::CType BuilderAttribTempl:: -get_color() const { - nassertr(has_color(), _color); - return _color; -} - -template - -//////////////////////////////////////////////////////////////////// -// Function: BuilderAttribTempl::set_color -// Access: Public -// Description: Resets the attribute's color. -//////////////////////////////////////////////////////////////////// -INLINE BuilderAttribTempl &BuilderAttribTempl:: -set_color(const CType &c) { - _flags |= BAF_color; - _color = c; - return *this; -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderAttribTempl::clear_color -// Access: Public -// Description: Removes the attribute's color. -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderAttribTempl &BuilderAttribTempl:: -clear_color() { - _flags &= ~BAF_color; - return *this; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderAttribTempl::has_pixel_size -// Access: Public -// Description: Returns true if the attribute has a pixel_size. -//////////////////////////////////////////////////////////////////// -template -INLINE bool BuilderAttribTempl:: -has_pixel_size() const { - return (_flags & BAF_pixel_size)!=0; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderAttribTempl::get_pixel_size -// Access: Public -// Description: Returns the attribute's pixel_size. It is an error to -// call this without first verifying that has_pixel_size() is -// true. -//////////////////////////////////////////////////////////////////// -template -INLINE float BuilderAttribTempl:: -get_pixel_size() const { - nassertr(has_pixel_size(), _pixel_size); - return _pixel_size; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderAttribTempl::set_pixel_size -// Access: Public -// Description: Resets the attribute's pixel_size. -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderAttribTempl &BuilderAttribTempl:: -set_pixel_size(float s) { - _flags |= BAF_pixel_size; - _pixel_size = s; - return *this; -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderAttribTempl::clear_pixel_size -// Access: Public -// Description: Removes the attribute's pixel_size. -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderAttribTempl &BuilderAttribTempl:: -clear_pixel_size() { - _flags &= ~BAF_pixel_size; - return *this; -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderAttribTempl::operator == -// Access: Public -// Description: Assigns an ordering to the vertices. This is used by -// the Mesher to group identical vertices. This assumes -// that all vertices in the locus of consideration will -// share the same state: with or without normals, -// texcoords, etc. -//////////////////////////////////////////////////////////////////// -template -INLINE bool BuilderAttribTempl:: -operator == (const BuilderAttribTempl &other) const { - return compare_to(other) == 0; -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderAttribTempl::operator != -// Access: Public -// Description: Assigns an ordering to the vertices. This is used by -// the Mesher to group identical vertices. This assumes -// that all vertices in the locus of consideration will -// share the same state: with or without normals, -// texcoords, etc. -//////////////////////////////////////////////////////////////////// -template -INLINE bool BuilderAttribTempl:: -operator != (const BuilderAttribTempl &other) const { - return !operator == (other); -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderAttribTempl::operator < -// Access: Public -// Description: Assigns an ordering to the vertices. This is used by -// the Mesher to group identical vertices. This assumes -// that all vertices in the locus of consideration will -// share the same state: with or without normals, -// texcoords, etc. -//////////////////////////////////////////////////////////////////// -template -INLINE bool BuilderAttribTempl:: -operator < (const BuilderAttribTempl &other) const { - return compare_to(other) < 0; -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderAttribTempl::compare_to -// Access: Public -// Description: Returns a number less than zero if this object sorts -// before the indicated object, greater than zero if it -// sorts after, and zero if the objects are equivalent. -//////////////////////////////////////////////////////////////////// -template -int BuilderAttribTempl:: -compare_to(const BuilderAttribTempl &other) const { - if (has_normal()) { - int normal_compare = builder_compare(_normal, other._normal); - if (normal_compare != 0) { - return normal_compare; - } - } - - if (has_color()) { - int color_compare = builder_compare(_color, other._color); - if (color_compare != 0) { - return color_compare; - } - } - - return 0; -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderAttribTempl::output -// Access: Public -// Description: Formats the attribs for output in some sensible way. -//////////////////////////////////////////////////////////////////// -template -ostream &BuilderAttribTempl:: -output(ostream &out) const { - if (this!=NULL) { - if (has_normal()) { - out << " normal " << get_normal(); - } - - if (has_color()) { - out << " color " << get_color(); - } - } - return out; -} diff --git a/panda/src/builder/builderAttribTempl.h b/panda/src/builder/builderAttribTempl.h deleted file mode 100644 index 116c08b681..0000000000 --- a/panda/src/builder/builderAttribTempl.h +++ /dev/null @@ -1,88 +0,0 @@ -// Filename: builderAttribTempl.h -// Created by: drose (17Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// -#ifndef BUILDERATTRIBTEMPL_H -#define BUILDERATTRIBTEMPL_H - -#include "pandabase.h" - -#include "builderTypes.h" - -#include "pvector.h" - - -//////////////////////////////////////////////////////////////////// -// Class : BuilderAttribTempl -// Description : The main body of BuilderAttrib and BuilderAttribI, -// and the base class for BuilderVertexTempl and -// BuilderPrimTempl, this class defines the attributes -// that may be specified for either vertices or -// primitives. -//////////////////////////////////////////////////////////////////// -template -class BuilderAttribTempl { -public: - typedef VT VType; - typedef NT NType; - typedef TT TType; - typedef CT CType; - - INLINE BuilderAttribTempl(); - INLINE BuilderAttribTempl(const BuilderAttribTempl ©); - INLINE BuilderAttribTempl &operator = (const BuilderAttribTempl ©); - - INLINE BuilderAttribTempl &clear(); - - INLINE bool has_normal() const; - INLINE NType get_normal() const; - INLINE BuilderAttribTempl &set_normal(const NType &n); - INLINE BuilderAttribTempl &clear_normal(); - - INLINE bool has_color() const; - INLINE CType get_color() const; - INLINE BuilderAttribTempl &set_color(const CType &c); - INLINE BuilderAttribTempl &clear_color(); - - INLINE bool has_pixel_size() const; - INLINE float get_pixel_size() const; - INLINE BuilderAttribTempl &set_pixel_size(float s); - INLINE BuilderAttribTempl &clear_pixel_size(); - - INLINE bool operator == (const BuilderAttribTempl &other) const; - INLINE bool operator != (const BuilderAttribTempl &other) const; - INLINE bool operator < (const BuilderAttribTempl &other) const; - int compare_to(const BuilderAttribTempl &other) const; - - ostream &output(ostream &out) const; - -protected: - NType _normal; - CType _color; - float _pixel_size; - int _flags; -}; - -template -INLINE ostream &operator << (ostream &out, - const BuilderAttribTempl &attrib) { - return attrib.output(out); -} - -#include "builderAttribTempl.I" - -#endif - diff --git a/panda/src/builder/builderBucket.I b/panda/src/builder/builderBucket.I deleted file mode 100644 index a40909c36a..0000000000 --- a/panda/src/builder/builderBucket.I +++ /dev/null @@ -1,134 +0,0 @@ -// Filename: builderBucket.I -// Created by: drose (09Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucket::set_coords -// Access: Public -// Description: Sets the array that will be used to define the -// vertices for any indexed geometry that is associated -// with this bucket. -//////////////////////////////////////////////////////////////////// -INLINE void BuilderBucket:: -set_coords(const PTA_Vertexf &coords) { - _coords = coords; -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucket::get_coords -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE PTA_Vertexf BuilderBucket:: -get_coords() const { - return _coords; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucket::set_normals -// Access: Public -// Description: Sets the array that will be used to define the -// normals for any indexed geometry that is associated -// with this bucket. -//////////////////////////////////////////////////////////////////// -INLINE void BuilderBucket:: -set_normals(const PTA_Normalf &normals) { - _normals = normals; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucket::get_normals -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE PTA_Normalf BuilderBucket:: -get_normals() const { - return _normals; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucket::set_texcoords -// Access: Public -// Description: Sets the array that will be used to define the -// texture coordinates for any indexed geometry that is -// associated with this bucket. -//////////////////////////////////////////////////////////////////// -INLINE void BuilderBucket:: -set_texcoords(const InternalName *name, const PTA_TexCoordf &texcoords) { - _texcoords[name] = texcoords; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucket::get_texcoords -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE PTA_TexCoordf BuilderBucket:: -get_texcoords(const InternalName *name) const { - TexCoords::const_iterator ti = _texcoords.find(name); - if (ti != _texcoords.end()) { - return (*ti).second; - } - return PTA_TexCoordf(); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucket::set_colors -// Access: Public -// Description: Sets the array that will be used to define the -// colors for any indexed geometry that is associated -// with this bucket. -//////////////////////////////////////////////////////////////////// -INLINE void BuilderBucket:: -set_colors(const PTA_Colorf &colors) { - _colors = colors; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucket::get_colors -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE PTA_Colorf BuilderBucket:: -get_colors() const { - return _colors; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucket::get_default_bucket -// Access: Public, Static -// Description: Returns a pointer to the BuilderBucket that is used -// to initialize any BuilderBuckets created with a -// default constructor. This is just a convenient way -// to set some global parameters. -//////////////////////////////////////////////////////////////////// -INLINE BuilderBucket *BuilderBucket:: -get_default_bucket() { - if (_default_bucket==NULL) { - _default_bucket = new BuilderBucket(true); - } - return _default_bucket; -} diff --git a/panda/src/builder/builderBucket.cxx b/panda/src/builder/builderBucket.cxx deleted file mode 100644 index 162ff5234e..0000000000 --- a/panda/src/builder/builderBucket.cxx +++ /dev/null @@ -1,285 +0,0 @@ -// Filename: builderBucket.cxx -// Created by: drose (10Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - - -#include "builderAttrib.h" -#include "builderBucket.h" -#include "builderFuncs.h" -#include "builderMisc.h" -#include "geomNode.h" - - -BuilderBucket *BuilderBucket::_default_bucket = NULL; - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucket::Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -BuilderBucket:: -BuilderBucket() { - _node = NULL; - (*this) = (*get_default_bucket()); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucket::Copy constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -BuilderBucket:: -BuilderBucket(const BuilderBucket ©) { - (*this) = copy; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucket::Copy assignment operator -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -BuilderBucket &BuilderBucket:: -operator = (const BuilderBucket ©) { - ((BuilderProperties &)*this) = (BuilderProperties &)copy; - - set_name(copy.get_name()); - set_coords(copy._coords); - set_normals(copy._normals); - set_colors(copy._colors); - - _texcoords = copy._texcoords; - - _node = copy._node; - _hidden = copy._hidden; - _state = copy._state; - - return *this; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucket::Destructor -// Access: Public, Virtual -// Description: -//////////////////////////////////////////////////////////////////// -BuilderBucket:: -~BuilderBucket() { -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucket::make_copy -// Access: Public, Virtual -// Description: Allocates and returns a new copy of this object. If -// you are subclassing from BuilderBucket, you must -// redefine this to return an instance of your new -// subclass, because the Builder will call this function -// to get its own copy. -//////////////////////////////////////////////////////////////////// -BuilderBucket *BuilderBucket:: -make_copy() const { - return new BuilderBucket(*this); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucket::make_geom_node -// Access: Public, Virtual -// Description: Called by the builder when it is time to create a new -// GeomNode. This function should allocate and return a -// new GeomNode suitable for adding geometry to. You -// may redefine it to return a subclass of GeomNode, or -// to do some initialization to the node. -//////////////////////////////////////////////////////////////////// -GeomNode *BuilderBucket:: -make_geom_node() { - return new GeomNode(""); -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucket::done_geom -// Access: Public, Virtual -// Description: Called after all the geometry has been added to the -// Geom. This is just a hook for the user to redefine -// to do any post-processing that may be desired on the -// geometry. It may deallocate it and return a new -// copy. If it returns NULL, the geom is discarded. -//////////////////////////////////////////////////////////////////// -Geom *BuilderBucket:: -done_geom(Geom *geom) { - return geom; -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucket::add_attrib -// Access: Public -// Description: A convenience function to add the indicated render -// attribute to the bucket's state. -//////////////////////////////////////////////////////////////////// -void BuilderBucket:: -add_attrib(const RenderAttrib *attrib) { - _state = _state->add_attrib(attrib); -} - - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucket::Ordering operator -// Access: Public, Virtual -// Description: Defines an arbitrary ordering among different -// buckets, and groups identical buckets together. -// (Buckets a and b are identical if !(a < b) and !(b < -// a).) -// -// The actual order between different buckets is -// arbitrary and largely irrelevant, so long as it is -// consistent. That is, if (a < b) and (b < c), it must -// also be true that (a < c). Also, if (a < b), it -// cannot be true that (b < a). -//////////////////////////////////////////////////////////////////// -bool BuilderBucket:: -operator < (const BuilderBucket &other) const { - if (get_name() != other.get_name()) { - return get_name() < other.get_name(); - } - - if (_node != other._node) { - return _node < other._node; - } - - if (_hidden != other._hidden) { - return _hidden < other._hidden; - } - - if (_coords != other._coords) - return _coords < other._coords; - if (_normals != other._normals) - return _normals < other._normals; - if (_colors != other._colors) - return _colors < other._colors; - - TexCoords::const_iterator ai, bi; - ai = _texcoords.begin(); - bi = other._texcoords.begin(); - while (ai != _texcoords.end() && bi != other._texcoords.end()) { - if ((*ai).first < (*bi).first) { - return true; - } else if ((*bi).first < (*ai).first) { - return false; - } else { - if ((*ai).second != (*bi).second) { - return (*ai).second < (*bi).second; - } - } - - ++ai; - ++bi; - } - - if (bi != other._texcoords.end()) { - return true; - } - if (ai != _texcoords.end()) { - return false; - } - - if (_state != other._state) { - return _state < other._state; - } - - return BuilderProperties::operator < (other); -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucket::output -// Access: Public, Virtual -// Description: Formats the bucket for output in some sensible way. -//////////////////////////////////////////////////////////////////// -void BuilderBucket:: -output(ostream &out) const { - out << "Bucket \"" << get_name() << "\""; - - if (_node != (PandaNode *)NULL) { - out << " attached to " << *_node << "\n"; - } - out << "\n"; - - if (_hidden) { - out << "_hidden\n"; - } - - if (_coords != (Vertexf *)NULL) { - out << "_coords = " << (void *)_coords << "\n"; - } - - if (_normals != (Normalf *)NULL) { - out << "_normals = " << (void *)_normals << "\n"; - } - - TexCoords::const_iterator ti; - for (ti = _texcoords.begin(); ti != _texcoords.end(); ++ti) { - out << "_texcoords[\"" << (*ti).first->get_name() << "\"] = " - << (void *)(*ti).second << "\n"; - } - - if (_colors != (Colorf *)NULL) { - out << "_colors = " << (void *)_colors << "\n"; - } - - if (!_state->is_empty()) { - out << *_state << "\n"; - } - - BuilderProperties::output(out); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucket::private Constructor -// Access: Private -// Description: This special constructor is used only to initialize -// the _default_bucket pointer. It sets up the initial -// defaults. The normal constructor copies from this -// instance. -//////////////////////////////////////////////////////////////////// -BuilderBucket:: -BuilderBucket(int) { - _node = NULL; - _hidden = false; - - // From BuilderProperties - _mesh = true; - _retesselate_coplanar = true; - _show_tstrips = false; - _show_qsheets = false; - _show_quads = false; - _show_normals = false; - _normal_color.set(1.0, 0.0, 0.0, 1.0); - _normal_scale = 1.0; - _subdivide_polys = true; - _coplanar_threshold = 0.01; - - _unroll_fans = true; - _consider_fans = true; - _max_tfan_angle = 40.0; - _min_tfan_tris = 0; - - _state = RenderState::make_empty(); -} diff --git a/panda/src/builder/builderBucket.h b/panda/src/builder/builderBucket.h deleted file mode 100644 index 2170836b57..0000000000 --- a/panda/src/builder/builderBucket.h +++ /dev/null @@ -1,116 +0,0 @@ -// Filename: builderBucket.h -// Created by: drose (09Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef BUILDERBUCKET_H -#define BUILDERBUCKET_H - -#include "pandabase.h" - -#include "builderProperties.h" - -#include "namable.h" -#include "pointerToArray.h" -#include "luse.h" -#include "pta_Vertexf.h" -#include "pta_Normalf.h" -#include "pta_Colorf.h" -#include "pta_TexCoordf.h" -#include "internalName.h" -#include "renderState.h" - -#include "stdlib.h" - -class Geom; -class PandaNode; -class GeomNode; - -//////////////////////////////////////////////////////////////////// -// Class : BuilderBucket -// Description : The main grouping tool for BuilderPrims. See the -// comments at the beginning of builder.h. -// -// As each primitive is added to the builder, it is -// associated with a bucket. The bucket stores the -// scene-graph properties of the primitive, and is used -// to identify primitives that have the same properties -// and thus may be joined into a common triangle strip. -// -// This grouping is done via the ordering operator, <, -// which defines an arbitrary ordering for buckets and -// identifies those buckets which are equivalent to each -// other. By subclassing off of BuilderBucket and -// redefining this operator, you can change the grouping -// behavior to suit your needs, if necessary. -//////////////////////////////////////////////////////////////////// -class EXPCL_PANDAEGG BuilderBucket : public BuilderProperties, public Namable { -public: - BuilderBucket(); - BuilderBucket(const BuilderBucket ©); - BuilderBucket &operator = (const BuilderBucket ©); - virtual ~BuilderBucket(); - - virtual BuilderBucket *make_copy() const; - virtual GeomNode *make_geom_node(); - virtual Geom *done_geom(Geom *geom); - void add_attrib(const RenderAttrib *attrib); - - virtual bool operator < (const BuilderBucket &other) const; - - INLINE void set_coords(const PTA_Vertexf &coords); - INLINE PTA_Vertexf get_coords() const; - - INLINE void set_normals(const PTA_Normalf &normals); - INLINE PTA_Normalf get_normals() const; - - INLINE void set_texcoords(const InternalName *name, const PTA_TexCoordf &texcoords); - INLINE PTA_TexCoordf get_texcoords(const InternalName *name) const; - - INLINE void set_colors(const PTA_Colorf &colors); - INLINE PTA_Colorf get_colors() const; - - INLINE static BuilderBucket *get_default_bucket(); - - virtual void output(ostream &out) const; - - PandaNode *_node; - CPT(RenderState) _state; - bool _hidden; - -protected: - PTA_Vertexf _coords; - PTA_Normalf _normals; - PTA_Colorf _colors; - - typedef pmap TexCoords; - TexCoords _texcoords; - - static BuilderBucket *_default_bucket; - -private: - BuilderBucket(int); -}; - -INLINE ostream &operator << (ostream &out, const BuilderBucket &bucket) { - bucket.output(out); - return out; -} - -#include "builderBucket.I" - -#endif - diff --git a/panda/src/builder/builderBucketNode.I b/panda/src/builder/builderBucketNode.I deleted file mode 100644 index ee68eac9b7..0000000000 --- a/panda/src/builder/builderBucketNode.I +++ /dev/null @@ -1,115 +0,0 @@ -// Filename: builderBucketNode.I -// Created by: drose (10Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucketNode::Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE BuilderBucketNode:: -BuilderBucketNode(BuilderBucket *bucket) : _bucket(bucket) { -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucketNode::Copy constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE BuilderBucketNode:: -BuilderBucketNode(const BuilderBucketNode ©) { - (*this) = copy; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucketNode::Copy assignment operator -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE void BuilderBucketNode:: -operator = (const BuilderBucketNode ©) { - _bucket = copy._bucket; - _prims = copy._prims; - _iprims = copy._iprims; -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucketNode::add_prim_nonindexed -// Access: Public -// Description: Adds the indicated indexed primitive to the bucket as -// if it were nonindexed, and returns true if the -// primitive was valid. Intended to be called from -// Builder::add_prim_nonindexed(). -//////////////////////////////////////////////////////////////////// -INLINE bool BuilderBucketNode:: -add_prim_nonindexed(const BuilderPrimI &prim) { - BuilderPrim nonindexed; - nonindexed.nonindexed_copy(prim, *_bucket); - return add_prim(nonindexed); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucketNode::get_bucket -// Access: Public -// Description: Returns the BuilderBucket object associated with this -// node. -//////////////////////////////////////////////////////////////////// -INLINE BuilderBucket *BuilderBucketNode:: -get_bucket() const { - return _bucket; -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucketNode::Ordering operator -// Access: Public -// Description: Returns true if this bucket precedes the indicated -// one in ordering. This function is used by the STL -// set in the Builder object to sort buckets into order, -// and to collect similar buckets together. -//////////////////////////////////////////////////////////////////// -INLINE bool BuilderBucketNode:: -operator < (const BuilderBucketNode &other) const { - return (*_bucket) < (*other._bucket); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucketNode::Equivalence operator -// Access: Public -// Description: Returns true if the two buckets are equivalent, based -// on the ordering operator, above. -//////////////////////////////////////////////////////////////////// -INLINE bool BuilderBucketNode:: -operator == (const BuilderBucketNode &other) const { - return !((*_bucket) < (*other._bucket) || - (*other._bucket) < (*_bucket)); -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucketNode::Nonequivalence operator -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE bool BuilderBucketNode:: -operator != (const BuilderBucketNode &other) const { - return !operator == (other); -} diff --git a/panda/src/builder/builderBucketNode.cxx b/panda/src/builder/builderBucketNode.cxx deleted file mode 100644 index 69ce50259c..0000000000 --- a/panda/src/builder/builderBucketNode.cxx +++ /dev/null @@ -1,102 +0,0 @@ -// Filename: builderBucketNode.cxx -// Created by: drose (10Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "builderFuncs.h" -#include "builderBucketNode.h" - -#include "geomNode.h" - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucketNode::add_prim -// Access: Public -// Description: Adds the indicated indexed primitive to the -// bucket, and returns true if the primitive was valid. -// Intended to be called from Builder::add_prim(). -//////////////////////////////////////////////////////////////////// -bool BuilderBucketNode:: -add_prim(BuilderPrim prim) { - prim.flatten_vertex_properties(); - bool result = expand(prim, *_bucket, inserter(_prims, _prims.begin())); - return result; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucketNode::add_prim -// Access: Public -// Description: Adds the indicated nonindexed primitive to the -// bucket, and returns true if the primitive was valid. -// Intended to be called from Builder::add_prim(). -//////////////////////////////////////////////////////////////////// -bool BuilderBucketNode:: -add_prim(const BuilderPrimI &prim) { - bool result = expand(prim, *_bucket, inserter(_iprims, _iprims.begin())); - return result; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderBucketNode::build -// Access: Public -// Description: Builds all the geometry assigned to this particular -// bucket, and assigns it to the indicated GeomNode. -// Returns the number of Geoms created. -//////////////////////////////////////////////////////////////////// -int BuilderBucketNode:: -build(GeomNode *geom_node) const { - int count = 0; - - { - // First, the nonindexed. - Prims::const_iterator pi, last_pi; - last_pi = _prims.begin(); - - for (pi = _prims.begin(); - pi != _prims.end(); - ++pi) { - if ((*last_pi) < (*pi)) { - count += mesh_and_build(last_pi, pi, *_bucket, geom_node, - (BuilderPrim *)0); - last_pi = pi; - } - } - count += mesh_and_build(last_pi, pi, *_bucket, geom_node, - (BuilderPrim *)0); - } - - { - // Then, the indexed. - IPrims::const_iterator pi, last_pi; - last_pi = _iprims.begin(); - - for (pi = _iprims.begin(); - pi != _iprims.end(); - ++pi) { - if ((*last_pi) < (*pi)) { - count += mesh_and_build(last_pi, pi, *_bucket, geom_node, - (BuilderPrimI *)0); - last_pi = pi; - } - } - count += mesh_and_build(last_pi, pi, *_bucket, geom_node, - (BuilderPrimI *)0); - } - - return count; -} - diff --git a/panda/src/builder/builderBucketNode.h b/panda/src/builder/builderBucketNode.h deleted file mode 100644 index 194076bd26..0000000000 --- a/panda/src/builder/builderBucketNode.h +++ /dev/null @@ -1,73 +0,0 @@ -// Filename: builderBucketNode.h -// Created by: drose (10Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef BUILDERBUCKETNODE_H -#define BUILDERBUCKETNODE_H - -#include "pandabase.h" - -#include "builderPrim.h" -#include "builderBucket.h" - -#include "pset.h" - -class GeomNode; -class GeomNode; - - -//////////////////////////////////////////////////////////////////// -// Class : BuilderBucketNode -// Description : This is a wrapper class around BuilderBucket, used by -// the Builder class. It stores a pointer to a -// BuilderBucket object, as well as lists of the -// primitives that have been added to it. -// -// There are no functions in this class that are -// intended to be called directly by user code; instead, -// use the interface provided by Builder. -//////////////////////////////////////////////////////////////////// -class EXPCL_PANDAEGG BuilderBucketNode { -public: - INLINE BuilderBucketNode(BuilderBucket *bucket); - INLINE BuilderBucketNode(const BuilderBucketNode ©); - INLINE void operator = (const BuilderBucketNode ©); - - bool add_prim(BuilderPrim prim); - bool add_prim(const BuilderPrimI &prim); - INLINE bool add_prim_nonindexed(const BuilderPrimI &prim); - - INLINE BuilderBucket *get_bucket() const; - - INLINE bool operator < (const BuilderBucketNode &other) const; - INLINE bool operator == (const BuilderBucketNode &other) const; - INLINE bool operator != (const BuilderBucketNode &other) const; - - int build(GeomNode *geom_node) const; - -protected: - typedef pmultiset > Prims; - typedef pmultiset > IPrims; - - BuilderBucket *_bucket; - Prims _prims; - IPrims _iprims; -}; - -#include "builderBucketNode.I" - -#endif diff --git a/panda/src/builder/builderFuncs.I b/panda/src/builder/builderFuncs.I deleted file mode 100644 index d773c9af1d..0000000000 --- a/panda/src/builder/builderFuncs.I +++ /dev/null @@ -1,950 +0,0 @@ -// Filename: builderFuncs.I -// Created by: drose (09Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "builderPrim.h" -#include "mesherTempl.h" -#include "builderNormalVisualizer.h" -#include "config_builder.h" -#include "geom.h" -#include "geomprimitives.h" -#include "geomNode.h" - -#include - -struct DecompVtx { - int index; - BuilderV coord; - struct DecompVtx *next; -}; - -//////////////////////////////////////////////////////////////////// -// Function: decomp_concave -// Description: Decomposes a concave polygon into triangles. Returns -// true if successful, false if the polygon is -// self-intersecting. -//////////////////////////////////////////////////////////////////// -template -static bool -decomp_concave(const PrimType &prim, BuilderBucket &bucket, - OutputIterator result, - int asum, int x, int y) { -#define VX(p, c) p->coord[c] - - pvector output_prims; - - DecompVtx *p0, *p1, *p2, *t0, *vert; - DecompVtx *m[3]; - float xmin, xmax, ymin, ymax; - int i, init, csum, chek; - float a[3], b[3], c[3], s[3]; - - int num_verts = prim.get_num_verts(); - nassertr(num_verts >= 3, false); - - /* Make linked list of verts */ - vert = (DecompVtx *) alloca(sizeof(DecompVtx)); - vert->index = 0; - vert->coord = prim.get_vertex(0).get_coord_value(bucket); - p1 = vert; - - for (i = 1; i < num_verts; i++) { - p0 = (DecompVtx *) alloca(sizeof(DecompVtx)); - p0->index = i; - p0->coord = prim.get_vertex(i).get_coord_value(bucket); - // There shouldn't be two consecutive identical vertices. If - // there are, skip one. - if (!(p0->coord == p1->coord)) { - p1->next = p0; - p1 = p0; - } - } - p1->next = vert; - - p0 = vert; - p1 = p0->next; - p2 = p1->next; - m[0] = p0; - m[1] = p1; - m[2] = p2; - chek = 0; - - while (p0 != p2->next) { - /* Polygon is self-intersecting so punt */ - if (chek && - m[0] == p0 && - m[1] == p1 && - m[2] == p2) { - - // builder_cat.info() << "Could not decompose concave polygon!"; - return false; - } - - chek = 1; - - a[0] = VX(p1, y) - VX(p2, y); - b[0] = VX(p2, x) - VX(p1, x); - a[2] = VX(p0, y) - VX(p1, y); - b[2] = VX(p1, x) - VX(p0, x); - - csum = ((b[0] * a[2] - b[2] * a[0] >= 0.0) ? 1 : 0); - - if (csum ^ asum) { - /* current angle is concave */ - p0 = p1; - p1 = p2; - p2 = p2->next; - - } else { - /* current angle is convex */ - xmin = (VX(p0, x) < VX(p1, x)) ? VX(p0, x) : VX(p1, x); - if (xmin > VX(p2, x)) - xmin = VX(p2, x); - - xmax = (VX(p0, x) > VX(p1, x)) ? VX(p0, x) : VX(p1, x); - if (xmax < VX(p2, x)) - xmax = VX(p2, x); - - ymin = (VX(p0, y) < VX(p1, y)) ? VX(p0, y) : VX(p1, y); - if (ymin > VX(p2, y)) - ymin = VX(p2, y); - - ymax = (VX(p0, y) > VX(p1, y)) ? VX(p0, y) : VX(p1, y); - if (ymax < VX(p2, y)) - ymax = VX(p2, y); - - for (init = 1, t0 = p2->next; t0 != p0; t0 = t0->next) { - if (VX(t0, x) >= xmin && VX(t0, x) <= xmax && - VX(t0, y) >= ymin && VX(t0, y) <= ymax) { - if (init) { - a[1] = VX(p2, y) - VX(p0, y); - b[1] = VX(p0, x) - VX(p2, x); - init = 0; - c[0] = VX(p1, x) * VX(p2, y) - VX(p2, x) * VX(p1, y); - c[1] = VX(p2, x) * VX(p0, y) - VX(p0, x) * VX(p2, y); - c[2] = VX(p0, x) * VX(p1, y) - VX(p1, x) * VX(p0, y); - } - - s[0] = a[0] * VX(t0, x) + b[0] * VX(t0, y) + c[0]; - s[1] = a[1] * VX(t0, x) + b[1] * VX(t0, y) + c[1]; - s[2] = a[2] * VX(t0, x) + b[2] * VX(t0, y) + c[2]; - - if (asum) { - if (s[0] >= 0.0 && s[1] >= 0.0 && s[2] >= 0.0) - break; - } else { - if (s[0] <= 0.0 && s[1] <= 0.0 && s[2] <= 0.0) - break; - } - } - } - - if (t0 != p0) { - p0 = p1; - p1 = p2; - p2 = p2->next; - } else { - PrimType new_prim(prim); - new_prim.set_type(BPT_tri); - new_prim.clear_vertices(); - new_prim.add_vertex(prim.get_vertex(p0->index)); - new_prim.add_vertex(prim.get_vertex(p1->index)); - new_prim.add_vertex(prim.get_vertex(p2->index)); - output_prims.push_back(new_prim); - - p0->next = p1->next; - p1 = p2; - p2 = p2->next; - - m[0] = p0; - m[1] = p1; - m[2] = p2; - chek = 0; - } - } - } - - PrimType new_prim(prim); - new_prim.set_type(BPT_tri); - new_prim.clear_vertices(); - new_prim.add_vertex(prim.get_vertex(p0->index)); - new_prim.add_vertex(prim.get_vertex(p1->index)); - new_prim.add_vertex(prim.get_vertex(p2->index)); - output_prims.push_back(new_prim); - - copy(output_prims.begin(), output_prims.end(), result); - return true; -} - - -//////////////////////////////////////////////////////////////////// -// Function: triangulate_poly -// Description: Breaks a (possibly concave) higher-order polygon into -// a series of constituent triangles. -//////////////////////////////////////////////////////////////////// -template -static bool -triangulate_poly(const PrimType &prim, BuilderBucket &bucket, - OutputIterator result) { - BuilderV p0, p1, as; - float dx1, dy1, dx2, dy2, max; - int i, flag, asum, csum, index, x, y, v0, v1, v, even; - - // First see if the polygon is just a triangle - int num_verts = prim.get_num_verts(); - if (num_verts == 3) { - PrimType new_prim(prim); - new_prim.set_type(BPT_tri); - *result++ = new_prim; - - return true; - - } else if (num_verts < 3) { - // Or if it's a degenerate polygon. - return false; - } - - // calculate signed areas - as[0] = 0.0; - as[1] = 0.0; - as[2] = 0.0; - - for (i = 0; i < num_verts; i++) { - p0 = prim.get_vertex(i).get_coord_value(bucket); - p1 = prim.get_vertex((i + 1) % num_verts).get_coord_value(bucket); - as[0] += p0[0] * p1[1] - p0[1] * p1[0]; - as[1] += p0[0] * p1[2] - p0[2] * p1[0]; - as[2] += p0[1] * p1[2] - p0[2] * p1[1]; - } - - /* select largest signed area */ - max = 0.0; - index = 0; - flag = 0; - for (i = 0; i < 3; i++) { - if (as[i] >= 0.0) { - if (as[i] > max) { - max = as[i]; - index = i; - flag = 1; - } - } else { - as[i] = -as[i]; - if (as[i] > max) { - max = as[i]; - index = i; - flag = 0; - } - } - } - - /* pointer offsets */ - switch (index) { - case 0: - x = 0; - y = 1; - break; - - case 1: - x = 0; - y = 2; - break; - - default: // case 2 - x = 1; - y = 2; - break; - } - - /* concave check */ - p0 = prim.get_vertex(0).get_coord_value(bucket); - p1 = prim.get_vertex(1).get_coord_value(bucket); - dx1 = p1[x] - p0[x]; - dy1 = p1[y] - p0[y]; - p0 = p1; - p1 = prim.get_vertex(2).get_coord_value(bucket); - - dx2 = p1[x] - p0[x]; - dy2 = p1[y] - p0[y]; - asum = ((dx1 * dy2 - dx2 * dy1 >= 0.0) ? 1 : 0); - - for (i = 0; i < num_verts - 1; i++) { - p0 = p1; - p1 = prim.get_vertex((i+3) % num_verts).get_coord_value(bucket); - - dx1 = dx2; - dy1 = dy2; - dx2 = p1[x] - p0[x]; - dy2 = p1[y] - p0[y]; - csum = ((dx1 * dy2 - dx2 * dy1 >= 0.0) ? 1 : 0); - - if (csum ^ asum) { - return decomp_concave(prim, bucket, result, flag, x, y); - } - } - - v0 = 0; - v1 = 1; - v = num_verts - 1; - - even = 1; - - /* - * Convert to triangles only. Do not fan out from a single vertex - * but zigzag into triangle strip. - */ - for (i = 0; i < num_verts - 2; i++) { - if (even) { - PrimType new_prim(prim); - new_prim.set_type(BPT_tri); - new_prim.clear_vertices(); - new_prim.add_vertex(prim.get_vertex(v0)); - new_prim.add_vertex(prim.get_vertex(v1)); - new_prim.add_vertex(prim.get_vertex(v)); - *result++ = new_prim; - v0 = v1; - v1 = v; - v = v0 + 1; - } else { - PrimType new_prim(prim); - new_prim.set_type(BPT_tri); - new_prim.clear_vertices(); - new_prim.add_vertex(prim.get_vertex(v1)); - new_prim.add_vertex(prim.get_vertex(v0)); - new_prim.add_vertex(prim.get_vertex(v)); - *result++ = new_prim; - v0 = v1; - v1 = v; - v = v0 - 1; - } - - even = !even; - } - - return true; -} - - -//////////////////////////////////////////////////////////////////// -// Function: expand_polys -// Description: Identifies a single polygon as a triangle, quad, or -// higher-order polygon, and writes it into the result -// list. -//////////////////////////////////////////////////////////////////// -template -static bool -expand_polys(PrimType &prim, BuilderBucket &, - OutputIterator result) { - switch (prim.get_num_verts()) { - case 0: - case 1: - case 2: - return false; - - case 3: - prim.set_type(BPT_tri); - break; - - case 4: - prim.set_type(BPT_quad); - break; - - default: - prim.set_type(BPT_poly); - } - - *result++ = prim; - return true; -} - - -//////////////////////////////////////////////////////////////////// -// Function: expand_points -// Description: Expands a light points primitive into its individual -// component points, with one point per primitive. -//////////////////////////////////////////////////////////////////// -template -static bool -expand_points(const PrimType &prim, BuilderBucket &, - OutputIterator result) { - // Each vertex goes in its own primitive. - - int num_verts = prim.get_num_verts(); - for (int i = 0; i < num_verts; i++) { - PrimType new_prim(prim); - new_prim.clear_vertices(); - new_prim.add_vertex(prim.get_vertex(i)); - *result++ = new_prim; - } - return true; -} - - -//////////////////////////////////////////////////////////////////// -// Function: expand_lines -// Description: Expands a linestrip primitive into its component line -// primitives. -//////////////////////////////////////////////////////////////////// -template -static bool -expand_lines(PrimType &prim, BuilderBucket &, - OutputIterator result) { - // Actually, we don't have support for meshing linestrips right now, - // so let's not break up the linestrips we're supplied with. - /* - if (bucket._subdivide_polys) { - // If we're subdividing, each line segment goes in its own - // primitive. This breaks up the linestrips already defined; - // we'll re-strip them later if the generate-tstrips flag is - // enabled. - prim.set_type(BPT_line); - - int num_verts = prim.get_num_verts(); - for (int i = 1; i < num_verts; i++) { - PrimType new_prim(prim); - new_prim.clear_vertices(); - new_prim.add_vertex(prim.get_vertex(i-1)); - new_prim.add_vertex(prim.get_vertex(i)); - *result++ = new_prim; - } - return true; - } - */ - - // If we're not to subdivide the polys, then just pass them through - // as they are. Two vertices is a BPT_line; more than that is a - // BPT_linestrip. - if (prim.get_num_verts() > 2) { - prim.set_type(BPT_linestrip); - } else { - prim.set_type(BPT_line); - } - *result++ = prim; - - return true; -} - - - -//////////////////////////////////////////////////////////////////// -// Function: expand -// Description: Receives a single primitive as a BuilderPrim or -// BuilderPrimI object, as input by the user. Does some -// initial processing on the primitive to verify -// internal consistency (for instance, that a quad has -// four vertices), and returns a new BuilderPrim or -// series of BuilderPrim objects, suitable for building -// with. -// -// More than one primitive might be returned because -// higher-order polygons may be broken up into -// triangles, and linestrips and points are broken into -// their component pieces. The output primitives are -// written into the STL container defined by result. -//////////////////////////////////////////////////////////////////// -template -bool -expand(const PrimType &prim, BuilderBucket &bucket, OutputIterator result) { - // Make a copy of the prim so we can fiddle with it. - PrimType new_prim = prim; - - switch (new_prim.get_type()) { - case BPT_poly: - case BPT_tri: - case BPT_quad: - // These three types are all treated the same, as polygons. We - // don't entirely trust the user to match the polygon type with - // the number of verts, so we'll do it ourselves later. - new_prim.remove_doubled_verts(true); - - if (!bucket._subdivide_polys || - (bucket._mesh && new_prim.get_num_verts() <= 4)) { - // If we're meshing, we'd like to send quads through without - // subdividing. The mesher can take advantage of the extra - // information (and will eventually produce tris anyway). - return expand_polys(new_prim, bucket, result); - } else { - // If we're not meshing, we'll break them into tris now. - return triangulate_poly(new_prim, bucket, result); - } - - case BPT_point: - new_prim.remove_doubled_verts(false); - return expand_points(new_prim, bucket, result); - - case BPT_line: - case BPT_linestrip: - new_prim.remove_doubled_verts(false); - return expand_lines(new_prim, bucket, result); - - default: - builder_cat.error() << "Unknown prim type\n"; - return false; - } -} - - -//////////////////////////////////////////////////////////////////// -// Function: build_geoms -// Description: Accepts a list of BuilderPrim or BuilderPrimI -// objects, defined by the iterators first and last, and -// creates corresponding geometry for them in the -// indicated GeomNode. -//////////////////////////////////////////////////////////////////// -template -static int -build_geoms(InputIterator first, InputIterator last, - BuilderBucket &bucket, GeomNode *geom_node, - PrimType *) { - if (first==last) { - return 0; - } - - // By the time we get here, we have a list of primitives that all have - // the same properties: - - // 1. The BuilderBucket. - // 2. The indexed/nonindexed type. - // 3. The primitive type (polygon, line, point). - // 4. The pixel size. - - // The binding of normals, colors, or texcoords: per-vertex, - // per-prim, or per-component, will generally be the same across all - // primitives, but it might not always be the same, because in - // certain special cases the mesher might have changed these - // properties when it built tristrips. - - typedef TYPENAME PrimType::VType VType; - typedef TYPENAME PrimType::NType NType; - typedef TYPENAME PrimType::TType TType; - typedef TYPENAME PrimType::CType CType; - - // We need to determine the common binding type for all primitives. - // For a given attribute, say normals, there are at most five cases, - // in the order of priority: - // - // 1. If at least one primitive in the list does not have normals, - // the binding will be G_OFF. - // - // 2. If at least one primitive has per-vertex normals, the binding - // will be G_PER_VERTEX. - // - // 3. If at least one primitive has per-component normals, the - // binding will be G_PER_COMPONENT. - // - // 4. If none of the first three apply, it follows that all - // primitives have an overall normal. If any primitive's - // overall normal differs from any other, the binding will be - // G_PER_PRIM. - // - // 5. If none of the above apply, the binding will be G_OVERALL. - // - // Texcoords are an exception to the above, since they are either - // per vertex or not at all, and since there may be a different set - // of texcoords for each of a number of InternalName objects. - - GeomBindType bind_normals = G_OVERALL; - GeomBindType bind_colors = G_OVERALL; - - typedef pset InternalNames; - InternalNames texcoord_names; - - NType overall_normal(0); - CType overall_color(0); - bool first_normal = true; - bool first_color = true; - - InputIterator i; - for (i = first; i != last; ++i) { - // Normals. - - // Test rule 1. - if (!(*i).has_any_normal()) { - bind_normals = G_OFF; - } else if (bind_normals != G_OFF) { - // Test rule 2. - if ((*i).has_vertex_normal()) { - bind_normals = G_PER_VERTEX; - } else if (bind_normals != G_PER_VERTEX) { - // Test rule 3. - if ((*i).has_component_normal()) { - bind_normals = G_PER_COMPONENT; - } else if (bind_normals != G_PER_COMPONENT) { - // Test rule 4. - nassertr((*i).has_overall_normal(), 0); - if (first_normal) { - overall_normal = (*i).get_normal(); - first_normal = false; - } else if ( !((*i).get_normal() == overall_normal)) { - bind_normals = G_PER_PRIM; - } - } - } - } - - // Colors. - - // Test rule 1. - if (!(*i).has_any_color()) { - bind_colors = G_OFF; - } else if (bind_colors != G_OFF) { - // Test rule 2. - if ((*i).has_vertex_color()) { - bind_colors = G_PER_VERTEX; - } else if (bind_colors != G_PER_VERTEX) { - // Test rule 3. - if ((*i).has_component_color()) { - bind_colors = G_PER_COMPONENT; - } else if (bind_colors != G_PER_COMPONENT) { - // Test rule 4. - nassertr((*i).has_overall_color(), 0); - if (first_color) { - overall_color = (*i).get_color(); - first_color = false; - } else if ( !((*i).get_color() == overall_color)) { - bind_colors = G_PER_PRIM; - } - } - } - } - - // Texcoords. Get the union of all InternalNames defined on the - // prims. - TYPENAME PrimType::tcn_const_iterator tni; - for (tni = (*i).tcn_begin(); tni != (*i).tcn_end(); ++tni) { - const InternalName *name = (*tni); - texcoord_names.insert(name); - } - } - - - // Determine the primitive type and build the lengths array, if needed. - PTA_int lengths; - bool want_lengths = false; - int j; - - Geom *geom = NULL; - BuilderPrimType type = (*first).get_type(); - - switch (type) { - case BPT_poly: - geom = new GeomPolygon; - want_lengths = true; - break; - - case BPT_tristrip: - geom = new GeomTristrip; - want_lengths = true; - break; - - case BPT_trifan: - geom = new GeomTrifan; - want_lengths = true; - break; - - case BPT_line: - geom = new GeomLine; - break; - - case BPT_linestrip: - geom = new GeomLinestrip; - want_lengths = true; - break; - - case BPT_point: - geom = new GeomPoint; - break; - - case BPT_tri: - geom = new GeomTri; - break; - - case BPT_quad: - geom = new GeomQuad; - break; - - default: - builder_cat.fatal() << "Invalid primitive type.\n"; - abort(); - } - - if (geom == NULL) { - builder_cat.error() << "Unsupported primitive type " << type << "\n"; - return 0; - } - - // Count up the number of prims we're actually building. - int num_prims = 0; - for (i = first; i != last; ++i) { - if ((*i).is_valid()) { - num_prims++; - } - } - - if (num_prims==0) { - builder_cat.error() << "All primitives were invalid!\n"; - return 0; - } - - if (want_lengths) { - lengths = PTA_int::empty_array(num_prims); - j = 0; - for (i = first; i != last; ++i) { - if ((*i).is_valid()) { - lengths[j++] = (*i).get_num_verts(); - } - } - nassertr(j == num_prims, 0); - } - - // Now build up some arrays. - PTA(VType) coords = PTA(VType)::empty_array(0); - PTA(NType) normals = PTA(NType)::empty_array(0); - PTA(CType) colors = PTA(CType)::empty_array(0); - - typedef TYPENAME PrimType::TexCoordFill TexCoordFill; - TexCoordFill texcoords; - InternalNames::const_iterator tni; - for (tni = texcoord_names.begin(); tni != texcoord_names.end(); ++tni) { - texcoords[*tni] = PTA(TType)::empty_array(0); - } - - int total_verts = 0; - int total_components = 0; - - int v, num_verts; - int c, num_components; - for (i = first; i != last; ++i) { - if ((*i).is_valid()) { - num_verts = (*i).get_num_verts(); - total_verts += num_verts; - for (v = 0; v < num_verts; v++) { - coords.push_back((*i).get_vertex(v).get_coord()); - - if (bind_normals == G_PER_VERTEX) { - normals.push_back((*i).get_vertex(v).get_normal()); - } - if (bind_colors == G_PER_VERTEX) { - colors.push_back((*i).get_vertex(v).get_color()); - } - TYPENAME TexCoordFill::iterator tci; - for (tci = texcoords.begin(); tci != texcoords.end(); ++tci) { - const InternalName *name = (*tci).first; - if ((*i).get_vertex(v).has_texcoord(name)) { - (*tci).second.push_back((*i).get_vertex(v).get_texcoord(name)); - } else { - (*tci).second.push_back(TType()); - } - } - } - - num_components = (*i).get_num_components(); - total_components += num_components; - for (c = 0; c < num_components; c++) { - if (bind_normals == G_PER_COMPONENT) { - normals.push_back((*i).get_component(c).get_normal()); - } - if (bind_colors == G_PER_COMPONENT) { - colors.push_back((*i).get_component(c).get_color()); - } - } - - if (bind_normals == G_PER_PRIM) { - normals.push_back((*i).get_normal()); - } - if (bind_colors == G_PER_PRIM) { - colors.push_back((*i).get_color()); - } - } - } - - if (bind_normals == G_OVERALL) { - normals.push_back(overall_normal); - } - if (bind_colors == G_OVERALL) { - colors.push_back(overall_color); - } - - // Now add all the stuff to our Geom. - - geom->set_num_prims(num_prims); - - if (lengths != (int *)NULL) { - geom->set_lengths(lengths); - } - - PrimType::fill_geom(geom, coords, - bind_normals, normals, - bind_colors, colors, - texcoords, - bucket, num_prims, - total_components, total_verts); - - /* - if ((*first).has_pixel_size()) { - // Again, we only have to test the first one in the list for a - // pixel_size attribute. If this one has it, then they all have - // the same value. - geom->setPntSize((*first).get_pixel_size()); - geom->setLineWidth((*first).get_pixel_size()); - } - */ - - // geom->setDrawBin(bucket._drawBin); - // geom->setDrawOrder(bucket._drawOrder); - - Geom *new_geom = bucket.done_geom(geom); - if (new_geom != (Geom *)NULL) { - geom_node->add_geom(new_geom, bucket._state); - } - - return 1; -} - - -///////////////////////////////////////////////////////////////////// -// Class : PrimByType -// Description : An STL function object to sort primitives in order by -// type. -//////////////////////////////////////////////////////////////////// -template -class PrimByType { -public: - int operator () (const PrimType &p1, const PrimType &p2) const { - return p1.get_type() < p2.get_type(); - } -}; - - -//////////////////////////////////////////////////////////////////// -// Function: __mesh_and_build -// Description: The implementation of mesh_and_build(), below. This -// extra function call is just to allow mesh_and_build() -// to infer the PrimType (BuilderPrim or BuilderPrimI) -// from the iterator's value type, and template on that. -//////////////////////////////////////////////////////////////////// -template -static int -__mesh_and_build(InputIterator first, InputIterator last, - BuilderBucket &bucket, GeomNode *geom_node, - PrimType *) { - if (first==last) { - return 0; - } - - typedef pvector Prims; - Prims prims; - BuilderBucket *local_bucket = NULL; - BuilderBucket *bucket_ptr = &bucket; - - if (bucket._mesh) { - // Send all the prims through the mesher. First, make a copy of - // the bucket so the mesher can modify it if it wants. - local_bucket = bucket.make_copy(); - bucket_ptr = local_bucket; - MesherTempl mesher(local_bucket); - - for (InputIterator ii = first; ii != last; ++ii) { - mesher.add_prim(*ii); - } - mesher.mesh(); - PrimType prim; - prim = mesher.getPrim(); - while (prim.get_num_verts() > 0) { - prims.push_back(prim); - prim = mesher.getPrim(); - } - - } else { - // Send the prims through without meshing. - copy(first, last, back_inserter(prims)); - } - - // Now we have an array of prims which all share the same - // properties, except possibly type. Sort them by type and send - // them to build_geoms. - sort(prims.begin(), prims.end(), PrimByType()); - - int count = 0; - if (!prims.empty()) { - TYPENAME Prims::iterator pi, last_pi; - pi = prims.begin(); - last_pi = pi; - for (++pi; pi != prims.end(); ++pi) { - if ((*pi).get_type() != (*last_pi).get_type()) { - count += build_geoms(last_pi, pi, *bucket_ptr, geom_node, (PrimType*)0); - last_pi = pi; - } - } - count += build_geoms(last_pi, pi, *bucket_ptr, geom_node, (PrimType*)0); - } - - if (local_bucket!=NULL) { - delete local_bucket; - } - - // Finally, if the user so requested, create some visualization for - // the normals. -#ifdef SUPPORT_SHOW_NORMALS - if (bucket._show_normals) { - BuilderNormalVisualizer bnv(bucket); - for (InputIterator ii = first; ii != last; ++ii) { - bnv.add_prim(*ii); - } - bnv.show_normals(geom_node); - } -#endif - - return count; -} - - -//////////////////////////////////////////////////////////////////// -// Function: mesh_and_build -// Description: Accepts a list of BuilderPrim or BuilderPrimI -// objects, defined by the iterators first and list, -// runs them through the mesher if specified by the -// bucket, and builds them into the indicated GeomNode. -//////////////////////////////////////////////////////////////////// -template -int -mesh_and_build(InputIterator first, InputIterator last, - BuilderBucket &bucket, GeomNode *geom_node, - value_type *value_type_ptr) { - return __mesh_and_build(first, last, bucket, geom_node, value_type_ptr); -} - - -//////////////////////////////////////////////////////////////////// -// Function: split -// Description: Splits an STL list into two other lists, according to -// the return value from pred. -//////////////////////////////////////////////////////////////////// -template -OutputIterator split(InputIterator first, InputIterator last, - OutputIterator true_result, OutputIterator false_result, - Predicate pred) { - while (first != last) { - if (pred(*first)) { - *true_result++ = *first++; - } else { - *false_result++ = *first++; - } - } - return true_result; -} - diff --git a/panda/src/builder/builderFuncs.h b/panda/src/builder/builderFuncs.h deleted file mode 100644 index 376d2b06e1..0000000000 --- a/panda/src/builder/builderFuncs.h +++ /dev/null @@ -1,76 +0,0 @@ -// Filename: builderFuncs.h -// Created by: drose (09Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// -#ifndef BUILDERFUNCS_H -#define BUILDERFUNCS_H - -#include "pandabase.h" -#include "pvector.h" - -class BuilderBucket; -class GeomNode; - - -//////////////////////////////////////////////////////////////////// -// Function: expand -// Description: Receives a single primitive as a BuilderPrim or -// BuilderPrimI object, as input by the user. Does some -// initial processing on the primitive to verify -// internal consistency (for instance, that a quad has -// four vertices), and returns a new BuilderPrim or -// series of BuilderPrim objects, suitable for building -// with. -// -// More than one primitive might be returned because -// higher-order polygons may be broken up into -// triangles, and linestrips and points are broken into -// their component pieces. The output primitives are -// written into the STL container defined by result. -//////////////////////////////////////////////////////////////////// -template -bool -expand(const PrimType &prim, BuilderBucket &bucket, - OutputIterator result); - - -//////////////////////////////////////////////////////////////////// -// Function: mesh_and_build -// Description: Accepts a list of BuilderPrim or BuilderPrimI -// objects, defined by the iterators first and list, -// runs them through the mesher if specified by the -// bucket, and builds them into the indicated GeomNode. -//////////////////////////////////////////////////////////////////// -template -int -mesh_and_build(InputIterator first, InputIterator last, - BuilderBucket &bucket, GeomNode *geom_node); - - - -//////////////////////////////////////////////////////////////////// -// Function: split -// Description: Splits an STL list into two other lists, according to -// the return value from pred. -//////////////////////////////////////////////////////////////////// -template -OutputIterator split(InputIterator first, InputIterator last, - OutputIterator true_result, OutputIterator false_result, - Predicate pred); - -#include "builderFuncs.I" - -#endif diff --git a/panda/src/builder/builderMisc.cxx b/panda/src/builder/builderMisc.cxx deleted file mode 100644 index 518dc78210..0000000000 --- a/panda/src/builder/builderMisc.cxx +++ /dev/null @@ -1,49 +0,0 @@ -// Filename: builderMisc.cxx -// Created by: drose (18Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "builderMisc.h" -#include "builderTypes.h" - -#include "luse.h" -#include -//////////////////////////////////////////////////////////////////// -// Function: make_random_color -// Description: Chooses a reasonable random color. -//////////////////////////////////////////////////////////////////// -void -make_random_color(Colorf &color) { - LVector3f rgb; - float len; - do { - for (int i = 0; i < 3; i++) { - rgb[i] = (double)rand() / (double)RAND_MAX; - } - len = length(rgb); - - // Repeat until we have a color that's not too dark or too light. - } while (len < .1 || len > 1.5); - -#ifdef WIN32_VC - color.set(rgb[0], rgb[1], rgb[2], - 0.25 + 0.75 * (double)rand() / (double)RAND_MAX); -#else - color.set(rgb[0], rgb[1], rgb[2], - 0.25 + 0.75 * (double)random() / (double)RAND_MAX); -#endif -} - diff --git a/panda/src/builder/builderMisc.h b/panda/src/builder/builderMisc.h deleted file mode 100644 index 823ad65356..0000000000 --- a/panda/src/builder/builderMisc.h +++ /dev/null @@ -1,31 +0,0 @@ -// Filename: builderMisc.h -// Created by: drose (18Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// -#ifndef BUILDERMISC_H -#define BUILDERMISC_H - -#include "pandabase.h" - -#include "luse.h" - -//////////////////////////////////////////////////////////////////// -// Function: make_random_color -// Description: Chooses a reasonable random color. -//////////////////////////////////////////////////////////////////// -void make_random_color(Colorf &color); - -#endif diff --git a/panda/src/builder/builderNormalVisualizer.I b/panda/src/builder/builderNormalVisualizer.I deleted file mode 100644 index 59aad04bef..0000000000 --- a/panda/src/builder/builderNormalVisualizer.I +++ /dev/null @@ -1,24 +0,0 @@ -// Filename: builderNormalVisualizer.I -// Created by: drose (08Sep99) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -INLINE BuilderNormalVisualizer:: -BuilderNormalVisualizer(BuilderBucket &bucket) : _bucket(bucket) { - _num_vertices = 0; - _net_vertex.set(0.0, 0.0, 0.0); -} - diff --git a/panda/src/builder/builderNormalVisualizer.cxx b/panda/src/builder/builderNormalVisualizer.cxx deleted file mode 100644 index 8d62058328..0000000000 --- a/panda/src/builder/builderNormalVisualizer.cxx +++ /dev/null @@ -1,79 +0,0 @@ -// Filename: builderNormalVisualizer.cxx -// Created by: drose (08Sep99) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "builderFuncs.h" -#include "builderNormalVisualizer.h" -#include "geomNode.h" - -#ifdef SUPPORT_SHOW_NORMALS - -void BuilderNormalVisualizer:: -add_prim(const BuilderPrim &prim) { - if (prim.has_overall_normal()) { - // Average up all the vertex values to get the primitive center. - BuilderV net_vertex; - net_vertex.set(0.0, 0.0, 0.0); - int num_verts = prim.get_num_verts(); - for (int i = 0; i < num_verts; i++) { - net_vertex += prim.get_vertex(i).get_coord(); - } - net_vertex /= num_verts; - add_normal(net_vertex, prim.get_normal()); - - } else if (prim.has_vertex_normal()) { - // Each vertex gets its own normal. - int num_verts = prim.get_num_verts(); - for (int i = 0; i < num_verts; i++) { - add_normal(prim.get_vertex(i).get_coord(), prim.get_vertex(i).get_normal()); - } - } else if (prim.has_component_normal()) { - // Each component gets its own normal. We don't presently handle - // this, as it should only happen when the user passes - // already-meshed tristrips into the builder, an unusual - // situation. - } -} - -void BuilderNormalVisualizer:: -add_prim(const BuilderPrimI &prim) { - BuilderPrim prim_ni; - prim_ni.nonindexed_copy(prim, _bucket); - add_prim(prim_ni); -} - -void BuilderNormalVisualizer:: -show_normals(GeomNode *node) { - // Ok, now we've got a bunch of normals saved up; create some geometry. - mesh_and_build(_lines.begin(), _lines.end(), _bucket, node, (BuilderPrim *)0); -} - -void BuilderNormalVisualizer:: -add_normal(const BuilderV ¢er, const BuilderN &normal) { - BuilderV to = center + normal * _bucket._normal_scale; - - BuilderPrim line; - line.set_type(BPT_line); - line.set_color(_bucket._normal_color); - line.add_vertex(BuilderVertex(center)); - line.add_vertex(BuilderVertex(to)); - - _lines.push_back(line); -} - -#endif - diff --git a/panda/src/builder/builderNormalVisualizer.h b/panda/src/builder/builderNormalVisualizer.h deleted file mode 100644 index eb4fe10f71..0000000000 --- a/panda/src/builder/builderNormalVisualizer.h +++ /dev/null @@ -1,66 +0,0 @@ -// Filename: builderNormalVisualizer.h -// Created by: drose (08Sep99) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef BUILDERNORMALVISUALIZER_H -#define BUILDERNORMALVISUALIZER_H - -#include "pandabase.h" - -#include "mesherConfig.h" - -#ifdef SUPPORT_SHOW_NORMALS - -#include "builderBucket.h" -#include "builderAttrib.h" -#include "builderVertex.h" -#include "builderPrim.h" - -#include "pvector.h" - -//////////////////////////////////////////////////////////////////// -// Class : BuilderNormalVisualizer -// Description : A useful class for collecting information about -// vertices and their associated normals as geometry is -// built, so that its normals may be visualized via -// renderable geometry. This is activated by the -// _show_normals flag in the BuilderProperties. -//////////////////////////////////////////////////////////////////// -class EXPCL_PANDAEGG BuilderNormalVisualizer { -public: - INLINE BuilderNormalVisualizer(BuilderBucket &bucket); - - void add_prim(const BuilderPrim &prim); - void add_prim(const BuilderPrimI &prim); - - void show_normals(GeomNode *node); - -private: - void add_normal(const BuilderV ¢er, const BuilderN &normal); - - BuilderBucket &_bucket; - - BuilderV _net_vertex; - int _num_vertices; - pvector _lines; -}; - -#include "builderNormalVisualizer.I" - -#endif // SUPPORT_SHOW_NORMALS - -#endif diff --git a/panda/src/builder/builderPrim.I b/panda/src/builder/builderPrim.I deleted file mode 100644 index 8e54c7529c..0000000000 --- a/panda/src/builder/builderPrim.I +++ /dev/null @@ -1,78 +0,0 @@ -// Filename: builderPrim.I -// Created by: drose (11Jan01) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrim::Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE BuilderPrim:: -BuilderPrim() { -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrim::Copy Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE BuilderPrim:: -BuilderPrim(const BuilderPrim ©) : - BuilderPrimTempl(copy) { -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrim::Copy Assignment -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE BuilderPrim &BuilderPrim:: -operator = (const BuilderPrim ©) { - BuilderPrimTempl::operator = (copy); - return *this; -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimI::Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE BuilderPrimI:: -BuilderPrimI() { -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimI::Copy Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE BuilderPrimI:: -BuilderPrimI(const BuilderPrimI ©) : - BuilderPrimTempl(copy) { -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimI::Copy Assignment -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE BuilderPrimI &BuilderPrimI:: -operator = (const BuilderPrimI ©) { - BuilderPrimTempl::operator = (copy); - return *this; -} diff --git a/panda/src/builder/builderPrim.cxx b/panda/src/builder/builderPrim.cxx deleted file mode 100644 index 9adc234f79..0000000000 --- a/panda/src/builder/builderPrim.cxx +++ /dev/null @@ -1,273 +0,0 @@ -// Filename: builderPrim.cxx -// Created by: drose (10Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "builderPrim.h" -#include "notify.h" -// Tell GCC that we'll take care of the instantiation explicitly here. -#ifdef __GNUC__ -#pragma implementation -#endif - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrim::nonindexed_copy -// Access: Public -// Description: Makes a nonindexed copy of the given indexed prim, by -// looking up the current values of the indexed -// coordinates in the given bucket. -//////////////////////////////////////////////////////////////////// -BuilderPrim &BuilderPrim:: -nonindexed_copy(const BuilderPrimTempl ©, - const BuilderBucket &bucket) { - clear(); - - set_type(copy.get_type()); - - if (copy.has_normal()) { - nassertr(bucket.get_normals() != (Normalf *)NULL, *this); - set_normal(bucket.get_normals()[copy.get_normal()]); - } - if (copy.has_color()) { - nassertr(bucket.get_colors() != (Colorf *)NULL, *this); - set_color(bucket.get_colors()[copy.get_color()]); - } - if (copy.has_pixel_size()) { - set_pixel_size(copy.get_pixel_size()); - } - - int num_verts = copy.get_num_verts(); - int i; - for (i = 0; i < num_verts; i++) { - const BuilderVertexI &cv = copy.get_vertex(i); - BuilderVertex v; - if (cv.has_coord()) { - v.set_coord(cv.get_coord_value(bucket)); - } - - if (cv.has_normal()) { - v.set_normal(cv.get_normal_value(bucket)); - } - - if (cv.has_color()) { - v.set_color(cv.get_color_value(bucket)); - } - - BuilderVertexI::tc_const_iterator tci; - for (tci = cv.tc_begin(); tci != cv.tc_end(); ++tci) { - const InternalName *name = (*tci).first; - v.set_texcoord(name, cv.get_texcoord_value(name, bucket)); - } - - if (cv.has_pixel_size()) { - v.set_pixel_size(cv.get_pixel_size()); - } - add_vertex(v); - } - return *this; -} - - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrim::flatten_vertex_properties -// Access: Public -// Description: If all the vertices of the primitive have the same -// normal, color, etc., removes those properties from -// the vertices and assigns them to the primitive -// instead. -// -// This can provide better meshing by removing -// properties from otherwise shared vertices. -//////////////////////////////////////////////////////////////////// -void BuilderPrim:: -flatten_vertex_properties() { - int num_verts = get_num_verts(); - int i; - - if (has_overall_normal()) { - set_normal(get_normal()); - - for (i = 0; i < num_verts; i++) { - get_vertex(i).clear_normal(); - } - } - - if (has_overall_color()) { - set_color(get_color()); - - for (i = 0; i < num_verts; i++) { - get_vertex(i).clear_color(); - } - } - - if (has_overall_pixel_size()) { - set_pixel_size(get_pixel_size()); - - for (i = 0; i < num_verts; i++) { - get_vertex(i).clear_pixel_size(); - } - } -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrim::fill_geom -// Access: Public -// Description: Fills up the attribute values of a Geom with the -// indicated arrays. This creates a nonindexed Geom. -//////////////////////////////////////////////////////////////////// -void BuilderPrim:: -fill_geom(Geom *geom, const PTA_BuilderV &v_array, - GeomBindType n_attr, const PTA_BuilderN &n_array, - GeomBindType c_attr, const PTA_BuilderC &c_array, - const BuilderPrim::TexCoordFill &texcoords, - const BuilderBucket &, int, int, int) { - - // WARNING! This is questionable practice. We have a - // PTA_BuilderV etc.; since a BuilderV is just a proxy - // to a Vertexf, we can get away with casting this to a - // PTA_Vertexf. - - geom->set_coords((PTA_Vertexf &)v_array); - - if (n_attr != G_OFF) { - geom->set_normals((PTA_Normalf &)n_array, n_attr); - } - - if (c_attr != G_OFF) { - geom->set_colors((PTA_Colorf &)c_array, c_attr); - } - - TexCoordFill::const_iterator tci; - for (tci = texcoords.begin(); tci != texcoords.end(); ++tci) { - const InternalName *name = (*tci).first; - geom->set_texcoords(name, (*tci).second); - } -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimI::flatten_vertex_properties -// Access: Public -// Description: If all the vertices of the primitive have the same -// normal, color, etc., removes those properties from -// the vertices and assigns them to the primitive -// instead. -// -// This can do nothing in the case of an indexed -// primitive, because we can't monkey with the vertex -// properties in this case. -//////////////////////////////////////////////////////////////////// -void BuilderPrimI:: -flatten_vertex_properties() { -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimI::fill_geom -// Access: Public -// Description: Fills up the attribute values of a Geom with the -// indicated arrays. This creates an indexed Geom. -//////////////////////////////////////////////////////////////////// -void BuilderPrimI:: -fill_geom(Geom *geom, const PTA_ushort &v_array, - GeomBindType n_attr, PTA_ushort n_array, - GeomBindType c_attr, PTA_ushort c_array, - const BuilderPrimI::TexCoordFill &texcoords, - const BuilderBucket &bucket, - int num_prims, int num_components, int num_verts) { - PTA_Vertexf v_data = bucket.get_coords(); - PTA_Normalf n_data = bucket.get_normals(); - PTA_Colorf c_data = bucket.get_colors(); - - // Make sure the data pointers are NULL if the attribute is off. - if (n_attr == G_OFF) { - n_data = NULL; - n_array = NULL; - } - if (c_attr == G_OFF) { - c_data = NULL; - c_array = NULL; - } - - int n_len = - (n_attr==G_PER_VERTEX) ? num_verts : - (n_attr==G_PER_COMPONENT) ? num_components : - (n_attr==G_PER_PRIM) ? num_prims : - (n_attr==G_OVERALL) ? 1 : 0; - int c_len = - (c_attr==G_PER_VERTEX) ? num_verts : - (c_attr==G_PER_COMPONENT) ? num_components : - (c_attr==G_PER_PRIM) ? num_prims : - (c_attr==G_OVERALL) ? 1 : 0; - - // See if we can share some of the index lists. - if (n_attr != G_OFF && - memcmp(v_array, n_array, sizeof(ushort) * n_len)==0) { - n_array = v_array; - } - if (c_attr != G_OFF) { - if (memcmp(v_array, c_array, sizeof(ushort) * c_len)==0) { - c_array = v_array; - } else if (c_len <= n_len && - memcmp(n_array, c_array, sizeof(ushort) * c_len)==0) { - c_array = n_array; - } - } - - geom->set_coords(v_data, v_array); - - if (n_attr != G_OFF) { - geom->set_normals(n_data, n_attr, n_array); - } - - if (c_attr != G_OFF) { - geom->set_colors(c_data, c_attr, c_array); - } - - TexCoordFill::const_iterator tci; - for (tci = texcoords.begin(); tci != texcoords.end(); ++tci) { - const InternalName *name = (*tci).first; - PTA_ushort t_array = (*tci).second; - - PTA_TexCoordf t_data = bucket.get_texcoords(name); - if (t_data != (TexCoordf *)NULL) { - int t_len = num_verts; - - // Can we share the index list with some other property? - if (memcmp(v_array, t_array, sizeof(ushort) * t_len)==0) { - t_array = v_array; - } else if (t_len <= n_len && - memcmp(n_array, t_array, sizeof(ushort) * t_len)==0) { - t_array = n_array; - } else if (t_len <= c_len && - memcmp(c_array, t_array, sizeof(ushort) * t_len)==0) { - t_array = c_array; - - } else { - TexCoordFill::const_iterator tci2; - for (tci2 = texcoords.begin(); tci2 != tci; ++tci2) { - PTA_ushort t_array2 = (*tci).second; - if (memcmp(t_array2, t_array, sizeof(ushort) * t_len)==0) { - t_array = t_array2; - break; - } - } - } - - geom->set_texcoords(name, t_data, t_array); - } - } -} - diff --git a/panda/src/builder/builderPrim.h b/panda/src/builder/builderPrim.h deleted file mode 100644 index 0aeff58609..0000000000 --- a/panda/src/builder/builderPrim.h +++ /dev/null @@ -1,135 +0,0 @@ -// Filename: builderPrim.h -// Created by: drose (09Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef BUILDERPRIM_H -#define BUILDERPRIM_H - -//////////////////////////////////////////////////////////////////// -// -// BuilderPrim, BuilderPrimI -// -// The basic class for passing primitives (polygons, etc.) to the -// builder. See the comments at the beginning of builder.h and -// builderVertex.h. -// -// A BuilderPrim has a few attributes of its own--color and -// normal--which are defined in builderAttrib.h (which it inherits -// from). It also has a collection of vertices, represented as -// BuilderVertex objects, each of which can have its own attributes as -// well. Any additional attributes, such as texture, lighting, etc., -// are considered to be external to the primitive, and are defined in -// the BuilderBucket object. -// -// BuilderPrimI is exactly like BuilderPrim, except that it represents -// an indexed primitive. A BuilderPrimI keeps its collection of -// vertices as BuilderVertexI's, which store their values as index -// numbers into an array rather than as actual coordinate values. The -// arrays themselves are stored in the BuilderBucket. -// -// In fact, BuilderPrim and BuilderPrimI are both instantiations of -// the same template object, BuilderPrimTempl, with different vertex -// types (BuilderVertex and BuilderVertexI, respectively). -// -// It is this templating that drives most of the code in this package. -// A lot of stuff in the builder tool, and everything in the mesher -// tool, is templated on the BuilderPrim type, so the same code is -// used to support both indexed and nonindexed primitives. -// -// -// In addition to storing the primitives--individual polygons, -// generally--as passed in by user code, BuilderPrim objects can store -// the compound primitives that might have been generated by the -// mesher, like triangle strips. In this case, in addition to an -// array of vertices, it has an array of component attributes, which -// store the attributes specific to each individual component -// (e.g. the normal of each triangle in a triangle strip). -// -//////////////////////////////////////////////////////////////////// - -#include "pandabase.h" -#include "builderPrimTempl.h" -#include "builderBucket.h" -#include "builderTypes.h" -#include "pta_ushort.h" -#include "geom.h" - -EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEGG, EXPTP_PANDAEGG, BuilderPrimTempl); -EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEGG, EXPTP_PANDAEGG, BuilderPrimTempl); - -///////////////////////////////////////////////////////////////////// -// Class : BuilderPrim -// Description : The basic class for passing nonindexed primitives -// to the builder. See the comments at the the head of -// this file, and in builder.h. -// -// Look in builderPrimTempl.h and builderAttribTempl.h -// for most of the interface to BuilderPrim. -//////////////////////////////////////////////////////////////////// -class EXPCL_PANDAEGG BuilderPrim : public BuilderPrimTempl { -public: - INLINE BuilderPrim(); - INLINE BuilderPrim(const BuilderPrim ©); - INLINE BuilderPrim &operator = (const BuilderPrim ©); - - BuilderPrim &nonindexed_copy(const BuilderPrimTempl ©, - const BuilderBucket &bucket); - - void flatten_vertex_properties(); - - static void fill_geom(Geom *geom, const PTA_BuilderV &v_array, - GeomBindType n_attr, const PTA_BuilderN &n_array, - GeomBindType c_attr, const PTA_BuilderC &c_array, - const TexCoordFill &texcoords, - const BuilderBucket &bucket, - int num_prims, int num_components, int num_verts); -}; - - -//////////////////////////////////////////////////////////////////// -// Class : BuilderPrimI -// Description : The basic class for passing indexed primitives -// to the builder. -// -// Look in builderPrimTempl.h and builderAttribTempl.h -// for most of the interface to BuilderPrimI. -//////////////////////////////////////////////////////////////////// -class EXPCL_PANDAEGG BuilderPrimI : public BuilderPrimTempl { -public: - INLINE BuilderPrimI(); - INLINE BuilderPrimI(const BuilderPrimI ©); - INLINE BuilderPrimI &operator = (const BuilderPrimI ©); - - void flatten_vertex_properties(); - - static void fill_geom(Geom *geom, const PTA_ushort &v_array, - GeomBindType n_attr, PTA_ushort n_array, - GeomBindType c_attr, PTA_ushort c_array, - const TexCoordFill &texcoords, - const BuilderBucket &bucket, - int num_prims, int num_components, int num_verts); -}; - -#include "builderPrim.I" - - -// Tell GCC that we'll take care of the instantiation explicitly here. -#ifdef __GNUC__ -#pragma interface -#endif - -#endif diff --git a/panda/src/builder/builderPrimTempl.I b/panda/src/builder/builderPrimTempl.I deleted file mode 100644 index 05ad78d86d..0000000000 --- a/panda/src/builder/builderPrimTempl.I +++ /dev/null @@ -1,1067 +0,0 @@ -// Filename: builderPrimTempl.I -// Created by: drose (11Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "notify.h" - -#include - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderPrimTempl:: -BuilderPrimTempl() { - clear(); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::Copy constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderPrimTempl:: -BuilderPrimTempl(const BuilderPrimTempl ©) { - (*this) = copy; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::Copy assignment operator -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderPrimTempl &BuilderPrimTempl:: -operator = (const BuilderPrimTempl ©) { - DAttrib::operator = (copy); - _verts = copy._verts; - _components = copy._components; - _texcoord_names = copy._texcoord_names; - _type = copy._type; - _overall = copy._overall; - - return *this; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::has_normal -// Access: Public -// Description: Returns true if set_normal() has been called on the -// primitive. This is unrelated to the normal values -// that may or may not override from the vertices. Also -// see has_overall_normal(). -//////////////////////////////////////////////////////////////////// -template -INLINE bool BuilderPrimTempl:: -has_normal() const { - return DAttrib::has_normal(); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::has_color -// Access: Public -// Description: Returns true if set_color() has been called on the -// primitive. This is unrelated to the color values -// that may or may not override from the vertices. Also -// see has_overall_color(). -//////////////////////////////////////////////////////////////////// -template -INLINE bool BuilderPrimTempl:: -has_color() const { - return DAttrib::has_color(); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::has_pixel_size -// Access: Public -// Description: Returns true if set_pixel_size() has been called on -// the primitive. This is unrelated to the pixel_size -// values that may or may not override from the -// vertices. Also see has_overall_pixel_size(). -//////////////////////////////////////////////////////////////////// -template -INLINE bool BuilderPrimTempl:: -has_pixel_size() const { - return DAttrib::has_pixel_size(); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::has_overall_normal -// Access: Public -// Description: Returns true if the primitive has a single, overall -// normal value. This can happen because of one of: (a) -// the primitive had a normal value assigned to it -// directly, and its individual vertices and components -// did not; (b) each vertex was assigned the same normal -// value; (c) each component was assigned the same normal -// value. -// -// If has_overall_normal() returns true, then get_normal() -// will return the overall normal value. -//////////////////////////////////////////////////////////////////// -template -INLINE bool BuilderPrimTempl:: -has_overall_normal() const { - if ((_overall & BAF_overall_updated) == 0) { - ((BuilderPrimTempl *)this)->update_overall_attrib(); - } - return (_overall & BAF_overall_normal)!=0; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::has_overall_color -// Access: Public -// Description: Returns true if the primitive has a single, overall -// color value. This can happen because of one of: (a) -// the primitive had a color value assigned to it -// directly, and its individual vertices and components -// did not; (b) each vertex was assigned the same color -// value; (c) each component was assigned the same color -// value. -// -// If has_overall_color() returns true, then get_color() -// will return the overall color value. -//////////////////////////////////////////////////////////////////// -template -INLINE bool BuilderPrimTempl:: -has_overall_color() const { - if ((_overall & BAF_overall_updated) == 0) { - ((BuilderPrimTempl *)this)->update_overall_attrib(); - } - return (_overall & BAF_overall_color)!=0; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::has_overall_pixel_size -// Access: Public -// Description: Returns true if the primitive has a single, overall -// pixel_size value. This can happen because of one of: -// (a) the primitive had a pixel_size value assigned to -// it directly, and its individual vertices and -// components did not; (b) each vertex was assigned the -// same pixel_size value; (c) each component was -// assigned the same pixel_size value. -// -// If has_overall_pixel_size() returns true, then -// get_pixel_size() will return the overall pixel_size -// value. -//////////////////////////////////////////////////////////////////// -template -INLINE bool BuilderPrimTempl:: -has_overall_pixel_size() const { - if ((_overall & BAF_overall_updated) == 0) { - ((BuilderPrimTempl *)this)->update_overall_attrib(); - } - return (_overall & BAF_overall_pixel_size)!=0; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::has_vertex_normal -// Access: Public -// Description: Returns true if each of the primitive's vertices has -// a different normal value set. -//////////////////////////////////////////////////////////////////// -template -INLINE bool BuilderPrimTempl:: -has_vertex_normal() const { - if ((_overall & BAF_overall_updated) == 0) { - ((BuilderPrimTempl *)this)->update_overall_attrib(); - } - return (_overall & BAF_vertex_normal)!=0; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::has_vertex_color -// Access: Public -// Description: Returns true if each of the primitive's vertices has -// a different color value set. -//////////////////////////////////////////////////////////////////// -template -INLINE bool BuilderPrimTempl:: -has_vertex_color() const { - if ((_overall & BAF_overall_updated) == 0) { - ((BuilderPrimTempl *)this)->update_overall_attrib(); - } - return (_overall & BAF_vertex_color)!=0; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::has_vertex_pixel_size -// Access: Public -// Description: Returns true if each of the primitive's vertices has -// a different pixel_size value set. -//////////////////////////////////////////////////////////////////// -template -INLINE bool BuilderPrimTempl:: -has_vertex_pixel_size() const { - if ((_overall & BAF_overall_updated) == 0) { - ((BuilderPrimTempl *)this)->update_overall_attrib(); - } - return (_overall & BAF_vertex_pixel_size)!=0; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::has_component_normal -// Access: Public -// Description: Returns true if the prim is a composite primitive -// like a tristrip, and its individual components each -// have a different normal value set. -//////////////////////////////////////////////////////////////////// -template -INLINE bool BuilderPrimTempl:: -has_component_normal() const { - if ((_overall & BAF_overall_updated) == 0) { - ((BuilderPrimTempl *)this)->update_overall_attrib(); - } - return (_overall & BAF_component_normal)!=0; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::has_component_color -// Access: Public -// Description: Returns true if the prim is a composite primitive -// like a tristrip, and its individual components each -// have a different color value set. -//////////////////////////////////////////////////////////////////// -template -INLINE bool BuilderPrimTempl:: -has_component_color() const { - if ((_overall & BAF_overall_updated) == 0) { - ((BuilderPrimTempl *)this)->update_overall_attrib(); - } - return (_overall & BAF_component_color)!=0; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::has_component_pixel_size -// Access: Public -// Description: Returns true if the prim is a composite primitive -// like a tristrip, and its individual components each -// have a different pixel_size value set. -//////////////////////////////////////////////////////////////////// -template -INLINE bool BuilderPrimTempl:: -has_component_pixel_size() const { - if ((_overall & BAF_overall_updated) == 0) { - ((BuilderPrimTempl *)this)->update_overall_attrib(); - } - return (_overall & BAF_component_pixel_size)!=0; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::has_any_normal -// Access: Public -// Description: Returns true if the prim has a normal value set -// at any level. That is, it returns true if any of -// has_overall_normal(), has_vertex_normal(), or -// has_component_normal() is true. -//////////////////////////////////////////////////////////////////// -template -INLINE bool BuilderPrimTempl:: -has_any_normal() const { - return has_overall_normal() || has_vertex_normal() || has_component_normal(); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::has_any_color -// Access: Public -// Description: Returns true if the prim has a color value set at any -// level. That is, it returns true if any of -// has_overall_color(), has_vertex_color(), or -// has_component_color() is true. -//////////////////////////////////////////////////////////////////// -template -INLINE bool BuilderPrimTempl:: -has_any_color() const { - return has_overall_color() || has_vertex_color() || has_component_color(); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::has_any_pixel_size -// Access: Public -// Description: Returns true if the prim has a pixel_size value set -// at any level. That is, it returns true if any of -// has_overall_pixel_size(), has_vertex_pixel_size(), or -// has_component_pixel_size() is true. -//////////////////////////////////////////////////////////////////// -template -INLINE bool BuilderPrimTempl:: -has_any_pixel_size() const { - return has_overall_pixel_size() || has_vertex_pixel_size() || - has_component_pixel_size(); -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::tcn_begin -// Access: Public -// Description: Returns an iterator that can be used to walk through -// the list of InternalNames that are common to all -// vertices on this primitive. -//////////////////////////////////////////////////////////////////// -template -INLINE TYPENAME BuilderPrimTempl::tcn_const_iterator BuilderPrimTempl:: -tcn_begin() const { - if ((_overall & BAF_overall_updated) == 0) { - ((BuilderPrimTempl *)this)->update_overall_attrib(); - } - return _texcoord_names.begin(); -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::tcn_end -// Access: Public -// Description: Returns an iterator that can be used to walk through -// the list of InternalNames that are common to all -// vertices on this primitive. -//////////////////////////////////////////////////////////////////// -template -INLINE TYPENAME BuilderPrimTempl::tcn_const_iterator BuilderPrimTempl:: -tcn_end() const { - if ((_overall & BAF_overall_updated) == 0) { - ((BuilderPrimTempl *)this)->update_overall_attrib(); - } - return _texcoord_names.end(); -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::tcn_size -// Access: Public -// Description: Returns the number of InternalNames that are common -// to all vertices on this primitive. -//////////////////////////////////////////////////////////////////// -template -INLINE TYPENAME BuilderPrimTempl::tcn_size_type BuilderPrimTempl:: -tcn_size() const { - if ((_overall & BAF_overall_updated) == 0) { - ((BuilderPrimTempl *)this)->update_overall_attrib(); - } - return _texcoord_names.size(); -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::clear -// Access: Public -// Description: Resets the BuilderPrim to its initial, default state. -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderPrimTempl &BuilderPrimTempl:: -clear() { - DAttrib::clear(); - _type = BPT_poly; - return clear_vertices(); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::clear_vertices -// Access: Public -// Description: Removes all the vertices that have been added to the -// BuilderPrim, without otherwise affecting its -// properties. -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderPrimTempl &BuilderPrimTempl:: -clear_vertices() { - _verts.clear(); - _components.clear(); - _overall = 0; - - return *this; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::set_attrib -// Access: Public -// Description: Copies the polygon attributes, color and normal, from -// the indicated attribute structure (which might be -// another BuilderPrim). -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderPrimTempl &BuilderPrimTempl:: -set_attrib(const DAttrib &attrib) { - DAttrib::operator = (attrib); - _overall = 0; - - return *this; -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::get_type -// Access: Public -// Description: Indicates the type of primitive represented by the -// BuilderPrim. See set_type(). -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderPrimType BuilderPrimTempl:: -get_type() const { - return _type; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::set_type -// Access: Public -// Description: Indicates the type of primitive represented by the -// BuilderPrim. Normally, the user should set this to -// one of BPT_poly, BPT_point, or BPT_line. However, -// other types are possible, and are created by the -// mesher, including triangle strips, quad strips, and -// triangle fans. -// -// Setting this value changes the interpretation of the -// vertices, for instance, a triangle strip is defined -// by vertices that zigzag back and forth between the -// triangles. Note that when defining a composite -// primitive such as a triangle strip, it is also -// necessary to call add_component() the correct number -// of times to match the calls to add_vertex(), -// according to the primitive type. See -// add_component(). -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderPrimTempl &BuilderPrimTempl:: -set_type(BuilderPrimType t) { - _type = t; - return *this; -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::get_normal -// Access: Public -// Description: Returns the value previously set by set_normal(), or -// the overall normal value common to all vertices. It -// is an error to call this without first testing that -// one of has_normal() or has_overall_normal() is true. -//////////////////////////////////////////////////////////////////// -template -INLINE TYPENAME BuilderPrimTempl::NType BuilderPrimTempl:: -get_normal() const { - return DAttrib::get_normal(); -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::set_normal -// Access: Public -// Description: Sets the flat normal associated with the primitive. -// If each of the primitive's vertices also has a normal -// set, the vertex normals will override. -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderPrimTempl &BuilderPrimTempl:: -set_normal(const NType &n) { - DAttrib::set_normal(n); - _overall = 0; - return *this; -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::get_color -// Access: Public -// Description: Returns the value previously set by set_color(), or -// the overall color value common to all vertices. It -// is an error to call this without first testing that -// one of has_color() or has_overall_color() is true. -//////////////////////////////////////////////////////////////////// -template -INLINE TYPENAME BuilderPrimTempl::CType BuilderPrimTempl:: -get_color() const { - return DAttrib::get_color(); -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::set_color -// Access: Public -// Description: Sets the flat color associated with the primitive. -// If each of the primitive's vertices also has a color -// set, the vertex colors will override. -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderPrimTempl &BuilderPrimTempl:: -set_color(const CType &c) { - DAttrib::set_color(c); - _overall = 0; - return *this; -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::get_pixel_size -// Access: Public -// Description: Returns the value previously set by set_pixel_size(), -// or the overall pixel_size value common to all -// vertices. It is an error to call this without first -// testing that one of has_pixel_size() or -// has_overall_pixel_size() is true. -//////////////////////////////////////////////////////////////////// -template -INLINE float BuilderPrimTempl:: -get_pixel_size() const { - return DAttrib::get_pixel_size(); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::set_pixel_size -// Access: Public -// Description: Sets the line thickness (for a polygon or line) or -// size (for a point) in pixels. -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderPrimTempl &BuilderPrimTempl:: -set_pixel_size(float s) { - DAttrib::set_pixel_size(s); - _overall = 0; - return *this; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::add_vertex -// Access: Public -// Description: Adds a new vertex to the BuilderPrim. The vertex -// data is copied into the prim's internal structure. -// Vertices should be added in counterclockwise order, -// when viewed from the front. -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderPrimTempl &BuilderPrimTempl:: -add_vertex(const Vertex &v) { - _overall = 0; - _verts.push_back(v); - return *this; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::get_num_verts -// Access: Public -// Description: Returns the number of vertices in the primitive. -//////////////////////////////////////////////////////////////////// -template -INLINE int BuilderPrimTempl:: -get_num_verts() const { - return _verts.size(); -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::get_vertex -// Access: Public -// Description: Returns a reference to the nth vertex of the -// primitive, where 0 <= n < get_num_verts(). This -// reference may be modified directly, e.g. to set a -// vertex normal on a vertex after it has been added to -// the primitive. -//////////////////////////////////////////////////////////////////// -template -INLINE TYPENAME BuilderPrimTempl::Vertex &BuilderPrimTempl:: -get_vertex(int n) { - nassertr(n >= 0 && n < (int)_verts.size(), *(new Vertex)); - return _verts[n]; -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::get_vertex (const) -// Access: Public -// Description: Returns the nth vertex of the primitive, where 0 <= n -// < get_num_verts(). -//////////////////////////////////////////////////////////////////// -template -INLINE const TYPENAME BuilderPrimTempl::Vertex &BuilderPrimTempl:: -get_vertex(int n) const { - nassertr(n >= 0 && n < (int)_verts.size(), *(new Vertex)); - return _verts[n]; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::add_component -// Access: Public -// Description: Normally, this function is only used by the mesher -// code; user code generally should not need to call it. -// -// In addition to storing a simple polygon, a -// BuilderPrim can store a composite primitive, like a -// triangle strip. In this case, it is useful to store -// the attributes (like color and normal) associated -// with each component. -// -// When get_type() is one of the composite types, it is -// the responsibility of the caller to call -// add_component() once for each component, where the -// number of components is defined by the type and the -// number of vertices (e.g. for a triangle strip, the -// number of components is the number of vertices - 2). -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderPrimTempl &BuilderPrimTempl:: -add_component(const DAttrib &attrib) { - _overall = 0; - _components.push_back(attrib); - return *this; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::get_num_components -// Access: Public -// Description: Returns the number of times add_component() has been -// called. This should be, but is not necessarily, the -// same as the number of components in the composite -// primitive (e.g. a triangle strip). See -// add_component(). -//////////////////////////////////////////////////////////////////// -template -INLINE int BuilderPrimTempl:: -get_num_components() const { - return _components.size(); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::get_component -// Access: Public -// Description: Returns a refernece to the attribute structure -// associated with the nth component, where 0 <= n < -// get_num_components(). This reference may be modified -// directly, e.g. to change the color of a polygon after -// it has been added to the tristrip. See -// add_component() and get_num_components(). -//////////////////////////////////////////////////////////////////// -template -INLINE TYPENAME BuilderPrimTempl::DAttrib &BuilderPrimTempl:: -get_component(int n) { - nassertr(n >= 0 && n < (int)_components.size(), *(new DAttrib)); - return _components[n]; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::get_component (const) -// Access: Public -// Description: Returns the attributes associated with the nth -// component, where 0 <= n < get_num_components(). See -// add_component() and get_num_components(). -//////////////////////////////////////////////////////////////////// -template -INLINE const TYPENAME BuilderPrimTempl::DAttrib &BuilderPrimTempl:: -get_component(int n) const { - nassertr(n >= 0 && n < (int)_components.size(), *(new DAttrib)); - return _components[n]; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::Ordering operator -// Access: Public -// Description: Returns true if this primitive should come before the -// other one, in the bin ordering. This is used to sort -// polygons into groups which can be tristripped -// together, similar to the same operation on the -// BuilderBucket, except that this works at a finer -// level of detail (i.e. on prims within the same -// bucket). -//////////////////////////////////////////////////////////////////// -template -INLINE bool BuilderPrimTempl:: -operator < (const BuilderPrimTempl &other) const { - int sv1 = sort_value(); - int sv2 = other.sort_value(); - - // Normally, we compare only based on the integer sort_value(). - // However, other things being equal, if two prims have a different - // pixel_size then they sort differently. - - // We can ignore per-vertex pixel_size, since there's no way to - // render that anyway. - - return sv1 < sv2 || - (sv1==sv2 && has_pixel_size() && get_pixel_size() < other.get_pixel_size()); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::sort_value -// Access: Protected -// Description: Returns a number for grouping primitives, such that -// only primitives that share the same number can be -// tristripped together. -//////////////////////////////////////////////////////////////////// -template -INLINE int BuilderPrimTempl:: -sort_value() const { - // If a polygon is missing a normal, color, or uv, it shouldn't be - // stripped along with polygons that have normals, colors, or uv's. - // Furthermore, if one polygon has vertex normals and another is - // flat shaded, they shouldn't be stripped together. - return - ((has_vertex_normal() ? 1:0) << 5) | - ((has_vertex_color() ? 1:0) << 4) | - ((!_texcoord_names.empty() ? 1:0) << 3) | - ((has_any_normal() ? 1:0) << 2) | - ((has_any_color() ? 1:0) << 1) | - ((has_pixel_size() ? 1:0) << 0); -} - - -//////////////////////////////////////////////////////////////////// -// Class: SameCoord -// Description: An STL function object that identifies vertices as -// equivalent when they have the same coordinate value, -// regardless of their attribute values like texture -// coordinates. This is used in remove_doubled_verts(). -//////////////////////////////////////////////////////////////////// -template -class SameCoord { -public: - bool operator () (const VTX &a, const VTX &b) const { - return a.get_coord() == b.get_coord(); - } -}; - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::remove_doubled_verts -// Access: Public -// Description: Removes consecutive identical vertices from the prim -// definition. These are meaningless and only confuse -// polygon subdividing and meshing. -// -// If closed is true, this also removes vertices doubled -// at the beginning and end (as if the list of vertices -// were implicitly closed, as it is for a polygon). -//////////////////////////////////////////////////////////////////// -template -void BuilderPrimTempl:: -remove_doubled_verts(int closed) { - // For some reason, writing this variable declaration this way - // prevents VC++ from generating dozens of spurious "local variable - // 'sc' used without having been initialized" warning messages. - SameCoord sc = SameCoord(); - - TYPENAME Verts::iterator new_end = unique(_verts.begin(), _verts.end(), sc); - _verts.erase(new_end, _verts.end()); - - if (closed) { - // Then, if this is a polygon (which will be closed anyway), - // remove the vertex from the end if it's a repeat of the - // beginning. - while (!_verts.empty() && sc(_verts.back(), _verts.front())) { - _verts.pop_back(); - } - } -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::is_valid -// Access: Public -// Description: Returns true if the primitive is well-defined and has -// the right number of vertices for its primitive type, -// and all of its vertices are valid. -//////////////////////////////////////////////////////////////////// -template -bool BuilderPrimTempl:: -is_valid() const { - int num_verts = get_num_verts(); - for (int i = 0; i < num_verts; i++) { - if (!get_vertex(i).is_valid()) { - return false; - } - } - - switch (get_type()) { - case BPT_poly: - return num_verts >= 3; - - case BPT_point: - return num_verts >= 1; - - case BPT_line: - return num_verts == 2; - - case BPT_linestrip: - return num_verts >= 2; - - case BPT_tri: - return num_verts == 3; - - case BPT_tristrip: - case BPT_trifan: - return num_verts >= 3; - - case BPT_quad: - return num_verts == 4; - - default: - return false; - } -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::output -// Access: Public -// Description: Formats the prim for output in some sensible way. -//////////////////////////////////////////////////////////////////// -template -ostream &BuilderPrimTempl:: -output(ostream &out) const { - int num_verts = get_num_verts(); - - out << get_type() << ", " << num_verts << " vertices:\n"; - - for (int i = 0; i < num_verts; i++) { - out << " " << i << ". " << get_vertex(i) << "\n"; - } - - if (has_overall_normal()) { - out << "normal = " << get_normal() << "\n"; - } - if (has_overall_color()) { - out << "color = " << get_color() << "\n"; - } - if (has_overall_pixel_size()) { - out << "pixel_size = " << get_pixel_size() << "\n"; - } - - return out; -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::update_overall_attrib -// Access: Protected -// Description: Examines the primitive and all of its vertices and -// components to determine the amount of commonality of -// each attribute, and updates the bits in _overall to -// indicate this. If an overall attribute is found, the -// primitive attribute value is set to that common -// value. -//////////////////////////////////////////////////////////////////// -template -void BuilderPrimTempl:: -update_overall_attrib() { - int num_verts = get_num_verts(); - int num_components = get_num_components(); - - NType common_normal; - CType common_color; - float common_pixel_size = 0.0; - - bool has_common_normal = false; - bool has_common_color = false; - bool has_common_pixel_size = false; - - bool has_component_normal = false; - bool has_component_color = false; - bool has_component_pixel_size = false; - - bool has_vertex_normal = false; - bool has_vertex_color = false; - bool has_vertex_pixel_size = false; - - _texcoord_names.clear(); - - int i; - if (num_verts > 0) { - // Get the intersection of InternalNames that are defined on all - // vertices. - const Vertex &vtx = get_vertex(0); - TYPENAME Vertex::tc_const_iterator tci; - for (tci = vtx.tc_begin(); tci != vtx.tc_end(); ++tci) { - const InternalName *name = (*tci).first; - bool has_texcoord = true; - for (i = 1; i < num_verts && has_texcoord; i++) { - has_texcoord = get_vertex(i).has_texcoord(name); - } - if (has_texcoord) { - _texcoord_names.insert(name); - } - } - - if (get_vertex(0).has_normal()) { - common_normal = get_vertex(0).get_normal(); - has_common_normal = true; - has_vertex_normal = true; - - for (i = 1; i < num_verts; i++) { - Vertex &vertex = get_vertex(i); - has_vertex_normal = - (has_vertex_normal && vertex.has_normal()); - if (!vertex.has_normal() || - !(vertex.get_normal() == common_normal)) { - has_common_normal = false; - } - } - } - if (get_vertex(0).has_color()) { - common_color = get_vertex(0).get_color(); - has_common_color = true; - has_vertex_color = true; - - for (i = 1; i < num_verts; i++) { - Vertex &vertex = get_vertex(i); - has_vertex_color = - (has_vertex_color && vertex.has_color()); - if (!vertex.has_color() || - !(vertex.get_color() == common_color)) { - has_common_color = false; - } - } - } - if (get_vertex(0).has_pixel_size()) { - common_pixel_size = get_vertex(0).get_pixel_size(); - has_common_pixel_size = true; - has_vertex_pixel_size = true; - - for (i = 1; i < num_verts; i++) { - Vertex &vertex = get_vertex(i); - has_vertex_pixel_size = - (has_vertex_pixel_size && vertex.has_pixel_size()); - if (!vertex.has_pixel_size() || - !(vertex.get_pixel_size() == common_pixel_size)) { - has_common_pixel_size = false; - } - } - } - } - - if (num_components > 0) { - if (!has_vertex_normal && get_component(0).has_normal()) { - common_normal = get_component(0).get_normal(); - has_common_normal = true; - has_component_normal = true; - - for (i = 1; i < num_components; i++) { - DAttrib &component = get_component(i); - has_component_normal = - (has_component_normal && component.has_normal()); - if (!component.has_normal() || - !(component.get_normal() == common_normal)) { - has_common_normal = false; - } - } - } - if (!has_vertex_color && get_component(0).has_color()) { - common_color = get_component(0).get_color(); - has_common_color = true; - has_component_color = true; - - for (i = 1; i < num_components; i++) { - DAttrib &component = get_component(i); - has_component_color = - (has_component_color && component.has_color()); - if (!component.has_color() || - !(component.get_color() == common_color)) { - has_common_color = false; - } - } - } - if (!has_vertex_pixel_size && get_component(0).has_pixel_size()) { - common_pixel_size = get_component(0).get_pixel_size(); - has_common_pixel_size = true; - has_component_pixel_size = true; - - for (i = 1; i < num_components; i++) { - DAttrib &component = get_component(i); - has_component_pixel_size = - (has_component_pixel_size && component.has_pixel_size()); - if (!component.has_pixel_size() || - !(component.get_pixel_size() == common_pixel_size)) { - has_common_pixel_size = false; - } - } - } - } - - _overall = BAF_overall_updated; - - if (has_common_normal) { - // The primitive has one overall normal, or each of the vertices - // has the same normal. - _overall |= BAF_overall_normal; - DAttrib::set_normal(common_normal); - - } else if (has_component_normal) { - // Each component primitive has a different normal. - _overall |= BAF_component_normal; - - } else if (has_vertex_normal) { - // Each vertex has a different normal. - _overall |= BAF_vertex_normal; - - } else if (has_normal()) { - // Well, none of the above, but the prim itself has a normal. - _overall |= BAF_overall_normal; - } - - - if (has_common_color) { - // The primitive has one overall color, or each of the vertices - // has the same color. - _overall |= BAF_overall_color; - DAttrib::set_color(common_color); - - } else if (has_component_color) { - // Each component primitive has a different color. - _overall |= BAF_component_color; - - } else if (has_vertex_color) { - // Each vertex has a different color. - _overall |= BAF_vertex_color; - - } else if (has_color()) { - // None of the above, but the prim itself has a color. - _overall |= BAF_overall_color; - } - - if (has_common_pixel_size) { - // The primitive has one overall pixel size, or each of the vertices - // has the same pixel size. - _overall |= BAF_overall_pixel_size; - DAttrib::set_pixel_size(common_pixel_size); - - } else if (has_component_pixel_size) { - // Each component primitive has a different pixel size. - _overall |= BAF_component_pixel_size; - - } else if (has_vertex_pixel_size) { - // Each vertex has a different pixel size. - _overall |= BAF_vertex_pixel_size; - - } else if (has_pixel_size()) { - // The prim itself has a pixel size. - _overall |= BAF_overall_pixel_size; - } -} diff --git a/panda/src/builder/builderPrimTempl.h b/panda/src/builder/builderPrimTempl.h deleted file mode 100644 index 4b722e918f..0000000000 --- a/panda/src/builder/builderPrimTempl.h +++ /dev/null @@ -1,168 +0,0 @@ -// Filename: builderPrimTempl.h -// Created by: drose (11Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef BUILDERPRIMTEMPL_H -#define BUILDERPRIMTEMPL_H - -#include "pandabase.h" - -#include "builderVertex.h" -#include "builderAttrib.h" -#include "builderTypes.h" - -#include "pvector.h" - - -///////////////////////////////////////////////////////////////////// -// Class : BuilderPrimTempl -// Description : The main body of BuilderPrim and BuilderPrimI. This -// is a template class on vertex type, which must be -// either BuilderVertex or BuilderVertexI; these classes -// are themselves template classes on vertex type, -// texcoord type, color type, etc. -//////////////////////////////////////////////////////////////////// -template -class BuilderPrimTempl : public VTX::Attrib { -public: - typedef VTX Vertex; - typedef TYPENAME VTX::VType VType; - typedef TYPENAME VTX::NType NType; - typedef TYPENAME VTX::TType TType; - typedef TYPENAME VTX::CType CType; - typedef TYPENAME VTX::Attrib DAttrib; - typedef pset InternalNames; - typedef InternalNames::const_iterator tcn_const_iterator; - typedef InternalNames::size_type tcn_size_type; - - // This type is passed to fill_geom() for the texcoords. - typedef pmap TexCoordFill; - - INLINE BuilderPrimTempl(); - INLINE BuilderPrimTempl(const BuilderPrimTempl ©); - INLINE BuilderPrimTempl &operator = (const BuilderPrimTempl ©); - - void remove_doubled_verts(int closed); - bool is_valid() const; - - // has_normal() etc. is true if the primitive has a normal, as - // assigned by the user. This is unrelated to the vertices or - // component primitives that may or may not also have normals. - INLINE bool has_normal() const; - INLINE bool has_color() const; - INLINE bool has_pixel_size() const; - - // The following has_* functions are based on information derived - // from examining the vertices and the component primitives that - // make up this primitive. - - // has_overall_normal() etc. is true if the primitive has a single, - // overall normal shared among all vertices and all component - // primitives, or if its normal was assigned directly via - // set_normal(). For a polygon, this is the polygon normal. For a - // tristrip, this means all triangles share the same normal. - INLINE bool has_overall_normal() const; - INLINE bool has_overall_color() const; - INLINE bool has_overall_pixel_size() const; - - // has_vertex_normal() etc. is true if each vertex in the primitive - // has its own normal. It is not true if any vertex does not have a - // normal. - INLINE bool has_vertex_normal() const; - INLINE bool has_vertex_color() const; - INLINE bool has_vertex_pixel_size() const; - - // has_component_normal() can only be true for aggregate primitive - // types like tristrips. In that case, it is true if each - // individual component (e.g. each triangle of the tristrip) has its - // own normal. - INLINE bool has_component_normal() const; - INLINE bool has_component_color() const; - INLINE bool has_component_pixel_size() const; - - // In the above, only one of has_overall_normal(), - // has_vertex_normal(), and has_component_normal() can be true for a - // given primitive. For convenience, the following functions return - // true if any of the above is true: - - INLINE bool has_any_normal() const; - INLINE bool has_any_color() const; - INLINE bool has_any_pixel_size() const; - - // The following methods iterate through the list of texture - // coordinate names that all vertices in the primitive have in - // common. - INLINE tcn_const_iterator tcn_begin() const; - INLINE tcn_const_iterator tcn_end() const; - INLINE tcn_size_type tcn_size() const; - - INLINE BuilderPrimTempl &clear(); - INLINE BuilderPrimTempl &clear_vertices(); - - INLINE BuilderPrimTempl &set_attrib(const DAttrib &attrib); - - INLINE BuilderPrimType get_type() const; - INLINE BuilderPrimTempl &set_type(BuilderPrimType t); - - INLINE NType get_normal() const; - INLINE BuilderPrimTempl &set_normal(const NType &n); - - INLINE CType get_color() const; - INLINE BuilderPrimTempl &set_color(const CType &c); - - INLINE float get_pixel_size() const; - INLINE BuilderPrimTempl &set_pixel_size(float s); - - INLINE BuilderPrimTempl &add_vertex(const Vertex &v); - - INLINE int get_num_verts() const; - INLINE Vertex &get_vertex(int n); - INLINE const Vertex &get_vertex(int n) const; - - INLINE BuilderPrimTempl &add_component(const DAttrib &attrib); - INLINE int get_num_components() const; - INLINE DAttrib &get_component(int n); - INLINE const DAttrib &get_component(int n) const; - - INLINE bool operator < (const BuilderPrimTempl &other) const; - - ostream &output(ostream &out) const; - -protected: - INLINE int sort_value() const; - void update_overall_attrib(); - - typedef pvector Verts; - typedef pvector Components; - - Verts _verts; - Components _components; - InternalNames _texcoord_names; - BuilderPrimType _type; - int _overall; -}; - -template -INLINE ostream &operator << (ostream &out, - const BuilderPrimTempl &prim) { - return prim.output(out); -} - - -#include "builderPrimTempl.I" - -#endif diff --git a/panda/src/builder/builderProperties.cxx b/panda/src/builder/builderProperties.cxx deleted file mode 100644 index df06b1bc3c..0000000000 --- a/panda/src/builder/builderProperties.cxx +++ /dev/null @@ -1,128 +0,0 @@ -// Filename: builderProperties.cxx -// Created by: drose (17Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "builderProperties.h" - -//////////////////////////////////////////////////////////////////// -// Function: BuilderProperties::Ordering operator -// Access: Public -// Description: Defines an arbitrary ordering among different -// properties, and groups identical sets of properties -// together. This operator is used for the more -// important task of grouping BuilderBuckets together; -// see the comments for the similar function in -// builderBucket.cxx. -//////////////////////////////////////////////////////////////////// -bool BuilderProperties:: -operator < (const BuilderProperties &other) const { - int sv1 = sort_value(); - int sv2 = other.sort_value(); - - if (sv1 != sv2) { - return sv1 < sv2; - } - - if (_coplanar_threshold != other._coplanar_threshold) { - return _coplanar_threshold < other._coplanar_threshold; - } - - if (_max_tfan_angle != other._max_tfan_angle) { - return _max_tfan_angle < other._max_tfan_angle; - } - - if (_min_tfan_tris != other._min_tfan_tris) { - return _min_tfan_tris < other._min_tfan_tris; - } - - if (_show_normals) { - if (_normal_scale != other._normal_scale) { - return _normal_scale < other._normal_scale; - } - if (_normal_color != other._normal_color) { - return _normal_color < other._normal_color; - } - } - - return false; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::output -// Access: Public -// Description: Outputs the properties meaningfully. -//////////////////////////////////////////////////////////////////// -void BuilderProperties:: -output(ostream &out) const { - if (_mesh) { - out << "T-Mesh using Mesher\n"; - - if (_show_tstrips) { - out << "Color individual tristrips\n"; - } else if (_show_qsheets) { - out << "Color individual quadsheets\n"; - } else if (_show_quads) { - out << "Color individual quads\n"; - } - if (_retesselate_coplanar) { - out << "Retesselate coplanar triangles when needed; threshold = " - << _coplanar_threshold << "\n"; - } - } - if (_subdivide_polys) { - out << "Subdivide polygons into tris.\n"; - } - if (_consider_fans) { - out << "Look for possible triangle fans with max per-triangle angle of " - << _max_tfan_angle << " degrees.\n"; - if (_min_tfan_tris==0) { - out << "Do not create tfans"; - } else { - out << "Do not create tfans smaller than " << _min_tfan_tris << " tris"; - } - if (_unroll_fans) { - out << "; retesselate to tstrips.\n"; - } else { - out << ".\n"; - } - } -} - - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderPrimTempl::sort_value -// Access: Protected -// Description: Returns a number for grouping properties. This is -// used as a helper function to the ordering operator, -// above. It simply collects all the booleans together -// into a single number. -//////////////////////////////////////////////////////////////////// -int BuilderProperties:: -sort_value() const { - return - ((_mesh!=0) << 8) | - ((_show_tstrips!=0) << 7) | - ((_show_qsheets!=0) << 6) | - ((_show_quads!=0) << 5) | - ((_show_normals!=0) << 4) | - ((_retesselate_coplanar!=0) << 3) | - ((_unroll_fans!=0) << 2) | - ((_subdivide_polys!=0) << 1) | - ((_consider_fans!=0) << 0); -} diff --git a/panda/src/builder/builderProperties.h b/panda/src/builder/builderProperties.h deleted file mode 100644 index b67e6178dc..0000000000 --- a/panda/src/builder/builderProperties.h +++ /dev/null @@ -1,130 +0,0 @@ -// Filename: builderProperties.h -// Created by: drose (17Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// -#ifndef BUILDERPROPERTIES_H -#define BUILDERPROPERTIES_H - -#include "pandabase.h" - -#include "builderTypes.h" - -#ifndef HAVE_IOSTREAM -// We assume if your C++ library defines , then it also -// defines . -#include -#endif - - - -//////////////////////////////////////////////////////////////////// -// Class : BuilderProperties -// Description : A class which defines several parameters used to -// control specific behavior of the builder and mesher. -// BuilderBucket inherits from this class, so each of -// these properties may be set directly on a -// BuilderBucket to control the geometry made with just -// that bucket. There may in this way be several -// different sets of properties in effect at a given -// time. -// -// The initial values for these are set in the private -// constructor to BuilderBucket, at the bottom of -// builderBucket.cxx. -//////////////////////////////////////////////////////////////////// -class EXPCL_PANDAEGG BuilderProperties { -public: - bool operator < (const BuilderProperties &other) const; - void output(ostream &out) const; - - // If this is true, the mesher will be invoked to break up large - // polygons and build triangles into tristrips wherever possible. - bool _mesh; - - // If this is true, a pair of adjacent coplanar triangles that form - // a quad may be replaced with a pair of triangles forming the same - // quad but with the opposite diagonal, if this will help the - // building of tristrips. - bool _retesselate_coplanar; - - // If this is true, a coplanar fan may be treated as a single large - // polygon, and then subdivided into a single tristrip, instead of - // treating it as a fan. This can sometimes help form longer - // continuous tristrips. - bool _unroll_fans; - - // The following three flags serve to illustrate the mesher's - // effectiveness by coloring geometry. - - // This colors each created triangle strip with a random color. The - // first triangle of each strip is a little darker than the rest of - // the strip. - bool _show_tstrips; - - // This colors each rectangular group of quads--called a quadsheet - // by the mesher--with a random color. The mesher always creates - // linear tristrips across whatever quadsheets it can identify. - bool _show_qsheets; - - // This colors quads blue, and doesn't mesh them further. Since a - // large part of the mesher's algorithm is reassembling adjacent - // triangles into quads, it's sometimes helpful to see where it - // thinks the best quads lie. - bool _show_quads; - - // This shows normals created by creating little colored line - // segments to represent each normal. - bool _show_normals; - double _normal_scale; - BuilderC _normal_color; - - // If this is true, large polygons will be subdivided into - // triangles. Otherwise, they will remain large polygons. - bool _subdivide_polys; - - // This is the flatness tolerance below which two polygons will be - // considered coplanar. Making it larger makes it easier for the - // mesher to reverse triangle diagonals to achieve a good mesh, at - // the expense of precision of the surface. - double _coplanar_threshold; - - // True if fans are to be considered at all. Sometimes making fans - // is more trouble than they're worth, since they tend to get in the - // way of long tristrips. - bool _consider_fans; - - // The maximum average angle of the apex of each triangle involved - // in a fan. If the triangles are more loosely packed than this, - // don't consider putting them into a fan. - double _max_tfan_angle; - - // The minimum number of triangles to be involved in a fan. Setting - // this number lower results in more fans, probably at the expense - // of tristrips. However, setting it to zero means no tfans will be - // built (although fans may still be unrolled into tstrips if - // _unroll_fans is true). - int _min_tfan_tris; - -protected: - int sort_value() const; -}; - -INLINE ostream &operator << (ostream &out, const BuilderProperties &props) { - props.output(out); - return out; -} - -#endif diff --git a/panda/src/builder/builderTypes.cxx b/panda/src/builder/builderTypes.cxx deleted file mode 100644 index 343ee51fd4..0000000000 --- a/panda/src/builder/builderTypes.cxx +++ /dev/null @@ -1,108 +0,0 @@ -// Filename: builderTypes.cxx -// Created by: drose (11Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "builderTypes.h" -#include "notify.h" - -ostream &operator << (ostream &out, BuilderAttribFlags baf) { - const char *space = ""; - if (baf & BAF_coord) { - out << space << "coord"; - space = " "; - } - if (baf & BAF_normal) { - out << space << "normal"; - space = " "; - } - if (baf & BAF_color) { - out << space << "color"; - space = " "; - } - if (baf & BAF_pixel_size) { - out << space << "pixel_size"; - space = " "; - } - if (baf & BAF_overall_updated) { - out << space << "overall_updated"; - space = " "; - } - if (baf & BAF_overall_normal) { - out << space << "overall_normal"; - space = " "; - } - if (baf & BAF_overall_color) { - out << space << "overall_color"; - space = " "; - } - if (baf & BAF_overall_pixel_size) { - out << space << "overall_pixel_size"; - space = " "; - } - if (baf & BAF_vertex_normal) { - out << space << "vertex_normal"; - space = " "; - } - if (baf & BAF_vertex_color) { - out << space << "vertex_color"; - space = " "; - } - if (baf & BAF_vertex_pixel_size) { - out << space << "vertex_pixel_size"; - space = " "; - } - if (baf & BAF_component_normal) { - out << space << "component_normal"; - space = " "; - } - if (baf & BAF_component_color) { - out << space << "component_color"; - space = " "; - } - if (baf & BAF_component_pixel_size) { - out << space << "component_pixel_size"; - space = " "; - } - return out; -} - - -ostream &operator << (ostream &out, BuilderPrimType bpt) { - switch (bpt) { - case BPT_poly: - return out << "poly"; - case BPT_point: - return out << "point"; - case BPT_line: - return out << "line"; - case BPT_tri: - return out << "tri"; - case BPT_tristrip: - return out << "tristrip"; - case BPT_trifan: - return out << "trifan"; - case BPT_quad: - return out << "quad"; - case BPT_quadstrip: - return out << "quadstrip"; - case BPT_linestrip: - return out << "linestrip"; - } - nassertr(false, out); - return out << "(**invalid**)"; -} - diff --git a/panda/src/builder/builderTypes.h b/panda/src/builder/builderTypes.h deleted file mode 100644 index 7dc8f815ca..0000000000 --- a/panda/src/builder/builderTypes.h +++ /dev/null @@ -1,80 +0,0 @@ -// Filename: builderTypes.h -// Created by: drose (11Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// -#ifndef BUILDERTYPES_H -#define BUILDERTYPES_H - -#include "pandabase.h" - -#include "luse.h" -#include "pta_TexCoordf.h" -#include "pta_Vertexf.h" -#include "pta_Normalf.h" -#include "pta_Colorf.h" - -typedef TexCoordf BuilderTC; -typedef Vertexf BuilderV; -typedef Normalf BuilderN; -typedef Colorf BuilderC; - -typedef PTA_TexCoordf PTA_BuilderTC; -typedef PTA_Vertexf PTA_BuilderV; -typedef PTA_Normalf PTA_BuilderN; -typedef PTA_Colorf PTA_BuilderC; - -enum BuilderAttribFlags { - BAF_coord = 0x00001, - BAF_normal = 0x00002, - //BAF_texcoord = 0x00004, No longer used. - BAF_color = 0x00008, - BAF_pixel_size = 0x00010, - - BAF_overall_updated = 0x00100, - BAF_overall_normal = 0x00200, - BAF_overall_color = 0x00400, - BAF_overall_pixel_size = 0x00800, - - BAF_vertex_normal = 0x01000, - //BAF_vertex_texcoord = 0x02000, No longer used. - BAF_vertex_color = 0x04000, - BAF_vertex_pixel_size = 0x08000, - - BAF_component_normal = 0x10000, - BAF_component_color = 0x20000, - BAF_component_pixel_size = 0x04000, -}; - -ostream &operator << (ostream &out, BuilderAttribFlags baf); - -enum BuilderPrimType { - BPT_poly, - BPT_point, - BPT_line, - - // The following types are generated internally by the builder and - // mesher. Normally they will not be seen by the user. - BPT_tri, - BPT_tristrip, - BPT_trifan, - BPT_quad, - BPT_quadstrip, - BPT_linestrip, -}; - -ostream &operator << (ostream &out, BuilderPrimType bpt); - -#endif diff --git a/panda/src/builder/builderVertex.I b/panda/src/builder/builderVertex.I deleted file mode 100644 index 5fd7ab5f8f..0000000000 --- a/panda/src/builder/builderVertex.I +++ /dev/null @@ -1,278 +0,0 @@ -// Filename: builderVertex.I -// Created by: drose (18Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "notify.h" - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertex::set_coord_value -// Access: Public -// Description: Reassigns the vertex coordinate, without knowing -// whether the vertex is indexed or nonindexed. A -// nonindexed vertex will look up the index in the array -// and store the resulting value, while an indexed -// vertex will just store the index number (which -// assumes the array is the same one it's indexing on). -//////////////////////////////////////////////////////////////////// -INLINE void BuilderVertex:: -set_coord_value(const BuilderV *array, ushort index) { - set_coord(array[index]); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertex::set_normal_value -// Access: Public -// Description: Reassigns the vertex normal, without knowing whether -// the vertex is indexed or nonindexed. A nonindexed -// vertex will look up the index in the array and store -// the resulting value, while an indexed vertex will -// just store the index number (which assumes the array -// is the same one it's indexing on). -//////////////////////////////////////////////////////////////////// -INLINE void BuilderVertex:: -set_normal_value(const BuilderN *array, ushort index) { - set_normal(array[index]); -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertex::set_texcoord_value -// Access: Public -// Description: Reassigns the vertex texture coordinate, without -// knowing whether the vertex is indexed or nonindexed. -// A nonindexed vertex will look up the index in the -// array and store the resulting value, while an indexed -// vertex will just store the index number (which -// assumes the array is the same one it's indexing on). -//////////////////////////////////////////////////////////////////// -INLINE void BuilderVertex:: -set_texcoord_value(const InternalName *name, const BuilderTC *array, ushort index) { - set_texcoord(name, array[index]); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertex::set_color_value -// Access: Public -// Description: Reassigns the vertex color, without knowing whether -// the vertex is indexed or nonindexed. A nonindexed -// vertex will look up the index in the array and store -// the resulting value, while an indexed vertex will -// just store the index number (which assumes the array -// is the same one it's indexing on). -//////////////////////////////////////////////////////////////////// -INLINE void BuilderVertex:: -set_color_value(const BuilderC *array, ushort index) { - set_color(array[index]); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertex::get_coord_value -// Access: Public -// Description: Returns the actual coordinate value of the vertex, -// whether it is indexed or nonindexed. Normally, the -// value returned by get_coord(), which will be either a -// BuilderV or a ushort, is sufficient, but there are -// occasional times when it is necessary to get the -// actual location in space of the vertex position (for -// instance, to subdivide a concave polygon). -// -// This function returns the actual coordinate value. -// For a nonindexed vertex, its return value is the same -// as get_coord(); for an indexed vertex, it looks up -// the vertex's index in the bucket's coord array, and -// returns that value. -// -// Note that this makes some perhaps unwarranted -// assumptions about indexed geometry; specifically, -// that its value is valid at creation time, and that it -// won't change too drastically during runtime. -//////////////////////////////////////////////////////////////////// -INLINE BuilderV BuilderVertex:: -get_coord_value(const BuilderBucket &) const { - return get_coord(); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertex::get_normal_value -// Access: Public -// Description: Returns the actual normal value of the vertex, -// whether it is indexed or nonindexed. See -// get_coord_value(). -//////////////////////////////////////////////////////////////////// -INLINE BuilderN BuilderVertex:: -get_normal_value(const BuilderBucket &) const { - return get_normal(); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertex::get_texcoord_value -// Access: Public -// Description: Returns the actual texture coordinate value of the -// vertex, whether it is indexed or nonindexed. See -// get_coord_value(). -//////////////////////////////////////////////////////////////////// -INLINE BuilderTC BuilderVertex:: -get_texcoord_value(const InternalName *name, const BuilderBucket &) const { - return get_texcoord(name); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertex::get_color_value -// Access: Public -// Description: Returns the actual color value of the vertex, -// whether it is indexed or nonindexed. See -// get_coord_value(). -//////////////////////////////////////////////////////////////////// -INLINE BuilderC BuilderVertex:: -get_color_value(const BuilderBucket &) const { - return get_color(); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertex::set_coord_value -// Access: Public -// Description: Reassigns the vertex coordinate, without knowing -// whether the vertex is indexed or nonindexed. A -// nonindexed vertex will look up the index in the array -// and store the resulting value, while an indexed -// vertex will just store the index number (which -// assumes the array is the same one it's indexing on). -//////////////////////////////////////////////////////////////////// -INLINE void BuilderVertexI:: -set_coord_value(const BuilderV *, ushort index) { - set_coord(index); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertex::set_normal_value -// Access: Public -// Description: Reassigns the vertex normal, without knowing whether -// the vertex is indexed or nonindexed. A nonindexed -// vertex will look up the index in the array and store -// the resulting value, while an indexed vertex will -// just store the index number (which assumes the array -// is the same one it's indexing on). -//////////////////////////////////////////////////////////////////// -INLINE void BuilderVertexI:: -set_normal_value(const BuilderN *, ushort index) { - set_normal(index); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertex::set_texcoord_value -// Access: Public -// Description: Reassigns the vertex texture coordinate, without -// knowing whether the vertex is indexed or nonindexed. -// A nonindexed vertex will look up the index in the -// array and store the resulting value, while an indexed -// vertex will just store the index number (which -// assumes the array is the same one it's indexing on). -//////////////////////////////////////////////////////////////////// -INLINE void BuilderVertexI:: -set_texcoord_value(const InternalName *name,const BuilderTC *, ushort index) { - set_texcoord(name, index); -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertex::set_color_value -// Access: Public -// Description: Reassigns the vertex color, without knowing whether -// the vertex is indexed or nonindexed. A nonindexed -// vertex will look up the index in the array and store -// the resulting value, while an indexed vertex will -// just store the index number (which assumes the array -// is the same one it's indexing on). -//////////////////////////////////////////////////////////////////// -INLINE void BuilderVertexI:: -set_color_value(const BuilderC *, ushort index) { - set_color(index); -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertex::get_coord_value -// Access: Public -// Description: Returns the actual coordinate value of the vertex, -// whether it is indexed or nonindexed. Normally, the -// value returned by get_coord(), which will be either a -// BuilderV or a ushort, is sufficient, but there are -// occasional times when it is necessary to get the -// actual location in space of the vertex position (for -// instance, to subdivide a concave polygon). -// -// This function returns the actual coordinate value. -// For a nonindexed vertex, its return value is the same -// as get_coord(); for an indexed vertex, it looks up -// the vertex's index in the bucket's coord array, and -// returns that value. -// -// Note that this makes some perhaps unwarranted -// assumptions about indexed geometry; specifically, -// that its value is valid at creation time, and that it -// won't change too drastically during runtime. -//////////////////////////////////////////////////////////////////// -INLINE BuilderV BuilderVertexI:: -get_coord_value(const BuilderBucket &bucket) const { - nassertr(bucket.get_coords() != (Vertexf *)NULL, BuilderV()); - return bucket.get_coords()[get_coord()]; -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertex::get_normal_value -// Access: Public -// Description: Returns the actual normal value of the vertex, -// whether it is indexed or nonindexed. See -// get_coord_value(). -//////////////////////////////////////////////////////////////////// -INLINE BuilderN BuilderVertexI:: -get_normal_value(const BuilderBucket &bucket) const { - nassertr(bucket.get_normals() != (Normalf *)NULL, BuilderN()); - return bucket.get_normals()[get_normal()]; -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertex::get_texcoord_value -// Access: Public -// Description: Returns the actual texture coordinate value of the -// vertex, whether it is indexed or nonindexed. See -// get_coord_value(). -//////////////////////////////////////////////////////////////////// -INLINE BuilderTC BuilderVertexI:: -get_texcoord_value(const InternalName *name, const BuilderBucket &bucket) const { - nassertr(bucket.get_texcoords(name) != (TexCoordf *)NULL, BuilderTC()); - return bucket.get_texcoords(name)[get_texcoord(name)]; -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertex::get_color_value -// Access: Public -// Description: Returns the actual color value of the vertex, -// whether it is indexed or nonindexed. See -// get_coord_value(). -//////////////////////////////////////////////////////////////////// -INLINE BuilderC BuilderVertexI:: -get_color_value(const BuilderBucket &bucket) const { - nassertr(bucket.get_colors() != (Colorf *)NULL, BuilderC()); - return bucket.get_colors()[get_color()]; -} diff --git a/panda/src/builder/builderVertex.cxx b/panda/src/builder/builderVertex.cxx deleted file mode 100644 index e4677fd101..0000000000 --- a/panda/src/builder/builderVertex.cxx +++ /dev/null @@ -1,24 +0,0 @@ -// Filename: builderVertex.cxx -// Created by: drose (11May00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "builderAttrib.h" -#include "builderVertex.h" -// Tell GCC that we'll take care of the instantiation explicitly here. -#ifdef __GNUC__ -#pragma implementation -#endif diff --git a/panda/src/builder/builderVertex.h b/panda/src/builder/builderVertex.h deleted file mode 100644 index 7c3d3673da..0000000000 --- a/panda/src/builder/builderVertex.h +++ /dev/null @@ -1,132 +0,0 @@ -// Filename: builderVertex.h -// Created by: drose (18Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef BUILDERVERTEX_H -#define BUILDERVERTEX_H - -//////////////////////////////////////////////////////////////////// -// -// BuilderVertex, BuilderVertexI -// -// The basic class for passing vertex values to the builder. See the -// comments at the beginning of builder.h and builderPrim.h. -// -// Like BuilderPrim, the BuilderVertex and BuilderVertexI classes are -// actually two different instantiations of the same template class, -// BuilderVertexTempl. The difference is in the types of the -// attribute values for the four kinds of attributes: vertices -// (coords), normals, texture coordinates, and colors. BuilderVertex -// specifies Coordf, Normalf, TexCoordf, and Colorf for each of these -// (actually, it's BuilderV, BuilderN, BuilderTC, and BuilderC, which -// are simply wrappers around the above types), while BuilderVertexI -// specifies ushort for all of them. -// -// It is this templating that drives the whole indexed/nonindexed -// support in this package and in the mesher. The two kinds of -// BuilderVertex are designed to present largely the same interface, -// regardless of whether its component values are actual vector -// values, or simply index numbers. Lots of things, therefore, can -// template on the BuilderPrim type (which in turn termplates on the -// BuilderVertex type) and thus easily support both indexed and -// nonindexed geometry. -// -//////////////////////////////////////////////////////////////////// - -#include "pandabase.h" - -#include "builderAttrib.h" -#include "builderVertexTempl.h" -#include "builderBucket.h" - -// We need to define this temporary macro so we can pass a parameter -// containing a comma through the macro. -#define BUILDERVERTEXTEMPL_BUILDERV BuilderVertexTempl -EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEGG, EXPTP_PANDAEGG, BUILDERVERTEXTEMPL_BUILDERV); -#define BUILDERVERTEXTEMPL_USHORT BuilderVertexTempl -EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEGG, EXPTP_PANDAEGG, BUILDERVERTEXTEMPL_USHORT); - -///////////////////////////////////////////////////////////////////// -// Class : BuilderVertex -// Description : The basic class for passing nonindexed vertices to -// the builder. See the comments at the the head of -// this file, and in builder.h. -// -// Look in builderVertexTempl.h and builderAttribTempl.h -// for most of the interface to BuilderVertex. -//////////////////////////////////////////////////////////////////// -class EXPCL_PANDAEGG BuilderVertex - : public BuilderVertexTempl { -public: - typedef BuilderAttrib Attrib; - - BuilderVertex() {} - BuilderVertex(const BuilderV &c) : - BuilderVertexTempl(c) {} - - INLINE void set_coord_value(const BuilderV *array, ushort index); - INLINE void set_normal_value(const BuilderN *array, ushort index); - INLINE void set_texcoord_value(const InternalName *name, const BuilderTC *array, ushort index); - INLINE void set_color_value(const BuilderC *array, ushort index); - - INLINE BuilderV get_coord_value(const BuilderBucket &bucket) const; - INLINE BuilderN get_normal_value(const BuilderBucket &bucket) const; - INLINE BuilderTC get_texcoord_value(const InternalName *name, const BuilderBucket &bucket) const; - INLINE BuilderC get_color_value(const BuilderBucket &bucket) const; - -}; - - -///////////////////////////////////////////////////////////////////// -// Class : BuilderVertexI -// Description : The basic class for passing indexed vertices to the -// builder. See the comments at the the head of this -// file, and in builder.h. -// -// Look in builderVertexTempl.h and builderAttribTempl.h -// for most of the interface to BuilderVertex. -//////////////////////////////////////////////////////////////////// -class EXPCL_PANDAEGG BuilderVertexI - : public BuilderVertexTempl { -public: - typedef BuilderAttribI Attrib; - - BuilderVertexI() {} - BuilderVertexI(ushort c) : - BuilderVertexTempl(c) {} - - INLINE void set_coord_value(const BuilderV *array, ushort index); - INLINE void set_normal_value(const BuilderN *array, ushort index); - INLINE void set_texcoord_value(const InternalName *name, const BuilderTC *array, ushort index); - INLINE void set_color_value(const BuilderC *array, ushort index); - - INLINE BuilderV get_coord_value(const BuilderBucket &bucket) const; - INLINE BuilderN get_normal_value(const BuilderBucket &bucket) const; - INLINE BuilderTC get_texcoord_value(const InternalName *name, const BuilderBucket &bucket) const; - INLINE BuilderC get_color_value(const BuilderBucket &bucket) const; -}; - -#include "builderVertex.I" - -// Tell GCC that we'll take care of the instantiation explicitly here. -#ifdef __GNUC__ -#pragma interface -#endif - -#endif - - diff --git a/panda/src/builder/builderVertexTempl.I b/panda/src/builder/builderVertexTempl.I deleted file mode 100644 index 8ef98e9463..0000000000 --- a/panda/src/builder/builderVertexTempl.I +++ /dev/null @@ -1,434 +0,0 @@ -// Filename: builderVertexTempl.I -// Created by: drose (11Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertexTempl::Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderVertexTempl:: -BuilderVertexTempl() { -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertexTempl::Constructor (with VType) -// Access: Public -// Description: Initializes the vertex coordinate with an initial -// value. A handy constructor. -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderVertexTempl:: -BuilderVertexTempl(const VType &c) { - set_coord(c); -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertexTempl::Copy constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderVertexTempl:: -BuilderVertexTempl(const BuilderVertexTempl ©) { - (*this) = copy; -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertexTempl::Copy assignment operator -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderVertexTempl &BuilderVertexTempl:: -operator = (const BuilderVertexTempl ©) { - BuilderAttribTempl::operator = (copy); - this->_coord = copy._coord; - this->_texcoords = copy._texcoords; - this->_pixel_size = copy._pixel_size; - - return *this; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertexTempl::is_valid -// Access: Public -// Description: Returns true if the vertex is valid, i.e. if it has a -// vertex coordinate. -//////////////////////////////////////////////////////////////////// -template -INLINE bool BuilderVertexTempl:: -is_valid() const { - return has_coord(); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertexTempl::clear -// Access: Public -// Description: Resets the vertex to its initial, empty state. -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderVertexTempl &BuilderVertexTempl:: -clear() { - BuilderAttribTempl::clear(); - return *this; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertexTempl::has_coord -// Access: Public -// Description: Returns true if the vertex has a vertex coordinate. -//////////////////////////////////////////////////////////////////// -template -INLINE bool BuilderVertexTempl:: -has_coord() const { - return (this->_flags) & BAF_coord; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertexTempl::get_coord -// Access: Public -// Description: Returns the vertex's coordinate. It is an error to -// call this without first verifying that has_coord() is -// true. -//////////////////////////////////////////////////////////////////// -template -INLINE TYPENAME BuilderVertexTempl::VType BuilderVertexTempl:: -get_coord() const { - nassertr(has_coord(), _coord); - return _coord; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertexTempl::set_coord -// Access: Public -// Description: Resets the vertex's coordinate. -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderVertexTempl &BuilderVertexTempl:: -set_coord(const VType &c) { - this->_flags |= BAF_coord; - this->_coord = c; - return *this; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertexTempl::set_normal -// Access: Public -// Description: Resets the vertex's normal. This is overridden from -// BuilderAttrib just so we can typecast the return -// value to BuilderVertex. The other functions, -// has_normal() and get_normal(), are inherited -// untouched from BuilderAttrib. -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderVertexTempl &BuilderVertexTempl:: -set_normal(const NType &n) { - BuilderAttribTempl::set_normal(n); - return *this; -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertexTempl::clear_normal -// Access: Public -// Description: Removes the vertex's normal. -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderVertexTempl &BuilderVertexTempl:: -clear_normal() { - BuilderAttribTempl::clear_normal(); - return *this; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertexTempl::has_texcoord -// Access: Public -// Description: Returns true if the vertex has a texture coordinate. -//////////////////////////////////////////////////////////////////// -template -INLINE bool BuilderVertexTempl:: -has_texcoord(const InternalName *name) const { - TYPENAME TexCoords::const_iterator ti = _texcoords.find(name); - return (ti != _texcoords.end()); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertexTempl::get_texcoord -// Access: Public -// Description: Returns the vertex's texture coordinate. It is an -// error to call this without first verifying that -// has_texcoord() is true. -//////////////////////////////////////////////////////////////////// -template -INLINE TYPENAME BuilderVertexTempl::TType BuilderVertexTempl:: -get_texcoord(const InternalName *name) const { - TYPENAME TexCoords::const_iterator ti = _texcoords.find(name); - nassertr(ti != _texcoords.end(), (*ti).second); - return (*ti).second; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertexTempl::set_texcoord -// Access: Public -// Description: Resets the vertex's texture coordinate. -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderVertexTempl &BuilderVertexTempl:: -set_texcoord(const InternalName *name, const TType &t) { - _texcoords[name] = t; - return *this; -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertexTempl::clear_texcoord -// Access: Public -// Description: Removes the vertex's texcoord. -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderVertexTempl &BuilderVertexTempl:: -clear_texcoord(const InternalName *name) { - _texcoords.erase(name); - return *this; -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertexTempl::tc_begin -// Access: Public -// Description: Returns an iterator that can be used to walk through -// the set of TexCoord names and their definitions. -//////////////////////////////////////////////////////////////////// -template -INLINE TYPENAME BuilderVertexTempl::tc_const_iterator BuilderVertexTempl:: -tc_begin() const { - return _texcoords.begin(); -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertexTempl::tc_end -// Access: Public -// Description: Returns an iterator that can be used to walk through -// the set of TexCoord names and their definitions. -//////////////////////////////////////////////////////////////////// -template -INLINE TYPENAME BuilderVertexTempl::tc_const_iterator BuilderVertexTempl:: -tc_end() const { - return _texcoords.end(); -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertexTempl::tc_size -// Access: Public -// Description: Returns the number of TexCoord definitions. -//////////////////////////////////////////////////////////////////// -template -INLINE TYPENAME BuilderVertexTempl::tc_size_type BuilderVertexTempl:: -tc_size() const { - return _texcoords.size(); -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertexTempl::set_color -// Access: Public -// Description: Resets the vertex's color. This is overridden from -// BuilderAttrib just so we can typecast the return -// value to BuilderVertex. The other functions, -// has_color() and get_color(), are inherited -// untouched from BuilderAttrib. -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderVertexTempl &BuilderVertexTempl:: -set_color(const CType &c) { - BuilderAttribTempl::set_color(c); - return *this; -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertexTempl::clear_color -// Access: Public -// Description: Removes the vertex's color. -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderVertexTempl &BuilderVertexTempl:: -clear_color() { - BuilderAttribTempl::clear_color(); - return *this; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertexTempl::set_pixel_size -// Access: Public -// Description: Resets the vertex's pixel_size. This is overridden -// from BuilderAttrib just so we can typecast the return -// value to BuilderVertex. The other functions, -// has_pixel_size() and get_pixel_size(), are inherited -// untouched from BuilderAttrib. -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderVertexTempl &BuilderVertexTempl:: -set_pixel_size(float s) { - BuilderAttribTempl::set_pixel_size(s); - return *this; -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertexTempl::clear_pixel_size -// Access: Public -// Description: Removes the vertex's pixel_size. -//////////////////////////////////////////////////////////////////// -template -INLINE BuilderVertexTempl &BuilderVertexTempl:: -clear_pixel_size() { - BuilderAttribTempl::clear_pixel_size(); - return *this; -} - - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertexTempl::operator == -// Access: Public -// Description: Assigns an ordering to the vertices. This is used by -// the Mesher to group identical vertices. This assumes -// that all vertices in the locus of consideration will -// share the same state: with or without normals, -// texcoords, etc. -//////////////////////////////////////////////////////////////////// -template -INLINE bool BuilderVertexTempl:: -operator == (const BuilderVertexTempl &other) const { - return compare_to(other) == 0; -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertexTempl::operator != -// Access: Public -// Description: Assigns an ordering to the vertices. This is used by -// the Mesher to group identical vertices. This assumes -// that all vertices in the locus of consideration will -// share the same state: with or without normals, -// texcoords, etc. -//////////////////////////////////////////////////////////////////// -template -INLINE bool BuilderVertexTempl:: -operator != (const BuilderVertexTempl &other) const { - return !operator == (other); -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertexTempl::operator < -// Access: Public -// Description: Assigns an ordering to the vertices. This is used by -// the Mesher to group identical vertices. This assumes -// that all vertices to be meshed together must share -// the same state: with or without normals, texcoords, -// etc. -//////////////////////////////////////////////////////////////////// -template -INLINE bool BuilderVertexTempl:: -operator < (const BuilderVertexTempl &other) const { - return compare_to(other) < 0; -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertexTempl::compare_to -// Access: Public -// Description: Returns a number less than zero if this vertex sorts -// before the indicated vertex, greater than zero if it -// sorts after, and zero if the vertices are equivalent. -//////////////////////////////////////////////////////////////////// -template -int BuilderVertexTempl:: -compare_to(const BuilderVertexTempl &other) const { - if (has_coord()) { - int coord_compare = builder_compare(_coord, other._coord); - if (coord_compare != 0) { - return coord_compare; - } - } - - TYPENAME TexCoords::const_iterator ai, bi; - ai = _texcoords.begin(); - bi = other._texcoords.begin(); - while (ai != _texcoords.end() && bi != other._texcoords.end()) { - if ((*ai).first < (*bi).first) { - return -1; - } else if ((*bi).first < (*ai).first) { - return 1; - } else { - int texcoord_compare = builder_compare((*ai).second, (*bi).second); - if (texcoord_compare != 0) { - return texcoord_compare; - } - } - ++ai; - ++bi; - } - if (bi != other._texcoords.end()) { - return -1; - } - if (ai != _texcoords.end()) { - return 1; - } - - return BuilderAttribTempl::compare_to(other); -} - -//////////////////////////////////////////////////////////////////// -// Function: BuilderVertexTempl::output -// Access: Public -// Description: Formats the vertex for output in some sensible way. -//////////////////////////////////////////////////////////////////// -template -ostream &BuilderVertexTempl:: -output(ostream &out) const { - if (this!=NULL) { - if (this->has_coord()) { - out << this->get_coord(); - } - - if (this->has_normal()) { - out << " normal " << this->get_normal(); - } - - if (this->has_color()) { - out << " color " << this->get_color(); - } - - TYPENAME TexCoords::const_iterator ti; - for (ti = _texcoords.begin(); ti != _texcoords.end(); ++ti) { - const InternalName *name = (*ti).first; - out << " texcoord \"" << name->get_name() << "\" " << (*ti).second; - } - - if (this->has_pixel_size()) { - out << " pixel_size " << this->get_pixel_size(); - } - } - return out; -} diff --git a/panda/src/builder/builderVertexTempl.h b/panda/src/builder/builderVertexTempl.h deleted file mode 100644 index 9e980d96c9..0000000000 --- a/panda/src/builder/builderVertexTempl.h +++ /dev/null @@ -1,102 +0,0 @@ -// Filename: builderVertexTempl.h -// Created by: drose (09Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef BUILDERVERTEXTEMPL_H -#define BUILDERVERTEXTEMPL_H - -#include "pandabase.h" - -#include "builderTypes.h" -#include "builderAttribTempl.h" -#include "builder_compare.h" -#include "internalName.h" -#include "pointerTo.h" - -#include "notify.h" -#include "pvector.h" - - -///////////////////////////////////////////////////////////////////// -// Class : BuilderVertexTempl -// Description : The main body of BuilderVertex and BuilderVertexI. -// This is a template class on each of the four -// attribute types: vertex coordinates, normal, texture -// coordinates, and color. See builderVertex.h. -//////////////////////////////////////////////////////////////////// -template -class BuilderVertexTempl : public BuilderAttribTempl { -public: - typedef VT VType; - typedef NT NType; - typedef TT TType; - typedef CT CType; - typedef pmap TexCoords; - typedef TYPENAME TexCoords::const_iterator tc_const_iterator; - typedef TYPENAME TexCoords::size_type tc_size_type; - - INLINE BuilderVertexTempl(); - INLINE BuilderVertexTempl(const VType &c); - INLINE BuilderVertexTempl(const BuilderVertexTempl ©); - INLINE BuilderVertexTempl &operator = (const BuilderVertexTempl ©); - - INLINE bool is_valid() const; - INLINE BuilderVertexTempl &clear(); - - INLINE bool has_coord() const; - INLINE VType get_coord() const; - INLINE BuilderVertexTempl &set_coord(const VType &c); - - INLINE BuilderVertexTempl &set_normal(const NType &c); - INLINE BuilderVertexTempl &clear_normal(); - - INLINE bool has_texcoord(const InternalName *name) const; - INLINE TType get_texcoord(const InternalName *name) const; - INLINE BuilderVertexTempl &set_texcoord(const InternalName *name, const TType &t); - INLINE BuilderVertexTempl &clear_texcoord(const InternalName *name); - INLINE tc_const_iterator tc_begin() const; - INLINE tc_const_iterator tc_end() const; - INLINE tc_size_type tc_size() const; - - INLINE BuilderVertexTempl &set_color(const CType &c); - INLINE BuilderVertexTempl &clear_color(); - - INLINE BuilderVertexTempl &set_pixel_size(float s); - INLINE BuilderVertexTempl &clear_pixel_size(); - - INLINE bool operator == (const BuilderVertexTempl &other) const; - INLINE bool operator != (const BuilderVertexTempl &other) const; - INLINE bool operator < (const BuilderVertexTempl &other) const; - int compare_to(const BuilderVertexTempl &other) const; - - ostream &output(ostream &out) const; - -protected: - VType _coord; - TexCoords _texcoords; -}; - -template -INLINE ostream &operator << (ostream &out, - const BuilderVertexTempl &vertex) { - return vertex.output(out); -} - - -#include "builderVertexTempl.I" - -#endif diff --git a/panda/src/builder/builder_compare.I b/panda/src/builder/builder_compare.I deleted file mode 100644 index 529988ca4c..0000000000 --- a/panda/src/builder/builder_compare.I +++ /dev/null @@ -1,37 +0,0 @@ -// Filename: builder_compare.I -// Created by: drose (31Jul01) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -INLINE int -builder_compare(const LVecBase2f &a, const LVecBase2f &b) { - return a.compare_to(b); -} - -INLINE int -builder_compare(const LVecBase3f &a, const LVecBase3f &b) { - return a.compare_to(b); -} - -INLINE int -builder_compare(const LVecBase4f &a, const LVecBase4f &b) { - return a.compare_to(b); -} - -INLINE int -builder_compare(ushort a, ushort b) { - return (int)a - (int)b; -} diff --git a/panda/src/builder/builder_compare.h b/panda/src/builder/builder_compare.h deleted file mode 100644 index bc1ccf9b8d..0000000000 --- a/panda/src/builder/builder_compare.h +++ /dev/null @@ -1,40 +0,0 @@ -// Filename: builder_compare.h -// Created by: drose (31Jul01) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef BUILDERCOMPARE_H -#define BUILDERCOMPARE_H - -#include "pandabase.h" - -#include "luse.h" - - -// This file defines some trivial functions that return strcmp-style -// comparisonresults for the major types of our vertices. This allows -// us to write type-independent template code to compare vertex -// values for equivalence or order relationships. - -INLINE int builder_compare(const LVecBase2f &a, const LVecBase2f &b); -INLINE int builder_compare(const LVecBase3f &a, const LVecBase3f &b); -INLINE int builder_compare(const LVecBase4f &a, const LVecBase4f &b); -INLINE int builder_compare(ushort a, ushort b); - -#include "builder_compare.I" - -#endif - diff --git a/panda/src/builder/builder_composite1.cxx b/panda/src/builder/builder_composite1.cxx deleted file mode 100644 index 08bbd82946..0000000000 --- a/panda/src/builder/builder_composite1.cxx +++ /dev/null @@ -1,13 +0,0 @@ - -#include "config_builder.cxx" -#include "builderTypes.cxx" -#include "builderMisc.cxx" -#include "builder.cxx" -#include "builderAttrib.cxx" -#include "builderBucket.cxx" -#include "builderBucketNode.cxx" - - - - - diff --git a/panda/src/builder/builder_composite2.cxx b/panda/src/builder/builder_composite2.cxx deleted file mode 100644 index c8245f4970..0000000000 --- a/panda/src/builder/builder_composite2.cxx +++ /dev/null @@ -1,6 +0,0 @@ - -#include "builderNormalVisualizer.cxx" -#include "builderPrim.cxx" -#include "builderProperties.cxx" -#include "builderVertex.cxx" -#include "mesher.cxx" diff --git a/panda/src/builder/builder_headers.h b/panda/src/builder/builder_headers.h deleted file mode 100644 index ddc9e3ccda..0000000000 --- a/panda/src/builder/builder_headers.h +++ /dev/null @@ -1,51 +0,0 @@ -// Filename: xxx_headers.h -// Created by: georges (30May01) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "geom.h" -#include "geomNode.h" -#include "plist.h" -#include "luse.h" -#include "pmap.h" -#include -#include "namedNode.h" -#include "notify.h" -#include "pandabase.h" -#include "pta_Colorf.h" -#include "pta_Normalf.h" -#include "pta_TexCoordf.h" -#include "pta_Vertexf.h" -#include "pset.h" -#include -#include "pvector.h" - -#include "builderAttrib.h" -#include "builderAttribTempl.h" -#include "builderBucket.h" -#include "builderFuncs.h" -#include "builderMisc.h" -#include "builderPrim.h" -#include "builderProperties.h" -#include "builderTypes.h" -#include "builderVertex.h" -#include "mesher.h" -#include "mesherConfig.h" -#include "mesherEdge.h" -#include "mesherStrip.h" - -#pragma hdrstop - diff --git a/panda/src/builder/config_builder.cxx b/panda/src/builder/config_builder.cxx deleted file mode 100644 index 7e813d24b4..0000000000 --- a/panda/src/builder/config_builder.cxx +++ /dev/null @@ -1,44 +0,0 @@ -// Filename: config_builder.cxx -// Created by: drose (29Feb00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "config_builder.h" -#include "dconfig.h" - -Configure(config_builder); -NotifyCategoryDef(builder, ""); - -ConfigureFn(config_builder) { - init_libbuilder(); -} - -//////////////////////////////////////////////////////////////////// -// Function: init_libbuilder -// Description: Initializes the library. This must be called at -// least once before any of the functions or classes in -// this library can be used. Normally it will be -// called by the static initializers and need not be -// called explicitly, but special cases exist. -//////////////////////////////////////////////////////////////////// -void -init_libbuilder() { - static bool initialized = false; - if (initialized) { - return; - } - initialized = true; -} diff --git a/panda/src/builder/config_builder.h b/panda/src/builder/config_builder.h deleted file mode 100644 index ab1eaacf69..0000000000 --- a/panda/src/builder/config_builder.h +++ /dev/null @@ -1,29 +0,0 @@ -// Filename: config_builder.h -// Created by: drose (29Feb00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef CONFIG_BUILDER_H -#define CONFIG_BUILDER_H - -#include "pandabase.h" -#include "notifyCategoryProxy.h" - -NotifyCategoryDecl(builder, EXPCL_PANDAEGG, EXPTP_PANDAEGG); - -extern EXPCL_PANDAEGG void init_libbuilder(); - -#endif diff --git a/panda/src/builder/mesher.cxx b/panda/src/builder/mesher.cxx deleted file mode 100644 index 1a8348692a..0000000000 --- a/panda/src/builder/mesher.cxx +++ /dev/null @@ -1,25 +0,0 @@ -// Filename: mesher.cxx -// Created by: drose (11May00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - - -#include "mesher.h" - -// Tell GCC that we'll take care of the instantiation explicitly here. -#ifdef __GNUC__ -#pragma implementation -#endif diff --git a/panda/src/builder/mesher.h b/panda/src/builder/mesher.h deleted file mode 100644 index 8c574afda7..0000000000 --- a/panda/src/builder/mesher.h +++ /dev/null @@ -1,60 +0,0 @@ -// Filename: mesher.h -// Created by: drose (17Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// -#ifndef MESHER_H -#define MESHER_H - -#include "pandabase.h" - -#include "mesherConfig.h" -#include "mesherFanMaker.h" -#include "mesherEdge.h" -#include "mesherStrip.h" -#include "mesherTempl.h" -#include "builderPrim.h" - - -#ifdef SUPPORT_FANS -EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEGG, EXPTP_PANDAEGG, MesherFanMaker); -EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEGG, EXPTP_PANDAEGG, MesherFanMaker); -#endif - -EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEGG, EXPTP_PANDAEGG, MesherEdge); -EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEGG, EXPTP_PANDAEGG, MesherStrip); -EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEGG, EXPTP_PANDAEGG, MesherTempl); - -EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEGG, EXPTP_PANDAEGG, MesherEdge); -EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEGG, EXPTP_PANDAEGG, MesherStrip); -EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEGG, EXPTP_PANDAEGG, MesherTempl); - -class EXPCL_PANDAEGG Mesher : public MesherTempl { -public: - Mesher(BuilderBucket *bucket) : MesherTempl(bucket) {} -}; - -class EXPCL_PANDAEGG MesherI : public MesherTempl { -public: - MesherI(BuilderBucket *bucket) : MesherTempl(bucket) {} -}; - -// Tell GCC that we'll take care of the instantiation explicitly here. -#ifdef __GNUC__ -#pragma interface -#endif - -#endif - diff --git a/panda/src/builder/mesherConfig.h b/panda/src/builder/mesherConfig.h deleted file mode 100644 index 5cf210b000..0000000000 --- a/panda/src/builder/mesherConfig.h +++ /dev/null @@ -1,37 +0,0 @@ -// Filename: mesherConfig.h -// Created by: drose (27Oct00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// -#ifndef MESHERCONFIG_H -#define MESHERCONFIG_H - -#include "pandabase.h" - -// This is just a file to declare a definition or two global to the -// mesher compilation. - -// Define this to support making triangle fans in addition to triangle -// strips. Fans may improve the grouping in certain models, although -// in most real cases the don't seem to help very much (and can -// actually hurt, by bitching the heuristic). -#define SUPPORT_FANS - -// Define this to enable code to visualize the normals when generating -// primitives. This creates line segment geometry to show each normal -// as the primitives are created. -#define SUPPORT_SHOW_NORMALS - -#endif diff --git a/panda/src/builder/mesherEdge.I b/panda/src/builder/mesherEdge.I deleted file mode 100644 index b8fbbd8104..0000000000 --- a/panda/src/builder/mesherEdge.I +++ /dev/null @@ -1,162 +0,0 @@ -// Filename: mesherEdge.I -// Created by: drose (15Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - - - -template -INLINE MesherEdge:: -MesherEdge(const Vertex *a, const Vertex *b) : _a(a), _b(b) { - _opposite = NULL; -} - -template -INLINE MesherEdge:: -MesherEdge(const MesherEdge ©) : - _a(copy._a), - _b(copy._b), - _strips(copy._strips), - _opposite(copy._opposite) -{ -} - -template -INLINE bool MesherEdge:: -contains_vertex(const Vertex *v) const { - return (_a==v || _b==v); -} - - -template -INLINE bool MesherEdge:: -matches(const MesherEdge &other) const { - return (_a == other._a && _b == other._b) || - (_b == other._a && _a == other._b); -} - -template -INLINE MesherEdge *MesherEdge:: -common_ptr() { - return min(this, _opposite); -} - -template -INLINE bool MesherEdge:: -operator == (const MesherEdge &other) const { - return _a == other._a && _b == other._b; -} - -template -INLINE bool MesherEdge:: -operator != (const MesherEdge &other) const { - return !operator == (other); -} - -template -INLINE bool MesherEdge:: -operator < (const MesherEdge &other) const { - return _a < other._a || (_a == other._a && _b < other._b); -} - -template -INLINE float MesherEdge:: -compute_length(const BuilderBucket &bucket) const { - LVector3f v = ((const Vertexf &)_a->get_coord_value(bucket) - - (const Vertexf &)_b->get_coord_value(bucket)); - return length(v); -} - -template -INLINE Vertexf MesherEdge:: -compute_box(const BuilderBucket &bucket) const { - LVector3f v = ((const Vertexf &)_a->get_coord_value(bucket) - - (const Vertexf &)_b->get_coord_value(bucket)); - return Vertexf(fabs(v[0]), fabs(v[1]), fabs(v[2])); -} - - -//////////////////////////////////////////////////////////////////// -// Function: MesherEdge::remove -// Access: Public -// Description: Removes an edge from a particular strip. -//////////////////////////////////////////////////////////////////// -template -void MesherEdge:: -remove(Strip *strip) { - strip->_edges.remove(this); - strip->_edges.remove(_opposite); - - _strips.remove(strip); - _opposite->_strips.remove(strip); -} - - - -//////////////////////////////////////////////////////////////////// -// Function: MesherEdge::change_strip -// Access: Public -// Description: Reparents the edge from strip "from" to strip "to". -//////////////////////////////////////////////////////////////////// -template -void MesherEdge:: -change_strip(Strip *from, Strip *to) { - TYPENAME Strips::iterator si; - - for (si = _strips.begin(); si != _strips.end(); ++si) { - if (*si == from) { - *si = to; - } - } - - for (si = _opposite->_strips.begin(); - si != _opposite->_strips.end(); - ++si) { - if (*si == from) { - *si = to; - } - } -} - -//////////////////////////////////////////////////////////////////// -// Function: MesherEdge::output -// Access: Public -// Description: Formats the edge for output in some sensible way. -//////////////////////////////////////////////////////////////////// -template -ostream &MesherEdge:: -output(ostream &out) const { - out << "Edge [" << *_a << " to " << *_b << "], " - << _strips.size() << " strips:"; - - TYPENAME Strips::const_iterator si; - for (si = _strips.begin(); si != _strips.end(); ++si) { - out << " " << (*si)->_index; - } - - if (_opposite!=NULL) { - out << " opposite " - << _opposite->_strips.size() << " strips:"; - - for (si = _opposite->_strips.begin(); - si != _opposite->_strips.end(); - ++si) { - out << " " << (*si)->_index; - } - } - - return out; -} diff --git a/panda/src/builder/mesherEdge.h b/panda/src/builder/mesherEdge.h deleted file mode 100644 index 7f885cd553..0000000000 --- a/panda/src/builder/mesherEdge.h +++ /dev/null @@ -1,77 +0,0 @@ -// Filename: mesherEdge.h -// Created by: drose (15Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef MESHEREDGE_H -#define MESHEREDGE_H - -#include "pandabase.h" - -#include "mesherConfig.h" -#include "builderBucket.h" - -#include "plist.h" -#include - - -template -class MesherStrip; - -template -class MesherEdge { -public: - typedef PrimType Prim; - typedef TYPENAME PrimType::Vertex Vertex; - typedef MesherStrip Strip; - - INLINE MesherEdge(const Vertex *a, const Vertex *b); - INLINE MesherEdge(const MesherEdge ©); - - void remove(Strip *strip); - void change_strip(Strip *from, Strip *to); - - INLINE bool contains_vertex(const Vertex *v) const; - - INLINE bool matches(const MesherEdge &other) const; - - INLINE MesherEdge *common_ptr(); - - INLINE bool operator == (const MesherEdge &other) const; - INLINE bool operator != (const MesherEdge &other) const; - INLINE bool operator < (const MesherEdge &other) const; - - INLINE float compute_length(const BuilderBucket &bucket) const; - INLINE Vertexf compute_box(const BuilderBucket &bucket) const; - - ostream &output(ostream &out) const; - - const Vertex *_a, *_b; - - typedef plist Strips; - Strips _strips; - MesherEdge *_opposite; -}; - -template -INLINE ostream &operator << (ostream &out, - const MesherEdge &edge) { - return edge.output(out); -} - -#include "mesherEdge.I" - -#endif diff --git a/panda/src/builder/mesherFanMaker.I b/panda/src/builder/mesherFanMaker.I deleted file mode 100644 index 6877539d8c..0000000000 --- a/panda/src/builder/mesherFanMaker.I +++ /dev/null @@ -1,394 +0,0 @@ -// Filename: mesherFanMaker.I -// Created by: drose (21Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -/* okcircular */ -#include "builderFuncs.h" - -#include "notify.h" -#include "mathNumbers.h" - -#include - -//////////////////////////////////////////////////////////////////// -// Function: MesherFanMaker::Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -template -MesherFanMaker:: -MesherFanMaker(const Vertex *vertex, Strip *tri, Mesher *mesher) { - _vertex = vertex; - const Edge *edge = tri->find_opposite_edge(vertex); - if (edge != (const Edge *)NULL) { - _edges.push_back(edge); - } - _strips.push_back(tri); - _planar = tri->_planar; - _mesher = mesher; - _bucket = _mesher->_bucket; -} - -//////////////////////////////////////////////////////////////////// -// Function: MesherFanMaker::Copy Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -template -MesherFanMaker:: -MesherFanMaker(const MesherFanMaker ©) : - _vertex(copy._vertex), - _edges(copy._edges), - _strips(copy._strips), - _planar(copy._planar), - _bucket(copy._bucket), - _mesher(copy._mesher) -{ -} - -//////////////////////////////////////////////////////////////////// -// Function: MesherFanMaker::Copy Assignment Operator -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -template -void MesherFanMaker:: -operator = (const MesherFanMaker ©) { - _vertex = copy._vertex; - _edges = copy._edges; - _strips = copy._strips; - _planar = copy._planar; - _bucket = copy._bucket; - _mesher = copy._mesher; -} - -template -INLINE bool MesherFanMaker:: -operator < (const MesherFanMaker &other) const { - nassertr(!_edges.empty() && !other._edges.empty(), false); - return _edges.front() < other._edges.front(); -} - -template -INLINE bool MesherFanMaker:: -operator != (const MesherFanMaker &other) const { - return !operator == (other); -} - -template -INLINE bool MesherFanMaker:: -operator == (const MesherFanMaker &other) const { - return _edges.front() == other._edges.front(); -} - -template -INLINE bool MesherFanMaker:: -is_empty() const { - return (_edges.empty()); -} - -template -INLINE bool MesherFanMaker:: -is_valid() const { - return (_edges.size() > 2); -} - -//////////////////////////////////////////////////////////////////// -// Function: MesherFanMaker::is_coplanar_with -// Access: Public -// Description: Returns true if the strip and the other strip are -// coplanar. -//////////////////////////////////////////////////////////////////// -template -INLINE bool MesherFanMaker:: -is_coplanar_with(const MesherFanMaker &other) const { - return _planar && other._planar && - _strips.front()->is_coplanar_with(*other._strips.front(), - _bucket->_coplanar_threshold); -} - -template -bool MesherFanMaker:: -join(MesherFanMaker &other) { - nassertr(_vertex == other._vertex, false); - nassertr(_mesher == other._mesher, false); - nassertr(_bucket == other._bucket, false); - - nassertr(!_edges.empty() && !other._edges.empty(), false); - - const Edge *my_back = _edges.back(); - const Edge *other_front = other._edges.front(); - nassertr(my_back != (Edge *)NULL && other_front != (Edge *)NULL, false); - - const Vertex *my_back_b = my_back->_b; - const Vertex *other_front_a = other_front->_a; - - if (my_back_b == other_front_a) { - _planar = is_coplanar_with(other); - _edges.splice(_edges.end(), other._edges); - _strips.splice(_strips.end(), other._strips); - return true; - } - - const Edge *my_front = _edges.front(); - const Edge *other_back = other._edges.back(); - nassertr(my_front != (Edge *)NULL && other_back != (Edge *)NULL, false); - - const Vertex *my_front_a = my_front->_a; - const Vertex *other_back_b = other_back->_b; - - if (my_front_a == other_back_b) { - _planar = is_coplanar_with(other); - _edges.splice(_edges.begin(), other._edges); - _strips.splice(_strips.begin(), other._strips); - return true; - } - - return false; -} - - -template -float MesherFanMaker:: -compute_angle() const { - // We sum up the angles of each triangle. This is more correct than - // taking the net angle from the first edge to the last (since we - // may not be in a plane). - nassertr(is_valid(), 0.0); - - double angle = 0.0; - Vertexf v0 = _vertex->get_coord_value(*_bucket); - - TYPENAME Edges::const_iterator ei; - for (ei = _edges.begin(); ei != _edges.end(); ++ei) { - Normalf v1 = (*ei)->_a->get_coord_value(*_bucket) - v0; - Normalf v2 = (*ei)->_b->get_coord_value(*_bucket) - v0; - - v1 = normalize(v1); - v2 = normalize(v2); - angle += acos(dot(v1, v2)); - } - - return rad_2_deg(angle); -} - -template -int MesherFanMaker:: -build(pvector &unrolled_tris) { - nassertr(_edges.size() == _strips.size(), 0); - - int num_tris = _edges.size(); - float net_angle = compute_angle(); - float avg_angle = net_angle / num_tris; - - if (avg_angle > _bucket->_max_tfan_angle) { - // The triangles are too loose to justify making a fan; it'll - // probably make a better quadsheet. - return 0; - } - - if (_bucket->_min_tfan_tris==0 || num_tris < _bucket->_min_tfan_tris) { - // Oops, not enough triangles to justify a fan. - if (!_bucket->_unroll_fans) { - return 0; - } - - // However, we could (maybe) make it a few tristrips! - - // Each section of the fan which is made up of coplanar tris with - // identical properties may be retesselated into a tristrip. What - // a sneaky trick! To do this, we must first identify each such - // qualifying section. - - // We define a seam as the edge between any two tris which are - // noncoplanar or which do not share identical properties. Then - // we can send each piece between the seams to unroll(). - - TYPENAME Strips::iterator si, last_si; - TYPENAME Edges::iterator ei, last_ei; - - // First, rotate the fan so it begins at a seam. We do this so we - // won't be left out with part of one piece at the beginning and - // also at the end. - si = _strips.begin(); - last_si = si; - ei = _edges.begin(); - last_ei = ei; - int found_seam = false; - - for (++si, ++ei; si != _strips.end() && !found_seam; ++si, ++ei) { - nassertr(ei != _edges.end(), 0); - if ( !((*si)->_prims.front() == (*last_si)->_prims.front()) || - !(*si)->is_coplanar_with(*(*last_si), _bucket->_coplanar_threshold)) { - // Here's a seam. Break the fan here. - found_seam = true; - _edges.splice(_edges.begin(), _edges, ei, _edges.end()); - _strips.splice(_strips.begin(), _strips, si, _strips.end()); - } - } - - // Now break the fan up along its seams and unroll each piece - // separately. - si = _strips.begin(); - last_si = si; - ei = _edges.begin(); - last_ei = ei; - - int count = 0; - for (++si, ++ei; si != _strips.end(); ++si, ++ei) { - nassertr(ei != _edges.end(), 0); - if ( !((*si)->_prims.front() == (*last_si)->_prims.front()) || - !(*si)->is_coplanar_with(*(*last_si), _bucket->_coplanar_threshold)) { - // Here's the end of a run of matching pieces. - count += unroll(last_si, si, last_ei, ei, unrolled_tris); - last_si = si; - last_ei = ei; - } - } - count += unroll(last_si, si, last_ei, ei, unrolled_tris); - - return count; - - } else { - Strip new_fan; - new_fan._type = BPT_trifan; - new_fan._verts.push_back(_vertex); - - new_fan._verts.push_back(_edges.front()->_a); - TYPENAME Edges::iterator ei; - for (ei = _edges.begin(); ei != _edges.end(); ++ei) { - new_fan._verts.push_back((*ei)->_b); - } - - TYPENAME Strips::iterator si; - for (si = _strips.begin(); si != _strips.end(); ++si) { - new_fan._prims.splice(new_fan._prims.end(), (*si)->_prims); - (*si)->remove_all_edges(); - (*si)->_verts.clear(); - (*si)->_status = MS_dead; - } - - // If we'd built our list of edges and strips right, this sum should - // come out so that there are two more vertices than triangles in - // the new fan. - nassertr(new_fan._verts.size() == new_fan._prims.size() + 2, 0); - - // Now we've built a fan, and it won't be able to mate with - // anything else, so add it to the done list. - _mesher->_done.push_back(new_fan); - } - - return 1; -} - - - -template -int MesherFanMaker:: -unroll(TYPENAME Strips::iterator strip_begin, TYPENAME Strips::iterator strip_end, - TYPENAME Edges::iterator edge_begin, TYPENAME Edges::iterator edge_end, - pvector &unrolled_tris) { - TYPENAME Edges::iterator ei; - TYPENAME Strips::iterator si; - - int num_tris = 0; - for (ei = edge_begin; ei != edge_end; ++ei) { - num_tris++; - } - - if (num_tris < 3) { - // Don't even bother. - return 0; - } - - Prim poly; - - // Now we build an n-sided polygon. We'll decompose it into tris - // in a second. - poly.set_type(BPT_poly); - poly.set_attrib((*strip_begin)->_prims.front()); - - ei = edge_end; - --ei; - if ( !((*ei)->_b == (*edge_begin)->_a)) { - // If the fan is less than a full circle, we need to keep the - // hub vertex and initial vertex in the poly. Otherwise, we'll - // discard them. - poly.add_vertex(*_vertex); - poly.add_vertex(*(*edge_begin)->_a); - } - - for (ei = edge_begin; ei != edge_end; ++ei) { - poly.add_vertex(*(*ei)->_b); - } - - int result = true; - - if (_bucket->_show_quads) { - // If we're showing quads, also show retesselated triangles. - - // We can't add it directly to the mesher, that's unsafe; instead, - // we'll just add it to the end of the unrolled_tris list. This - // does mean we won't be able to color it a fancy color, but too - // bad. - //_mesher->add_prim(poly, MO_fanpoly); - unrolled_tris.push_back(poly); - - } else { - // Now decompose the new polygon into triangles. - pvector tris; - result = expand(poly, *_bucket, back_inserter(tris)); - - if (result) { - unrolled_tris.insert(unrolled_tris.end(), - tris.begin(), tris.end()); - } - } - - if (result) { - // Now that we've created a new poly, kill off all the old ones. - for (si = strip_begin; si != strip_end; ++si) { - (*si)->remove_all_edges(); - (*si)->_verts.clear(); - (*si)->_prims.clear(); - (*si)->_status = MS_dead; - } - return 1; - } else { - return 0; - } - -} - -template -ostream &MesherFanMaker:: -output(ostream &out) const { - out << *_vertex << ":["; - if (!_edges.empty()) { - TYPENAME Edges::const_iterator ei; - for (ei = _edges.begin(); ei != _edges.end(); ++ei) { - out << " " << *(*ei)->_a; - } - out << " " << *_edges.back()->_b; - } - out << " ]"; - - if (_planar) { - out << " (planar)"; - } - return out; -} diff --git a/panda/src/builder/mesherFanMaker.h b/panda/src/builder/mesherFanMaker.h deleted file mode 100644 index 24ce6c4618..0000000000 --- a/panda/src/builder/mesherFanMaker.h +++ /dev/null @@ -1,94 +0,0 @@ -// Filename: mesherFanMaker.h -// Created by: drose (21Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef MESHERFANMAKER_H -#define MESHERFANMAKER_H - -#ifdef SUPPORT_FANS - -#include "pandabase.h" - -#include "mesherConfig.h" -#include "builderAttrib.h" -#include "builderVertex.h" -#include "builderBucket.h" -#include "mesherEdge.h" -#include "mesherStrip.h" - -#include "plist.h" -#include "pvector.h" - - -template -class MesherTempl; - -template -class MesherFanMaker { -public: - typedef PrimType Prim; - typedef TYPENAME PrimType::Vertex Vertex; - typedef TYPENAME PrimType::DAttrib FAttrib; - typedef MesherEdge Edge; - typedef MesherStrip Strip; - typedef MesherTempl Mesher; - - typedef plist Edges; - typedef plist Strips; - - MesherFanMaker() {} - MesherFanMaker(const Vertex *vertex, Strip *tri, Mesher *mesher); - MesherFanMaker(const MesherFanMaker ©); - void operator = (const MesherFanMaker ©); - - INLINE bool operator < (const MesherFanMaker &other) const; - INLINE bool operator != (const MesherFanMaker &other) const; - INLINE bool operator == (const MesherFanMaker &other) const; - - INLINE bool is_empty() const; - INLINE bool is_valid() const; - INLINE bool is_coplanar_with(const MesherFanMaker &other) const; - - bool join(MesherFanMaker &other); - float compute_angle() const; - - int build(pvector &unrolled_tris); - int unroll(TYPENAME Strips::iterator strip_begin, TYPENAME Strips::iterator strip_end, - TYPENAME Edges::iterator edge_begin, TYPENAME Edges::iterator edge_end, - pvector &unrolled_tris); - - ostream &output(ostream &out) const; - - - const Vertex *_vertex; - Edges _edges; - Strips _strips; - int _planar; - BuilderBucket *_bucket; - Mesher *_mesher; -}; - -template -ostream &operator << (ostream &out, const MesherFanMaker &fe) { - return fe.output(out); -} - -#include "mesherFanMaker.I" - -#endif // SUPPORT_FANS - -#endif diff --git a/panda/src/builder/mesherStrip.I b/panda/src/builder/mesherStrip.I deleted file mode 100644 index 628adf6f16..0000000000 --- a/panda/src/builder/mesherStrip.I +++ /dev/null @@ -1,1651 +0,0 @@ -// Filename: mesherStrip.I -// Created by: drose (16Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - - -template -INLINE MesherStrip:: -MesherStrip(const MesherStrip ©) : - _prims(copy._prims), - _edges(copy._edges), - _verts(copy._verts), - _type(copy._type), - _index(copy._index), - _status(copy._status), - _planar(copy._planar), - _plane_normal(copy._plane_normal), - _plane_offset(copy._plane_offset), - _row_id(copy._row_id) -{ -} - - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::is_coplanar_with -// Access: Public -// Description: Returns true if the strip and the other strip are -// coplanar. -//////////////////////////////////////////////////////////////////// -template -INLINE bool MesherStrip:: -is_coplanar_with(const MesherStrip &other, float threshold) const { - return (coplanarity(other) <= threshold); -} - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::coplanarity -// Access: Public -// Description: Returns the degree to which the two strips are -// coplanar. 0.0 is exactly coplanar; numbers somewhat -// larger than zero indicate less coplanar. 1.0 is -// at right angles; 2.0 is exactly backfacing. If -// either strip is not itself planar, 3.0 is returned. -//////////////////////////////////////////////////////////////////// -template -INLINE float MesherStrip:: -coplanarity(const MesherStrip &other) const { - if (_planar && other._planar) { - return 1.0 - dot(_plane_normal, other._plane_normal); - } else { - return 3.0; - } -} - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::type_category -// Access: Public -// Description: Returns an integer which gives a heuristic about the -// similarity of different strip types. In general, -// closer numbers are more similar. -//////////////////////////////////////////////////////////////////// -template -INLINE int MesherStrip:: -type_category() const { - switch (_type) { - case BPT_tri: - return 1; - - case BPT_tristrip: - return 2; - - case BPT_quad: - case BPT_quadstrip: - return 5; - - default: - return 10; - } -} - - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::rotate_forward -// Access: Public -// Description: Rotates a triangle or quad by bringing its second -// vertex to the front. -//////////////////////////////////////////////////////////////////// -template -INLINE void MesherStrip:: -rotate_forward() { - _verts.push_back(_verts.front()); - _verts.pop_front(); -} - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::rotate_back -// Access: Public -// Description: Rotates a triangle or quad by bringing its second -// vertex to the front. -//////////////////////////////////////////////////////////////////// -template -INLINE void MesherStrip:: -rotate_back() { - _verts.push_front(_verts.back()); - _verts.pop_back(); -} - - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::get_head_edge -// Access: Public -// Description: Returns an Edge which represents the leading edge in -// the quadstrip or tristrip. This Edge will not have -// pointer equality with any shared Edge. -//////////////////////////////////////////////////////////////////// -template -INLINE TYPENAME MesherStrip::Edge MesherStrip:: -get_head_edge() const { - TYPENAME Verts::const_iterator vi = _verts.begin(); - return Edge(_verts.front(), *++vi); -} - - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::get_tail_edge -// Access: Public -// Description: Returns an Edge which represents the trailing edge in -// the quadstrip or tristrip. This Edge will not have -// pointer equality with any shared Edge. -//////////////////////////////////////////////////////////////////// -template -INLINE TYPENAME MesherStrip::Edge MesherStrip:: -get_tail_edge() const { - TYPENAME Verts::const_reverse_iterator vi = _verts.rbegin(); - return Edge(*++vi, _verts.back()); -} - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::operator == -// Access: Public -// Description: Defines equality for strips. This actually tests -// only pointer equality; it's used only when removing a -// strip from the list. -//////////////////////////////////////////////////////////////////// -template -INLINE bool MesherStrip:: -operator == (const MesherStrip &other) const { - return this == &other; -} - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::operator != -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -template -INLINE bool MesherStrip:: -operator != (const MesherStrip &other) const { - return !operator == (other); -} - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -template -MesherStrip:: -MesherStrip(const PrimType &prim, int index, const BuilderBucket &bucket) { - _index = index; - _row_id = 0; - _status = MS_alive; - _origin = MO_unknown; - prim.has_overall_normal(); // Force the prim to update its overall flags. - _type = prim.get_type(); - - // We save only the prim's overall properties in the _prims - // array. The vertices get re-added later by Mesher::add_prim(). - _prims.push_back(prim); - - if (_type == BPT_poly) { - switch (prim.get_num_verts()) { - case 3: - _type = BPT_tri; - break; - - case 4: - _type = BPT_quad; - break; - } - } - - if (_type == BPT_quad) { - // A quad has two internal triangles; we therefore push the prim - // properties twice. - _prims.push_back(prim); - } - - _planar = false; - - if (prim.get_num_verts() >= 3) { - // However, we will examine the vertices to determine the plane equation. - Vertexf p1 = prim.get_vertex(0).get_coord_value(bucket); - Vertexf p2 = prim.get_vertex(1).get_coord_value(bucket); - Vertexf p3 = prim.get_vertex(2).get_coord_value(bucket); - _plane_normal = cross(p1-p2, p2-p3); - float l = length(_plane_normal); - - if (l != 0.0f) { - _plane_normal /= l; - _planar = true; - _plane_offset = -dot(_plane_normal, p1); - } - } -} - - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::make_prim -// Access: Public -// Description: Creates a PrimType element corresponding to the strip -// represented by this node. -//////////////////////////////////////////////////////////////////// -template -PrimType MesherStrip:: -make_prim(const BuilderBucket &bucket) { - Prim p; - BuilderPrimType dest_type; - - switch (_type) { - case BPT_quad: - dest_type = bucket._show_quads ? BPT_poly : BPT_tristrip; - break; - - case BPT_tristrip: - case BPT_quadstrip: - dest_type = BPT_tristrip; - break; - - case BPT_trifan: - dest_type = BPT_trifan; - break; - - default: - dest_type = _type; - } - - if (dest_type != BPT_tristrip && dest_type != BPT_trifan) { - // The easy case: a simple primitive. - p.set_attrib(_prims.front()); - TYPENAME Verts::iterator vi; - for (vi = _verts.begin(); vi != _verts.end(); ++vi) { - const Vertex *v = *vi; - nassertr(v != (Vertex *)NULL, p); - p.add_vertex(*v); - } - p.set_type(dest_type); - - } else { - // The harder case: a tristrip of some kind. - convert_to_type(dest_type); - p.set_attrib(_prims.front()); - - BuilderPrimType type = dest_type; - - // Now store all the vertices, as well as each individual - // triangle's attributes. - TYPENAME Verts::iterator vi; - TYPENAME Prims::iterator pi; - pi = _prims.begin(); - int count = 0; - for (vi = _verts.begin(); - vi != _verts.end() && pi != _prims.end(); - ++vi) { - const Vertex *v = *vi; - nassertr(v != (Vertex *)NULL, p); - - if (++count >= 3) { - // Beginning with the third vertex, we increment pi. Thus, the - // first two vertices stand alone, then each vertex beginning - // with the third completes a triangle. - p.add_component(*pi); - ++pi; - } - p.add_vertex(*v); - } - - p.set_type(type); - - // If either of these fail, there weren't num_prims + 2 vertices in - // the tristrip! - nassertr(vi==_verts.end(), p); - nassertr(pi==_prims.end(), p); - } - - return p; -} - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::measure_sheet -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -template -void MesherStrip:: -measure_sheet(const Edge *edge, int new_row, int &num_prims, int &num_rows, - int first_row_id, int this_row_id, int this_row_distance) { - if (new_row) { - // If we would create a new row by stepping here, we won't stay if - // there was any other row already defined here. - if (_row_id >= first_row_id) { - return; - } - } else { - // On the other hand, if this is a continuation of the current - // row, we'll stay if the other row had to travel farther to get - // here. - if (_row_id >= first_row_id && _row_distance <= this_row_distance) { - return; - } - } - - num_prims += _prims.size(); - if (new_row) { - ++num_rows; - this_row_id = first_row_id + num_rows - 1; - } - - _row_id = this_row_id; - - TYPENAME Edges::iterator ei; - TYPENAME Edge::Strips::iterator si; - - if (_type == BPT_quad) { - // If this is a quad, it has four neighbors: two in the direction - // we are testing, and two in an orthagonal direction. - - const Vertex *a = edge->_a; - const Vertex *b = edge->_b; - - // We use these vertices to differentiate the edges that run in - // our primary direction from those in the secondary direction. - // For each edge, we count the number of vertices that the edge - // shares with our starting edge. There are then three cases: - - // (a) The edge shares two vertices. It is the direction we came - // from; forget it. - - // (b) The edge shares one vertex. It is at right angles to our - // starting edge. This is the primary direction if new_row is - // true, and the secondary direction if new_row is false. - - // (c) The edge shares no vertices. It is directly opposite our - // starting edge. This is the primary direction if new_row is - // false, and the secondary direction if new_row is true. - - - // Here's a silly little for loop that executes the following code - // twice: once with secondary == 0, and once with secondary == 1. - // This is because we want to find all the primary edges first, - // and then all the secondary edges. - - for (int secondary = 0; secondary <= 1; secondary++) { - // How many common vertices are we looking for this pass (see - // above)? - - int want_count; - if (secondary) { - want_count = new_row ? 0 : 1; - } else { - want_count = new_row ? 1 : 0; - } - - for (ei = _edges.begin(); ei != _edges.end(); ++ei) { - int common_verts = - ((*ei)->_a == a || (*ei)->_a == b) + - ((*ei)->_b == a || (*ei)->_b == b); - - if (common_verts == want_count) { - // Here's the edge. Look at all its connections. Hopefully, - // there will only be one besides ourselves, but there may be - // more. Pick the best. - - TYPENAME Edge::Strips &strips = (*ei)->_strips; - MesherStrip *mate = NULL; - for (si = strips.begin(); si != strips.end(); ++si) { - if ((*si)->_row_id < first_row_id) { - if (mate==NULL || pick_sheet_mate(**si, *mate)) { - mate = *si; - } - } - } - if (mate!=NULL) { - mate->measure_sheet(*ei, secondary, num_prims, num_rows, - first_row_id, this_row_id, - this_row_distance + secondary); - } - } - } - } - - } else { - // Otherwise, this is not a quad. It's certainly not a triangle, - // because we've built all the single triangles already. - nassertv(_type != BPT_tri); - - // Therefore, it must be a tristrip or quadstrip. - nassertv(_type == BPT_tristrip || _type == BPT_quadstrip); - - // Since it's a strip, it only has two neighbors: the one we came - // from, and the other one. Find the other one. - - for (ei = _edges.begin(); ei != _edges.end(); ++ei) { - if (!(*ei)->matches(*edge)) { - // Here's the edge. Same drill as above. - - TYPENAME Edge::Strips &strips = (*ei)->_strips; - MesherStrip *mate = NULL; - for (si = strips.begin(); si != strips.end(); ++si) { - if ((*si)->_row_id < first_row_id) { - if (mate==NULL || pick_sheet_mate(**si, *mate)) { - mate = *si; - } - } - } - if (mate!=NULL) { - mate->measure_sheet(*ei, false, num_prims, num_rows, - first_row_id, this_row_id, this_row_distance); - } - } - } - } -} - - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::cut_sheet -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -template -void MesherStrip:: -cut_sheet(int first_row_id, int do_mate, const BuilderBucket &bucket) { - TYPENAME Edges::iterator ei; - TYPENAME Edge::Strips::iterator si; - - // First, start the process going on any neighbors that belong to a - // later row. (We must do these first, because we'll change our - // neighbor list when we start to mate.) - - // We need to build a temporary list of neighbors first, because - // calling cut_sheet() recursively will start things mating, and - // could damage our edge list. - - typedef plist StripPtrs; - StripPtrs strip_ptrs; - - for (ei = _edges.begin(); ei != _edges.end(); ++ei) { - TYPENAME Edge::Strips &strips = (*ei)->_strips; - for (si = strips.begin(); si != strips.end(); ++si) { - if ((*si)->_row_id > _row_id) { - // Here's a different row in the sheet! - strip_ptrs.push_back(*si); - } - } - } - - // Now walk the temporary list and do some damage. We pass do_mate - // = true to each of these neighbors, because as far as we know, - // they're the first nodes of a particular row. - TYPENAME StripPtrs::iterator spi; - for (spi = strip_ptrs.begin(); spi != strip_ptrs.end(); ++spi) { - if ((*spi)->_status == MS_alive) { - (*spi)->cut_sheet(first_row_id, true, bucket); - } - } - - - if (do_mate && _status == MS_alive) { - // Now mate like a bunny until we don't have any more eligible mates. - int not_any; - do { - not_any = true; - - ei = _edges.begin(); - while (ei != _edges.end() && not_any) { - TYPENAME Edge::Strips &strips = (*ei)->_strips; - si = strips.begin(); - while (si != strips.end() && not_any) { - if (*si != this && (*si)->_row_id == _row_id) { - // Here's one! - not_any = false; - MesherStrip *mate = *si; - - // We also recurse on these guys so they can spread the - // word to their own neighbors. This time we don't need - // to build a temporary list, because we'll be restarting - // from the beginning of our edge list after we do this. - // We also pass do_mate = false to these guys because - // we're the ones doing the mating here. - mate->cut_sheet(first_row_id, false, bucket); - - if (_status == MS_alive && mate->_status == MS_alive) { - // Now mate. This will either succeed or fail. It ought - // to succeed, but if it doesn't, no harm done; it will - // simply remove the common edge and return. We'll go - // around again and not encounter this neighbor next time. - mate_pieces(*ei, *this, *mate, bucket); - } - } - if (not_any) { - ++si; - } - } - if (not_any) { - ++ei; - } - } - } while (!not_any); - - // All done. Mark this one as down for the count. - _row_id = -first_row_id; - } -} - - - - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::mate -// Access: Public -// Description: Finds a neighboring strip and joins up with it to -// make a larger strip. Returns true if mating was -// successful or at least possible, false if the strip -// has no neighbors. -//////////////////////////////////////////////////////////////////// -template -bool MesherStrip:: -mate(const BuilderBucket &bucket) { - // We must walk through the list of our neighbors and choose our - // best mate. - nassertr(_status == MS_alive, false); - - MesherStrip *mate; - Edge *common_edge; - - if (!find_ideal_mate(mate, common_edge, bucket)) { - // We have no more eligible neighbors. Call us done. - _status = MS_done; - - return false; - } - - nassertr(!mate->_prims.empty(), false); - nassertr(!mate->_verts.empty(), false); - - mate_pieces(common_edge, *this, *mate, bucket); - - // Whether the mate failed or not, the strip still (probably) has - // other neighbors to consider. Return true regardless. - return true; -} - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::find_ideal_mate -// Access: Public -// Description: Searches our neighbors for the most suitable mate. -// Returns true if one is found, false if we have no -// neighbors. -//////////////////////////////////////////////////////////////////// -template -bool MesherStrip:: -find_ideal_mate(MesherStrip *&mate, Edge *&common_edge, - const BuilderBucket &bucket) { - TYPENAME Edges::iterator ei; - - mate = NULL; - common_edge = NULL; - - for (ei = _edges.begin(); ei != _edges.end(); ++ei) { - TYPENAME Edge::Strips &strips = (*ei)->_strips; - TYPENAME Edge::Strips::iterator si; - for (si = strips.begin(); si != strips.end(); ++si) { - if (*si != this) { - if (mate==NULL || pick_mate(**si, *mate, **ei, *common_edge, - bucket)) { - mate = *si; - common_edge = *ei; - } - } - } - } - - return (mate!=NULL); -} - - - - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::mate_pieces -// Access: Public, Static -// Description: Connects two pieces of arbitrary type, if possible. -// Returns true if successful, false if failure. -//////////////////////////////////////////////////////////////////// -template -bool MesherStrip:: -mate_pieces(Edge *common_edge, MesherStrip &front, MesherStrip &back, - const BuilderBucket &bucket) { - nassertr(front._status == MS_alive, false); - nassertr(back._status == MS_alive, false); - nassertr(&front != &back, false); - - bool success = true; - // remove_sides tracks whether we want to remove all but the leading - // edges of the newly joined piece if we succeed. - bool remove_sides = true; - - bool is_coplanar = front.is_coplanar_with(back, bucket._coplanar_threshold); - - if (front._type==BPT_tri && back._type==BPT_tri) { - - if (is_coplanar && bucket._retesselate_coplanar && - front._prims.front() == back._prims.front() && - convex_quad(common_edge, front, back, bucket)) { - - // If we're joining two equivalent coplanar triangles, call it a - // quad. - front._type = BPT_quad; - - // We add one additional vertex for the new triangle, the one - // vertex we didn't already share. - const Vertex *new_vert = back.find_uncommon_vertex(common_edge); - - // Now we just need to find the right place to insert it. It - // belongs in the middle of the common edge, i.e. after the first - // vertex that is on the common edge and before the second vertex. - TYPENAME Verts::iterator a = front._verts.begin(); - TYPENAME Verts::iterator b = a; - ++b; - - if (common_edge->contains_vertex(*a)) { - if (common_edge->contains_vertex(*b)) { - // It goes between a and b. - front._verts.insert(b, new_vert); - } else { - // It goes at the end. - front._verts.push_back(new_vert); - } - } else { - // It goes between b and c. - ++b; - front._verts.insert(b, new_vert); - } - - front._prims.splice(front._prims.end(), back._prims); - back._verts.clear(); - - // We leave all four surrounding edges for now, since the quad - // might still be joined up in any direction. - remove_sides = false; - - } else { - // Otherwise, connect the two tris into a tristrip. - front._type = BPT_tristrip; - - const Vertex *new_vert = back.find_uncommon_vertex(common_edge); - front.rotate_to_back(common_edge); - - front._verts.push_back(new_vert); - front._prims.splice(front._prims.end(), back._prims); - back._verts.clear(); - } - - } else if ((front._type==BPT_quad || front._type==BPT_quadstrip) && - (back._type==BPT_quad || back._type==BPT_quadstrip)) { - // Joining two quads, two quadstrips, or a quad and a quadstrip. - // This makes another quadstrip. - - // We expect this to succeed every time with quadstrips. - success = mate_strips(common_edge, front, back, BPT_quadstrip); - - if (!success) { - // Although it might fail in rare circumstances (specifically, - // if the two strips we attempted to join were backfacing to - // each other). If so, remove the adjoining edge so these two - // don't get tried again. - common_edge->remove(&front); - common_edge->remove(&back); - } - - } else { - - // Otherwise. This might be two tristrips, a quad and a tristrip, - // a triangle and a quad, a triangle and a tristrip, a triangle - // and a quadstrip, or a tristrip and a quadstrip. In any case, - // we'll end up with a tristrip. - - // This might fail if the tristrips don't match polarity. - success = mate_strips(common_edge, front, back, BPT_tristrip); - - if (!success) { - // If it does fail, we'll try reversing the connection. This - // makes sense if we are joining a tri or tristrip to a quad or - // quadstrip, which might fail in one direction but succeed in - // the other. - success = mate_strips(common_edge, back, front, BPT_tristrip); - - if (success) { - // Yay! Now return all the stuff to front. - front._verts.splice(front._verts.end(), back._verts); - front._prims.splice(front._prims.end(), back._prims); - } else { - // A miserable failure. Never try to join these two again. - - common_edge->remove(&front); - common_edge->remove(&back); - } - } - } - - if (success) { - front.combine_edges(back, remove_sides); - if (!remove_sides) { - // If we didn't want to remove the side edges, at least remove - // the join edge, which is now internal. - common_edge->remove(&front); - } - - nassertr(back._prims.empty(), false); - nassertr(back._verts.empty(), false); - - // Strip back is no more. - back._status = MS_dead; - - // The result is planar if and only if we joined two coplanar - // pieces. - front._planar = is_coplanar; - front._origin = MO_mate; - } - - return success; -} - - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::mate_strips -// Access: Public, Static -// Description: Stitches two strips together, producing in "front" a -// new strip of the indicated type (quadstrip or -// tristrip). The front strip stores the result, and -// the back strip is emptied on success. -// -// Returns true if successful, false if failure -// (generally because of incorrect polarity of -// tristrips), in which case nothing has changed (or at -// least, not much). -//////////////////////////////////////////////////////////////////// -template -bool MesherStrip:: -mate_strips(Edge *common_edge, MesherStrip &front, MesherStrip &back, - BuilderPrimType type) { - // If we start with a quad or tri, rotate the vertices around so we - // start with the common edge. - if (front._type==BPT_tri || front._type==BPT_quad) { - front.rotate_to_back(common_edge); - } - if (back._type==BPT_tri || back._type==BPT_quad) { - back.rotate_to_front(common_edge); - } - - bool reverse_front = common_edge->matches(front.get_head_edge()); - bool reverse_back = !common_edge->matches(back.get_head_edge()); - - bool invert_front = false; - bool invert_back = false; - - if (reverse_front && front.is_odd()) { - // If we're going to reverse the front strip, we have to be - // careful. This will also reverse the facing direction if it has - // an odd number of prims. - if (!front.can_invert()) { - return false; - } - invert_front = true; - } - - if (must_invert(front, back, reverse_back, type)) { - if (!back.can_invert()) { - return false; - } - invert_back = true; - back.invert(); - } - - if (invert_front) { - front.invert(); - } - - if (reverse_front) { - reverse(front._verts.begin(), front._verts.end()); - reverse(front._prims.begin(), front._prims.end()); - } - - if (reverse_back) { - reverse(back._verts.begin(), back._verts.end()); - reverse(back._prims.begin(), back._prims.end()); - } - - bool will_reverse = front.would_reverse_tail(type); - bool is_headtotail = (front.get_tail_edge() == back.get_head_edge()); - if (will_reverse == is_headtotail) { - // Instead of crapping out, for now we'll just recover and carry on. - // builder_cat.info() << "Recovering from attempt to join backfacing strips.\n"; - if (reverse_back) { - reverse(back._verts.begin(), back._verts.end()); - reverse(back._prims.begin(), back._prims.end()); - } - if (invert_back) { - back.invert(); - } - if (reverse_front) { - reverse(front._verts.begin(), front._verts.end()); - reverse(front._prims.begin(), front._prims.end()); - } - if (invert_front) { - front.invert(); - } - return false; - } - - front.convert_to_type(type); - back.convert_to_type(type); - - /* - if (! (front.get_tail_edge() == back.get_head_edge()) ) { - builder_cat.error() - << "\nFailure, trying to connect " << front - << "\nto " << back - << "\nreverse_front = " << reverse_front - << " reverse_back = " << reverse_back - << " invert_front = " << invert_front - << "\n"; - Edges::iterator ei; - - nout << "\nFront edges:\n"; - for (ei = front._edges.begin(); ei != front._edges.end(); ++ei) { - nout << **ei << "\n"; - } - - nout << "\nBack edges:\n"; - for (ei = back._edges.begin(); ei != back._edges.end(); ++ei) { - nout << **ei << "\n"; - } - } - */ - - // If this assertion fails, we were misinformed about our ability to - // join these two strips. Either the must_invert() call returned the - // incorrect value, or our edge-detection logic failed and we - // attempted to join two oppositely-facing strips. - //nassertr(front.get_tail_edge() == back.get_head_edge(), false); - - front._verts.pop_back(); - front._verts.pop_back(); - front._verts.splice(front._verts.end(), back._verts); - front._prims.splice(front._prims.end(), back._prims); - - return true; -} - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::must_invert -// Access: Public, Static -// Description: Returns false if the strips can be mated as they -// currently are. Returns true if the back strip must -// be inverted first. -//////////////////////////////////////////////////////////////////// -template -bool MesherStrip:: -must_invert(const MesherStrip &front, const MesherStrip &back, - bool will_reverse_back, BuilderPrimType type) { - bool invert = false; - - if ((front._type == BPT_quad || front._type == BPT_quadstrip) && - type == BPT_tristrip) { - // If we'll be converting from quads to tris, the tail edge of the - // front strip will always be even. - - } else if (front.is_odd()) { - // Otherwise, we have to flip if the tail edge is odd. - invert = !invert; - } - - if (will_reverse_back) { - // With the back strip, we don't care about what will happen to - // its tail edge when we convert it, but we do care what happens - // to its front edge if we reverse it. - if (back.is_odd()) { - // Specifically, the front edge will be reversed when the strip - // is reversed only if the strip is odd. - invert = !invert; - } - } - - return invert; -} - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::convex_quad -// Access: Public, Static -// Description: Returns true if the quad that would be formed by -// connecting coplanar tris front and back along -// common_edge is convex, false otherwise. -//////////////////////////////////////////////////////////////////// -template -bool MesherStrip:: -convex_quad(Edge *common_edge, MesherStrip &front, MesherStrip &back, - const BuilderBucket &bucket) { - // Find the edge from the apex of one triangle to the apex of the - // other. This is the "other" diagonal of the quad-to-be, other - // than the common_edge. - const Vertex *a = front.find_uncommon_vertex(common_edge); - const Vertex *b = back.find_uncommon_vertex(common_edge); - nassertr(a!=NULL && b!=NULL, false); - - Vertexf a3, b3, c3, d3; - a3 = a->get_coord_value(bucket); - b3 = b->get_coord_value(bucket); - - c3 = common_edge->_a->get_coord_value(bucket); - d3 = common_edge->_b->get_coord_value(bucket); - - // Project both edges into the 2-d axis plane most nearly - // perpendicular to the normal. We're assuming both tris have the - // same normal. - - nassertr(front._planar, false); - - LVector3f &n = front._plane_normal; - int xi, yi; - - // Find the largest dimension of the normal. - if (fabs(n[0]) > fabs(n[1])) { - if (fabs(n[0]) > fabs(n[2])) { - xi = 1; - yi = 2; - } else { - xi = 0; - yi = 1; - } - } else { - if (fabs(n[1]) > fabs(n[2])) { - xi = 0; - yi = 2; - } else { - xi = 0; - yi = 1; - } - } - - LVecBase2f a2, b2, c2, d2; - a2.set(a3[xi], a3[yi]); - b2.set(b3[xi], b3[yi]); - c2.set(c3[xi], c3[yi]); - d2.set(d3[xi], d3[yi]); - - // Now (c2-d2) is the common edge, and (a2-b2) is the new edge. The - // quad is convex iff (c2-d2) intersects (a2-b2). We actually only - // need to test whether (c2-d2) intersects the infinite line passing - // through (a2-b2). - - // The equation for the infinite line containing (a2-b2): - // Ax + By + C = 0 - double A = (b2[1] - a2[1]); - double B = (a2[0] - b2[0]); - double C = -(A*b2[0] + B*b2[1]); - - // The parametric equations for the line segment (c2-d2): - // x = c2[0] + (d2[0]-c2[0])t - // y = c2[1] + (d2[1]-c2[1])t - - // Solved for t: - double t = - ((A*c2[0] + B*c2[1]) + C) / (A*(d2[0]-c2[0]) + B*(d2[1]-c2[1])); - - // Now the lines intersect if t is in [0, 1]. - return (0.0 <= t && t <= 1.0); -} - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::count_neighbors -// Access: Public -// Description: Returns the number of neighbors the strip shares. -//////////////////////////////////////////////////////////////////// -template -int MesherStrip:: -count_neighbors() const { - int count = 0; - TYPENAME Edges::const_iterator ei; - - for (ei = _edges.begin(); ei != _edges.end(); ++ei) { - count += (*ei)->_strips.size(); - } - return count; -} - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::show_neighbors -// Access: Public -// Description: Writes all the neighbor indexes to the ostream. -//////////////////////////////////////////////////////////////////// -template -ostream &MesherStrip:: -show_neighbors(ostream &out) const { - TYPENAME Edges::const_iterator ei; - TYPENAME Edge::Strips::const_iterator si; - - for (ei = _edges.begin(); ei != _edges.end(); ++ei) { - for (si = (*ei)->_strips.begin(); - si != (*ei)->_strips.end(); - ++si) { - out << " " << (*si)->_index; - } - } - return out; -} - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::find_uncommon_vertex -// Access: Public -// Description: Returns the first vertex found that is not shared by -// the given edge. -//////////////////////////////////////////////////////////////////// -template -const TYPENAME MesherStrip::Vertex *MesherStrip:: -find_uncommon_vertex(const Edge *edge) const { - const Vertex *a = edge->_a; - const Vertex *b = edge->_b; - - TYPENAME Edges::const_iterator ei; - for (ei = _edges.begin(); ei != _edges.end(); ++ei) { - Edge *e = (*ei); - - if (e->_a != a && e->_a != b) { - return e->_a; - } else if (e->_b != a && e->_b != b) { - return e->_b; - } - } - - return NULL; -} - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::find_opposite_edge -// Access: Public -// Description: Returns the first edge found that does not contain -// the given vertex. In a tri, this will be the edge -// opposite the given vertex. -//////////////////////////////////////////////////////////////////// -template -const TYPENAME MesherStrip::Edge *MesherStrip:: -find_opposite_edge(const Vertex *vertex) const { - TYPENAME Edges::const_iterator ei; - for (ei = _edges.begin(); ei != _edges.end(); ++ei) { - Edge *e = (*ei); - if (!e->contains_vertex(vertex)) { - return e; - } - } - - return NULL; -} - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::find_opposite_edge -// Access: Public -// Description: Returns the first edge found that shares no vertices -// with the given edge. In a quad, this will be the -// edge opposite the given edge. -//////////////////////////////////////////////////////////////////// -template -const TYPENAME MesherStrip::Edge *MesherStrip:: -find_opposite_edge(const Edge *edge) const { - const Vertex *a = edge->_a; - const Vertex *b = edge->_b; - - TYPENAME Edges::const_iterator ei; - for (ei = _edges.begin(); ei != _edges.end(); ++ei) { - Edge *e = (*ei); - if (!e->contains_vertex(a) && !e->contains_vertex(b)) { - return e; - } - } - - return NULL; -} - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::find_adjacent_edge -// Access: Public -// Description: Returns the first edge found that shares exactly one -// vertex with the given edge. In a quad, this will be -// one of two edges adjacent to the given edge. -//////////////////////////////////////////////////////////////////// -template -const TYPENAME MesherStrip::Edge *MesherStrip:: -find_adjacent_edge(const Edge *edge) const { - const Vertex *a = edge->_a; - const Vertex *b = edge->_b; - - TYPENAME Edges::const_iterator ei; - for (ei = _edges.begin(); ei != _edges.end(); ++ei) { - Edge *e = (*ei); - if (e->contains_vertex(a) != e->contains_vertex(b)) { - return e; - } - } - - return NULL; -} - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::rotate_to_front -// Access: Public -// Description: Rotates a triangle or quad so that the given edge is -// first in the vertex list. -//////////////////////////////////////////////////////////////////// -template -void MesherStrip:: -rotate_to_front(const Edge *edge) { - const Vertex *a = edge->_a; - const Vertex *b = edge->_b; - - // See if we're already there. - if (_verts.front() == a || _verts.front() == b) { - TYPENAME Verts::iterator vi = _verts.begin(); - ++vi; - if (*vi == a || *vi == b) { - // Yes! - return; - } - - // No, we must be right on the line. Roll back one. - rotate_back(); - - } else { - // Roll forward until it comes into view. - int num_verts = _verts.size(); - while (_verts.front() != a && _verts.front() != b) { - // Make sure either vertex exists. - num_verts--; - nassertv(num_verts > 0); - rotate_forward(); - } - } - - // Now make sure the edge actually exists. - TYPENAME Verts::iterator vi = _verts.begin(); - ++vi; - nassertv(*vi == a || *vi == b); -} - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::rotate_to_back -// Access: Public -// Description: Rotates a triangle or quad so that the given edge is -// last in the vertex list. -//////////////////////////////////////////////////////////////////// -template -void MesherStrip:: -rotate_to_back(const Edge *edge) { - const Vertex *a = edge->_a; - const Vertex *b = edge->_b; - - // See if we're already there. - if (_verts.back() == a || _verts.back() == b) { - TYPENAME Verts::reverse_iterator vi = _verts.rbegin(); - ++vi; - if (*vi == a || *vi == b) { - // Yes! - return; - } - - // No, we must be right on the line. Roll forward one. - rotate_forward(); - - } else { - // Roll backward until it comes into view. - int num_verts = _verts.size(); - while (_verts.back() != a && _verts.back() != b) { - // Make sure either vertex exists. - num_verts--; - nassertv(num_verts > 0); - rotate_back(); - } - } - - // Now make sure the edge actually exists. - TYPENAME Verts::reverse_iterator vi = _verts.rbegin(); - ++vi; - nassertv(*vi == a || *vi == b); -} - - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::can_invert -// Access: Public -// Description: Returns true if the strip can be inverted (reverse -// its facing direction). Generally, this is true for -// quadstrips and false for tristrips. -//////////////////////////////////////////////////////////////////// -template -bool MesherStrip:: -can_invert() const { - return (_type==BPT_quadstrip || _type==BPT_quad); -} - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::invert -// Access: Public -// Description: Reverses the facing of a quadstrip by reversing pairs -// of vertices. Returns true if successful, false if -// failure (for instance, on a tristrip). -//////////////////////////////////////////////////////////////////// -template -bool MesherStrip:: -invert() { - if (!can_invert()) { - return false; - } - TYPENAME Verts::iterator vi, vi2; - vi = _verts.begin(); - while (vi != _verts.end()) { - vi2 = vi; - ++vi2; - nassertr(vi2 != _verts.end(), false); - - // Exchange vi and vi2 - const Vertex *t = *vi2; - *vi2 = *vi; - *vi = t; - - // Increment - vi = vi2; - ++vi; - } - return true; -} - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::is_odd -// Access: Public -// Description: Returns true if the tristrip or quadstrip contains an -// odd number of pieces. -//////////////////////////////////////////////////////////////////// -template -bool MesherStrip:: -is_odd() const { - if (_type==BPT_quadstrip || _type==BPT_quad) { - // If a quadstrip has a multiple of four vertices, it has an - // odd number of quads. - return (_verts.size()%4 == 0); - } else { - // If a tristrip has an odd number of vertices, it has an odd - // number of tris. - return (_verts.size()%2 == 1); - } -} - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::would_reverse_tail -// Access: Public -// Description: Returns true if convert_to_type() would reverse the -// tail edge of the given strip, false otherwise. -//////////////////////////////////////////////////////////////////// -template -bool MesherStrip:: -would_reverse_tail(BuilderPrimType wantType) const { - bool reverse = false; - - if (_type==wantType) { - return false; - } - if (wantType==BPT_tristrip) { - switch (_type) { - case BPT_tri: - case BPT_tristrip: - break; - - case BPT_quad: - case BPT_quadstrip: - // When we convert a quadstrip to a tristrip, we reverse the - // tail edge if we have a multiple of four verts. - reverse = (_verts.size()%4==0); - break; - - default: - builder_cat.fatal() << "Invalid conversion!\n"; - abort(); - break; - } - - } else if (wantType==BPT_quadstrip) { - switch (_type) { - case BPT_quad: - case BPT_quadstrip: - break; - - case BPT_tri: - case BPT_tristrip: - // We don't convert tristrips to quadstrips; fall through. - - default: - builder_cat.fatal() << "Invalid conversion!\n"; - abort(); - break; - } - } - - return reverse; -} - - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::convert_to_type -// Access: Public -// Description: Converts the MesherStrip from whatever form it -// is--triangle, quad, or quadstrip--into a tristrip or -// quadstrip. -//////////////////////////////////////////////////////////////////// -template -void MesherStrip:: -convert_to_type(BuilderPrimType wantType) { - TYPENAME Verts::iterator vi, vi2; - int even; - - if (_type==wantType) { - return; - } - if (wantType==BPT_tristrip) { - switch (_type) { - case BPT_tri: - case BPT_tristrip: - break; - - case BPT_quad: - case BPT_quadstrip: - // To convert from quad/quadstrip to tristrip, we reverse every other - // pair of vertices. - - vi = _verts.begin(); - even = 0; - while (vi != _verts.end()) { - vi2 = vi; - ++vi2; - nassertv(vi2 != _verts.end()); - - // vi and vi2 are a pair. Should we reverse them? - if (even) { - const Vertex *t = *vi2; - *vi2 = *vi; - *vi = t; - } - - // Increment - vi = vi2; - ++vi; - even = !even; - } - break; - - default: - builder_cat.fatal() << "Invalid conversion!\n"; - abort(); - } - - } else if (wantType==BPT_quadstrip) { - switch (_type) { - case BPT_quad: - case BPT_quadstrip: - break; - - case BPT_tri: - case BPT_tristrip: - // We don't convert tristrips to quadstrips; fall through. - - default: - builder_cat.fatal() << "Invalid conversion!\n"; - abort(); - } - } - - _type = wantType; -} - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::combine_edges -// Access: Public -// Description: Removes the edges from the given strip and appends -// them to our own. If removeSides is true, then -// removes all the edges except the head and the tail. -//////////////////////////////////////////////////////////////////// -template -void MesherStrip:: -combine_edges(MesherStrip &other, int removeSides) { - TYPENAME Edges::iterator ei; - for (ei = other._edges.begin(); ei != other._edges.end(); ++ei) { - (*ei)->change_strip(&other, this); - } - - _edges.splice(_edges.end(), other._edges); - - if (removeSides) { - // Identify the head and tail edges so we can remove everything - // else. - Edge head = get_head_edge(); - Edge tail = get_tail_edge(); - - if (!is_odd()) { - // If the strip is odd, its true tail edge is the inverse of its - // actual edge. - tail = Edge(tail._b, tail._a); - } - - Edges junk_edges; - - TYPENAME Edges::iterator next_ei; - ei = _edges.begin(); - while (ei != _edges.end()) { - next_ei = ei; - ++next_ei; - - // Is this edge to be saved or is it fodder? - if (!(**ei == head) && !(**ei == tail)) { - // Fodder! But we can't remove it right away, because this - // will upset the current list; instead, we'll splice it to - // junk_edges. - junk_edges.splice(junk_edges.end(), _edges, ei); - } - ei = next_ei; - } - - // Now we can safely remove all the to-be-junked edges. - for (ei = junk_edges.begin(); ei != junk_edges.end(); ++ei) { - (*ei)->remove(this); - } - } -} - - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::remove_all_edges -// Access: Public -// Description: Removes all active edges from the strip. This -// effectively renders it ineligible to mate with -// anything else. -//////////////////////////////////////////////////////////////////// -template -void MesherStrip:: -remove_all_edges() { - // First, move all the edges to a safe place so we can traverse the - // list without it changing on us. - Edges junk_edges; - junk_edges.splice(junk_edges.end(), _edges); - - // Now we can safely remove all the to-be-junked edges. - TYPENAME Edges::iterator ei; - for (ei = junk_edges.begin(); ei != junk_edges.end(); ++ei) { - (*ei)->remove(this); - } -} - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::pick_mate -// Access: Public -// Description: Defines an ordering to select neighbors to mate with. -// This compares strip a with strip b and returns true -// if strip a is the preferable choice, false if strip -// b. -//////////////////////////////////////////////////////////////////// -template -bool MesherStrip:: -pick_mate(const MesherStrip &a_strip, const MesherStrip &b_strip, - const Edge &a_edge, const Edge &b_edge, - const BuilderBucket &bucket) const { - // First, try to avoid polluting quads, quadstrips, and tristrips - // with arbitrary triangles. When we mate a tri or tristrip to a - // quadstrip, we end up with a tristrip that may be less versatile - // than the original quadstrip. Better to avoid this if we can. - // Try to choose a mate that more closely matches our own type. - int a_cat = a_strip.type_category(); - int b_cat = b_strip.type_category(); - if (a_cat != b_cat) { - int me_cat = type_category(); - return abs(a_cat - me_cat) < abs(b_cat - me_cat); - } - - // Now, if we're connecting two tris, try to connect them up so they - // make good quads. - if (_type == BPT_tri && a_strip._type == BPT_tri && - b_strip._type == BPT_tri) { - - // This will depend on both coplanarity and edge length. We can't - // use just one or the other, because some tris are nearly - // isosceles, and some have more than one coplanar neighbor. - // Hopefully the combination of both factors will zero us in on - // the correct neighbor first. - - double a_coplanar = coplanarity(a_strip); - double b_coplanar = coplanarity(b_strip); - double coplanar_diff = a_coplanar - b_coplanar; - - double a_length = a_edge.compute_length(bucket); - double b_length = b_edge.compute_length(bucket); - double length_diff = (a_length - b_length) / (a_length + b_length); - - // These weights were chosen empirically to yield fairly good results. - double sum = 4.0 * coplanar_diff - 1.0 * length_diff; - return sum < 0; - } - - // Then, get the smallest strip. - if (a_strip._prims.size() != b_strip._prims.size()) { - return a_strip._prims.size() < b_strip._prims.size(); - } - - // Finally, get the strip with the fewest neighbors. - return a_strip.count_neighbors() < b_strip.count_neighbors(); -} - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::pick_sheet_mate -// Access: Public -// Description: Defines an ordering to select neighbors to follow -// when measuring out a quadsheet. This is only called -// when three or more prims share a single edge, which -// should be rarely--generally only when coplanar polys -// are going on. -//////////////////////////////////////////////////////////////////// -template -bool MesherStrip:: -pick_sheet_mate(const MesherStrip &a_strip, const MesherStrip &b_strip) const { - // First, try to get the poly which is closest to our own normal. - if (_planar && a_strip._planar && b_strip._planar) { - float a_diff = dot(_plane_normal, a_strip._plane_normal); - float b_diff = dot(_plane_normal, b_strip._plane_normal); - - if (fabs(a_diff - b_diff) > 0.0001f) { - return a_diff > b_diff; - } - } - - // Then, pick the one that's most like our own type. - int a_cat = a_strip.type_category(); - int b_cat = b_strip.type_category(); - if (a_cat != b_cat) { - int me_cat = type_category(); - return abs(a_cat - me_cat) < abs(b_cat - me_cat); - } - - // Oh, just pick any old one. - return false; -} - -//////////////////////////////////////////////////////////////////// -// Function: MesherStrip::output -// Access: Public -// Description: Formats the vertex for output in some sensible way. -//////////////////////////////////////////////////////////////////// -template -ostream &MesherStrip:: -output(ostream &out) const { - switch (_status) { - case MS_alive: - break; - - case MS_dead: - out << "Dead "; - break; - - case MS_done: - out << "Done "; - break; - - default: - out << "Unknown status "; - } - - switch (_type) { - case BPT_tri: - out << "Tri"; - break; - - case BPT_quad: - out << "Quad"; - break; - - case BPT_tristrip: - out << "TriStrip"; - break; - - case BPT_trifan: - out << "TriFan"; - break; - - case BPT_quadstrip: - out << "QuadStrip"; - break; - - default: - out << "Unknown"; - } - - if (_planar) { - out << " (planar)"; - } - - out << " " << _index << " ["; - - TYPENAME Verts::const_iterator vi; - for (vi = _verts.begin(); vi != _verts.end(); vi++) { - out << " " << **vi; - } - out << " ]: " << _prims.size() - << " prims, " << count_neighbors() << " neighbors"; - - show_neighbors(out); - - out << " edges"; - TYPENAME Edges::const_iterator ei; - for (ei = _edges.begin(); ei != _edges.end(); ei++) { - out << " " << (void *)(*ei); - } - - return out << "."; -} - diff --git a/panda/src/builder/mesherStrip.h b/panda/src/builder/mesherStrip.h deleted file mode 100644 index 37a8e97df5..0000000000 --- a/panda/src/builder/mesherStrip.h +++ /dev/null @@ -1,149 +0,0 @@ -// Filename: mesherStrip.h -// Created by: drose (16Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef MESHERSTRIP_H -#define MESHERSTRIP_H - -#include "pandabase.h" - -#include "mesherConfig.h" -#include "builderTypes.h" -#include "builderBucket.h" -#include "config_builder.h" - -#include "plist.h" -#include - - -template -class MesherEdge; - -template -class MesherTempl; - -enum MesherStripStatus { - MS_alive, MS_dead, MS_done, MS_paired -}; - -enum MesherStripOrigin { - MO_unknown, MO_user, MO_firstquad, MO_fanpoly, MO_mate -}; - -template -class MesherStrip { -public: - typedef PrimType Prim; - typedef TYPENAME PrimType::Vertex Vertex; - typedef TYPENAME PrimType::DAttrib SAttrib; - typedef MesherEdge Edge; - - MesherStrip() {} - MesherStrip(const PrimType &prim, int index, const BuilderBucket &bucket); - INLINE MesherStrip(const MesherStrip ©); - - Prim make_prim(const BuilderBucket &bucket); - - void measure_sheet(const Edge *edge, int new_row, - int &num_prims, int &num_rows, - int first_row_id, int this_row_id, - int this_row_distance); - void cut_sheet(int first_row_id, int do_mate, - const BuilderBucket &bucket); - - bool mate(const BuilderBucket &bucket); - bool find_ideal_mate(MesherStrip *&mate, Edge *&common_edge, - const BuilderBucket &bucket); - static bool mate_pieces(Edge *common_edge, MesherStrip &front, - MesherStrip &back, const BuilderBucket &bucket); - static bool mate_strips(Edge *common_edge, MesherStrip &front, - MesherStrip &back, BuilderPrimType type); - static bool must_invert(const MesherStrip &front, const MesherStrip &back, - bool will_reverse_back, BuilderPrimType type); - static bool convex_quad(Edge *common_edge, MesherStrip &front, - MesherStrip &back, const BuilderBucket &bucket); - - int count_neighbors() const; - ostream &show_neighbors(ostream &out) const; - - INLINE bool is_coplanar_with(const MesherStrip &other, float threshold) const; - INLINE float coplanarity(const MesherStrip &other) const; - INLINE int type_category() const; - - const Vertex *find_uncommon_vertex(const Edge *edge) const; - const Edge *find_opposite_edge(const Vertex *vertex) const; - const Edge *find_opposite_edge(const Edge *edge) const; - const Edge *find_adjacent_edge(const Edge *edge) const; - - INLINE void rotate_forward(); - INLINE void rotate_back(); - void rotate_to_front(const Edge *edge); - void rotate_to_back(const Edge *edge); - bool can_invert() const; - bool invert(); - - INLINE Edge get_head_edge() const; - INLINE Edge get_tail_edge() const; - - bool is_odd() const; - bool would_reverse_tail(BuilderPrimType wantType) const; - void convert_to_type(BuilderPrimType wantType); - - void combine_edges(MesherStrip &other, int removeSides); - void remove_all_edges(); - - // ptr equality - INLINE bool operator == (const MesherStrip &other) const; - INLINE bool operator != (const MesherStrip &other) const; - - bool pick_mate(const MesherStrip &a_strip, const MesherStrip &b_strip, - const Edge &a_edge, const Edge &b_edge, - const BuilderBucket &bucket) const; - - bool pick_sheet_mate(const MesherStrip &a_strip, - const MesherStrip &b_strip) const; - - ostream &output(ostream &out) const; - - typedef plist Prims; - typedef plist Edges; - typedef plist Verts; - - Prims _prims; - Edges _edges; - Verts _verts; - - BuilderPrimType _type; - int _index; - MesherStripStatus _status; - - int _planar; - LVector3f _plane_normal; - float _plane_offset; - int _row_id, _row_distance; - int _origin; -}; - -template -INLINE ostream &operator << (ostream &out, - const MesherStrip &strip) { - return strip.output(out); -} - -#include "mesherStrip.I" - -#endif diff --git a/panda/src/builder/mesherTempl.I b/panda/src/builder/mesherTempl.I deleted file mode 100644 index 9078002248..0000000000 --- a/panda/src/builder/mesherTempl.I +++ /dev/null @@ -1,692 +0,0 @@ -// Filename: mesherTempl.I -// Created by: drose (15Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "builderMisc.h" -#include "mesherStrip.h" -#include "mesherFanMaker.h" -#include "config_builder.h" - -#include - -template -MesherTempl:: -MesherTempl(BuilderBucket *bucket) { - _bucket = bucket; - _stripIndex = 0; - _next_strip = _done.end(); -} - -template -int MesherTempl:: -add_prim(const Prim &prim, MesherStripOrigin origin) { - if (!prim.is_valid()) { - return false; - } - - // Define an initial strip (probably of length 1) for the prim. - Strip temp_strip(prim, _stripIndex++, *_bucket); - Strips &list = choose_strip_list(temp_strip); - list.push_back(temp_strip); - Strip &strip = list.back(); - strip._origin = origin; - - int i; - int num_verts = prim.get_num_verts(); - - const Vertex **vptrs = (const Vertex **)alloca(num_verts * sizeof(Vertex *)); - EdgePtrs **eptrs = (EdgePtrs **)alloca(num_verts * sizeof(EdgePtrs *)); - - // Get the common vertex pointers for the primitive's vertices. - for (i = 0; i < num_verts; i++) { - TYPENAME Verts::value_type v(prim.get_vertex(i), EdgePtrs()); - TYPENAME Verts::iterator n = _verts.insert(v).first; - - vptrs[i] = &(*n).first; - eptrs[i] = &(*n).second; - - strip._verts.push_back(vptrs[i]); - } - - // Now identify the common edges. - if (prim.get_type() == BPT_tri || prim.get_type() == BPT_quad) { - // Polygons of arbitrary size don't get meshed, and so therefore - // don't have any edges in common with anything else. Only tris - // and quads can be meshed. (The builder normally breaks up - // larger polygons into tris, though the user can choose to defeat - // this.) - - for (i = 0; i < num_verts; i++) { - // Define an inner and outer edge. A polygon shares an edge with a - // neighbor only when one of its inner edges matches a neighbor's - // outer edge (and vice-versa). - Edge inner(vptrs[i], vptrs[(i+1) % num_verts]); - Edge outer(vptrs[(i+1) % num_verts], vptrs[i]); - - // Add it to the list and get its common pointer. - Edge &inner_ref = (Edge &)*_edges.insert(inner).first; - Edge &outer_ref = (Edge &)*_edges.insert(outer).first; - - // Tell the edges about each other. - inner_ref._opposite = &outer_ref; - outer_ref._opposite = &inner_ref; - - // Associate the common edge to the strip. - strip._edges.push_back(&inner_ref); - - // Associate the strip, as well as the original prim, to the edge. - outer_ref._strips.push_back(&strip); - - // Associate the common edge with the vertices that share it. - // Edge *edge_ptr = inner_ref.common_ptr(); - eptrs[i]->insert(&outer_ref); - eptrs[(i+1) % num_verts]->insert(&outer_ref); - } - } - return true; -} - - -template -void MesherTempl:: -mesh() { - if (_bucket->_consider_fans) { - find_fans(); - } - - // First, we try to make all the best quads we can. - if (_bucket->_retesselate_coplanar) { - make_quads(); - } - - // Then, we do the rest of the tris. - meshList(_tris); - - if (_bucket->_show_quads) { - // If we're showing quads, we shouldn't do any more meshing. - TYPENAME Strips::iterator si; - for (si = _quads.begin(); si != _quads.end(); ++si) { - if ((*si)._status == MS_alive) { - (*si)._status = MS_done; - } - } - for (si = _strips.begin(); si != _strips.end(); ++si) { - if ((*si)._status == MS_alive) { - (*si)._status = MS_done; - } - } - } - - // Then, build quads into sheets where possible. - build_sheets(); - - // Pick up any quads that might have been left behind. - meshList(_quads); - - // Finally, do the longer strips. - meshList(_strips); - - // Get ready to walk through the results. - _next_strip = _done.begin(); -} - - -template -PrimType MesherTempl:: -getPrim() { - if (_next_strip == _done.end()) { - // End of the list, return a primitive with no vertices. - finalize(); - return Prim(); - } - - Strip &strip = (*_next_strip++); - BuilderPrimType orig_type = strip._type; - Prim prim = strip.make_prim(*_bucket); - - if (_bucket->_show_tstrips) { - // If we have _show_tstrips enabled, it means we need to color - // every primitive according to which, if any, tristrip it is in. - - // We use the _colors array--and later make a copy in shared - // memory for the bucket to point to--in case the primitives are - // indexed. If the primitives are nonindexed, we'll still - // allocate the _colors array and its copy in shared memory, but - // it will be deleted when the bucket destructs. - - if (_colors.empty()) { - // We need one entry for not-a-tristrip, indicated by white. - _colors.push_back(Colorf(0.85, 0.85, 0.85, 1.0)); - } - - ushort i1, i2; - Colorf color1, color2;; - - switch (prim.get_type()) { - case BPT_tristrip: - case BPT_trifan: - make_random_color(color2); - color1 = (color2 * 0.8); // somewhat darker. - i1 = _colors.size(); - i2 = i1+1; - _colors.push_back(color1); - _colors.push_back(color2); - break; - - default: - // not-a-tristrip. - i1 = i2 = 0; - } - - // Now i1 and i2 index into the colors array to indicate the color - // for the first triangle and the rest of the primitive, - // respectively. - int num_components = prim.get_num_components(); - if (num_components > 0) { - prim.get_component(0).set_color_value(&_colors[0], i1); - for (int i = 1; i < num_components; i++) { - prim.get_component(i).set_color_value(&_colors[0], i2); - } - } else { - prim.set_color_value(&_colors[0], i1); - } - - } else if (_bucket->_show_qsheets) { - // _show_qsheets means to color every primitive according to - // which, if any, quadsheet it is in. This is a bit easier, - // because the entire primitive gets the same color. - - if (_colors.empty()) { - // We need one entry for not-a-qsheet, indicated by white. - _colors.push_back(Colorf(0.85, 0.85, 0.85, 1.0)); - } - - // Is this a quadsheet? - ushort i1 = 0; - if (strip._row_id < 0) { - // Yep! Assign a new color, if it doesn't already have one. - ColorSheetMap::iterator ci = _color_sheets.find(strip._row_id); - - if (ci == _color_sheets.end()) { - Colorf color1; - make_random_color(color1); - i1 = _colors.size(); - _colors.push_back(color1); - _color_sheets[strip._row_id] = i1; - } else { - i1 = (*ci).second; - } - } - - // Now i1 is the color we want to assign to the whole primitive. - // Just set all vertices to the same color. - int num_verts = prim.get_num_verts(); - for (int i = 0; i < num_verts; i++) { - prim.get_vertex(i).set_color_value(&_colors[0], i1); - } - - } else if (_bucket->_show_quads) { - // _show_quads means to show the assembling of tris into quads and fans. - - // We use the following color convention: - - // white: unchanged; as supplied by user. - // dark blue: quads made in the initial pass. These are more certain. - // light blue: quads made in the second pass. These are less certain. - // very light blue: quadstrips. These are unlikely to appear. - // random shades of red: triangles and tristrips. - // green: fans and retesselated fan polygons. - - if (_colors.empty()) { - // We need a handful of entries. - _colors.push_back(Colorf(0.85, 0.85, 0.85, 1.0)); // default: white - _colors.push_back(Colorf(0.0, 0.0, 0.75, 1.0)); // dark blue - _colors.push_back(Colorf(0.4, 0.4, 0.8, 1.0)); // light blue - _colors.push_back(Colorf(0.6, 0.6, 1.0, 1.0)); // very light blue - _colors.push_back(Colorf(0.2, 0.8, 0.2, 1.0)); // green - } - - ushort i1; - Colorf color1; - if (strip._origin == MO_user) { - i1 = 0; - } else if (strip._origin == MO_firstquad) { - i1 = 1; - } else if (strip._origin == MO_fanpoly) { - i1 = 4; - } else { - switch (orig_type) { - case BPT_quad: - i1 = 2; - break; - - case BPT_quadstrip: - i1 = 3; - break; - - case BPT_tristrip: - make_random_color(color1); - // Make it a shade of red. - if (color1[0] < color1[1]) { - float t = color1[0]; - color1[0] = color1[1]; - color1[1] = t; - } - color1[2] = color1[1]; - i1 = _colors.size(); - _colors.push_back(color1); - break; - - case BPT_trifan: - make_random_color(color1); - // Make it a shade of green. - if (color1[0] > color1[1]) { - float t = color1[0]; - color1[0] = color1[1]; - color1[1] = t; - } - color1[2] = color1[0]; - i1 = _colors.size(); - _colors.push_back(color1); - break; - - default: - i1 = 0; - } - } - - // Now i1 is the color we want to assign to the whole primitive. - // Just set all vertices to the same color. - int num_verts = prim.get_num_verts(); - for (int i = 0; i < num_verts; i++) { - prim.get_vertex(i).set_color_value(&_colors[0], i1); - } - } - - return prim; -} - - -template -void MesherTempl:: -finalize() { - if (!_colors.empty()) { - // Create an array in the bucket we might use to add to geoms. - PTA_Colorf colors=PTA_Colorf::empty_array(_colors.size()); - for (int i = 0; i < (int)_colors.size(); i++) { - colors[i] = _colors[i]; - } - _bucket->set_colors(colors); - - _colors.clear(); - _color_sheets.clear(); - } -} - - - -template -void MesherTempl:: -show(ostream &out) { - /* - out << _edges.size() << " edges:\n"; - copy(_edges.begin(), _edges.end(), ostream_iterator(out, "\n")); - */ - - out << _verts.size() << " verts:\n"; - TYPENAME Verts::const_iterator vi; - - for (vi = _verts.begin(); vi != _verts.end(); ++vi) { - const Vertex &v = (*vi).first; - const EdgePtrs &edges = (*vi).second; - out << v << " shares " << count_vert_edges(edges) << " edges:\n"; - TYPENAME EdgePtrs::const_iterator ei; - for (ei = edges.begin(); ei != edges.end(); ++ei) { - if (!(*ei)->_strips.empty() || !(*ei)->_opposite->_strips.empty()) { - out << " " << **ei << "\n"; - } - } - } - - TYPENAME Strips::const_iterator si; - out << _tris.size() << " tris:\n"; - for (si = _tris.begin(); si != _tris.end(); ++si) { - out << (*si) << "\n"; - } - - out << _quads.size() << " quads:\n"; - for (si = _quads.begin(); si != _quads.end(); ++si) { - out << (*si) << "\n"; - } - - out << _strips.size() << " strips:\n"; - for (si = _strips.begin(); si != _strips.end(); ++si) { - out << (*si) << "\n"; - } -} - - -template -int MesherTempl:: -count_vert_edges(const EdgePtrs &edges) const { - int count = 0; - TYPENAME EdgePtrs::const_iterator ei; - for (ei = edges.begin(); ei != edges.end(); ++ei) { - count += (!(*ei)->_strips.empty() || !(*ei)->_opposite->_strips.empty()); - } - return count; -} - -template -plist::Strip> &MesherTempl:: -choose_strip_list(const Strip &strip) { - switch (strip._status) { - case MS_done: - return _done; - - case MS_dead: - return _dead; - - case MS_alive: - switch (strip._type) { - case BPT_tri: - return _tris; - - case BPT_quad: - return _quads; - - default: - return _strips; - } - - default: - builder_cat.fatal() << "Invalid strip status!\n"; - abort(); - } - - return _strips; // Unreachable; this is just to make the compiler happy. -} - - -template -void MesherTempl:: -build_sheets() { - int first_row_id = 1; - - // First, move all the quads to our own internal list. - Strips pre_sheeted; - pre_sheeted.splice(pre_sheeted.end(), _quads); - - while (!pre_sheeted.empty()) { - // Pick the first quad on the list. - - TYPENAME Strips::iterator best = pre_sheeted.begin(); - - // If the row_id is negative, we've already built a sheet out of - // this quad. Leave it alone. We also need to leave it be if it - // has no available edges. - if ((*best)._row_id >= 0 && - (*best)._status == MS_alive && - !(*best)._edges.empty()) { - // There are two possible sheets we could make from this quad, - // in two different orientations. Measure them both and figure - // out which one is best. - - const Edge *edge_a = (*best)._edges.front(); - const Edge *edge_b = (*best).find_adjacent_edge(edge_a); - - int num_prims_a = 0; - int num_rows_a = 0; - int first_row_id_a = first_row_id; - (*best).measure_sheet(edge_a, true, num_prims_a, num_rows_a, - first_row_id_a, 0, 0); - first_row_id += num_rows_a; - double avg_length_a = (double)num_prims_a / (double)num_rows_a; - - int num_prims_b = 0; - int num_rows_b = 0; - int first_row_id_b = first_row_id; - double avg_length_b; - if (edge_b != NULL) { - (*best).measure_sheet(edge_b, true, num_prims_b, num_rows_b, - first_row_id_b, 0, 0); - first_row_id += num_rows_b; - avg_length_b = (double)num_prims_b / (double)num_rows_b; - } - - // Which sheet is better? - if (edge_b != NULL && avg_length_b >= avg_length_a) { - // Sheet b. That's easy. - (*best).cut_sheet(first_row_id_b, true, *_bucket); - - } else { - // Nope, sheet a is better. This is a bit of a nuisance - // because we've unfortunately wiped out the information we - // stored when we measured sheet a. We'll have to do it - // again. - - num_prims_a = 0; - num_rows_a = 0; - first_row_id_a = first_row_id; - (*best).measure_sheet(edge_a, true, num_prims_a, num_rows_a, - first_row_id_a, 0, 0); - first_row_id += num_rows_a; - - // Now we can cut it. - (*best).cut_sheet(first_row_id_a, true, *_bucket); - } - } - - // Now put it somewhere. We'll never see this quad again in - // build_sheets(). - Strips &list = choose_strip_list(*best); - list.splice(list.end(), pre_sheeted, best); - } -} - - -template -void MesherTempl:: -find_fans() { -#ifdef SUPPORT_FANS - pvector unrolled_tris; - - // Consider all vertices. Any vertex with over a certain number of - // edges connected to it is eligible to become a fan. - - TYPENAME Verts::iterator vi; - - for (vi = _verts.begin(); vi != _verts.end(); ++vi) { - EdgePtrs &edges = (*vi).second; - - // 14 is the magic number of edges. 12 edges or fewer are likely - // to be found on nearly every vertex in a quadsheet (six edges - // times two, one each way). We don't want to waste time fanning - // out each vertex of a quadsheet, and we don't want to break up - // the quadsheets anyway. We bump this up to 14 because some - // quadsheets are defined with triangles flipped here and there. - if (edges.size() > 6) { - const Vertex &v = (*vi).first; - - // Build up a list of far fan edges. - typedef pvector FanMakers; - - FanMakers fans; - - TYPENAME EdgePtrs::iterator ei; - TYPENAME Edge::Strips::iterator si; - for (ei = edges.begin(); ei != edges.end(); ++ei) { - for (si = (*ei)->_strips.begin(); - si != (*ei)->_strips.end(); - ++si) { - Strip *strip = *si; - if (strip->_type == BPT_tri) { - FanMaker fan(&v, strip, this); - if (!fan._edges.empty()) { - fans.push_back(fan); - } - } - } - } - - // Sort the fans list by edge pointers, and remove duplicates. - sort(fans.begin(), fans.end()); - fans.erase(unique(fans.begin(), fans.end()), - fans.end()); - - TYPENAME FanMakers::iterator fi, fi2; - - // Now pull out connected edges. - int joined_any; - do { - joined_any = false; - for (fi = fans.begin(); fi != fans.end(); ++fi) { - if (!(*fi).is_empty()) { - fi2 = fi; - for (++fi2; fi2 != fans.end(); ++fi2) { - if (!(*fi2).is_empty()) { - joined_any = (*fi).join(*fi2); - } - } - } - } - } while (joined_any); - - for (fi = fans.begin(); fi != fans.end(); ++fi) { - if ((*fi).is_valid()) { - (*fi).build(unrolled_tris); - } - } - } - } - - // Finally, add back in the triangles we might have produced by - // unrolling some of the fans. We can't add these back in safely - // until we're done traversing all the vertices and primitives we - // had in the first place (since adding them will affect the edge - // lists). - TYPENAME pvector::iterator ti; - for (ti = unrolled_tris.begin(); ti != unrolled_tris.end(); ++ti) { - add_prim(*ti); - } -#endif -} - - - -//////////////////////////////////////////////////////////////////// -// Function: MesherTempl::make_quads -// Access: Public -// Description: Attempts to join up all the single tris to its -// neighbor and reconstruct a pattern of quads, suitable -// for making into quadsheets or at least quadstrips. -//////////////////////////////////////////////////////////////////// -template -void MesherTempl:: -make_quads() { - // Ideally, we want to match tris across their hypotenuse to make a - // pattern of quads. (This assumes that we are working with a - // triangulated mesh pattern, of course. If we have some other - // pattern of tris, all bets are off and it doesn't really matter - // anyway.) - - // First, we'll find all the tris that have no doubt about their - // ideal mate, and pair them up right away. The others we'll get to - // later. This way, the uncertain matches won't pollute the quad - // alignment for everyone else. - - typedef pair Pair; - typedef pair Matched; - typedef pvector SoulMates; - - SoulMates soulmates; - - Strip *tri, *mate, *mate2; - Edge *common_edge, *common_edge2; - - TYPENAME Strips::iterator si; - for (si = _tris.begin(); si != _tris.end(); ++si) { - tri = &(*si); - - if (tri->_status == MS_alive) { - if (tri->find_ideal_mate(mate, common_edge, *_bucket)) { - // Does our chosen mate want us too? - if (mate->_type == BPT_tri && mate->_status == MS_alive && - mate->find_ideal_mate(mate2, common_edge2, *_bucket) && - mate2 == tri) { - // Hooray! - soulmates.push_back(Matched(Pair(tri, mate), common_edge)); - // We'll temporarily mark the two tris as paired. - tri->_status = MS_paired; - mate->_status = MS_paired; - } - } - } - } - - // Now that we've found all the tris that are sure about each other, - // mate them. - TYPENAME SoulMates::iterator mi; - for (mi = soulmates.begin(); mi != soulmates.end(); ++mi) { - tri = (*mi).first.first; - mate = (*mi).first.second; - common_edge = (*mi).second; - - nassertv(tri->_status == MS_paired); - nassertv(mate->_status == MS_paired); - tri->_status = MS_alive; - mate->_status = MS_alive; - - Strip::mate_pieces(common_edge, *tri, *mate, *_bucket); - tri->_origin = MO_firstquad; - } - - // Now move all the strips off the tri list that no longer belong. - TYPENAME Strips::iterator next; - si = _tris.begin(); - while (si != _tris.end()) { - next = si; - ++next; - - Strips &list = choose_strip_list(*si); - if (&list != &_tris) { - list.splice(list.end(), _tris, si); - } - - si = next; - } -} - -template -void MesherTempl:: -meshList(Strips &strips) { - while (!strips.empty()) { - // Pick the first strip on the list. - - TYPENAME Strips::iterator best = strips.begin(); - - if ((*best)._status == MS_alive) { - (*best).mate(*_bucket); - } - - // Put the strip back on the end of whichever list it wants. This - // might be the same list, if the strip is still alive, or it - // might be _done or _dead. - Strips &list = choose_strip_list(*best); - list.splice(list.end(), strips, best); - } -} diff --git a/panda/src/builder/mesherTempl.h b/panda/src/builder/mesherTempl.h deleted file mode 100644 index 9e1785cad6..0000000000 --- a/panda/src/builder/mesherTempl.h +++ /dev/null @@ -1,91 +0,0 @@ -// Filename: mesherTempl.h -// Created by: drose (15Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// -#ifndef MESHERTEMPL_H -#define MESHERTEMPL_H - -#include "pandabase.h" - -#include "mesherConfig.h" -#include "builderBucket.h" -#include "mesherEdge.h" -#include "mesherStrip.h" - -#include "pvector.h" -#include "plist.h" -#include "pset.h" -#include "pmap.h" - -template -class MesherFanMaker; - -template -class MesherTempl { -public: - typedef PrimType Prim; - typedef TYPENAME PrimType::Vertex Vertex; - typedef TYPENAME PrimType::DAttrib MAttrib; - typedef MesherEdge Edge; - typedef MesherStrip Strip; - typedef MesherFanMaker FanMaker; - - MesherTempl(BuilderBucket *bucket); - - int add_prim(const Prim &prim, MesherStripOrigin origin = MO_user); - void mesh(); - Prim getPrim(); - - void finalize(); - - void show(ostream &out); - -protected: - typedef plist Strips; - typedef pset > Edges; - typedef pset > EdgePtrs; - typedef pmap > Verts; - - // This is used for show-tstrips. - typedef pvector Colors; - // And this is used for show-qsheets. - typedef pmap > ColorSheetMap; - - int count_vert_edges(const EdgePtrs &edges) const; - plist &choose_strip_list(const Strip &strip); - - void build_sheets(); - void find_fans(); - void make_quads(); - void meshList(Strips &strips); - - Strips _tris, _quads, _strips; - Strips _dead, _done; - Verts _verts; - Edges _edges; - int _stripIndex; - BuilderBucket *_bucket; - TYPENAME Strips::iterator _next_strip; - Colors _colors; - ColorSheetMap _color_sheets; - - friend class MesherStrip; - friend class MesherFanMaker; -}; - -#include "mesherTempl.I" - -#endif diff --git a/panda/src/builder/test_builder.cxx b/panda/src/builder/test_builder.cxx deleted file mode 100644 index de9921d694..0000000000 --- a/panda/src/builder/test_builder.cxx +++ /dev/null @@ -1,211 +0,0 @@ -// Filename: test_builder.cxx -// Created by: drose (09Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "builder.h" -#include "builderPrim.h" -#include "mesher.h" - -#include "notify.h" -#include "geom.h" -#include "geomNode.h" -#include "namedNode.h" -#include "dftraverser.h" -#include "traverserVisitor.h" -#include "renderRelation.h" -#include "nullTransitionWrapper.h" -#include "nullLevelState.h" -#include "pta_Vertexf.h" -#include "pta_Normalf.h" -#include "pta_Colorf.h" -#include "pta_TexCoordf.h" - -class polygon : public BuilderPrimI { -public: -}; - -extern int hedface_vt_len; -extern Vertexf hedface_vt[]; -extern polygon polys[]; -extern int num_polys; - - -class ReportGeoms : - public TraverserVisitor { -public: - bool reached_node(Node *node, const NullTransitionWrapper &, NullLevelState &); -}; - -bool ReportGeoms:: -reached_node(Node *node, const NullTransitionWrapper &, NullLevelState &) { - if (node->is_of_type(GeomNode::get_class_type())) { - GeomNode *geomNode = (GeomNode *)node; - nout << "\n" << *geomNode << ", " << geomNode->get_num_geoms() - << " geoms:\n"; - int num_geoms = geomNode->get_num_geoms(); - for (int i = 0; i < num_geoms; i++) { - dDrawable *draw = geomNode->get_geom(i); - Geom *geom = DCAST(Geom, draw); - nout << *geom << ":\n"; - geom->output_verbose(nout); - } - - } else { - nout << *node << "\n"; - } - return true; -} - -int -main(void) { - -#if 1 - NamedNode *root = new NamedNode("root"); - - Builder builder; - - PTA_Vertexf v_array(hedface_vt_len); - int i; - for (i = 0; i < hedface_vt_len; i++) { - v_array[i] = hedface_vt[i]; - } - PTA_Colorf c_array(num_polys); - for (i = 0; i < num_polys; i++) { - c_array[i].set(1.0, 1.0, 1.0, 1.0); - } - - BuilderBucket bucket; - bucket._node = root; - bucket.set_coords(v_array); - bucket.set_colors(c_array); - bucket._mesh = true; - - for (i = 0; i < num_polys; i++) { - polys[i].set_color(i); - // nout << "Adding polygon " << i << ": " << polys[i] << "\n"; - builder.add_prim_nonindexed(bucket, polys[i]); - } - - ReportGeoms rg; - - GeomNode *gn = builder.build(); - nout << "Built " << (void *)gn << "\n"; - if (gn != NULL) { - NullLevelState level_state; - rg.reached_node(gn, NullTransitionWrapper(), level_state); - } - - nout << "\nTraversing root:\n"; - df_traverse(root, rg, NullTransitionWrapper(), NullLevelState(), - RenderRelation::get_class_type()); - -#else - Builder builder; - BuilderPrimI prim; - - BuilderBucket bucket; - - ushort p = 0; - int xi, yi; - xi = 4; - yi = xi; - - int x, y; - PTA_Vertexf coords(xi * yi); - PTA_Normalf normals(xi * yi); - PTA_Colorf colors(3); - - double xv, yv, zv; - for (y = 0; y < yi; y++) { - for (x = 0; x < xi; x++) { - xv = (double)x / (double)(xi-1) - 0.5; - yv = (double)y / (double)(yi-1) - 0.5; - - //zv = (y <= x) ? 0.0 : ((float)(y-x)*(y-x) / (float)(yi)); - //zv = sqrt(1.0 - (xv*xv + yv*yv)); - //zv = sqrt(1.0 - (xv*xv + yv*yv)); - //zv = sqrt(max(0.25 - (xv*xv + yv*yv), 0.0)); - zv = 0.0; - - p = y*xi + x; - coords[p].set(xv, yv, zv); - } - } - - for (y = 0; y < yi-1; y++) { - for (x = 0; x < xi-1; x++) { - p = y*xi + x; - pfVec3 p1 = coords[p+xi]; - pfVec3 p2 = coords[p]; - pfVec3 p3 = coords[p+1]; - normals[p] = normalize(cross(p1-p2, p2-p3)); - } - } - - colors[0].set(1.0, 1.0, 1.0, 1.0); - colors[1].set(1.0, 0.0, 0.0, 1.0); - colors[2].set(0.0, 0.0, 1.0, 1.0); - - bucket.set_coords(coords); - bucket.set_normals(normals); - bucket.set_colors(colors); - - bucket.setAttr(PFSTATE_FRONTMTL, new pfMaterial); - bucket.setMode(PFSTATE_ENLIGHTING, PF_ON); - - bucket._mesh = true; - bucket._max_tfan_angle = 60; - bucket._show_tstrips = true; - bucket._retesselate_coplanar = true; - builder.add_bucket(bucket); - - nout << "Adding polygons.\n"; - for (y = 0; y < yi-1; y++) { - for (x = 0; x < xi-1; x++) { - p = y*xi + x; - BuilderVertexI bv0(p), bv1(p+1), bv4(p+xi), bv5(p+xi+1); - if (p==0) { - builder.add_prim(BuilderPrimI(bv0, bv5, bv4).set_color(1)); - builder.add_prim(BuilderPrimI(bv1, bv5, bv0).set_color(1)); - } else if (p==5) { - builder.add_prim(BuilderPrimI(bv0, bv5, bv4).set_color(1)); - builder.add_prim(BuilderPrimI(bv1, bv5, bv0).set_color(1)); - } else if (p==1 || p==4) { - builder.add_prim(BuilderPrimI(bv0, bv1, bv4).set_color(1)); - builder.add_prim(BuilderPrimI(bv1, bv5, bv4).set_color(1)); - } else { - builder.add_prim(BuilderPrimI(bv0, bv5, bv4).set_color(0)); - builder.add_prim(BuilderPrimI(bv1, bv5, bv0).set_color(0)); - } - - } - } - - nout << "Building.\n"; - pfNode *root = builder.build_all_buckets(); - - if (root!=NULL) { - report_geosets(root); - } - - pfdStoreFile(root, "builder.pfa"); - -#endif - - return 0; -} - diff --git a/panda/src/builder/test_builder_data.cxx b/panda/src/builder/test_builder_data.cxx deleted file mode 100644 index 4f8f375536..0000000000 --- a/panda/src/builder/test_builder_data.cxx +++ /dev/null @@ -1,718 +0,0 @@ -// Filename: test_builder_data.cxx -// Created by: drose (11Sep97) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "builderPrim.h" - -int hedface_vt_len = 337; -Vertexf hedface_vt[337] = { - Vertexf(), - Vertexf(0.045221, 6.59701, 0.374149), - Vertexf(0.051493, 6.53504, 0.41213), - Vertexf(-0.004945, 6.54228, 0.460135), - Vertexf(-0.006027, 6.59713, 0.428656), - Vertexf(-0.163023, 6.4847, 0.375736), - Vertexf(-0.204045, 6.4752, 0.347943), - Vertexf(-0.18025, 6.50566, 0.329401), - Vertexf(-0.159739, 6.51041, 0.343297), - Vertexf(-0.041928, 6.54233, 0.460079), - Vertexf(-0.040616, 6.59717, 0.428604), - Vertexf(0.116272, 6.4844, 0.376158), - Vertexf(0.119393, 6.45869, 0.408606), - Vertexf(0.057765, 6.47306, 0.45011), - Vertexf(-0.003863, 6.48744, 0.491613), - Vertexf(0.157357, 6.47482, 0.348488), - Vertexf(0.181021, 6.44431, 0.367102), - Vertexf(-0.098236, 6.5352, 0.411904), - Vertexf(-0.091699, 6.59716, 0.373943), - Vertexf(0.113151, 6.51012, 0.343709), - Vertexf(0.05625, 6.68185, 0.38825), - Vertexf(0.052935, 6.65809, 0.388478), - Vertexf(0.038183, 6.65814, 0.391172), - Vertexf(0.038209, 6.68243, 0.390851), - Vertexf(-0.08114, 6.70556, 0.357325), - Vertexf(-0.074757, 6.70668, 0.327237), - Vertexf(-0.06435, 6.75423, 0.318492), - Vertexf(-0.076311, 6.74108, 0.348446), - Vertexf(0.056607, 6.65772, 0.361073), - Vertexf(0.056632, 6.68102, 0.360765), - Vertexf(0.050611, 6.65837, 0.333519), - Vertexf(-0.105274, 6.67711, 0.384106), - Vertexf(-0.102005, 6.6582, 0.384442), - Vertexf(-0.10409, 6.65786, 0.358346), - Vertexf(-0.104068, 6.6782, 0.358076), - Vertexf(0.133694, 6.50533, 0.329875), - Vertexf(-0.056482, 6.84607, 0.309156), - Vertexf(-0.053944, 6.80178, 0.309746), - Vertexf(-0.088991, 6.83803, 0.302363), - Vertexf(-0.07393, 6.90532, 0.300343), - Vertexf(0.028345, 6.90521, 0.300498), - Vertexf(0.043257, 6.83789, 0.302563), - Vertexf(0.008112, 6.80171, 0.30984), - Vertexf(0.010745, 6.846, 0.309258), - Vertexf(-0.094717, 6.80544, 0.300714), - Vertexf(-0.194166, 6.81436, 0.278684), - Vertexf(-0.162377, 6.84458, 0.287335), - Vertexf(-0.103944, 6.82835, 0.296707), - Vertexf(-0.204143, 6.94657, 0.295928), - Vertexf(-0.201354, 6.95975, 0.298222), - Vertexf(-0.169019, 6.95635, 0.305305), - Vertexf(-0.178088, 6.94025, 0.302407), - Vertexf(-0.087574, 6.65823, 0.388024), - Vertexf(-0.087552, 6.67872, 0.387753), - Vertexf(-0.039303, 6.65201, 0.397128), - Vertexf(0.051495, 6.70678, 0.35635), - Vertexf(0.033453, 6.70736, 0.358952), - Vertexf(-0.036388, 6.44535, 0.478493), - Vertexf(-0.023597, 6.43031, 0.477217), - Vertexf(-0.098546, 6.43648, 0.44227), - Vertexf(-0.100206, 6.44582, 0.442143), - Vertexf(-0.164024, 6.44429, 0.404327), - Vertexf(-0.163195, 6.43863, 0.404403), - Vertexf(-0.227839, 6.44475, 0.366484), - Vertexf(0.11709, 6.44598, 0.404725), - Vertexf(0.13215, 6.4488, 0.39385), - Vertexf(0.168279, 6.44653, 0.364598), - Vertexf(0.038949, 6.65899, 0.336169), - Vertexf(-0.007109, 6.65198, 0.397178), - Vertexf(0.046712, 6.70598, 0.324792), - Vertexf(0.036091, 6.73257, 0.383482), - Vertexf(0.027241, 6.74335, 0.351049), - Vertexf(-0.024001, 6.23599, 0.606704), - Vertexf(-0.024029, 6.21889, 0.613174), - Vertexf(-0.046614, 6.21572, 0.610968), - Vertexf(-0.051099, 6.234, 0.60249), - Vertexf(0.003109, 6.23394, 0.602571), - Vertexf(-0.001441, 6.21567, 0.611036), - Vertexf(-0.042134, 6.20409, 0.627544), - Vertexf(-0.039909, 6.2022, 0.648599), - Vertexf(-0.024097, 6.19903, 0.644253), - Vertexf(-0.024073, 6.19793, 0.627118), - Vertexf(-0.024129, 6.18605, 0.656217), - Vertexf(-0.010583, 6.1849, 0.660713), - Vertexf(-0.008288, 6.20216, 0.648647), - Vertexf(-0.02414, 6.18435, 0.662939), - Vertexf(-0.024101, 6.20376, 0.650817), - Vertexf(-0.085163, 6.65912, 0.335982), - Vertexf(-0.024152, 6.1629, 0.656118), - Vertexf(-0.035442, 6.16465, 0.655261), - Vertexf(-0.037687, 6.18493, 0.660672), - Vertexf(-0.024131, 6.15434, 0.63571), - Vertexf(-0.033164, 6.15576, 0.63633), - Vertexf(-0.012855, 6.16463, 0.655295), - Vertexf(-0.015095, 6.15574, 0.636358), - Vertexf(-0.02403, 6.20933, 0.606675), - Vertexf(-0.005995, 6.20405, 0.627598), - Vertexf(-0.024063, 6.20715, 0.627798), - Vertexf(-0.024144, 6.1681, 0.653605), - Vertexf(-0.003116, 6.4359, 0.174903), - Vertexf(-0.043102, 6.43593, 0.174842), - Vertexf(-0.043515, 6.48837, 0.174148), - Vertexf(-0.002372, 6.48835, 0.174209), - Vertexf(0.115485, 6.41793, 0.441265), - Vertexf(0.049948, 6.38957, 0.515453), - Vertexf(0.051474, 6.43632, 0.442496), - Vertexf(0.11625, 6.44229, 0.404773), - Vertexf(0.11793, 6.44966, 0.404678), - Vertexf(0.054838, 6.455, 0.442254), - Vertexf(0.053156, 6.44566, 0.442375), - Vertexf(-0.215724, 6.44831, 0.36377), - Vertexf(-0.178985, 6.44921, 0.393528), - Vertexf(0.132116, 6.43478, 0.376846), - Vertexf(0.081514, 6.43627, 0.276983), - Vertexf(0.125673, 6.433, 0.277093), - Vertexf(-0.023729, 6.39172, 0.536235), - Vertexf(-0.16259, 6.41625, 0.440871), - Vertexf(0.081667, 6.43492, 0.175042), - Vertexf(0.042326, 6.43548, 0.174976), - Vertexf(0.042875, 6.48598, 0.174308), - Vertexf(0.082021, 6.48349, 0.1744), - Vertexf(-0.010775, 6.44532, 0.478531), - Vertexf(-0.179019, 6.43519, 0.376525), - Vertexf(-0.128071, 6.43656, 0.276666), - Vertexf(-0.088566, 6.43707, 0.276718), - Vertexf(-0.120423, 6.43613, 0.41066), - Vertexf(-0.179061, 6.48408, 0.349586), - Vertexf(-0.128102, 6.48581, 0.276014), - Vertexf(-0.166981, 6.48194, 0.276007), - Vertexf(0.073698, 6.44983, 0.427624), - Vertexf(0.073664, 6.43581, 0.410621), - Vertexf(0.13215, 6.4488, 0.39385), - Vertexf(-0.053819, 6.48884, 0.416828), - Vertexf(-0.043668, 6.48972, 0.276088), - Vertexf(-0.088788, 6.48758, 0.276049), - Vertexf(-0.12075, 6.48629, 0.383705), - Vertexf(0.007052, 6.45585, 0.460591), - Vertexf(0.00726, 6.48879, 0.416675), - Vertexf(-0.054026, 6.45591, 0.460743), - Vertexf(0.132646, 6.483, 0.349918), - Vertexf(0.081868, 6.48484, 0.276341), - Vertexf(0.042723, 6.48733, 0.276249), - Vertexf(0.074482, 6.48596, 0.383667), - Vertexf(0.120223, 6.48035, 0.276458), - Vertexf(0.168279, 6.44653, 0.364598), - Vertexf(-0.053173, 6.45076, 0.460301), - Vertexf(-0.053207, 6.43674, 0.443297), - Vertexf(0.006154, 6.43669, 0.443142), - Vertexf(0.006188, 6.45071, 0.460146), - Vertexf(-0.088413, 6.43573, 0.174777), - Vertexf(-0.043255, 6.43728, 0.276783), - Vertexf(-0.002525, 6.4897, 0.27615), - Vertexf(0.11279, 6.41322, 0.399904), - Vertexf(0.181156, 6.44226, 0.277053), - Vertexf(0.112895, 6.40928, 0.325903), - Vertexf(-0.091652, 6.37645, 0.374546), - Vertexf(-0.159678, 6.40957, 0.325491), - Vertexf(-0.159784, 6.41351, 0.399492), - Vertexf(-0.091728, 6.38228, 0.4325), - Vertexf(0.042174, 6.43683, 0.276917), - Vertexf(-0.008253, 6.46035, 0.47983), - Vertexf(0.007052, 6.45585, 0.460591), - Vertexf(-0.054026, 6.45591, 0.460743), - Vertexf(-0.038879, 6.46038, 0.479784), - Vertexf(-0.04324, 6.48748, 0.491554), - Vertexf(0.006188, 6.45071, 0.460146), - Vertexf(0.073698, 6.44983, 0.427624), - Vertexf(-0.120389, 6.45015, 0.427664), - Vertexf(-0.053173, 6.45076, 0.460301), - Vertexf(-0.140225, 7.00983, 0.321446), - Vertexf(-0.123119, 7.01151, 0.328341), - Vertexf(-0.134749, 6.97962, 0.323871), - Vertexf(-0.142948, 6.98128, 0.319329), - Vertexf(0.18119, 6.42198, 0.240696), - Vertexf(0.112929, 6.389, 0.289545), - Vertexf(-0.023958, 6.27715, 0.605697), - Vertexf(-0.023963, 6.25473, 0.593607), - Vertexf(0.007645, 6.2539, 0.604398), - Vertexf(0.012162, 6.27018, 0.615932), - Vertexf(0.044667, 6.35602, 0.338395), - Vertexf(-0.023594, 6.32304, 0.387244), - Vertexf(-0.023627, 6.34332, 0.423602), - Vertexf(0.044634, 6.3763, 0.374752), - Vertexf(-0.101866, 6.45517, 0.442017), - Vertexf(-0.120958, 6.45335, 0.427621), - Vertexf(-0.179269, 6.45115, 0.393502), - Vertexf(-0.164852, 6.44996, 0.404251), - Vertexf(-0.127919, 6.43522, 0.174725), - Vertexf(-0.172614, 6.43334, 0.174683), - Vertexf(-0.166828, 6.4806, 0.174066), - Vertexf(-0.12795, 6.48446, 0.174073), - Vertexf(-0.172766, 6.43469, 0.276624), - Vertexf(-0.023673, 6.35105, 0.465508), - Vertexf(0.044558, 6.38213, 0.432706), - Vertexf(-0.166306, 6.45899, 0.408174), - Vertexf(0.114721, 6.39357, 0.477756), - Vertexf(-0.068907, 6.93005, 0.3295), - Vertexf(-0.081264, 6.91456, 0.321684), - Vertexf(0.021212, 6.29084, 0.620743), - Vertexf(-0.02399, 6.26675, 0.620987), - Vertexf(-0.023978, 6.28932, 0.628239), - Vertexf(-0.060115, 6.27026, 0.615822), - Vertexf(-0.069134, 6.29094, 0.620607), - Vertexf(-0.023865, 6.32255, 0.574454), - Vertexf(0.048421, 6.34283, 0.588411), - Vertexf(0.074274, 6.45303, 0.427583), - Vertexf(-0.161986, 6.39386, 0.477338), - Vertexf(-0.096133, 6.34298, 0.588192), - Vertexf(-0.178985, 6.44921, 0.393528), - Vertexf(-0.120389, 6.45015, 0.427664), - Vertexf(-0.091619, 6.35617, 0.338189), - Vertexf(0.077674, 7.01129, 0.328644), - Vertexf(0.08925, 6.97938, 0.324209), - Vertexf(0.035634, 6.91444, 0.32186), - Vertexf(0.023287, 6.92995, 0.329639), - Vertexf(-0.088636, 6.48623, 0.174108), - Vertexf(0.010745, 6.846, 0.309258), - Vertexf(0.015997, 6.92072, 0.308277), - Vertexf(0.094448, 7.01026, 0.32246), - Vertexf(0.15589, 6.95937, 0.298762), - Vertexf(0.123526, 6.95604, 0.305746), - Vertexf(0.097137, 6.98214, 0.319113), - Vertexf(0.030275, 6.31191, 0.617283), - Vertexf(-0.023949, 6.3137, 0.626308), - Vertexf(-0.02394, 6.29401, 0.605607), - Vertexf(-0.023916, 6.30851, 0.599061), - Vertexf(-0.003269, 6.43725, 0.276843), - Vertexf(0.091554, 6.96985, 0.299337), - Vertexf(0.08196, 6.97015, 0.302846), - Vertexf(-0.078141, 6.31202, 0.61712), - Vertexf(0.070384, 7.00207, 0.307281), - Vertexf(-0.227704, 6.44269, 0.276436), - Vertexf(-0.156456, 6.53612, 0.310859), - Vertexf(0.11003, 6.53584, 0.311261), - Vertexf(0.132438, 6.45006, 0.393834), - Vertexf(-0.097339, 6.38973, 0.515231), - Vertexf(0.132438, 6.45006, 0.393834), - Vertexf(0.074274, 6.45303, 0.427583), - Vertexf(0.120375, 6.479, 0.174517), - Vertexf(0.125825, 6.43165, 0.175152), - Vertexf(0.028345, 6.90521, 0.300498), - Vertexf(-0.159645, 6.38929, 0.289133), - Vertexf(-0.104773, 6.47324, 0.449864), - Vertexf(-0.215724, 6.44831, 0.36377), - Vertexf(-0.131591, 6.96754, 0.300267), - Vertexf(-0.161684, 6.94711, 0.283964), - Vertexf(-0.129814, 6.99298, 0.301599), - Vertexf(-0.115784, 7.00226, 0.307), - Vertexf(-0.061573, 6.9208, 0.30816), - Vertexf(-0.167969, 6.93295, 0.282982), - Vertexf(-0.040067, 6.66458, 0.505563), - Vertexf(-0.039454, 6.62437, 0.477676), - Vertexf(-0.087687, 6.65527, 0.461334), - Vertexf(-0.088272, 6.72793, 0.378401), - Vertexf(-0.088393, 6.70869, 0.445015), - Vertexf(-0.098863, 6.70395, 0.353678), - Vertexf(-0.056482, 6.84607, 0.309156), - Vertexf(-0.041096, 6.73064, 0.482186), - Vertexf(0.038076, 6.65896, 0.462433), - Vertexf(0.035976, 6.71327, 0.446101), - Vertexf(0.08381, 6.99315, 0.302152), - Vertexf(0.1486, 6.95015, 0.277399), - Vertexf(-0.00726, 6.62434, 0.477725), - Vertexf(-0.008959, 6.66524, 0.505601), - Vertexf(0.02867, 6.70656, 0.327393), - Vertexf(-0.179269, 6.45115, 0.393502), - Vertexf(0.134358, 6.93999, 0.302389), - Vertexf(0.159456, 6.94608, 0.296165), - Vertexf(0.018391, 6.75414, 0.318617), - Vertexf(-0.22767, 6.42241, 0.240078), - Vertexf(-0.069554, 7.00945, 0.310645), - Vertexf(-0.115784, 7.00226, 0.307), - Vertexf(0.163425, 6.80702, 0.199637), - Vertexf(-0.023861, 6.35313, 0.595253), - Vertexf(-0.161684, 6.94711, 0.283964), - Vertexf(-0.131591, 6.96754, 0.300267), - Vertexf(-0.127415, 6.97038, 0.30253), - Vertexf(-0.127415, 6.97038, 0.30253), - Vertexf(-0.07393, 6.90532, 0.300343), - Vertexf(0.148469, 6.8287, 0.279006), - Vertexf(0.124864, 6.92982, 0.283536), - Vertexf(-0.208912, 6.80741, 0.199075), - Vertexf(-0.147148, 6.64856, 0.281136), - Vertexf(-0.14701, 6.64735, 0.189092), - Vertexf(-0.02399, 6.22995, 0.594216), - Vertexf(-0.061573, 6.9208, 0.30816), - Vertexf(-0.046619, 6.90315, 0.320843), - Vertexf(-0.041466, 6.79966, 0.369073), - Vertexf(-0.013462, 6.80239, 0.375073), - Vertexf(0.023846, 7.00935, 0.310786), - Vertexf(0.070384, 7.00207, 0.307281), - Vertexf(-0.194019, 6.95051, 0.276882), - Vertexf(-0.011997, 6.73258, 0.482204), - Vertexf(-0.096505, 6.65755, 0.332384), - Vertexf(-0.092479, 6.70507, 0.32359), - Vertexf(0.055599, 6.80587, 0.299473), - Vertexf(0.059185, 6.82536, 0.29725), - Vertexf(-0.194037, 6.93438, 0.277095), - Vertexf(-0.194019, 6.95051, 0.276882), - Vertexf(-0.167969, 6.93295, 0.282982), - Vertexf(-0.19415, 6.82906, 0.278489), - Vertexf(-0.156387, 6.53551, 0.264837), - Vertexf(-0.024129, 6.15856, 0.637607), - Vertexf(0.1486, 6.95015, 0.277399), - Vertexf(-0.194037, 6.93438, 0.277095), - Vertexf(-0.120958, 6.45335, 0.427621), - Vertexf(0.148583, 6.93434, 0.277608), - Vertexf(-0.013559, 6.78726, 0.428727), - Vertexf(-0.041572, 6.78462, 0.42872), - Vertexf(-0.156318, 6.5349, 0.218815), - Vertexf(0.148453, 6.81399, 0.279201), - Vertexf(0.101077, 6.6483, 0.281511), - Vertexf(0.101215, 6.64708, 0.189467), - Vertexf(0.110099, 6.53523, 0.26524), - Vertexf(0.110168, 6.53462, 0.219218), - Vertexf(0.08196, 6.97015, 0.302846), - Vertexf(0.091554, 6.96985, 0.299337), - Vertexf(0.116237, 6.94682, 0.284384), - Vertexf(0.116702, 6.84429, 0.287756), - Vertexf(0.124864, 6.92982, 0.283536), - Vertexf(0.148469, 6.8287, 0.279006), - Vertexf(0.015997, 6.92072, 0.308277), - Vertexf(0.000968, 6.9031, 0.320915), - Vertexf(-0.022854, 7.0094, 0.310715), - Vertexf(-0.023987, 6.25354, 0.609743), - Vertexf(-0.023889, 6.31842, 0.587859), - Vertexf(0.039346, 6.33018, 0.605966), - Vertexf(-0.023908, 6.33618, 0.614913), - Vertexf(-0.096133, 6.34298, 0.588192), - Vertexf(-0.087138, 6.33031, 0.605775), - Vertexf(-0.023865, 6.32255, 0.574454), - Vertexf(0.048421, 6.34283, 0.588411), - Vertexf(-0.023861, 6.35313, 0.595253), - Vertexf(0.148583, 6.93434, 0.277608), - Vertexf(-0.055597, 6.25397, 0.604303), - Vertexf(0.116237, 6.94682, 0.284384), - Vertexf(-0.19415, 6.82906, 0.278489), -}; - -//#define VVAL(i) hedface_vt[i] -#define VVAL(i) i - -class polygon : public BuilderPrimI { -public: - polygon(int i, int j, int k) { - add_vertex(VVAL(i)); - add_vertex(VVAL(j)); - add_vertex(VVAL(k)); - } - polygon(int i, int j, int k, int l) { - add_vertex(VVAL(i)); - add_vertex(VVAL(j)); - add_vertex(VVAL(k)); - add_vertex(VVAL(l)); - } - polygon(int i, int j, int k, int l, int m) { - add_vertex(VVAL(i)); - add_vertex(VVAL(j)); - add_vertex(VVAL(k)); - add_vertex(VVAL(l)); - add_vertex(VVAL(m)); - } - polygon(int i, int j, int k, int l, int m, int n) { - add_vertex(VVAL(i)); - add_vertex(VVAL(j)); - add_vertex(VVAL(k)); - add_vertex(VVAL(l)); - add_vertex(VVAL(m)); - add_vertex(VVAL(n)); - } - polygon(int i, int j, int k, int l, int m, int n, int o) { - add_vertex(VVAL(i)); - add_vertex(VVAL(j)); - add_vertex(VVAL(k)); - add_vertex(VVAL(l)); - add_vertex(VVAL(m)); - add_vertex(VVAL(n)); - add_vertex(VVAL(o)); - } -}; - -polygon polys[] = { - polygon(4, 3, 2, 1), - polygon(8, 7, 6, 5), - polygon(10, 9, 3, 4), - polygon(2, 13, 12, 11), - polygon(3, 14, 13, 2), - polygon(11, 12, 16, 15), - polygon(18, 17, 9, 10), - polygon(8, 5, 17, 18), - polygon(1, 2, 11, 19), - polygon(23, 22, 21, 20), - polygon(27, 26, 25, 24), - polygon(30, 29, 28), - polygon(20, 21, 28, 29), - polygon(34, 33, 32, 31), - polygon(19, 11, 15, 35), - polygon(39, 38, 37, 36), - polygon(43, 42, 41, 40), - polygon(47, 46, 45, 44), - polygon(51, 50, 49, 48), - polygon(54, 53, 52), - polygon(31, 32, 52, 53), - polygon(56, 23, 20, 55), - polygon(55, 20, 29), - /* - polygon(60, 59, 58, 57), - polygon(63, 62, 61), - polygon(16, 66, 65, 64), - polygon(68, 67, 22), - polygon(30, 69, 55, 29), - polygon(71, 70, 23, 56), - polygon(75, 74, 73, 72), - polygon(72, 73, 77, 76), - polygon(81, 80, 79, 78), - polygon(84, 83, 82, 80), - polygon(86, 85, 83, 84), - polygon(52, 87, 54), - polygon(90, 89, 88, 85), - polygon(89, 92, 91, 88), - polygon(88, 91, 94, 93), - polygon(77, 96, 81, 95), - polygon(78, 79, 86, 97), - polygon(80, 82, 90, 79), - polygon(82, 98, 89, 90), - polygon(102, 101, 100, 99), - polygon(106, 105, 104, 103), - polygon(108, 107, 12, 13), - polygon(1, 67, 68, 4), - polygon(109, 105, 106, 64), - polygon(61, 111, 110, 63), - polygon(114, 113, 112), - polygon(104, 105, 58, 115), - polygon(62, 63, 116), - polygon(120, 119, 118, 117), - polygon(121, 58, 105, 109), - polygon(125, 124, 123, 122), - polygon(128, 127, 126), - polygon(65, 112, 130, 129), - polygon(135, 134, 133, 132), - polygon(138, 132, 137, 136), - polygon(142, 141, 140, 139), - polygon(66, 143, 114), - polygon(148, 147, 146, 145), - polygon(150, 100, 149, 124), - polygon(133, 101, 102, 151), - polygon(154, 153, 16, 152), - polygon(158, 157, 156, 155), - polygon(113, 117, 118, 159), - polygon(163, 138, 136, 160), - polygon(73, 97, 96, 77), - polygon(96, 84, 80, 81), - polygon(61, 62, 59, 60), - polygon(22, 23, 68), - polygon(9, 164, 14, 3), - polygon(109, 129, 148, 121), - polygon(57, 145, 167, 60), - polygon(172, 171, 170, 169), - polygon(174, 173, 153, 154), - polygon(178, 177, 176, 175), - polygon(182, 181, 180, 179), - polygon(186, 185, 184, 183), - polygon(190, 189, 188, 187), - polygon(122, 123, 191), - polygon(139, 140, 143), - polygon(193, 192, 181, 182), - polygon(183, 184, 138, 163), - polygon(126, 127, 134, 135), - polygon(194, 63, 186), - polygon(60, 167, 111, 61), - polygon(151, 102, 119, 141), - polygon(152, 16, 195), - polygon(66, 114, 112, 65), - polygon(141, 119, 120, 140), - polygon(170, 171, 197, 196), - polygon(200, 199, 178, 198), - polygon(202, 201, 199, 200), - polygon(204, 203, 192, 193), - polygon(136, 137, 142, 205), - polygon(207, 206, 157, 158), - polygon(167, 125, 122, 111), - polygon(191, 188, 189, 128), - polygon(128, 189, 190, 127), - polygon(210, 180, 181, 155), - polygon(214, 213, 212, 211), - polygon(206, 63, 157), - polygon(124, 149, 187, 123), - polygon(134, 215, 101, 133), - polygon(127, 190, 215, 134), - polygon(214, 217, 43), - polygon(221, 220, 219, 218), - polygon(223, 200, 198, 222), - polygon(224, 175, 201, 202), - polygon(222, 198, 224, 225), - polygon(159, 118, 99, 226), - polygon(226, 99, 100, 150), - polygon(123, 187, 188, 191), - polygon(221, 212, 228, 227), - polygon(229, 202, 200, 223), - polygon(158, 192, 203, 207), - polygon(198, 178, 175, 224), - polygon(217, 214, 211, 230), - polygon(157, 63, 231, 156), - polygon(225, 224, 202, 229), - polygon(63, 110, 185, 186), - polygon(121, 148, 145, 57), - polygon(64, 65, 129, 109), - polygon(13, 14, 160, 108), - polygon(8, 232, 7), - polygon(19, 233, 67, 1), - polygon(234, 66, 16), - polygon(62, 116, 235, 59), - polygon(149, 100, 101, 215), - polygon(205, 142, 139, 234), - polygon(145, 146, 125, 167), - polygon(160, 136, 205, 108), - polygon(108, 205, 234, 107), - polygon(117, 239, 238, 120), - polygon(103, 16, 106), - polygon(234, 139, 143, 66), - polygon(114, 239, 117, 113), - polygon(228, 212, 213, 40), - polygon(241, 210, 155, 156), - polygon(186, 183, 242, 194), - polygon(18, 87, 232, 8), - polygon(64, 106, 16), - polygon(57, 58, 121), - polygon(143, 238, 239, 114), - polygon(40, 213, 43), - polygon(111, 122, 191, 110), - polygon(129, 130, 147, 148), - polygon(112, 113, 159, 130), - polygon(147, 226, 150, 146), - polygon(146, 150, 124, 125), - polygon(172, 50, 245, 244), - polygon(169, 170, 247, 246), - polygon(247, 170, 196, 248), - polygon(249, 245, 50, 51), - polygon(252, 251, 250), - polygon(24, 53, 253, 27), - polygon(253, 53, 252, 254), - polygon(34, 31, 255), - polygon(36, 196, 197), - polygon(67, 30, 28, 21, 22), - polygon(250, 257, 254, 252), - polygon(128, 110, 191), - polygon(23, 70, 259, 258), - polygon(130, 159, 226, 147), - polygon(218, 219, 261, 260), - polygon(248, 196, 36), - polygon(263, 262, 258), - polygon(264, 69, 30, 67), - polygon(110, 128, 126, 185), - polygon(68, 262, 251, 54), - polygon(63, 206, 116), - polygon(267, 219, 220, 266), - polygon(53, 54, 251, 252), - polygon(258, 262, 68, 23), - polygon(264, 268, 71, 56), - polygon(104, 204, 195, 103), - polygon(107, 16, 12), - polygon(115, 273, 204, 104), - polygon(276, 244, 245, 46, 47, 38, 39), - polygon(39, 197, 171, 276), - polygon(235, 207, 273, 115), - polygon(280, 279, 266), - polygon(283, 282, 45, 281), - polygon(177, 76, 284, 176), - polygon(16, 107, 234), - polygon(153, 233, 35, 15), - polygon(282, 87, 25), - polygon(287, 286, 248, 36), - polygon(215, 190, 187, 149), - polygon(288, 42, 43), - polygon(250, 263, 292, 257), - polygon(255, 294, 293, 34), - polygon(24, 25, 294, 255), - polygon(296, 41, 42, 295), - polygon(258, 259, 292, 263), - polygon(56, 55, 69, 264), - polygon(43, 213, 214), - polygon(48, 49, 291, 297), - polygon(300, 45, 46, 245, 249), - polygon(140, 120, 238, 143), - polygon(301, 232, 87), - polygon(287, 37, 26), - polygon(83, 93, 98, 82), - polygon(79, 90, 85, 86), - polygon(98, 302, 92, 89), - polygon(87, 293, 294, 25), - polygon(255, 31, 53, 24), - polygon(281, 45, 300, 297, 291), - polygon(95, 81, 78, 74), - polygon(185, 126, 135, 184), - polygon(241, 269, 210), - polygon(248, 286, 270, 247), - polygon(267, 279, 306), - polygon(17, 242, 164, 9), - polygon(5, 194, 242, 17), - polygon(26, 37, 44, 45, 282, 25), - polygon(301, 87, 282), - polygon(287, 308, 307, 288), - polygon(283, 269, 309), - polygon(311, 310, 295, 42, 268, 264), - polygon(268, 42, 288), - polygon(173, 174, 179), - polygon(231, 63, 6), - polygon(272, 310, 311, 312), - polygon(314, 313, 233, 153, 173), - polygon(164, 163, 160, 14), - polygon(40, 41, 296, 318, 317, 227, 228), - polygon(314, 173, 312), - polygon(197, 39, 36), - polygon(132, 133, 151, 137), - polygon(74, 78, 97, 73), - polygon(33, 34, 293), - polygon(317, 318, 310, 279, 280), - polygon(85, 88, 93, 83), - polygon(97, 86, 84, 96), - polygon(308, 257, 292, 307), - polygon(35, 233, 19), - polygon(259, 307, 292), - polygon(33, 293, 87, 52, 32), - polygon(184, 135, 132, 138), - polygon(93, 94, 302, 98), - polygon(156, 231, 269, 241), - polygon(269, 231, 232, 301, 309), - polygon(230, 289, 322, 217), - polygon(70, 288, 307, 259), - polygon(137, 151, 141, 142), - polygon(264, 67, 311), - polygon(286, 322, 289, 323, 270), - polygon(291, 246, 247), - polygon(262, 263, 250, 251), - polygon(230, 260, 261), - polygon(257, 308, 254), - polygon(154, 152, 193, 182), - polygon(313, 314, 312, 311), - polygon(155, 181, 192, 158), - polygon(115, 58, 59, 235), - polygon(174, 154, 182, 179), - polygon(287, 288, 322, 286), - polygon(231, 6, 7, 232), - polygon(6, 63, 194, 5), - polygon(103, 195, 16), - polygon(254, 308, 287, 253), - polygon(116, 206, 207, 235), - polygon(67, 233, 313), - polygon(4, 68, 54, 10), - polygon(99, 118, 119, 102), - polygon(322, 288, 43, 217), - polygon(36, 37, 287), - polygon(199, 324, 177, 178), - polygon(326, 222, 225, 325), - polygon(302, 94, 91, 92), - polygon(183, 163, 164, 242), - polygon(327, 223, 222, 326), - polygon(203, 325, 329, 207), - polygon(152, 195, 204, 193), - polygon(204, 326, 325, 203), - polygon(284, 95, 74, 75), - polygon(15, 16, 153), - polygon(329, 229, 223, 327), - polygon(76, 77, 95, 284), - polygon(313, 311, 67), - polygon(282, 283, 309, 301), - polygon(207, 329, 327, 273), - polygon(273, 327, 326, 204), - polygon(261, 306, 279, 310, 272), - polygon(334, 75, 72, 324), - polygon(324, 72, 76, 177), - polygon(175, 176, 334, 201), - polygon(325, 225, 229, 329), - polygon(201, 334, 324, 199), - polygon(176, 284, 75, 334), - polygon(71, 268, 288, 70), - polygon(27, 253, 287, 26), - polygon(10, 54, 87, 18), - polygon(230, 211, 218, 260), - polygon(211, 212, 221, 218), - polygon(317, 220, 221, 227), - polygon(220, 317, 280, 266), - polygon(279, 267, 266), - polygon(261, 219, 267, 306), - polygon(310, 318, 296, 295), - polygon(291, 49, 169, 246), - polygon(49, 50, 172, 169), - polygon(276, 171, 172, 244), - polygon(300, 48, 297), - polygon(300, 51, 48), - polygon(300, 249, 51), - polygon(37, 38, 47, 44), - */ -}; - -int num_polys = sizeof(polys) / sizeof(polygon); diff --git a/panda/src/chan/animChannelMatrixXfmTable.I b/panda/src/chan/animChannelMatrixXfmTable.I index de69457429..fdb5238884 100644 --- a/panda/src/chan/animChannelMatrixXfmTable.I +++ b/panda/src/chan/animChannelMatrixXfmTable.I @@ -28,21 +28,6 @@ is_valid_id(char table_id) { return get_table_index(table_id) >= 0; } -//////////////////////////////////////////////////////////////////// -// Function: AnimChannelMatrixXfmTable::has_table -// Access: Public -// Description: Returns true if the indicated subtable has been -// assigned. -//////////////////////////////////////////////////////////////////// -INLINE bool AnimChannelMatrixXfmTable:: -has_table(char table_id) const { - int table_index = get_table_index(table_id); - if (table_index < 0) { - return false; - } - return !(_tables[table_index] == (const float *)NULL); -} - //////////////////////////////////////////////////////////////////// // Function: AnimChannelMatrixXfmTable::get_table // Access: Public @@ -58,9 +43,24 @@ get_table(char table_id) const { return _tables[table_index]; } +//////////////////////////////////////////////////////////////////// +// Function: AnimChannelMatrixXfmTable::has_table +// Access: Published +// Description: Returns true if the indicated subtable has been +// assigned. +//////////////////////////////////////////////////////////////////// +INLINE bool AnimChannelMatrixXfmTable:: +has_table(char table_id) const { + int table_index = get_table_index(table_id); + if (table_index < 0) { + return false; + } + return !(_tables[table_index] == (const float *)NULL); +} + //////////////////////////////////////////////////////////////////// // Function: AnimChannelMatrixXfmTable::clear_table -// Access: Public +// Access: Published // Description: Removes the indicated table from the definition. //////////////////////////////////////////////////////////////////// INLINE void AnimChannelMatrixXfmTable:: diff --git a/panda/src/chan/animChannelMatrixXfmTable.cxx b/panda/src/chan/animChannelMatrixXfmTable.cxx index 40ecb96ea7..f56045bea0 100644 --- a/panda/src/chan/animChannelMatrixXfmTable.cxx +++ b/panda/src/chan/animChannelMatrixXfmTable.cxx @@ -145,20 +145,6 @@ get_scale(int frame, float scale[3]) { } } - -//////////////////////////////////////////////////////////////////// -// Function: AnimChannelMatrixXfmTable::clear_all_tables -// Access: Public -// Description: Removes all the tables from the channel, and resets -// it to its initial state. -//////////////////////////////////////////////////////////////////// -void AnimChannelMatrixXfmTable:: -clear_all_tables() { - for (int i = 0; i < num_matrix_components; i++) { - _tables[i] = NULL; - } -} - //////////////////////////////////////////////////////////////////// // Function: AnimChannelMatrixXfmTable::set_table // Access: Public @@ -185,6 +171,20 @@ set_table(char table_id, const CPTA_float &table) { _tables[i] = table; } + +//////////////////////////////////////////////////////////////////// +// Function: AnimChannelMatrixXfmTable::clear_all_tables +// Access: Published +// Description: Removes all the tables from the channel, and resets +// it to its initial state. +//////////////////////////////////////////////////////////////////// +void AnimChannelMatrixXfmTable:: +clear_all_tables() { + for (int i = 0; i < num_matrix_components; i++) { + _tables[i] = NULL; + } +} + //////////////////////////////////////////////////////////////////// // Function: AnimChannelMatrixXfmTable::write // Access: Public, Virtual @@ -313,30 +313,18 @@ fillin(DatagramIterator &scan, BamReader *manager) { bool wrote_compressed = scan.get_bool(); - bool new_hpr = false; - if (manager->get_file_minor_ver() >= 14) { - // Beginning in bam 4.14, we encode a bool to indicate whether - // we used the old hpr or the new hpr calculation. Previously, - // we assume all bams used the old hpr calculation. - new_hpr = scan.get_bool(); - } + bool new_hpr = scan.get_bool(); if (!wrote_compressed) { // Regular floats. for (int i = 0; i < num_matrix_components; i++) { - if (manager->get_file_minor_ver() < 6 && i >= 3 && i < 6) { - // Old bam files didn't store a shear component. - _tables[i].clear(); - - } else { - int size = scan.get_uint16(); - PTA_float ind_table; - for (int j = 0; j < size; j++) { - ind_table.push_back(scan.get_float32()); - } - _tables[i] = ind_table; + int size = scan.get_uint16(); + PTA_float ind_table; + for (int j = 0; j < size; j++) { + ind_table.push_back(scan.get_float32()); } + _tables[i] = ind_table; } if ((!new_hpr && temp_hpr_fix) || (new_hpr && !temp_hpr_fix)) { @@ -398,18 +386,10 @@ fillin(DatagramIterator &scan, BamReader *manager) { compressor.read_reals(scan, ind_table.v()); _tables[i] = ind_table; } - if (manager->get_file_minor_ver() < 6) { - // Old bam files didn't store a shear. - _tables[3].clear(); - _tables[4].clear(); - _tables[5].clear(); - - } else { - for (i = 3; i < 6; i++) { - PTA_float ind_table = PTA_float::empty_array(0); - compressor.read_reals(scan, ind_table.v()); - _tables[i] = ind_table; - } + for (i = 3; i < 6; i++) { + PTA_float ind_table = PTA_float::empty_array(0); + compressor.read_reals(scan, ind_table.v()); + _tables[i] = ind_table; } // Read in the HPR array and store it back in the joint angles. diff --git a/panda/src/chan/animChannelMatrixXfmTable.h b/panda/src/chan/animChannelMatrixXfmTable.h index 95faed0ad7..87dabafeac 100644 --- a/panda/src/chan/animChannelMatrixXfmTable.h +++ b/panda/src/chan/animChannelMatrixXfmTable.h @@ -52,11 +52,12 @@ public: static INLINE bool is_valid_id(char table_id); + void set_table(char table_id, const CPTA_float &table); + INLINE CPTA_float get_table(char table_id) const; + PUBLISHED: void clear_all_tables(); - void set_table(char table_id, const CPTA_float &table); INLINE bool has_table(char table_id) const; - INLINE CPTA_float get_table(char table_id) const; INLINE void clear_table(char table_id); public: diff --git a/panda/src/chan/animChannelScalarTable.I b/panda/src/chan/animChannelScalarTable.I index 4af2897723..ce9a669bb0 100644 --- a/panda/src/chan/animChannelScalarTable.I +++ b/panda/src/chan/animChannelScalarTable.I @@ -19,7 +19,7 @@ //////////////////////////////////////////////////////////////////// // Function: AnimChannelScalarTable::has_table -// Access: Public +// Access: Published // Description: Returns true if the data table has been assigned. //////////////////////////////////////////////////////////////////// INLINE bool AnimChannelScalarTable:: @@ -30,7 +30,7 @@ has_table() const { //////////////////////////////////////////////////////////////////// // Function: AnimChannelScalarTable::clear_table -// Access: Public +// Access: Published // Description: Empties the data table. //////////////////////////////////////////////////////////////////// INLINE void AnimChannelScalarTable:: diff --git a/panda/src/chan/animChannelScalarTable.N b/panda/src/chan/animChannelScalarTable.N deleted file mode 100644 index 629110a2ff..0000000000 --- a/panda/src/chan/animChannelScalarTable.N +++ /dev/null @@ -1,3 +0,0 @@ -forcetype ConstPointerToArray< float > -forcetype PointerToArray< float > -forcetype PointerToBase< RefCountObj< pvector < float >>> diff --git a/panda/src/chan/animChannelScalarTable.h b/panda/src/chan/animChannelScalarTable.h index 81d4c5b9fb..1b5d791938 100644 --- a/panda/src/chan/animChannelScalarTable.h +++ b/panda/src/chan/animChannelScalarTable.h @@ -39,8 +39,9 @@ public: virtual bool has_changed(int last_frame, int this_frame); virtual void get_value(int frame, float &value); -PUBLISHED: void set_table(const CPTA_float &table); + +PUBLISHED: INLINE bool has_table() const; INLINE void clear_table(); diff --git a/panda/src/char/Sources.pp b/panda/src/char/Sources.pp index 8342216cbd..5164171953 100644 --- a/panda/src/char/Sources.pp +++ b/panda/src/char/Sources.pp @@ -14,9 +14,7 @@ characterJoint.h characterJointBundle.I \ characterJointBundle.h characterSlider.h \ characterVertexSlider.I characterVertexSlider.h \ - computedVertices.I \ - computedVertices.h computedVerticesMorph.I \ - computedVerticesMorph.h config_char.h dynamicVertices.h \ + config_char.h \ jointVertexTransform.I jointVertexTransform.h #define INCLUDED_SOURCES \ @@ -24,9 +22,7 @@ characterJoint.cxx characterJointBundle.cxx \ characterSlider.cxx \ characterVertexSlider.cxx \ - computedVertices.cxx \ - computedVerticesMorph.cxx config_char.cxx \ - dynamicVertices.cxx \ + config_char.cxx \ jointVertexTransform.cxx #define INSTALL_HEADERS \ @@ -34,9 +30,7 @@ characterJoint.h characterJointBundle.I \ characterJointBundle.h characterSlider.h \ characterVertexSlider.I characterVertexSlider.h \ - computedVertices.I \ - computedVertices.h computedVerticesMorph.I computedVerticesMorph.h \ - config_char.h dynamicVertices.h \ + config_char.h \ jointVertexTransform.I jointVertexTransform.h #define IGATESCAN all diff --git a/panda/src/char/char_composite2.cxx b/panda/src/char/char_composite2.cxx index f95773fee7..e58ae1d9f2 100644 --- a/panda/src/char/char_composite2.cxx +++ b/panda/src/char/char_composite2.cxx @@ -1,8 +1,5 @@ #include "characterSlider.cxx" #include "characterVertexSlider.cxx" -#include "computedVertices.cxx" -#include "computedVerticesMorph.cxx" -#include "dynamicVertices.cxx" #include "jointVertexTransform.cxx" diff --git a/panda/src/char/char_headers.h b/panda/src/char/char_headers.h deleted file mode 100644 index a1ffad1c14..0000000000 --- a/panda/src/char/char_headers.h +++ /dev/null @@ -1,37 +0,0 @@ -// Filename: char_headers.h -// Created by: georges (30May01) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "datagram.h" -#include "datagramIterator.h" -#include "bamReader.h" -#include "bamWriter.h" -#include "compose_matrix.h" -#include "transformTransition.h" -#include "ioPtaDatagramLinMath.h" - -#include "character.h" -#include "computedVertices.h" -#include "computedVerticesMorph.h" -#include "characterJoint.h" -#include "characterJointBundle.h" -#include "characterSlider.h" -#include "dynamicVertices.h" -#include "config_char.h" - -#pragma hdrstop - diff --git a/panda/src/char/character.I b/panda/src/char/character.I index 8887caf6eb..9389f6f316 100644 --- a/panda/src/char/character.I +++ b/panda/src/char/character.I @@ -28,17 +28,6 @@ get_bundle() const { return DCAST(CharacterJointBundle, PartBundleNode::get_bundle()); } - -//////////////////////////////////////////////////////////////////// -// Function: Character::get_computed_vertices -// Access: Published -// Description: -//////////////////////////////////////////////////////////////////// -INLINE ComputedVertices *Character:: -get_computed_vertices() const { - return _computed_vertices; -} - //////////////////////////////////////////////////////////////////// // Function: Character::get_num_parts // Access: Published diff --git a/panda/src/char/character.cxx b/panda/src/char/character.cxx index 770b5cdb41..7d0d81b5a5 100644 --- a/panda/src/char/character.cxx +++ b/panda/src/char/character.cxx @@ -18,7 +18,6 @@ #include "character.h" #include "characterJoint.h" -#include "computedVertices.h" #include "config_char.h" #include "geomNode.h" @@ -43,8 +42,6 @@ PStatCollector Character::_animation_pcollector("*:Animation"); Character:: Character(const Character ©) : PartBundleNode(copy, new CharacterJointBundle(copy.get_bundle()->get_name())), - _cv(DynamicVertices::deep_copy(copy._cv)), - _computed_vertices(copy._computed_vertices), _parts(copy._parts), _joints_pcollector(copy._joints_pcollector), _skinning_pcollector(copy._skinning_pcollector) @@ -221,14 +218,8 @@ force_update() { // Statistics PStatTimer timer(_joints_pcollector); - // First, update all the joints and sliders. + // Update all the joints and sliders. get_bundle()->force_update(); - - // Now update the vertices. - if (_computed_vertices != (ComputedVertices *)NULL) { - PStatTimer timer2(_skinning_pcollector); - _computed_vertices->update(this); - } } //////////////////////////////////////////////////////////////////// @@ -239,21 +230,11 @@ force_update() { //////////////////////////////////////////////////////////////////// void Character:: do_update() { - // First, update all the joints and sliders. - bool any_changed; + // Update all the joints and sliders. if (even_animation) { - any_changed = get_bundle()->force_update(); + get_bundle()->force_update(); } else { - any_changed = get_bundle()->update(); - } - - // Now update the vertices, if we need to. This is likely to be a - // slow operation. - if (any_changed || even_animation) { - if (_computed_vertices != (ComputedVertices *)NULL) { - PStatTimer timer2(_skinning_pcollector); - _computed_vertices->update(this); - } + get_bundle()->update(); } } @@ -383,68 +364,20 @@ r_copy_char(PandaNode *dest, const PandaNode *source, PT(Geom) Character:: copy_geom(const Geom *source, const Character *from, Character::JointMap &joint_map, Character::SliderMap &slider_map) { - if (source->is_qpgeom()) { - CPT(qpGeom) qpsource = DCAST(qpGeom, source); - CPT(qpGeomVertexFormat) format = qpsource->get_vertex_data()->get_format(); - if (format->get_animation().get_animation_type() == qpGeom::AT_none) { - // Not animated, so never mind. - return (Geom *)source; - } - - PT(qpGeom) dest = new qpGeom(*qpsource); - PT(qpGeomVertexData) vdata = dest->modify_vertex_data(); - - vdata->set_transform_table(redirect_transform_table(vdata->get_transform_table(), joint_map)); - vdata->set_transform_blend_table(redirect_transform_blend_table(vdata->get_transform_blend_table(), joint_map)); - vdata->set_slider_table(redirect_slider_table(vdata->get_slider_table(), slider_map)); - - return dest.p(); - - } else { - GeomBindType bind; - PTA_ushort index; - - PTA_Vertexf coords; - PTA_Normalf norms; - PTA_Colorf colors; - PTA_TexCoordf texcoords; - - PT(Geom) dest = (Geom *)source; - - source->get_coords(coords, index); - if ((coords != (void *)NULL) && (coords == (from->_cv._coords))) { - if (dest == source) { - dest = source->make_copy(); - } - dest->set_coords(_cv._coords, index); - } - - source->get_normals(norms, bind, index); - if (bind != G_OFF && norms == from->_cv._norms) { - if (dest == source) { - dest = source->make_copy(); - } - dest->set_normals(_cv._norms, bind, index); - } - - source->get_colors(colors, bind, index); - if (bind != G_OFF && colors == from->_cv._colors) { - if (dest == source) { - dest = source->make_copy(); - } - dest->set_colors(_cv._colors, bind, index); - } - - source->get_texcoords(texcoords, bind, index); - if (bind != G_OFF && texcoords == from->_cv._texcoords) { - if (dest == source) { - dest = source->make_copy(); - } - dest->set_texcoords(_cv._texcoords, bind, index); - } - - return dest; + CPT(GeomVertexFormat) format = source->get_vertex_data()->get_format(); + if (format->get_animation().get_animation_type() == Geom::AT_none) { + // Not animated, so never mind. + return (Geom *)source; } + + PT(Geom) dest = new Geom(*source); + PT(GeomVertexData) vdata = dest->modify_vertex_data(); + + vdata->set_transform_table(redirect_transform_table(vdata->get_transform_table(), joint_map)); + vdata->set_transform_blend_table(redirect_transform_blend_table(vdata->get_transform_blend_table(), joint_map)); + vdata->set_slider_table(redirect_slider_table(vdata->get_slider_table(), slider_map)); + + return dest; } //////////////////////////////////////////////////////////////////// @@ -672,8 +605,6 @@ register_with_read_factory() { void Character:: write_datagram(BamWriter *manager, Datagram &dg) { PartBundleNode::write_datagram(manager, dg); - _cv.write_datagram(manager, dg); - manager->write_pointer(dg, _computed_vertices); dg.add_uint16(_parts.size()); Parts::const_iterator pi; @@ -692,7 +623,6 @@ write_datagram(BamWriter *manager, Datagram &dg) { int Character:: complete_pointers(TypedWritable **p_list, BamReader *manager) { int pi = PartBundleNode::complete_pointers(p_list, manager); - _computed_vertices = DCAST(ComputedVertices, p_list[pi++]); int num_parts = _parts.size(); for (int i = 0; i < num_parts; i++) { @@ -732,8 +662,6 @@ make_from_bam(const FactoryParams ¶ms) { void Character:: fillin(DatagramIterator &scan, BamReader *manager) { PartBundleNode::fillin(scan, manager); - _cv.fillin(scan, manager); - manager->read_pointer(scan); // Read the number of parts to expect in the _parts list, and then // fill the array up with NULLs. We'll fill in the actual values in diff --git a/panda/src/char/character.h b/panda/src/char/character.h index 5e7f07a66a..bbbc5ceaef 100644 --- a/panda/src/char/character.h +++ b/panda/src/char/character.h @@ -21,7 +21,6 @@ #include "pandabase.h" -#include "computedVertices.h" #include "characterJoint.h" #include "characterSlider.h" #include "characterVertexSlider.h" @@ -61,7 +60,6 @@ public: PUBLISHED: INLINE CharacterJointBundle *get_bundle() const; - INLINE ComputedVertices *get_computed_vertices() const; INLINE int get_num_parts() const; INLINE PartGroup *get_part(int n) const; @@ -100,17 +98,6 @@ private: PT(JointVertexTransform) redirect_joint(const VertexTransform *vt, JointMap &joint_map); PT(CharacterVertexSlider) redirect_slider(const VertexSlider *vs, SliderMap &slider_map); - // These are the actual dynamic vertex pools for this Character's - // ComputedVertices--the vertices that it will recompute each frame - // based on the soft-skinning and morphing requirements. Note that - // we store this concretely, instead of as a pointer, just because - // we don't really need to make it a pointer. - DynamicVertices _cv; - - // And this is the object that animates them. It *is* a pointer, so - // it can be shared between multiple instances of this Character. - PT(ComputedVertices) _computed_vertices; - // This vector is used by the ComputedVertices object to index back // into our joints and sliders. typedef vector_PartGroupStar Parts; diff --git a/panda/src/char/characterVertexSlider.h b/panda/src/char/characterVertexSlider.h index 3331baa2d2..0dfc045117 100644 --- a/panda/src/char/characterVertexSlider.h +++ b/panda/src/char/characterVertexSlider.h @@ -29,8 +29,6 @@ // Description : This is a specialization on VertexSlider that // returns the slider value associated with a particular // CharacterSlider object. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// class EXPCL_PANDA CharacterVertexSlider : public VertexSlider { private: diff --git a/panda/src/char/computedVertices.I b/panda/src/char/computedVertices.I deleted file mode 100644 index 63ad36664c..0000000000 --- a/panda/src/char/computedVertices.I +++ /dev/null @@ -1,52 +0,0 @@ -// Filename: computedVertices.I -// Created by: drose (01Mar99) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - - - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVertices::VertexTransform::Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE ComputedVertices::VertexTransform:: -VertexTransform() { -} - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVertices::Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE ComputedVertices:: -ComputedVertices() { -} - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVertices::VertexTransform::Ordering operator -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE bool ComputedVertices::VertexTransform:: -operator < (const ComputedVertices::VertexTransform &other) const { - if (_joint_index != other._joint_index) { - return _joint_index < other._joint_index; - } - return _effect < other._effect; -} - - diff --git a/panda/src/char/computedVertices.cxx b/panda/src/char/computedVertices.cxx deleted file mode 100644 index 09f35ffb4b..0000000000 --- a/panda/src/char/computedVertices.cxx +++ /dev/null @@ -1,465 +0,0 @@ -// Filename: computedVertices.cxx -// Created by: drose (01Mar99) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - - -#include "computedVertices.h" -#include "characterJoint.h" -#include "character.h" -#include "config_char.h" - -#include "datagram.h" -#include "datagramIterator.h" -#include "bamReader.h" -#include "bamWriter.h" -#include "ioPtaDatagramLinMath.h" - -#include - -TypeHandle ComputedVertices::_type_handle; - - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVertices::VertexTransform::Copy Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -ComputedVertices::VertexTransform:: -VertexTransform(const VertexTransform ©) : - _joint_index(copy._joint_index), - _effect(copy._effect), - _vindex(copy._vindex), - _nindex(copy._nindex) -{ -} - -//////////////////////////////////////////////////////////////////// -// Function: compute_morphs -// Description: This is a utility function called by update(), below. -// It applies each of the supplied morphs to the -// vertices in the table, according to the values of the -// relevant slider. -//////////////////////////////////////////////////////////////////// -template -static void -compute_morphs(ValueType *table, const pvector &morph_list, - Character *character) { - TYPENAME pvector::const_iterator mli; - for (mli = morph_list.begin(); mli != morph_list.end(); ++mli) { - const MorphType &morph = (*mli); - const CharacterSlider *slider; - DCAST_INTO_V(slider, character->get_part(morph._slider_index)); - - float slider_value = slider->_value; - - if (slider_value != 0.0f) { - typedef TYPENAME MorphType::Morphs Morphs; - typedef TYPENAME MorphType::MorphValue MorphValue; - TYPENAME Morphs::const_iterator mi; - for (mi = morph._morphs.begin(); mi != morph._morphs.end(); ++mi) { - typedef TYPENAME MorphValue::VecType VecType; - ushort index = (*mi)._index; - const VecType &v = (*mi)._vector; - - table[index] += v * slider_value; - } - } - } -} - -//////////////////////////////////////////////////////////////////// -// Function: VertexTransform::write_datagram -// Access: Public -// Description: Function to write the important information in -// the particular object to a Datagram -//////////////////////////////////////////////////////////////////// -void ComputedVertices::VertexTransform:: -write_datagram(Datagram &dest) -{ - int i; - dest.add_int16(_joint_index); - dest.add_float32(_effect); - dest.add_uint16(_vindex.size()); - for(i = 0; i < (int)_vindex.size(); i++) - { - dest.add_uint16(_vindex[i]); - } - dest.add_uint16(_nindex.size()); - for(i = 0; i < (int)_nindex.size(); i++) - { - dest.add_uint16(_nindex[i]); - } -} - -//////////////////////////////////////////////////////////////////// -// Function: VertexTransform::read_datagram -// Access: Protected -// Description: -//////////////////////////////////////////////////////////////////// -void ComputedVertices::VertexTransform:: -read_datagram(DatagramIterator &source) -{ - int i; - _joint_index = source.get_int16(); - _effect = source.get_float32(); - int vsize = source.get_uint16(); - for(i = 0; i < vsize; i++) - { - _vindex.push_back(source.get_uint16()); - } - int nsize = source.get_uint16(); - for(i = 0; i < nsize; i++) - { - _nindex.push_back(source.get_uint16()); - } -} - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVertices::update -// Access: Public -// Description: Recomputes all of the _coords, _norms, etc. values -// based on the values in _orig_coords, _orig_norms, -// etc., and the current positions of all of the joints. -//////////////////////////////////////////////////////////////////// -void ComputedVertices:: -update(Character *character) { - nassertv(character != (Character *)NULL); - nassertv(character->_cv._coords.size() == _orig_coords.size()); - nassertv(character->_cv._norms.size() == _orig_norms.size()); - nassertv(character->_cv._texcoords.size() == _orig_texcoords.size()); - nassertv(character->_cv._colors.size() == _orig_colors.size()); - - const Vertexf *orig_coords = _orig_coords; - const Normalf *orig_norms = _orig_norms; - - memset(character->_cv._coords, 0, sizeof(Vertexf) * character->_cv._coords.size()); - memset(character->_cv._norms, 0, sizeof(Normalf) * character->_cv._norms.size()); - - if (!_vertex_morphs.empty()) { - // We have some vertex morphs. Compute them first. - int table_size = sizeof(Vertexf) * _orig_coords.size(); - Vertexf *morphed_coords = (Vertexf *)alloca(table_size); - memcpy(morphed_coords, _orig_coords, table_size); - - compute_morphs(morphed_coords, _vertex_morphs, character); - orig_coords = morphed_coords; - } - - if (!_normal_morphs.empty()) { - // We also have some normal morphs. Compute them too. - int table_size = sizeof(Normalf) * _orig_norms.size(); - Normalf *morphed_norms = (Normalf *)alloca(table_size); - memcpy(morphed_norms, _orig_norms, table_size); - - compute_morphs(morphed_norms, _normal_morphs, character); - orig_norms = morphed_norms; - } - - if (!_texcoord_morphs.empty()) { - // We have some uv morphs. These don't particularly need to be - // done before the joints are computed, but do them now anyway. - int table_size = sizeof(TexCoordf) * _orig_texcoords.size(); - - // **** Is this right? Test it! - // TexCoordf *morphed_texcoords = (TexCoordf *)alloca(table_size); - memcpy(character->_cv._texcoords, _orig_texcoords, table_size); - - compute_morphs(character->_cv._texcoords.p(), _texcoord_morphs, character); - } - - if (!_color_morphs.empty()) { - // We have some color morphs. Do these now too. - int table_size = sizeof(Colorf) * _orig_colors.size(); - - // **** Is this right? Test it! - // Colorf *morphed_colors = (Colorf *)alloca(table_size); - memcpy(character->_cv._colors, _orig_colors, table_size); - - compute_morphs(character->_cv._colors.p(), _color_morphs, character); - } - - // Now that we've computed all the morphs, it's safe to transform - // vertices into their proper coordinate space, according to the - // current positions of all the joints. - - LMatrix4f mat = LMatrix4f::ident_mat(); - int last_joint_index = -1; - - VertexTransforms::const_iterator vti; - for (vti = _transforms.begin(); vti != _transforms.end(); ++vti) { - const VertexTransform &vt = (*vti); - - // We cache the matrix from the last joint, because we are likely - // to encounter the same joint several times in a row. - if (vt._joint_index != last_joint_index) { - last_joint_index = vt._joint_index; - - // We won't encounter -1 after the first few joints. - nassertv(vt._joint_index >= 0); - CharacterJoint *joint; - DCAST_INTO_V(joint, character->get_part(vt._joint_index)); - - mat = - joint->_initial_net_transform_inverse * - joint->_net_transform; - } - - Vertices::const_iterator vi; - for (vi = vt._vindex.begin(); vi != vt._vindex.end(); ++vi) { - int i = (*vi); - character->_cv._coords[i] += (orig_coords[i] * mat) * vt._effect; - } - for (vi = vt._nindex.begin(); vi != vt._nindex.end(); ++vi) { - int i = (*vi); - character->_cv._norms[i] += (orig_norms[i] * mat) * vt._effect; - } - } -} - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVertices::make_orig -// Access: Public -// Description: Copies all the values loaded in the _coords, _norms, -// etc. arrays into the corresponding _orig_coords, -// etc. arrays. -//////////////////////////////////////////////////////////////////// -void ComputedVertices:: -make_orig(Character *character) { - nassertv(character != (Character *)NULL); - - if (character->_cv._coords.empty()) { - _orig_coords.clear(); - } else { - _orig_coords = PTA_Vertexf::empty_array(0); - _orig_coords.v() = character->_cv._coords.v(); - } - - if (character->_cv._norms.empty()) { - _orig_norms.clear(); - } else { - _orig_norms = PTA_Normalf::empty_array(0); - _orig_norms.v() = character->_cv._norms.v(); - } - - if (character->_cv._colors.empty()) { - _orig_colors.clear(); - } else { - _orig_colors = PTA_Colorf::empty_array(0); - _orig_colors.v() = character->_cv._colors.v(); - } - - if (character->_cv._texcoords.empty()) { - _orig_texcoords.clear(); - } else { - _orig_texcoords = PTA_TexCoordf::empty_array(0); - _orig_texcoords.v() = character->_cv._texcoords.v(); - } -} - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVertices::write -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -void ComputedVertices:: -write(ostream &out, Character *character) const { - VertexTransforms::const_iterator vti; - - out << "ComputedVertices:\n"; - for (vti = _transforms.begin(); vti != _transforms.end(); ++vti) { - const VertexTransform &vt = (*vti); - string name; - if (vt._joint_index >= 0) { - name = character->get_part(vt._joint_index)->get_name(); - } else { - name = "(root)"; - } - - out << " " << name << " * " << vt._effect << " : " - << vt._vindex.size() << " vertices and " - << vt._nindex.size() << " normals\n"; - } - - VertexMorphs::const_iterator vmi; - for (vmi = _vertex_morphs.begin(); vmi != _vertex_morphs.end(); ++vmi) { - out << " vertex " << (*vmi) << "\n"; - } - - NormalMorphs::const_iterator nmi; - for (nmi = _normal_morphs.begin(); nmi != _normal_morphs.end(); ++nmi) { - out << " normal " << (*nmi) << "\n"; - } - - TexCoordMorphs::const_iterator tmi; - for (tmi = _texcoord_morphs.begin(); tmi != _texcoord_morphs.end(); ++tmi) { - out << " uv " << (*tmi) << "\n"; - } - - ColorMorphs::const_iterator cmi; - for (cmi = _color_morphs.begin(); cmi != _color_morphs.end(); ++cmi) { - out << " color " << (*cmi) << "\n"; - } -} - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVertices::write_datagram -// Access: Public -// Description: Function to write the important information in -// the particular object to a Datagram -//////////////////////////////////////////////////////////////////// -void ComputedVertices:: -write_datagram(BamWriter *manager, Datagram &me) { - int i; - - me.add_uint32(_transforms.size()); - for(i = 0; i < (int)_transforms.size(); i++){ - _transforms[i].write_datagram(me); - } - - me.add_uint32(_vertex_morphs.size()); - for(i = 0; i < (int)_vertex_morphs.size(); i++){ - _vertex_morphs[i].write_datagram(me); - } - - me.add_uint32(_normal_morphs.size()); - for(i = 0; i < (int)_normal_morphs.size(); i++){ - _normal_morphs[i].write_datagram(me); - } - - me.add_uint32(_texcoord_morphs.size()); - for(i = 0; i < (int)_texcoord_morphs.size(); i++){ - _texcoord_morphs[i].write_datagram(me); - } - - me.add_uint32(_color_morphs.size()); - for(i = 0; i < (int)_color_morphs.size(); i++){ - _color_morphs[i].write_datagram(me); - } - - //Original Coordinates for vertices, colors, normals and textures - WRITE_PTA(manager, me, IPD_Vertexf::write_datagram, _orig_coords) - WRITE_PTA(manager, me, IPD_Normalf::write_datagram, _orig_norms) - WRITE_PTA(manager, me, IPD_Colorf::write_datagram, _orig_colors) - WRITE_PTA(manager, me, IPD_TexCoordf::write_datagram, _orig_texcoords) -} - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVertices::fillin -// Access: Protected -// Description: Function that reads out of the datagram (or asks -// manager to read) all of the data that is needed to -// re-create this object and stores it in the appropiate -// place -//////////////////////////////////////////////////////////////////// -void ComputedVertices:: -fillin(DatagramIterator &scan, BamReader *manager) { - int i, size; - - if (manager->get_file_minor_ver() < 10) { - size = scan.get_uint16(); - } else { - size = scan.get_uint32(); - } - for(i = 0; i < size; i++){ - VertexTransform vt; - vt.read_datagram(scan); - _transforms.push_back(vt); - } - - if (manager->get_file_minor_ver() < 10) { - size = scan.get_uint16(); - } else { - size = scan.get_uint32(); - } - for(i = 0; i < size; i++){ - ComputedVerticesMorphVertex vm; - vm.read_datagram(scan); - _vertex_morphs.push_back(vm); - } - - if (manager->get_file_minor_ver() < 10) { - size = scan.get_uint16(); - } else { - size = scan.get_uint32(); - } - for(i = 0; i < size; i++){ - ComputedVerticesMorphNormal nm; - nm.read_datagram(scan); - _normal_morphs.push_back(nm); - } - - if (manager->get_file_minor_ver() < 10) { - size = scan.get_uint16(); - } else { - size = scan.get_uint32(); - } - for(i = 0; i < size; i++){ - ComputedVerticesMorphTexCoord tm; - tm.read_datagram(scan); - _texcoord_morphs.push_back(tm); - } - - if (manager->get_file_minor_ver() < 10) { - size = scan.get_uint16(); - } else { - size = scan.get_uint32(); - } - for(i = 0; i < size; i++){ - ComputedVerticesMorphColor cm; - cm.read_datagram(scan); - _color_morphs.push_back(cm); - } - - //Original Coordinates for vertices, colors, normals and textures - READ_PTA(manager, scan, IPD_Vertexf::read_datagram, _orig_coords) - READ_PTA(manager, scan, IPD_Normalf::read_datagram, _orig_norms) - READ_PTA(manager, scan, IPD_Colorf::read_datagram, _orig_colors) - READ_PTA(manager, scan, IPD_TexCoordf::read_datagram, _orig_texcoords) -} - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVertices::make_ComputedVertices -// Access: Protected -// Description: Factory method to generate a ComputedVertices object -//////////////////////////////////////////////////////////////////// -TypedWritable* ComputedVertices:: -make_ComputedVertices(const FactoryParams ¶ms) -{ - ComputedVertices *me = new ComputedVertices; - DatagramIterator scan; - BamReader *manager; - - parse_params(params, scan, manager); - me->fillin(scan, manager); - return me; -} - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVertices::register_with_factory -// Access: Public, Static -// Description: Factory method to generate a ComputedVertices object -//////////////////////////////////////////////////////////////////// -void ComputedVertices:: -register_with_read_factory(void) -{ - BamReader::get_factory()->register_factory(get_class_type(), make_ComputedVertices); -} - - - - - diff --git a/panda/src/char/computedVertices.h b/panda/src/char/computedVertices.h deleted file mode 100644 index 09555ba0ac..0000000000 --- a/panda/src/char/computedVertices.h +++ /dev/null @@ -1,115 +0,0 @@ -// Filename: computedVertices.h -// Created by: drose (01Mar99) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef COMPUTEDVERTICES_H -#define COMPUTEDVERTICES_H - -#include "pandabase.h" - -#include "dynamicVertices.h" -#include "computedVerticesMorph.h" - -#include "vector_ushort.h" -#include "typedWritableReferenceCount.h" - -class Character; -class CharacterJoint; - -//////////////////////////////////////////////////////////////////// -// Class : ComputedVertices -// Description : These are the vertices that must be animated as part -// of the normal character animation. This includes -// vertices animated into one or more joints, as well as -// morph vertices. -//////////////////////////////////////////////////////////////////// -class EXPCL_PANDA ComputedVertices : public TypedWritableReferenceCount { -public: - INLINE ComputedVertices(); - - void update(Character *character); - void make_orig(Character *character); - - void write(ostream &out, Character *character) const; - -private: - typedef vector_ushort Vertices; - - class EXPCL_PANDA VertexTransform { - public: - INLINE VertexTransform(); - VertexTransform(const VertexTransform ©); - - short _joint_index; - float _effect; - Vertices _vindex; - Vertices _nindex; - INLINE bool operator < (const VertexTransform &other) const; - public: - void write_datagram(Datagram &dest); - void read_datagram(DatagramIterator &source); - }; - - typedef pvector VertexTransforms; - - VertexTransforms _transforms; - - typedef pvector VertexMorphs; - typedef pvector NormalMorphs; - typedef pvector TexCoordMorphs; - typedef pvector ColorMorphs; - VertexMorphs _vertex_morphs; - NormalMorphs _normal_morphs; - TexCoordMorphs _texcoord_morphs; - ColorMorphs _color_morphs; - - PTA_Vertexf _orig_coords; - PTA_Normalf _orig_norms; - PTA_Colorf _orig_colors; - PTA_TexCoordf _orig_texcoords; - -public: - static void register_with_read_factory(void); - virtual void write_datagram(BamWriter* manager, Datagram &me); - - static TypedWritable *make_ComputedVertices(const FactoryParams ¶ms); - -protected: - void fillin(DatagramIterator& scan, BamReader* manager); - -public: - virtual TypeHandle get_type() const { - return get_class_type(); - } - virtual TypeHandle force_init_type() {init_type(); return get_class_type();} - static TypeHandle get_class_type() { - return _type_handle; - } - static void init_type() { - TypedWritableReferenceCount::init_type(); - register_type(_type_handle, "ComputedVertices", - TypedWritableReferenceCount::get_class_type()); - } - -private: - static TypeHandle _type_handle; - friend class ComputedVerticesMaker; -}; - -#include "computedVertices.I" - -#endif diff --git a/panda/src/char/computedVerticesMorph.I b/panda/src/char/computedVerticesMorph.I deleted file mode 100644 index eb6cbf1b9f..0000000000 --- a/panda/src/char/computedVerticesMorph.I +++ /dev/null @@ -1,150 +0,0 @@ -// Filename: computedVerticesMorph.I -// Created by: drose (03Mar99) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "characterSlider.h" - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMorphValue2::Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE ComputedVerticesMorphValue2:: -ComputedVerticesMorphValue2(int index, const VecType &mvector) - : _index(index), _vector(mvector) { -} - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMorphValue2::Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE ComputedVerticesMorphValue2:: -ComputedVerticesMorphValue2(void){ -} - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMorphValue3::Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE ComputedVerticesMorphValue3:: -ComputedVerticesMorphValue3(int index, const VecType &mvector) - : _index(index), _vector(mvector) { -} - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMorphValue3::Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE ComputedVerticesMorphValue3:: -ComputedVerticesMorphValue3(void){ -} - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMorphValue4::Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE ComputedVerticesMorphValue4:: -ComputedVerticesMorphValue4(int index, const VecType &mvector) - : _index(index), _vector(mvector) { -} - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMorphValue4::Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE ComputedVerticesMorphValue4:: -ComputedVerticesMorphValue4(void){ -} - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMorph::Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -template -ComputedVerticesMorph:: -ComputedVerticesMorph() { - _slider_index = -1; -} - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMorph::Copy Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -template -ComputedVerticesMorph:: -ComputedVerticesMorph(const ComputedVerticesMorph ©) : - _slider_index(copy._slider_index), - _morphs(copy._morphs) -{ -} - - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMorph::output -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -template -void ComputedVerticesMorph:: -output(ostream &out) const { - out << "morph index " << _slider_index << ": " - << _morphs.size() << " points."; -} - - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMorph::write_datagram -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -template -void ComputedVerticesMorph:: -write_datagram(Datagram &dest) -{ - dest.add_int16(_slider_index); - dest.add_uint16(_morphs.size()); - for(int i = 0; i < (int)_morphs.size(); i++) - { - _morphs[i].write_datagram(dest); - } -} - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMorph::read_datagram -// Access: Protected -// Description: -//////////////////////////////////////////////////////////////////// -template -void ComputedVerticesMorph:: -read_datagram(DatagramIterator& source) -{ - _slider_index = source.get_int16(); - int size = source.get_uint16(); - for(int i = 0; i < size; i++) - { - MorphValue mv; - mv.read_datagram(source); - _morphs.push_back(mv); - } -} diff --git a/panda/src/char/computedVerticesMorph.cxx b/panda/src/char/computedVerticesMorph.cxx deleted file mode 100644 index 43cfb3727b..0000000000 --- a/panda/src/char/computedVerticesMorph.cxx +++ /dev/null @@ -1,107 +0,0 @@ -// Filename: computedVerticesMorph.cxx -// Created by: jason (23Jun00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - - -#include "computedVerticesMorph.h" - -#include "datagram.h" -#include "datagramIterator.h" -#include "bamReader.h" -#include "bamWriter.h" - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMorphValue2::write_datagram -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -void ComputedVerticesMorphValue2:: -write_datagram(Datagram &dest) -{ - dest.add_uint16(_index); - _vector.write_datagram(dest); -} - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMorphValue2::read_datagram -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -void ComputedVerticesMorphValue2:: -read_datagram(DatagramIterator &source) -{ - _index = source.get_uint16(); - _vector.read_datagram(source); -} - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMorphValue3::write_datagram -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -void ComputedVerticesMorphValue3:: -write_datagram(Datagram &dest) -{ - dest.add_uint16(_index); - _vector.write_datagram(dest); -} - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMorphValue3::read_datagram -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -void ComputedVerticesMorphValue3:: -read_datagram(DatagramIterator &source) -{ - _index = source.get_uint16(); - _vector.read_datagram(source); -} - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMorphValue4::write_datagram -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -void ComputedVerticesMorphValue4:: -write_datagram(Datagram &dest) -{ - dest.add_uint16(_index); - _vector.write_datagram(dest); -} - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMorphValue4::read_datagram -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -void ComputedVerticesMorphValue4:: -read_datagram(DatagramIterator &source) -{ - _index = source.get_uint16(); - _vector.read_datagram(source); -} - - - - - - - - - - diff --git a/panda/src/char/computedVerticesMorph.h b/panda/src/char/computedVerticesMorph.h deleted file mode 100644 index b6aab85246..0000000000 --- a/panda/src/char/computedVerticesMorph.h +++ /dev/null @@ -1,136 +0,0 @@ -// Filename: computedVerticesMorph.h -// Created by: drose (03Mar99) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef COMPUTEDVERTICESMORPH_H -#define COMPUTEDVERTICESMORPH_H - -#include "pandabase.h" -#include "vector_typedWritable.h" - -#include "luse.h" - -class CharacterSlider; -class BamReader; -class BamWriter; -class Datagram; -class DatagramIterator; -class TypedWritable; - -//////////////////////////////////////////////////////////////////// -// Class : ComputedVerticesMorphValue2 -// Description : This is a single vertex morph offset value. This is -// the amount by which the given vertex will be offset -// when the morph is full on. -//////////////////////////////////////////////////////////////////// -class EXPCL_PANDA ComputedVerticesMorphValue2 { -public: - typedef LVector2f VecType; - - INLINE ComputedVerticesMorphValue2(int index, const VecType &mvector); - INLINE ComputedVerticesMorphValue2(); - - ushort _index; - VecType _vector; - -public: - void write_datagram(Datagram &dest); - void read_datagram(DatagramIterator &source); -}; - -//////////////////////////////////////////////////////////////////// -// Class : ComputedVerticesMorphValue3 -// Description : This is a single vertex morph offset value. This is -// the amount by which the given vertex will be offset -// when the morph is full on. -//////////////////////////////////////////////////////////////////// -class EXPCL_PANDA ComputedVerticesMorphValue3 { -public: - typedef LVector3f VecType; - - INLINE ComputedVerticesMorphValue3(int index, const VecType &mvector); - INLINE ComputedVerticesMorphValue3(); - - ushort _index; - VecType _vector; - -public: - void write_datagram(Datagram &dest); - void read_datagram(DatagramIterator &source); -}; - -//////////////////////////////////////////////////////////////////// -// Class : ComputedVerticesMorphValue4 -// Description : This is a single vertex morph offset value. This is -// the amount by which the given vertex will be offset -// when the morph is full on. -//////////////////////////////////////////////////////////////////// -class EXPCL_PANDA ComputedVerticesMorphValue4 { -public: - typedef LVector4f VecType; - - INLINE ComputedVerticesMorphValue4(int index, const VecType &mvector); - INLINE ComputedVerticesMorphValue4(); - - ushort _index; - VecType _vector; - -public: - void write_datagram(Datagram &dest); - void read_datagram(DatagramIterator &source); -}; - -//////////////////////////////////////////////////////////////////// -// Class : ComputedVerticesMorph -// Description : A list of MorphValues, this represents the complete -// effect of a given morph target on a particular class -// of vertex values. -//////////////////////////////////////////////////////////////////// -template -class ComputedVerticesMorph { -public: - INLINE ComputedVerticesMorph(); - INLINE ComputedVerticesMorph(const ComputedVerticesMorph ©); - - typedef MorphValueType MorphValue; - typedef pvector Morphs; - - void output(ostream &out) const; - - short _slider_index; - Morphs _morphs; - -public: - void write_datagram(Datagram &dest); - void read_datagram(DatagramIterator &source); -}; - -template -inline ostream &operator << (ostream &out, const ComputedVerticesMorph &morph) { - morph.output(out); - return out; -} - -typedef ComputedVerticesMorph ComputedVerticesMorphVertex; -typedef ComputedVerticesMorph ComputedVerticesMorphNormal; -typedef ComputedVerticesMorph ComputedVerticesMorphTexCoord; -typedef ComputedVerticesMorph ComputedVerticesMorphColor; - -#include "computedVerticesMorph.I" - -#endif - diff --git a/panda/src/char/config_char.cxx b/panda/src/char/config_char.cxx index c228f80182..f34d9b75de 100644 --- a/panda/src/char/config_char.cxx +++ b/panda/src/char/config_char.cxx @@ -23,8 +23,6 @@ #include "characterJointBundle.h" #include "characterSlider.h" #include "characterVertexSlider.h" -#include "computedVertices.h" -#include "dynamicVertices.h" #include "jointVertexTransform.h" #include "dconfig.h" #include "lmatrix4.h" @@ -66,8 +64,6 @@ init_libchar() { CharacterJointBundle::init_type(); CharacterSlider::init_type(); CharacterVertexSlider::init_type(); - ComputedVertices::init_type(); - DynamicVertices::init_type(); JointVertexTransform::init_type(); // This isn't defined in this package, but it *is* essential that it @@ -83,7 +79,6 @@ init_libchar() { CharacterJointBundle::register_with_read_factory(); CharacterSlider::register_with_read_factory(); CharacterVertexSlider::register_with_read_factory(); - ComputedVertices::register_with_read_factory(); JointVertexTransform::register_with_read_factory(); } diff --git a/panda/src/char/dynamicVertices.cxx b/panda/src/char/dynamicVertices.cxx deleted file mode 100644 index 1ff694f625..0000000000 --- a/panda/src/char/dynamicVertices.cxx +++ /dev/null @@ -1,113 +0,0 @@ -// Filename: dynamicVertices.cxx -// Created by: drose (01Mar99) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "dynamicVertices.h" -#include "config_char.h" -#include "bamReader.h" -#include "bamWriter.h" -#include "datagram.h" -#include "datagramIterator.h" -#include "ioPtaDatagramLinMath.h" - -TypeHandle DynamicVertices::_type_handle; - -//////////////////////////////////////////////////////////////////// -// Function: DynamicVertices::Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -DynamicVertices:: -DynamicVertices() { -} - -//////////////////////////////////////////////////////////////////// -// Function: DynamicVertices::Copy Constructor -// Access: Public -// Description: Makes a copy of the DynamicVertices object by -// reference: the new copy shares the same pointers as -// the original. -//////////////////////////////////////////////////////////////////// -DynamicVertices:: -DynamicVertices(const DynamicVertices ©) : - _coords(copy._coords), - _norms(copy._norms), - _colors(copy._colors), - _texcoords(copy._texcoords) -{ -} - -//////////////////////////////////////////////////////////////////// -// Function: DynamicVertices::named deep_copy Constructor -// Access: Public -// Description: Makes a complete copy of the indicated -// DynamicVertices object, including copying all of its -// arrays. -//////////////////////////////////////////////////////////////////// -DynamicVertices DynamicVertices:: -deep_copy(const DynamicVertices ©) { - DynamicVertices dv; - if (!copy._coords.empty()) { - dv._coords = PTA_Vertexf::empty_array(0); - dv._coords.v() = copy._coords.v(); - } - if (!copy._norms.empty()) { - dv._norms = PTA_Normalf::empty_array(0); - dv._norms.v() = copy._norms.v(); - } - if (!copy._colors.empty()) { - dv._colors = PTA_Colorf::empty_array(0); - dv._colors.v() = copy._colors.v(); - } - if (!copy._texcoords.empty()) { - dv._texcoords = PTA_TexCoordf::empty_array(0); - dv._texcoords.v() = copy._texcoords.v(); - } - return dv; -} - -//////////////////////////////////////////////////////////////////// -// Function: DynamicVertices::write_datagram -// Access: Public -// Description: Function to write the important information in -// the particular object to a Datagram -//////////////////////////////////////////////////////////////////// -void DynamicVertices:: -write_datagram(BamWriter *manager, Datagram &me) -{ - WRITE_PTA(manager, me, IPD_Vertexf::write_datagram, _coords) - WRITE_PTA(manager, me, IPD_Normalf::write_datagram, _norms) - WRITE_PTA(manager, me, IPD_Colorf::write_datagram, _colors) - WRITE_PTA(manager, me, IPD_TexCoordf::write_datagram, _texcoords) -} - -//////////////////////////////////////////////////////////////////// -// Function: DynamicVertices::fillin -// Access: Public -// Description: Function that reads out of the datagram (or asks -// manager to read) all of the data that is needed to -// re-create this object and stores it in the appropiate -// place -//////////////////////////////////////////////////////////////////// -void DynamicVertices:: -fillin(DatagramIterator& scan, BamReader* manager) -{ - READ_PTA(manager, scan, IPD_Vertexf::read_datagram, _coords) - READ_PTA(manager, scan, IPD_Normalf::read_datagram, _norms) - READ_PTA(manager, scan, IPD_Colorf::read_datagram, _colors) - READ_PTA(manager, scan, IPD_TexCoordf::read_datagram, _texcoords) -} diff --git a/panda/src/char/dynamicVertices.h b/panda/src/char/dynamicVertices.h deleted file mode 100644 index 29c75f56db..0000000000 --- a/panda/src/char/dynamicVertices.h +++ /dev/null @@ -1,76 +0,0 @@ -// Filename: dynamicVertices.h -// Created by: drose (01Mar99) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef DYNAMICVERTICES_H -#define DYNAMICVERTICES_H - -#include "pandabase.h" - -#include "pointerToArray.h" -#include "typedObject.h" -#include "luse.h" -#include "pta_Vertexf.h" -#include "pta_Normalf.h" -#include "pta_Colorf.h" -#include "pta_TexCoordf.h" -#include "typedWritable.h" - -class BamReader; - -//////////////////////////////////////////////////////////////////// -// Class : DynamicVertices -// Description : A table of vertices associated with a Character that -// must be computed dynamically each frame. This is the -// actual table of vertices; see ComputedVertices for -// the code to compute their values. -//////////////////////////////////////////////////////////////////// -class EXPCL_PANDA DynamicVertices : public TypedWritable { -public: - DynamicVertices(); - DynamicVertices(const DynamicVertices ©); - static DynamicVertices deep_copy(const DynamicVertices ©); - - PTA_Vertexf _coords; - PTA_Normalf _norms; - PTA_Colorf _colors; - PTA_TexCoordf _texcoords; - -public: - virtual void write_datagram(BamWriter* manager, Datagram &me); - void fillin(DatagramIterator& scan, BamReader* manager); - -public: - virtual TypeHandle get_type() const { - return get_class_type(); - } - virtual TypeHandle force_init_type() {init_type(); return get_class_type();} - static TypeHandle get_class_type() { - return _type_handle; - } - static void init_type() { - TypedWritable::init_type(); - register_type(_type_handle, "DynamicVertices", - TypedWritable::get_class_type()); - } - -private: - static TypeHandle _type_handle; -}; - -#endif - diff --git a/panda/src/char/jointVertexTransform.h b/panda/src/char/jointVertexTransform.h index 26f5c8f8b4..fdfc4bc69c 100644 --- a/panda/src/char/jointVertexTransform.h +++ b/panda/src/char/jointVertexTransform.h @@ -37,8 +37,6 @@ // Multiple combinations of these with different weights // are used to implement soft-skinned vertices for an // animated character. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// class EXPCL_PANDA JointVertexTransform : public VertexTransform { private: diff --git a/panda/src/collide/collisionInvSphere.cxx b/panda/src/collide/collisionInvSphere.cxx index 89bced30c9..8df5b0f936 100644 --- a/panda/src/collide/collisionInvSphere.cxx +++ b/panda/src/collide/collisionInvSphere.cxx @@ -29,11 +29,10 @@ #include "datagramIterator.h" #include "bamReader.h" #include "bamWriter.h" -#include "geomTristrip.h" #include "nearly_zero.h" -#include "qpgeom.h" -#include "qpgeomTristrips.h" -#include "qpgeomVertexWriter.h" +#include "geom.h" +#include "geomTristrips.h" +#include "geomVertexWriter.h" TypeHandle CollisionInvSphere::_type_handle; @@ -308,61 +307,32 @@ fill_viz_geom() { static const int num_slices = 16; static const int num_stacks = 8; - if (use_qpgeom) { - PT(qpGeomVertexData) vdata = new qpGeomVertexData - ("collision", qpGeomVertexFormat::get_v3(), - qpGeom::UH_static); - qpGeomVertexWriter vertex(vdata, InternalName::get_vertex()); - - PT(qpGeomTristrips) strip = new qpGeomTristrips(qpGeom::UH_static); - for (int sl = 0; sl < num_slices; ++sl) { - float longitude0 = (float)sl / (float)num_slices; - float longitude1 = (float)(sl + 1) / (float)num_slices; - vertex.add_data3f(compute_point(0.0, longitude0)); - for (int st = 1; st < num_stacks; ++st) { - float latitude = (float)st / (float)num_stacks; - vertex.add_data3f(compute_point(latitude, longitude1)); - vertex.add_data3f(compute_point(latitude, longitude0)); - } - vertex.add_data3f(compute_point(1.0, longitude0)); - - strip->add_next_vertices(num_stacks * 2); - strip->close_primitive(); + PT(GeomVertexData) vdata = new GeomVertexData + ("collision", GeomVertexFormat::get_v3(), + Geom::UH_static); + GeomVertexWriter vertex(vdata, InternalName::get_vertex()); + + PT(GeomTristrips) strip = new GeomTristrips(Geom::UH_static); + for (int sl = 0; sl < num_slices; ++sl) { + float longitude0 = (float)sl / (float)num_slices; + float longitude1 = (float)(sl + 1) / (float)num_slices; + vertex.add_data3f(compute_point(0.0, longitude0)); + for (int st = 1; st < num_stacks; ++st) { + float latitude = (float)st / (float)num_stacks; + vertex.add_data3f(compute_point(latitude, longitude1)); + vertex.add_data3f(compute_point(latitude, longitude0)); } - - PT(qpGeom) geom = new qpGeom; - geom->set_vertex_data(vdata); - geom->add_primitive(strip); - - _viz_geom->add_geom(geom, get_solid_viz_state()); - - } else { - GeomTristrip *sphere = new GeomTristrip; - PTA_Vertexf verts; - PTA_int lengths; - verts.reserve((num_stacks * 2) * num_slices); - lengths.reserve(num_slices); + vertex.add_data3f(compute_point(1.0, longitude0)); - for (int sl = 0; sl < num_slices; sl++) { - float longitude0 = (float)sl / (float)num_slices; - float longitude1 = (float)(sl + 1) / (float)num_slices; - verts.push_back(compute_point(0.0, longitude0)); - for (int st = 1; st < num_stacks; st++) { - float latitude = (float)st / (float)num_stacks; - verts.push_back(compute_point(latitude, longitude1)); - verts.push_back(compute_point(latitude, longitude0)); - } - verts.push_back(compute_point(1.0, longitude0)); - - lengths.push_back(num_stacks * 2); - } - - sphere->set_coords(verts); - sphere->set_lengths(lengths); - sphere->set_num_prims(num_slices); - - _viz_geom->add_geom(sphere, get_solid_viz_state()); + strip->add_next_vertices(num_stacks * 2); + strip->close_primitive(); } + + PT(Geom) geom = new Geom; + geom->set_vertex_data(vdata); + geom->add_primitive(strip); + + _viz_geom->add_geom(geom, get_solid_viz_state()); } //////////////////////////////////////////////////////////////////// diff --git a/panda/src/collide/collisionLine.cxx b/panda/src/collide/collisionLine.cxx index 66ae195a34..6be25dcd4a 100644 --- a/panda/src/collide/collisionLine.cxx +++ b/panda/src/collide/collisionLine.cxx @@ -22,7 +22,6 @@ #include "config_collide.h" #include "geom.h" #include "geomNode.h" -#include "geomLinestrip.h" #include "boundingLine.h" #include "lensNode.h" #include "lens.h" @@ -30,9 +29,9 @@ #include "datagramIterator.h" #include "bamReader.h" #include "bamWriter.h" -#include "qpgeom.h" -#include "qpgeomLinestrips.h" -#include "qpgeomVertexWriter.h" +#include "geom.h" +#include "geomLinestrips.h" +#include "geomVertexWriter.h" TypeHandle CollisionLine::_type_handle; @@ -83,59 +82,30 @@ fill_viz_geom() { static const int num_points = 100; static const double scale = 100.0; - if (use_qpgeom) { - PT(qpGeomVertexData) vdata = new qpGeomVertexData - ("collision", qpGeomVertexFormat::get_v3cp(), - qpGeom::UH_static); - qpGeomVertexWriter vertex(vdata, InternalName::get_vertex()); - qpGeomVertexWriter color(vdata, InternalName::get_color()); + PT(GeomVertexData) vdata = new GeomVertexData + ("collision", GeomVertexFormat::get_v3cp(), + Geom::UH_static); + GeomVertexWriter vertex(vdata, InternalName::get_vertex()); + GeomVertexWriter color(vdata, InternalName::get_color()); + + for (int i = 0; i < num_points; i++) { + double t = ((double)i / (double)num_points - 0.5) * 2.0; + vertex.add_data3f(get_origin() + t * scale * get_direction()); - for (int i = 0; i < num_points; i++) { - double t = ((double)i / (double)num_points - 0.5) * 2.0; - vertex.add_data3f(get_origin() + t * scale * get_direction()); - - color.add_data4f(Colorf(1.0f, 1.0f, 1.0f, 1.0f) + - fabs(t) * Colorf(0.0f, 0.0f, 0.0f, -1.0f)); - } - - PT(qpGeomLinestrips) line = new qpGeomLinestrips(qpGeom::UH_static); - line->add_next_vertices(num_points); - line->close_primitive(); - - PT(qpGeom) geom = new qpGeom; - geom->set_vertex_data(vdata); - geom->add_primitive(line); - - _viz_geom->add_geom(geom, get_other_viz_state()); - _bounds_viz_geom->add_geom(geom, get_other_bounds_viz_state()); - - } else { - GeomLinestrip *line = new GeomLinestrip; - PTA_Vertexf verts; - PTA_Colorf colors; - PTA_int lengths; - - verts.reserve(num_points); - colors.reserve(num_points); - - for (int i = 0; i < num_points; i++) { - double t = ((double)i / (double)num_points - 0.5) * 2.0; - verts.push_back(get_origin() + t * scale * get_direction()); - - colors.push_back(Colorf(1.0f, 1.0f, 1.0f, 1.0f) + - fabs(t) * Colorf(0.0f, 0.0f, 0.0f, -1.0f)); - } - line->set_coords(verts); - line->set_colors(colors, G_PER_VERTEX); - - lengths.push_back(num_points-1); - line->set_lengths(lengths); - - line->set_num_prims(1); - - _viz_geom->add_geom(line, get_other_viz_state()); - _bounds_viz_geom->add_geom(line, get_other_bounds_viz_state()); + color.add_data4f(Colorf(1.0f, 1.0f, 1.0f, 1.0f) + + fabs(t) * Colorf(0.0f, 0.0f, 0.0f, -1.0f)); } + + PT(GeomLinestrips) line = new GeomLinestrips(Geom::UH_static); + line->add_next_vertices(num_points); + line->close_primitive(); + + PT(Geom) geom = new Geom; + geom->set_vertex_data(vdata); + geom->add_primitive(line); + + _viz_geom->add_geom(geom, get_other_viz_state()); + _bounds_viz_geom->add_geom(geom, get_other_bounds_viz_state()); } //////////////////////////////////////////////////////////////////// diff --git a/panda/src/collide/collisionNode.cxx b/panda/src/collide/collisionNode.cxx index 75adfde195..e5fbd77caa 100644 --- a/panda/src/collide/collisionNode.cxx +++ b/panda/src/collide/collisionNode.cxx @@ -505,24 +505,4 @@ fillin(DatagramIterator &scan, BamReader *manager) { } _from_collide_mask.set_word(scan.get_uint32()); - if (manager->get_file_minor_ver() < 12) { - // Bam files prior to 4.12 stored the into_collide_mask here. - // (4.12 and later store this in the PandaNode base class - // instead.) - CollideMask into_collide_mask; - into_collide_mask.set_word(scan.get_uint32()); - - // We also introduced the concept of the CollisionNode-reserved - // bits and the GeomNode-reserved bits with version 4.12. Prior - // to that, CollisionNodes tended to have all bits set. Assume - // they didn't mean to have the GeomNode bits set. - into_collide_mask &= ~GeomNode::get_default_collide_mask(); - _from_collide_mask &= ~GeomNode::get_default_collide_mask(); - - set_into_collide_mask(into_collide_mask); - - // Bam files prior to 4.12 also had a _flags member, which is no - // longer supported. - scan.get_uint8(); - } } diff --git a/panda/src/collide/collisionPlane.cxx b/panda/src/collide/collisionPlane.cxx index c61acb1c39..458d4d8f02 100644 --- a/panda/src/collide/collisionPlane.cxx +++ b/panda/src/collide/collisionPlane.cxx @@ -33,11 +33,10 @@ #include "bamReader.h" #include "bamWriter.h" #include "omniBoundingVolume.h" -#include "geomQuad.h" -#include "qpgeom.h" -#include "qpgeomTrifans.h" -#include "qpgeomLinestrips.h" -#include "qpgeomVertexWriter.h" +#include "geom.h" +#include "geomTrifans.h" +#include "geomLinestrips.h" +#include "geomVertexWriter.h" TypeHandle CollisionPlane::_type_handle; @@ -325,56 +324,38 @@ fill_viz_geom() { static const double plane_scale = 10.0; - if (use_qpgeom) { - PT(qpGeomVertexData) vdata = new qpGeomVertexData - ("collision", qpGeomVertexFormat::get_v3(), - qpGeom::UH_static); - qpGeomVertexWriter vertex(vdata, InternalName::get_vertex()); - - vertex.add_data3f(cp + p1 * plane_scale); - vertex.add_data3f(cp + p2 * plane_scale); - vertex.add_data3f(cp + p3 * plane_scale); - vertex.add_data3f(cp + p4 * plane_scale); - - PT(qpGeomTrifans) body = new qpGeomTrifans(qpGeom::UH_static); - body->add_consecutive_vertices(0, 4); - body->close_primitive(); - - PT(qpGeomLinestrips) border = new qpGeomLinestrips(qpGeom::UH_static); - border->add_consecutive_vertices(0, 4); - border->add_vertex(0); - border->close_primitive(); - - PT(qpGeom) geom1 = new qpGeom; - geom1->set_vertex_data(vdata); - geom1->add_primitive(body); - - PT(qpGeom) geom2 = new qpGeom; - geom2->set_vertex_data(vdata); - geom2->add_primitive(border); - - _viz_geom->add_geom(geom1, get_solid_viz_state()); - _viz_geom->add_geom(geom2, get_wireframe_viz_state()); - - _bounds_viz_geom->add_geom(geom1, get_solid_bounds_viz_state()); - _bounds_viz_geom->add_geom(geom2, get_wireframe_bounds_viz_state()); - - } else { - PTA_Vertexf verts; - verts.push_back(cp + p1 * plane_scale); - verts.push_back(cp + p2 * plane_scale); - verts.push_back(cp + p3 * plane_scale); - verts.push_back(cp + p4 * plane_scale); - - GeomQuad *quad = new GeomQuad; - quad->set_coords(verts); - quad->set_num_prims(1); - - _viz_geom->add_geom(quad, get_solid_viz_state()); - _viz_geom->add_geom(quad, get_wireframe_viz_state()); - _bounds_viz_geom->add_geom(quad, get_solid_bounds_viz_state()); - _bounds_viz_geom->add_geom(quad, get_wireframe_bounds_viz_state()); - } + PT(GeomVertexData) vdata = new GeomVertexData + ("collision", GeomVertexFormat::get_v3(), + Geom::UH_static); + GeomVertexWriter vertex(vdata, InternalName::get_vertex()); + + vertex.add_data3f(cp + p1 * plane_scale); + vertex.add_data3f(cp + p2 * plane_scale); + vertex.add_data3f(cp + p3 * plane_scale); + vertex.add_data3f(cp + p4 * plane_scale); + + PT(GeomTrifans) body = new GeomTrifans(Geom::UH_static); + body->add_consecutive_vertices(0, 4); + body->close_primitive(); + + PT(GeomLinestrips) border = new GeomLinestrips(Geom::UH_static); + border->add_consecutive_vertices(0, 4); + border->add_vertex(0); + border->close_primitive(); + + PT(Geom) geom1 = new Geom; + geom1->set_vertex_data(vdata); + geom1->add_primitive(body); + + PT(Geom) geom2 = new Geom; + geom2->set_vertex_data(vdata); + geom2->add_primitive(border); + + _viz_geom->add_geom(geom1, get_solid_viz_state()); + _viz_geom->add_geom(geom2, get_wireframe_viz_state()); + + _bounds_viz_geom->add_geom(geom1, get_solid_bounds_viz_state()); + _bounds_viz_geom->add_geom(geom2, get_wireframe_bounds_viz_state()); } //////////////////////////////////////////////////////////////////// diff --git a/panda/src/collide/collisionPolygon.cxx b/panda/src/collide/collisionPolygon.cxx index 9d0885858d..e828a6aa7e 100644 --- a/panda/src/collide/collisionPolygon.cxx +++ b/panda/src/collide/collisionPolygon.cxx @@ -33,14 +33,13 @@ #include "datagramIterator.h" #include "bamReader.h" #include "bamWriter.h" -#include "geomPolygon.h" #include "transformState.h" #include "clipPlaneAttrib.h" #include "nearly_zero.h" -#include "qpgeom.h" -#include "qpgeomTrifans.h" -#include "qpgeomLinestrips.h" -#include "qpgeomVertexWriter.h" +#include "geom.h" +#include "geomTrifans.h" +#include "geomLinestrips.h" +#include "geomVertexWriter.h" #include @@ -351,14 +350,9 @@ write(ostream &out, int indent_level) const { LMatrix4f to_3d_mat; rederive_to_3d_mat(to_3d_mat); out << "In 3-d space:\n"; - PTA_Vertexf verts; for (pi = _points.begin(); pi != _points.end(); ++pi) { - verts.push_back(to_3d((*pi)._p, to_3d_mat)); - } - - PTA_Vertexf::const_iterator vi; - for (vi = verts.begin(); vi != verts.end(); ++vi) { - indent(out, indent_level + 2) << (*vi) << "\n"; + Vertexf vert = to_3d((*pi)._p, to_3d_mat); + indent(out, indent_level + 2) << vert << "\n"; } } @@ -818,61 +812,38 @@ draw_polygon(GeomNode *viz_geom_node, GeomNode *bounds_viz_geom_node, LMatrix4f to_3d_mat; rederive_to_3d_mat(to_3d_mat); - if (use_qpgeom) { - PT(qpGeomVertexData) vdata = new qpGeomVertexData - ("collision", qpGeomVertexFormat::get_v3(), - qpGeom::UH_static); - qpGeomVertexWriter vertex(vdata, InternalName::get_vertex()); - - Points::const_iterator pi; - for (pi = points.begin(); pi != points.end(); ++pi) { - vertex.add_data3f(to_3d((*pi)._p, to_3d_mat)); - } - - PT(qpGeomTrifans) body = new qpGeomTrifans(qpGeom::UH_static); - body->add_consecutive_vertices(0, points.size()); - body->close_primitive(); - - PT(qpGeomLinestrips) border = new qpGeomLinestrips(qpGeom::UH_static); - border->add_consecutive_vertices(0, points.size()); - border->add_vertex(0); - border->close_primitive(); - - PT(qpGeom) geom1 = new qpGeom; - geom1->set_vertex_data(vdata); - geom1->add_primitive(body); - - PT(qpGeom) geom2 = new qpGeom; - geom2->set_vertex_data(vdata); - geom2->add_primitive(border); - - viz_geom_node->add_geom(geom1, ((CollisionPolygon *)this)->get_solid_viz_state()); - viz_geom_node->add_geom(geom2, ((CollisionPolygon *)this)->get_wireframe_viz_state()); - - bounds_viz_geom_node->add_geom(geom1, ((CollisionPolygon *)this)->get_solid_bounds_viz_state()); - bounds_viz_geom_node->add_geom(geom2, ((CollisionPolygon *)this)->get_wireframe_bounds_viz_state()); - - } else { - PTA_Vertexf verts; - Points::const_iterator pi; - for (pi = points.begin(); pi != points.end(); ++pi) { - verts.push_back(to_3d((*pi)._p, to_3d_mat)); - } - - PTA_int lengths; - lengths.push_back(points.size()); - - GeomPolygon *polygon = new GeomPolygon; - polygon->set_coords(verts); - polygon->set_num_prims(1); - polygon->set_lengths(lengths); - - viz_geom_node->add_geom(polygon, ((CollisionPolygon *)this)->get_solid_viz_state()); - viz_geom_node->add_geom(polygon, ((CollisionPolygon *)this)->get_wireframe_viz_state()); - - bounds_viz_geom_node->add_geom(polygon, ((CollisionPolygon *)this)->get_solid_bounds_viz_state()); - bounds_viz_geom_node->add_geom(polygon, ((CollisionPolygon *)this)->get_wireframe_bounds_viz_state()); + PT(GeomVertexData) vdata = new GeomVertexData + ("collision", GeomVertexFormat::get_v3(), + Geom::UH_static); + GeomVertexWriter vertex(vdata, InternalName::get_vertex()); + + Points::const_iterator pi; + for (pi = points.begin(); pi != points.end(); ++pi) { + vertex.add_data3f(to_3d((*pi)._p, to_3d_mat)); } + + PT(GeomTrifans) body = new GeomTrifans(Geom::UH_static); + body->add_consecutive_vertices(0, points.size()); + body->close_primitive(); + + PT(GeomLinestrips) border = new GeomLinestrips(Geom::UH_static); + border->add_consecutive_vertices(0, points.size()); + border->add_vertex(0); + border->close_primitive(); + + PT(Geom) geom1 = new Geom; + geom1->set_vertex_data(vdata); + geom1->add_primitive(body); + + PT(Geom) geom2 = new Geom; + geom2->set_vertex_data(vdata); + geom2->add_primitive(border); + + viz_geom_node->add_geom(geom1, ((CollisionPolygon *)this)->get_solid_viz_state()); + viz_geom_node->add_geom(geom2, ((CollisionPolygon *)this)->get_wireframe_viz_state()); + + bounds_viz_geom_node->add_geom(geom1, ((CollisionPolygon *)this)->get_solid_bounds_viz_state()); + bounds_viz_geom_node->add_geom(geom2, ((CollisionPolygon *)this)->get_wireframe_bounds_viz_state()); } @@ -1227,49 +1198,16 @@ write_datagram(BamWriter *manager, Datagram &me) { void CollisionPolygon:: fillin(DatagramIterator &scan, BamReader *manager) { CollisionPlane::fillin(scan, manager); - if (manager->get_file_minor_ver() < 9) { - // Decode old-style collision polygon. - Points points; - size_t size = scan.get_uint16(); - for (size_t i = 0; i < size; i++) { - LPoint2f p; - p.read_datagram(scan); - - points.push_back(PointDef(p[0], p[1])); - } - LPoint2f median; - median.read_datagram(scan); - - int axis = scan.get_uint8(); - bool reversed = (scan.get_uint8() != 0); - - // Now convert the above points into 3-d by the old-style rules. - pvector verts; - Points::const_iterator pi; - for (pi = points.begin(); pi != points.end(); ++pi) { - verts.push_back(legacy_to_3d((*pi)._p, axis)); - } - if (reversed) { - reverse(verts.begin(), verts.end()); - } - - const LPoint3f *verts_begin = &verts[0]; - const LPoint3f *verts_end = verts_begin + verts.size(); - setup_points(verts_begin, verts_end); - - } else { - // Load new-style collision polygon. - size_t size = scan.get_uint16(); - for (size_t i = 0; i < size; i++) { - LPoint2f p; - LVector2f v; - p.read_datagram(scan); - v.read_datagram(scan); - _points.push_back(PointDef(p, v)); - } - _to_2d_mat.read_datagram(scan); + size_t size = scan.get_uint16(); + for (size_t i = 0; i < size; i++) { + LPoint2f p; + LVector2f v; + p.read_datagram(scan); + v.read_datagram(scan); + _points.push_back(PointDef(p, v)); } + _to_2d_mat.read_datagram(scan); } diff --git a/panda/src/collide/collisionRay.cxx b/panda/src/collide/collisionRay.cxx index 7acb34aecb..de3b16832e 100644 --- a/panda/src/collide/collisionRay.cxx +++ b/panda/src/collide/collisionRay.cxx @@ -22,7 +22,6 @@ #include "config_collide.h" #include "geom.h" #include "geomNode.h" -#include "geomLinestrip.h" #include "boundingLine.h" #include "lensNode.h" #include "lens.h" @@ -30,9 +29,9 @@ #include "datagramIterator.h" #include "bamReader.h" #include "bamWriter.h" -#include "qpgeom.h" -#include "qpgeomLinestrips.h" -#include "qpgeomVertexWriter.h" +#include "geom.h" +#include "geomLinestrips.h" +#include "geomVertexWriter.h" TypeHandle CollisionRay::_type_handle; @@ -155,59 +154,30 @@ fill_viz_geom() { static const int num_points = 100; static const double scale = 100.0; - if (use_qpgeom) { - PT(qpGeomVertexData) vdata = new qpGeomVertexData - ("collision", qpGeomVertexFormat::get_v3cp(), - qpGeom::UH_static); - qpGeomVertexWriter vertex(vdata, InternalName::get_vertex()); - qpGeomVertexWriter color(vdata, InternalName::get_color()); + PT(GeomVertexData) vdata = new GeomVertexData + ("collision", GeomVertexFormat::get_v3cp(), + Geom::UH_static); + GeomVertexWriter vertex(vdata, InternalName::get_vertex()); + GeomVertexWriter color(vdata, InternalName::get_color()); + + for (int i = 0; i < num_points; i++) { + double t = ((double)i / (double)num_points); + vertex.add_data3f(get_origin() + t * scale * get_direction()); - for (int i = 0; i < num_points; i++) { - double t = ((double)i / (double)num_points); - vertex.add_data3f(get_origin() + t * scale * get_direction()); - - color.add_data4f(Colorf(1.0f, 1.0f, 1.0f, 1.0f) + - t * Colorf(0.0f, 0.0f, 0.0f, -1.0f)); - } - - PT(qpGeomLinestrips) line = new qpGeomLinestrips(qpGeom::UH_static); - line->add_next_vertices(num_points); - line->close_primitive(); - - PT(qpGeom) geom = new qpGeom; - geom->set_vertex_data(vdata); - geom->add_primitive(line); - - _viz_geom->add_geom(geom, get_other_viz_state()); - _bounds_viz_geom->add_geom(geom, get_other_bounds_viz_state()); - - } else { - GeomLinestrip *line = new GeomLinestrip; - PTA_Vertexf verts; - PTA_Colorf colors; - PTA_int lengths; - - verts.reserve(num_points); - colors.reserve(num_points); - - for (int i = 0; i < num_points; i++) { - double t = ((double)i / (double)num_points); - verts.push_back(get_origin() + t * scale * get_direction()); - - colors.push_back(Colorf(1.0f, 1.0f, 1.0f, 1.0f) + - t * Colorf(0.0f, 0.0f, 0.0f, -1.0f)); - } - line->set_coords(verts); - line->set_colors(colors, G_PER_VERTEX); - - lengths.push_back(num_points-1); - line->set_lengths(lengths); - - line->set_num_prims(1); - - _viz_geom->add_geom(line, get_other_viz_state()); - _bounds_viz_geom->add_geom(line, get_other_bounds_viz_state()); + color.add_data4f(Colorf(1.0f, 1.0f, 1.0f, 1.0f) + + t * Colorf(0.0f, 0.0f, 0.0f, -1.0f)); } + + PT(GeomLinestrips) line = new GeomLinestrips(Geom::UH_static); + line->add_next_vertices(num_points); + line->close_primitive(); + + PT(Geom) geom = new Geom; + geom->set_vertex_data(vdata); + geom->add_primitive(line); + + _viz_geom->add_geom(geom, get_other_viz_state()); + _bounds_viz_geom->add_geom(geom, get_other_bounds_viz_state()); } //////////////////////////////////////////////////////////////////// diff --git a/panda/src/collide/collisionSegment.cxx b/panda/src/collide/collisionSegment.cxx index c4c464dbf0..1a61849b48 100644 --- a/panda/src/collide/collisionSegment.cxx +++ b/panda/src/collide/collisionSegment.cxx @@ -25,15 +25,14 @@ #include "lensNode.h" #include "geomNode.h" #include "lens.h" -#include "geomLine.h" #include "geometricBoundingVolume.h" #include "datagram.h" #include "datagramIterator.h" #include "bamReader.h" #include "bamWriter.h" -#include "qpgeom.h" -#include "qpgeomLines.h" -#include "qpgeomVertexWriter.h" +#include "geom.h" +#include "geomLines.h" +#include "geomVertexWriter.h" TypeHandle CollisionSegment::_type_handle; @@ -159,41 +158,24 @@ fill_viz_geom() { << "Recomputing viz for " << *this << "\n"; } - if (use_qpgeom) { - PT(qpGeomVertexData) vdata = new qpGeomVertexData - ("collision", qpGeomVertexFormat::get_v3cp(), - qpGeom::UH_static); - qpGeomVertexWriter vertex(vdata, InternalName::get_vertex()); - - vertex.add_data3f(_a); - vertex.add_data3f(_b); - - PT(qpGeomLines) line = new qpGeomLines(qpGeom::UH_static); - line->add_next_vertices(2); - line->close_primitive(); - - PT(qpGeom) geom = new qpGeom; - geom->set_vertex_data(vdata); - geom->add_primitive(line); - - _viz_geom->add_geom(geom, get_other_viz_state()); - _bounds_viz_geom->add_geom(geom, get_other_bounds_viz_state()); - - } else { - GeomLine *segment = new GeomLine; - PTA_Vertexf verts; - PTA_Colorf colors; - verts.push_back(_a); - verts.push_back(_b); - colors.push_back(Colorf(1.0f, 1.0f, 1.0f, 1.0f)); - segment->set_coords(verts); - segment->set_colors(colors, G_OVERALL); - - segment->set_num_prims(1); - - _viz_geom->add_geom(segment, get_other_viz_state()); - _bounds_viz_geom->add_geom(segment, get_other_bounds_viz_state()); - } + PT(GeomVertexData) vdata = new GeomVertexData + ("collision", GeomVertexFormat::get_v3cp(), + Geom::UH_static); + GeomVertexWriter vertex(vdata, InternalName::get_vertex()); + + vertex.add_data3f(_a); + vertex.add_data3f(_b); + + PT(GeomLines) line = new GeomLines(Geom::UH_static); + line->add_next_vertices(2); + line->close_primitive(); + + PT(Geom) geom = new Geom; + geom->set_vertex_data(vdata); + geom->add_primitive(line); + + _viz_geom->add_geom(geom, get_other_viz_state()); + _bounds_viz_geom->add_geom(geom, get_other_bounds_viz_state()); } //////////////////////////////////////////////////////////////////// diff --git a/panda/src/collide/collisionSolid.cxx b/panda/src/collide/collisionSolid.cxx index 942a221c01..d6af886b2b 100644 --- a/panda/src/collide/collisionSolid.cxx +++ b/panda/src/collide/collisionSolid.cxx @@ -301,16 +301,9 @@ write_datagram(BamWriter *, Datagram &me) { //////////////////////////////////////////////////////////////////// void CollisionSolid:: fillin(DatagramIterator &scan, BamReader *manager) { - if (manager->get_file_minor_ver() < 7) { - bool tangible = scan.get_bool(); - if (!tangible) { - _flags &= ~F_tangible; - } - } else { - _flags = scan.get_uint8(); - if ((_flags & F_effective_normal) != 0) { - _effective_normal.read_datagram(scan); - } + _flags = scan.get_uint8(); + if ((_flags & F_effective_normal) != 0) { + _effective_normal.read_datagram(scan); } // The viz is always stale after reading from a bam file. diff --git a/panda/src/collide/collisionSphere.cxx b/panda/src/collide/collisionSphere.cxx index 40905840e0..0e86b12031 100644 --- a/panda/src/collide/collisionSphere.cxx +++ b/panda/src/collide/collisionSphere.cxx @@ -29,13 +29,12 @@ #include "datagramIterator.h" #include "bamReader.h" #include "bamWriter.h" -#include "geomTristrip.h" #include "nearly_zero.h" #include "cmath.h" #include "mathNumbers.h" -#include "qpgeom.h" -#include "qpgeomTristrips.h" -#include "qpgeomVertexWriter.h" +#include "geom.h" +#include "geomTristrips.h" +#include "geomVertexWriter.h" TypeHandle CollisionSphere::_type_handle; @@ -327,63 +326,33 @@ fill_viz_geom() { static const int num_slices = 16; static const int num_stacks = 8; - if (use_qpgeom) { - PT(qpGeomVertexData) vdata = new qpGeomVertexData - ("collision", qpGeomVertexFormat::get_v3(), - qpGeom::UH_static); - qpGeomVertexWriter vertex(vdata, InternalName::get_vertex()); - - PT(qpGeomTristrips) strip = new qpGeomTristrips(qpGeom::UH_static); - for (int sl = 0; sl < num_slices; ++sl) { - float longitude0 = (float)sl / (float)num_slices; - float longitude1 = (float)(sl + 1) / (float)num_slices; - vertex.add_data3f(compute_point(0.0, longitude0)); - for (int st = 1; st < num_stacks; ++st) { - float latitude = (float)st / (float)num_stacks; - vertex.add_data3f(compute_point(latitude, longitude0)); - vertex.add_data3f(compute_point(latitude, longitude1)); - } - vertex.add_data3f(compute_point(1.0, longitude0)); - - strip->add_next_vertices(num_stacks * 2); - strip->close_primitive(); + PT(GeomVertexData) vdata = new GeomVertexData + ("collision", GeomVertexFormat::get_v3(), + Geom::UH_static); + GeomVertexWriter vertex(vdata, InternalName::get_vertex()); + + PT(GeomTristrips) strip = new GeomTristrips(Geom::UH_static); + for (int sl = 0; sl < num_slices; ++sl) { + float longitude0 = (float)sl / (float)num_slices; + float longitude1 = (float)(sl + 1) / (float)num_slices; + vertex.add_data3f(compute_point(0.0, longitude0)); + for (int st = 1; st < num_stacks; ++st) { + float latitude = (float)st / (float)num_stacks; + vertex.add_data3f(compute_point(latitude, longitude0)); + vertex.add_data3f(compute_point(latitude, longitude1)); } - - PT(qpGeom) geom = new qpGeom; - geom->set_vertex_data(vdata); - geom->add_primitive(strip); - - _viz_geom->add_geom(geom, get_solid_viz_state()); - _bounds_viz_geom->add_geom(geom, get_solid_bounds_viz_state()); - - } else { - GeomTristrip *sphere = new GeomTristrip; - PTA_Vertexf verts; - PTA_int lengths; - verts.reserve((num_stacks * 2) * num_slices); - lengths.reserve(num_slices); + vertex.add_data3f(compute_point(1.0, longitude0)); - for (int sl = 0; sl < num_slices; sl++) { - float longitude0 = (float)sl / (float)num_slices; - float longitude1 = (float)(sl + 1) / (float)num_slices; - verts.push_back(compute_point(0.0, longitude0)); - for (int st = 1; st < num_stacks; st++) { - float latitude = (float)st / (float)num_stacks; - verts.push_back(compute_point(latitude, longitude0)); - verts.push_back(compute_point(latitude, longitude1)); - } - verts.push_back(compute_point(1.0, longitude0)); - - lengths.push_back(num_stacks * 2); - } - - sphere->set_coords(verts); - sphere->set_lengths(lengths); - sphere->set_num_prims(num_slices); - - _viz_geom->add_geom(sphere, get_solid_viz_state()); - _bounds_viz_geom->add_geom(sphere, get_solid_bounds_viz_state()); + strip->add_next_vertices(num_stacks * 2); + strip->close_primitive(); } + + PT(Geom) geom = new Geom; + geom->set_vertex_data(vdata); + geom->add_primitive(strip); + + _viz_geom->add_geom(geom, get_solid_viz_state()); + _bounds_viz_geom->add_geom(geom, get_solid_bounds_viz_state()); } //////////////////////////////////////////////////////////////////// diff --git a/panda/src/collide/collisionTraverser.cxx b/panda/src/collide/collisionTraverser.cxx index 5274e63ddd..81d6d22cc3 100644 --- a/panda/src/collide/collisionTraverser.cxx +++ b/panda/src/collide/collisionTraverser.cxx @@ -27,9 +27,9 @@ #include "transformState.h" #include "geomNode.h" #include "geom.h" -#include "qpgeom.h" -#include "qpgeomTriangles.h" -#include "qpgeomVertexReader.h" +#include "geom.h" +#include "geomTriangles.h" +#include "geomVertexReader.h" #include "lodNode.h" #include "nodePath.h" #include "pStatTimer.h" @@ -765,54 +765,32 @@ compare_collider_to_geom(CollisionEntry &entry, const Geom *geom, ci = _colliders.find(entry.get_from_node_path()); nassertv(ci != _colliders.end()); - if (geom->is_qpgeom()) { - const qpGeom *qpgeom = DCAST(qpGeom, geom); - if (qpgeom->get_primitive_type() == qpGeom::PT_polygons) { - const qpGeomVertexData *data =qpgeom->get_vertex_data(); - qpGeomVertexReader vertex(data, InternalName::get_vertex()); - - int num_primitives = qpgeom->get_num_primitives(); - for (int i = 0; i < num_primitives; ++i) { - const qpGeomPrimitive *primitive = qpgeom->get_primitive(i); - CPT(qpGeomPrimitive) tris = primitive->decompose(); - nassertv(tris->is_of_type(qpGeomTriangles::get_class_type())); - int num_vertices = tris->get_num_vertices(); - nassertv((num_vertices % 3) == 0); - - for (int vi = 0; vi < num_vertices; vi += 3) { - vertex.set_row(tris->get_vertex(vi)); - Vertexf v0 = vertex.get_data3f(); - vertex.set_row(tris->get_vertex(vi + 1)); - Vertexf v1 = vertex.get_data3f(); - vertex.set_row(tris->get_vertex(vi + 2)); - Vertexf v2 = vertex.get_data3f(); - - // Generate a temporary CollisionPolygon on the fly for - // each triangle in the Geom. - if (CollisionPolygon::verify_points(v0, v1, v2)) { - entry._into = new CollisionPolygon(v0, v1, v2); - entry.test_intersection((*ci).second, this); - } - } - } - } - - } else { - PTA_Vertexf coords; - PTA_ushort vindex; - geom->get_coords(coords, vindex); - PTA_ushort tris = geom->get_tris(); + if (geom->get_primitive_type() == Geom::PT_polygons) { + const GeomVertexData *data =geom->get_vertex_data(); + GeomVertexReader vertex(data, InternalName::get_vertex()); - for (int i = 0; i < (int)tris.size(); i += 3) { - if (CollisionPolygon::verify_points(coords[tris[i]], - coords[tris[i + 1]], - coords[tris[i + 2]])) { - // Generate a temporary CollisionPolygon on the fly for each - // triangle in the Geom. - entry._into = - new CollisionPolygon(coords[tris[i]], coords[tris[i + 1]], - coords[tris[i + 2]]); - entry.test_intersection((*ci).second, this); + int num_primitives = geom->get_num_primitives(); + for (int i = 0; i < num_primitives; ++i) { + const GeomPrimitive *primitive = geom->get_primitive(i); + CPT(GeomPrimitive) tris = primitive->decompose(); + nassertv(tris->is_of_type(GeomTriangles::get_class_type())); + int num_vertices = tris->get_num_vertices(); + nassertv((num_vertices % 3) == 0); + + for (int vi = 0; vi < num_vertices; vi += 3) { + vertex.set_row(tris->get_vertex(vi)); + Vertexf v0 = vertex.get_data3f(); + vertex.set_row(tris->get_vertex(vi + 1)); + Vertexf v1 = vertex.get_data3f(); + vertex.set_row(tris->get_vertex(vi + 2)); + Vertexf v2 = vertex.get_data3f(); + + // Generate a temporary CollisionPolygon on the fly for + // each triangle in the Geom. + if (CollisionPolygon::verify_points(v0, v1, v2)) { + entry._into = new CollisionPolygon(v0, v1, v2); + entry.test_intersection((*ci).second, this); + } } } } diff --git a/panda/src/collide/collisionTube.cxx b/panda/src/collide/collisionTube.cxx index 43c751e613..64083b67be 100644 --- a/panda/src/collide/collisionTube.cxx +++ b/panda/src/collide/collisionTube.cxx @@ -27,7 +27,6 @@ #include "look_at.h" #include "geom.h" #include "geomNode.h" -#include "geomTristrip.h" #include "geometricBoundingVolume.h" #include "datagram.h" #include "datagramIterator.h" @@ -35,9 +34,9 @@ #include "bamWriter.h" #include "cmath.h" #include "transformState.h" -#include "qpgeom.h" -#include "qpgeomTristrips.h" -#include "qpgeomVertexWriter.h" +#include "geom.h" +#include "geomTristrips.h" +#include "geomVertexWriter.h" TypeHandle CollisionTube::_type_handle; @@ -391,108 +390,56 @@ fill_viz_geom() { LVector3f direction = (_b - _a); float length = direction.length(); - if (use_qpgeom) { - PT(qpGeomVertexData) vdata = new qpGeomVertexData - ("collision", qpGeomVertexFormat::get_v3(), - qpGeom::UH_static); - qpGeomVertexWriter vertex(vdata, InternalName::get_vertex()); - - PT(qpGeomTristrips) strip = new qpGeomTristrips(qpGeom::UH_static); - // Generate the first endcap. - static const int num_slices = 8; - static const int num_rings = 4; - int ri, si; - for (ri = 0; ri < num_rings; ri++) { - for (si = 0; si <= num_slices; si++) { - vertex.add_data3f(calc_sphere1_vertex(ri, si, num_rings, num_slices)); - vertex.add_data3f(calc_sphere1_vertex(ri + 1, si, num_rings, num_slices)); - } - strip->add_next_vertices((num_slices + 1) * 2); - strip->close_primitive(); - } - - // Now the cylinder sides. + PT(GeomVertexData) vdata = new GeomVertexData + ("collision", GeomVertexFormat::get_v3(), + Geom::UH_static); + GeomVertexWriter vertex(vdata, InternalName::get_vertex()); + + PT(GeomTristrips) strip = new GeomTristrips(Geom::UH_static); + // Generate the first endcap. + static const int num_slices = 8; + static const int num_rings = 4; + int ri, si; + for (ri = 0; ri < num_rings; ri++) { for (si = 0; si <= num_slices; si++) { - vertex.add_data3f(calc_sphere1_vertex(num_rings, si, num_rings, num_slices)); - vertex.add_data3f(calc_sphere2_vertex(num_rings, si, num_rings, num_slices, - length)); + vertex.add_data3f(calc_sphere1_vertex(ri, si, num_rings, num_slices)); + vertex.add_data3f(calc_sphere1_vertex(ri + 1, si, num_rings, num_slices)); } strip->add_next_vertices((num_slices + 1) * 2); strip->close_primitive(); - - // And the second endcap. - for (ri = num_rings - 1; ri >= 0; ri--) { - for (si = 0; si <= num_slices; si++) { - vertex.add_data3f(calc_sphere2_vertex(ri + 1, si, num_rings, num_slices, length)); - vertex.add_data3f(calc_sphere2_vertex(ri, si, num_rings, num_slices, length)); - } - strip->add_next_vertices((num_slices + 1) * 2); - strip->close_primitive(); - } - - PT(qpGeom) geom = new qpGeom; - geom->set_vertex_data(vdata); - geom->add_primitive(strip); - - // Now transform the vertices to their actual location. - LMatrix4f mat; - look_at(mat, direction, LVector3f(0.0f, 0.0f, 1.0f), CS_zup_right); - mat.set_row(3, _a); - geom->transform_vertices(mat); - - _viz_geom->add_geom(geom, get_solid_viz_state()); - _bounds_viz_geom->add_geom(geom, get_solid_bounds_viz_state()); - - } else { - PTA_Vertexf verts; - PTA_int lengths; - - // Generate the first endcap. - static const int num_slices = 8; - static const int num_rings = 4; - int ri, si; - for (ri = 0; ri < num_rings; ri++) { - for (si = 0; si <= num_slices; si++) { - verts.push_back(calc_sphere1_vertex(ri, si, num_rings, num_slices)); - verts.push_back(calc_sphere1_vertex(ri + 1, si, num_rings, num_slices)); - } - lengths.push_back((num_slices + 1) * 2); - } - - // Now the cylinder sides. - for (si = 0; si <= num_slices; si++) { - verts.push_back(calc_sphere1_vertex(num_rings, si, num_rings, num_slices)); - verts.push_back(calc_sphere2_vertex(num_rings, si, num_rings, num_slices, - length)); - } - lengths.push_back((num_slices + 1) * 2); - - // And the second endcap. - for (ri = num_rings - 1; ri >= 0; ri--) { - for (si = 0; si <= num_slices; si++) { - verts.push_back(calc_sphere2_vertex(ri + 1, si, num_rings, num_slices, length)); - verts.push_back(calc_sphere2_vertex(ri, si, num_rings, num_slices, length)); - } - lengths.push_back((num_slices + 1) * 2); - } - - // Now transform the vertices to their actual location. - LMatrix4f mat; - look_at(mat, direction, LVector3f(0.0f, 0.0f, 1.0f), CS_zup_right); - mat.set_row(3, _a); - - for (size_t i = 0; i < verts.size(); i++) { - verts[i] = verts[i] * mat; - } - - GeomTristrip *tube = new GeomTristrip; - tube->set_coords(verts); - tube->set_num_prims(lengths.size()); - tube->set_lengths(lengths); - - _viz_geom->add_geom(tube, get_solid_viz_state()); - _bounds_viz_geom->add_geom(tube, get_solid_bounds_viz_state()); } + + // Now the cylinder sides. + for (si = 0; si <= num_slices; si++) { + vertex.add_data3f(calc_sphere1_vertex(num_rings, si, num_rings, num_slices)); + vertex.add_data3f(calc_sphere2_vertex(num_rings, si, num_rings, num_slices, + length)); + } + strip->add_next_vertices((num_slices + 1) * 2); + strip->close_primitive(); + + // And the second endcap. + for (ri = num_rings - 1; ri >= 0; ri--) { + for (si = 0; si <= num_slices; si++) { + vertex.add_data3f(calc_sphere2_vertex(ri + 1, si, num_rings, num_slices, length)); + vertex.add_data3f(calc_sphere2_vertex(ri, si, num_rings, num_slices, length)); + } + strip->add_next_vertices((num_slices + 1) * 2); + strip->close_primitive(); + } + + PT(Geom) geom = new Geom; + geom->set_vertex_data(vdata); + geom->add_primitive(strip); + + // Now transform the vertices to their actual location. + LMatrix4f mat; + look_at(mat, direction, LVector3f(0.0f, 0.0f, 1.0f), CS_zup_right); + mat.set_row(3, _a); + geom->transform_vertices(mat); + + _viz_geom->add_geom(geom, get_solid_viz_state()); + _bounds_viz_geom->add_geom(geom, get_solid_bounds_viz_state()); } //////////////////////////////////////////////////////////////////// diff --git a/panda/src/collide/collisionVisualizer.cxx b/panda/src/collide/collisionVisualizer.cxx index 9bd48285aa..99073a3ce8 100644 --- a/panda/src/collide/collisionVisualizer.cxx +++ b/panda/src/collide/collisionVisualizer.cxx @@ -23,12 +23,17 @@ #include "cullableObject.h" #include "cullHandler.h" #include "renderState.h" +#include "renderModeAttrib.h" +#include "geomVertexData.h" +#include "geomVertexFormat.h" +#include "geomVertexArrayFormat.h" +#include "geom.h" +#include "geomPoints.h" +#include "geomLines.h" #include "omniBoundingVolume.h" #include "depthOffsetAttrib.h" #include "colorScaleAttrib.h" #include "transparencyAttrib.h" -#include "geomLine.h" -#include "geomSphere.h" #ifdef DO_COLLISION_RECORDING @@ -159,54 +164,83 @@ cull_callback(CullTraverser *trav, CullTraverserData &data) { // Now draw all of the detected points. if (!viz_info._points.empty()) { CPT(RenderState) empty_state = RenderState::make_empty(); - - PTA_Colorf colors; - colors.push_back(Colorf(1.0f, 0.0f, 0.0f, 1.0f)); - colors.push_back(Colorf(1.0f, 1.0f, 1.0f, 1.0f)); + CPT(RenderState) point_state = RenderState::make(RenderModeAttrib::make(RenderModeAttrib::M_unchanged, 1.0f, true)); + + PT(GeomVertexArrayFormat) point_array_format = + new GeomVertexArrayFormat(InternalName::get_vertex(), 3, + Geom::NT_float32, Geom::C_point, + InternalName::get_color(), 1, + Geom::NT_packed_dabc, Geom::C_color, + InternalName::get_size(), 1, + Geom::NT_float32, Geom::C_other); + CPT(GeomVertexFormat) point_format = + GeomVertexFormat::register_format(point_array_format); Points::const_iterator pi; for (pi = viz_info._points.begin(); pi != viz_info._points.end(); ++pi) { const CollisionPoint &point = (*pi); - - // Draw a small red sphere at the surface point, and a smaller - // white sphere at the interior point. + + // Draw a small red point at the surface point, and a smaller + // white point at the interior point. { - PT(GeomSphere) sphere = new GeomSphere; - PTA_Vertexf verts; - verts.push_back(point._surface_point); - verts.push_back(point._surface_point + - LVector3f(0.1f * _viz_scale, 0.0f, 0.0f)); - sphere->set_coords(verts); - sphere->set_colors(colors, G_PER_PRIM); - sphere->set_num_prims(1); - + PT(GeomVertexData) point_vdata = + new GeomVertexData("viz", point_format, Geom::UH_stream); + + PT(GeomPoints) points = new GeomPoints(Geom::UH_stream); + + GeomVertexWriter vertex(point_vdata, InternalName::get_vertex()); + GeomVertexWriter color(point_vdata, InternalName::get_color()); + GeomVertexWriter size(point_vdata, InternalName::get_size()); + + vertex.add_data3f(point._surface_point); + color.add_data4f(1.0f, 0.0f, 0.0f, 1.0f); + size.add_data1f(0.1f * _viz_scale); + points->add_next_vertices(1); + points->close_primitive(); + if (point._interior_point != point._surface_point) { - verts.push_back(point._interior_point); - verts.push_back(point._interior_point + - LVector3f(0.05f * _viz_scale, 0.0f, 0.0f)); - sphere->set_num_prims(2); + vertex.add_data3f(point._interior_point); + color.add_data4f(1.0f, 1.0f, 1.0f, 1.0f); + size.add_data1f(0.05f * _viz_scale); + points->add_next_vertices(1); + points->close_primitive(); } + + PT(Geom) geom = new Geom; + geom->set_vertex_data(point_vdata); + geom->add_primitive(points); CullableObject *object = - new CullableObject(sphere, empty_state, xform_data._modelview_transform); + new CullableObject(geom, point_state, xform_data._modelview_transform); trav->get_cull_handler()->record_object(object, trav); } // Draw the normal vector at the surface point. if (!point._surface_normal.almost_equal(LVector3f::zero())) { - PT(GeomLine) line = new GeomLine; - - PTA_Vertexf verts; - verts.push_back(point._surface_point); - verts.push_back(point._surface_point + - point._surface_normal * _viz_scale); - line->set_coords(verts); - line->set_colors(colors, G_PER_VERTEX); - line->set_num_prims(1); + PT(GeomVertexData) line_vdata = + new GeomVertexData("viz", GeomVertexFormat::get_v3cp(), + Geom::UH_stream); + + PT(GeomLines) lines = new GeomLines(Geom::UH_stream); + + GeomVertexWriter vertex(line_vdata, InternalName::get_vertex()); + GeomVertexWriter color(line_vdata, InternalName::get_color()); + + vertex.add_data3f(point._surface_point); + vertex.add_data3f(point._surface_point + + point._surface_normal * _viz_scale); + color.add_data4f(1.0f, 0.0f, 0.0f, 1.0f); + color.add_data4f(1.0f, 1.0f, 1.0f, 1.0f); + lines->add_next_vertices(2); + lines->close_primitive(); + + PT(Geom) geom = new Geom; + geom->set_vertex_data(line_vdata); + geom->add_primitive(lines); CullableObject *object = - new CullableObject(line, empty_state, xform_data._modelview_transform); + new CullableObject(geom, empty_state, xform_data._modelview_transform); trav->get_cull_handler()->record_object(object, trav); } diff --git a/panda/src/display/graphicsEngine.cxx b/panda/src/display/graphicsEngine.cxx index c902f7eb10..738a774eca 100644 --- a/panda/src/display/graphicsEngine.cxx +++ b/panda/src/display/graphicsEngine.cxx @@ -32,7 +32,7 @@ #include "mutexHolder.h" #include "cullFaceAttrib.h" #include "string_utils.h" -#include "qpgeomCacheManager.h" +#include "geomCacheManager.h" #if defined(WIN32) #define WINDOWS_LEAN_AND_MEAN @@ -501,10 +501,10 @@ render_frame() { CullTraverser::_nodes_pcollector.clear_level(); CullTraverser::_geom_nodes_pcollector.clear_level(); CullTraverser::_geoms_pcollector.clear_level(); - qpGeomCacheManager::_geom_cache_active_pcollector.clear_level(); - qpGeomCacheManager::_geom_cache_record_pcollector.clear_level(); - qpGeomCacheManager::_geom_cache_erase_pcollector.clear_level(); - qpGeomCacheManager::_geom_cache_evict_pcollector.clear_level(); + GeomCacheManager::_geom_cache_active_pcollector.clear_level(); + GeomCacheManager::_geom_cache_record_pcollector.clear_level(); + GeomCacheManager::_geom_cache_erase_pcollector.clear_level(); + GeomCacheManager::_geom_cache_evict_pcollector.clear_level(); _transform_states_pcollector.set_level(TransformState::get_num_states()); _render_states_pcollector.set_level(RenderState::get_num_states()); diff --git a/panda/src/display/graphicsStateGuardian.cxx b/panda/src/display/graphicsStateGuardian.cxx index 2be9a3313a..c7341329f6 100644 --- a/panda/src/display/graphicsStateGuardian.cxx +++ b/panda/src/display/graphicsStateGuardian.cxx @@ -39,9 +39,9 @@ #include "throw_event.h" #include "clockObject.h" #include "pStatTimer.h" -#include "qpgeomTristrips.h" -#include "qpgeomTrifans.h" -#include "qpgeomLinestrips.h" +#include "geomTristrips.h" +#include "geomTrifans.h" +#include "geomLinestrips.h" #include @@ -138,12 +138,6 @@ GraphicsStateGuardian(const FrameBufferProperties &properties, // twiddling the material and/or ambient light (which could mean // enabling lighting even without a LightAttrib). _color_scale_via_lighting = color_scale_via_lighting; - - if (!use_qpgeom) { - // The old Geom interface doesn't really work too well with the - // color_scale_via_lighting trick. - _color_scale_via_lighting = false; - } } //////////////////////////////////////////////////////////////////// @@ -343,7 +337,7 @@ release_geom(GeomContext *) { // rendering. //////////////////////////////////////////////////////////////////// VertexBufferContext *GraphicsStateGuardian:: -prepare_vertex_buffer(qpGeomVertexArrayData *) { +prepare_vertex_buffer(GeomVertexArrayData *) { return (VertexBufferContext *)NULL; } @@ -365,7 +359,7 @@ release_vertex_buffer(VertexBufferContext *) { // rendering. //////////////////////////////////////////////////////////////////// IndexBufferContext *GraphicsStateGuardian:: -prepare_index_buffer(qpGeomPrimitive *) { +prepare_index_buffer(GeomPrimitive *) { return (IndexBufferContext *)NULL; } @@ -387,7 +381,7 @@ release_index_buffer(IndexBufferContext *) { // vertices appropriate to this GSG for the indicated // state. //////////////////////////////////////////////////////////////////// -PT(qpGeomMunger) GraphicsStateGuardian:: +PT(GeomMunger) GraphicsStateGuardian:: get_geom_munger(const RenderState *state) { // Before we even look up the map, see if the _last_mi value points // to this GSG. This is likely because we tend to visit the same @@ -408,7 +402,7 @@ get_geom_munger(const RenderState *state) { } // Nothing in the map; create a new entry. - PT(qpGeomMunger) munger = make_geom_munger(state); + PT(GeomMunger) munger = make_geom_munger(state); // Cast the RenderState to a non-const object. We can do this // because we are only updating a cache within the RenderState, not @@ -426,7 +420,7 @@ get_geom_munger(const RenderState *state) { // Description: Creates a new GeomMunger object to munge vertices // appropriate to this GSG for the indicated state. //////////////////////////////////////////////////////////////////// -PT(qpGeomMunger) GraphicsStateGuardian:: +PT(GeomMunger) GraphicsStateGuardian:: make_geom_munger(const RenderState *state) { // The default implementation returns no munger at all, but // presumably, every kind of GSG needs some special munging action, @@ -814,8 +808,8 @@ finish_decal() { // are ok, false to abort this group of primitives. //////////////////////////////////////////////////////////////////// bool GraphicsStateGuardian:: -begin_draw_primitives(const qpGeom *, const qpGeomMunger *munger, - const qpGeomVertexData *data) { +begin_draw_primitives(const Geom *, const GeomMunger *munger, + const GeomVertexData *data) { _munger = munger; _vertex_data = data; @@ -828,7 +822,7 @@ begin_draw_primitives(const qpGeom *, const qpGeomMunger *munger, // Description: Draws a series of disconnected triangles. //////////////////////////////////////////////////////////////////// void GraphicsStateGuardian:: -draw_triangles(const qpGeomTriangles *) { +draw_triangles(const GeomTriangles *) { } //////////////////////////////////////////////////////////////////// @@ -837,7 +831,7 @@ draw_triangles(const qpGeomTriangles *) { // Description: Draws a series of triangle strips. //////////////////////////////////////////////////////////////////// void GraphicsStateGuardian:: -draw_tristrips(const qpGeomTristrips *primitive) { +draw_tristrips(const GeomTristrips *primitive) { } //////////////////////////////////////////////////////////////////// @@ -846,7 +840,7 @@ draw_tristrips(const qpGeomTristrips *primitive) { // Description: Draws a series of triangle fans. //////////////////////////////////////////////////////////////////// void GraphicsStateGuardian:: -draw_trifans(const qpGeomTrifans *primitive) { +draw_trifans(const GeomTrifans *primitive) { } //////////////////////////////////////////////////////////////////// @@ -855,7 +849,7 @@ draw_trifans(const qpGeomTrifans *primitive) { // Description: Draws a series of disconnected line segments. //////////////////////////////////////////////////////////////////// void GraphicsStateGuardian:: -draw_lines(const qpGeomLines *) { +draw_lines(const GeomLines *) { } //////////////////////////////////////////////////////////////////// @@ -864,7 +858,7 @@ draw_lines(const qpGeomLines *) { // Description: Draws a series of line strips. //////////////////////////////////////////////////////////////////// void GraphicsStateGuardian:: -draw_linestrips(const qpGeomLinestrips *primitive) { +draw_linestrips(const GeomLinestrips *primitive) { } //////////////////////////////////////////////////////////////////// @@ -873,7 +867,7 @@ draw_linestrips(const qpGeomLinestrips *primitive) { // Description: Draws a series of disconnected points. //////////////////////////////////////////////////////////////////// void GraphicsStateGuardian:: -draw_points(const qpGeomPoints *) { +draw_points(const GeomPoints *) { } //////////////////////////////////////////////////////////////////// diff --git a/panda/src/display/graphicsStateGuardian.h b/panda/src/display/graphicsStateGuardian.h index a26b09f1e6..bfc709381c 100644 --- a/panda/src/display/graphicsStateGuardian.h +++ b/panda/src/display/graphicsStateGuardian.h @@ -45,8 +45,8 @@ #include "lightAttrib.h" #include "transparencyAttrib.h" #include "config_display.h" -#include "qpgeomMunger.h" -#include "qpgeomVertexData.h" +#include "geomMunger.h" +#include "geomVertexData.h" #include "notify.h" #include "pvector.h" @@ -117,14 +117,14 @@ public: virtual GeomContext *prepare_geom(Geom *geom); virtual void release_geom(GeomContext *gc); - virtual VertexBufferContext *prepare_vertex_buffer(qpGeomVertexArrayData *data); + virtual VertexBufferContext *prepare_vertex_buffer(GeomVertexArrayData *data); virtual void release_vertex_buffer(VertexBufferContext *vbc); - virtual IndexBufferContext *prepare_index_buffer(qpGeomPrimitive *data); + virtual IndexBufferContext *prepare_index_buffer(GeomPrimitive *data); virtual void release_index_buffer(IndexBufferContext *ibc); - PT(qpGeomMunger) get_geom_munger(const RenderState *state); - virtual PT(qpGeomMunger) make_geom_munger(const RenderState *state); + PT(GeomMunger) get_geom_munger(const RenderState *state); + virtual PT(GeomMunger) make_geom_munger(const RenderState *state); virtual void set_state_and_transform(const RenderState *state, const TransformState *transform); @@ -162,15 +162,15 @@ public: virtual CPT(RenderState) begin_decal_base_second(); virtual void finish_decal(); - virtual bool begin_draw_primitives(const qpGeom *geom, - const qpGeomMunger *munger, - const qpGeomVertexData *vertex_data); - virtual void draw_triangles(const qpGeomTriangles *primitive); - virtual void draw_tristrips(const qpGeomTristrips *primitive); - virtual void draw_trifans(const qpGeomTrifans *primitive); - virtual void draw_lines(const qpGeomLines *primitive); - virtual void draw_linestrips(const qpGeomLinestrips *primitive); - virtual void draw_points(const qpGeomPoints *primitive); + virtual bool begin_draw_primitives(const Geom *geom, + const GeomMunger *munger, + const GeomVertexData *vertex_data); + virtual void draw_triangles(const GeomTriangles *primitive); + virtual void draw_tristrips(const GeomTristrips *primitive); + virtual void draw_trifans(const GeomTrifans *primitive); + virtual void draw_lines(const GeomLines *primitive); + virtual void draw_linestrips(const GeomLinestrips *primitive); + virtual void draw_points(const GeomPoints *primitive); virtual void end_draw_primitives(); virtual bool framebuffer_bind_to_texture(GraphicsOutput *win, Texture *tex); @@ -287,8 +287,8 @@ protected: CPT(RenderState) _state; CPT(TransformState) _external_transform; CPT(TransformState) _internal_transform; - CPT(qpGeomMunger) _munger; - CPT(qpGeomVertexData) _vertex_data; + CPT(GeomMunger) _munger; + CPT(GeomVertexData) _vertex_data; int _buffer_mask; Colorf _color_clear_value; diff --git a/panda/src/display/standardMunger.cxx b/panda/src/display/standardMunger.cxx index 80d378031f..32c4389721 100644 --- a/panda/src/display/standardMunger.cxx +++ b/panda/src/display/standardMunger.cxx @@ -104,9 +104,9 @@ StandardMunger:: // Description: Given a source GeomVertexData, converts it as // necessary for rendering. //////////////////////////////////////////////////////////////////// -CPT(qpGeomVertexData) StandardMunger:: -munge_data_impl(const qpGeomVertexData *data) { - CPT(qpGeomVertexData) new_data = data; +CPT(GeomVertexData) StandardMunger:: +munge_data_impl(const GeomVertexData *data) { + CPT(GeomVertexData) new_data = data; if (_munge_color) { new_data = new_data->set_color(_color, _num_components, _numeric_type, @@ -116,7 +116,7 @@ munge_data_impl(const qpGeomVertexData *data) { _numeric_type, _contents); } - qpGeomVertexAnimationSpec animation = new_data->get_format()->get_animation(); + GeomVertexAnimationSpec animation = new_data->get_format()->get_animation(); if (hardware_animated_vertices && animation.get_animation_type() == AT_panda && new_data->get_slider_table() == (SliderTable *)NULL) { @@ -151,8 +151,8 @@ munge_data_impl(const qpGeomVertexData *data) { } } - CPT(qpGeomVertexFormat) orig_format = new_data->get_format(); - CPT(qpGeomVertexFormat) new_format = munge_format(orig_format, animation); + CPT(GeomVertexFormat) orig_format = new_data->get_format(); + CPT(GeomVertexFormat) new_format = munge_format(orig_format, animation); if (new_format == orig_format) { // Trivial case. @@ -168,7 +168,7 @@ munge_data_impl(const qpGeomVertexData *data) { // Description: Converts a Geom and/or its data as necessary. //////////////////////////////////////////////////////////////////// bool StandardMunger:: -munge_geom_impl(CPT(qpGeom) &geom, CPT(qpGeomVertexData) &vertex_data) { +munge_geom_impl(CPT(Geom) &geom, CPT(GeomVertexData) &vertex_data) { int geom_rendering = geom->get_geom_rendering(); int supported_geom_rendering = _gsg->get_supported_geom_rendering(); @@ -178,7 +178,7 @@ munge_geom_impl(CPT(qpGeom) &geom, CPT(qpGeomVertexData) &vertex_data) { // Even beyond munging the vertex format, we have to convert the // Geom itself into a new primitive type the GSG can render // directly. - if ((unsupported_bits & qpGeom::GR_composite_bits) != 0) { + if ((unsupported_bits & Geom::GR_composite_bits) != 0) { // This decomposes everything in the primitive, so that if (for // instance) the primitive contained both strips and fans, but // the GSG didn't support fans, it would decompose the strips @@ -189,15 +189,15 @@ munge_geom_impl(CPT(qpGeom) &geom, CPT(qpGeomVertexData) &vertex_data) { // fans. geom = geom->decompose(); } - if ((unsupported_bits & qpGeom::GR_shade_model_bits) != 0) { + if ((unsupported_bits & Geom::GR_shade_model_bits) != 0) { // Rotate the vertices to account for different shade-model // expectations (e.g. SM_flat_last_vertex to // SM_flat_first_vertex) geom = geom->rotate(); } - if ((unsupported_bits & qpGeom::GR_indexed_bits) != 0) { + if ((unsupported_bits & Geom::GR_indexed_bits) != 0) { // Convert indexed geometry to nonindexed geometry. - PT(qpGeom) new_geom = new qpGeom(*geom); + PT(Geom) new_geom = new Geom(*geom); new_geom->make_nonindexed(false); geom = new_geom; } @@ -215,7 +215,7 @@ munge_geom_impl(CPT(qpGeom) &geom, CPT(qpGeomVertexData) &vertex_data) { // different type. //////////////////////////////////////////////////////////////////// int StandardMunger:: -compare_to_impl(const qpGeomMunger *other) const { +compare_to_impl(const GeomMunger *other) const { const StandardMunger *om = DCAST(StandardMunger, other); if (_render_mode != om->_render_mode) { return _render_mode < om->_render_mode ? -1 : 1; @@ -254,7 +254,7 @@ compare_to_impl(const qpGeomMunger *other) const { // them to be the same.) //////////////////////////////////////////////////////////////////// int StandardMunger:: -geom_compare_to_impl(const qpGeomMunger *other) const { +geom_compare_to_impl(const GeomMunger *other) const { const StandardMunger *om = DCAST(StandardMunger, other); if (_munge_color != om->_munge_color) { return (int)_munge_color - (int)om->_munge_color; diff --git a/panda/src/display/standardMunger.h b/panda/src/display/standardMunger.h index c13b1a5c0d..3520a6ffcc 100644 --- a/panda/src/display/standardMunger.h +++ b/panda/src/display/standardMunger.h @@ -33,8 +33,6 @@ // all GSG types; for instance, applies ColorAttrib and // ColorScaleAttrib to the vertices, and checks for // hardware-accelerated animation capabilities. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// class EXPCL_PANDA StandardMunger : public StateMunger { public: @@ -46,10 +44,10 @@ public: INLINE GraphicsStateGuardian *get_gsg() const; protected: - virtual CPT(qpGeomVertexData) munge_data_impl(const qpGeomVertexData *data); - virtual int compare_to_impl(const qpGeomMunger *other) const; - virtual bool munge_geom_impl(CPT(qpGeom) &geom, CPT(qpGeomVertexData) &data); - virtual int geom_compare_to_impl(const qpGeomMunger *other) const; + virtual CPT(GeomVertexData) munge_data_impl(const GeomVertexData *data); + virtual int compare_to_impl(const GeomMunger *other) const; + virtual bool munge_geom_impl(CPT(Geom) &geom, CPT(GeomVertexData) &data); + virtual int geom_compare_to_impl(const GeomMunger *other) const; virtual CPT(RenderState) munge_state_impl(const RenderState *state); private: diff --git a/panda/src/distort/projectionScreen.cxx b/panda/src/distort/projectionScreen.cxx index 3e4f70d4f2..e6567b0c91 100644 --- a/panda/src/distort/projectionScreen.cxx +++ b/panda/src/distort/projectionScreen.cxx @@ -18,16 +18,14 @@ #include "projectionScreen.h" #include "geomNode.h" -#include "geom.h" -#include "geomTristrip.h" #include "transformState.h" #include "workingNodePath.h" #include "switchNode.h" -#include "qpgeom.h" -#include "qpgeomTristrips.h" -#include "qpgeomVertexWriter.h" -#include "qpgeomVertexReader.h" -#include "qpgeomVertexRewriter.h" +#include "geom.h" +#include "geomTristrips.h" +#include "geomVertexWriter.h" +#include "geomVertexReader.h" +#include "geomVertexRewriter.h" TypeHandle ProjectionScreen::_type_handle; @@ -210,132 +208,56 @@ generate_screen(const NodePath &projector, const string &screen_name, float x_scale = 2.0f / (num_x_verts - 1); float y_scale = 2.0f / (num_y_verts - 1); - if (use_qpgeom) { - PT(qpGeomVertexData) vdata = new qpGeomVertexData - ("projectionScreen", qpGeomVertexFormat::get_v3n3(), - qpGeom::UH_dynamic); - qpGeomVertexWriter vertex(vdata, InternalName::get_vertex()); - qpGeomVertexWriter normal(vdata, InternalName::get_normal()); - - for (int yi = 0; yi < num_y_verts; yi++) { - for (int xi = 0; xi < num_x_verts; xi++) { - LPoint2f film = LPoint2f((float)xi * x_scale - 1.0f, - (float)yi * y_scale - 1.0f); - - // Reduce the image by the fill ratio. - film *= fill_ratio; - - LPoint3f near_point, far_point; - lens->extrude(film, near_point, far_point); - LPoint3f point = near_point + t * (far_point - near_point); - - // Normals aren't often needed on projection screens, but you - // never know. - LVector3f norm; - lens->extrude_vec(film, norm); - - vertex.add_data3f(point * rel_mat); - normal.add_data3f(-normalize(norm * rel_mat)); - } + PT(GeomVertexData) vdata = new GeomVertexData + ("projectionScreen", GeomVertexFormat::get_v3n3(), + Geom::UH_dynamic); + GeomVertexWriter vertex(vdata, InternalName::get_vertex()); + GeomVertexWriter normal(vdata, InternalName::get_normal()); + + for (int yi = 0; yi < num_y_verts; yi++) { + for (int xi = 0; xi < num_x_verts; xi++) { + LPoint2f film = LPoint2f((float)xi * x_scale - 1.0f, + (float)yi * y_scale - 1.0f); + + // Reduce the image by the fill ratio. + film *= fill_ratio; + + LPoint3f near_point, far_point; + lens->extrude(film, near_point, far_point); + LPoint3f point = near_point + t * (far_point - near_point); + + // Normals aren't often needed on projection screens, but you + // never know. + LVector3f norm; + lens->extrude_vec(film, norm); + + vertex.add_data3f(point * rel_mat); + normal.add_data3f(-normalize(norm * rel_mat)); } - nassertr(vdata->get_num_rows() == num_verts, NULL); - - // Now synthesize a triangle mesh. We run triangle strips - // horizontally across the grid. - PT(qpGeomTristrips) strip = new qpGeomTristrips(qpGeom::UH_static); - // Fill up the index array into the vertices. This lays out the - // order of the vertices in each tristrip. - int ti, si; - for (ti = 1; ti < num_y_verts; ti++) { - strip->add_vertex(ti * num_x_verts); - for (si = 1; si < num_x_verts; si++) { - strip->add_vertex((ti - 1) * num_x_verts + (si-1)); - strip->add_vertex(ti * num_x_verts + si); - } - strip->add_vertex((ti - 1) * num_x_verts + (num_x_verts-1)); - strip->close_primitive(); - } - - PT(qpGeom) geom = new qpGeom; - geom->set_vertex_data(vdata); - geom->add_primitive(strip); - - geom_node->add_geom(geom); - - } else { - PTA_Vertexf coords; - PTA_Normalf norms; - coords.reserve(num_verts); - - for (int yi = 0; yi < num_y_verts; yi++) { - for (int xi = 0; xi < num_x_verts; xi++) { - LPoint2f film = LPoint2f((float)xi * x_scale - 1.0f, - (float)yi * y_scale - 1.0f); - - // Reduce the image by the fill ratio. - film *= fill_ratio; - - LPoint3f near_point, far_point; - lens->extrude(film, near_point, far_point); - LPoint3f point = near_point + t * (far_point - near_point); - - // Normals aren't often needed on projection screens, but you - // never know. - LVector3f normal; - lens->extrude_vec(film, normal); - - coords.push_back(point * rel_mat); - norms.push_back(-normalize(normal * rel_mat)); - } - } - nassertr((int)coords.size() == num_verts, NULL); - - // Now synthesize a triangle mesh. We run triangle strips - // horizontally across the grid. - int num_tstrips = (num_y_verts-1); - int tstrip_length = 2*(num_x_verts-1)+2; - - PTA_int lengths; - PTA_ushort vindex; - - // Set the lengths array. we are creating num_tstrips t-strips, - // each of which has tstrip_length vertices. - lengths.reserve(num_tstrips); - int n; - for (n = 0; n < num_tstrips; n++) { - lengths.push_back(tstrip_length); - } - nassertr((int)lengths.size() == num_tstrips, NULL); - - // Now fill up the index array into the vertices. This lays out the - // order of the vertices in each t-strip. - vindex.reserve(num_tstrips * tstrip_length); - n = 0; - int ti, si; - for (ti = 1; ti < num_y_verts; ti++) { - vindex.push_back(ti * num_x_verts); - for (si = 1; si < num_x_verts; si++) { - vindex.push_back((ti - 1) * num_x_verts + (si-1)); - vindex.push_back(ti * num_x_verts + si); - } - vindex.push_back((ti - 1) * num_x_verts + (num_x_verts-1)); - } - nassertr((int)vindex.size() == num_tstrips * tstrip_length, NULL); - - GeomTristrip *geom = new GeomTristrip; - geom->set_num_prims(num_tstrips); - geom->set_lengths(lengths); - - geom->set_coords(coords, G_PER_VERTEX, vindex); - geom->set_normals(norms, G_PER_VERTEX, vindex); - - // Make it white. - PTA_Colorf colors; - colors.push_back(Colorf(1.0f, 1.0f, 1.0f, 1.0f)); - geom->set_colors(colors, G_OVERALL); - - geom_node->add_geom(geom); } + nassertr(vdata->get_num_rows() == num_verts, NULL); + + // Now synthesize a triangle mesh. We run triangle strips + // horizontally across the grid. + PT(GeomTristrips) strip = new GeomTristrips(Geom::UH_static); + // Fill up the index array into the vertices. This lays out the + // order of the vertices in each tristrip. + int ti, si; + for (ti = 1; ti < num_y_verts; ti++) { + strip->add_vertex(ti * num_x_verts); + for (si = 1; si < num_x_verts; si++) { + strip->add_vertex((ti - 1) * num_x_verts + (si-1)); + strip->add_vertex(ti * num_x_verts + si); + } + strip->add_vertex((ti - 1) * num_x_verts + (num_x_verts-1)); + strip->close_primitive(); + } + + PT(Geom) geom = new Geom; + geom->set_vertex_data(vdata); + geom->add_primitive(strip); + + geom_node->add_geom(geom); _stale = true; ++_last_screen; @@ -462,9 +384,6 @@ void ProjectionScreen:: do_recompute(const NodePath &this_np) { if (_projector_node != (LensNode *)NULL && _projector_node->get_lens() != (Lens *)NULL) { - _colors.clear(); - _colors.push_back(_vignette_color); - _colors.push_back(_frame_color); recompute_node(this_np, _rel_top_mat, _computed_rel_top_mat); // Make sure this flag is set to false for next time. @@ -602,99 +521,50 @@ recompute_geom(Geom *geom, const LMatrix4f &rel_mat) { const LMatrix3f &to_uv = _invert_uvs ? lens_to_uv_inverted : lens_to_uv; - if (geom->is_qpgeom()) { - qpGeom *qpgeom = DCAST(qpGeom, geom); - // Iterate through all the vertices in the Geom. - - CPT(qpGeomVertexData) vdata = qpgeom->get_vertex_data(); - if (!vdata->has_column(_texcoord_name)) { - // We need to add a new column for the new texcoords. - vdata = vdata->replace_column - (_texcoord_name, 2, qpGeom::NT_float32, qpGeom::C_texcoord); - qpgeom->set_vertex_data(vdata); - } - if (_vignette_on && !vdata->has_column(InternalName::get_color())) { - // We need to add a column for color. - vdata = vdata->replace_column - (InternalName::get_color(), 1, qpGeom::NT_packed_dabc, qpGeom::C_color); - qpgeom->set_vertex_data(vdata); - } - - qpGeomVertexWriter texcoord(qpgeom->modify_vertex_data(), _texcoord_name); - qpGeomVertexWriter color(qpgeom->modify_vertex_data()); - qpGeomVertexReader vertex(qpgeom->get_vertex_data(), InternalName::get_vertex()); + // Iterate through all the vertices in the Geom. + CPT(GeomVertexData) vdata = geom->get_vertex_data(); + if (!vdata->has_column(_texcoord_name)) { + // We need to add a new column for the new texcoords. + vdata = vdata->replace_column + (_texcoord_name, 2, Geom::NT_float32, Geom::C_texcoord); + geom->set_vertex_data(vdata); + } + if (_vignette_on && !vdata->has_column(InternalName::get_color())) { + // We need to add a column for color. + vdata = vdata->replace_column + (InternalName::get_color(), 1, Geom::NT_packed_dabc, Geom::C_color); + geom->set_vertex_data(vdata); + } + + GeomVertexWriter texcoord(geom->modify_vertex_data(), _texcoord_name); + GeomVertexWriter color(geom->modify_vertex_data()); + GeomVertexReader vertex(geom->get_vertex_data(), InternalName::get_vertex()); + + if (_vignette_on) { + color.set_column(InternalName::get_color()); + } + + while (!vertex.is_at_end()) { + Vertexf vert = vertex.get_data3f(); + + // For each vertex, project to the film plane. + LPoint2f film(0.0, 0.0); + bool good = lens->project(vert * rel_mat, film); + + // Now the lens gives us coordinates in the range [-1, 1]. + // Rescale these to [0, 1]. + texcoord.set_data2f(film * to_uv); + + // If we have vignette color in effect, color the vertex according + // to whether it fell in front of the lens or not. if (_vignette_on) { - color.set_column(InternalName::get_color()); - } - - while (!vertex.is_at_end()) { - Vertexf vert = vertex.get_data3f(); - - // For each vertex, project to the film plane. - LPoint2f film(0.0, 0.0); - bool good = lens->project(vert * rel_mat, film); - - // Now the lens gives us coordinates in the range [-1, 1]. - // Rescale these to [0, 1]. - texcoord.set_data2f(film * to_uv); - - // If we have vignette color in effect, color the vertex according - // to whether it fell in front of the lens or not. - if (_vignette_on) { - if (good) { - color.set_data4f(_frame_color); - } else { - color.set_data4f(_vignette_color); - } + if (good) { + color.set_data4f(_frame_color); + } else { + color.set_data4f(_vignette_color); } } - - } else { - // Iterate through all the vertices in the Geom. - PTA_TexCoordf uvs; - PTA_ushort color_index; - int num_vertices = geom->get_num_vertices(); - Geom::VertexIterator vi = geom->make_vertex_iterator(); - - for (int i = 0; i < num_vertices; i++) { - const Vertexf &vert = geom->get_next_vertex(vi); - - // For each vertex, project to the film plane. - LPoint2f film(0.0, 0.0); - bool good = lens->project(vert * rel_mat, film); - - // Now the lens gives us coordinates in the range [-1, 1]. - // Rescale these to [0, 1]. - uvs.push_back(film * to_uv); - - // If we have vignette color in effect, color the vertex according - // to whether it fell in front of the lens or not. - if (_vignette_on) { - color_index.push_back(good ? 1 : 0); - } - } - - // Now set the UV's. If the geom already has indexed UV's, we need - // to make a new index for the geom. - geom->remove_texcoords(_texcoord_name); - if (!geom->are_texcoords_indexed()) { - // Simple case: no indexing needed. - geom->set_texcoords(_texcoord_name, uvs); - - } else { - // Harder case: we need to make up an index. But this isn't - // terribly hard. - PTA_ushort index = PTA_ushort::empty_array(num_vertices); - for (int i = 0; i < num_vertices; i++) { - index[i] = i; - } - geom->set_texcoords(_texcoord_name, uvs, index); - } - - if (_vignette_on) { - geom->set_colors(_colors, G_PER_VERTEX, color_index); - } } } @@ -813,49 +683,20 @@ make_mesh_geom_node(const WorkingNodePath &np, const NodePath &camera, //////////////////////////////////////////////////////////////////// PT(Geom) ProjectionScreen:: make_mesh_geom(const Geom *geom, Lens *lens, LMatrix4f &rel_mat) { - if (geom->is_qpgeom()) { - PT(qpGeom) new_geom = new qpGeom(*DCAST(qpGeom, geom)); + PT(Geom) new_geom = new Geom(*geom); - qpGeomVertexRewriter vertex(new_geom->modify_vertex_data(), - InternalName::get_vertex()); - while (!vertex.is_at_end()) { - Vertexf vert = vertex.get_data3f(); - - // Project each vertex into the film plane, but use three - // dimensions so the Z coordinate remains meaningful. - LPoint3f film(0.0f, 0.0f, 0.0f); - lens->project(vert * rel_mat, film); - - vertex.set_data3f(film); - } - - return new_geom.p(); + GeomVertexRewriter vertex(new_geom->modify_vertex_data(), + InternalName::get_vertex()); + while (!vertex.is_at_end()) { + Vertexf vert = vertex.get_data3f(); - } else { - Geom *new_geom = geom->make_copy(); - PT(Geom) result = new_geom; - - PTA_Vertexf coords; - GeomBindType bind; - PTA_ushort vindex; + // Project each vertex into the film plane, but use three + // dimensions so the Z coordinate remains meaningful. + LPoint3f film(0.0f, 0.0f, 0.0f); + lens->project(vert * rel_mat, film); - new_geom->get_coords(coords, bind, vindex); - - PTA_Vertexf new_coords; - new_coords.reserve(coords.size()); - for (int i = 0; i < (int)coords.size(); i++) { - const Vertexf &vert = coords[i]; - - // Project each vertex into the film plane, but use three - // dimensions so the Z coordinate remains meaningful. - LPoint3f film(0.0f, 0.0f, 0.0f); - lens->project(vert * rel_mat, film); - - new_coords.push_back(film); - } - - new_geom->set_coords(new_coords, bind, vindex); - - return result; - } + vertex.set_data3f(film); + } + + return new_geom; } diff --git a/panda/src/distort/projectionScreen.h b/panda/src/distort/projectionScreen.h index f35ac06d60..a9bf9ad8f4 100644 --- a/panda/src/distort/projectionScreen.h +++ b/panda/src/distort/projectionScreen.h @@ -130,7 +130,6 @@ private: Colorf _vignette_color; Colorf _frame_color; - PTA_Colorf _colors; LMatrix4f _rel_top_mat; bool _computed_rel_top_mat; bool _stale; diff --git a/panda/src/dxgsg7/Sources.pp b/panda/src/dxgsg7/Sources.pp index d9147398ea..009bf3db91 100644 --- a/panda/src/dxgsg7/Sources.pp +++ b/panda/src/dxgsg7/Sources.pp @@ -1,4 +1,7 @@ -#define BUILD_DIRECTORY $[HAVE_DX] +// DX7 build is temporarily disabled until we bring it up-to-date with +// the new Geom rewrite. +#define BUILD_DIRECTORY +//#define BUILD_DIRECTORY $[HAVE_DX] #define OTHER_LIBS interrogatedb:c dconfig:c dtoolconfig:m \ dtoolutil:c dtoolbase:c dtool:m diff --git a/panda/src/dxgsg8/dxGeomMunger8.cxx b/panda/src/dxgsg8/dxGeomMunger8.cxx index 800f412bd6..cfd398d455 100644 --- a/panda/src/dxgsg8/dxGeomMunger8.cxx +++ b/panda/src/dxgsg8/dxGeomMunger8.cxx @@ -17,11 +17,11 @@ //////////////////////////////////////////////////////////////////// #include "dxGeomMunger8.h" -#include "qpgeomVertexReader.h" -#include "qpgeomVertexWriter.h" +#include "geomVertexReader.h" +#include "geomVertexWriter.h" #include "config_dxgsg8.h" -qpGeomMunger *DXGeomMunger8::_deleted_chain = NULL; +GeomMunger *DXGeomMunger8::_deleted_chain = NULL; TypeHandle DXGeomMunger8::_type_handle; //////////////////////////////////////////////////////////////////// @@ -30,9 +30,9 @@ TypeHandle DXGeomMunger8::_type_handle; // Description: Given a source GeomVertexFormat, converts it if // necessary to the appropriate format for rendering. //////////////////////////////////////////////////////////////////// -CPT(qpGeomVertexFormat) DXGeomMunger8:: -munge_format_impl(const qpGeomVertexFormat *orig, - const qpGeomVertexAnimationSpec &animation) { +CPT(GeomVertexFormat) DXGeomMunger8:: +munge_format_impl(const GeomVertexFormat *orig, + const GeomVertexAnimationSpec &animation) { if (dxgsg8_cat.is_debug()) { if (animation.get_animation_type() != AT_none) { dxgsg8_cat.debug() @@ -42,15 +42,15 @@ munge_format_impl(const qpGeomVertexFormat *orig, // We have to build a completely new format that includes only the // appropriate components, in the appropriate order, in just one // array. - PT(qpGeomVertexFormat) new_format = new qpGeomVertexFormat(*orig); + PT(GeomVertexFormat) new_format = new GeomVertexFormat(*orig); new_format->set_animation(animation); - PT(qpGeomVertexArrayFormat) new_array_format = new qpGeomVertexArrayFormat; + PT(GeomVertexArrayFormat) new_array_format = new GeomVertexArrayFormat; - const qpGeomVertexColumn *vertex_type = orig->get_vertex_column(); - const qpGeomVertexColumn *normal_type = orig->get_normal_column(); - const qpGeomVertexColumn *color_type = orig->get_color_column(); + const GeomVertexColumn *vertex_type = orig->get_vertex_column(); + const GeomVertexColumn *normal_type = orig->get_normal_column(); + const GeomVertexColumn *color_type = orig->get_color_column(); - if (vertex_type != (const qpGeomVertexColumn *)NULL) { + if (vertex_type != (const GeomVertexColumn *)NULL) { new_array_format->add_column (InternalName::get_vertex(), 3, NT_float32, vertex_type->get_contents()); @@ -88,13 +88,13 @@ munge_format_impl(const qpGeomVertexFormat *orig, new_format->remove_column(InternalName::get_transform_blend()); } - if (normal_type != (const qpGeomVertexColumn *)NULL) { + if (normal_type != (const GeomVertexColumn *)NULL) { new_array_format->add_column (InternalName::get_normal(), 3, NT_float32, C_vector); new_format->remove_column(normal_type->get_name()); } - if (color_type != (const qpGeomVertexColumn *)NULL) { + if (color_type != (const GeomVertexColumn *)NULL) { new_array_format->add_column (InternalName::get_color(), 1, NT_packed_dabc, C_color); new_format->remove_column(color_type->get_name()); @@ -120,9 +120,9 @@ munge_format_impl(const qpGeomVertexFormat *orig, const InternalName *name = stage->get_texcoord_name(); if (used_stages.insert(name).second) { // This is the first time we've encountered this texcoord name. - const qpGeomVertexColumn *texcoord_type = orig->get_column(name); + const GeomVertexColumn *texcoord_type = orig->get_column(name); - if (texcoord_type != (const qpGeomVertexColumn *)NULL) { + if (texcoord_type != (const GeomVertexColumn *)NULL) { new_array_format->add_column (name, texcoord_type->get_num_values(), NT_float32, C_texcoord); } else { @@ -144,7 +144,7 @@ munge_format_impl(const qpGeomVertexFormat *orig, // Use the new format; make sure the FVF-style array we just built // up is first in the list. new_format->insert_array(0, new_array_format); - return qpGeomVertexFormat::register_format(new_format); + return GeomVertexFormat::register_format(new_format); } //////////////////////////////////////////////////////////////////// @@ -156,7 +156,7 @@ munge_format_impl(const qpGeomVertexFormat *orig, // different type. //////////////////////////////////////////////////////////////////// int DXGeomMunger8:: -compare_to_impl(const qpGeomMunger *other) const { +compare_to_impl(const GeomMunger *other) const { const DXGeomMunger8 *om = DCAST(DXGeomMunger8, other); if (_texture != om->_texture) { return _texture < om->_texture ? -1 : 1; @@ -177,7 +177,7 @@ compare_to_impl(const qpGeomMunger *other) const { // different type. //////////////////////////////////////////////////////////////////// int DXGeomMunger8:: -geom_compare_to_impl(const qpGeomMunger *other) const { +geom_compare_to_impl(const GeomMunger *other) const { // Unlike GLGeomMunger, we do consider _texture and _tex_gen // important for this purpose, since they control the number and // order of texture coordinates we might put into the FVF. diff --git a/panda/src/dxgsg8/dxGeomMunger8.h b/panda/src/dxgsg8/dxGeomMunger8.h index 6eeb3214c8..1e460eae54 100644 --- a/panda/src/dxgsg8/dxGeomMunger8.h +++ b/panda/src/dxgsg8/dxGeomMunger8.h @@ -36,11 +36,11 @@ public: INLINE DXGeomMunger8(GraphicsStateGuardian *gsg, const RenderState *state); protected: - virtual CPT(qpGeomVertexFormat) munge_format_impl(const qpGeomVertexFormat *orig, - const qpGeomVertexAnimationSpec &animation); + virtual CPT(GeomVertexFormat) munge_format_impl(const GeomVertexFormat *orig, + const GeomVertexAnimationSpec &animation); - virtual int compare_to_impl(const qpGeomMunger *other) const; - virtual int geom_compare_to_impl(const qpGeomMunger *other) const; + virtual int compare_to_impl(const GeomMunger *other) const; + virtual int geom_compare_to_impl(const GeomMunger *other) const; public: INLINE void *operator new(size_t size); @@ -49,7 +49,7 @@ private: CPT(TextureAttrib) _texture; CPT(TexGenAttrib) _tex_gen; - static qpGeomMunger *_deleted_chain; + static GeomMunger *_deleted_chain; public: static TypeHandle get_class_type() { diff --git a/panda/src/dxgsg8/dxGraphicsStateGuardian8.cxx b/panda/src/dxgsg8/dxGraphicsStateGuardian8.cxx index 1d23b66a8d..3964f86dbe 100644 --- a/panda/src/dxgsg8/dxGraphicsStateGuardian8.cxx +++ b/panda/src/dxgsg8/dxGraphicsStateGuardian8.cxx @@ -21,8 +21,6 @@ #include "displayRegion.h" #include "renderBuffer.h" #include "geom.h" -#include "geomSphere.h" -#include "geomIssuer.h" #include "graphicsWindow.h" #include "graphicsEngine.h" #include "lens.h" @@ -47,15 +45,15 @@ #include "depthOffsetAttrib.h" #include "fog.h" #include "throw_event.h" -#include "qpgeomVertexFormat.h" -#include "qpgeomVertexData.h" -#include "qpgeomTriangles.h" -#include "qpgeomTristrips.h" -#include "qpgeomTrifans.h" -#include "qpgeomLines.h" -#include "qpgeomLinestrips.h" -#include "qpgeomPoints.h" -#include "qpGeomVertexReader.h" +#include "geomVertexFormat.h" +#include "geomVertexData.h" +#include "geomTriangles.h" +#include "geomTristrips.h" +#include "geomTrifans.h" +#include "geomLines.h" +#include "geomLinestrips.h" +#include "geomPoints.h" +#include "GeomVertexReader.h" #include "dxGeomMunger8.h" #include "config_gobj.h" #include "dxVertexBufferContext8.h" @@ -113,10 +111,10 @@ DXGraphicsStateGuardian8(const FrameBufferProperties &properties) : // texture coordinates via a texture matrix, so we don't advertise // GR_point_sprite_tex_matrix. _supported_geom_rendering = - qpGeom::GR_point | qpGeom::GR_point_uniform_size | - qpGeom::GR_point_perspective | qpGeom::GR_point_sprite | - qpGeom::GR_triangle_strip | qpGeom::GR_triangle_fan | - qpGeom::GR_flat_first_vertex; + Geom::GR_point | Geom::GR_point_uniform_size | + Geom::GR_point_perspective | Geom::GR_point_sprite | + Geom::GR_triangle_strip | Geom::GR_triangle_fan | + Geom::GR_flat_first_vertex; } //////////////////////////////////////////////////////////////////// @@ -282,7 +280,7 @@ release_texture(TextureContext *tc) { // prepare a buffer. Instead, call Geom::prepare(). //////////////////////////////////////////////////////////////////// VertexBufferContext *DXGraphicsStateGuardian8:: -prepare_vertex_buffer(qpGeomVertexArrayData *data) { +prepare_vertex_buffer(GeomVertexArrayData *data) { DXVertexBufferContext8 *dvbc = new DXVertexBufferContext8(data); return dvbc; } @@ -300,7 +298,7 @@ apply_vertex_buffer(VertexBufferContext *vbc) { if (dvbc->_vbuffer == NULL) { // Attempt to create a new vertex buffer. if (vertex_buffers && - dvbc->get_data()->get_usage_hint() != qpGeom::UH_client) { + dvbc->get_data()->get_usage_hint() != Geom::UH_client) { dvbc->create_vbuffer(*_screen); } @@ -375,7 +373,7 @@ release_vertex_buffer(VertexBufferContext *vbc) { // prepare a buffer. Instead, call Geom::prepare(). //////////////////////////////////////////////////////////////////// IndexBufferContext *DXGraphicsStateGuardian8:: -prepare_index_buffer(qpGeomPrimitive *data) { +prepare_index_buffer(GeomPrimitive *data) { DXIndexBufferContext8 *dibc = new DXIndexBufferContext8(data); return dibc; } @@ -451,10 +449,10 @@ release_index_buffer(IndexBufferContext *ibc) { // Description: Creates a new GeomMunger object to munge vertices // appropriate to this GSG for the indicated state. //////////////////////////////////////////////////////////////////// -PT(qpGeomMunger) DXGraphicsStateGuardian8:: +PT(GeomMunger) DXGraphicsStateGuardian8:: make_geom_munger(const RenderState *state) { PT(DXGeomMunger8) munger = new DXGeomMunger8(this, state); - return qpGeomMunger::register_munger(munger); + return GeomMunger::register_munger(munger); } //////////////////////////////////////////////////////////////////// @@ -768,25 +766,25 @@ end_frame() { // are ok, false to abort this group of primitives. //////////////////////////////////////////////////////////////////// bool DXGraphicsStateGuardian8:: -begin_draw_primitives(const qpGeom *geom, const qpGeomMunger *munger, - const qpGeomVertexData *vertex_data) { +begin_draw_primitives(const Geom *geom, const GeomMunger *munger, + const GeomVertexData *vertex_data) { if (!GraphicsStateGuardian::begin_draw_primitives(geom, munger, vertex_data)) { return false; } - nassertr(_vertex_data != (qpGeomVertexData *)NULL, false); + nassertr(_vertex_data != (GeomVertexData *)NULL, false); - const qpGeomVertexFormat *format = _vertex_data->get_format(); + const GeomVertexFormat *format = _vertex_data->get_format(); // The munger should have put the FVF data in the first array. - const qpGeomVertexArrayData *data = _vertex_data->get_array(0); + const GeomVertexArrayData *data = _vertex_data->get_array(0); - VertexBufferContext *vbc = ((qpGeomVertexArrayData *)data)->prepare_now(get_prepared_objects(), this); + VertexBufferContext *vbc = ((GeomVertexArrayData *)data)->prepare_now(get_prepared_objects(), this); nassertr(vbc != (VertexBufferContext *)NULL, false); apply_vertex_buffer(vbc); - const qpGeomVertexAnimationSpec &animation = + const GeomVertexAnimationSpec &animation = vertex_data->get_format()->get_animation(); - if (animation.get_animation_type() == qpGeom::AT_hardware) { + if (animation.get_animation_type() == Geom::AT_hardware) { // Set up vertex blending. switch (animation.get_num_transforms()) { case 1: @@ -869,7 +867,7 @@ begin_draw_primitives(const qpGeom *geom, const qpGeomMunger *munger, // Description: Draws a series of disconnected triangles. //////////////////////////////////////////////////////////////////// void DXGraphicsStateGuardian8:: -draw_triangles(const qpGeomTriangles *primitive) { +draw_triangles(const GeomTriangles *primitive) { _vertices_tri_pcollector.add_level(primitive->get_num_vertices()); _primitive_batches_tri_pcollector.add_level(1); if (primitive->is_indexed()) { @@ -878,7 +876,7 @@ draw_triangles(const qpGeomTriangles *primitive) { if (_active_vbuffer != NULL) { // Indexed, vbuffers. - IndexBufferContext *ibc = ((qpGeomPrimitive *)primitive)->prepare_now(get_prepared_objects(), this); + IndexBufferContext *ibc = ((GeomPrimitive *)primitive)->prepare_now(get_prepared_objects(), this); nassertv(ibc != (IndexBufferContext *)NULL); apply_index_buffer(ibc); @@ -927,7 +925,7 @@ draw_triangles(const qpGeomTriangles *primitive) { // Description: Draws a series of triangle strips. //////////////////////////////////////////////////////////////////// void DXGraphicsStateGuardian8:: -draw_tristrips(const qpGeomTristrips *primitive) { +draw_tristrips(const GeomTristrips *primitive) { if (connect_triangle_strips && _current_fill_mode != RenderModeAttrib::M_wireframe) { // One long triangle strip, connected by the degenerate vertices // that have already been set up within the primitive. @@ -939,7 +937,7 @@ draw_tristrips(const qpGeomTristrips *primitive) { if (_active_vbuffer != NULL) { // Indexed, vbuffers, one line triangle strip. - IndexBufferContext *ibc = ((qpGeomPrimitive *)primitive)->prepare_now(get_prepared_objects(), this); + IndexBufferContext *ibc = ((GeomPrimitive *)primitive)->prepare_now(get_prepared_objects(), this); nassertv(ibc != (IndexBufferContext *)NULL); apply_index_buffer(ibc); @@ -990,14 +988,14 @@ draw_tristrips(const qpGeomTristrips *primitive) { int index_stride = primitive->get_index_stride(); _primitive_batches_tristrip_pcollector.add_level(ends.size()); - qpGeomVertexReader mins(primitive->get_mins(), 0); - qpGeomVertexReader maxs(primitive->get_maxs(), 0); + GeomVertexReader mins(primitive->get_mins(), 0); + GeomVertexReader maxs(primitive->get_maxs(), 0); nassertv(primitive->get_mins()->get_num_rows() == (int)ends.size() && primitive->get_maxs()->get_num_rows() == (int)ends.size()); if (_active_vbuffer != NULL) { // Indexed, vbuffers, individual triangle strips. - IndexBufferContext *ibc = ((qpGeomPrimitive *)primitive)->prepare_now(get_prepared_objects(), this); + IndexBufferContext *ibc = ((GeomPrimitive *)primitive)->prepare_now(get_prepared_objects(), this); nassertv(ibc != (IndexBufferContext *)NULL); apply_index_buffer(ibc); @@ -1077,7 +1075,7 @@ draw_tristrips(const qpGeomTristrips *primitive) { // Description: Draws a series of triangle fans. //////////////////////////////////////////////////////////////////// void DXGraphicsStateGuardian8:: -draw_trifans(const qpGeomTrifans *primitive) { +draw_trifans(const GeomTrifans *primitive) { CPTA_int ends = primitive->get_ends(); _primitive_batches_trifan_pcollector.add_level(ends.size()); @@ -1089,14 +1087,14 @@ draw_trifans(const qpGeomTrifans *primitive) { // with degenerate vertices, so no worries about that. int index_stride = primitive->get_index_stride(); - qpGeomVertexReader mins(primitive->get_mins(), 0); - qpGeomVertexReader maxs(primitive->get_maxs(), 0); + GeomVertexReader mins(primitive->get_mins(), 0); + GeomVertexReader maxs(primitive->get_maxs(), 0); nassertv(primitive->get_mins()->get_num_rows() == (int)ends.size() && primitive->get_maxs()->get_num_rows() == (int)ends.size()); if (_active_vbuffer != NULL) { // Indexed, vbuffers. - IndexBufferContext *ibc = ((qpGeomPrimitive *)primitive)->prepare_now(get_prepared_objects(), this); + IndexBufferContext *ibc = ((GeomPrimitive *)primitive)->prepare_now(get_prepared_objects(), this); nassertv(ibc != (IndexBufferContext *)NULL); apply_index_buffer(ibc); @@ -1175,7 +1173,7 @@ draw_trifans(const qpGeomTrifans *primitive) { // Description: Draws a series of disconnected line segments. //////////////////////////////////////////////////////////////////// void DXGraphicsStateGuardian8:: -draw_lines(const qpGeomLines *primitive) { +draw_lines(const GeomLines *primitive) { _vertices_other_pcollector.add_level(primitive->get_num_vertices()); _primitive_batches_other_pcollector.add_level(1); @@ -1185,7 +1183,7 @@ draw_lines(const qpGeomLines *primitive) { if (_active_vbuffer != NULL) { // Indexed, vbuffers. - IndexBufferContext *ibc = ((qpGeomPrimitive *)primitive)->prepare_now(get_prepared_objects(), this); + IndexBufferContext *ibc = ((GeomPrimitive *)primitive)->prepare_now(get_prepared_objects(), this); nassertv(ibc != (IndexBufferContext *)NULL); apply_index_buffer(ibc); @@ -1234,7 +1232,7 @@ draw_lines(const qpGeomLines *primitive) { // Description: Draws a series of line strips. //////////////////////////////////////////////////////////////////// void DXGraphicsStateGuardian8:: -draw_linestrips(const qpGeomLinestrips *primitive) { +draw_linestrips(const GeomLinestrips *primitive) { } //////////////////////////////////////////////////////////////////// @@ -1243,7 +1241,7 @@ draw_linestrips(const qpGeomLinestrips *primitive) { // Description: Draws a series of disconnected points. //////////////////////////////////////////////////////////////////// void DXGraphicsStateGuardian8:: -draw_points(const qpGeomPoints *primitive) { +draw_points(const GeomPoints *primitive) { _vertices_other_pcollector.add_level(primitive->get_num_vertices()); _primitive_batches_other_pcollector.add_level(1); @@ -2103,12 +2101,12 @@ bind_light(Spotlight *light_obj, const NodePath &light, int light_id) { // to DirectX's. //////////////////////////////////////////////////////////////////// D3DFORMAT DXGraphicsStateGuardian8:: -get_index_type(qpGeom::NumericType numeric_type) { +get_index_type(Geom::NumericType numeric_type) { switch (numeric_type) { - case qpGeom::NT_uint16: + case Geom::NT_uint16: return D3DFMT_INDEX16; - case qpGeom::NT_uint32: + case Geom::NT_uint32: return D3DFMT_INDEX32; } diff --git a/panda/src/dxgsg8/dxGraphicsStateGuardian8.h b/panda/src/dxgsg8/dxGraphicsStateGuardian8.h index 147d0d2843..30bc77fff9 100644 --- a/panda/src/dxgsg8/dxGraphicsStateGuardian8.h +++ b/panda/src/dxgsg8/dxGraphicsStateGuardian8.h @@ -24,7 +24,6 @@ #include "config_dxgsg8.h" #include "graphicsStateGuardian.h" -#include "geomprimitives.h" #include "texture.h" #include "displayRegion.h" #include "material.h" @@ -53,15 +52,15 @@ public: void apply_texture(int i, TextureContext *tc); virtual void release_texture(TextureContext *tc); - virtual VertexBufferContext *prepare_vertex_buffer(qpGeomVertexArrayData *data); + virtual VertexBufferContext *prepare_vertex_buffer(GeomVertexArrayData *data); void apply_vertex_buffer(VertexBufferContext *vbc); virtual void release_vertex_buffer(VertexBufferContext *vbc); - virtual IndexBufferContext *prepare_index_buffer(qpGeomPrimitive *data); + virtual IndexBufferContext *prepare_index_buffer(GeomPrimitive *data); void apply_index_buffer(IndexBufferContext *ibc); virtual void release_index_buffer(IndexBufferContext *ibc); - virtual PT(qpGeomMunger) make_geom_munger(const RenderState *state); + virtual PT(GeomMunger) make_geom_munger(const RenderState *state); virtual void set_color_clear_value(const Colorf &value); @@ -75,15 +74,15 @@ public: virtual void end_scene(); virtual void end_frame(); - virtual bool begin_draw_primitives(const qpGeom *geom, - const qpGeomMunger *munger, - const qpGeomVertexData *vertex_data); - virtual void draw_triangles(const qpGeomTriangles *primitive); - virtual void draw_tristrips(const qpGeomTristrips *primitive); - virtual void draw_trifans(const qpGeomTrifans *primitive); - virtual void draw_lines(const qpGeomLines *primitive); - virtual void draw_linestrips(const qpGeomLinestrips *primitive); - virtual void draw_points(const qpGeomPoints *primitive); + virtual bool begin_draw_primitives(const Geom *geom, + const GeomMunger *munger, + const GeomVertexData *vertex_data); + virtual void draw_triangles(const GeomTriangles *primitive); + virtual void draw_tristrips(const GeomTristrips *primitive); + virtual void draw_trifans(const GeomTrifans *primitive); + virtual void draw_lines(const GeomLines *primitive); + virtual void draw_linestrips(const GeomLinestrips *primitive); + virtual void draw_points(const GeomPoints *primitive); virtual void end_draw_primitives(); virtual void framebuffer_copy_to_texture(Texture *tex, int z, const DisplayRegion *dr, @@ -115,7 +114,7 @@ public: virtual void bind_light(Spotlight *light_obj, const NodePath &light, int light_id); - static D3DFORMAT get_index_type(qpGeom::NumericType numeric_type); + static D3DFORMAT get_index_type(Geom::NumericType numeric_type); INLINE static DWORD Colorf_to_D3DCOLOR(const Colorf &cColorf); protected: diff --git a/panda/src/dxgsg8/dxIndexBufferContext8.cxx b/panda/src/dxgsg8/dxIndexBufferContext8.cxx index 8bce2ddece..5a3c206e61 100644 --- a/panda/src/dxgsg8/dxIndexBufferContext8.cxx +++ b/panda/src/dxgsg8/dxIndexBufferContext8.cxx @@ -17,7 +17,7 @@ //////////////////////////////////////////////////////////////////// #include "dxIndexBufferContext8.h" -#include "qpgeomPrimitive.h" +#include "geomPrimitive.h" #include "config_dxgsg8.h" #include "graphicsStateGuardian.h" #include "pStatTimer.h" @@ -31,7 +31,7 @@ TypeHandle DXIndexBufferContext8::_type_handle; // Description: //////////////////////////////////////////////////////////////////// DXIndexBufferContext8:: -DXIndexBufferContext8(qpGeomPrimitive *data) : +DXIndexBufferContext8(GeomPrimitive *data) : IndexBufferContext(data), _ibuffer(NULL) { diff --git a/panda/src/dxgsg8/dxIndexBufferContext8.h b/panda/src/dxgsg8/dxIndexBufferContext8.h index 20d6745e5b..ca1249106f 100644 --- a/panda/src/dxgsg8/dxIndexBufferContext8.h +++ b/panda/src/dxgsg8/dxIndexBufferContext8.h @@ -30,7 +30,7 @@ //////////////////////////////////////////////////////////////////// class EXPCL_PANDADX DXIndexBufferContext8 : public IndexBufferContext { public: - DXIndexBufferContext8(qpGeomPrimitive *data); + DXIndexBufferContext8(GeomPrimitive *data); virtual ~DXIndexBufferContext8(); void create_ibuffer(DXScreenData &scrn); diff --git a/panda/src/dxgsg8/dxVertexBufferContext8.cxx b/panda/src/dxgsg8/dxVertexBufferContext8.cxx index 655ade6970..d7ca992e35 100644 --- a/panda/src/dxgsg8/dxVertexBufferContext8.cxx +++ b/panda/src/dxgsg8/dxVertexBufferContext8.cxx @@ -17,8 +17,8 @@ //////////////////////////////////////////////////////////////////// #include "dxVertexBufferContext8.h" -#include "qpgeomVertexArrayData.h" -#include "qpgeomVertexArrayFormat.h" +#include "geomVertexArrayData.h" +#include "geomVertexArrayFormat.h" #include "graphicsStateGuardian.h" #include "pStatTimer.h" #include "internalName.h" @@ -33,12 +33,12 @@ TypeHandle DXVertexBufferContext8::_type_handle; // Description: //////////////////////////////////////////////////////////////////// DXVertexBufferContext8:: -DXVertexBufferContext8(qpGeomVertexArrayData *data) : +DXVertexBufferContext8(GeomVertexArrayData *data) : VertexBufferContext(data), _vbuffer(NULL) { // Now fill in the FVF code. - const qpGeomVertexArrayFormat *array_format = data->get_array_format(); + const GeomVertexArrayFormat *array_format = data->get_array_format(); // We have to start with the vertex data, and work up from there in // order, since that's the way the FVF is defined. @@ -110,8 +110,8 @@ DXVertexBufferContext8(qpGeomVertexArrayData *data) : // same order they appear in the array. int texcoord_index = 0; while (n < num_columns && - array_format->get_column(n)->get_contents() == qpGeom::C_texcoord) { - const qpGeomVertexColumn *column = array_format->get_column(n); + array_format->get_column(n)->get_contents() == Geom::C_texcoord) { + const GeomVertexColumn *column = array_format->get_column(n); switch (column->get_num_values()) { case 1: _fvf |= D3DFVF_TEXCOORDSIZE1(texcoord_index); diff --git a/panda/src/dxgsg8/dxVertexBufferContext8.h b/panda/src/dxgsg8/dxVertexBufferContext8.h index 5410016268..4d9e04b1f1 100644 --- a/panda/src/dxgsg8/dxVertexBufferContext8.h +++ b/panda/src/dxgsg8/dxVertexBufferContext8.h @@ -30,7 +30,7 @@ //////////////////////////////////////////////////////////////////// class EXPCL_PANDADX DXVertexBufferContext8 : public VertexBufferContext { public: - DXVertexBufferContext8(qpGeomVertexArrayData *data); + DXVertexBufferContext8(GeomVertexArrayData *data); virtual ~DXVertexBufferContext8(); void create_vbuffer(DXScreenData &scrn); diff --git a/panda/src/dxgsg9/Sources.pp b/panda/src/dxgsg9/Sources.pp index 561a02c811..b98d19d973 100755 --- a/panda/src/dxgsg9/Sources.pp +++ b/panda/src/dxgsg9/Sources.pp @@ -1,4 +1,7 @@ -#define BUILD_DIRECTORY $[HAVE_DX] +// DX9 build is temporarily disabled until we bring it up-to-date with +// the new Geom rewrite. +#define BUILD_DIRECTORY +//#define BUILD_DIRECTORY $[HAVE_DX] #define OTHER_LIBS interrogatedb:c dconfig:c dtoolconfig:m \ dtoolutil:c dtoolbase:c dtool:m diff --git a/panda/src/egg/config_egg.cxx b/panda/src/egg/config_egg.cxx index b27c4d38b7..0589e13b89 100644 --- a/panda/src/egg/config_egg.cxx +++ b/panda/src/egg/config_egg.cxx @@ -120,7 +120,7 @@ ConfigVariableBool egg_subdivide_polys ("egg-subdivide-polys", true, PRC_DESC("This is obsolete. In the old Geom implementation, it used to " "be true to force higher-order polygons that were not otherwise " - "meshed to be subdivided into triangles. In the new experimental " + "meshed to be subdivided into triangles. In the new " "Geom implementation, this happens anyway.")); ConfigVariableBool egg_consider_fans diff --git a/panda/src/egg/eggAnimData.N b/panda/src/egg/eggAnimData.N deleted file mode 100644 index e8984d7914..0000000000 --- a/panda/src/egg/eggAnimData.N +++ /dev/null @@ -1,2 +0,0 @@ -forcetype PointerToArray -forcetype PointerToBase>> diff --git a/panda/src/egg/eggAnimData.h b/panda/src/egg/eggAnimData.h index 3efd92df35..95810ba485 100644 --- a/panda/src/egg/eggAnimData.h +++ b/panda/src/egg/eggAnimData.h @@ -49,9 +49,12 @@ PUBLISHED: INLINE void add_data(double value); INLINE int get_size() const; + +public: INLINE PTA_double get_data() const; INLINE void set_data(const PTA_double &data); +PUBLISHED: void quantize(double quantum); protected: diff --git a/panda/src/egg2pg/Sources.pp b/panda/src/egg2pg/Sources.pp index ea773b8928..8a10eafa1a 100644 --- a/panda/src/egg2pg/Sources.pp +++ b/panda/src/egg2pg/Sources.pp @@ -6,15 +6,13 @@ #begin lib_target #define TARGET egg2pg #define LOCAL_LIBS \ - parametrics collide egg builder pgraph chan char + parametrics collide egg pgraph chan char #define COMBINED_SOURCES $[TARGET]_composite1.cxx $[TARGET]_composite2.cxx #define SOURCES \ animBundleMaker.h \ characterMaker.h \ - computedVerticesMaker.I computedVerticesMaker.h \ - computedVerticesMakerEntity.I computedVerticesMakerEntity.h \ config_egg2pg.h \ deferredNodeProperty.h \ eggBinner.h \ @@ -27,7 +25,6 @@ #define INCLUDED_SOURCES \ animBundleMaker.cxx \ characterMaker.cxx \ - computedVerticesMaker.cxx \ config_egg2pg.cxx \ deferredNodeProperty.cxx \ eggBinner.cxx \ diff --git a/panda/src/egg2pg/characterMaker.cxx b/panda/src/egg2pg/characterMaker.cxx index d9b2c08332..d532f62e12 100644 --- a/panda/src/egg2pg/characterMaker.cxx +++ b/panda/src/egg2pg/characterMaker.cxx @@ -20,7 +20,6 @@ #include "eggLoader.h" #include "config_egg2pg.h" #include "eggBinner.h" -#include "computedVertices.h" #include "eggGroup.h" #include "eggPrimitive.h" #include "eggBin.h" @@ -162,29 +161,23 @@ part_to_node(PartGroup *part, const string &name) const { } } - if (use_qpgeom) { - // We should always return a GeomNode, so that all polysets - // created at the same level will get added into the same - // GeomNode. Look for a child of this node. If it doesn't have a - // child yet, add a GeomNode and return it. Otherwise, if it - // already has a child, return that. - if (node->is_geom_node() && node->get_name() == name) { - return node; - } - for (int i = 0; i < node->get_num_children(); i++) { - PandaNode *child = node->get_child(i); - if (child->is_geom_node() && child->get_name() == name) { - return child; - } - } - PT(GeomNode) geom_node = new GeomNode(name); - node->add_child(geom_node); - return geom_node; - - } else { - // In the original Geom implementation, a node is a node. + // We should always return a GeomNode, so that all polysets + // created at the same level will get added into the same + // GeomNode. Look for a child of this node. If it doesn't have a + // child yet, add a GeomNode and return it. Otherwise, if it + // already has a child, return that. + if (node->is_geom_node() && node->get_name() == name) { return node; } + for (int i = 0; i < node->get_num_children(); i++) { + PandaNode *child = node->get_child(i); + if (child->is_geom_node() && child->get_name() == name) { + return child; + } + } + PT(GeomNode) geom_node = new GeomNode(name); + node->add_child(geom_node); + return geom_node; } @@ -192,9 +185,7 @@ part_to_node(PartGroup *part, const string &name) const { // Function: CharacterMaker::create_slider // Access: Public // Description: Creates a new morph slider of the given name, and -// returns its index. This is actually called by -// ComputedVerticesMaker, which is responsible for -// identifying all the unique morph target names. +// returns its index. //////////////////////////////////////////////////////////////////// int CharacterMaker:: create_slider(const string &name) { @@ -237,17 +228,8 @@ CharacterJointBundle *CharacterMaker:: make_bundle() { build_joint_hierarchy(_egg_root, _skeleton_root, -1); - if (use_qpgeom) { - // The new, experimental Geom system. - make_qpgeometry(_egg_root); + make_geometry(_egg_root); - } else { - // The old Geom system. - make_geometry(_egg_root); - - _character_node->_computed_vertices = - _comp_verts_maker.make_computed_vertices(_character_node, *this); - } _bundle->sort_descendants(); parent_joint_nodes(_skeleton_root); @@ -330,59 +312,13 @@ parent_joint_nodes(PartGroup *part) { //////////////////////////////////////////////////////////////////// // Function: CharacterMaker::make_geometry // Access: Private -// Description: -//////////////////////////////////////////////////////////////////// -void CharacterMaker:: -make_geometry(EggNode *egg_node) { - if (egg_node->is_of_type(EggPrimitive::get_class_type())) { - EggPrimitive *egg_primitive = DCAST(EggPrimitive, egg_node); - if (!egg_primitive->empty()) { - EggGroupNode *prim_home = determine_primitive_home(egg_primitive); - - if (prim_home == (EggGroupNode *)NULL && - (egg_primitive->is_of_type(EggSurface::get_class_type()) || - egg_primitive->is_of_type(EggCurve::get_class_type()))) { - // If the primitive would be dynamic but is a parametric - // primitive, we can't animate it anyway, so just put the - // whole thing under the primitive's parent node. - prim_home = egg_primitive->get_parent(); - } - - if (prim_home == (EggGroupNode *)NULL) { - // This is a totally dynamic primitive that lives under the - // character's node. - make_dynamic_primitive(egg_primitive, _egg_root); - - } else { - // This is a static primitive that lives under a particular - // node. - make_static_primitive(egg_primitive, prim_home); - } - } - } - - if (egg_node->is_of_type(EggGroupNode::get_class_type())) { - EggGroupNode *egg_group = DCAST(EggGroupNode, egg_node); - - EggGroupNode::const_iterator ci; - for (ci = egg_group->begin(); ci != egg_group->end(); ++ci) { - make_geometry(*ci); - } - } -} - -//////////////////////////////////////////////////////////////////// -// Function: CharacterMaker::make_qpgeometry -// Access: Private // Description: Walks the hierarchy, looking for bins that represent // polysets, which are to be animated with the // character. Invokes the egg loader to create the // animated geometry. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// void CharacterMaker:: -make_qpgeometry(EggNode *egg_node) { +make_geometry(EggNode *egg_node) { if (egg_node->is_of_type(EggBin::get_class_type())) { EggBin *egg_bin = DCAST(EggBin, egg_node); @@ -417,47 +353,11 @@ make_qpgeometry(EggNode *egg_node) { EggGroupNode::const_iterator ci; for (ci = egg_group->begin(); ci != egg_group->end(); ++ci) { - make_qpgeometry(*ci); + make_geometry(*ci); } } } -//////////////////////////////////////////////////////////////////// -// Function: CharacterMaker::make_static_primitive -// Access: Private -// Description: -//////////////////////////////////////////////////////////////////// -void CharacterMaker:: -make_static_primitive(EggPrimitive *egg_primitive, EggGroupNode *prim_home) { - PandaNode *node = part_to_node(egg_to_part(prim_home), string()); - - // We need this funny transform to convert from the coordinate - // space of the original vertices to that of the new joint node. - LMatrix4d transform = - egg_primitive->get_vertex_frame() * - prim_home->get_node_frame_inv(); - - _loader.make_nonindexed_primitive(egg_primitive, node, &transform, - _comp_verts_maker); -} - -//////////////////////////////////////////////////////////////////// -// Function: CharacterMaker::make_dynamic_primitive -// Access: Private -// Description: -//////////////////////////////////////////////////////////////////// -void CharacterMaker:: -make_dynamic_primitive(EggPrimitive *egg_primitive, EggGroupNode *prim_home) { - PandaNode *node = part_to_node(egg_to_part(prim_home), string()); - - LMatrix4d transform = - egg_primitive->get_vertex_frame() * - prim_home->get_node_frame_inv(); - - _loader.make_indexed_primitive(egg_primitive, node, &transform, - _comp_verts_maker); -} - //////////////////////////////////////////////////////////////////// // Function: CharacterMaker::determine_primitive_home // Access: Private diff --git a/panda/src/egg2pg/characterMaker.h b/panda/src/egg2pg/characterMaker.h index 8a73f6ef98..2cc395994f 100644 --- a/panda/src/egg2pg/characterMaker.h +++ b/panda/src/egg2pg/characterMaker.h @@ -21,7 +21,6 @@ #include "pandabase.h" -#include "computedVerticesMaker.h" #include "vertexTransform.h" #include "vertexSlider.h" #include "character.h" @@ -70,12 +69,7 @@ private: void parent_joint_nodes(PartGroup *part); void make_geometry(EggNode *egg_node); - void make_qpgeometry(EggNode *egg_node); - void make_static_primitive(EggPrimitive *egg_primitive, - EggGroupNode *prim_home); - void make_dynamic_primitive(EggPrimitive *egg_primitive, - EggGroupNode *prim_home); EggGroupNode *determine_primitive_home(EggPrimitive *egg_primitive); EggGroupNode *determine_bin_home(EggBin *egg_bin); VertexTransform *get_identity_transform(); @@ -97,7 +91,6 @@ private: EggGroup *_egg_root; PT(Character) _character_node; CharacterJointBundle *_bundle; - ComputedVerticesMaker _comp_verts_maker; PartGroup *_morph_root; PartGroup *_skeleton_root; }; diff --git a/panda/src/egg2pg/computedVerticesMaker.I b/panda/src/egg2pg/computedVerticesMaker.I deleted file mode 100644 index 420e7bb8a7..0000000000 --- a/panda/src/egg2pg/computedVerticesMaker.I +++ /dev/null @@ -1,17 +0,0 @@ -// Filename: computedVerticesMaker.I -// Created by: drose (01Mar99) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// diff --git a/panda/src/egg2pg/computedVerticesMaker.cxx b/panda/src/egg2pg/computedVerticesMaker.cxx deleted file mode 100644 index de71400d58..0000000000 --- a/panda/src/egg2pg/computedVerticesMaker.cxx +++ /dev/null @@ -1,586 +0,0 @@ -// Filename: computedVerticesMaker.cxx -// Created by: drose (01Mar99) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "computedVerticesMaker.h" -#include "characterMaker.h" -#include "config_egg2pg.h" - -#include "characterJoint.h" -#include "character.h" -#include "computedVertices.h" -#include "eggNode.h" -#include "eggGroup.h" -#include "eggVertex.h" -#include "internalName.h" - -#include - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMaker::Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -ComputedVerticesMaker:: -ComputedVerticesMaker() { - _coords = PTA_Vertexf::empty_array(0); - _norms = PTA_Normalf::empty_array(0); - _colors = PTA_Colorf::empty_array(0); - _current_vc = NULL; -} - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMaker::begin_new_space -// Access: Public -// Description: Should be called before beginning the definition for -// a new transform space. -//////////////////////////////////////////////////////////////////// -void ComputedVerticesMaker:: -begin_new_space() { - _current_jw.clear(); - _current_vc = NULL; -} - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMaker::add_joint -// Access: Public -// Description: Adds the joint with its associated membership amount -// to the current transform space definition. -//////////////////////////////////////////////////////////////////// -void ComputedVerticesMaker:: -add_joint(EggNode *joint, double membership) { - // This must be called between a call to begin_new_space() and - // mark_space(). - nassertv(_current_vc == NULL); - - if (membership == 0.0) { - return; - } - - if (membership < 0.0) { - // Not sure what a negative membership should mean. Probably it's - // just a skinning error; for now we'll print a warning and ignore - // it. - egg2pg_cat.warning() - << "Joint " << joint->get_name() << " has vertices with membership " - << membership << ".\n"; - return; - } - - JointWeights::iterator jwi = _current_jw.find(joint); - - if (jwi != _current_jw.end()) { - // We'd already added this joint previously. Increment its total - // membership. - (*jwi).second += membership; - } else { - // This is the first time we've added this joint. - _current_jw[joint] = membership; - } -} - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMaker::add_vertex_joints -// Access: Public -// Description: Adds the joints the vertex belongs to, along with -// their respective memberships, to the current -// transform space definition. -//////////////////////////////////////////////////////////////////// -void ComputedVerticesMaker:: -add_vertex_joints(EggVertex *vertex, EggNode *object) { - if (vertex->gref_size() == 0) { - // This vertex belongs in the same group as the primitive that - // contains it. - EggGroupNode *egg_joint = object->get_parent(); - - // We actually walk up to find the first group above that that's a - // joint, or the character root itself, so we won't (a) be fooled - // by meaningless transforms on non-joints within a character - // hierarchy, or (b) consider meaninglessly different groups to be - // significant. - EggGroup *egg_group = (EggGroup *)NULL; - if (egg_joint->is_of_type(EggGroup::get_class_type())) { - egg_group = DCAST(EggGroup, egg_joint); - } - while (egg_group != (EggGroup *)NULL && - egg_group->get_group_type() != EggGroup::GT_joint && - egg_group->get_dart_type() == EggGroup::DT_none) { - nassertv(egg_group->get_parent() != (EggGroupNode *)NULL); - egg_joint = egg_group->get_parent(); - egg_group = (EggGroup *)NULL; - if (egg_joint->is_of_type(EggGroup::get_class_type())) { - egg_group = DCAST(EggGroup, egg_joint); - } - } - - add_joint(egg_joint, 1.0); - - } else { - // This vertex belongs in the joint or joints that reference it. - EggVertex::GroupRef::const_iterator gri; - for (gri = vertex->gref_begin(); gri != vertex->gref_end(); ++gri) { - EggGroup *egg_joint = (*gri); - double membership = egg_joint->get_vertex_membership(vertex); - add_joint(egg_joint, membership); - } - } -} - - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMaker::mark_space -// Access: Public -// Description: Completes the definition of a transform space as a -// set of joints and memberships. From this point until -// the next call to begin_new_space(), vertices may be -// added to the transform space via calls to -// add_vertex(), add_normal(), etc. -//////////////////////////////////////////////////////////////////// -void ComputedVerticesMaker:: -mark_space() { - // This must be called after a call to begin_new_space(). - nassertv(_current_vc == NULL); - - _current_jw.normalize_weights(); - - // This will look up a previously-defined VertexCollection, if we've - // used this transform space before, or it will implicitly create a - // new one if we haven't. - _current_vc = &_transforms[_current_jw]; -} - - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMaker::add_vertex -// Access: Public -// Description: Adds a vertex value to the currently-defined -// transform space, and returns its index number within -// the array. -//////////////////////////////////////////////////////////////////// -int ComputedVerticesMaker:: -add_vertex(const Vertexd &vertex, const EggMorphVertexList &morphs, - const LMatrix4d &transform) { - // This must be called after a call to mark_space(), and before a - // call to begin_new_space(). - nassertr(_current_vc != NULL, -1); - - Vertexf tv = LCAST(float, vertex * transform); - int index = _current_vc->_vmap.add_value(tv, morphs, _coords); - _current_vc->_vindex.insert(index); - - // Now create any morph sliders. - EggMorphVertexList::const_iterator mli; - for (mli = morphs.begin(); mli != morphs.end(); ++mli) { - const EggMorphVertex &morph = (*mli); - LVector3d offset = morph.get_offset() * transform; - if (!offset.almost_equal(LVector3d(0.0, 0.0, 0.0), 0.0001)) { - MorphList &mlist = _morphs[morph.get_name()]; - - // Have we already morphed this vertex? - VertexMorphList::iterator vmi = mlist._vmorphs.find(index); - if (vmi != mlist._vmorphs.end()) { - // Yes, we have. - nassertr((*vmi).second.almost_equal(LCAST(float, offset), 0.001), index); - - } else { - // No, we haven't yet; morph it now. - mlist._vmorphs[index] = LCAST(float, offset); - } - } - } - - return index; -} - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMaker::add_normal -// Access: Public -// Description: Adds a normal value to the currently-defined -// transform space, and returns its index number within -// the array. -//////////////////////////////////////////////////////////////////// -int ComputedVerticesMaker:: -add_normal(const Normald &normal, const EggMorphNormalList &morphs, - const LMatrix4d &transform) { - // This must be called after a call to mark_space(), and before a - // call to begin_new_space(). - nassertr(_current_vc != NULL, -1); - - Normald norm = normal * transform; - norm.normalize(); - int index = _current_vc->_nmap.add_value(LCAST(float, norm), morphs, _norms); - _current_vc->_nindex.insert(index); - - // Now create any morph sliders. - EggMorphNormalList::const_iterator mli; - for (mli = morphs.begin(); mli != morphs.end(); ++mli) { - const EggMorphNormal &morph = (*mli); - LVector3d offset = morph.get_offset() * transform; - if (!offset.almost_equal(LVector3d(0.0, 0.0, 0.0), 0.0001)) { - MorphList &mlist = _morphs[morph.get_name()]; - - // Have we already morphed this normal? - NormalMorphList::iterator vmi = mlist._nmorphs.find(index); - if (vmi != mlist._nmorphs.end()) { - // Yes, we have. - nassertr((*vmi).second.almost_equal(LCAST(float, offset), 0.001), index); - } else { - // No, we haven't yet; morph it now. - mlist._nmorphs[index] = LCAST(float, offset); - } - } - } - - return index; -} - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMaker::add_texcoord -// Access: Public -// Description: Adds a texcoord value to the named array (texture -// coordinates are unrelated to the current transform -// space), and returns its index number within the -// array. -//////////////////////////////////////////////////////////////////// -int ComputedVerticesMaker:: -add_texcoord(const InternalName *name, - const TexCoordd &texcoord, const EggMorphTexCoordList &morphs, - const LMatrix3d &transform) { - TexCoordDef &def = _tdefmap[name]; - - TexCoordf ttc = LCAST(float, texcoord * transform); - int index = def._tmap.add_value(ttc, morphs, _texcoords[name]); - def._tindex.insert(index); - - // Now create any morph sliders. - EggMorphTexCoordList::const_iterator mli; - for (mli = morphs.begin(); mli != morphs.end(); ++mli) { - const EggMorphTexCoord &morph = (*mli); - LVector2d offset = morph.get_offset() * transform; - if (!offset.almost_equal(LVector2d(0.0, 0.0), 0.0001)) { - MorphList &mlist = _morphs[morph.get_name()]; - - // Have we already morphed this texcoord? - TexCoordMorphList &tmorphs = mlist._tmorphs[name]; - TexCoordMorphList::iterator vmi = tmorphs.find(index); - if (vmi != tmorphs.end()) { - // Yes, we have. - nassertr((*vmi).second.almost_equal(LCAST(float, offset), 0.001), index); - } else { - // No, we haven't yet; morph it now. - tmorphs[index] = LCAST(float, offset); - } - } - } - - return index; -} - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMaker::add_color -// Access: Public -// Description: Adds a color value to the array (color values -// are unrelated to the current transform space), and -// returns its index number within the array. -//////////////////////////////////////////////////////////////////// -int ComputedVerticesMaker:: -add_color(const Colorf &color, const EggMorphColorList &morphs) { - int index = _cmap.add_value(color, morphs, _colors); - _cindex.insert(index); - - // Now create any morph sliders. - EggMorphColorList::const_iterator mli; - for (mli = morphs.begin(); mli != morphs.end(); ++mli) { - const EggMorphColor &morph = (*mli); - LVector4f offset = morph.get_offset(); - if (!offset.almost_equal(LVector4f(0.0, 0.0, 0.0, 0.0), 0.0001)) { - MorphList &mlist = _morphs[morph.get_name()]; - - // Have we already morphed this color? - ColorMorphList::iterator vmi = mlist._cmorphs.find(index); - if (vmi != mlist._cmorphs.end()) { - // Yes, we have. - nassertr((*vmi).second.almost_equal(offset, 0.001), index); - } else { - // No, we haven't yet; morph it now. - mlist._cmorphs[index] = offset; - } - } - } - - return index; -} - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMaker::make_computed_vertices -// Access: Public -// Description: After all spaces have been defined and all vertices -// added, creates a new ComputedVertices object and -// returns it. -//////////////////////////////////////////////////////////////////// -ComputedVertices *ComputedVerticesMaker:: -make_computed_vertices(Character *character, CharacterMaker &char_maker) { - // We must first build up a set of all the unique kinds of vertex - // transforms. - typedef pset VertexTransforms; - VertexTransforms transforms; - - TransformSpaces::const_iterator tsi; - for (tsi = _transforms.begin(); - tsi != _transforms.end(); - ++tsi) { - const JointWeights &jw = (*tsi).first; - const VertexCollection &vc = (*tsi).second; - - JointWeights::const_iterator jwi; - for (jwi = jw.begin(); jwi != jw.end(); ++jwi) { - double weight = (*jwi).second; - EggNode *egg_joint = (*jwi).first; - int joint_index = char_maker.egg_to_index(egg_joint); - - // Look for a VertexTransform that matches this template. - ComputedVertices::VertexTransform new_vt; - new_vt._joint_index = joint_index; - new_vt._effect = (float)weight; - - // This will either insert the VertexTransform into the set and - // return its newly-created iterator, or it will return the - // iterator referring to the previously-inserted VertexTransform - // like this. - VertexTransforms::iterator vti = transforms.insert(new_vt).first; - - // We can discard the const-ness of the set's iterator, because - // we will only be changing a part of the VertexTransform that - // doesn't affect its sort order within the set. - ComputedVertices::VertexTransform &insert_vt = - (ComputedVertices::VertexTransform &)*vti; - - // Now add in all the vertices and normals. - copy(vc._vindex.begin(), vc._vindex.end(), - back_inserter(insert_vt._vindex)); - copy(vc._nindex.begin(), vc._nindex.end(), - back_inserter(insert_vt._nindex)); - } - } - - // Ok, now we have the set of all VertexTransforms. Create a - // ComputedVertices object that reflects this. - ComputedVertices *comp_verts = new ComputedVertices; - copy(transforms.begin(), transforms.end(), - back_inserter(comp_verts->_transforms)); - - character->_cv._coords = _coords; - character->_cv._norms = _norms; - character->_cv._colors = _colors; - - // Temporary: the ComputedVertices object currently doesn't support - // multitexture. - character->_cv._texcoords = _texcoords[InternalName::get_texcoord().p()]; - - // Finally, add in all the morph definitions. - Morphs::const_iterator mi; - for (mi = _morphs.begin(); mi != _morphs.end(); ++mi) { - const string &name = (*mi).first; - const MorphList &mlist = (*mi).second; - - int slider_index = char_maker.create_slider(name); - - if (!mlist._vmorphs.empty()) { - // We push an empty MorphVertex object and then modify it, - // rather than filling it first and then pushing it, just to - // avoid unnecessary copying of data. - comp_verts->_vertex_morphs.push_back(ComputedVerticesMorphVertex()); - ComputedVerticesMorphVertex &mv = comp_verts->_vertex_morphs.back(); - mv._slider_index = slider_index; - - VertexMorphList::const_iterator vmi; - for (vmi = mlist._vmorphs.begin(); - vmi != mlist._vmorphs.end(); - ++vmi) { - mv._morphs.push_back(ComputedVerticesMorphValue3((*vmi).first, - (*vmi).second)); - } - } - - if (!mlist._nmorphs.empty()) { - comp_verts->_normal_morphs.push_back(ComputedVerticesMorphNormal()); - ComputedVerticesMorphNormal &mv = comp_verts->_normal_morphs.back(); - mv._slider_index = slider_index; - - NormalMorphList::const_iterator vmi; - for (vmi = mlist._nmorphs.begin(); - vmi != mlist._nmorphs.end(); - ++vmi) { - mv._morphs.push_back(ComputedVerticesMorphValue3((*vmi).first, - (*vmi).second)); - } - } - - if (!mlist._cmorphs.empty()) { - comp_verts->_color_morphs.push_back(ComputedVerticesMorphColor()); - ComputedVerticesMorphColor &mv = comp_verts->_color_morphs.back(); - mv._slider_index = slider_index; - - ColorMorphList::const_iterator vmi; - for (vmi = mlist._cmorphs.begin(); - vmi != mlist._cmorphs.end(); - ++vmi) { - mv._morphs.push_back(ComputedVerticesMorphValue4((*vmi).first, - (*vmi).second)); - } - } - - TexCoordMorphMap::const_iterator mmi; - for (mmi = mlist._tmorphs.begin(); mmi != mlist._tmorphs.end(); ++mmi) { - const InternalName *name = (*mmi).first; - const TexCoordMorphList &tmorphs = (*mmi).second; - - // Temporary check: the ComputedVertices object currently - // doesn't support multitexture. - if (name == InternalName::get_texcoord()) { - comp_verts->_texcoord_morphs.push_back(ComputedVerticesMorphTexCoord()); - ComputedVerticesMorphTexCoord &mv = comp_verts->_texcoord_morphs.back(); - mv._slider_index = slider_index; - - TexCoordMorphList::const_iterator vmi; - for (vmi = tmorphs.begin(); vmi != tmorphs.end(); ++vmi) { - mv._morphs.push_back(ComputedVerticesMorphValue2((*vmi).first, - (*vmi).second)); - } - } - } - } - - comp_verts->make_orig(character); - return comp_verts; -} - - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMaker::write -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -void ComputedVerticesMaker:: -write(ostream &out) const { - out << "ComputedVerticesMaker, " - << _transforms.size() << " transform spaces, " - << _coords.size() << " vertices, " - << _norms.size() << " normals, " - << _colors.size() << " colors, " - << _texcoords.size() << " named uv sets.\n"; - - TransformSpaces::const_iterator tsi; - for (tsi = _transforms.begin(); tsi != _transforms.end(); ++tsi) { - const JointWeights &jw = (*tsi).first; - const VertexCollection &vc = (*tsi).second; - out << " " << jw << " has " - << vc._vindex.size() << " vertices and " - << vc._nindex.size() << " normals\n"; - } - - Morphs::const_iterator mi; - for (mi = _morphs.begin(); mi != _morphs.end(); ++mi) { - const string &name = (*mi).first; - const MorphList &mlist = (*mi).second; - out << name << " morphs " - << mlist._vmorphs.size() << " vertices, " - << mlist._nmorphs.size() << " normals, " - << mlist._tmorphs.size() << " uvs, and " - << mlist._cmorphs.size() << " colors.\n"; - } -} - - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMaker::JointWeights::Ordering operator -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -bool ComputedVerticesMaker::JointWeights:: -operator < (const JointWeights &other) const { - const_iterator i = begin(); - const_iterator j = other.begin(); - - while (i != end() && j != other.end()) { - if ((*i).first != (*j).first) { - return (*i).first < (*j).first; - } - if ((*i).second != (*j).second) { - return (*i).second < (*j).second; - } - ++i; - ++j; - } - - if (i == end() && j != other.end()) { - // The first i.size() items are equivalent, but list j is longer. - return true; - } - - if (i != end() && j == other.end()) { - // The first j.size() items are equivalent, but list i is longer. - return false; - } - - // The lists are equivalent. - return false; -} - - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMaker::JointWeights::normalize_weights -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -void ComputedVerticesMaker::JointWeights:: -normalize_weights() { - if (!empty()) { - double net_weight = 0.0; - - iterator i; - for (i = begin(); i != end(); ++i) { - double weight = (*i).second; - nassertv(weight > 0.0); - net_weight += weight; - } - nassertv(net_weight != 0.0); - - for (i = begin(); i != end(); ++i) { - (*i).second /= net_weight; - } - } -} - - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMaker::JointWeights::output -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -void ComputedVerticesMaker::JointWeights:: -output(ostream &out) const { - out << "jw("; - if (!empty()) { - const_iterator i = begin(); - out << (*i).first->get_name() << ":" << (*i).second; - for (++i; i != end(); ++i) { - out << " " << (*i).first->get_name() << ":" << (*i).second; - } - } - out << ")"; -} diff --git a/panda/src/egg2pg/computedVerticesMaker.h b/panda/src/egg2pg/computedVerticesMaker.h deleted file mode 100644 index 980b70b902..0000000000 --- a/panda/src/egg2pg/computedVerticesMaker.h +++ /dev/null @@ -1,174 +0,0 @@ -// Filename: computedVerticesMaker.h -// Created by: drose (01Mar99) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef COMPUTEDVERTICESMAKER_H -#define COMPUTEDVERTICESMAKER_H - -#include "pandabase.h" - -#include "computedVerticesMakerEntity.h" - -#include "computedVerticesMorph.h" -#include "pointerToArray.h" -#include "luse.h" -#include "typedef.h" -#include "eggMorphList.h" -#include "pta_Vertexf.h" -#include "pta_Normalf.h" -#include "pta_Colorf.h" -#include "pta_TexCoordf.h" - -#include "pset.h" -#include "pmap.h" - -class ComputedVertices; -class CharacterMaker; -class EggNode; -class EggVertex; -class InternalName; - -//////////////////////////////////////////////////////////////////// -// Class : ComputedVerticesMaker -// Description : An object to collect together all the vertices of a -// character, indicate what the transform space of each -// vertex is (which may be a soft-skinned combination of -// one or more joints), and identify which vertices may -// be shared together. -// -// Generally, you use a ComputedVerticesMaker by first -// defining a transform space via begin_new_space(), -// repeated calls to add_joint() (or -// add_vertex_joints()), and then mark_space(). Having -// done that, you can then add any number of vertices to -// the space via add_vertex(), add_normal(), etc., and -// it will return an index number for each vertex, -// collapsing duplicate vertices together properly. -// When you are ready to define a new space, simply -// repeat the process from begin_new_space(). -//////////////////////////////////////////////////////////////////// -class EXPCL_PANDAEGG ComputedVerticesMaker { -public: - ComputedVerticesMaker(); - - void begin_new_space(); - void add_joint(EggNode *joint, double membership); - void add_vertex_joints(EggVertex *vertex, EggNode *object); - void mark_space(); - - int add_vertex(const Vertexd &vertex, const EggMorphVertexList &morphs, - const LMatrix4d &transform); - int add_normal(const Normald &normal, const EggMorphNormalList &morphs, - const LMatrix4d &transform); - int add_texcoord(const InternalName *name, - const TexCoordd &texcoord, - const EggMorphTexCoordList &morphs, - const LMatrix3d &transform); - int add_color(const Colorf &color, const EggMorphColorList &morphs); - - ComputedVertices *make_computed_vertices(Character *character, - CharacterMaker &char_maker); - - void write(ostream &out) const; - -public: - PTA_Vertexf _coords; - PTA_Normalf _norms; - PTA_Colorf _colors; - - typedef pmap TexCoords; - TexCoords _texcoords; - -protected: - typedef pmap VertexMorphList; - typedef pmap NormalMorphList; - typedef pmap TexCoordMorphList; - typedef pmap ColorMorphList; - typedef pmap TexCoordMorphMap; - class MorphList { - public: - VertexMorphList _vmorphs; - NormalMorphList _nmorphs; - ColorMorphList _cmorphs; - TexCoordMorphMap _tmorphs; - }; - - typedef pmap Morphs; - Morphs _morphs; - - typedef pset Vertices; - - Vertices _cindex; - - class TexCoordDef { - public: - Vertices _tindex; - ComputedVerticesMakerTexCoordMap _tmap; - }; - - typedef pmap TexCoordDefMap; - TexCoordDefMap _tdefmap; - - ComputedVerticesMakerColorMap _cmap; - -#ifdef WIN32_VC -public: -#endif - - class JointWeights: public pmap { - public: - bool operator < (const JointWeights &other) const; - void normalize_weights(); - - void output(ostream &out) const; - }; - -protected: - class VertexCollection { - public: - Vertices _vindex; - Vertices _nindex; - - ComputedVerticesMakerVertexMap _vmap; - ComputedVerticesMakerNormalMap _nmap; - }; - - typedef pmap TransformSpaces; - TransformSpaces _transforms; - - class VertexTransform { - public: - EggNode *_joint; - float _effect; - }; - - JointWeights _current_jw; - VertexCollection *_current_vc; - - friend inline ostream &operator << (ostream &, const JointWeights &); -}; - -inline ostream & -operator << (ostream &out, const ComputedVerticesMaker::JointWeights &jw) { - jw.output(out); - return out; -} - -#include "computedVerticesMaker.I" - -#endif - diff --git a/panda/src/egg2pg/computedVerticesMakerEntity.I b/panda/src/egg2pg/computedVerticesMakerEntity.I deleted file mode 100644 index fcb5c58ab9..0000000000 --- a/panda/src/egg2pg/computedVerticesMakerEntity.I +++ /dev/null @@ -1,83 +0,0 @@ -// Filename: computedVerticesMakerEntity.I -// Created by: drose (02Mar99) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMakerEntity::Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -template -INLINE ComputedVerticesMakerEntity:: -ComputedVerticesMakerEntity(const ValueType &value, const MorphType &morphs) - : _value(value), _morphs(morphs) { -} - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMakerEntity::Ordering operator -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -template -bool ComputedVerticesMakerEntity:: -operator < (const ComputedVerticesMakerEntity &other) const { - // First, check the value. This is some vector type, which we - // compare componentwise. - int compare = _value.compare_to(other._value); - if (compare != 0) { - return compare < 0; - } - - // The values are identical; compare the morphs. - return _morphs < other._morphs; -} - - -//////////////////////////////////////////////////////////////////// -// Function: ComputedVerticesMakerEntityMap::add_value -// Access: Public -// Description: Creates a new entry for the value type and morph -// combination, if it is unique, and returns its new -// index number, or returns the index number of a -// previously-created, identical value type and morph. -// -// The PTA table is updated as each new index number is -// allocated so that table[index] == value. It is also -// used to determine the next available index number. -//////////////////////////////////////////////////////////////////// -template -int ComputedVerticesMakerEntityMap:: -add_value(const ValueType &value, const MorphType &morphs, - PTA(ValueType) &table) { - // First, see if we have such an entity already. - ComputedVerticesMakerEntity entity(value, morphs); - TYPENAME MapType::const_iterator mi = _map.find(entity); - if (mi != _map.end()) { - // We do! Return its index number. - return (*mi).second; - } - - // No, this is the first time we've encountered this combination. - // Define it. - int index = table.size(); - table.push_back(value); - _map[entity] = index; - - return index; -}; - diff --git a/panda/src/egg2pg/computedVerticesMakerEntity.h b/panda/src/egg2pg/computedVerticesMakerEntity.h deleted file mode 100644 index 1add3f2bf0..0000000000 --- a/panda/src/egg2pg/computedVerticesMakerEntity.h +++ /dev/null @@ -1,77 +0,0 @@ -// Filename: computedVerticesMakerEntity.h -// Created by: drose (02Mar99) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef COMPUTEDVERTICESMAKERENTITY_H -#define COMPUTEDVERTICESMAKERENTITY_H - -#include "pandabase.h" - -#include "luse.h" -#include "eggMorphList.h" -#include "typedef.h" -#include "pointerToArray.h" - -#include "pmap.h" -#include - -//////////////////////////////////////////////////////////////////// -// Class : ComputedVerticesMakerEntity -// Description : This represents a single vertex value, or color -// value, or normal value, or some such thing, added to -// the ComputedVerticesMaker. This supports -// ComputedVerticesMakerEntityMap, below, which is used -// by ComputedVerticesMaker to collect together vertex -// values with identical values. -//////////////////////////////////////////////////////////////////// -template -class ComputedVerticesMakerEntity { -public: - INLINE ComputedVerticesMakerEntity(const ValueType &value, - const MorphType &morphs); - bool - operator < (const ComputedVerticesMakerEntity &other) const; - - ValueType _value; - const MorphType &_morphs; -}; - - -//////////////////////////////////////////////////////////////////// -// Class : ComputedVerticesMakerEntityMap -// Description : A map of some kind of entity, above, to an integer -// index number. This collects together identical -// vertices into a common index number. -//////////////////////////////////////////////////////////////////// -template -class ComputedVerticesMakerEntityMap { -public: - int add_value(const ValueType &value, const MorphType &morphs, - PTA(ValueType) &table); - - typedef pmap, int> MapType; - MapType _map; -}; - -typedef ComputedVerticesMakerEntityMap ComputedVerticesMakerVertexMap; -typedef ComputedVerticesMakerEntityMap ComputedVerticesMakerNormalMap; -typedef ComputedVerticesMakerEntityMap ComputedVerticesMakerTexCoordMap; -typedef ComputedVerticesMakerEntityMap ComputedVerticesMakerColorMap; - -#include "computedVerticesMakerEntity.I" - -#endif diff --git a/panda/src/egg2pg/egg2pg_composite1.cxx b/panda/src/egg2pg/egg2pg_composite1.cxx index 467d760219..6e797603c1 100644 --- a/panda/src/egg2pg/egg2pg_composite1.cxx +++ b/panda/src/egg2pg/egg2pg_composite1.cxx @@ -1,6 +1,5 @@ #include "animBundleMaker.cxx" #include "characterMaker.cxx" -#include "computedVerticesMaker.cxx" #include "config_egg2pg.cxx" #include "egg_parametrics.cxx" #include "eggRenderState.cxx" diff --git a/panda/src/egg2pg/eggLoader.I b/panda/src/egg2pg/eggLoader.I index 9aba9f22dd..d75beb703a 100644 --- a/panda/src/egg2pg/eggLoader.I +++ b/panda/src/egg2pg/eggLoader.I @@ -23,7 +23,7 @@ // Description: //////////////////////////////////////////////////////////////////// INLINE EggLoader::PrimitiveUnifier:: -PrimitiveUnifier(const qpGeomPrimitive *prim) : +PrimitiveUnifier(const GeomPrimitive *prim) : _type(prim->get_type()), _shade_model(prim->get_shade_model()) { diff --git a/panda/src/egg2pg/eggLoader.cxx b/panda/src/egg2pg/eggLoader.cxx index 419315de6a..04983b4bf6 100644 --- a/panda/src/egg2pg/eggLoader.cxx +++ b/panda/src/egg2pg/eggLoader.cxx @@ -33,17 +33,17 @@ #include "textureAttrib.h" #include "materialPool.h" #include "geomNode.h" -#include "qpgeomVertexFormat.h" -#include "qpgeomVertexArrayFormat.h" -#include "qpgeomVertexData.h" -#include "qpgeomVertexWriter.h" -#include "qpgeom.h" -#include "qpgeomTriangles.h" -#include "qpgeomTristrips.h" -#include "qpgeomTrifans.h" -#include "qpgeomLines.h" -#include "qpgeomLinestrips.h" -#include "qpgeomPoints.h" +#include "geomVertexFormat.h" +#include "geomVertexArrayFormat.h" +#include "geomVertexData.h" +#include "geomVertexWriter.h" +#include "geom.h" +#include "geomTriangles.h" +#include "geomTristrips.h" +#include "geomTrifans.h" +#include "geomLines.h" +#include "geomLinestrips.h" +#include "geomPoints.h" #include "sequenceNode.h" #include "switchNode.h" #include "portalNode.h" @@ -200,7 +200,6 @@ build_graph() { // Now build up the scene graph. _root = new ModelRoot(_data->get_egg_filename().get_basename()); make_node(_data, _root); - _builder.build(); reparent_decals(); @@ -272,279 +271,6 @@ reparent_decals() { } } - -//////////////////////////////////////////////////////////////////// -// Function: EggLoader::make_nonindexed_primitive -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -void EggLoader:: -make_nonindexed_primitive(EggPrimitive *egg_prim, PandaNode *parent, - const LMatrix4d *transform, - ComputedVerticesMaker &comp_verts_maker) { - if (egg_prim->determine_indexed()) { - // Whoops, the primitive inherits the "indexed" flag. This means - // it should be an indexed primitive, even though the caller asked - // for a nonindexed primitive. - make_indexed_primitive(egg_prim, parent, transform, comp_verts_maker); - return; - } - - BuilderBucket bucket; - BakeInUVs bake_in_uvs; - setup_bucket(bucket, bake_in_uvs, parent, egg_prim); - if (bucket._hidden && egg_suppress_hidden) { - // Eat this primitive. - return; - } - - LMatrix4d mat; - - if (transform != NULL) { - mat = (*transform); - } else { - mat = egg_prim->get_vertex_to_node(); - } - - if (egg_prim->is_of_type(EggNurbsCurve::get_class_type())) { - make_nurbs_curve(DCAST(EggNurbsCurve, egg_prim), parent, mat); - - } else if (egg_prim->is_of_type(EggNurbsSurface::get_class_type())) { - make_nurbs_surface(DCAST(EggNurbsSurface, egg_prim), parent, mat); - - } else { - // A normal primitive: polygon, line, or point. - BuilderPrim bprim; - bprim.set_type(BPT_poly); - if (egg_prim->is_of_type(EggLine::get_class_type())) { - bprim.set_type(BPT_linestrip); - } else if (egg_prim->is_of_type(EggPoint::get_class_type())) { - bprim.set_type(BPT_point); - } - - if (egg_prim->has_normal()) { - Normald norm = egg_prim->get_normal() * mat; - norm.normalize(); - bprim.set_normal(LCAST(float, norm)); - } - if (egg_prim->has_color() && !egg_false_color) { - bprim.set_color(egg_prim->get_color()); - } - - bool has_vert_color = true; - EggPrimitive::const_iterator vi; - for (vi = egg_prim->begin(); vi != egg_prim->end(); ++vi) { - EggVertex *egg_vert = *vi; - if (egg_vert->get_num_dimensions() != 3) { - egg2pg_cat.error() - << "Vertex " << egg_vert->get_pool()->get_name() - << ":" << egg_vert->get_index() << " has dimension " - << egg_vert->get_num_dimensions() << "\n"; - } else { - BuilderVertex bvert(LCAST(float, egg_vert->get_pos3() * mat)); - - if (egg_vert->has_normal()) { - Normald norm = egg_vert->get_normal() * mat; - norm.normalize(); - bvert.set_normal(LCAST(float, norm)); - } - if (egg_vert->has_color() && !egg_false_color) { - bvert.set_color(egg_vert->get_color()); - } else { - // If any vertex doesn't have a color, we can't use any of the - // vertex colors. - has_vert_color = false; - } - - EggVertex::const_uv_iterator ui; - for (ui = egg_vert->uv_begin(); ui != egg_vert->uv_end(); ++ui) { - EggVertexUV *uv_obj = (*ui); - TexCoordd uv = uv_obj->get_uv(); - CPT(InternalName) uv_name; - if (uv_obj->has_name() && uv_obj->get_name() != string("default")) { - uv_name = InternalName::get_texcoord_name(uv_obj->get_name()); - } else { - uv_name = InternalName::get_texcoord(); - } - - BakeInUVs::const_iterator buv = bake_in_uvs.find(uv_name); - if (buv != bake_in_uvs.end()) { - // If we are to bake in a texture matrix, do so now. - uv = uv * (*buv).second->get_transform(); - } - - bvert.set_texcoord(uv_name, LCAST(float, uv)); - } - - bprim.add_vertex(bvert); - } - } - - // Finally, if the primitive didn't have a color, and it didn't have - // vertex color, make it white. - if (!egg_prim->has_color() && !has_vert_color && !egg_false_color) { - bprim.set_color(Colorf(1.0, 1.0, 1.0, 1.0)); - } - - _builder.add_prim(bucket, bprim); - } -} - -//////////////////////////////////////////////////////////////////// -// Function: EggLoader::make_indexed_primitive -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -void EggLoader:: -make_indexed_primitive(EggPrimitive *egg_prim, PandaNode *parent, - const LMatrix4d *transform, - ComputedVerticesMaker &comp_verts_maker) { - BuilderBucket bucket; - BakeInUVs bake_in_uvs; - setup_bucket(bucket, bake_in_uvs, parent, egg_prim); - if (bucket._hidden && egg_suppress_hidden) { - // Eat this primitive. - return; - } - - LMatrix4d mat; - - if (transform != NULL) { - mat = (*transform); - } else { - mat = egg_prim->get_vertex_to_node(); - } - - BuilderPrimI bprim; - bprim.set_type(BPT_poly); - if (egg_prim->is_of_type(EggLine::get_class_type())) { - bprim.set_type(BPT_linestrip); - } else if (egg_prim->is_of_type(EggPoint::get_class_type())) { - bprim.set_type(BPT_point); - } - - if (egg_prim->has_normal()) { - // Define the transform space of the polygon normal. This will be - // the average of all the vertex transform spaces. - comp_verts_maker.begin_new_space(); - EggPrimitive::const_iterator vi; - for (vi = egg_prim->begin(); vi != egg_prim->end(); ++vi) { - EggVertex *egg_vert = *vi; - comp_verts_maker.add_vertex_joints(egg_vert, egg_prim); - } - comp_verts_maker.mark_space(); - - int nindex = - comp_verts_maker.add_normal(egg_prim->get_normal(), - egg_prim->_dnormals, mat); - - bprim.set_normal(nindex); - } - - if (egg_prim->has_color() && !egg_false_color) { - int cindex = - comp_verts_maker.add_color(egg_prim->get_color(), - egg_prim->_drgbas); - bprim.set_color(cindex); - } - - bool has_vert_color = true; - EggPrimitive::const_iterator vi; - for (vi = egg_prim->begin(); vi != egg_prim->end(); ++vi) { - EggVertex *egg_vert = *vi; - - if (egg_vert->get_num_dimensions() != 3) { - egg2pg_cat.error() - << "Vertex " << egg_vert->get_pool()->get_name() - << ":" << egg_vert->get_index() << " has dimension " - << egg_vert->get_num_dimensions() << "\n"; - } else { - // Set up the ComputedVerticesMaker for the coordinate space of - // the vertex. - comp_verts_maker.begin_new_space(); - comp_verts_maker.add_vertex_joints(egg_vert, egg_prim); - comp_verts_maker.mark_space(); - - int vindex = - comp_verts_maker.add_vertex(egg_vert->get_pos3(), - egg_vert->_dxyzs, mat); - BuilderVertexI bvert(vindex); - - if (egg_vert->has_normal()) { - int nindex = - comp_verts_maker.add_normal(egg_vert->get_normal(), - egg_vert->_dnormals, - mat); - bvert.set_normal(nindex); - } - - if (egg_vert->has_color() && !egg_false_color) { - int cindex = - comp_verts_maker.add_color(egg_vert->get_color(), - egg_vert->_drgbas); - bvert.set_color(cindex); - } else { - // If any vertex doesn't have a color, we can't use any of the - // vertex colors. - has_vert_color = false; - } - - EggVertex::const_uv_iterator ui; - for (ui = egg_vert->uv_begin(); ui != egg_vert->uv_end(); ++ui) { - EggVertexUV *uv_obj = (*ui); - TexCoordd uv = uv_obj->get_uv(); - CPT(InternalName) uv_name; - if (uv_obj->has_name() && uv_obj->get_name() != string("default")) { - uv_name = InternalName::get_texcoord_name(uv_obj->get_name()); - } else { - uv_name = InternalName::get_texcoord(); - } - - LMatrix3d mat = LMatrix3d::ident_mat(); - - BakeInUVs::const_iterator buv = bake_in_uvs.find(uv_name); - if (buv != bake_in_uvs.end()) { - // If we are to bake in a texture matrix, do so now. - mat = (*buv).second->get_transform(); - } - - int tindex = - comp_verts_maker.add_texcoord(uv_name, uv, uv_obj->_duvs, mat); - bvert.set_texcoord(uv_name, tindex); - } - - bprim.add_vertex(bvert); - } - } - - // Finally, if the primitive didn't have a color, and it didn't have - // vertex color, make it white. - if (!egg_prim->has_color() && !has_vert_color && !egg_false_color) { - int cindex = - comp_verts_maker.add_color(Colorf(1.0, 1.0, 1.0, 1.0), - EggMorphColorList()); - bprim.set_color(cindex); - } - - // We have to set up the arrays after we have iterated through the - // vertices, because iterating through the vertices might discover - // additional texture coordinate sets that we didn't know about - // before. - bucket.set_coords(comp_verts_maker._coords); - bucket.set_normals(comp_verts_maker._norms); - bucket.set_colors(comp_verts_maker._colors); - - ComputedVerticesMaker::TexCoords::const_iterator tci; - for (tci = comp_verts_maker._texcoords.begin(); - tci != comp_verts_maker._texcoords.end(); - ++tci) { - const InternalName *name = (*tci).first; - bucket.set_texcoords(name, (*tci).second); - } - - _builder.add_prim(bucket, bprim); -} - //////////////////////////////////////////////////////////////////// // Function: EggLoader::make_polyset // Access: Public @@ -578,18 +304,6 @@ make_polyset(EggBin *egg_bin, PandaNode *parent, const LMatrix4d *transform, return; } - if (!use_qpgeom) { - // In the old Geom system, just send each primitive to the - // Builder. - for (ci = egg_bin->begin(); ci != egg_bin->end(); ++ci) { - EggPrimitive *egg_prim; - DCAST_INTO_V(egg_prim, (*ci)); - make_nonindexed_primitive(egg_prim, parent, transform, _comp_verts_maker); - } - - return; - } - // Generate an optimal vertex pool for the polygons within just the // bin (which translates directly to an optimal GeomVertexData // structure). @@ -634,19 +348,19 @@ make_polyset(EggBin *egg_bin, PandaNode *parent, const LMatrix4d *transform, // Now convert the vertex pool to a GeomVertexData. nassertv(vertex_pool != (EggVertexPool *)NULL); - PT(qpGeomVertexData) vertex_data = + PT(GeomVertexData) vertex_data = make_vertex_data(render_state, vertex_pool, egg_bin, mat, is_dynamic, character_maker); - nassertv(vertex_data != (qpGeomVertexData *)NULL); + nassertv(vertex_data != (GeomVertexData *)NULL); // And create a Geom to hold the primitives. - PT(qpGeom) geom = new qpGeom; + PT(Geom) geom = new Geom; geom->set_vertex_data(vertex_data); // Add each new primitive to the Geom. Primitives::const_iterator pi; for (pi = primitives.begin(); pi != primitives.end(); ++pi) { - qpGeomPrimitive *primitive = (*pi).second; + GeomPrimitive *primitive = (*pi).second; geom->add_primitive(primitive); } @@ -726,20 +440,14 @@ make_nurbs_curve(EggNurbsCurve *egg_curve, PandaNode *parent, rope->set_num_subdiv(max(subdiv_per_segment, 1)); } - // Now get the attributes to apply to the rope. We create a - // BuilderBucket for this purpose, so we can call setup_bucket(), - // but all we do with this bucket is immediately extract the state - // from it. - BuilderBucket bucket; - BakeInUVs bake_in_uvs; - setup_bucket(bucket, bake_in_uvs, parent, egg_curve); - if (bucket._hidden && egg_suppress_hidden) { + const EggRenderState *render_state; + DCAST_INTO_V(render_state, egg_curve->get_user_data(EggRenderState::get_class_type())); + if (render_state->_hidden && egg_suppress_hidden) { // Eat this primitive. return; } - nassertv(bake_in_uvs.empty()); - rope->set_state(bucket._state); + rope->set_state(render_state->_state); rope->set_uv_mode(RopeNode::UV_parametric); if (egg_curve->has_vertex_color()) { @@ -867,20 +575,14 @@ make_nurbs_surface(EggNurbsSurface *egg_surface, PandaNode *parent, sheet->set_num_v_subdiv(max(v_subdiv_per_segment, 1)); } - // Now get the attributes to apply to the sheet. We create a - // BuilderBucket for this purpose, so we can call setup_bucket(), - // but all we do with this bucket is immediately extract the state - // from it. - BuilderBucket bucket; - BakeInUVs bake_in_uvs; - setup_bucket(bucket, bake_in_uvs, parent, egg_surface); - if (bucket._hidden && egg_suppress_hidden) { + const EggRenderState *render_state; + DCAST_INTO_V(render_state, egg_surface->get_user_data(EggRenderState::get_class_type())); + if (render_state->_hidden && egg_suppress_hidden) { // Eat this primitive. return; } - nassertv(bake_in_uvs.empty()); - sheet->set_state(bucket._state); + sheet->set_state(render_state->_state); if (egg_surface->has_vertex_color()) { // If the surface had individual vertex color, enable it. @@ -1445,48 +1147,6 @@ make_texture_stage(const EggTexture *egg_tex) { return stage; } - -//////////////////////////////////////////////////////////////////// -// Function: EggLoader::setup_bucket -// Access: Private -// Description: -//////////////////////////////////////////////////////////////////// -void EggLoader:: -setup_bucket(BuilderBucket &bucket, EggLoader::BakeInUVs &bake_in_uvs, - PandaNode *parent, EggPrimitive *egg_prim) { - bucket._node = parent; - bucket._mesh = egg_mesh; - bucket._retesselate_coplanar = egg_retesselate_coplanar; - bucket._unroll_fans = egg_unroll_fans; - bucket._show_tstrips = egg_show_tstrips; - bucket._show_qsheets = egg_show_qsheets; - bucket._show_quads = egg_show_quads; - bucket._show_normals = egg_show_normals; - bucket._normal_scale = egg_normal_scale; - bucket._subdivide_polys = egg_subdivide_polys; - bucket._consider_fans = egg_consider_fans; - bucket._max_tfan_angle = egg_max_tfan_angle; - bucket._min_tfan_tris = egg_min_tfan_tris; - bucket._coplanar_threshold = egg_coplanar_threshold; - - // If a primitive has a name that does not begin with a digit, it - // should be used to group primitives together--i.e. each primitive - // with the same name gets placed into the same GeomNode. However, - // if a prim's name begins with a digit, just ignore it. - if (egg_prim->has_name() && !isdigit(egg_prim->get_name()[0])) { - bucket.set_name(egg_prim->get_name()); - } - - EggRenderState render_state(*this); - render_state.fill_state(egg_prim); - - bucket._state = render_state._state; - bucket._hidden = render_state._hidden; - bake_in_uvs = render_state._bake_in_uvs; -} - - - //////////////////////////////////////////////////////////////////// // Function: EggLoader::separate_switches // Access: Private @@ -1550,38 +1210,6 @@ make_node(EggNode *egg_node, PandaNode *parent) { return (PandaNode *)NULL; } -/* -//////////////////////////////////////////////////////////////////// -// Function: EggLoader::make_node (EggPrimitive) -// Access: Private -// Description: -//////////////////////////////////////////////////////////////////// -PandaNode *EggLoader:: -make_node(EggPrimitive *egg_prim, PandaNode *parent) { - assert(parent != NULL); - assert(!parent->is_of_type(GeomNode::get_class_type())); - - if (egg_prim->cleanup()) { - if (parent->is_of_type(SelectiveChildNode::get_class_type())) { - // If we're putting a primitive under a SelectiveChildNode of - // some kind, its exact position within the group is relevant, - // so we need to create a placeholder now. - PandaNode *group = new PandaNode(egg_prim->get_name()); - parent->add_child(group); - make_nonindexed_primitive(egg_prim, group, NULL, _comp_verts_maker); - return group; - } - - // Otherwise, we don't really care what the position of this - // primitive is within its parent's list of children, and in fact - // we want to allow it to be combined with other polygons added to - // the same parent. - make_nonindexed_primitive(egg_prim, parent, NULL, _comp_verts_maker); - } - return (PandaNode *)NULL; -} -*/ - //////////////////////////////////////////////////////////////////// // Function: EggLoader::make_node (EggBin) // Access: Private @@ -1785,12 +1413,11 @@ make_node(EggGroup *egg_group, PandaNode *parent) { // GeomNode for all of the children. bool all_polysets = false; bool any_hidden = false; - if (use_qpgeom) { - // We don't want to ever create a GeomNode under a "decal" flag, - // since that can confuse the decal reparenting. - if (!egg_group->determine_decal()) { - check_for_polysets(egg_group, all_polysets, any_hidden); - } + + // We don't want to ever create a GeomNode under a "decal" flag, + // since that can confuse the decal reparenting. + if (!egg_group->determine_decal()) { + check_for_polysets(egg_group, all_polysets, any_hidden); } if (all_polysets && !any_hidden) { @@ -1997,7 +1624,7 @@ check_for_polysets(EggGroup *egg_group, bool &all_polysets, bool &any_hidden) { // GeomVertexData has already been created for this // transform, just returns it. //////////////////////////////////////////////////////////////////// -PT(qpGeomVertexData) EggLoader:: +PT(GeomVertexData) EggLoader:: make_vertex_data(const EggRenderState *render_state, EggVertexPool *vertex_pool, EggNode *primitive_home, const LMatrix4d &transform, @@ -2014,22 +1641,22 @@ make_vertex_data(const EggRenderState *render_state, } // Decide on the format for the vertices. - PT(qpGeomVertexArrayFormat) array_format = new qpGeomVertexArrayFormat; + PT(GeomVertexArrayFormat) array_format = new GeomVertexArrayFormat; array_format->add_column (InternalName::get_vertex(), vertex_pool->get_num_dimensions(), - qpGeom::NT_float32, qpGeom::C_point); + Geom::NT_float32, Geom::C_point); if (vertex_pool->has_normals()) { array_format->add_column (InternalName::get_normal(), 3, - qpGeom::NT_float32, qpGeom::C_vector); + Geom::NT_float32, Geom::C_vector); } bool has_colors = vertex_pool->has_nonwhite_colors(); if (has_colors) { array_format->add_column (InternalName::get_color(), 1, - qpGeom::NT_packed_dabc, qpGeom::C_color); + Geom::NT_packed_dabc, Geom::C_color); } vector_string uv_names; @@ -2043,10 +1670,10 @@ make_vertex_data(const EggRenderState *render_state, PT(InternalName) iname = InternalName::get_texcoord_name(name); array_format->add_column (iname, 2, - qpGeom::NT_float32, qpGeom::C_texcoord); + Geom::NT_float32, Geom::C_texcoord); } - PT(qpGeomVertexFormat) temp_format = new qpGeomVertexFormat(array_format); + PT(GeomVertexFormat) temp_format = new GeomVertexFormat(array_format); PT(TransformBlendTable) blend_table; PT(SliderTable) slider_table; @@ -2060,16 +1687,16 @@ make_vertex_data(const EggRenderState *render_state, // Tell the format that we're setting it up for Panda-based // animation. - qpGeomVertexAnimationSpec animation; + GeomVertexAnimationSpec animation; animation.set_panda(); temp_format->set_animation(animation); blend_table = new TransformBlendTable; - PT(qpGeomVertexArrayFormat) anim_array_format = new qpGeomVertexArrayFormat; + PT(GeomVertexArrayFormat) anim_array_format = new GeomVertexArrayFormat; anim_array_format->add_column (InternalName::get_transform_blend(), 1, - qpGeom::NT_uint16, qpGeom::C_index); + Geom::NT_uint16, Geom::C_index); temp_format->add_array(anim_array_format); pset slider_names; @@ -2134,16 +1761,16 @@ make_vertex_data(const EggRenderState *render_state, name = character_maker->get_name(); } - CPT(qpGeomVertexFormat) format = - qpGeomVertexFormat::register_format(temp_format); + CPT(GeomVertexFormat) format = + GeomVertexFormat::register_format(temp_format); // Now create a new GeomVertexData using the indicated format. It // is actually correct to create it with UH_static even it // represents a dynamic object, because the vertex data itself won't // be changing--just the result of applying the animation is // dynamic. - PT(qpGeomVertexData) vertex_data = - new qpGeomVertexData(name, format, qpGeom::UH_static); + PT(GeomVertexData) vertex_data = + new GeomVertexData(name, format, Geom::UH_static); vertex_data->set_transform_blend_table(blend_table); if (slider_table != (SliderTable *)NULL) { @@ -2153,7 +1780,7 @@ make_vertex_data(const EggRenderState *render_state, // And fill the data from the vertex pool. EggVertexPool::const_iterator vi; for (vi = vertex_pool->begin(); vi != vertex_pool->end(); ++vi) { - qpGeomVertexWriter gvw(vertex_data); + GeomVertexWriter gvw(vertex_data); EggVertex *vertex = (*vi); gvw.set_row(vertex->get_index()); @@ -2286,7 +1913,7 @@ make_vertex_data(const EggRenderState *render_state, // Description: //////////////////////////////////////////////////////////////////// void EggLoader:: -record_morph(qpGeomVertexArrayFormat *array_format, +record_morph(GeomVertexArrayFormat *array_format, CharacterMaker *character_maker, const string &morph_name, InternalName *column_name, int num_components) { @@ -2296,7 +1923,7 @@ record_morph(qpGeomVertexArrayFormat *array_format, if (!array_format->has_column(delta_name)) { array_format->add_column (delta_name, num_components, - qpGeom::NT_float32, qpGeom::C_morph_delta); + Geom::NT_float32, Geom::C_morph_delta); } } @@ -2309,30 +1936,30 @@ record_morph(qpGeomVertexArrayFormat *array_format, void EggLoader:: make_primitive(const EggRenderState *render_state, EggPrimitive *egg_prim, EggLoader::Primitives &primitives) { - PT(qpGeomPrimitive) primitive; + PT(GeomPrimitive) primitive; if (egg_prim->is_of_type(EggPolygon::get_class_type())) { if (egg_prim->size() == 3) { - primitive = new qpGeomTriangles(qpGeom::UH_static); + primitive = new GeomTriangles(Geom::UH_static); } } else if (egg_prim->is_of_type(EggTriangleStrip::get_class_type())) { - primitive = new qpGeomTristrips(qpGeom::UH_static); + primitive = new GeomTristrips(Geom::UH_static); } else if (egg_prim->is_of_type(EggTriangleFan::get_class_type())) { - primitive = new qpGeomTrifans(qpGeom::UH_static); + primitive = new GeomTrifans(Geom::UH_static); } else if (egg_prim->is_of_type(EggLine::get_class_type())) { if (egg_prim->size() == 2) { - primitive = new qpGeomLines(qpGeom::UH_static); + primitive = new GeomLines(Geom::UH_static); } else { - primitive = new qpGeomLinestrips(qpGeom::UH_static); + primitive = new GeomLinestrips(Geom::UH_static); } } else if (egg_prim->is_of_type(EggPoint::get_class_type())) { - primitive = new qpGeomPoints(qpGeom::UH_static); + primitive = new GeomPoints(Geom::UH_static); } - if (primitive == (qpGeomPrimitive *)NULL) { + if (primitive == (GeomPrimitive *)NULL) { // Don't know how to make this kind of primitive. egg2pg_cat.warning() << "Ignoring " << egg_prim->get_type() << "\n"; @@ -2340,13 +1967,13 @@ make_primitive(const EggRenderState *render_state, EggPrimitive *egg_prim, } if (render_state->_flat_shaded) { - primitive->set_shade_model(qpGeomPrimitive::SM_flat_first_vertex); + primitive->set_shade_model(GeomPrimitive::SM_flat_first_vertex); } else if (egg_prim->get_shading() == EggPrimitive::S_overall) { - primitive->set_shade_model(qpGeomPrimitive::SM_uniform); + primitive->set_shade_model(GeomPrimitive::SM_uniform); } else { - primitive->set_shade_model(qpGeomPrimitive::SM_smooth); + primitive->set_shade_model(GeomPrimitive::SM_smooth); } // Insert the primitive into the set, but if we already have a diff --git a/panda/src/egg2pg/eggLoader.h b/panda/src/egg2pg/eggLoader.h index f5d58fa11b..a2d2573344 100644 --- a/panda/src/egg2pg/eggLoader.h +++ b/panda/src/egg2pg/eggLoader.h @@ -31,7 +31,6 @@ #include "texture.h" #include "pandaNode.h" #include "pointerTo.h" -#include "builder.h" #include "lmatrix.h" #include "indirectCompareTo.h" #include "textureAttrib.h" @@ -39,9 +38,8 @@ #include "texGenAttrib.h" #include "colorBlendAttrib.h" #include "eggTransform3d.h" -#include "computedVerticesMaker.h" -#include "qpgeomVertexData.h" -#include "qpgeomPrimitive.h" +#include "geomVertexData.h" +#include "geomPrimitive.h" class EggNode; class EggBin; @@ -77,14 +75,6 @@ public: void build_graph(); void reparent_decals(); - void make_nonindexed_primitive(EggPrimitive *egg_prim, PandaNode *parent, - const LMatrix4d *transform, - ComputedVerticesMaker &comp_verts_maker); - - void make_indexed_primitive(EggPrimitive *egg_prim, PandaNode *parent, - const LMatrix4d *transform, - ComputedVerticesMaker &comp_verts_maker); - void make_polyset(EggBin *egg_bin, PandaNode *parent, const LMatrix4d *transform, bool is_dynamic, CharacterMaker *character_maker); @@ -108,13 +98,13 @@ private: // This is used by make_primitive(). class PrimitiveUnifier { public: - INLINE PrimitiveUnifier(const qpGeomPrimitive *prim); + INLINE PrimitiveUnifier(const GeomPrimitive *prim); INLINE bool operator < (const PrimitiveUnifier &other) const; TypeHandle _type; - qpGeomPrimitive::ShadeModel _shade_model; + GeomPrimitive::ShadeModel _shade_model; }; - typedef pmap Primitives; + typedef pmap Primitives; void make_nurbs_curve(EggNurbsCurve *egg_curve, PandaNode *parent, const LMatrix4d &mat); @@ -128,9 +118,6 @@ private: void apply_texture_attributes(Texture *tex, const EggTexture *egg_tex); PT(TextureStage) make_texture_stage(const EggTexture *egg_tex); - void setup_bucket(BuilderBucket &bucket, BakeInUVs &bake_in_uvs, - PandaNode *parent, EggPrimitive *egg_prim); - void separate_switches(EggNode *egg_node); PandaNode *make_node(EggNode *egg_node, PandaNode *parent); @@ -145,12 +132,12 @@ private: void check_for_polysets(EggGroup *egg_group, bool &all_polysets, bool &any_hidden); - PT(qpGeomVertexData) make_vertex_data + PT(GeomVertexData) make_vertex_data (const EggRenderState *render_state, EggVertexPool *vertex_pool, EggNode *primitive_home, const LMatrix4d &transform, bool is_dynamic, CharacterMaker *character_maker); void record_morph - (qpGeomVertexArrayFormat *array_format, + (GeomVertexArrayFormat *array_format, CharacterMaker *character_maker, const string &morph_name, InternalName *column_name, int num_components); @@ -215,8 +202,6 @@ private: static ColorBlendAttrib::Operand get_color_blend_operand(EggGroup::BlendOperand operand); - Builder _builder; - typedef pmap Textures; Textures _textures; @@ -234,13 +219,11 @@ private: BakeInUVs _bake_in_uvs; LMatrix4d _transform; }; - typedef pmap VertexPoolData; + typedef pmap VertexPoolData; VertexPoolData _vertex_pool_data; DeferredNodes _deferred_nodes; - ComputedVerticesMaker _comp_verts_maker; - public: PT(PandaNode) _root; PT(EggData) _data; diff --git a/panda/src/egg2pg/eggRenderState.I b/panda/src/egg2pg/eggRenderState.I index 278a79546f..c144f2ebae 100644 --- a/panda/src/egg2pg/eggRenderState.I +++ b/panda/src/egg2pg/eggRenderState.I @@ -27,7 +27,7 @@ EggRenderState(EggLoader &loader) : _state(RenderState::make_empty()), _hidden(false), _flat_shaded(false), - _primitive_type(qpGeom::PT_none), + _primitive_type(Geom::PT_none), _loader(loader) { } diff --git a/panda/src/egg2pg/eggRenderState.cxx b/panda/src/egg2pg/eggRenderState.cxx index cb0a876a6e..36d73bbf46 100644 --- a/panda/src/egg2pg/eggRenderState.cxx +++ b/panda/src/egg2pg/eggRenderState.cxx @@ -346,21 +346,19 @@ fill_state(EggPrimitive *egg_prim) { _flat_shaded = (egg_prim->get_connected_shading() == EggPrimitive::S_per_face); - if (use_qpgeom) { - if (_flat_shaded) { - add_attrib(ShadeModelAttrib::make(ShadeModelAttrib::M_flat)); - } + if (_flat_shaded) { + add_attrib(ShadeModelAttrib::make(ShadeModelAttrib::M_flat)); } if (egg_prim->is_of_type(EggLine::get_class_type())) { - _primitive_type = qpGeom::PT_lines; + _primitive_type = Geom::PT_lines; EggLine *egg_line = DCAST(EggLine, egg_prim); if (egg_line->get_thick() != 1.0) { add_attrib(RenderModeAttrib::make(RenderModeAttrib::M_unchanged, egg_line->get_thick())); } } else if (egg_prim->is_of_type(EggPoint::get_class_type())) { - _primitive_type = qpGeom::PT_points; + _primitive_type = Geom::PT_points; EggPoint *egg_point = DCAST(EggPoint, egg_prim); if (egg_point->get_thick() != 1.0 || egg_point->get_perspective()) { add_attrib(RenderModeAttrib::make(RenderModeAttrib::M_unchanged, @@ -368,7 +366,7 @@ fill_state(EggPrimitive *egg_prim) { egg_point->get_perspective())); } } else { - _primitive_type = qpGeom::PT_polygons; + _primitive_type = Geom::PT_polygons; } if (has_bin) { diff --git a/panda/src/egg2pg/eggRenderState.h b/panda/src/egg2pg/eggRenderState.h index c6359e4986..3aee562908 100644 --- a/panda/src/egg2pg/eggRenderState.h +++ b/panda/src/egg2pg/eggRenderState.h @@ -26,7 +26,7 @@ #include "renderState.h" #include "renderAttrib.h" #include "internalName.h" -#include "qpgeomPrimitive.h" +#include "geomPrimitive.h" #include "luse.h" #include "pointerTo.h" #include "pvector.h" @@ -65,7 +65,7 @@ public: CPT(RenderState) _state; bool _hidden; bool _flat_shaded; - qpGeom::PrimitiveType _primitive_type; + Geom::PrimitiveType _primitive_type; typedef EggLoader::BakeInUVs BakeInUVs; typedef EggLoader::TextureDef TextureDef; diff --git a/panda/src/express/config_express.cxx b/panda/src/express/config_express.cxx index f68ceda23e..2a02788b83 100644 --- a/panda/src/express/config_express.cxx +++ b/panda/src/express/config_express.cxx @@ -118,7 +118,7 @@ ConfigVariableInt multifile_encryption_iteration_count "each subfile in order to decrypt it.")); ConfigVariableBool vfs_case_sensitive -("vfs-case-sensitive", false, +("vfs-case-sensitive", true, PRC_DESC("Set this true to make the VirtualFileSystem present the native " "OS-provided filesystem as if it were a case-sensitive file " "system, even if it is not (e.g. on Windows). This variable " diff --git a/panda/src/framework/windowFramework.cxx b/panda/src/framework/windowFramework.cxx index 88db520f89..7ce2cfbea7 100644 --- a/panda/src/framework/windowFramework.cxx +++ b/panda/src/framework/windowFramework.cxx @@ -25,13 +25,12 @@ #include "filename.h" #include "loader.h" #include "keyboardButton.h" -#include "geomTri.h" -#include "qpgeom.h" -#include "qpgeomTriangles.h" -#include "qpgeomTristrips.h" -#include "qpgeomVertexData.h" -#include "qpgeomVertexFormat.h" -#include "qpgeomVertexWriter.h" +#include "geom.h" +#include "geomTriangles.h" +#include "geomTristrips.h" +#include "geomVertexData.h" +#include "geomVertexFormat.h" +#include "geomVertexWriter.h" #include "texturePool.h" #include "textureAttrib.h" #include "colorAttrib.h" @@ -44,14 +43,11 @@ #include "boundingSphere.h" #include "deg_2_rad.h" #include "config_framework.h" -#include "depthTestAttrib.h" -#include "depthWriteAttrib.h" #include "cullFaceAttrib.h" #include "rescaleNormalAttrib.h" #include "shadeModelAttrib.h" #include "pgTop.h" #include "geomNode.h" -#include "geomTristrip.h" #include "texture.h" #include "pnmImage.h" #include "loaderFileTypeRegistry.h" @@ -259,18 +255,9 @@ get_render_2d() { // Some standard properties for the 2-d display. - // It's particularly important to turn off the depth test, - // since we'll be keeping the same depth buffer already filled - // by the previously-drawn 3-d scene--we don't want to pay for - // a clear operation, but we also don't want to collide with - // that depth buffer. - CPT(RenderAttrib) dt = DepthTestAttrib::make(DepthTestAttrib::M_none); - CPT(RenderAttrib) dw = DepthWriteAttrib::make(DepthWriteAttrib::M_off); - _render_2d.node()->set_attrib(dt, 1); - _render_2d.node()->set_attrib(dw, 1); - + _render_2d.set_depth_write(0); _render_2d.set_material_off(1); - _render_2d.set_two_sided(1, 1); + _render_2d.set_two_sided(1); // Now set up a 2-d camera to view render_2d. @@ -630,71 +617,39 @@ load_default_model(const NodePath &parent) { GeomNode *geomnode = new GeomNode("tri"); - if (use_qpgeom) { - // New, experimental Geom code. - PT(qpGeomVertexData) vdata = new qpGeomVertexData - (string(), qpGeomVertexFormat::get_v3n3cpt2(), - qpGeom::UH_static); - qpGeomVertexWriter vertex(vdata, InternalName::get_vertex()); - qpGeomVertexWriter normal(vdata, InternalName::get_normal()); - qpGeomVertexWriter color(vdata, InternalName::get_color()); - qpGeomVertexWriter texcoord(vdata, InternalName::get_texcoord()); - - vertex.add_data3f(Vertexf::rfu(0.0, 0.0, 0.0)); - vertex.add_data3f(Vertexf::rfu(1.0, 0.0, 0.0)); - vertex.add_data3f(Vertexf::rfu(0.0, 0.0, 1.0)); - - normal.add_data3f(Normalf::back()); - normal.add_data3f(Normalf::back()); - normal.add_data3f(Normalf::back()); - - color.add_data4f(0.5, 0.5, 1.0, 1.0); - color.add_data4f(0.5, 0.5, 1.0, 1.0); - color.add_data4f(0.5, 0.5, 1.0, 1.0); - - texcoord.add_data2f(0.0, 0.0); - texcoord.add_data2f(1.0, 0.0); - texcoord.add_data2f(0.0, 1.0); - - PT(qpGeomTriangles) tri = new qpGeomTriangles(qpGeom::UH_static); - tri->add_consecutive_vertices(0, 3); - tri->close_primitive(); - - PT(qpGeom) geom = new qpGeom; - geom->set_vertex_data(vdata); - geom->add_primitive(tri); - - geomnode->add_geom(geom, state); - - } else { - // Original, tried-and-true Geom code. - PTA_Vertexf coords; - PTA_TexCoordf uvs; - PTA_Normalf norms; - PTA_Colorf colors; - PTA_ushort cindex; - - coords.push_back(Vertexf::rfu(0.0, 0.0, 0.0)); - coords.push_back(Vertexf::rfu(1.0, 0.0, 0.0)); - coords.push_back(Vertexf::rfu(0.0, 0.0, 1.0)); - uvs.push_back(TexCoordf(0.0, 0.0)); - uvs.push_back(TexCoordf(1.0, 0.0)); - uvs.push_back(TexCoordf(0.0, 1.0)); - norms.push_back(Normalf::back()); - colors.push_back(Colorf(0.5, 0.5, 1.0, 1.0)); - cindex.push_back(0); - cindex.push_back(0); - cindex.push_back(0); - - PT(GeomTri) geom = new GeomTri; - geom->set_num_prims(1); - geom->set_coords(coords); - geom->set_texcoords(uvs, G_PER_VERTEX); - geom->set_normals(norms, G_PER_PRIM); - geom->set_colors(colors, G_PER_VERTEX, cindex); - - geomnode->add_geom(geom, state); - } + PT(GeomVertexData) vdata = new GeomVertexData + ("tri", GeomVertexFormat::get_v3n3cpt2(), + Geom::UH_static); + GeomVertexWriter vertex(vdata, InternalName::get_vertex()); + GeomVertexWriter normal(vdata, InternalName::get_normal()); + GeomVertexWriter color(vdata, InternalName::get_color()); + GeomVertexWriter texcoord(vdata, InternalName::get_texcoord()); + + vertex.add_data3f(Vertexf::rfu(0.0, 0.0, 0.0)); + vertex.add_data3f(Vertexf::rfu(1.0, 0.0, 0.0)); + vertex.add_data3f(Vertexf::rfu(0.0, 0.0, 1.0)); + + normal.add_data3f(Normalf::back()); + normal.add_data3f(Normalf::back()); + normal.add_data3f(Normalf::back()); + + color.add_data4f(0.5, 0.5, 1.0, 1.0); + color.add_data4f(0.5, 0.5, 1.0, 1.0); + color.add_data4f(0.5, 0.5, 1.0, 1.0); + + texcoord.add_data2f(0.0, 0.0); + texcoord.add_data2f(1.0, 0.0); + texcoord.add_data2f(0.0, 1.0); + + PT(GeomTriangles) tri = new GeomTriangles(Geom::UH_static); + tri->add_consecutive_vertices(0, 3); + tri->close_primitive(); + + PT(Geom) geom = new Geom; + geom->set_vertex_data(vdata); + geom->add_primitive(tri); + + geomnode->add_geom(geom, state); return parent.attach_new_node(geomnode); } @@ -1058,59 +1013,31 @@ load_image_as_model(const Filename &filename) { card_node->set_attrib(TransparencyAttrib::make(TransparencyAttrib::M_alpha)); } - if (use_qpgeom) { - PT(qpGeomVertexData) vdata = new qpGeomVertexData - (string(), qpGeomVertexFormat::get_v3t2(), - qpGeom::UH_static); - qpGeomVertexWriter vertex(vdata, InternalName::get_vertex()); - qpGeomVertexWriter texcoord(vdata, InternalName::get_texcoord()); - - vertex.add_data3f(Vertexf::rfu(left, 0.02f, top)); - vertex.add_data3f(Vertexf::rfu(left, 0.02f, bottom)); - vertex.add_data3f(Vertexf::rfu(right, 0.02f, top)); - vertex.add_data3f(Vertexf::rfu(right, 0.02f, bottom)); - - texcoord.add_data2f(0.0f, 1.0f); - texcoord.add_data2f(0.0f, 0.0f); - texcoord.add_data2f(1.0f, 1.0f); - texcoord.add_data2f(1.0f, 0.0f); - - PT(qpGeomTristrips) strip = new qpGeomTristrips(qpGeom::UH_static); - strip->add_consecutive_vertices(0, 4); - strip->close_primitive(); - - PT(qpGeom) geom = new qpGeom; - geom->set_vertex_data(vdata); - geom->add_primitive(strip); - - card_node->add_geom(geom); - - } else { - GeomTristrip *geom = new GeomTristrip; - PTA_int lengths=PTA_int::empty_array(0); - lengths.push_back(4); - - PTA_Vertexf verts; - verts.push_back(Vertexf::rfu(left, 0.02f, top)); - verts.push_back(Vertexf::rfu(left, 0.02f, bottom)); - verts.push_back(Vertexf::rfu(right, 0.02f, top)); - verts.push_back(Vertexf::rfu(right, 0.02f, bottom)); - - geom->set_num_prims(1); - geom->set_lengths(lengths); - - geom->set_coords(verts); - - PTA_TexCoordf uvs; - uvs.push_back(TexCoordf(0.0f, 1.0f)); - uvs.push_back(TexCoordf(0.0f, 0.0f)); - uvs.push_back(TexCoordf(1.0f, 1.0f)); - uvs.push_back(TexCoordf(1.0f, 0.0f)); - - geom->set_texcoords(uvs, G_PER_VERTEX); - - card_node->add_geom(geom); - } + PT(GeomVertexData) vdata = new GeomVertexData + ("card", GeomVertexFormat::get_v3t2(), + Geom::UH_static); + GeomVertexWriter vertex(vdata, InternalName::get_vertex()); + GeomVertexWriter texcoord(vdata, InternalName::get_texcoord()); + + vertex.add_data3f(Vertexf::rfu(left, 0.02f, top)); + vertex.add_data3f(Vertexf::rfu(left, 0.02f, bottom)); + vertex.add_data3f(Vertexf::rfu(right, 0.02f, top)); + vertex.add_data3f(Vertexf::rfu(right, 0.02f, bottom)); + + texcoord.add_data2f(0.0f, 1.0f); + texcoord.add_data2f(0.0f, 0.0f); + texcoord.add_data2f(1.0f, 1.0f); + texcoord.add_data2f(1.0f, 0.0f); + + PT(GeomTristrips) strip = new GeomTristrips(Geom::UH_static); + strip->add_consecutive_vertices(0, 4); + strip->close_primitive(); + + PT(Geom) geom = new Geom; + geom->set_vertex_data(vdata); + geom->add_primitive(strip); + + card_node->add_geom(geom); return card_node.p(); } diff --git a/panda/src/glstuff/glGeomContext_src.h b/panda/src/glstuff/glGeomContext_src.h index bde71ab238..b7c63ce8f3 100644 --- a/panda/src/glstuff/glGeomContext_src.h +++ b/panda/src/glstuff/glGeomContext_src.h @@ -18,8 +18,8 @@ #include "pandabase.h" #include "geomContext.h" -#include "qpgeomMunger.h" -#include "qpgeomVertexData.h" +#include "geomMunger.h" +#include "geomVertexData.h" #include "pointerTo.h" #include "pmap.h" diff --git a/panda/src/glstuff/glGeomMunger_src.cxx b/panda/src/glstuff/glGeomMunger_src.cxx index 54bf7ea076..db7b8e2b04 100644 --- a/panda/src/glstuff/glGeomMunger_src.cxx +++ b/panda/src/glstuff/glGeomMunger_src.cxx @@ -18,7 +18,7 @@ #include "dcast.h" -qpGeomMunger *CLP(GeomMunger)::_deleted_chain = NULL; +GeomMunger *CLP(GeomMunger)::_deleted_chain = NULL; TypeHandle CLP(GeomMunger)::_type_handle; //////////////////////////////////////////////////////////////////// @@ -43,20 +43,20 @@ CLP(GeomMunger):: // Description: Given a source GeomVertexFormat, converts it if // necessary to the appropriate format for rendering. //////////////////////////////////////////////////////////////////// -CPT(qpGeomVertexFormat) CLP(GeomMunger):: -munge_format_impl(const qpGeomVertexFormat *orig, - const qpGeomVertexAnimationSpec &animation) { - PT(qpGeomVertexFormat) new_format = new qpGeomVertexFormat(*orig); +CPT(GeomVertexFormat) CLP(GeomMunger):: +munge_format_impl(const GeomVertexFormat *orig, + const GeomVertexAnimationSpec &animation) { + PT(GeomVertexFormat) new_format = new GeomVertexFormat(*orig); new_format->set_animation(animation); - const qpGeomVertexColumn *color_type = orig->get_color_column(); - if (color_type != (qpGeomVertexColumn *)NULL && + const GeomVertexColumn *color_type = orig->get_color_column(); + if (color_type != (GeomVertexColumn *)NULL && color_type->get_numeric_type() == NT_packed_dabc) { // We need to convert the color format; OpenGL doesn't support the // byte order of DirectX's packed ARGB format. int color_array = orig->get_array_with(InternalName::get_color()); - PT(qpGeomVertexArrayFormat) new_array_format = new_format->modify_array(color_array); + PT(GeomVertexArrayFormat) new_array_format = new_format->modify_array(color_array); // Replace the existing color format with the new format. new_array_format->add_column @@ -77,7 +77,7 @@ munge_format_impl(const qpGeomVertexFormat *orig, new_format->remove_column(InternalName::get_transform_blend()); if (animation.get_num_transforms() > 1) { - PT(qpGeomVertexArrayFormat) new_array_format = new qpGeomVertexArrayFormat; + PT(GeomVertexArrayFormat) new_array_format = new GeomVertexArrayFormat; new_array_format->add_column (InternalName::get_transform_weight(), animation.get_num_transforms() - 1, NT_float32, C_other); @@ -103,11 +103,11 @@ munge_format_impl(const qpGeomVertexFormat *orig, /* if (true) { // Split out the interleaved array into n parallel arrays. - CPT(qpGeomVertexFormat) format = new_format; - new_format = new qpGeomVertexFormat; + CPT(GeomVertexFormat) format = new_format; + new_format = new GeomVertexFormat; for (int i = 0; i < format->get_num_columns(); i++) { - const qpGeomVertexColumn *column = format->get_column(i); - PT(qpGeomVertexArrayFormat) new_array_format = new qpGeomVertexArrayFormat; + const GeomVertexColumn *column = format->get_column(i); + PT(GeomVertexArrayFormat) new_array_format = new GeomVertexArrayFormat; new_array_format->add_column(column->get_name(), column->get_num_components(), column->get_numeric_type()); new_format->add_array(new_array_format); @@ -115,7 +115,7 @@ munge_format_impl(const qpGeomVertexFormat *orig, } */ - return qpGeomVertexFormat::register_format(new_format); + return GeomVertexFormat::register_format(new_format); } //////////////////////////////////////////////////////////////////// @@ -127,7 +127,7 @@ munge_format_impl(const qpGeomVertexFormat *orig, // different type. //////////////////////////////////////////////////////////////////// int CLP(GeomMunger):: -compare_to_impl(const qpGeomMunger *other) const { +compare_to_impl(const GeomMunger *other) const { const CLP(GeomMunger) *om = DCAST(CLP(GeomMunger), other); if (_texture != om->_texture) { return _texture < om->_texture ? -1 : 1; @@ -148,7 +148,7 @@ compare_to_impl(const qpGeomMunger *other) const { // different type. //////////////////////////////////////////////////////////////////// int CLP(GeomMunger):: -geom_compare_to_impl(const qpGeomMunger *other) const { +geom_compare_to_impl(const GeomMunger *other) const { // We don't consider _texture and _tex_gen for this purpose; they // affect only whether the GL display list should be regenerated or // not, and don't require reconverting the vertices. diff --git a/panda/src/glstuff/glGeomMunger_src.h b/panda/src/glstuff/glGeomMunger_src.h index d51b6015f5..175686f245 100644 --- a/panda/src/glstuff/glGeomMunger_src.h +++ b/panda/src/glstuff/glGeomMunger_src.h @@ -37,10 +37,10 @@ public: virtual ~CLP(GeomMunger)(); protected: - virtual CPT(qpGeomVertexFormat) munge_format_impl(const qpGeomVertexFormat *orig, - const qpGeomVertexAnimationSpec &animation); - virtual int compare_to_impl(const qpGeomMunger *other) const; - virtual int geom_compare_to_impl(const qpGeomMunger *other) const; + virtual CPT(GeomVertexFormat) munge_format_impl(const GeomVertexFormat *orig, + const GeomVertexAnimationSpec &animation); + virtual int compare_to_impl(const GeomMunger *other) const; + virtual int geom_compare_to_impl(const GeomMunger *other) const; public: INLINE void *operator new(size_t size); @@ -52,7 +52,7 @@ private: typedef pset GeomContexts; GeomContexts _geom_contexts; - static qpGeomMunger *_deleted_chain; + static GeomMunger *_deleted_chain; public: static TypeHandle get_class_type() { diff --git a/panda/src/glstuff/glGraphicsStateGuardian_src.I b/panda/src/glstuff/glGraphicsStateGuardian_src.I index 26cd017c5f..d8a5529b60 100644 --- a/panda/src/glstuff/glGraphicsStateGuardian_src.I +++ b/panda/src/glstuff/glGraphicsStateGuardian_src.I @@ -485,44 +485,3 @@ INLINE GLenum CLP(GraphicsStateGuardian):: get_clip_plane_id(int index) const { return GL_CLIP_PLANE0 + index; } - -//////////////////////////////////////////////////////////////////// -// Function: CLP(GraphicsStateGuardian)::issue_scene_graph_color -// Access: Public -// Description: Checks whether the scene graph color needs to be -// issued, and sends the appropriate glColor command if -// it does. -//////////////////////////////////////////////////////////////////// -INLINE void CLP(GraphicsStateGuardian):: -issue_scene_graph_color() { - if (_scene_graph_color_stale) { - issue_scaled_color(_scene_graph_color); - _scene_graph_color_stale = false; - } -} - -//////////////////////////////////////////////////////////////////// -// Function: CLP(GraphicsStateGuardian)::issue_flat_shading -// Access: Public -// Description: Checks whether the indicated geom requires flat -// shading or smooth shading, and sets the appropriate -// mode. -//////////////////////////////////////////////////////////////////// -INLINE void CLP(GraphicsStateGuardian):: -issue_flat_shading(Geom *geom) { - if ((geom->get_binding(G_COLOR) == G_PER_VERTEX && wants_colors()) || - (geom->get_binding(G_NORMAL) == G_PER_VERTEX && wants_normals())) { - // With per-vertex colors or normals, we need smooth shading. - if (_flat_shade_model) { - modify_state(get_smooth_state()); - } - } else if ((geom->get_binding(G_COLOR) == G_PER_COMPONENT && wants_colors()) || - (geom->get_binding(G_NORMAL) == G_PER_COMPONENT && wants_normals())) { - // With per-component colors or normals, we need flat shading. - if (!_flat_shade_model) { - modify_state(get_flat_state()); - } - } else { - // Otherwise, it's a uniform-colored primitive; we can take either one. - } -} diff --git a/panda/src/glstuff/glGraphicsStateGuardian_src.cxx b/panda/src/glstuff/glGraphicsStateGuardian_src.cxx index f12ea97fb2..bcd6459673 100644 --- a/panda/src/glstuff/glGraphicsStateGuardian_src.cxx +++ b/panda/src/glstuff/glGraphicsStateGuardian_src.cxx @@ -20,15 +20,14 @@ #include "displayRegion.h" #include "renderBuffer.h" #include "geom.h" -#include "geomIssuer.h" -#include "qpgeomVertexData.h" -#include "qpgeomTriangles.h" -#include "qpgeomTristrips.h" -#include "qpgeomTrifans.h" -#include "qpgeomLines.h" -#include "qpgeomLinestrips.h" -#include "qpgeomPoints.h" -#include "qpgeomVertexReader.h" +#include "geomVertexData.h" +#include "geomTriangles.h" +#include "geomTristrips.h" +#include "geomTrifans.h" +#include "geomLines.h" +#include "geomLinestrips.h" +#include "geomPoints.h" +#include "geomVertexReader.h" #include "graphicsWindow.h" #include "lens.h" #include "perspectiveLens.h" @@ -77,62 +76,6 @@ PStatCollector CLP(GraphicsStateGuardian)::_load_display_list_pcollector("Draw:T PStatCollector CLP(GraphicsStateGuardian)::_primitive_batches_display_list_pcollector("Primitive batches:Display lists"); PStatCollector CLP(GraphicsStateGuardian)::_vertices_display_list_pcollector("Vertices:Display lists"); -static void -issue_vertex_gl(const Geom *geom, Geom::VertexIterator &viterator, - GraphicsStateGuardianBase *) { - const Vertexf &vertex = geom->get_next_vertex(viterator); - // GLCAT.spam() << "Issuing vertex " << vertex << "\n"; - GLP(Vertex3fv)(vertex.get_data()); -} - -static void -issue_normal_gl(const Geom *geom, Geom::NormalIterator &niterator, - GraphicsStateGuardianBase *) { - const Normalf &normal = geom->get_next_normal(niterator); - // GLCAT.spam() << "Issuing normal " << normal << "\n"; - GLP(Normal3fv)(normal.get_data()); -} - -static void -issue_texcoord_single_gl(const Geom *geom, - Geom::MultiTexCoordIterator &tciterator, - GraphicsStateGuardianBase *) { - const TexCoordf &texcoord = geom->get_next_multitexcoord(tciterator, 0); - // GLCAT.spam() << "Issuing texcoord " << texcoord << " on unit 0 (single-texture mode)\n"; - GLP(TexCoord2fv)(texcoord.get_data()); -} - -static void -issue_texcoord_multi_gl(const Geom *geom, - Geom::MultiTexCoordIterator &tciterator, - GraphicsStateGuardianBase *gsgbase) { - // We avoid DCAST here because we don't really need it, and it's - // nice not to have to pay that overhead on each vertex. - CLP(GraphicsStateGuardian) *gsg = (CLP(GraphicsStateGuardian) *)gsgbase; - for (int i = 0; i < tciterator._num_stages; i++) { - const TexCoordf &texcoord = geom->get_next_multitexcoord(tciterator, i); - int stage_index = tciterator._stage_index[i]; - // GLCAT.spam() << "Issuing texcoord " << texcoord << " on unit " << stage_index << "\n"; - gsg->_glMultiTexCoord2fv(GL_TEXTURE0 + stage_index, texcoord.get_data()); - } -} - -static void -issue_color_gl(const Geom *geom, Geom::ColorIterator &citerator, - GraphicsStateGuardianBase *) { - const Colorf &color = geom->get_next_color(citerator); - // GLCAT.spam() << "Issuing color " << color << "\n"; - GLP(Color4fv)(color.get_data()); -} - -static void -issue_scaled_color_gl(const Geom *geom, Geom::ColorIterator &citerator, - GraphicsStateGuardianBase *gsg) { - const CLP(GraphicsStateGuardian) *glgsg = DCAST(CLP(GraphicsStateGuardian), gsg); - const Colorf &color = geom->get_next_color(citerator); - glgsg->issue_scaled_color(color); -} - // The following noop functions are assigned to the corresponding // glext function pointers in the class, in case the functions are not // defined by the GL, just so it will always be safe to call the @@ -369,10 +312,10 @@ reset() { report_extensions(); _supported_geom_rendering = - qpGeom::GR_indexed_point | - qpGeom::GR_point | qpGeom::GR_point_uniform_size | - qpGeom::GR_triangle_strip | qpGeom::GR_triangle_fan | - qpGeom::GR_flat_last_vertex; + Geom::GR_indexed_point | + Geom::GR_point | Geom::GR_point_uniform_size | + Geom::GR_triangle_strip | Geom::GR_triangle_fan | + Geom::GR_flat_last_vertex; _supports_point_parameters = false; @@ -394,7 +337,7 @@ reset() { } } if (_supports_point_parameters) { - _supported_geom_rendering |= qpGeom::GR_point_perspective; + _supported_geom_rendering |= Geom::GR_point_perspective; } else { _glPointParameterfv = null_glPointParameterfv; } @@ -405,7 +348,7 @@ reset() { // texture transforms on the generated texture coordinates. How // inconsistent. Because of this, we don't advertise // GR_point_sprite_tex_matrix. - _supported_geom_rendering |= qpGeom::GR_point_sprite; + _supported_geom_rendering |= Geom::GR_point_sprite; } _supports_vertex_blend = has_extension("GL_ARB_vertex_blend"); @@ -1115,1074 +1058,6 @@ end_frame() { report_my_gl_errors(); } -//////////////////////////////////////////////////////////////////// -// Function: GLGraphicsStateGuardian::draw_point -// Access: Public, Virtual -// Description: -//////////////////////////////////////////////////////////////////// -void CLP(GraphicsStateGuardian):: -draw_point(GeomPoint *geom, GeomContext *gc) { -#ifdef GSG_VERBOSE - GLCAT.spam() << "draw_point()" << endl; -#endif - - setup_antialias_point(); - - if (draw_display_list(gc)) { - return; - } - - -#ifdef DO_PSTATS - PStatTimer timer(_draw_primitive_pcollector); - _vertices_other_pcollector.add_level(geom->get_num_vertices()); -#endif - - issue_scene_graph_color(); - - int nprims = geom->get_num_prims(); - Geom::VertexIterator vi = geom->make_vertex_iterator(); - Geom::NormalIterator ni = geom->make_normal_iterator(); - Geom::MultiTexCoordIterator ti; - geom->setup_multitexcoord_iterator(ti, _current_texture->get_on_stages(), - _current_tex_gen->get_no_texcoords()); - Geom::ColorIterator ci = geom->make_color_iterator(); - - GeomIssuer::IssueColor *issue_color; - - if (_color_blend_involves_color_scale || !_color_scale_enabled || - _color_scale_via_lighting) { - issue_color = issue_color_gl; - } else { - issue_color = issue_scaled_color_gl; - } - - GeomIssuer issuer(geom, this, - issue_vertex_gl, - issue_normal_gl, - issue_color, - issue_texcoord_single_gl, - issue_texcoord_multi_gl, - ti); - - // Draw overall - issuer.issue_color(G_OVERALL, ci); - issuer.issue_normal(G_OVERALL, ni); - - GLP(Begin)(GL_POINTS); - - for (int i = 0; i < nprims; i++) { - // Draw per primitive - issuer.issue_color(G_PER_PRIM, ci); - issuer.issue_normal(G_PER_PRIM, ni); - - // Draw per vertex, same thing. - issuer.issue_color(G_PER_VERTEX, ci); - issuer.issue_normal(G_PER_VERTEX, ni); - issuer.issue_texcoord(G_PER_VERTEX, ti); - issuer.issue_vertex(G_PER_VERTEX, vi); - } - - GLP(End)(); - report_my_gl_errors(); -} - -//////////////////////////////////////////////////////////////////// -// Function: GLGraphicsStateGuardian::draw_line -// Access: Public, Virtual -// Description: -//////////////////////////////////////////////////////////////////// -void CLP(GraphicsStateGuardian):: -draw_line(GeomLine *geom, GeomContext *gc) { -#ifdef GSG_VERBOSE - GLCAT.spam() << "draw_line()" << endl; -#endif - - setup_antialias_line(); - - if (draw_display_list(gc)) { - return; - } - -#ifdef DO_PSTATS - PStatTimer timer(_draw_primitive_pcollector); - _vertices_other_pcollector.add_level(geom->get_num_vertices()); -#endif - - issue_scene_graph_color(); - - int nprims = geom->get_num_prims(); - Geom::VertexIterator vi = geom->make_vertex_iterator(); - Geom::NormalIterator ni = geom->make_normal_iterator(); - Geom::MultiTexCoordIterator ti; - geom->setup_multitexcoord_iterator(ti, _current_texture->get_on_stages(), - _current_tex_gen->get_no_texcoords()); - Geom::ColorIterator ci = geom->make_color_iterator(); - - GeomIssuer::IssueColor *issue_color; - - if (_color_blend_involves_color_scale || !_color_scale_enabled || - _color_scale_via_lighting) { - issue_color = issue_color_gl; - } else { - issue_color = issue_scaled_color_gl; - } - - GeomIssuer issuer(geom, this, - issue_vertex_gl, - issue_normal_gl, - issue_color, - issue_texcoord_single_gl, - issue_texcoord_multi_gl, - ti); - - issue_flat_shading(geom); - - // Draw overall - issuer.issue_color(G_OVERALL, ci); - issuer.issue_normal(G_OVERALL, ni); - - GLP(Begin)(GL_LINES); - - for (int i = 0; i < nprims; i++) { - // Draw per primitive - issuer.issue_color(G_PER_PRIM, ci); - issuer.issue_normal(G_PER_PRIM, ni); - - for (int j = 0; j < 2; j++) { - // Draw per vertex - issuer.issue_color(G_PER_VERTEX, ci); - issuer.issue_normal(G_PER_VERTEX, ni); - issuer.issue_texcoord(G_PER_VERTEX, ti); - issuer.issue_vertex(G_PER_VERTEX, vi); - } - } - - GLP(End)(); - report_my_gl_errors(); -} - -//////////////////////////////////////////////////////////////////// -// Function: GLGraphicsStateGuardian::draw_linestrip -// Access: Public, Virtual -// Description: -//////////////////////////////////////////////////////////////////// -void CLP(GraphicsStateGuardian):: -draw_linestrip(GeomLinestrip *geom, GeomContext *gc) { -#ifdef GSG_VERBOSE - GLCAT.spam() << "draw_linestrip()" << endl; -#endif - - setup_antialias_line(); - - if (draw_display_list(gc)) { - return; - } - -#ifdef DO_PSTATS - // PStatTimer timer(_draw_primitive_pcollector); - // Using PStatTimer may cause a compiler crash. - _draw_primitive_pcollector.start(); - _vertices_other_pcollector.add_level(geom->get_num_vertices()); -#endif - - issue_scene_graph_color(); - - int nprims = geom->get_num_prims(); - const int *plen = geom->get_lengths(); - Geom::VertexIterator vi = geom->make_vertex_iterator(); - Geom::NormalIterator ni = geom->make_normal_iterator(); - Geom::MultiTexCoordIterator ti; - geom->setup_multitexcoord_iterator(ti, _current_texture->get_on_stages(), - _current_tex_gen->get_no_texcoords()); - Geom::ColorIterator ci = geom->make_color_iterator(); - - GeomIssuer::IssueColor *issue_color; - - if (_color_blend_involves_color_scale || !_color_scale_enabled || - _color_scale_via_lighting) { - issue_color = issue_color_gl; - } else { - issue_color = issue_scaled_color_gl; - } - - GeomIssuer issuer(geom, this, - issue_vertex_gl, - issue_normal_gl, - issue_color, - issue_texcoord_single_gl, - issue_texcoord_multi_gl, - ti); - - issue_flat_shading(geom); - - // Draw overall - issuer.issue_color(G_OVERALL, ci); - issuer.issue_normal(G_OVERALL, ni); - - for (int i = 0; i < nprims; i++) { - // Draw per primitive - issuer.issue_color(G_PER_PRIM, ci); - issuer.issue_normal(G_PER_PRIM, ni); - - int num_verts = *(plen++); - nassertv(num_verts >= 2); - - GLP(Begin)(GL_LINE_STRIP); - - // Per-component attributes for the first line segment? - issuer.issue_color(G_PER_COMPONENT, ci); - issuer.issue_normal(G_PER_COMPONENT, ni); - - // Draw the first 2 vertices - int v; - for (v = 0; v < 2; v++) { - issuer.issue_color(G_PER_VERTEX, ci); - issuer.issue_normal(G_PER_VERTEX, ni); - issuer.issue_texcoord(G_PER_VERTEX, ti); - issuer.issue_vertex(G_PER_VERTEX, vi); - } - - // Now draw each of the remaining vertices. Each vertex from - // this point on defines a new line segment. - for (v = 2; v < num_verts; v++) { - // Per-component attributes? - issuer.issue_color(G_PER_COMPONENT, ci); - issuer.issue_normal(G_PER_COMPONENT, ni); - - // Per-vertex attributes - issuer.issue_color(G_PER_VERTEX, ci); - issuer.issue_normal(G_PER_VERTEX, ni); - issuer.issue_texcoord(G_PER_VERTEX, ti); - issuer.issue_vertex(G_PER_VERTEX, vi); - } - GLP(End)(); - } - report_my_gl_errors(); - DO_PSTATS_STUFF(_draw_primitive_pcollector.stop()); -} - -//////////////////////////////////////////////////////////////////// -// Function: GLGraphicsStateGuardian::draw_sprite -// Access: Public, Virtual -// Description: CSN, 7/11/00 -//////////////////////////////////////////////////////////////////// - -// this class exists because an alpha sort is necessary for correct -// sprite rendering, and we can't simply sort the vertex arrays as -// each vertex may or may not have corresponding information in the -// x/y texel-world-ratio and rotation arrays. -class WrappedSprite { -public: - Vertexf _v; - Colorf _c; - float _x_ratio; - float _y_ratio; - float _theta; -}; - -// this struct exists because the STL can sort faster than i can. -struct draw_sprite_vertex_less { - INLINE bool operator ()(const WrappedSprite& v0, - const WrappedSprite& v1) const { - return v0._v[2] < v1._v[2]; } -}; - -void CLP(GraphicsStateGuardian):: -draw_sprite(GeomSprite *geom, GeomContext *) { - // this is a little bit of a mess, but it's ok. Here's the deal: - // we want to draw, and draw quickly, an arbitrarily large number - // of sprites all facing the screen. Performing the billboard math - // for ~1000 sprites is way too slow. Ideally, we want one - // matrix transformation that will handle everything, and this is - // just about what ends up happening. We're getting the front-facing - // effect by setting up a new frustum (of the same z-depth as the - // current one) that is very small in x and y. This way regularly - // rendered triangles that might not be EXACTLY facing the camera - // will certainly look close enough. Then, we transform to camera-space - // by hand and apply the inverse frustum to the transformed point. - // For some cracked out reason, this actually works. -#ifdef GSG_VERBOSE - GLCAT.spam() << "draw_sprite()" << endl; -#endif - - setup_antialias_polygon(); - - // get the array traversal set up. - int nprims = geom->get_num_prims(); - if (nprims==0) { - return; - } - -#ifdef DO_PSTATS - // PStatTimer timer(_draw_primitive_pcollector); - // Using PStatTimer may cause a compiler crash. - _draw_primitive_pcollector.start(); - _vertices_other_pcollector.add_level(geom->get_num_vertices()); -#endif - - Geom::VertexIterator vi = geom->make_vertex_iterator(); - Geom::ColorIterator ci = geom->make_color_iterator(); - - // need some interface so user can set 2d dimensions if no texture specified - float tex_x_size = 1.0f; - float tex_y_size = 1.0f; - - Texture *tex = geom->get_texture(); - if(tex != NULL) { - // set up the texture-rendering state - modify_state(RenderState::make(TextureAttrib::make(tex))); - tex_x_size = tex->get_x_size(); - tex_y_size = tex->get_y_size(); - } - - // save the modelview matrix - const LMatrix4f &modelview_mat = _internal_transform->get_mat(); - - // We don't need to mess with the aspect ratio, since we are now - // using the default projection matrix, which has the right aspect - // ratio built in. - - // load up our own matrices - GLP(MatrixMode)(GL_MODELVIEW); - GLP(LoadIdentity)(); - - // precomputation stuff - float tex_left = geom->get_ll_uv()[0]; - float tex_right = geom->get_ur_uv()[0]; - float tex_bottom = geom->get_ll_uv()[1]; - float tex_top = geom->get_ur_uv()[1]; - - float half_width = 0.5f * tex_x_size * fabs(tex_right - tex_left); - float half_height = 0.5f * tex_y_size * fabs(tex_top - tex_bottom); - float scaled_width = 0.0f; - float scaled_height = 0.0f; - - // the user can override alpha sorting if they want - bool alpha = false; - - if (!geom->get_alpha_disable()) { - // figure out if alpha's enabled (if not, no reason to sort) - const TransparencyAttrib *trans = _state->get_transparency(); - if (trans != (const TransparencyAttrib *)NULL) { - alpha = (trans->get_mode() != TransparencyAttrib::M_none); - } - } - - // sort container and iterator - pvector< WrappedSprite > cameraspace_vector; - pvector< WrappedSprite >::iterator vec_iter; - - // inner loop vars - int i; - Vertexf source_vert, cameraspace_vert; - float *x_walk = (float *)NULL; - float *y_walk = (float *)NULL; - float *theta_walk = (float *)NULL; - float theta = 0.0f; - - nassertv(geom->get_x_bind_type() != G_PER_VERTEX); - nassertv(geom->get_y_bind_type() != G_PER_VERTEX); - - // set up the non-built-in bindings - bool x_overall = (geom->get_x_bind_type() == G_OVERALL); - bool y_overall = (geom->get_y_bind_type() == G_OVERALL); - bool theta_overall = (geom->get_theta_bind_type() == G_OVERALL); - bool color_overall = (geom->get_binding(G_COLOR) == G_OVERALL); - bool theta_on = !(geom->get_theta_bind_type() == G_OFF); - - // x direction - if (x_overall) - scaled_width = geom->_x_texel_ratio[0] * half_width; - else { - nassertv(((int)geom->_x_texel_ratio.size() >= geom->get_num_prims())); - x_walk = &geom->_x_texel_ratio[0]; - } - - // y direction - if (y_overall) - scaled_height = geom->_y_texel_ratio[0] * half_height; - else { - nassertv(((int)geom->_y_texel_ratio.size() >= geom->get_num_prims())); - y_walk = &geom->_y_texel_ratio[0]; - } - - // theta - if (theta_on) { - if (theta_overall) - theta = geom->_theta[0]; - else { - nassertv(((int)geom->_theta.size() >= geom->get_num_prims())); - theta_walk = &geom->_theta[0]; - } - } - - ///////////////////////////////////////////////////////////////////// - // INNER LOOP PART 1 STARTS HERE - // Here we transform each point to cameraspace and fill our sort - // vector with the final geometric information. - ///////////////////////////////////////////////////////////////////// - - cameraspace_vector.reserve(nprims); //pre-alloc space for nprims - - // the state is set, start running the prims - for (i = 0; i < nprims; i++) { - WrappedSprite ws; - - source_vert = geom->get_next_vertex(vi); - - // this mult converts to y-up cameraspace. - cameraspace_vert = source_vert * modelview_mat; - // build the final object that will go into the vector. - ws._v.set(cameraspace_vert[0],cameraspace_vert[1],cameraspace_vert[2]); - - if (!color_overall) - ws._c = geom->get_next_color(ci); - if (!x_overall) - ws._x_ratio = *x_walk++; - if (!y_overall) - ws._y_ratio = *y_walk++; - if (theta_on) { - if (!theta_overall) - ws._theta = *theta_walk++; - } - - cameraspace_vector.push_back(ws); - } - - // now the verts are properly sorted by alpha (if necessary). Of course, - // the sort is only local, not scene-global, so if you look closely you'll - // notice that alphas may be screwy. It's ok though, because this is fast. - // if you want accuracy, use billboards and take the speed hit. - if (alpha) { - sort(cameraspace_vector.begin(), cameraspace_vector.end(), - draw_sprite_vertex_less()); - - if (_dithering_enabled) - GLP(Disable)(GL_DITHER); - } - - Vertexf ul, ur, ll, lr; - - if (color_overall) - GLP(Color4fv)(geom->get_next_color(ci).get_data()); - - //////////////////////////////////////////////////////////////////////////// - // INNER LOOP PART 2 STARTS HERE - // Now we run through the cameraspace vector and compute the geometry for each - // tristrip. This includes scaling as per the ratio arrays, as well as - // rotating in the z. - //////////////////////////////////////////////////////////////////////////// - - vec_iter = cameraspace_vector.begin(); - for (; vec_iter != cameraspace_vector.end(); vec_iter++) { - WrappedSprite& cur_image = *vec_iter; - - // if not G_OVERALL, calculate the scale factors - if (x_overall == false) - scaled_width = cur_image._x_ratio * half_width; - - if (y_overall == false) - scaled_height = cur_image._y_ratio * half_height; - - // if not G_OVERALL, do some trig for this z rotate - if (theta_on) { - if (theta_overall == false) - theta = cur_image._theta; - - // create the rotated points - LMatrix3f xform_mat = LMatrix3f::rotate_mat(theta) * LMatrix3f::scale_mat(scaled_width, scaled_height); - - ur = (LVector3f( 1, 1, 0) * xform_mat) + cur_image._v; - ul = (LVector3f(-1, 1, 0) * xform_mat) + cur_image._v; - lr = (LVector3f( 1, -1, 0) * xform_mat) + cur_image._v; - ll = (LVector3f(-1, -1, 0) * xform_mat) + cur_image._v; - } - else { - // create the normal points - ur.set(scaled_width, scaled_height, 0); - ul.set(-scaled_width, scaled_height, 0); - lr.set(scaled_width, -scaled_height, 0); - ll.set(-scaled_width, -scaled_height, 0); - - ur += cur_image._v; - ul += cur_image._v; - lr += cur_image._v; - ll += cur_image._v; - } - - // set the color - if (color_overall == false) - GLP(Color4fv)(cur_image._c.get_data()); - - // draw each one as a 2-element tri-strip - GLP(Begin)(GL_TRIANGLE_STRIP); - GLP(Normal3f)(0.0f, 0.0f, 1.0f); - GLP(TexCoord2f)(tex_left, tex_bottom); GLP(Vertex3fv)(ll.get_data()); - GLP(TexCoord2f)(tex_right, tex_bottom); GLP(Vertex3fv)(lr.get_data()); - GLP(TexCoord2f)(tex_left, tex_top); GLP(Vertex3fv)(ul.get_data()); - GLP(TexCoord2f)(tex_right, tex_top); GLP(Vertex3fv)(ur.get_data()); - GLP(End)(); - } - - // restore the matrices - GLP(LoadMatrixf)(modelview_mat.get_data()); - - if(alpha && _dithering_enabled) - GLP(Enable)(GL_DITHER); - - report_my_gl_errors(); - DO_PSTATS_STUFF(_draw_primitive_pcollector.stop()); -} - - -//////////////////////////////////////////////////////////////////// -// Function: GLGraphicsStateGuardian::draw_polygon -// Access: Public, Virtual -// Description: -//////////////////////////////////////////////////////////////////// -void CLP(GraphicsStateGuardian):: -draw_polygon(GeomPolygon *geom, GeomContext *gc) { -#ifdef GSG_VERBOSE - GLCAT.spam() << "draw_polygon()" << endl; -#endif - - setup_antialias_polygon(); - - if (draw_display_list(gc)) { - return; - } - -#ifdef DO_PSTATS - // PStatTimer timer(_draw_primitive_pcollector); - // Using PStatTimer may cause a compiler crash. - _draw_primitive_pcollector.start(); - _vertices_other_pcollector.add_level(geom->get_num_vertices()); -#endif - - issue_scene_graph_color(); - - int nprims = geom->get_num_prims(); - const int *plen = geom->get_lengths(); - Geom::VertexIterator vi = geom->make_vertex_iterator(); - Geom::NormalIterator ni = geom->make_normal_iterator(); - Geom::MultiTexCoordIterator ti; - geom->setup_multitexcoord_iterator(ti, _current_texture->get_on_stages(), - _current_tex_gen->get_no_texcoords()); - Geom::ColorIterator ci = geom->make_color_iterator(); - - GeomIssuer::IssueColor *issue_color; - - if (_color_blend_involves_color_scale || !_color_scale_enabled || - _color_scale_via_lighting) { - issue_color = issue_color_gl; - } else { - issue_color = issue_scaled_color_gl; - } - - GeomIssuer issuer(geom, this, - issue_vertex_gl, - issue_normal_gl, - issue_color, - issue_texcoord_single_gl, - issue_texcoord_multi_gl, - ti); - - issue_flat_shading(geom); - - // Draw overall - issuer.issue_color(G_OVERALL, ci); - issuer.issue_normal(G_OVERALL, ni); - - for (int i = 0; i < nprims; i++) { - // Draw per primitive - issuer.issue_color(G_PER_PRIM, ci); - issuer.issue_normal(G_PER_PRIM, ni); - - int num_verts = *(plen++); - nassertv(num_verts >= 3); - - GLP(Begin)(GL_POLYGON); - - // Draw the vertices. - int v; - for (v = 0; v < num_verts; v++) { - // Per-vertex attributes. - issuer.issue_color(G_PER_VERTEX, ci); - issuer.issue_normal(G_PER_VERTEX, ni); - issuer.issue_texcoord(G_PER_VERTEX, ti); - issuer.issue_vertex(G_PER_VERTEX, vi); - } - GLP(End)(); - } - report_my_gl_errors(); - DO_PSTATS_STUFF(_draw_primitive_pcollector.stop()); -} - -//////////////////////////////////////////////////////////////////// -// Function: GLGraphicsStateGuardian::draw_tri -// Access: Public, Virtual -// Description: -//////////////////////////////////////////////////////////////////// -void CLP(GraphicsStateGuardian):: -draw_tri(GeomTri *geom, GeomContext *gc) { -#ifdef GSG_VERBOSE - GLCAT.spam() << "draw_tri()" << endl; -#endif - - setup_antialias_polygon(); - - if (draw_display_list(gc)) { - return; - } - -#ifdef DO_PSTATS - // PStatTimer timer(_draw_primitive_pcollector); - // Using PStatTimer may cause a compiler crash. - _draw_primitive_pcollector.start(); - _vertices_tri_pcollector.add_level(geom->get_num_vertices()); -#endif - - issue_scene_graph_color(); - - int nprims = geom->get_num_prims(); - Geom::VertexIterator vi = geom->make_vertex_iterator(); - Geom::NormalIterator ni = geom->make_normal_iterator(); - Geom::MultiTexCoordIterator ti; - geom->setup_multitexcoord_iterator(ti, _current_texture->get_on_stages(), - _current_tex_gen->get_no_texcoords()); - Geom::ColorIterator ci = geom->make_color_iterator(); - - GeomIssuer::IssueColor *issue_color; - - if (_color_blend_involves_color_scale || !_color_scale_enabled || - _color_scale_via_lighting) { - issue_color = issue_color_gl; - } else { - issue_color = issue_scaled_color_gl; - } - - GeomIssuer issuer(geom, this, - issue_vertex_gl, - issue_normal_gl, - issue_color, - issue_texcoord_single_gl, - issue_texcoord_multi_gl, - ti); - - issue_flat_shading(geom); - - // Draw overall - issuer.issue_color(G_OVERALL, ci); - issuer.issue_normal(G_OVERALL, ni); - - GLP(Begin)(GL_TRIANGLES); - - for (int i = 0; i < nprims; i++) { - // Draw per primitive - issuer.issue_color(G_PER_PRIM, ci); - issuer.issue_normal(G_PER_PRIM, ni); - - for (int j = 0; j < 3; j++) { - // Draw per vertex - issuer.issue_color(G_PER_VERTEX, ci); - issuer.issue_normal(G_PER_VERTEX, ni); - issuer.issue_texcoord(G_PER_VERTEX, ti); - issuer.issue_vertex(G_PER_VERTEX, vi); - } - } - - GLP(End)(); - report_my_gl_errors(); -#ifdef DO_PSTATS - _draw_primitive_pcollector.stop(); -#endif -} - -//////////////////////////////////////////////////////////////////// -// Function: GLGraphicsStateGuardian::draw_quad -// Access: Public, Virtual -// Description: -//////////////////////////////////////////////////////////////////// -void CLP(GraphicsStateGuardian):: -draw_quad(GeomQuad *geom, GeomContext *gc) { -#ifdef GSG_VERBOSE - GLCAT.spam() << "draw_quad()" << endl; -#endif - - setup_antialias_polygon(); - - if (draw_display_list(gc)) { - return; - } - -#ifdef DO_PSTATS - // PStatTimer timer(_draw_primitive_pcollector); - // Using PStatTimer may cause a compiler crash. - _draw_primitive_pcollector.start(); - _vertices_other_pcollector.add_level(geom->get_num_vertices()); -#endif - - issue_scene_graph_color(); - - int nprims = geom->get_num_prims(); - Geom::VertexIterator vi = geom->make_vertex_iterator(); - Geom::NormalIterator ni = geom->make_normal_iterator(); - Geom::MultiTexCoordIterator ti; - geom->setup_multitexcoord_iterator(ti, _current_texture->get_on_stages(), - _current_tex_gen->get_no_texcoords()); - Geom::ColorIterator ci = geom->make_color_iterator(); - - GeomIssuer::IssueColor *issue_color; - - if (_color_blend_involves_color_scale || !_color_scale_enabled || - _color_scale_via_lighting) { - issue_color = issue_color_gl; - } else { - issue_color = issue_scaled_color_gl; - } - - GeomIssuer issuer(geom, this, - issue_vertex_gl, - issue_normal_gl, - issue_color, - issue_texcoord_single_gl, - issue_texcoord_multi_gl, - ti); - - issue_flat_shading(geom); - - // Draw overall - issuer.issue_color(G_OVERALL, ci); - issuer.issue_normal(G_OVERALL, ni); - - GLP(Begin)(GL_QUADS); - - for (int i = 0; i < nprims; i++) { - // Draw per primitive - issuer.issue_color(G_PER_PRIM, ci); - issuer.issue_normal(G_PER_PRIM, ni); - - for (int j = 0; j < 4; j++) { - // Draw per vertex - issuer.issue_color(G_PER_VERTEX, ci); - issuer.issue_normal(G_PER_VERTEX, ni); - issuer.issue_texcoord(G_PER_VERTEX, ti); - issuer.issue_vertex(G_PER_VERTEX, vi); - } - } - - GLP(End)(); - report_my_gl_errors(); - DO_PSTATS_STUFF(_draw_primitive_pcollector.stop()); -} - -//////////////////////////////////////////////////////////////////// -// Function: GLGraphicsStateGuardian::draw_tristrip -// Access: Public, Virtual -// Description: -//////////////////////////////////////////////////////////////////// -void CLP(GraphicsStateGuardian):: -draw_tristrip(GeomTristrip *geom, GeomContext *gc) { - -#ifdef GSG_VERBOSE - GLCAT.spam() << "draw_tristrip()" << endl; -#endif - - setup_antialias_polygon(); - - if (draw_display_list(gc)) { - return; - } - -#ifdef DO_PSTATS - // PStatTimer timer(_draw_primitive_pcollector); - // Using PStatTimer may cause a compiler crash. - _draw_primitive_pcollector.start(); - if (geom->get_coords_index().is_null()) { - _vertices_tristrip_pcollector.add_level(geom->get_num_vertices()); - } else { - _vertices_indexed_tristrip_pcollector.add_level(geom->get_num_vertices()); - } -#endif - - issue_scene_graph_color(); - - int nprims = geom->get_num_prims(); - const int *plen = geom->get_lengths(); - Geom::VertexIterator vi = geom->make_vertex_iterator(); - Geom::NormalIterator ni = geom->make_normal_iterator(); - Geom::MultiTexCoordIterator ti; - geom->setup_multitexcoord_iterator(ti, _current_texture->get_on_stages(), - _current_tex_gen->get_no_texcoords()); - Geom::ColorIterator ci = geom->make_color_iterator(); - - GeomIssuer::IssueColor *issue_color; - - if (_color_blend_involves_color_scale || !_color_scale_enabled || - _color_scale_via_lighting) { - issue_color = issue_color_gl; - } else { - issue_color = issue_scaled_color_gl; - } - - GeomIssuer issuer(geom, this, - issue_vertex_gl, - issue_normal_gl, - issue_color, - issue_texcoord_single_gl, - issue_texcoord_multi_gl, - ti); - - issue_flat_shading(geom); - - // Draw overall - issuer.issue_color(G_OVERALL, ci); - issuer.issue_normal(G_OVERALL, ni); - - for (int i = 0; i < nprims; i++) { - // Draw per primitive - issuer.issue_color(G_PER_PRIM, ci); - issuer.issue_normal(G_PER_PRIM, ni); - - int num_verts = *(plen++); - nassertv(num_verts >= 3); - - GLP(Begin)(GL_TRIANGLE_STRIP); - - // Per-component attributes for the first triangle? - issuer.issue_color(G_PER_COMPONENT, ci); - issuer.issue_normal(G_PER_COMPONENT, ni); - - // Draw the first three vertices. - int v; - for (v = 0; v < 3; v++) { - issuer.issue_color(G_PER_VERTEX, ci); - issuer.issue_normal(G_PER_VERTEX, ni); - issuer.issue_texcoord(G_PER_VERTEX, ti); - issuer.issue_vertex(G_PER_VERTEX, vi); - } - - // Now draw each of the remaining vertices. Each vertex from - // this point on defines a new triangle. - for (v = 3; v < num_verts; v++) { - // Per-component attributes? - issuer.issue_color(G_PER_COMPONENT, ci); - issuer.issue_normal(G_PER_COMPONENT, ni); - - // Per-vertex attributes. - issuer.issue_color(G_PER_VERTEX, ci); - issuer.issue_normal(G_PER_VERTEX, ni); - issuer.issue_texcoord(G_PER_VERTEX, ti); - issuer.issue_vertex(G_PER_VERTEX, vi); - } - GLP(End)(); - } - - report_my_gl_errors(); - DO_PSTATS_STUFF(_draw_primitive_pcollector.stop()); - -} - -//////////////////////////////////////////////////////////////////// -// Function: GLGraphicsStateGuardian::draw_trifan -// Access: Public, Virtual -// Description: -//////////////////////////////////////////////////////////////////// -void CLP(GraphicsStateGuardian):: -draw_trifan(GeomTrifan *geom, GeomContext *gc) { -#ifdef GSG_VERBOSE - GLCAT.spam() << "draw_trifan()" << endl; -#endif - - setup_antialias_polygon(); - - if (draw_display_list(gc)) { - return; - } - -#ifdef DO_PSTATS - // PStatTimer timer(_draw_primitive_pcollector); - // Using PStatTimer may cause a compiler crash. - _draw_primitive_pcollector.start(); - _vertices_trifan_pcollector.add_level(geom->get_num_vertices()); -#endif - - issue_scene_graph_color(); - - int nprims = geom->get_num_prims(); - const int *plen = geom->get_lengths(); - Geom::VertexIterator vi = geom->make_vertex_iterator(); - Geom::NormalIterator ni = geom->make_normal_iterator(); - Geom::MultiTexCoordIterator ti; - geom->setup_multitexcoord_iterator(ti, _current_texture->get_on_stages(), - _current_tex_gen->get_no_texcoords()); - Geom::ColorIterator ci = geom->make_color_iterator(); - - GeomIssuer::IssueColor *issue_color; - - if (_color_blend_involves_color_scale || !_color_scale_enabled || - _color_scale_via_lighting) { - issue_color = issue_color_gl; - } else { - issue_color = issue_scaled_color_gl; - } - - GeomIssuer issuer(geom, this, - issue_vertex_gl, - issue_normal_gl, - issue_color, - issue_texcoord_single_gl, - issue_texcoord_multi_gl, - ti); - - issue_flat_shading(geom); - - // Draw overall - issuer.issue_color(G_OVERALL, ci); - issuer.issue_normal(G_OVERALL, ni); - - for (int i = 0; i < nprims; i++) { - // Draw per primitive - issuer.issue_color(G_PER_PRIM, ci); - issuer.issue_normal(G_PER_PRIM, ni); - - int num_verts = *(plen++); - nassertv(num_verts >= 3); - - GLP(Begin)(GL_TRIANGLE_FAN); - - // Per-component attributes for the first triangle? - issuer.issue_color(G_PER_COMPONENT, ci); - issuer.issue_normal(G_PER_COMPONENT, ni); - - // Draw the first three vertices. - int v; - for (v = 0; v < 3; v++) { - issuer.issue_color(G_PER_VERTEX, ci); - issuer.issue_normal(G_PER_VERTEX, ni); - issuer.issue_texcoord(G_PER_VERTEX, ti); - issuer.issue_vertex(G_PER_VERTEX, vi); - } - - // Now draw each of the remaining vertices. Each vertex from - // this point on defines a new triangle. - for (v = 3; v < num_verts; v++) { - // Per-component attributes? - issuer.issue_color(G_PER_COMPONENT, ci); - issuer.issue_normal(G_PER_COMPONENT, ni); - - // Per-vertex attributes. - issuer.issue_color(G_PER_VERTEX, ci); - issuer.issue_normal(G_PER_VERTEX, ni); - issuer.issue_texcoord(G_PER_VERTEX, ti); - issuer.issue_vertex(G_PER_VERTEX, vi); - } - GLP(End)(); - } - report_my_gl_errors(); - DO_PSTATS_STUFF(_draw_primitive_pcollector.stop()); -} - - -//////////////////////////////////////////////////////////////////// -// Function: GLGraphicsStateGuardian::draw_sphere -// Access: Public, Virtual -// Description: -//////////////////////////////////////////////////////////////////// -void CLP(GraphicsStateGuardian):: -draw_sphere(GeomSphere *geom, GeomContext *gc) { -#ifdef GSG_VERBOSE - GLCAT.spam() << "draw_sphere()" << endl; -#endif - - setup_antialias_polygon(); - - if (draw_display_list(gc)) { - return; - } - -#ifdef DO_PSTATS - // PStatTimer timer(_draw_primitive_pcollector); - // Using PStatTimer may cause a compiler crash. - _draw_primitive_pcollector.start(); - _vertices_other_pcollector.add_level(geom->get_num_vertices()); -#endif - - issue_scene_graph_color(); - - int nprims = geom->get_num_prims(); - Geom::VertexIterator vi = geom->make_vertex_iterator(); - Geom::MultiTexCoordIterator ti; - geom->setup_multitexcoord_iterator(ti, _current_texture->get_on_stages(), - _current_tex_gen->get_no_texcoords()); - Geom::ColorIterator ci = geom->make_color_iterator(); - - GeomIssuer::IssueColor *issue_color; - - if (_color_blend_involves_color_scale || !_color_scale_enabled || - _color_scale_via_lighting) { - issue_color = issue_color_gl; - } else { - issue_color = issue_scaled_color_gl; - } - - GeomIssuer issuer(geom, this, - issue_vertex_gl, - issue_normal_gl, - issue_color, - issue_texcoord_single_gl, - issue_texcoord_multi_gl, - ti); - - if (wants_normals()) { - if (_flat_shade_model) { - modify_state(get_smooth_state()); - } - } - - // Draw overall - issuer.issue_color(G_OVERALL, ci); - - GLUquadricObj *sph = GLUP(NewQuadric)(); - GLUP(QuadricNormals)(sph, wants_normals() ? (GLenum)GLU_SMOOTH : (GLenum)GLU_NONE); - GLUP(QuadricTexture)(sph, wants_texcoords() ? (GLenum)GL_TRUE : (GLenum)GL_FALSE); - GLUP(QuadricOrientation)(sph, (GLenum)GLU_OUTSIDE); - GLUP(QuadricDrawStyle)(sph, (GLenum)GLU_FILL); - //GLUP(QuadricDrawStyle)(sph, (GLenum)GLU_LINE); - - for (int i = 0; i < nprims; i++) { - // Draw per primitive - issuer.issue_color(G_PER_PRIM, ci); - - for (int j = 0; j < 2; j++) { - // Draw per vertex - issuer.issue_color(G_PER_VERTEX, ci); - } - Vertexf center = geom->get_next_vertex(vi); - Vertexf edge = geom->get_next_vertex(vi); - LVector3f v = edge - center; - float r = sqrt(dot(v, v)); - - // Since GLUP(Sphere) doesn't have a center parameter, we have to use - // a matrix transform. - - GLP(MatrixMode)(GL_MODELVIEW); - GLP(PushMatrix)(); - GLP(MultMatrixf)(LMatrix4f::translate_mat(center).get_data()); - - // Now render the sphere using GLU calls. - GLUP(Sphere)(sph, r, 16, 10); - - GLP(MatrixMode)(GL_MODELVIEW); - GLP(PopMatrix)(); - } - - GLUP(DeleteQuadric)(sph); - report_my_gl_errors(); - DO_PSTATS_STUFF(_draw_primitive_pcollector.stop()); -} - //////////////////////////////////////////////////////////////////// // Function: GLGraphicsStateGuardian::begin_draw_primitives // Access: Public, Virtual @@ -2192,8 +1067,8 @@ draw_sphere(GeomSphere *geom, GeomContext *gc) { // are ok, false to abort this group of primitives. //////////////////////////////////////////////////////////////////// bool CLP(GraphicsStateGuardian):: -begin_draw_primitives(const qpGeom *geom, const qpGeomMunger *munger, - const qpGeomVertexData *vertex_data) { +begin_draw_primitives(const Geom *geom, const GeomMunger *munger, + const GeomVertexData *vertex_data) { #ifndef NDEBUG if (GLCAT.is_spam()) { GLCAT.spam() << "begin_draw_primitives: " << *vertex_data << "\n"; @@ -2203,29 +1078,29 @@ begin_draw_primitives(const qpGeom *geom, const qpGeomMunger *munger, if (!GraphicsStateGuardian::begin_draw_primitives(geom, munger, vertex_data)) { return false; } - nassertr(_vertex_data != (qpGeomVertexData *)NULL, false); + nassertr(_vertex_data != (GeomVertexData *)NULL, false); _geom_display_list = 0; if (_auto_antialias_mode) { switch (geom->get_primitive_type()) { - case qpGeomPrimitive::PT_polygons: + case GeomPrimitive::PT_polygons: setup_antialias_polygon(); break; - case qpGeomPrimitive::PT_points: + case GeomPrimitive::PT_points: setup_antialias_point(); break; - case qpGeomPrimitive::PT_lines: + case GeomPrimitive::PT_lines: setup_antialias_line(); break; - case qpGeomPrimitive::PT_none: + case GeomPrimitive::PT_none: break; } } - const qpGeomVertexAnimationSpec &animation = + const GeomVertexAnimationSpec &animation = _vertex_data->get_format()->get_animation(); - bool hardware_animation = (animation.get_animation_type() == qpGeom::AT_hardware); + bool hardware_animation = (animation.get_animation_type() == Geom::AT_hardware); if (hardware_animation) { // Set up the transform matrices for vertex blending. nassertr(_supports_vertex_blend, false); @@ -2320,8 +1195,8 @@ begin_draw_primitives(const qpGeom *geom, const qpGeomMunger *munger, GLP(LoadIdentity)(); } - if (geom->get_usage_hint() == qpGeom::UH_static && - _vertex_data->get_usage_hint() == qpGeom::UH_static && + if (geom->get_usage_hint() == Geom::UH_static && + _vertex_data->get_usage_hint() == Geom::UH_static && display_lists && (!hardware_animation || display_list_animation)) { // If the geom claims to be totally static, try to build it into // a display list. @@ -2337,7 +1212,7 @@ begin_draw_primitives(const qpGeom *geom, const qpGeomMunger *munger, _current_ibuffer_index = 0; } - GeomContext *gc = ((qpGeom *)geom)->prepare_now(get_prepared_objects(), this); + GeomContext *gc = ((Geom *)geom)->prepare_now(get_prepared_objects(), this); nassertr(gc != (GeomContext *)NULL, false); CLP(GeomContext) *ggc = DCAST(CLP(GeomContext), gc); const CLP(GeomMunger) *gmunger = DCAST(CLP(GeomMunger), _munger); @@ -2388,9 +1263,9 @@ begin_draw_primitives(const qpGeom *geom, const qpGeomMunger *munger, #endif } - const qpGeomVertexArrayData *array_data; + const GeomVertexArrayData *array_data; int num_values; - qpGeom::NumericType numeric_type; + Geom::NumericType numeric_type; int start; int stride; @@ -2414,7 +1289,7 @@ begin_draw_primitives(const qpGeom *geom, const qpGeomMunger *munger, if (_vertex_data->get_color_info(array_data, num_values, numeric_type, start, stride) && - numeric_type != qpGeom::NT_packed_dabc) { + numeric_type != Geom::NT_packed_dabc) { const unsigned char *client_pointer = setup_array_data(array_data); GLP(ColorPointer)(num_values, get_numeric_type(numeric_type), stride, client_pointer + start); @@ -2519,7 +1394,7 @@ begin_draw_primitives(const qpGeom *geom, const qpGeomMunger *munger, // Description: Draws a series of disconnected triangles. //////////////////////////////////////////////////////////////////// void CLP(GraphicsStateGuardian):: -draw_triangles(const qpGeomTriangles *primitive) { +draw_triangles(const GeomTriangles *primitive) { #ifndef NDEBUG if (GLCAT.is_spam()) { GLCAT.spam() << "draw_triangles: " << *primitive << "\n"; @@ -2553,7 +1428,7 @@ draw_triangles(const qpGeomTriangles *primitive) { // Description: Draws a series of triangle strips. //////////////////////////////////////////////////////////////////// void CLP(GraphicsStateGuardian):: -draw_tristrips(const qpGeomTristrips *primitive) { +draw_tristrips(const GeomTristrips *primitive) { #ifndef NDEBUG if (GLCAT.is_spam()) { GLCAT.spam() << "draw_tristrips: " << *primitive << "\n"; @@ -2588,8 +1463,8 @@ draw_tristrips(const qpGeomTristrips *primitive) { if (primitive->is_indexed()) { const unsigned char *client_pointer = setup_primitive(primitive); int index_stride = primitive->get_index_stride(); - qpGeomVertexReader mins(primitive->get_mins(), 0); - qpGeomVertexReader maxs(primitive->get_maxs(), 0); + GeomVertexReader mins(primitive->get_mins(), 0); + GeomVertexReader maxs(primitive->get_maxs(), 0); nassertv(primitive->get_mins()->get_num_rows() == (int)ends.size() && primitive->get_maxs()->get_num_rows() == (int)ends.size()); @@ -2624,7 +1499,7 @@ draw_tristrips(const qpGeomTristrips *primitive) { // Description: Draws a series of triangle fans. //////////////////////////////////////////////////////////////////// void CLP(GraphicsStateGuardian):: -draw_trifans(const qpGeomTrifans *primitive) { +draw_trifans(const GeomTrifans *primitive) { #ifndef NDEBUG if (GLCAT.is_spam()) { GLCAT.spam() << "draw_trifans: " << *primitive << "\n"; @@ -2639,8 +1514,8 @@ draw_trifans(const qpGeomTrifans *primitive) { if (primitive->is_indexed()) { const unsigned char *client_pointer = setup_primitive(primitive); int index_stride = primitive->get_index_stride(); - qpGeomVertexReader mins(primitive->get_mins(), 0); - qpGeomVertexReader maxs(primitive->get_maxs(), 0); + GeomVertexReader mins(primitive->get_mins(), 0); + GeomVertexReader maxs(primitive->get_maxs(), 0); nassertv(primitive->get_mins()->get_num_rows() == (int)ends.size() && primitive->get_maxs()->get_num_rows() == (int)ends.size()); @@ -2673,7 +1548,7 @@ draw_trifans(const qpGeomTrifans *primitive) { // Description: Draws a series of disconnected line segments. //////////////////////////////////////////////////////////////////// void CLP(GraphicsStateGuardian):: -draw_lines(const qpGeomLines *primitive) { +draw_lines(const GeomLines *primitive) { #ifndef NDEBUG if (GLCAT.is_spam()) { GLCAT.spam() << "draw_lines: " << *primitive << "\n"; @@ -2706,7 +1581,7 @@ draw_lines(const qpGeomLines *primitive) { // Description: Draws a series of line strips. //////////////////////////////////////////////////////////////////// void CLP(GraphicsStateGuardian):: -draw_linestrips(const qpGeomLinestrips *primitive) { +draw_linestrips(const GeomLinestrips *primitive) { #ifndef NDEBUG if (GLCAT.is_spam()) { GLCAT.spam() << "draw_linestrips: " << *primitive << "\n"; @@ -2721,7 +1596,7 @@ draw_linestrips(const qpGeomLinestrips *primitive) { // Description: Draws a series of disconnected points. //////////////////////////////////////////////////////////////////// void CLP(GraphicsStateGuardian):: -draw_points(const qpGeomPoints *primitive) { +draw_points(const GeomPoints *primitive) { #ifndef NDEBUG if (GLCAT.is_spam()) { GLCAT.spam() << "draw_points: " << *primitive << "\n"; @@ -2851,81 +1726,7 @@ release_texture(TextureContext *tc) { //////////////////////////////////////////////////////////////////// GeomContext *CLP(GraphicsStateGuardian):: prepare_geom(Geom *geom) { - // Temporary test until the experimental Geom rewrite becomes the - // actual Geom implementation. - if (geom->is_qpgeom()) { - CLP(GeomContext) *ggc = new CLP(GeomContext)(geom); - return ggc; - - } else { - // Original Geom display list implementation. Slightly broken, - // since it doesn't work well with scene graph color - // manipulations. - - if (!_vertex_colors_enabled) { - // We can't build a display list (or play back a display list) if - // its color is overridden with a scene graph color. Maybe if we - // take advantage of the OpenGL color matrix we can do this, but - // for now we'll just ignore it. - return NULL; - } - - if (geom->is_dynamic()) { - // If the Geom is dynamic in some way, we shouldn't try to - // display-list it. - return NULL; - } - - CLP(GeomContext) *ggc = new CLP(GeomContext)(geom); - ggc->_deprecated_index = GLP(GenLists)(1); - if (GLCAT.is_debug()) { - GLCAT.debug() - << "preparing " << *geom << ", index " << ggc->_deprecated_index << "\n"; - } - if (ggc->_deprecated_index == 0) { - GLCAT.error() - << "Ran out of display list indices.\n"; - delete ggc; - return NULL; - } - - // We need to temporarily force normals and UV's on, so the display - // list will have them built in. - //force_texcoords(); - force_normals(); - -#ifdef DO_PSTATS - // Count up the number of vertices we're about to render, by - // checking the PStats vertex counters now, and at the end. This is - // kind of hacky, but this is debug code. - float num_verts_before = - _vertices_tristrip_pcollector.get_level() + - _vertices_trifan_pcollector.get_level() + - _vertices_tri_pcollector.get_level() + - _vertices_other_pcollector.get_level(); -#endif - - // Now define the display list. - GLP(NewList)(ggc->_deprecated_index, GL_COMPILE); - geom->draw_immediate(this, NULL); - GLP(EndList)(); - -#ifdef DO_PSTATS - float num_verts_after = - _vertices_tristrip_pcollector.get_level() + - _vertices_trifan_pcollector.get_level() + - _vertices_tri_pcollector.get_level() + - _vertices_other_pcollector.get_level(); - float num_verts = num_verts_after - num_verts_before; - ggc->_num_verts = (int)(num_verts + 0.5); -#endif - - undo_force_normals(); - //undo_force_texcoords(); - - report_my_gl_errors(); - return ggc; - } + return new CLP(GeomContext)(geom); } //////////////////////////////////////////////////////////////////// @@ -2973,7 +1774,7 @@ record_deleted_display_list(GLuint index) { // prepare a buffer. Instead, call Geom::prepare(). //////////////////////////////////////////////////////////////////// VertexBufferContext *CLP(GraphicsStateGuardian):: -prepare_vertex_buffer(qpGeomVertexArrayData *data) { +prepare_vertex_buffer(GeomVertexArrayData *data) { if (_supports_buffers) { CLP(VertexBufferContext) *gvbc = new CLP(VertexBufferContext)(data); _glGenBuffers(1, &gvbc->_index); @@ -3078,13 +1879,13 @@ release_vertex_buffer(VertexBufferContext *vbc) { // in client memory, that is, the data array passed in. //////////////////////////////////////////////////////////////////// const unsigned char *CLP(GraphicsStateGuardian):: -setup_array_data(const qpGeomVertexArrayData *data) { +setup_array_data(const GeomVertexArrayData *data) { if (!_supports_buffers) { // No support for buffer objects; always render from client. return data->get_data(); } if (!vertex_buffers || _geom_display_list != 0 || - data->get_usage_hint() == qpGeom::UH_client) { + data->get_usage_hint() == Geom::UH_client) { // The array specifies client rendering only, or buffer objects // are configured off. if (_current_vbuffer_index != 0) { @@ -3095,7 +1896,7 @@ setup_array_data(const qpGeomVertexArrayData *data) { } // Prepare the buffer object and bind it. - VertexBufferContext *vbc = ((qpGeomVertexArrayData *)data)->prepare_now(get_prepared_objects(), this); + VertexBufferContext *vbc = ((GeomVertexArrayData *)data)->prepare_now(get_prepared_objects(), this); nassertr(vbc != (VertexBufferContext *)NULL, data->get_data()); apply_vertex_buffer(vbc); @@ -3117,7 +1918,7 @@ setup_array_data(const qpGeomVertexArrayData *data) { // prepare a buffer. Instead, call Geom::prepare(). //////////////////////////////////////////////////////////////////// IndexBufferContext *CLP(GraphicsStateGuardian):: -prepare_index_buffer(qpGeomPrimitive *data) { +prepare_index_buffer(GeomPrimitive *data) { if (_supports_buffers) { CLP(IndexBufferContext) *gibc = new CLP(IndexBufferContext)(data); _glGenBuffers(1, &gibc->_index); @@ -3223,13 +2024,13 @@ release_index_buffer(IndexBufferContext *ibc) { // in client memory, that is, the data array passed in. //////////////////////////////////////////////////////////////////// const unsigned char *CLP(GraphicsStateGuardian):: -setup_primitive(const qpGeomPrimitive *data) { +setup_primitive(const GeomPrimitive *data) { if (!_supports_buffers) { // No support for buffer objects; always render from client. return data->get_data(); } if (!vertex_buffers || _geom_display_list != 0 || - data->get_usage_hint() == qpGeom::UH_client) { + data->get_usage_hint() == Geom::UH_client) { // The array specifies client rendering only, or buffer objects // are configured off. if (_current_ibuffer_index != 0) { @@ -3240,7 +2041,7 @@ setup_primitive(const qpGeomPrimitive *data) { } // Prepare the buffer object and bind it. - IndexBufferContext *ibc = ((qpGeomPrimitive *)data)->prepare_now(get_prepared_objects(), this); + IndexBufferContext *ibc = ((GeomPrimitive *)data)->prepare_now(get_prepared_objects(), this); nassertr(ibc != (IndexBufferContext *)NULL, data->get_data()); apply_index_buffer(ibc); @@ -3254,10 +2055,10 @@ setup_primitive(const qpGeomPrimitive *data) { // Description: Creates a new GeomMunger object to munge vertices // appropriate to this GSG for the indicated state. //////////////////////////////////////////////////////////////////// -PT(qpGeomMunger) CLP(GraphicsStateGuardian):: +PT(GeomMunger) CLP(GraphicsStateGuardian):: make_geom_munger(const RenderState *state) { PT(CLP(GeomMunger)) munger = new CLP(GeomMunger)(this, state); - return qpGeomMunger::register_munger(munger); + return GeomMunger::register_munger(munger); } //////////////////////////////////////////////////////////////////// @@ -4364,20 +3165,20 @@ set_read_buffer(const RenderBuffer &rb) { // to GL's. //////////////////////////////////////////////////////////////////// GLenum CLP(GraphicsStateGuardian):: -get_numeric_type(qpGeom::NumericType numeric_type) { +get_numeric_type(Geom::NumericType numeric_type) { switch (numeric_type) { - case qpGeom::NT_uint16: + case Geom::NT_uint16: return GL_UNSIGNED_SHORT; - case qpGeom::NT_uint32: + case Geom::NT_uint32: return GL_UNSIGNED_INT; - case qpGeom::NT_uint8: - case qpGeom::NT_packed_dcba: - case qpGeom::NT_packed_dabc: + case Geom::NT_uint8: + case Geom::NT_packed_dcba: + case Geom::NT_packed_dabc: return GL_UNSIGNED_BYTE; - case qpGeom::NT_float32: + case Geom::NT_float32: return GL_FLOAT; } @@ -4904,19 +3705,19 @@ get_blend_func(ColorBlendAttrib::Operand operand) { // Description: Maps from UsageHint to the GL symbol. //////////////////////////////////////////////////////////////////// GLenum CLP(GraphicsStateGuardian):: -get_usage(qpGeom::UsageHint usage_hint) { +get_usage(Geom::UsageHint usage_hint) { switch (usage_hint) { - case qpGeom::UH_stream: + case Geom::UH_stream: return GL_STREAM_DRAW; - case qpGeom::UH_static: - case qpGeom::UH_unspecified: + case Geom::UH_static: + case Geom::UH_unspecified: return GL_STATIC_DRAW; - case qpGeom::UH_dynamic: + case Geom::UH_dynamic: return GL_DYNAMIC_DRAW; - case qpGeom::UH_client: + case Geom::UH_client: break; } @@ -4974,23 +3775,6 @@ print_gfx_visual() { GLP(GetIntegerv)( GL_AUX_BUFFERS, &i ); cout << "Aux Buffers: " << i << endl; } -//////////////////////////////////////////////////////////////////// -// Function: GLGraphicsStateGuardian::issue_scaled_color -// Access: Public -// Description: Transform the color by the current color matrix, and -// calls the appropriate glColor function. -//////////////////////////////////////////////////////////////////// -void CLP(GraphicsStateGuardian):: -issue_scaled_color(const Colorf &color) const { - Colorf transformed - (color[0] * _current_color_scale[0], - color[1] * _current_color_scale[1], - color[2] * _current_color_scale[2], - color[3] * _current_color_scale[3]); - - GLP(Color4fv)(transformed.get_data()); -} - //////////////////////////////////////////////////////////////////// // Function: GLGraphicsStateGuardian::get_light_color // Access: Public diff --git a/panda/src/glstuff/glGraphicsStateGuardian_src.h b/panda/src/glstuff/glGraphicsStateGuardian_src.h index 965e21e5dc..e70e40d5c5 100644 --- a/panda/src/glstuff/glGraphicsStateGuardian_src.h +++ b/panda/src/glstuff/glGraphicsStateGuardian_src.h @@ -19,8 +19,7 @@ #include "pandabase.h" #include "graphicsStateGuardian.h" -#include "geomprimitives.h" -#include "qpgeomVertexColumn.h" +#include "geomVertexColumn.h" #include "texture.h" #include "displayRegion.h" #include "material.h" @@ -36,7 +35,7 @@ #include "graphicsWindow.h" #include "pset.h" #include "pmap.h" -#include "qpgeomVertexArrayData.h" +#include "geomVertexArrayData.h" #include "pmutex.h" #ifdef HAVE_CGGL #include "cgShader.h" @@ -82,26 +81,15 @@ public: virtual bool begin_frame(); virtual void end_frame(); - virtual void draw_point(GeomPoint *geom, GeomContext *gc); - virtual void draw_line(GeomLine *geom, GeomContext *gc); - virtual void draw_linestrip(GeomLinestrip *geom, GeomContext *gc); - virtual void draw_sprite(GeomSprite *geom, GeomContext *gc); - virtual void draw_polygon(GeomPolygon *geom, GeomContext *gc); - virtual void draw_quad(GeomQuad *geom, GeomContext *gc); - virtual void draw_tri(GeomTri *geom, GeomContext *gc); - virtual void draw_tristrip(GeomTristrip *geom, GeomContext *gc); - virtual void draw_trifan(GeomTrifan *geom, GeomContext *gc); - virtual void draw_sphere(GeomSphere *geom, GeomContext *gc); - - virtual bool begin_draw_primitives(const qpGeom *geom, - const qpGeomMunger *munger, - const qpGeomVertexData *vertex_data); - virtual void draw_triangles(const qpGeomTriangles *primitive); - virtual void draw_tristrips(const qpGeomTristrips *primitive); - virtual void draw_trifans(const qpGeomTrifans *primitive); - virtual void draw_lines(const qpGeomLines *primitive); - virtual void draw_linestrips(const qpGeomLinestrips *primitive); - virtual void draw_points(const qpGeomPoints *primitive); + virtual bool begin_draw_primitives(const Geom *geom, + const GeomMunger *munger, + const GeomVertexData *vertex_data); + virtual void draw_triangles(const GeomTriangles *primitive); + virtual void draw_tristrips(const GeomTristrips *primitive); + virtual void draw_trifans(const GeomTrifans *primitive); + virtual void draw_lines(const GeomLines *primitive); + virtual void draw_linestrips(const GeomLinestrips *primitive); + virtual void draw_points(const GeomPoints *primitive); virtual void end_draw_primitives(); INLINE bool draw_display_list(GeomContext *gc); @@ -113,17 +101,17 @@ public: virtual void release_geom(GeomContext *gc); void record_deleted_display_list(GLuint index); - virtual VertexBufferContext *prepare_vertex_buffer(qpGeomVertexArrayData *data); + virtual VertexBufferContext *prepare_vertex_buffer(GeomVertexArrayData *data); void apply_vertex_buffer(VertexBufferContext *vbc); virtual void release_vertex_buffer(VertexBufferContext *vbc); - const unsigned char *setup_array_data(const qpGeomVertexArrayData *data); + const unsigned char *setup_array_data(const GeomVertexArrayData *data); - virtual IndexBufferContext *prepare_index_buffer(qpGeomPrimitive *data); + virtual IndexBufferContext *prepare_index_buffer(GeomPrimitive *data); void apply_index_buffer(IndexBufferContext *ibc); virtual void release_index_buffer(IndexBufferContext *ibc); - const unsigned char *setup_primitive(const qpGeomPrimitive *data); + const unsigned char *setup_primitive(const GeomPrimitive *data); - virtual PT(qpGeomMunger) make_geom_munger(const RenderState *state); + virtual PT(GeomMunger) make_geom_munger(const RenderState *state); virtual void framebuffer_copy_to_texture (Texture *tex, int z, const DisplayRegion *dr, const RenderBuffer &rb); @@ -165,7 +153,6 @@ public: //enabled/disable GL State compared to what GL says it is void dump_state(void); - void issue_scaled_color(const Colorf &color) const; const float *get_light_color(Light *light) const; INLINE static bool report_errors(int line, const char *source_file); @@ -223,13 +210,10 @@ protected: INLINE GLenum get_light_id(int index) const; INLINE GLenum get_clip_plane_id(int index) const; - INLINE void issue_scene_graph_color(); - INLINE void issue_flat_shading(Geom *geom); - void set_draw_buffer(const RenderBuffer &rb); void set_read_buffer(const RenderBuffer &rb); - static GLenum get_numeric_type(qpGeom::NumericType numeric_type); + static GLenum get_numeric_type(Geom::NumericType numeric_type); GLenum get_texture_target(Texture::TextureType texture_type) const; GLenum get_texture_wrap_mode(Texture::WrapMode wm); static GLenum get_texture_filter_type(Texture::FilterType ft, bool ignore_mipmaps); @@ -246,7 +230,7 @@ protected: static GLenum get_fog_mode_type(Fog::Mode m); static GLenum get_blend_equation_type(ColorBlendAttrib::Mode mode); static GLenum get_blend_func(ColorBlendAttrib::Operand operand); - static GLenum get_usage(qpGeom::UsageHint usage_hint); + static GLenum get_usage(Geom::UsageHint usage_hint); static CPT(RenderState) get_untextured_state(); static CPT(RenderState) get_smooth_state(); diff --git a/panda/src/glstuff/glIndexBufferContext_src.I b/panda/src/glstuff/glIndexBufferContext_src.I index 408e4c801d..664324389f 100644 --- a/panda/src/glstuff/glIndexBufferContext_src.I +++ b/panda/src/glstuff/glIndexBufferContext_src.I @@ -23,7 +23,7 @@ // Description: //////////////////////////////////////////////////////////////////// INLINE CLP(IndexBufferContext):: -CLP(IndexBufferContext)(qpGeomPrimitive *data) : +CLP(IndexBufferContext)(GeomPrimitive *data) : IndexBufferContext(data) { _index = 0; diff --git a/panda/src/glstuff/glIndexBufferContext_src.h b/panda/src/glstuff/glIndexBufferContext_src.h index 76f921eba5..46cd354a94 100644 --- a/panda/src/glstuff/glIndexBufferContext_src.h +++ b/panda/src/glstuff/glIndexBufferContext_src.h @@ -26,7 +26,7 @@ //////////////////////////////////////////////////////////////////// class EXPCL_GL CLP(IndexBufferContext) : public IndexBufferContext { public: - INLINE CLP(IndexBufferContext)(qpGeomPrimitive *data); + INLINE CLP(IndexBufferContext)(GeomPrimitive *data); // This is the GL "name" of the data object. GLuint _index; diff --git a/panda/src/glstuff/glVertexBufferContext_src.I b/panda/src/glstuff/glVertexBufferContext_src.I index a298d784ca..c5ac7d5122 100644 --- a/panda/src/glstuff/glVertexBufferContext_src.I +++ b/panda/src/glstuff/glVertexBufferContext_src.I @@ -23,7 +23,7 @@ // Description: //////////////////////////////////////////////////////////////////// INLINE CLP(VertexBufferContext):: -CLP(VertexBufferContext)(qpGeomVertexArrayData *data) : +CLP(VertexBufferContext)(GeomVertexArrayData *data) : VertexBufferContext(data) { _index = 0; diff --git a/panda/src/glstuff/glVertexBufferContext_src.h b/panda/src/glstuff/glVertexBufferContext_src.h index 516eac056b..da3634c889 100644 --- a/panda/src/glstuff/glVertexBufferContext_src.h +++ b/panda/src/glstuff/glVertexBufferContext_src.h @@ -26,7 +26,7 @@ //////////////////////////////////////////////////////////////////// class EXPCL_GL CLP(VertexBufferContext) : public VertexBufferContext { public: - INLINE CLP(VertexBufferContext)(qpGeomVertexArrayData *data); + INLINE CLP(VertexBufferContext)(GeomVertexArrayData *data); // This is the GL "name" of the data object. GLuint _index; diff --git a/panda/src/gobj/Sources.pp b/panda/src/gobj/Sources.pp index 05b0fb0dc9..477fcb3a57 100644 --- a/panda/src/gobj/Sources.pp +++ b/panda/src/gobj/Sources.pp @@ -13,32 +13,28 @@ boundedObject.I boundedObject.h \ config_gobj.h \ drawable.h \ - geom.I geom.h \ + geom.h geom.I \ geomContext.I geomContext.h \ - geomLine.h geomLinestrip.h geomPoint.h geomPolygon.h \ - geomQuad.h geomSphere.h geomSprite.I geomSprite.h geomTri.h \ - geomTrifan.h geomTristrip.h \ - qpgeom.h qpgeom.I \ - qpgeomEnums.h \ - qpgeomMunger.h qpgeomMunger.I \ - qpgeomPrimitive.h qpgeomPrimitive.I \ - qpgeomTriangles.h \ - qpgeomTristrips.h \ - qpgeomTrifans.h \ - qpgeomLines.h \ - qpgeomLinestrips.h \ - qpgeomPoints.h \ - qpgeomVertexArrayData.h qpgeomVertexArrayData.I \ - qpgeomVertexArrayFormat.h qpgeomVertexArrayFormat.I \ - qpgeomCacheEntry.h qpgeomCacheEntry.I \ - qpgeomCacheManager.h qpgeomCacheManager.I \ - qpgeomVertexAnimationSpec.h qpgeomVertexAnimationSpec.I \ - qpgeomVertexData.h qpgeomVertexData.I \ - qpgeomVertexColumn.h qpgeomVertexColumn.I \ - qpgeomVertexFormat.h qpgeomVertexFormat.I \ - qpgeomVertexReader.h qpgeomVertexReader.I \ - qpgeomVertexRewriter.h qpgeomVertexRewriter.I \ - qpgeomVertexWriter.h qpgeomVertexWriter.I \ + geomEnums.h \ + geomMunger.h geomMunger.I \ + geomPrimitive.h geomPrimitive.I \ + geomTriangles.h \ + geomTristrips.h \ + geomTrifans.h \ + geomLines.h \ + geomLinestrips.h \ + geomPoints.h \ + geomVertexArrayData.h geomVertexArrayData.I \ + geomVertexArrayFormat.h geomVertexArrayFormat.I \ + geomCacheEntry.h geomCacheEntry.I \ + geomCacheManager.h geomCacheManager.I \ + geomVertexAnimationSpec.h geomVertexAnimationSpec.I \ + geomVertexData.h geomVertexData.I \ + geomVertexColumn.h geomVertexColumn.I \ + geomVertexFormat.h geomVertexFormat.I \ + geomVertexReader.h geomVertexReader.I \ + geomVertexRewriter.h geomVertexRewriter.I \ + geomVertexWriter.h geomVertexWriter.I \ indexBufferContext.I indexBufferContext.h \ internalName.I internalName.h \ material.I material.h materialPool.I materialPool.h \ @@ -65,32 +61,29 @@ #define INCLUDED_SOURCES \ boundedObject.cxx \ config_gobj.cxx \ - drawable.cxx geom.cxx \ + drawable.cxx \ geomContext.cxx \ - geomLine.cxx geomLinestrip.cxx geomPoint.cxx geomPolygon.cxx \ - geomQuad.cxx geomSphere.cxx geomSprite.cxx geomTri.cxx \ - geomTrifan.cxx geomTristrip.cxx \ - qpgeom.cxx \ - qpgeomEnums.cxx \ - qpgeomMunger.cxx \ - qpgeomPrimitive.cxx \ - qpgeomTriangles.cxx \ - qpgeomTristrips.cxx \ - qpgeomTrifans.cxx \ - qpgeomLines.cxx \ - qpgeomLinestrips.cxx \ - qpgeomPoints.cxx \ - qpgeomVertexArrayData.cxx \ - qpgeomVertexArrayFormat.cxx \ - qpgeomCacheEntry.cxx \ - qpgeomCacheManager.cxx \ - qpgeomVertexAnimationSpec.cxx \ - qpgeomVertexData.cxx \ - qpgeomVertexColumn.cxx \ - qpgeomVertexFormat.cxx \ - qpgeomVertexReader.cxx \ - qpgeomVertexRewriter.cxx \ - qpgeomVertexWriter.cxx \ + geom.cxx \ + geomEnums.cxx \ + geomMunger.cxx \ + geomPrimitive.cxx \ + geomTriangles.cxx \ + geomTristrips.cxx \ + geomTrifans.cxx \ + geomLines.cxx \ + geomLinestrips.cxx \ + geomPoints.cxx \ + geomVertexArrayData.cxx \ + geomVertexArrayFormat.cxx \ + geomCacheEntry.cxx \ + geomCacheManager.cxx \ + geomVertexAnimationSpec.cxx \ + geomVertexData.cxx \ + geomVertexColumn.cxx \ + geomVertexFormat.cxx \ + geomVertexReader.cxx \ + geomVertexRewriter.cxx \ + geomVertexWriter.cxx \ indexBufferContext.cxx \ material.cxx \ internalName.cxx \ @@ -116,31 +109,28 @@ config_gobj.h \ drawable.h geom.I geom.h \ textureContext.I textureContext.h \ - geomLine.h \ - geomLinestrip.h geomPoint.h geomPolygon.h geomQuad.h geomSphere.h \ - geomSprite.I geomSprite.h geomTri.h geomTrifan.h geomTristrip.h \ - geomprimitives.h \ - qpgeom.h qpgeom.I \ - qpgeomEnums.h \ - qpgeomMunger.h qpgeomMunger.I \ - qpgeomPrimitive.h qpgeomPrimitive.I \ - qpgeomTriangles.h \ - qpgeomTristrips.h \ - qpgeomTrifans.h \ - qpgeomLines.h \ - qpgeomLinestrips.h \ - qpgeomPoints.h \ - qpgeomVertexArrayData.h qpgeomVertexArrayData.I \ - qpgeomVertexArrayFormat.h qpgeomVertexArrayFormat.I \ - qpgeomCacheEntry.h qpgeomCacheEntry.I \ - qpgeomCacheManager.h qpgeomCacheManager.I \ - qpgeomVertexAnimationSpec.h qpgeomVertexAnimationSpec.I \ - qpgeomVertexData.h qpgeomVertexData.I \ - qpgeomVertexColumn.h qpgeomVertexColumn.I \ - qpgeomVertexFormat.h qpgeomVertexFormat.I \ - qpgeomVertexReader.h qpgeomVertexReader.I \ - qpgeomVertexRewriter.h qpgeomVertexRewriter.I \ - qpgeomVertexWriter.h qpgeomVertexWriter.I \ + geom.h geom.I \ + geomContext.I geomContext.h \ + geomEnums.h \ + geomMunger.h geomMunger.I \ + geomPrimitive.h geomPrimitive.I \ + geomTriangles.h \ + geomTristrips.h \ + geomTrifans.h \ + geomLines.h \ + geomLinestrips.h \ + geomPoints.h \ + geomVertexArrayData.h geomVertexArrayData.I \ + geomVertexArrayFormat.h geomVertexArrayFormat.I \ + geomCacheEntry.h geomCacheEntry.I \ + geomCacheManager.h geomCacheManager.I \ + geomVertexAnimationSpec.h geomVertexAnimationSpec.I \ + geomVertexData.h geomVertexData.I \ + geomVertexColumn.h geomVertexColumn.I \ + geomVertexFormat.h geomVertexFormat.I \ + geomVertexReader.h geomVertexReader.I \ + geomVertexRewriter.h geomVertexRewriter.I \ + geomVertexWriter.h geomVertexWriter.I \ indexBufferContext.I indexBufferContext.h \ internalName.I internalName.h \ material.I material.h \ diff --git a/panda/src/gobj/config_gobj.cxx b/panda/src/gobj/config_gobj.cxx index b5221c227e..3a815f4340 100644 --- a/panda/src/gobj/config_gobj.cxx +++ b/panda/src/gobj/config_gobj.cxx @@ -21,20 +21,18 @@ #include "config_gobj.h" #include "drawable.h" #include "geom.h" -#include "geomprimitives.h" -#include "qpgeom.h" -#include "qpgeomMunger.h" -#include "qpgeomPrimitive.h" -#include "qpgeomTriangles.h" -#include "qpgeomTristrips.h" -#include "qpgeomTrifans.h" -#include "qpgeomLines.h" -#include "qpgeomLinestrips.h" -#include "qpgeomPoints.h" -#include "qpgeomVertexArrayData.h" -#include "qpgeomVertexArrayFormat.h" -#include "qpgeomVertexData.h" -#include "qpgeomVertexFormat.h" +#include "geomMunger.h" +#include "geomPrimitive.h" +#include "geomTriangles.h" +#include "geomTristrips.h" +#include "geomTrifans.h" +#include "geomLines.h" +#include "geomLinestrips.h" +#include "geomPoints.h" +#include "geomVertexArrayData.h" +#include "geomVertexArrayFormat.h" +#include "geomVertexData.h" +#include "geomVertexFormat.h" #include "material.h" #include "orthographicLens.h" #include "matrixLens.h" @@ -79,25 +77,6 @@ ConfigVariableBool keep_texture_ram "texture image from disk; but it will consume memory somewhat " "wastefully.")); -ConfigVariableBool keep_geom_ram -("keep-geom-ram", true, - PRC_DESC("Set this to true to retain the vertices in ram for each geom " - "after it has been prepared with the GSG. This is similar to " - "keep-texture-ram, but it is a little more dangerous, because if " - "anyone calls release_all_geoms() on the GSG (or if there are " - "multiple GSG's rendering a given geom), Panda won't be able to " - "restore the vertices.")); - -ConfigVariableBool retained_mode -("retained-mode", false, - PRC_DESC("Set this true to allow the use of retained mode rendering, which " - "creates specific cache information (like display lists or vertex " - "buffers) with the GSG for static geometry, when supported by the " - "GSG. Set it false to use only immediate mode, which sends the " - "vertices to the GSG every frame. This is used only in the " - "original Geom implementation; it is replaced by display-lists " - "in the experimental Geom rewrite.")); - ConfigVariableBool vertex_buffers ("vertex-buffers", true, PRC_DESC("Set this true to allow the use of vertex buffers (or buffer " @@ -109,7 +88,7 @@ ConfigVariableBool vertex_buffers "make little or no difference.")); ConfigVariableBool display_lists -("display-lists", true, +("display-lists", false, PRC_DESC("Set this true to allow the use of OpenGL display lists for " "rendering static geometry. On some systems, this can result " "in a performance improvement over vertex buffers alone; on " @@ -169,24 +148,6 @@ ConfigVariableBool connect_triangle_strips "triangle strip may help performance by reducing the number " "of separate graphics calls that have to be made.")); -ConfigVariableBool use_qpgeom -("use-qpgeom", true, - PRC_DESC("A temporary variable while the experimental Geom rewrite is " - "underway. Set this true if you want to use the experimental " - "code. This is now the default setting, as the formerly " - "experimental code appears to be more robust.")); - -ConfigVariableBool support_old_geom -("support-old-geom", true, - PRC_DESC("A temporary variable while the experimental Geom rewrite is " - "underway. Set this false if you DON't want to see anything " - "rendered from a legacy Geom. This is intended to help " - "prove visually that the experimental Geoms are actually " - "being used. You don't really want to set this false, and " - "you certainly don't want to monkey with it if you haven't " - "also set use-qpgeom true.")); - - ConfigVariableEnum bam_texture_mode ("bam-texture-mode", BTM_relative, PRC_DESC("Set this to specify how textures should be written into Bam files." @@ -251,29 +212,18 @@ ConfigVariableDouble default_keystone ConfigureFn(config_gobj) { BoundedObject::init_type(); Geom::init_type(); - GeomLine::init_type(); - GeomLinestrip::init_type(); - GeomPoint::init_type(); - GeomSprite::init_type(); - GeomPolygon::init_type(); - GeomQuad::init_type(); - GeomSphere::init_type(); - GeomTri::init_type(); - GeomTrifan::init_type(); - GeomTristrip::init_type(); - qpGeom::init_type(); - qpGeomMunger::init_type(); - qpGeomPrimitive::init_type(); - qpGeomTriangles::init_type(); - qpGeomTristrips::init_type(); - qpGeomTrifans::init_type(); - qpGeomLines::init_type(); - qpGeomLinestrips::init_type(); - qpGeomPoints::init_type(); - qpGeomVertexArrayData::init_type(); - qpGeomVertexArrayFormat::init_type(); - qpGeomVertexData::init_type(); - qpGeomVertexFormat::init_type(); + GeomMunger::init_type(); + GeomPrimitive::init_type(); + GeomTriangles::init_type(); + GeomTristrips::init_type(); + GeomTrifans::init_type(); + GeomLines::init_type(); + GeomLinestrips::init_type(); + GeomPoints::init_type(); + GeomVertexArrayData::init_type(); + GeomVertexArrayFormat::init_type(); + GeomVertexData::init_type(); + GeomVertexFormat::init_type(); TextureContext::init_type(); GeomContext::init_type(); VertexBufferContext::init_type(); @@ -297,27 +247,17 @@ ConfigureFn(config_gobj) { //Registration of writeable object's creation //functions with BamReader's factory - GeomPoint::register_with_read_factory(); - GeomLine::register_with_read_factory(); - GeomLinestrip::register_with_read_factory(); - GeomSprite::register_with_read_factory(); - GeomPolygon::register_with_read_factory(); - GeomQuad::register_with_read_factory(); - GeomTri::register_with_read_factory(); - GeomTristrip::register_with_read_factory(); - GeomTrifan::register_with_read_factory(); - GeomSphere::register_with_read_factory(); - qpGeom::register_with_read_factory(); - qpGeomTriangles::register_with_read_factory(); - qpGeomTristrips::register_with_read_factory(); - qpGeomTrifans::register_with_read_factory(); - qpGeomLines::register_with_read_factory(); - qpGeomLinestrips::register_with_read_factory(); - qpGeomPoints::register_with_read_factory(); - qpGeomVertexArrayData::register_with_read_factory(); - qpGeomVertexArrayFormat::register_with_read_factory(); - qpGeomVertexData::register_with_read_factory(); - qpGeomVertexFormat::register_with_read_factory(); + Geom::register_with_read_factory(); + GeomTriangles::register_with_read_factory(); + GeomTristrips::register_with_read_factory(); + GeomTrifans::register_with_read_factory(); + GeomLines::register_with_read_factory(); + GeomLinestrips::register_with_read_factory(); + GeomPoints::register_with_read_factory(); + GeomVertexArrayData::register_with_read_factory(); + GeomVertexArrayFormat::register_with_read_factory(); + GeomVertexData::register_with_read_factory(); + GeomVertexFormat::register_with_read_factory(); Material::register_with_read_factory(); OrthographicLens::register_with_read_factory(); MatrixLens::register_with_read_factory(); diff --git a/panda/src/gobj/config_gobj.h b/panda/src/gobj/config_gobj.h index 2a0ea2b581..a86f1d0dda 100644 --- a/panda/src/gobj/config_gobj.h +++ b/panda/src/gobj/config_gobj.h @@ -49,8 +49,6 @@ EXPCL_PANDA istream &operator >> (istream &in, AutoTextureScale &ats); // Configure variables for gobj package. extern EXPCL_PANDA ConfigVariableInt max_texture_dimension; extern EXPCL_PANDA ConfigVariableBool keep_texture_ram; -extern EXPCL_PANDA ConfigVariableBool keep_geom_ram; -extern EXPCL_PANDA ConfigVariableBool retained_mode; extern EXPCL_PANDA ConfigVariableBool vertex_buffers; extern EXPCL_PANDA ConfigVariableBool display_lists; extern EXPCL_PANDA ConfigVariableBool hardware_animated_vertices; @@ -59,9 +57,6 @@ extern EXPCL_PANDA ConfigVariableBool matrix_palette; extern EXPCL_PANDA ConfigVariableBool display_list_animation; extern EXPCL_PANDA ConfigVariableBool connect_triangle_strips; -extern EXPCL_PANDA ConfigVariableBool use_qpgeom; -extern EXPCL_PANDA ConfigVariableBool support_old_geom; - extern EXPCL_PANDA ConfigVariableEnum bam_texture_mode; extern EXPCL_PANDA ConfigVariableEnum textures_power_2; extern EXPCL_PANDA ConfigVariableEnum textures_square; diff --git a/panda/src/gobj/drawable.cxx b/panda/src/gobj/drawable.cxx index 713008cfa1..304f623786 100644 --- a/panda/src/gobj/drawable.cxx +++ b/panda/src/gobj/drawable.cxx @@ -48,8 +48,8 @@ dDrawable:: // At this level, this doesn't do very much. //////////////////////////////////////////////////////////////////// void dDrawable:: -draw(GraphicsStateGuardianBase *, const qpGeomMunger *, - const qpGeomVertexData *) const { +draw(GraphicsStateGuardianBase *, const GeomMunger *, + const GeomVertexData *) const { if (is_dirty()) { ((dDrawable *)this)->config(); } diff --git a/panda/src/gobj/drawable.h b/panda/src/gobj/drawable.h index 272ef5444f..c71475d06f 100644 --- a/panda/src/gobj/drawable.h +++ b/panda/src/gobj/drawable.h @@ -34,8 +34,8 @@ class Datagram; class DatagramIterator; class BamReader; class BamWriter; -class qpGeomMunger; -class qpGeomVertexData; +class GeomMunger; +class GeomVertexData; //////////////////////////////////////////////////////////////////// // Class : Drawable @@ -53,8 +53,8 @@ public: virtual ~dDrawable(); virtual void draw(GraphicsStateGuardianBase *gsg, - const qpGeomMunger *munger, - const qpGeomVertexData *vertex_data) const; + const GeomMunger *munger, + const GeomVertexData *vertex_data) const; virtual bool is_dynamic() const; protected: diff --git a/panda/src/gobj/geom.I b/panda/src/gobj/geom.I index ee25ea48b0..28d62519d1 100644 --- a/panda/src/gobj/geom.I +++ b/panda/src/gobj/geom.I @@ -1,5 +1,5 @@ // Filename: geom.I -// Created by: drose (04Feb99) +// Created by: drose (06Mar05) // //////////////////////////////////////////////////////////////////// // @@ -18,422 +18,298 @@ //////////////////////////////////////////////////////////////////// -// Function: Geom::get_binding +// Function: Geom::get_primitive_type // Access: Published -// Description: Returns the GeomBindType which indicates the -// assignment of colors (or normals, etc.) to the -// primitives. +// Description: Returns the fundamental primitive type that is common +// to all GeomPrimitives added within the Geom. All +// nested primitives within a particular Geom must be +// the same type (that is, you can mix triangles and +// tristrips, because they are both the same fundamental +// type PT_polygons, but you cannot mix triangles and +// points withn the same Geom). //////////////////////////////////////////////////////////////////// -INLINE GeomBindType Geom:: -get_binding(int attr) const { - return _bind[attr]; +INLINE Geom::PrimitiveType Geom:: +get_primitive_type() const { + CDReader cdata(_cycler); + return cdata->_primitive_type; } //////////////////////////////////////////////////////////////////// -// Function: Geom::has_any_texcoords +// Function: Geom::get_shade_model // Access: Published -// Description: Returns true if the Geom defines any texture -// coordinates at all, false otherwise. +// Description: Returns the shade model common to all of the +// individual GeomPrimitives that have been added to the +// geom. //////////////////////////////////////////////////////////////////// -INLINE bool Geom:: -has_any_texcoords() const { - return !_texcoords_by_name.empty(); +INLINE Geom::ShadeModel Geom:: +get_shade_model() const { + CDReader cdata(_cycler); + return cdata->_shade_model; } //////////////////////////////////////////////////////////////////// -// Function: Geom::has_texcoords +// Function: Geom::get_geom_rendering // Access: Published -// Description: Returns true if the Geom defines a set of texture -// coordinates for the indicated multitexture stage -// name, or false otherwise. -//////////////////////////////////////////////////////////////////// -INLINE bool Geom:: -has_texcoords(const InternalName *name) const { - TexCoordsByName::const_iterator tci = _texcoords_by_name.find(name); - return (tci != _texcoords_by_name.end()); -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::get_coords_array -// Access: Published -// Description: Returns the array of vertex coordinates associated -// with the Geom. This must have binding type -// G_PER_VERTEX. It may either be indexed or -// nonindexed, depending on whether get_coords_index() -// returns a NULL array. -//////////////////////////////////////////////////////////////////// -INLINE PTA_Vertexf Geom:: -get_coords_array() const { - return _coords; -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::get_normals_array -// Access: Published -// Description: Returns the array of normals associated with the -// Geom. This may have any binding type. It may either -// be indexed or nonindexed, depending on whether -// get_normals_index() returns a NULL array. -//////////////////////////////////////////////////////////////////// -INLINE PTA_Normalf Geom:: -get_normals_array() const { - return _norms; -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::get_colors_array -// Access: Published -// Description: Returns the array of colors associated with the -// Geom. This may have any binding type. It may either -// be indexed or nonindexed, depending on whether -// get_colors_index() returns a NULL array. -//////////////////////////////////////////////////////////////////// -INLINE PTA_Colorf Geom:: -get_colors_array() const { - return _colors; -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::get_texcoords_array -// Access: Published -// Description: Returns the array of texcoords associated with the -// Geom. This may have a binding type of G_PER_VERTEX -// or G_OFF. It may either be indexed or nonindexed, -// depending on whether get_texcoords_index() returns a -// NULL array. -// -// This method is used in the single-texture case: it -// returns the default texture coordinates only. In the -// presence of multitexturing, use the version of -// get_texcoords_array() method that takes a -// InternalName parameter. -//////////////////////////////////////////////////////////////////// -INLINE PTA_TexCoordf Geom:: -get_texcoords_array() const { - return get_texcoords_array(InternalName::get_texcoord()); -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::get_texcoords_array -// Access: Published -// Description: Returns the texcoords array in the geom with the -// indicated name. This allows multitexturing support -// with multiple sets of texture coordinates in the same -// geom. The return value will be NULL if there are no -// texture coordinates with the indicated name. -//////////////////////////////////////////////////////////////////// -INLINE PTA_TexCoordf Geom:: -get_texcoords_array(const InternalName *name) const { - TexCoordsByName::const_iterator tci = _texcoords_by_name.find(name); - if (tci != _texcoords_by_name.end()) { - return (*tci).second._texcoords; - } - return PTA_TexCoordf(); -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::get_coords_index -// Access: Published -// Description: Returns the array of indices that, if nonempty, will -// be used to traverse the vertices in coords_array. -//////////////////////////////////////////////////////////////////// -INLINE PTA_ushort Geom:: -get_coords_index() const { - return _vindex; -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::get_normals_index -// Access: Published -// Description: Returns the array of indices that, if nonempty, will -// be used to traverse the vertices in normals_array. -//////////////////////////////////////////////////////////////////// -INLINE PTA_ushort Geom:: -get_normals_index() const { - return _nindex; -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::get_colors_index -// Access: Published -// Description: Returns the array of indices that, if nonempty, will -// be used to traverse the vertices in colors_array. -//////////////////////////////////////////////////////////////////// -INLINE PTA_ushort Geom:: -get_colors_index() const { - return _cindex; -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::get_texcoords_index -// Access: Published -// Description: Returns the array of indices that, if nonempty, will -// be used to traverse the vertices in texcoords_array. -// -// This method is used in the single-texture case: it -// returns the default texture coordinates only. In the -// presence of multitexturing, use the version of -// get_texcoords_array() method that takes a -// InternalName parameter. -//////////////////////////////////////////////////////////////////// -INLINE PTA_ushort Geom:: -get_texcoords_index() const { - return get_texcoords_index(InternalName::get_texcoord()); -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::get_texcoords_index -// Access: Published -// Description: Returns the texcoords index within the geom with the -// indicated name. This allows multitexturing support -// with multiple sets of texture coordinates in the same -// geom. The return value will be NULL if there are no -// texture coordinates with the indicated name, or if -// the geom does not use indexed texcoords. -//////////////////////////////////////////////////////////////////// -INLINE PTA_ushort Geom:: -get_texcoords_index(const InternalName *name) const { - TexCoordsByName::const_iterator tci = _texcoords_by_name.find(name); - if (tci != _texcoords_by_name.end()) { - return (*tci).second._tindex; - } - return PTA_ushort(); -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::are_texcoords_indexed -// Access: Published -// Description: Returns true if any texcoords on the Geom (and, -// therefore, all of them) are indexed, false if there -// are no texcoords on the Geom already or if the -// texcoords on the Geom are nonindexed. -//////////////////////////////////////////////////////////////////// -INLINE bool Geom:: -are_texcoords_indexed() const { - if (_texcoords_by_name.empty()) { - return false; - } - TexCoordsByName::const_iterator tci = _texcoords_by_name.begin(); - return ((*tci).second._tindex != (ushort *)NULL); -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::set_num_prims -// Access: Published -// Description: Sets the number of primitives in the Geom. The -// meaning of this depends on the precise type of Geom; -// generally, each prim is one triangle in a GeomTri, or -// one tristrip in a GeomTristrip. -//////////////////////////////////////////////////////////////////// -INLINE void Geom:: -set_num_prims(int num) { - _numprims = num; - if (!uses_components()) { - // except for strips & fans with the length arrays, total verts will be simply this - _num_vertices = _numprims*get_num_vertices_per_prim(); - } - make_dirty(); -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::get_num_prims -// Access: Published -// Description: Returns the number of primitives in the Geom. +// Description: Returns the set of GeomRendering bits that represent +// the rendering properties required to properly render +// this Geom. //////////////////////////////////////////////////////////////////// INLINE int Geom:: -get_num_prims() const { - return _numprims; +get_geom_rendering() const { + CDReader cdata(_cycler); + return cdata->_geom_rendering; } //////////////////////////////////////////////////////////////////// -// Function: Geom::set_lengths +// Function: Geom::get_usage_hint // Access: Published -// Description: Sets the array that indicates the length (number of -// vertices) of each primitive. This array should have -// get_num_prims() entries. This only has meaning for -// composite type Geoms, like a GeomTristrip; it is -// ignored for simple Geoms, like a GeomTri. +// Description: Returns the minimum (i.e. most dynamic) usage_hint +// among all of the individual GeomPrimitives that have +// been added to the geom. //////////////////////////////////////////////////////////////////// -INLINE void Geom:: -set_lengths(const PTA_int &lengths) { - _primlengths = lengths; - _num_vertices = sum_lengths(lengths); - make_dirty(); +INLINE Geom::UsageHint Geom:: +get_usage_hint() const { + CDReader cdata(_cycler); + if (!cdata->_got_usage_hint) { + CDWriter cdataw(((Geom *)this)->_cycler, cdata); + ((Geom *)this)->reset_usage_hint(cdataw); + return cdataw->_usage_hint; + } + return cdata->_usage_hint; } //////////////////////////////////////////////////////////////////// -// Function: Geom::get_lengths +// Function: Geom::get_vertex_data // Access: Published -// Description: Returns the array the indicates the length (number of -// vertices) of each primitive. This array will -// generally only be defined for composite type Geoms, -// like a GeomTristrip; it is meaningless for simple -// Geoms. +// Description: Returns a const pointer to the GeomVertexData, +// for application code to directly examine (but not +// modify) the geom's underlying data. //////////////////////////////////////////////////////////////////// -INLINE PTA_int Geom:: -get_lengths() const { - return _primlengths; +INLINE CPT(GeomVertexData) Geom:: +get_vertex_data() const { + CDReader cdata(_cycler); + return cdata->_data; } //////////////////////////////////////////////////////////////////// -// Function: Geom::get_num_vertices +// Function: Geom::get_num_primitives // Access: Published -// Description: Returns the number of vertices required by all all -// the prims in the Geom. +// Description: Returns the number of GeomPrimitive objects stored +// within the Geom, each of which represents a number of +// primitives of a particular type. //////////////////////////////////////////////////////////////////// INLINE int Geom:: -get_num_vertices() const { - return _num_vertices; -} - - - -//////////////////////////////////////////////////////////////////// -// -// make_vertex_iterator(), get_next_vertex() -// make_normal_iterator(), get_next_normal() -// make_texcoord_iterator(), get_next_texcoord() -// make_color_iterator(), get_next_color() -// -// These functions all work together to walk through the vertex (or -// normal, etc.) values associated with the Geom. Begin with a call -// to make_vertex_iterator(), which returns an iterator value suitable -// for passing to get_next_vertex(). The first call to -// get_next_vertex() returns a const Vertexf &, which is the value of -// the first vertex. Each subsequent call to get_next_vertex() will -// return the value of the next following vertex. -// -// The actual value of the vertex is returned, regardless of whether -// the vertex array is indexed or nonindexed. -// -// There is no end-of-array indicator. It is up to the caller to know -// the length of the vertex array, and stop when the end is reached. -// -// Similar behavior is exhibited for normals, texcoords, and colors. -// -//////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////// -// Function: Geom::make_vertex_iterator -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE Geom::VertexIterator Geom:: -make_vertex_iterator() const { - check_config(); - VertexIterator i; - i._array = _coords; - i._index = _vindex; - return i; +get_num_primitives() const { + CDReader cdata(_cycler); + return cdata->_primitives.size(); } //////////////////////////////////////////////////////////////////// -// Function: Geom::get_next_vertex -// Access: Public -// Description: +// Function: Geom::get_primitive +// Access: Published +// Description: Returns a const pointer to the ith GeomPrimitive +// object stored within the Geom. Use this call only to +// inspect the ith object; use modify_primitive() or +// set_primitive() if you want to modify it. //////////////////////////////////////////////////////////////////// -INLINE const Vertexf &Geom:: -get_next_vertex(VertexIterator &viterator) const { - return _get_vertex(viterator); +INLINE const GeomPrimitive *Geom:: +get_primitive(int i) const { + CDReader cdata(_cycler); + nassertr(i >= 0 && i < (int)cdata->_primitives.size(), NULL); + return cdata->_primitives[i]; } //////////////////////////////////////////////////////////////////// -// Function: Geom::make_normal_iterator -// Access: Public -// Description: +// Function: Geom::modify_primitive +// Access: Published +// Description: Returns a modifiable pointer to the ith GeomPrimitive +// object stored within the Geom, so application code +// can directly manipulate the properties of this +// primitive. //////////////////////////////////////////////////////////////////// -INLINE Geom::NormalIterator Geom:: -make_normal_iterator() const { - check_config(); - NormalIterator i; - i._array = _norms; - i._index = _nindex; - return i; -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::get_next_normal -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE const Normalf &Geom:: -get_next_normal(NormalIterator &niterator) const { - return _get_normal(niterator); -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::make_texcoord_iterator -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE Geom::TexCoordIterator Geom:: -make_texcoord_iterator() const { - return make_texcoord_iterator(InternalName::get_texcoord()); -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::make_texcoord_iterator -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE Geom::TexCoordIterator Geom:: -make_texcoord_iterator(const InternalName *texcoord_name) const { - check_config(); - TexCoordIterator i; - - TexCoordsByName::const_iterator tci = - _texcoords_by_name.find(texcoord_name); - if (tci != _texcoords_by_name.end()) { - i._array = (*tci).second._texcoords; - i._index = (*tci).second._tindex;; - } else { - i._array = NULL; - i._index = NULL; +INLINE GeomPrimitive *Geom:: +modify_primitive(int i) { + clear_cache(); + CDWriter cdata(_cycler); + nassertr(i >= 0 && i < (int)cdata->_primitives.size(), NULL); + cdata->_got_usage_hint = false; + cdata->_modified = Geom::get_next_modified(); + if (cdata->_primitives[i]->get_ref_count() > 1) { + cdata->_primitives[i] = cdata->_primitives[i]->make_copy(); } - - return i; + return cdata->_primitives[i]; } //////////////////////////////////////////////////////////////////// -// Function: Geom::get_next_texcoord +// Function: Geom::decompose +// Access: Published +// Description: Decomposes all of the primitives within this Geom, +// returning the result. See +// GeomPrimitive::decompose(). +//////////////////////////////////////////////////////////////////// +INLINE CPT(Geom) Geom:: +decompose() const { + PT(Geom) new_geom = new Geom(*this); + new_geom->decompose_in_place(); + return new_geom; +} + +//////////////////////////////////////////////////////////////////// +// Function: Geom::rotate +// Access: Published +// Description: Rotates all of the primitives within this Geom, +// returning the result. See +// GeomPrimitive::rotate(). +//////////////////////////////////////////////////////////////////// +INLINE CPT(Geom) Geom:: +rotate() const { + PT(Geom) new_geom = new Geom(*this); + new_geom->rotate_in_place(); + return new_geom; +} + +//////////////////////////////////////////////////////////////////// +// Function: Geom::unify +// Access: Published +// Description: Unifies all of the primitives contained within this +// Geom into a single primitive object. This may +// require decomposing the primitives if, for instance, +// the Geom contains both triangle strips and triangle +// fans. +//////////////////////////////////////////////////////////////////// +INLINE CPT(Geom) Geom:: +unify() const { + PT(Geom) new_geom = new Geom(*this); + new_geom->unify_in_place(); + return new_geom; +} + +//////////////////////////////////////////////////////////////////// +// Function: Geom::get_modified +// Access: Published +// Description: Returns a sequence number which is guaranteed to +// change at least every time any of the primitives in +// the Geom is modified, or the set of primitives is +// modified. However, this does not include +// modifications to the vertex data, which should be +// tested separately. +//////////////////////////////////////////////////////////////////// +INLINE UpdateSeq Geom:: +get_modified() const { + CDReader cdata(_cycler); + return cdata->_modified; +} + +//////////////////////////////////////////////////////////////////// +// Function: Geom::calc_tight_bounds +// Access: Public, Virtual +// Description: Expands min_point and max_point to include all of the +// vertices in the Geom, if any. found_any is set true +// if any points are found. It is the caller's +// responsibility to initialize min_point, max_point, +// and found_any before calling this function. +// +// This version of the method assumes the Geom will use +// its own vertex data, and the results are computed in +// the Geom's own coordinate space. +//////////////////////////////////////////////////////////////////// +INLINE void Geom:: +calc_tight_bounds(LPoint3f &min_point, LPoint3f &max_point, + bool &found_any) const { + calc_tight_bounds(min_point, max_point, found_any, + get_vertex_data(), false, LMatrix4f::ident_mat()); +} + +//////////////////////////////////////////////////////////////////// +// Function: Geom::CacheEntry::Constructor +// Access: Public +// Description: +//////////////////////////////////////////////////////////////////// +INLINE Geom::CacheEntry:: +CacheEntry(const GeomVertexData *source_data, const GeomMunger *modifier) : + _source(NULL), + _source_data(source_data), + _modifier(modifier), + _geom_result(NULL), + _data_result(NULL) +{ +} + +//////////////////////////////////////////////////////////////////// +// Function: Geom::CacheEntry::Constructor +// Access: Public +// Description: +//////////////////////////////////////////////////////////////////// +INLINE Geom::CacheEntry:: +CacheEntry(Geom *source, const GeomVertexData *source_data, + const GeomMunger *modifier, const Geom *geom_result, + const GeomVertexData *data_result) : + _source(source), + _source_data(source_data), + _modifier(modifier), + _geom_result(geom_result), + _data_result(data_result) +{ + if (_geom_result != _source) { + _geom_result->ref(); + } +} + +//////////////////////////////////////////////////////////////////// +// Function: Geom::CacheEntry::operator < +// Access: Public +// Description: Provides a unique ordering within the set. +//////////////////////////////////////////////////////////////////// +INLINE bool Geom::CacheEntry:: +operator < (const CacheEntry &other) const { + if (_modifier != other._modifier) { + int compare = _modifier->geom_compare_to(*other._modifier); + if (compare != 0) { + return (compare < 0); + } + } + if (_source_data != other._source_data) { + return (_source_data < other._source_data); + } + return 0; +} + + +//////////////////////////////////////////////////////////////////// +// Function: Geom::CData::Constructor // Access: Public // Description: //////////////////////////////////////////////////////////////////// -INLINE const TexCoordf &Geom:: -get_next_texcoord(TexCoordIterator &tciterator) const { - return _get_texcoord(tciterator); +INLINE Geom::CData:: +CData() : + _primitive_type(PT_none), + _shade_model(SM_uniform), + _geom_rendering(0), + _usage_hint(UH_unspecified), + _got_usage_hint(false) +{ } //////////////////////////////////////////////////////////////////// -// Function: Geom::get_next_texcoord +// Function: Geom::CData::Copy Constructor // Access: Public // Description: //////////////////////////////////////////////////////////////////// -INLINE const TexCoordf &Geom:: -get_next_multitexcoord(MultiTexCoordIterator &tciterator, int n) const { - return _get_texcoord(tciterator._stages[n]); +INLINE Geom::CData:: +CData(const Geom::CData ©) : + _data(copy._data), + _primitives(copy._primitives), + _primitive_type(copy._primitive_type), + _shade_model(copy._shade_model), + _geom_rendering(copy._geom_rendering), + _usage_hint(copy._usage_hint), + _got_usage_hint(copy._got_usage_hint), + _modified(copy._modified) +{ } -//////////////////////////////////////////////////////////////////// -// Function: Geom::make_color_iterator -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE Geom::ColorIterator Geom:: -make_color_iterator() const { - check_config(); - ColorIterator i; - i._array = _colors; - i._index = _cindex; - return i; -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::get_next_color -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE const Colorf &Geom:: -get_next_color(ColorIterator &citerator) const { - return _get_color(citerator); +INLINE ostream & +operator << (ostream &out, const Geom &obj) { + obj.output(out); + return out; } diff --git a/panda/src/gobj/geom.cxx b/panda/src/gobj/geom.cxx index e5c9d52c89..3a759e73e9 100644 --- a/panda/src/gobj/geom.cxx +++ b/panda/src/gobj/geom.cxx @@ -1,5 +1,5 @@ // Filename: geom.cxx -// Created by: mike (09Jan97) +// Created by: drose (06Mar05) // //////////////////////////////////////////////////////////////////// // @@ -17,288 +17,559 @@ //////////////////////////////////////////////////////////////////// #include "geom.h" -#include "config_gobj.h" - +#include "geomPoints.h" +#include "geomVertexReader.h" +#include "geomVertexRewriter.h" #include "graphicsStateGuardianBase.h" -#include "geometricBoundingVolume.h" -#include "datagram.h" -#include "datagramIterator.h" +#include "preparedGraphicsObjects.h" +#include "pStatTimer.h" #include "bamReader.h" #include "bamWriter.h" -#include "ioPtaDatagramShort.h" -#include "ioPtaDatagramInt.h" -#include "ioPtaDatagramLinMath.h" -#include "preparedGraphicsObjects.h" -#include "indent.h" - -//////////////////////////////////////////////////////////////////// -// Static variables -//////////////////////////////////////////////////////////////////// +UpdateSeq Geom::_next_modified; TypeHandle Geom::_type_handle; -//////////////////////////////////////////////////////////////////// -// Function: get_*_nonindexed -// Description: Retrieves the next component of the nonindexed array. -//////////////////////////////////////////////////////////////////// -static const Vertexf &get_vertex_nonindexed(Geom::VertexIterator &vi) { - return *(vi._array++); -} -static const Normalf &get_normal_nonindexed(Geom::NormalIterator &vi) { - return *(vi._array++); -} -static const TexCoordf &get_texcoord_nonindexed(Geom::TexCoordIterator &vi) { - return *(vi._array++); -} -static const Colorf &get_color_nonindexed(Geom::ColorIterator &vi) { - return *(vi._array++); -} - -//////////////////////////////////////////////////////////////////// -// Function: get_*_indexed -// Description: Retrieves the next component of the indexed array. -//////////////////////////////////////////////////////////////////// -static const Vertexf &get_vertex_indexed(Geom::VertexIterator &vi) { - return vi._array[*(vi._index++)]; -} -static const Normalf &get_normal_indexed(Geom::NormalIterator &vi) { - return vi._array[*(vi._index++)]; -} -static const TexCoordf &get_texcoord_indexed(Geom::TexCoordIterator &vi) { - return vi._array[*(vi._index++)]; -} -static const Colorf &get_color_indexed(Geom::ColorIterator &vi) { - return vi._array[*(vi._index++)]; -} - -//////////////////////////////////////////////////////////////////// -// Function: get_*_noop -// Description: Doesn't retrieve anything at all. -//////////////////////////////////////////////////////////////////// -static const Vertexf &get_vertex_noop(Geom::VertexIterator &) { - static Vertexf nothing; - return nothing; -} -static const Normalf &get_normal_noop(Geom::NormalIterator &) { - static Normalf nothing; - return nothing; -} -static const TexCoordf &get_texcoord_noop(Geom::TexCoordIterator &) { - static TexCoordf nothing; - return nothing; -} -static const Colorf &get_color_noop(Geom::ColorIterator &) { - static Colorf nothing; - return nothing; -} - - -//////////////////////////////////////////////////////////////////// -// Function: GeomBindType output operator -// Description: -//////////////////////////////////////////////////////////////////// -ostream &operator << (ostream &out, GeomBindType t) { - switch (t) { - case G_OFF: - return out << "off"; - case G_OVERALL: - return out << "overall"; - case G_PER_PRIM: - return out << "per prim"; - case G_PER_COMPONENT: - return out << "per component"; - case G_PER_VERTEX: - return out << "per vertex"; - } - return out << "(**invalid**)"; -} - - -//////////////////////////////////////////////////////////////////// -// Function: GeomAttrType output operator -// Description: -//////////////////////////////////////////////////////////////////// -ostream &operator << (ostream &out, GeomAttrType t) { - switch (t) { - case G_COORD: - return out << "coord"; - case G_COLOR: - return out << "color"; - case G_NORMAL: - return out << "normal"; - case G_TEXCOORD: - return out << "texcoord"; - } - return out << "(**invalid**)"; -} - -//////////////////////////////////////////////////////////////////// -// Function: describe_attr -// Description: A handy helper function for output_verbose, -// below. -//////////////////////////////////////////////////////////////////// -template -static void -describe_attr(ostream &out, const Geom *geom, - GeomBindType bind, const PTA(VecType) &array, - bool newline, int indent_level) { - PTA_int lengths = geom->get_lengths(); - int num_prims = geom->get_num_prims(); - bool components = geom->uses_components(); - - int i, j, vi; - switch (bind) { - case G_PER_VERTEX: - indent(out, indent_level) - << "Per vertex:"; - vi = 0; - int num_verts; - num_verts = geom->get_num_vertices_per_prim(); - for (i = 0; i < num_prims; i++) { - if (components) { - num_verts = lengths[i]; - } - out << "\n"; - indent(out, indent_level) << "[ "; - if (num_verts > 0) { - out << array[vi++]; - for (j = 1; j < num_verts; j++) { - if (newline) { - out << "\n"; - indent(out, indent_level + 2); - } else { - out << " "; - } - out << array[vi++]; - } - } - out << " ]"; - } - break; - - case G_PER_COMPONENT: - if (!components) { - indent(out, indent_level) - << "Invalid per-component attribute specified!"; - } else { - indent(out, indent_level) - << "Per component:"; - vi = 0; - for (i = 0; i < num_prims; i++) { - num_verts = lengths[i] - geom->get_num_more_vertices_than_components(); - out << "\n"; - indent(out, indent_level) << "[ "; - if (num_verts > 0) { - out << array[vi++]; - for (j = 1; j < num_verts; j++) { - if (newline) { - out << "\n"; - indent(out, indent_level + 2); - } else { - out << " "; - } - out << array[vi++]; - } - out << " ]"; - } - } - } - break; - - case G_PER_PRIM: - indent(out, indent_level) - << "Per prim:"; - for (i = 0; i < num_prims; i++) { - if (newline) { - out << "\n"; - indent(out, indent_level + 2); - } else { - out << " "; - } - out << array[i]; - } - break; - - case G_OVERALL: - indent(out, indent_level) - << "Overall:"; - if (newline) { - out << "\n"; - indent(out, indent_level + 2); - } else { - out << " "; - } - out << array[0]; - - case G_OFF: - break; - } - out << "\n"; -} - //////////////////////////////////////////////////////////////////// // Function: Geom::Constructor -// Access: Public -// Description: +// Access: Published +// Description: //////////////////////////////////////////////////////////////////// Geom:: Geom() { - _all_dirty_flags = 0; - init(); } //////////////////////////////////////////////////////////////////// // Function: Geom::Copy Constructor -// Access: Public -// Description: +// Access: Published +// Description: //////////////////////////////////////////////////////////////////// Geom:: -Geom(const Geom ©) : dDrawable() { - _all_dirty_flags = 0; - *this = copy; +Geom(const Geom ©) : + TypedWritableReferenceCount(copy), + BoundedObject(copy), + _cycler(copy._cycler) +{ } //////////////////////////////////////////////////////////////////// -// Function: Geom::Destructor -// Access: Public, Virtual -// Description: -//////////////////////////////////////////////////////////////////// -Geom:: -~Geom() { - release_all(); -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::Copy assignment operator -// Access: Public +// Function: Geom::Copy Assignment Operator +// Access: Published // Description: //////////////////////////////////////////////////////////////////// void Geom:: operator = (const Geom ©) { - _coords = copy._coords; - _norms = copy._norms; - _colors = copy._colors; + TypedWritableReferenceCount::operator = (copy); + BoundedObject::operator = (copy); + clear_cache(); + _cycler = copy._cycler; + mark_bound_stale(); +} - _vindex = copy._vindex; - _nindex = copy._nindex; - _cindex = copy._cindex; - - _texcoords_by_name = copy._texcoords_by_name; - - _numprims = copy._numprims; - _num_vertices = copy._num_vertices; - _primlengths = copy._primlengths; - for (int i = 0; i < num_GeomAttrTypes; i++) { - _bind[i] = copy._bind[i]; +//////////////////////////////////////////////////////////////////// +// Function: Geom::Destructor +// Access: Published, Virtual +// Description: +//////////////////////////////////////////////////////////////////// +Geom:: +~Geom() { + // When we destruct, we should ensure that all of our cached + // entries, across all pipeline stages, are properly removed from + // the cache manager. + int num_stages = _cycler.get_num_stages(); + for (int i = 0; i < num_stages; i++) { + if (_cycler.is_stage_unique(i)) { + CData *cdata = _cycler.write_stage(i); + for (Cache::iterator ci = cdata->_cache.begin(); + ci != cdata->_cache.end(); + ++ci) { + CacheEntry *entry = (*ci); + entry->erase(); + } + cdata->_cache.clear(); + _cycler.release_write_stage(i, cdata); + } } - _get_vertex = copy._get_vertex; - _get_normal = copy._get_normal; - _get_color = copy._get_color; - _get_texcoord = copy._get_texcoord; + release_all(); +} +//////////////////////////////////////////////////////////////////// +// Function: Geom::set_usage_hint +// Access: Published +// Description: Changes the UsageHint hint for all of the primitives +// on this Geom to the same value. See +// get_usage_hint(). +//////////////////////////////////////////////////////////////////// +void Geom:: +set_usage_hint(Geom::UsageHint usage_hint) { + clear_cache(); + CDWriter cdata(_cycler); + cdata->_usage_hint = usage_hint; + + Primitives::iterator pi; + for (pi = cdata->_primitives.begin(); pi != cdata->_primitives.end(); ++pi) { + if ((*pi)->get_ref_count() > 1) { + (*pi) = (*pi)->make_copy(); + } + (*pi)->set_usage_hint(usage_hint); + } + + cdata->_modified = Geom::get_next_modified(); +} + +//////////////////////////////////////////////////////////////////// +// Function: Geom::modify_vertex_data +// Access: Published +// Description: Returns a modifiable pointer to the GeomVertexData, +// so that application code may directly maniuplate the +// geom's underlying data. +//////////////////////////////////////////////////////////////////// +PT(GeomVertexData) Geom:: +modify_vertex_data() { + // Perform copy-on-write: if the reference count on the vertex data + // is greater than 1, assume some other Geom has the same pointer, + // so make a copy of it first. + clear_cache(); + CDWriter cdata(_cycler); + if (cdata->_data->get_ref_count() > 1) { + cdata->_data = new GeomVertexData(*cdata->_data); + } mark_bound_stale(); - make_dirty(); + return cdata->_data; +} + +//////////////////////////////////////////////////////////////////// +// Function: Geom::set_vertex_data +// Access: Published +// Description: Replaces the Geom's underlying vertex data table with +// a completely new table. +//////////////////////////////////////////////////////////////////// +void Geom:: +set_vertex_data(const GeomVertexData *data) { + nassertv(check_will_be_valid(data)); + clear_cache(); + CDWriter cdata(_cycler); + cdata->_data = (GeomVertexData *)data; + mark_bound_stale(); + reset_geom_rendering(cdata); +} + +//////////////////////////////////////////////////////////////////// +// Function: Geom::offset_vertices +// Access: Published +// Description: Replaces a Geom's vertex table with a new table, and +// simultaneously adds the indicated offset to all +// vertex references within the Geom's primitives. This +// is intended to be used to combine multiple +// GeomVertexDatas from different Geoms into a single +// big buffer, with each Geom referencing a subset of +// the vertices in the buffer. +//////////////////////////////////////////////////////////////////// +void Geom:: +offset_vertices(const GeomVertexData *data, int offset) { + clear_cache(); + CDWriter cdata(_cycler); + cdata->_data = (GeomVertexData *)data; + +#ifndef NDEBUG + bool all_is_valid = true; +#endif + Primitives::iterator pi; + for (pi = cdata->_primitives.begin(); pi != cdata->_primitives.end(); ++pi) { + if ((*pi)->get_ref_count() > 1) { + (*pi) = (*pi)->make_copy(); + } + (*pi)->offset_vertices(offset); + +#ifndef NDEBUG + if (!(*pi)->check_valid(data)) { + all_is_valid = false; + } +#endif + } + + cdata->_modified = Geom::get_next_modified(); + nassertv(all_is_valid); +} + +//////////////////////////////////////////////////////////////////// +// Function: Geom::make_nonindexed +// Access: Published +// Description: Converts the geom from indexed to nonindexed by +// duplicating vertices as necessary. If composite_only +// is true, then only composite primitives such as +// trifans and tristrips are converted. Returns the +// number of GeomPrimitive objects converted. +//////////////////////////////////////////////////////////////////// +int Geom:: +make_nonindexed(bool composite_only) { + int num_changed = 0; + + clear_cache(); + CDWriter cdata(_cycler); + CPT(GeomVertexData) orig_data = cdata->_data; + PT(GeomVertexData) new_data = new GeomVertexData(*cdata->_data); + new_data->clear_rows(); + +#ifndef NDEBUG + bool all_is_valid = true; +#endif + Primitives::iterator pi; + Primitives new_prims; + new_prims.reserve(cdata->_primitives.size()); + for (pi = cdata->_primitives.begin(); pi != cdata->_primitives.end(); ++pi) { + PT(GeomPrimitive) primitive = (*pi)->make_copy(); + new_prims.push_back(primitive); + + // GeomPoints are considered "composite" for the purposes of + // making nonindexed, since there's no particular advantage to + // having indexed points (as opposed to, say, indexed triangles or + // indexed lines). + if (primitive->is_indexed() && + (primitive->is_composite() || + primitive->is_exact_type(GeomPoints::get_class_type()) || + !composite_only)) { + primitive->make_nonindexed(new_data, orig_data); + ++num_changed; + } else { + // If it's a simple primitive, pack it anyway, so it can share + // the same GeomVertexData. + primitive->pack_vertices(new_data, orig_data); + } + +#ifndef NDEBUG + if (!primitive->check_valid(new_data)) { + all_is_valid = false; + } +#endif + } + + nassertr(all_is_valid, 0); + + if (num_changed != 0) { + // If any at all were changed, then keep the result (otherwise, + // discard it, since we might have de-optimized the indexed + // geometry a bit). + cdata->_data = new_data; + cdata->_primitives.swap(new_prims); + cdata->_modified = Geom::get_next_modified(); + } + + return num_changed; +} + +//////////////////////////////////////////////////////////////////// +// Function: Geom::set_primitive +// Access: Published +// Description: Replaces the ith GeomPrimitive object stored within +// the Geom with the new object. +//////////////////////////////////////////////////////////////////// +void Geom:: +set_primitive(int i, const GeomPrimitive *primitive) { + clear_cache(); + CDWriter cdata(_cycler); + nassertv(i >= 0 && i < (int)cdata->_primitives.size()); + nassertv(primitive->check_valid(cdata->_data)); + + // All primitives within a particular Geom must have the same + // fundamental primitive type (triangles, points, or lines). + nassertv(cdata->_primitive_type == PT_none || + cdata->_primitive_type == primitive->get_primitive_type()); + + // They also should have the a compatible shade model. + CPT(GeomPrimitive) compat = primitive->match_shade_model(cdata->_shade_model); + nassertv_always(compat != (GeomPrimitive *)NULL); + + cdata->_primitives[i] = (GeomPrimitive *)compat.p(); + PrimitiveType new_primitive_type = compat->get_primitive_type(); + if (new_primitive_type != cdata->_primitive_type) { + cdata->_primitive_type = new_primitive_type; + } + ShadeModel new_shade_model = compat->get_shade_model(); + if (new_shade_model != cdata->_shade_model && + new_shade_model != SM_uniform) { + cdata->_shade_model = new_shade_model; + } + + reset_geom_rendering(cdata); + cdata->_got_usage_hint = false; + cdata->_modified = Geom::get_next_modified(); +} + +//////////////////////////////////////////////////////////////////// +// Function: Geom::add_primitive +// Access: Published +// Description: Adds a new GeomPrimitive structure to the Geom +// object. This specifies a particular subset of +// vertices that are used to define geometric primitives +// of the indicated type. +//////////////////////////////////////////////////////////////////// +void Geom:: +add_primitive(const GeomPrimitive *primitive) { + clear_cache(); + CDWriter cdata(_cycler); + + nassertv(primitive->check_valid(cdata->_data)); + + // All primitives within a particular Geom must have the same + // fundamental primitive type (triangles, points, or lines). + nassertv(cdata->_primitive_type == PT_none || + cdata->_primitive_type == primitive->get_primitive_type()); + + // They also should have the a compatible shade model. + CPT(GeomPrimitive) compat = primitive->match_shade_model(cdata->_shade_model); + nassertv_always(compat != (GeomPrimitive *)NULL); + + cdata->_primitives.push_back((GeomPrimitive *)compat.p()); + PrimitiveType new_primitive_type = compat->get_primitive_type(); + if (new_primitive_type != cdata->_primitive_type) { + cdata->_primitive_type = new_primitive_type; + } + ShadeModel new_shade_model = compat->get_shade_model(); + if (new_shade_model != cdata->_shade_model && + new_shade_model != SM_uniform) { + cdata->_shade_model = new_shade_model; + } + + reset_geom_rendering(cdata); + cdata->_got_usage_hint = false; + cdata->_modified = Geom::get_next_modified(); +} + +//////////////////////////////////////////////////////////////////// +// Function: Geom::remove_primitive +// Access: Published +// Description: Removes the ith primitive from the list. +//////////////////////////////////////////////////////////////////// +void Geom:: +remove_primitive(int i) { + clear_cache(); + CDWriter cdata(_cycler); + nassertv(i >= 0 && i < (int)cdata->_primitives.size()); + cdata->_primitives.erase(cdata->_primitives.begin() + i); + if (cdata->_primitives.empty()) { + cdata->_primitive_type = PT_none; + cdata->_shade_model = SM_uniform; + } + reset_geom_rendering(cdata); + cdata->_got_usage_hint = false; + cdata->_modified = Geom::get_next_modified(); +} + +//////////////////////////////////////////////////////////////////// +// Function: Geom::clear_primitives +// Access: Published +// Description: Removes all the primitives from the Geom object (but +// keeps the same table of vertices). You may then +// re-add primitives one at a time via calls to +// add_primitive(). +//////////////////////////////////////////////////////////////////// +void Geom:: +clear_primitives() { + clear_cache(); + CDWriter cdata(_cycler); + cdata->_primitives.clear(); + cdata->_primitive_type = PT_none; + cdata->_shade_model = SM_uniform; + reset_geom_rendering(cdata); +} + +//////////////////////////////////////////////////////////////////// +// Function: Geom::decompose_in_place +// Access: Published +// Description: Decomposes all of the primitives within this Geom, +// leaving the results in place. See +// GeomPrimitive::decompose(). +//////////////////////////////////////////////////////////////////// +void Geom:: +decompose_in_place() { + clear_cache(); + CDWriter cdata(_cycler); + +#ifndef NDEBUG + bool all_is_valid = true; +#endif + Primitives::iterator pi; + for (pi = cdata->_primitives.begin(); pi != cdata->_primitives.end(); ++pi) { + CPT(GeomPrimitive) new_prim = (*pi)->decompose(); + (*pi) = (GeomPrimitive *)new_prim.p(); + +#ifndef NDEBUG + if (!(*pi)->check_valid(cdata->_data)) { + all_is_valid = false; + } +#endif + } + + cdata->_modified = Geom::get_next_modified(); + reset_geom_rendering(cdata); + + nassertv(all_is_valid); +} + +//////////////////////////////////////////////////////////////////// +// Function: Geom::rotate_in_place +// Access: Published +// Description: Rotates all of the primitives within this Geom, +// leaving the results in place. See +// GeomPrimitive::rotate(). +//////////////////////////////////////////////////////////////////// +void Geom:: +rotate_in_place() { + clear_cache(); + CDWriter cdata(_cycler); + +#ifndef NDEBUG + bool all_is_valid = true; +#endif + Primitives::iterator pi; + for (pi = cdata->_primitives.begin(); pi != cdata->_primitives.end(); ++pi) { + CPT(GeomPrimitive) new_prim = (*pi)->rotate(); + (*pi) = (GeomPrimitive *)new_prim.p(); + +#ifndef NDEBUG + if (!(*pi)->check_valid(cdata->_data)) { + all_is_valid = false; + } +#endif + } + + cdata->_modified = Geom::get_next_modified(); + + nassertv(all_is_valid); +} + +//////////////////////////////////////////////////////////////////// +// Function: Geom::unify_in_place +// Access: Published +// Description: Unifies all of the primitives contained within this +// Geom into a single primitive object. This may +// require decomposing the primitives if, for instance, +// the Geom contains both triangle strips and triangle +// fans. +//////////////////////////////////////////////////////////////////// +void Geom:: +unify_in_place() { + if (get_num_primitives() <= 1) { + // If we don't have more than one primitive to start with, no need + // to do anything. + return; + } + + clear_cache(); + CDWriter cdata(_cycler); + + PT(GeomPrimitive) new_prim; + + Primitives::const_iterator pi; + for (pi = cdata->_primitives.begin(); pi != cdata->_primitives.end(); ++pi) { + CPT(GeomPrimitive) primitive = (*pi); + if (new_prim == (GeomPrimitive *)NULL) { + // The first primitive type we come across is copied directly. + new_prim = primitive->make_copy(); + } else { + // Thereafter, we must try to merge primitives. If they are not + // the same type, we have to decompose both of them. + if (new_prim->get_type() != primitive->get_type()) { + CPT(GeomPrimitive) decomposed = new_prim->decompose(); + new_prim = (GeomPrimitive *)decomposed.p(); + primitive = primitive->decompose(); + + nassertv(new_prim->get_type() == primitive->get_type()); + } + + // Now simply copy in the vertices. + int num_primitives = primitive->get_num_primitives(); + for (int pi = 0; pi < num_primitives; ++pi) { + int start = primitive->get_primitive_start(pi); + int end = primitive->get_primitive_end(pi); + for (int vi = start; vi < end; ++vi) { + new_prim->add_vertex(primitive->get_vertex(vi)); + } + new_prim->close_primitive(); + } + } + } + + // At the end of the day, we have just one primitive, which becomes + // the one primitive in our list of primitives. + nassertv(new_prim->check_valid(cdata->_data)); + + // The new primitive, naturally, inherits the Geom's overall shade + // model. + new_prim->set_shade_model(cdata->_shade_model); + + cdata->_primitives.clear(); + cdata->_primitives.push_back(new_prim); + + cdata->_modified = Geom::get_next_modified(); + reset_geom_rendering(cdata); +} + + +//////////////////////////////////////////////////////////////////// +// Function: Geom::copy_primitives_from +// Access: Published +// Description: Copies the primitives from the indicated Geom into +// this one. This does require that both Geoms contain +// the same fundamental type primitives, both have a +// compatible shade model, and both use the same +// GeomVertexData. +// +// Returns true if the copy is successful, or false +// otherwise (because the Geoms were mismatched). +//////////////////////////////////////////////////////////////////// +bool Geom:: +copy_primitives_from(const Geom *other) { + if (get_primitive_type() != PT_none && + other->get_primitive_type() != get_primitive_type()) { + return false; + } + if (get_vertex_data() != other->get_vertex_data()) { + return false; + } + + ShadeModel this_shade_model = get_shade_model(); + ShadeModel other_shade_model = other->get_shade_model(); + if (this_shade_model != SM_uniform && other_shade_model != SM_uniform && + this_shade_model != other_shade_model) { + if ((this_shade_model == SM_flat_first_vertex && other_shade_model == SM_flat_last_vertex) || + (this_shade_model == SM_flat_last_vertex && other_shade_model == SM_flat_first_vertex)) { + // This is acceptable; we can rotate the primitives to match. + + } else { + // Otherwise, we have incompatible shade models. + return false; + } + } + + int num_primitives = other->get_num_primitives(); + for (int i = 0; i < num_primitives; i++) { + add_primitive(other->get_primitive(i)); + } + + return true; +} + +//////////////////////////////////////////////////////////////////// +// Function: Geom::get_num_bytes +// Access: Published +// Description: Returns the number of bytes consumed by the geom and +// its primitives (but not including its vertex table). +//////////////////////////////////////////////////////////////////// +int Geom:: +get_num_bytes() const { + CDReader cdata(_cycler); + + int num_bytes = sizeof(Geom); + Primitives::const_iterator pi; + for (pi = cdata->_primitives.begin(); + pi != cdata->_primitives.end(); + ++pi) { + num_bytes += (*pi)->get_num_bytes(); + } + + return num_bytes; } //////////////////////////////////////////////////////////////////// @@ -316,267 +587,116 @@ operator = (const Geom ©) { //////////////////////////////////////////////////////////////////// void Geom:: transform_vertices(const LMatrix4f &mat) { - PTA_Vertexf coords; - PTA_ushort index; - get_coords(coords, index); - PTA_Vertexf new_coords; - new_coords.reserve(coords.size()); - PTA_Vertexf::const_iterator vi; - for (vi = coords.begin(); vi != coords.end(); ++vi) { - new_coords.push_back((*vi) * mat); + PT(GeomVertexData) new_data = modify_vertex_data(); + CPT(GeomVertexFormat) format = new_data->get_format(); + + int ci; + for (ci = 0; ci < format->get_num_points(); ci++) { + GeomVertexRewriter data(new_data, format->get_point(ci)); + + while (!data.is_at_end()) { + const LPoint3f &point = data.get_data3f(); + data.set_data3f(point * mat); + } + } + for (ci = 0; ci < format->get_num_vectors(); ci++) { + GeomVertexRewriter data(new_data, format->get_vector(ci)); + + while (!data.is_at_end()) { + const LVector3f &vector = data.get_data3f(); + data.set_data3f(normalize(vector * mat)); + } } - nassertv(new_coords.size() == coords.size()); - set_coords(new_coords, index); } //////////////////////////////////////////////////////////////////// // Function: Geom::check_valid // Access: Published -// Description: This is only here temporarily; it has meaning at the -// qpGeom level. +// Description: Verifies that the all of the primitives within the +// geom reference vertices that actually exist within +// the geom's GeomVertexData. Returns true if the geom +// appears to be valid, false otherwise. //////////////////////////////////////////////////////////////////// bool Geom:: check_valid() const { + CDReader cdata(_cycler); + + Primitives::const_iterator pi; + for (pi = cdata->_primitives.begin(); + pi != cdata->_primitives.end(); + ++pi) { + if (!(*pi)->check_valid(cdata->_data)) { + return false; + } + } + return true; } //////////////////////////////////////////////////////////////////// -// Function: Geom::set_coords +// Function: Geom::output // Access: Published -// Description: +// Description: //////////////////////////////////////////////////////////////////// void Geom:: -set_coords(const PTA_Vertexf &coords, - const PTA_ushort &vindex) { - _coords = coords; - _bind[G_COORD] = G_PER_VERTEX; - _vindex = vindex; +output(ostream &out) const { + CDReader cdata(_cycler); - mark_bound_stale(); - make_dirty(); + // Get a list of the primitive types contained within this object. + int num_faces = 0; + pset types; + Primitives::const_iterator pi; + for (pi = cdata->_primitives.begin(); + pi != cdata->_primitives.end(); + ++pi) { + num_faces += (*pi)->get_num_faces(); + types.insert((*pi)->get_type()); + } + + out << "Geom ["; + pset::iterator ti; + for (ti = types.begin(); ti != types.end(); ++ti) { + out << " " << (*ti); + } + out << " ], " << num_faces << " faces"; } //////////////////////////////////////////////////////////////////// -// Function: Geom::set_coords +// Function: Geom::write // Access: Published -// Description: +// Description: //////////////////////////////////////////////////////////////////// void Geom:: -set_coords(const PTA_Vertexf &coords, GeomBindType bind, - const PTA_ushort &vindex) { - nassertv(bind==G_PER_VERTEX); - set_coords(coords, vindex); -} +write(ostream &out, int indent_level) const { + CDReader cdata(_cycler); -//////////////////////////////////////////////////////////////////// -// Function: Geom::set_normals -// Access: Published -// Description: -//////////////////////////////////////////////////////////////////// -void Geom:: -set_normals(const PTA_Normalf &norms, GeomBindType bind, - const PTA_ushort &nindex) { - _norms = norms; - _bind[G_NORMAL] = bind; - _nindex = nindex; - - make_dirty(); -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::set_colors -// Access: Published -// Description: -//////////////////////////////////////////////////////////////////// -void Geom:: -set_colors(const PTA_Colorf &colors, GeomBindType bind, - const PTA_ushort &cindex) { - _colors = colors; - _bind[G_COLOR] = bind; - _cindex = cindex; - - make_dirty(); -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::set_texcoords -// Access: Published -// Description: This single-texturing version of set_texcoords() only -// changes the default texcoords name. Use the version -// of set_texcoords() that takes a InternalName -// parameter to set up different texture coordinates for -// different stages of a multitexture pipeline. -//////////////////////////////////////////////////////////////////// -void Geom:: -set_texcoords(const PTA_TexCoordf &texcoords, GeomBindType bind, - const PTA_ushort &tindex) { - nassertv(bind == G_PER_VERTEX || bind == G_OFF); - - if (bind == G_OFF) { - remove_texcoords(InternalName::get_texcoord()); - } else { - set_texcoords(InternalName::get_texcoord(), texcoords, tindex); + // Get a list of the primitive types contained within this object. + Primitives::const_iterator pi; + for (pi = cdata->_primitives.begin(); + pi != cdata->_primitives.end(); + ++pi) { + (*pi)->write(out, indent_level); } } //////////////////////////////////////////////////////////////////// -// Function: Geom::set_texcoords +// Function: Geom::clear_cache // Access: Published -// Description: Sets the texture coordinates for a particular name of -// the pipeline. This implicitly sets the binding of -// these texture coordinates to G_PER_VERTEX. See also -// remove_texcoords(). +// Description: Removes all of the previously-cached results of +// munge_geom(). //////////////////////////////////////////////////////////////////// void Geom:: -set_texcoords(const InternalName *name, const PTA_TexCoordf &texcoords, - const PTA_ushort &tindex) { - nassertv(name != (InternalName *)NULL); - -#ifndef NDEBUG - // All of the texture coordinates must be either nonindexed, or all - // must be indexed. If there are already (different) texture - // coordinates set on the Geom, then ensure this is so. - remove_texcoords(name); - if (!_texcoords_by_name.empty()) { - TexCoordDef &def = (*_texcoords_by_name.begin()).second; - bool previous_is_indexed = (def._tindex != (ushort *)NULL); - bool this_is_indexed = (tindex != (ushort *)NULL); - nassertv(this_is_indexed == previous_is_indexed); +clear_cache() { + // Probably we shouldn't do anything at all here unless we are + // running in pipeline stage 0. + CData *cdata = CDWriter(_cycler); + for (Cache::iterator ci = cdata->_cache.begin(); + ci != cdata->_cache.end(); + ++ci) { + CacheEntry *entry = (*ci); + entry->erase(); } -#endif - - TexCoordDef &def = _texcoords_by_name[name]; - def._texcoords = texcoords; - def._tindex = tindex; - - if (name == InternalName::get_texcoord()) { - _bind[G_TEXCOORD] = G_PER_VERTEX; - } - - make_dirty(); -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::remove_texcoords -// Access: Published -// Description: Removes the texture coordinates for a particular name -// of the pipeline. This implicitly sets the binding of -// these texture coordinates to G_OFF. See also -// set_texcoords(). -//////////////////////////////////////////////////////////////////// -void Geom:: -remove_texcoords(const InternalName *name) { - _texcoords_by_name.erase(name); - - if (name == InternalName::get_texcoord()) { - _bind[G_TEXCOORD] = G_OFF; - } - - make_dirty(); -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::get_coords -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -void Geom:: -get_coords(PTA_Vertexf &coords, PTA_ushort &vindex) const { - coords = _coords; - vindex = _vindex; - - // G_PER_VERTEX is implicit binding -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::get_coords -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -void Geom:: -get_coords(PTA_Vertexf &coords, GeomBindType &bind, - PTA_ushort &vindex) const { - coords = _coords; - bind = _bind[G_COORD]; - vindex = _vindex; -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::get_normals -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -void Geom:: -get_normals(PTA_Normalf &norms, GeomBindType &bind, - PTA_ushort &nindex) const { - norms = _norms; - bind = _bind[G_NORMAL]; - nindex = _nindex; -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::get_colors -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -void Geom:: -get_colors(PTA_Colorf &colors, GeomBindType &bind, - PTA_ushort &cindex) const { - colors = _colors; - bind = _bind[G_COLOR]; - cindex = _cindex; -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::get_texcoords -// Access: Public -// Description: Returns the texcoords associated with the default -// name only. See has_texcoords(), -// get_texcoords_array(), and get_texcoords_index() to -// get the texcoords associated with an arbitrary name -// of a multitexture pipeline. -//////////////////////////////////////////////////////////////////// -void Geom:: -get_texcoords(PTA_TexCoordf &texcoords, GeomBindType &bind, - PTA_ushort &tindex) const { - TexCoordsByName::const_iterator tci = - _texcoords_by_name.find(InternalName::get_texcoord()); - if (tci != _texcoords_by_name.end()) { - const TexCoordDef &def = (*tci).second; - texcoords = def._texcoords; - bind = G_PER_VERTEX; - tindex = def._tindex; - } else { - texcoords.clear(); - bind = G_OFF; - tindex.clear(); - } -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::is_dynamic -// Access: Published, Virtual -// Description: Returns true if the Geom has any dynamic properties -// that are expected to change from one frame to the -// next, or false if the Geom is largely static. For -// now, this is the same thing as asking whether its -// vertices are indexed. -//////////////////////////////////////////////////////////////////// -bool Geom:: -is_dynamic() const { - return (_vindex != (ushort*)0L); -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::is_qpgeom -// Access: Published, Virtual -// Description: Returns true if this is a new-style qpGeom class, -// false otherwise. Temporary until the experimental -// Geom rewrite becomes the actual Geom implementation. -//////////////////////////////////////////////////////////////////// -bool Geom:: -is_qpgeom() const { - return false; + cdata->_cache.clear(); } //////////////////////////////////////////////////////////////////// @@ -585,8 +705,8 @@ is_qpgeom() const { // Description: Indicates that the geom should be enqueued to be // prepared in the indicated prepared_objects at the // beginning of the next frame. This will ensure the -// geom is already loaded into the GSG if it is expected -// to be rendered soon. +// geom is already loaded into geom memory if it +// is expected to be rendered soon. // // Use this function instead of prepare_now() to preload // geoms from a user interface standpoint. @@ -597,250 +717,54 @@ prepare(PreparedGraphicsObjects *prepared_objects) { } //////////////////////////////////////////////////////////////////// -// Function: Geom::get_num_vertices_per_prim -// Access: Published, Virtual -// Description: -//////////////////////////////////////////////////////////////////// -int Geom:: -get_num_vertices_per_prim() const { - return 0; -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::get_num_more_vertices_than_components -// Access: Published, Virtual -// Description: -//////////////////////////////////////////////////////////////////// -int Geom:: -get_num_more_vertices_than_components() const { - return 0; -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::uses_components -// Access: Published, Virtual -// Description: +// Function: Geom::release +// Access: Published +// Description: Frees the geom context only on the indicated object, +// if it exists there. Returns true if it was released, +// false if it had not been prepared. //////////////////////////////////////////////////////////////////// bool Geom:: -uses_components() const { - return false; +release(PreparedGraphicsObjects *prepared_objects) { + Contexts::iterator ci; + ci = _contexts.find(prepared_objects); + if (ci != _contexts.end()) { + GeomContext *gc = (*ci).second; + prepared_objects->release_geom(gc); + return true; + } + + // Maybe it wasn't prepared yet, but it's about to be. + return prepared_objects->dequeue_geom(this); } //////////////////////////////////////////////////////////////////// -// Function: Geom::get_length -// Access: Published, Virtual -// Description: +// Function: Geom::release_all +// Access: Published +// Description: Frees the context allocated on all objects for which +// the geom has been declared. Returns the number of +// contexts which have been freed. //////////////////////////////////////////////////////////////////// int Geom:: -get_length(int) const { - return 0; -} +release_all() { + // We have to traverse a copy of the _contexts list, because the + // PreparedGraphicsObjects object will call clear_prepared() in response + // to each release_geom(), and we don't want to be modifying the + // _contexts list while we're traversing it. + Contexts temp = _contexts; + int num_freed = (int)_contexts.size(); -//////////////////////////////////////////////////////////////////// -// Function: Geom::explode -// Access: Published, Virtual -// Description: If the Geom is a composite type such as a tristrip, -// this allocates and returns a new Geom that represents -// the same geometry as a simple type, for instance a -// set of triangles. If the Geom is already a simple -// type, this allocates and returns a copy. This is -// just a convenience function for dealing with -// composite types when performance is less than -// paramount. -//////////////////////////////////////////////////////////////////// -Geom *Geom:: -explode() const { - return make_copy(); -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::get_tris -// Access: Published, Virtual -// Description: This is similar in principle to explode(), except it -// returns only a list of triangle vertex indices, with -// no information about color or whatever. The array -// returned is a set of indices into the geom's _coords -// array, as retrieve by get_coords(); there will be 3*n -// elements in the array, where n is the number of -// triangles described by the geometry. This is useful -// when it's important to determine the physical -// structure of the geometry, without necessarily -// worrying about its rendering properties, and when -// performance considerations are not overwhelming. -//////////////////////////////////////////////////////////////////// -PTA_ushort Geom:: -get_tris() const { - return PTA_ushort(); -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::write -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -void Geom:: -write(ostream &out, int indent_level) const { - indent(out, indent_level) << *this << endl; -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::output -// Access: Public, Virtual -// Description: -//////////////////////////////////////////////////////////////////// -void Geom:: -output(ostream &out) const { - out << get_type() << " (" << _numprims << ")"; - - /* - << " v:" << _coords.size() - << " n:" << _norms.size() - << " c:" << _colors.size() - << " t:" << _texcoords.size() - << " vi:" << _vindex.size() - << " ni:" << _nindex.size() - << " ci:" << _cindex.size() - << " ti:" << _tindex.size(); - */ -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::write_verbose -// Access: Public -// Description: Writes to the indicated ostream a formatted picture -// of the contents of the Geom, in detail--but hopefully -// not too much detail. -//////////////////////////////////////////////////////////////////// -void Geom:: -write_verbose(ostream &out, int indent_level) const { - GeomBindType bind_normals; - GeomBindType bind_colors; - - PTA_Vertexf g_coords; - PTA_Normalf g_normals; - PTA_Colorf g_colors; - - PTA_ushort i_coords; - PTA_ushort i_normals; - PTA_ushort i_colors; - - get_coords(g_coords, i_coords); - get_normals(g_normals, bind_normals, i_normals); - get_colors(g_colors, bind_colors, i_colors); - - out << "\n"; - indent(out, indent_level) - << get_type() << " contains " - << get_num_prims() << " primitives:\n"; - - if ((i_coords == (ushort *)NULL) && (g_coords == (Vertexf *)NULL)) { - indent(out, indent_level) - << "No coords\n"; - } else if (i_coords!=(ushort*)0L) { - indent(out, indent_level) - << "Indexed coords = " << (void *)g_coords << ", length = " - << g_coords.size() << ":\n"; - describe_attr(out, this, G_PER_VERTEX, i_coords, false, indent_level + 2); - } else { - indent(out, indent_level) - << "Nonindexed coords:\n"; - describe_attr(out, this, G_PER_VERTEX, g_coords, true, indent_level + 2); + Contexts::const_iterator ci; + for (ci = temp.begin(); ci != temp.end(); ++ci) { + PreparedGraphicsObjects *prepared_objects = (*ci).first; + GeomContext *gc = (*ci).second; + prepared_objects->release_geom(gc); } - if (bind_colors == G_OFF) { - indent(out, indent_level) - << "No colors\n"; - } else if (i_colors!=(ushort*)0L) { - indent(out, indent_level) - << "Indexed colors = " << (void *)g_colors << ", length = " - << g_colors.size() << "\n"; - describe_attr(out, this, bind_colors, i_colors, false, indent_level + 2); - } else { - indent(out, indent_level) - << "Nonindexed colors:\n"; - describe_attr(out, this, bind_colors, g_colors, true, indent_level + 2); - } + // Now that we've called release_geom() on every known context, + // the _contexts list should have completely emptied itself. + nassertr(_contexts.empty(), num_freed); - if (bind_normals == G_OFF) { - indent(out, indent_level) - << "No normals\n"; - } else if (i_normals!=(ushort*)0L) { - indent(out, indent_level) - << "Indexed normals = " << (void *)g_normals << ", length = " - << g_normals.size() << "\n"; - describe_attr(out, this, bind_normals, i_normals, false, indent_level + 2); - } else { - indent(out, indent_level) - << "Nonindexed normals:\n"; - describe_attr(out, this, bind_normals, g_normals, true, indent_level + 2); - } - - if (_texcoords_by_name.empty()) { - indent(out, indent_level) - << "No texcoords\n"; - - } else { - TexCoordsByName::const_iterator tci; - for (tci = _texcoords_by_name.begin(); - tci != _texcoords_by_name.end(); - ++tci) { - const InternalName *name = (*tci).first; - const TexCoordDef &def = (*tci).second; - if (def._tindex != (ushort *)NULL) { - indent(out, indent_level) - << "Indexed texcoords \"" << name->get_name() << "\" = " - << def._texcoords << ", length = " << def._texcoords.size() << "\n"; - describe_attr(out, this, G_PER_VERTEX, def._tindex, false, - indent_level + 2); - - } else { - indent(out, indent_level) - << "Nonindexed texcoords \"" << name->get_name() << "\":\n"; - describe_attr(out, this, G_PER_VERTEX, def._texcoords, true, - indent_level + 2); - } - } - } -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::setup_multitexcoord_iterator -// Access: Public -// Description: Fills in the values on the indicated -// MultiTexCoordIterator to prepare it to walk through -// the texture coordinates on this Geom, to issue the -// appropriate texture coordinates for the currently -// active stages. -//////////////////////////////////////////////////////////////////// -void Geom:: -setup_multitexcoord_iterator(MultiTexCoordIterator &iterator, - const ActiveTextureStages &active_stages, - const NoTexCoordStages &no_texcoords) const { - check_config(); - iterator._num_stages = 0; - int max_stage_index = (int)active_stages.size(); - int i = 0; - for (int stage_index = 0; stage_index < max_stage_index; stage_index++) { - TextureStage *stage = active_stages[stage_index]; - if (no_texcoords.find(stage) == no_texcoords.end()) { - // This stage is not one of the stages that doesn't need - // texcoords issued for it. - const InternalName *name = stage->get_texcoord_name(); - TexCoordsByName::const_iterator tci = _texcoords_by_name.find(name); - if (tci != _texcoords_by_name.end()) { - // This Geom does have texcoords for this stage. - const TexCoordDef &def = (*tci).second; - - nassertv(i < max_geom_texture_stages); - iterator._stages[i]._array = def._texcoords; - iterator._stages[i]._index = def._tindex; - iterator._stage_index[i] = stage_index; - i++; - } - } - } - - iterator._num_stages = i; + return num_freed; } //////////////////////////////////////////////////////////////////// @@ -871,235 +795,101 @@ prepare_now(PreparedGraphicsObjects *prepared_objects, GeomContext *gc = prepared_objects->prepare_geom_now(this, gsg); if (gc != (GeomContext *)NULL) { _contexts[prepared_objects] = gc; - - // Now that we have a new GeomContext with zero dirty flags, our - // intersection of all dirty flags must be zero. This doesn't mean - // that some other contexts aren't still dirty, but at least one - // context isn't. - _all_dirty_flags = 0; } return gc; } -//////////////////////////////////////////////////////////////////// -// Function: Geom::release -// Access: Public -// Description: Frees the geom context only on the indicated object, -// if it exists there. Returns true if it was released, -// false if it had not been prepared. -//////////////////////////////////////////////////////////////////// -bool Geom:: -release(PreparedGraphicsObjects *prepared_objects) { - Contexts::iterator ci; - ci = _contexts.find(prepared_objects); - if (ci != _contexts.end()) { - GeomContext *gc = (*ci).second; - prepared_objects->release_geom(gc); - return true; - } - - // Maybe it wasn't prepared yet, but it's about to be. - return prepared_objects->dequeue_geom(this); -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::release_all -// Access: Public -// Description: Frees the context allocated on all objects for which -// the geom has been declared. Returns the number of -// contexts which have been freed. -//////////////////////////////////////////////////////////////////// -int Geom:: -release_all() { - // We have to traverse a copy of the _contexts list, because the - // PreparedGraphicsObjects object will call clear_prepared() in response - // to each release_geom(), and we don't want to be modifying the - // _contexts list while we're traversing it. - Contexts temp = _contexts; - int num_freed = (int)_contexts.size(); - - Contexts::const_iterator ci; - for (ci = temp.begin(); ci != temp.end(); ++ci) { - PreparedGraphicsObjects *prepared_objects = (*ci).first; - GeomContext *gc = (*ci).second; - prepared_objects->release_geom(gc); - } - - // Now that we've called release_geom() on every known context, - // the _contexts list should have completely emptied itself. - nassertr(_contexts.empty(), num_freed); - - return num_freed; -} - //////////////////////////////////////////////////////////////////// // Function: Geom::draw -// Access: Public, Virtual -// Description: Actually draws the Geom with the indicated GSG. +// Access: Public +// Description: Actually draws the Geom with the indicated GSG, using +// the indicated vertex data (which might have been +// pre-munged to support the GSG's needs). //////////////////////////////////////////////////////////////////// void Geom:: -draw(GraphicsStateGuardianBase *gsg, - const qpGeomMunger *, const qpGeomVertexData *) const { - if (!support_old_geom) { - return; - } - PreparedGraphicsObjects *prepared_objects = gsg->get_prepared_objects(); - if (is_dirty()) { - ((Geom *)this)->config(); - ((Geom *)this)->release(prepared_objects); - } - - if (retained_mode) { - GeomContext *gc = ((Geom *)this)->prepare_now(gsg->get_prepared_objects(), gsg); - ((Geom *)this)->draw_immediate(gsg, gc); - } else { - ((Geom *)this)->draw_immediate(gsg, NULL); - } -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::config -// Access: Public, Virtual -// Description: Configure rendering based on current settings -//////////////////////////////////////////////////////////////////// -void Geom:: -config() { - WritableConfigurable::config(); - - // Only per vertex binding makes any sense - if (_coords != (Vertexf*)0L && _bind[G_COORD] != G_OFF) { - _get_vertex = - (_vindex == (ushort*)0L) ? get_vertex_nonindexed : get_vertex_indexed; - - } else { - // It's not really an error not to have a vertex array; maybe - // there are no vertices in the Geom. This happens sometimes with - // the particle system. It's perfectly legal to have a Geom with - // no vertices--it just doesn't look like much. - - // gobj_cat.error() - // << "Geom::Config() - no vertex array!" << endl; - _get_vertex = get_vertex_noop; - } - - // Set up normal rendering configuration - if (_norms != (Normalf*)0L && _bind[G_NORMAL] != G_OFF) { - _get_normal = - (_nindex == (ushort*)0L) ? get_normal_nonindexed : get_normal_indexed; - } else { - _get_normal = get_normal_noop; - } - - // Set up texture coordinate rendering configuration - if (_texcoords_by_name.empty()) { - _get_texcoord = get_texcoord_noop; - - } else { - _get_texcoord = get_texcoord_indexed; - - // If any of the texture coordinates are nonindexed, all of them - // must be. - TexCoordsByName::const_iterator tci; - for (tci = _texcoords_by_name.begin(); - tci != _texcoords_by_name.end(); - ++tci) { - if ((*tci).second._tindex == (ushort *)NULL) { - _get_texcoord = get_texcoord_nonindexed; - break; - } +draw(GraphicsStateGuardianBase *gsg, const GeomMunger *munger, + const GeomVertexData *vertex_data) const { +#ifdef DO_PIPELINING + // Make sure the usage_hint is already updated before we start to + // draw, so we don't end up with a circular lock if the GSG asks us + // to update this while we're holding the read lock. + { + CDReader cdata(_cycler); + if (!cdata->_got_usage_hint) { + CDWriter cdataw(((Geom *)this)->_cycler, cdata); + ((Geom *)this)->reset_usage_hint(cdataw); } } + // TODO: fix up the race condition between this line and the next. + // Maybe CDWriter's elevate-to-write should return the read lock to + // its original locked state when it's done. +#endif // DO_PIPELINING - // Set up color rendering configuration - if (_colors != (Colorf*)0L && _bind[G_COLOR] != G_OFF) { - _get_color = - (_cindex == (ushort*)0L) ? get_color_nonindexed : get_color_indexed; - } else { - _get_color = get_color_noop; + CDReader cdata(_cycler); + + if (gsg->begin_draw_primitives(this, munger, vertex_data)) { + Primitives::const_iterator pi; + for (pi = cdata->_primitives.begin(); + pi != cdata->_primitives.end(); + ++pi) { + const GeomPrimitive *primitive = (*pi); + if (primitive->get_num_vertices() != 0) { + (*pi)->draw(gsg); + } + } + gsg->end_draw_primitives(); } } -//////////////////////////////////////////////////////////////////// -// Function: Geom::draw_immediate -// Access: Public, Virtual -// Description: -//////////////////////////////////////////////////////////////////// -void Geom:: -draw_immediate(GraphicsStateGuardianBase *, GeomContext *) { -} - -//////////////////////////////////////////////////////////////////// -// Function: Geom::print_draw_immediate -// Access: Public, Virtual -// Description: -//////////////////////////////////////////////////////////////////// -void Geom:: -print_draw_immediate() const { -} - //////////////////////////////////////////////////////////////////// // Function: Geom::calc_tight_bounds -// Access: Public +// Access: Public, Virtual // Description: Expands min_point and max_point to include all of the // vertices in the Geom, if any. found_any is set true // if any points are found. It is the caller's // responsibility to initialize min_point, max_point, // and found_any before calling this function. +// +// This version of the method allows the Geom to specify +// an alternate vertex data table (for instance, if the +// vertex data has already been munged), and also allows +// the result to be computed in any coordinate space by +// specifying a transform matrix. //////////////////////////////////////////////////////////////////// void Geom:: -calc_tight_bounds(LPoint3f &min_point, LPoint3f &max_point, - bool &found_any) const { - Geom::VertexIterator vi = make_vertex_iterator(); - int num_prims = get_num_prims(); - - for (int p = 0; p < num_prims; p++) { - int length = get_length(p); - for (int v = 0; v < length; v++) { - Vertexf vertex = get_next_vertex(vi); - - if (found_any) { - min_point.set(min(min_point[0], vertex[0]), - min(min_point[1], vertex[1]), - min(min_point[2], vertex[2])); - max_point.set(max(max_point[0], vertex[0]), - max(max_point[1], vertex[1]), - max(max_point[2], vertex[2])); - } else { - min_point = vertex; - max_point = vertex; - found_any = true; - } - } +calc_tight_bounds(LPoint3f &min_point, LPoint3f &max_point, + bool &found_any, + const GeomVertexData *vertex_data, + bool got_mat, const LMatrix4f &mat) const { + + CDReader cdata(_cycler); + + Primitives::const_iterator pi; + for (pi = cdata->_primitives.begin(); + pi != cdata->_primitives.end(); + ++pi) { + (*pi)->calc_tight_bounds(min_point, max_point, found_any, vertex_data, + got_mat, mat); } } //////////////////////////////////////////////////////////////////// -// Function: Geom::init -// Access: Protected -// Description: +// Function: Geom::get_next_modified +// Access: Public, Static +// Description: Returns a monotonically increasing sequence. Each +// time this is called, a new sequence number is +// returned, higher than the previous value. +// +// This is used to ensure that +// GeomVertexArrayData::get_modified() and +// GeomPrimitive::get_modified() update from the same +// space, so that Geom::get_modified() returns a +// meaningful value. //////////////////////////////////////////////////////////////////// -void Geom:: -init() { - int i; - - _coords.clear(); - _norms.clear(); - _colors.clear(); - _vindex.clear(); - _nindex.clear(); - _cindex.clear(); - _texcoords_by_name.clear(); - _primlengths.clear(); - - for ( i = 0; i < num_GeomAttrTypes; i++ ) - _bind[i] = G_OFF; - - _get_vertex = get_vertex_noop; - _get_normal = get_normal_noop; - _get_texcoord = get_texcoord_noop; - _get_color = get_color_noop; - - WritableConfigurable::config(); +UpdateSeq Geom:: +get_next_modified() { + ++_next_modified; + return _next_modified; } //////////////////////////////////////////////////////////////////// @@ -1116,44 +906,24 @@ recompute_bound() { GeometricBoundingVolume *gbv = DCAST(GeometricBoundingVolume, bound); - // Now actually compute the bounding volume by putting it around all - // of our vertices. - pvector vertices; - VertexIterator vi = make_vertex_iterator(); - int num_vertices = _coords.size(); - - if (_vindex.is_null()) { - // Nonindexed case. - int vcount = 0; - for (int p = 0; p < get_num_prims(); p++) { - for (int v = 0; v < get_length(p); v++) { - nassertr(vcount < num_vertices, bound); - vertices.push_back(get_next_vertex(vi)); - ++vcount; - } - } - //nassertr(vcount == num_vertices, bound); + // Now actually compute the bounding volume. We do this by using + // calc_tight_bounds to determine our minmax first. + LPoint3f points[2]; + bool found_any = false; + calc_tight_bounds(points[0], points[1], found_any, get_vertex_data(), + false, LMatrix4f::ident_mat()); + if (found_any) { + // Then we put the bounding volume around both of those points. + // Technically, we should put it around the eight points at the + // corners of the rectangular solid, but we happen to know that + // the two diagonally opposite points is good enough to define any + // of our bound volume types. - } else { - // Indexed case. - int num_indices = _vindex.size(); - int vindex = 0; - for (int p = 0; p < get_num_prims(); p++) { - for (int v = 0; v < get_length(p); v++) { - nassertr(vindex < num_indices, bound); - nassertr(_vindex[vindex] < num_vertices, bound); - vertices.push_back(get_next_vertex(vi)); - ++vindex; - } - } - //nassertr(vindex == num_indices, bound); + const LPoint3f *points_begin = &points[0]; + const LPoint3f *points_end = points_begin + 2; + gbv->around(points_begin, points_end); } - const LPoint3f *vertices_begin = &vertices[0]; - const LPoint3f *vertices_end = vertices_begin + vertices.size(); - - gbv->around(vertices_begin, vertices_end); - return bound; } @@ -1174,183 +944,299 @@ clear_prepared(PreparedGraphicsObjects *prepared_objects) { _contexts.erase(ci); } else { // If this assertion fails, clear_prepared() was given a - // prepared_objects which the geom didn't know about. + // prepared_objects that the geom didn't know about. nassertv(false); } } //////////////////////////////////////////////////////////////////// -// Function: Geom::sum_lengths -// Access: Private, Static -// Description: Returns the total number of vertices named in the -// lengths array. +// Function: Geom::check_will_be_valid +// Access: Private +// Description: Verifies that the all of the primitives within the +// geom reference vertices that actually exist within +// the indicated GeomVertexData (presumably in +// preparation for assigning the geom to use this data). +// Returns true if the data appears to be valid, false +// otherwise. //////////////////////////////////////////////////////////////////// -int Geom:: -sum_lengths(const PTA_int &lengths) { - int num_vertices = 0; +bool Geom:: +check_will_be_valid(const GeomVertexData *vertex_data) const { + CDReader cdata(_cycler); - for (PTA_int::const_iterator li = lengths.begin(); - li != lengths.end(); - ++li) { - num_vertices += (*li); + Primitives::const_iterator pi; + for (pi = cdata->_primitives.begin(); + pi != cdata->_primitives.end(); + ++pi) { + if (!(*pi)->check_valid(vertex_data)) { + return false; + } } - return num_vertices; + return true; +} + +//////////////////////////////////////////////////////////////////// +// Function: Geom::reset_usage_hint +// Access: Private +// Description: Recomputes the minimum usage_hint. +//////////////////////////////////////////////////////////////////// +void Geom:: +reset_usage_hint(Geom::CDWriter &cdata) { + cdata->_usage_hint = UH_unspecified; + Primitives::const_iterator pi; + for (pi = cdata->_primitives.begin(); + pi != cdata->_primitives.end(); + ++pi) { + cdata->_usage_hint = min(cdata->_usage_hint, (*pi)->get_usage_hint()); + } + cdata->_got_usage_hint = true; +} + +//////////////////////////////////////////////////////////////////// +// Function: Geom::reset_geom_rendering +// Access: Private +// Description: Rederives the _geom_rendering member. +//////////////////////////////////////////////////////////////////// +void Geom:: +reset_geom_rendering(Geom::CDWriter &cdata) { + cdata->_geom_rendering = 0; + Primitives::const_iterator pi; + for (pi = cdata->_primitives.begin(); + pi != cdata->_primitives.end(); + ++pi) { + cdata->_geom_rendering |= (*pi)->get_geom_rendering(); + } + + if ((cdata->_geom_rendering & GR_point) != 0) { + if (cdata->_data->has_column(InternalName::get_size())) { + cdata->_geom_rendering |= GR_per_point_size; + } + if (cdata->_data->has_column(InternalName::get_aspect_ratio())) { + cdata->_geom_rendering |= GR_point_aspect_ratio; + } + if (cdata->_data->has_column(InternalName::get_rotate())) { + cdata->_geom_rendering |= GR_point_rotate; + } + } + + switch (get_shade_model()) { + case SM_flat_first_vertex: + cdata->_geom_rendering |= GR_flat_first_vertex; + break; + + case SM_flat_last_vertex: + cdata->_geom_rendering |= GR_flat_last_vertex; + break; + + default: + break; + } +} + +//////////////////////////////////////////////////////////////////// +// Function: Geom::register_with_read_factory +// Access: Public, Static +// Description: Tells the BamReader how to create objects of type +// Geom. +//////////////////////////////////////////////////////////////////// +void Geom:: +register_with_read_factory() { + BamReader::get_factory()->register_factory(get_class_type(), make_from_bam); } //////////////////////////////////////////////////////////////////// // Function: Geom::write_datagram -// Access: Public -// Description: Function to write the important information in -// the particular object to a Datagram +// Access: Public, Virtual +// Description: Writes the contents of this object to the datagram +// for shipping out to a Bam file. //////////////////////////////////////////////////////////////////// void Geom:: -write_datagram(BamWriter *manager, Datagram &me) { - int i; +write_datagram(BamWriter *manager, Datagram &dg) { + TypedWritable::write_datagram(manager, dg); - // Coordinates - WRITE_PTA(manager, me, IPD_Vertexf::write_datagram, _coords); - // Normals - WRITE_PTA(manager, me, IPD_Normalf::write_datagram, _norms); - // Colors - WRITE_PTA(manager, me, IPD_Colorf::write_datagram, _colors); - /* - // pre bam 4.11 - // Texture Coordinates - WRITE_PTA(manager, me, IPD_TexCoordf::write_datagram, get_texcoords_array()); - */ - // write the multitexture data - nassertv(_texcoords_by_name.size() < 256); - me.add_uint8(_texcoords_by_name.size()); // write the size of the map - // write the TexCoordsByName pointers if any - TexCoordsByName::const_iterator tci; - for (tci = _texcoords_by_name.begin(); tci != _texcoords_by_name.end(); ++tci) { - CPT(InternalName) tc = (*tci).first; - manager->write_pointer(me, tc); - WRITE_PTA(manager, me, IPD_TexCoordf::write_datagram, (*tci).second._texcoords); - WRITE_PTA(manager, me, IPD_ushort::write_datagram, (*tci).second._tindex); + manager->write_cdata(dg, _cycler); +} + +//////////////////////////////////////////////////////////////////// +// Function: Geom::make_from_bam +// Access: Protected, Static +// Description: This function is called by the BamReader's factory +// when a new object of type Geom is encountered +// in the Bam file. It should create the Geom +// and extract its information from the file. +//////////////////////////////////////////////////////////////////// +TypedWritable *Geom:: +make_from_bam(const FactoryParams ¶ms) { + Geom *object = new Geom; + DatagramIterator scan; + BamReader *manager; + + parse_params(params, scan, manager); + object->fillin(scan, manager); + manager->register_finalize(object); + + return object; +} + +//////////////////////////////////////////////////////////////////// +// Function: Geom::finalize +// Access: Public, Virtual +// Description: Called by the BamReader to perform any final actions +// needed for setting up the object after all objects +// have been read and all pointers have been completed. +//////////////////////////////////////////////////////////////////// +void Geom:: +finalize(BamReader *manager) { + CDWriter cdata(_cycler); + + // Make sure our GeomVertexData is finalized first. This may result + // in the data getting finalized multiple times, but it doesn't mind + // that. + if (cdata->_data != (GeomVertexData *)NULL) { + cdata->_data->finalize(manager); } - // Now write out the indices for each array - WRITE_PTA(manager, me, IPD_ushort::write_datagram, _vindex); - WRITE_PTA(manager, me, IPD_ushort::write_datagram, _nindex); - WRITE_PTA(manager, me, IPD_ushort::write_datagram, _cindex); - /* - // pre bam 4.11 - WRITE_PTA(manager, me, IPD_ushort::write_datagram, get_texcoords_index()); - */ - // the texcoord indices are already written with the texcoords + reset_geom_rendering(cdata); +} - me.add_uint16(_numprims); - WRITE_PTA(manager, me, IPD_int::write_datagram, _primlengths); +//////////////////////////////////////////////////////////////////// +// Function: Geom::fillin +// Access: Protected +// Description: This internal function is called by make_from_bam to +// read in all of the relevant data from the BamFile for +// the new Geom. +//////////////////////////////////////////////////////////////////// +void Geom:: +fillin(DatagramIterator &scan, BamReader *manager) { + TypedWritable::fillin(scan, manager); - // Write out the bindings for vertices, normals, colors and texture - // coordinates - for(i = 0; i < num_GeomAttrTypes; i++) { - me.add_uint8(_bind[i]); + manager->read_cdata(scan, _cycler); +} + +//////////////////////////////////////////////////////////////////// +// Function: Geom::CacheEntry::Destructor +// Access: Public, Virtual +// Description: +//////////////////////////////////////////////////////////////////// +Geom::CacheEntry:: +~CacheEntry() { + if (_geom_result != _source) { + unref_delete(_geom_result); } } //////////////////////////////////////////////////////////////////// -// Function: Geom::complete_pointers +// Function: Geom::CacheEntry::evict_callback +// Access: Public, Virtual +// Description: Called when the entry is evicted from the cache, this +// should clean up the owning object appropriately. +//////////////////////////////////////////////////////////////////// +void Geom::CacheEntry:: +evict_callback() { + // We have to operate on stage 0 of the pipeline, since that's where + // the cache really counts. Because of the multistage pipeline, we + // might not actually have a cache entry there (it might have been + // added to stage 1 instead). No big deal if we don't. + CData *cdata = _source->_cycler.write_stage(0); + Cache::iterator ci = cdata->_cache.find(this); + if (ci != cdata->_cache.end()) { + cdata->_cache.erase(ci); + } + _source->_cycler.release_write_stage(0, cdata); +} + +//////////////////////////////////////////////////////////////////// +// Function: Geom::CacheEntry::output +// Access: Public, Virtual +// Description: +//////////////////////////////////////////////////////////////////// +void Geom::CacheEntry:: +output(ostream &out) const { + out << "geom " << (void *)_source << ", " + << (const void *)_modifier; +} + + +//////////////////////////////////////////////////////////////////// +// Function: Geom::CData::make_copy +// Access: Public, Virtual +// Description: +//////////////////////////////////////////////////////////////////// +CycleData *Geom::CData:: +make_copy() const { + return new CData(*this); +} + +//////////////////////////////////////////////////////////////////// +// Function: Geom::CData::write_datagram +// Access: Public, Virtual +// Description: Writes the contents of this object to the datagram +// for shipping out to a Bam file. +//////////////////////////////////////////////////////////////////// +void Geom::CData:: +write_datagram(BamWriter *manager, Datagram &dg) const { + manager->write_pointer(dg, _data); + + dg.add_uint16(_primitives.size()); + Primitives::const_iterator pi; + for (pi = _primitives.begin(); pi != _primitives.end(); ++pi) { + manager->write_pointer(dg, *pi); + } + + dg.add_uint8(_primitive_type); + dg.add_uint8(_shade_model); + + // Actually, we shouldn't bother writing out _geom_rendering; we'll + // just throw it away anyway. + dg.add_uint16(_geom_rendering); +} + +//////////////////////////////////////////////////////////////////// +// Function: Geom::CData::complete_pointers // Access: Public, Virtual // Description: Receives an array of pointers, one for each time // manager->read_pointer() was called in fillin(). // Returns the number of pointers processed. //////////////////////////////////////////////////////////////////// -int Geom:: +int Geom::CData:: complete_pointers(TypedWritable **p_list, BamReader *manager) { - int pi = dDrawable::complete_pointers(p_list, manager); + int pi = CycleData::complete_pointers(p_list, manager); - // complete the pointers and build the _texcoords_by_name - TexCoordDefSet::iterator ci; - for (ci = _temp_texcoord_set.begin(); - ci != _temp_texcoord_set.end(); - ++ci) { - CPT(InternalName) tc = DCAST(InternalName, p_list[pi++]); - TexCoordDef *def = (*ci); - _texcoords_by_name[tc] = *def; - delete def; - if (tc == InternalName::get_texcoord()) { - _bind[G_TEXCOORD] = G_PER_VERTEX; - } + _data = DCAST(GeomVertexData, p_list[pi++]); + + Primitives::iterator pri; + for (pri = _primitives.begin(); pri != _primitives.end(); ++pri) { + (*pri) = DCAST(GeomPrimitive, p_list[pi++]); } - _temp_texcoord_set.clear(); - - make_dirty(); return pi; } - //////////////////////////////////////////////////////////////////// -// Function: Geom::fillin -// Access: Protected -// Description: Function that reads out of the datagram (or asks -// manager to read) all of the data that is needed to -// re-create this object and stores it in the appropiate -// place +// Function: Geom::CData::fillin +// Access: Public, Virtual +// Description: This internal function is called by make_from_bam to +// read in all of the relevant data from the BamFile for +// the new Geom. //////////////////////////////////////////////////////////////////// -void Geom:: -fillin(DatagramIterator& scan, BamReader* manager) { - int i; +void Geom::CData:: +fillin(DatagramIterator &scan, BamReader *manager) { + manager->read_pointer(scan); - // Coordinates - READ_PTA(manager, scan, IPD_Vertexf::read_datagram, _coords); - // Normals - READ_PTA(manager, scan, IPD_Normalf::read_datagram, _norms); - // Colors - READ_PTA(manager, scan, IPD_Colorf::read_datagram, _colors); - // Texture Coordinates - PTA_TexCoordf texcoords; - if (manager->get_file_minor_ver() < 11) { - READ_PTA(manager, scan, IPD_TexCoordf::read_datagram, texcoords); - } else { - // read the multitexture data - int num_texcoords_by_names = scan.get_uint8(); - // read the TexCoordsByName pointers of num_texcoords_by_names - _temp_texcoord_set.reserve(num_texcoords_by_names); - for (int i=0; iread_pointer(scan); - TexCoordDef *tcd = new TexCoordDef; - READ_PTA(manager, scan, IPD_TexCoordf::read_datagram, tcd->_texcoords); - READ_PTA(manager, scan, IPD_ushort::read_datagram, tcd->_tindex); - _temp_texcoord_set.push_back(tcd); - } - } - - // Now read in the indices for each array - READ_PTA(manager, scan, IPD_ushort::read_datagram, _vindex); - READ_PTA(manager, scan, IPD_ushort::read_datagram, _nindex); - READ_PTA(manager, scan, IPD_ushort::read_datagram, _cindex); - PTA_ushort tindex; - if (manager->get_file_minor_ver() < 11) { - READ_PTA(manager, scan, IPD_ushort::read_datagram, tindex); + int num_primitives = scan.get_uint16(); + _primitives.reserve(num_primitives); + for (int i = 0; i < num_primitives; ++i) { + manager->read_pointer(scan); + _primitives.push_back(NULL); } - _numprims = scan.get_uint16(); + _primitive_type = (PrimitiveType)scan.get_uint8(); + _shade_model = (ShadeModel)scan.get_uint8(); - // is there any point in doing this for uses_components()==false? - READ_PTA(manager, scan, IPD_int::read_datagram, _primlengths); + // To be removed: we no longer read _geom_rendering from the bam + // file; instead, we rederive it in finalize(). + scan.get_uint16(); - if (uses_components()) { - _num_vertices = sum_lengths(_primlengths); - - } else { - // except for strips & fans with the length arrays, total verts - // will be simply this - _num_vertices = _numprims * get_num_vertices_per_prim(); - } - - // Read in the bindings for vertices, normals, colors and texture - // coordinates - for(i = 0; i < num_GeomAttrTypes; i++) { - _bind[i] = (enum GeomBindType) scan.get_uint8(); - } - - if (manager->get_file_minor_ver() < 11) { - if (_bind[G_TEXCOORD] == G_PER_VERTEX) { - set_texcoords(texcoords, G_PER_VERTEX, tindex); - } - } + _got_usage_hint = false; + _modified = Geom::get_next_modified(); } diff --git a/panda/src/gobj/geom.h b/panda/src/gobj/geom.h index ee1ac63f86..8b7fb6d252 100644 --- a/panda/src/gobj/geom.h +++ b/panda/src/gobj/geom.h @@ -1,5 +1,5 @@ // Filename: geom.h -// Created by: mike (09Jan97) +// Created by: drose (06Mar05) // //////////////////////////////////////////////////////////////////// // @@ -15,324 +15,212 @@ // panda3d-general@lists.sourceforge.net . // //////////////////////////////////////////////////////////////////// + #ifndef GEOM_H #define GEOM_H #include "pandabase.h" - -#include "drawable.h" - -#include "vector_typedWritable.h" -#include "ordered_vector.h" -#include "pointerTo.h" -#include "pointerToArray.h" -#include "typedef.h" -#include "luse.h" -#include "pta_Vertexf.h" -#include "pta_Normalf.h" -#include "pta_Colorf.h" -#include "pta_TexCoordf.h" -#include "pta_ushort.h" -#include "pta_int.h" -#include "internalName.h" +#include "typedWritableReferenceCount.h" +#include "boundedObject.h" +#include "cycleData.h" +#include "cycleDataReader.h" +#include "cycleDataWriter.h" +#include "pipelineCycler.h" +#include "geomVertexData.h" +#include "geomPrimitive.h" +#include "geomMunger.h" +#include "geomEnums.h" +#include "geomCacheEntry.h" #include "textureStage.h" +#include "updateSeq.h" +#include "pointerTo.h" +#include "indirectLess.h" #include "pset.h" -class Datagram; -class DatagramIterator; -class BamReader; -class BamWriter; class GeomContext; -class qpGeomVertexData; class PreparedGraphicsObjects; -//////////////////////////////////////////////////////////////////// -// Defines -//////////////////////////////////////////////////////////////////// -BEGIN_PUBLISH -enum GeomBindType -{ - G_OFF, - G_OVERALL, - G_PER_PRIM, - G_PER_COMPONENT, - G_PER_VERTEX -}; -END_PUBLISH -static const int num_GeomBindTypes = 5; - -enum GeomAttrType -{ - G_COORD, - G_COLOR, - G_NORMAL, - G_TEXCOORD -}; -static const int num_GeomAttrTypes = 4; - -ostream &operator << (ostream &out, GeomBindType t); -ostream &operator << (ostream &out, GeomAttrType t); - -// This is a totally arbitrary limit and may be increased almost -// without penalty. It is just used to control the static size of the -// array stored in the MultiTexcoordIterator, below. -static const int max_geom_texture_stages = 32; - //////////////////////////////////////////////////////////////////// // Class : Geom -// Description : Geometry parent class +// Description : A container for geometry primitives. This class +// associates one or more GeomPrimitive objects with a +// table of vertices defined by a GeomVertexData object. +// All of the primitives stored in a particular Geom are +// drawn from the same set of vertices (each primitive +// uses a subset of all of the vertices in the table), +// and all of them must be rendered at the same time, in +// the same graphics state. //////////////////////////////////////////////////////////////////// -class EXPCL_PANDA Geom : public dDrawable { -public: - - // These classes are used to iterate through all the vertices, - // normals, etc. They're returned by make_vertex_iterator(), and - // operated on by get_next_vertex(), etc. - class VertexIterator { - public: - const Vertexf *_array; - const ushort *_index; - }; - class NormalIterator { - public: - const Normalf *_array; - const ushort *_index; - }; - class TexCoordIterator { - public: - const TexCoordf *_array; - const ushort *_index; - }; - class MultiTexCoordIterator { - public: - int _num_stages; - TexCoordIterator _stages[max_geom_texture_stages]; - int _stage_index[max_geom_texture_stages]; - }; - class ColorIterator { - public: - const Colorf *_array; - const ushort *_index; - }; - - // Declare some function types. This declares several typenames - // which are pointers to function types--these are not themselves - // functions. A function pointed to by a variable of this type, - // when given an iterator of the appropriate type from the Geom, - // will retrieve the next element from the array and increment the - // iterator appropriately for next time. - typedef const Vertexf &GetNextVertex(VertexIterator &); - typedef const Normalf &GetNextNormal(NormalIterator &); - typedef const TexCoordf &GetNextTexCoord(TexCoordIterator &); - typedef const Colorf &GetNextColor(ColorIterator &); - - +class EXPCL_PANDA Geom : public TypedWritableReferenceCount, public BoundedObject, public GeomEnums { +PUBLISHED: Geom(); Geom(const Geom ©); + void operator = (const Geom ©); virtual ~Geom(); - void operator = (const Geom ©); - virtual Geom *make_copy() const=0; + INLINE PrimitiveType get_primitive_type() const; + INLINE ShadeModel get_shade_model() const; + INLINE int get_geom_rendering() const; -PUBLISHED: + INLINE UsageHint get_usage_hint() const; + void set_usage_hint(UsageHint usage_hint); + + INLINE CPT(GeomVertexData) get_vertex_data() const; + PT(GeomVertexData) modify_vertex_data(); + void set_vertex_data(const GeomVertexData *data); + void offset_vertices(const GeomVertexData *data, int offset); + int make_nonindexed(bool composite_only); + + INLINE int get_num_primitives() const; + INLINE const GeomPrimitive *get_primitive(int i) const; + INLINE GeomPrimitive *modify_primitive(int i); + void set_primitive(int i, const GeomPrimitive *primitive); + void add_primitive(const GeomPrimitive *primitive); + void remove_primitive(int i); + void clear_primitives(); + + INLINE CPT(Geom) decompose() const; + INLINE CPT(Geom) rotate() const; + INLINE CPT(Geom) unify() const; + + void decompose_in_place(); + void rotate_in_place(); + void unify_in_place(); + + bool copy_primitives_from(const Geom *other); + + int get_num_bytes() const; + INLINE UpdateSeq get_modified() const; + + // Temporarily virtual. virtual void transform_vertices(const LMatrix4f &mat); + + // Temporarily virtual. virtual bool check_valid() const; - void set_coords(const PTA_Vertexf &coords, - const PTA_ushort &vindex = PTA_ushort()); - void set_coords(const PTA_Vertexf &coords, GeomBindType bind, - const PTA_ushort &vindex = PTA_ushort()); - void set_normals(const PTA_Normalf &norms, GeomBindType bind, - const PTA_ushort &nindex = PTA_ushort()); - void set_colors(const PTA_Colorf &colors, GeomBindType bind, - const PTA_ushort &cindex = PTA_ushort()); - void set_texcoords(const PTA_TexCoordf &texcoords, GeomBindType bind, - const PTA_ushort &tindex = PTA_ushort()); - void set_texcoords(const InternalName *name, const PTA_TexCoordf &texcoords, - const PTA_ushort &tindex = PTA_ushort()); - void remove_texcoords(const InternalName *name); + void output(ostream &out) const; + void write(ostream &out, int indent_level = 0) const; -public: - // These can't be published because of the pass-by-reference - // primitive types. - void get_coords(PTA_Vertexf &coords, GeomBindType &bind, - PTA_ushort &vindex) const; - - void get_coords(PTA_Vertexf &coords, PTA_ushort &vindex) const; - - void get_normals(PTA_Normalf &norms, GeomBindType &bind, - PTA_ushort &nindex) const; - void get_colors(PTA_Colorf &colors, - GeomBindType &bind, PTA_ushort &cindex) const; - void get_texcoords(PTA_TexCoordf &texcoords, GeomBindType &bind, - PTA_ushort &tindex) const; - - -PUBLISHED: - virtual bool is_dynamic() const; - - // Temporary. - virtual bool is_qpgeom() const; - - INLINE GeomBindType get_binding(int attr) const; - INLINE bool has_any_texcoords() const; - INLINE bool has_texcoords(const InternalName *name) const; - - INLINE PTA_Vertexf get_coords_array() const; - INLINE PTA_Normalf get_normals_array() const; - INLINE PTA_Colorf get_colors_array() const; - INLINE PTA_TexCoordf get_texcoords_array() const; - INLINE PTA_TexCoordf get_texcoords_array(const InternalName *name) const; - - INLINE PTA_ushort get_coords_index() const; - INLINE PTA_ushort get_normals_index() const; - INLINE PTA_ushort get_colors_index() const; - INLINE PTA_ushort get_texcoords_index() const; - INLINE PTA_ushort get_texcoords_index(const InternalName *name) const; - INLINE bool are_texcoords_indexed() const; + void clear_cache(); void prepare(PreparedGraphicsObjects *prepared_objects); + bool release(PreparedGraphicsObjects *prepared_objects); + int release_all(); - INLINE void set_num_prims(int num); - INLINE int get_num_prims() const; +public: + GeomContext *prepare_now(PreparedGraphicsObjects *prepared_objects, + GraphicsStateGuardianBase *gsg); - INLINE void set_lengths(const PTA_int &lengths); - INLINE PTA_int get_lengths() const; + void draw(GraphicsStateGuardianBase *gsg, + const GeomMunger *munger, + const GeomVertexData *vertex_data) const; - virtual int get_num_vertices_per_prim() const; - virtual int get_num_more_vertices_than_components() const; - virtual bool uses_components() const; + void calc_tight_bounds(LPoint3f &min_point, LPoint3f &max_point, + bool &found_any, + const GeomVertexData *vertex_data, + bool got_mat, const LMatrix4f &mat) const; + INLINE void calc_tight_bounds(LPoint3f &min_point, LPoint3f &max_point, + bool &found_any) const; - INLINE int get_num_vertices() const; - - // Returns the length of the indicated primitive. Often this is the - // same for all primitives in the Geom. However, geoms which use - // the lengths array will redefine this appropriately. - virtual int get_length(int prim) const; - - virtual Geom *explode() const; - virtual PTA_ushort get_tris() const; - - void write(ostream &out, int indent_level = 0) const; - virtual void output(ostream &out) const; - void write_verbose(ostream &out, int indent_level) const; + static UpdateSeq get_next_modified(); public: typedef pvector< PT(TextureStage) > ActiveTextureStages; typedef pset NoTexCoordStages; - INLINE VertexIterator make_vertex_iterator() const; - INLINE const Vertexf &get_next_vertex(VertexIterator &viterator) const; - - INLINE NormalIterator make_normal_iterator() const; - INLINE const Normalf &get_next_normal(NormalIterator &niterator) const; - - INLINE TexCoordIterator make_texcoord_iterator() const; - INLINE TexCoordIterator make_texcoord_iterator(const InternalName *texcoord_name) const; - INLINE const TexCoordf &get_next_texcoord(TexCoordIterator &tciterator) const; - void setup_multitexcoord_iterator(MultiTexCoordIterator &iterator, - const ActiveTextureStages &active_stages, - const NoTexCoordStages &no_texcoords) const; - INLINE const TexCoordf &get_next_multitexcoord(MultiTexCoordIterator &tciterator, int n) const; - - INLINE ColorIterator make_color_iterator() const; - INLINE const Colorf &get_next_color(ColorIterator &citerator) const; - - GeomContext *prepare_now(PreparedGraphicsObjects *prepared_objects, - GraphicsStateGuardianBase *gsg); - bool release(PreparedGraphicsObjects *prepared_objects); - int release_all(); - - // From parent dDrawable - virtual void draw(GraphicsStateGuardianBase *gsg, - const qpGeomMunger *munger, - const qpGeomVertexData *vertex_data) const; - - // From parent Configurable - virtual void config(); - - // Immediate mode drawing functions - issue graphics commands - virtual void draw_immediate(GraphicsStateGuardianBase *gsg, GeomContext *gc); - virtual void print_draw_immediate() const; - - void calc_tight_bounds(LPoint3f &min_point, LPoint3f &max_point, - bool &found_any) const; - protected: - void init(); virtual BoundingVolume *recompute_bound(); -protected: - - PTA_Vertexf _coords; - PTA_Normalf _norms; - PTA_Colorf _colors; - - PTA_ushort _vindex; - PTA_ushort _nindex; - PTA_ushort _cindex; - - int _numprims,_num_vertices; - PTA_int _primlengths; - enum GeomBindType _bind[num_GeomAttrTypes]; - - class TexCoordDef { - public: - PTA_TexCoordf _texcoords; - PTA_ushort _tindex; - }; - - // A pmap, not a phash_map, to save space because it will probably - // have only one element. - typedef pmap TexCoordsByName; - TexCoordsByName _texcoords_by_name; - - // Functions to extract component values, one at a time. - GetNextVertex *_get_vertex; - GetNextNormal *_get_normal; - GetNextColor *_get_color; - GetNextTexCoord *_get_texcoord; - - // temporary storage until complete_pointers fills in _texcoords_by_name's InternalName * - typedef pvector TexCoordDefSet; - TexCoordDefSet _temp_texcoord_set; - - private: void clear_prepared(PreparedGraphicsObjects *prepared_objects); - static int sum_lengths(const PTA_int &lengths); + bool check_will_be_valid(const GeomVertexData *vertex_data) const; - // A Geom keeps a list (actually, a map) of all the - // PreparedGraphicsObjects tables that it has been prepared into. - // Each PGO conversely keeps a list (a set) of all the Geoms that - // have been prepared there. When either destructs, it removes - // itself from the other's list. +private: + typedef pvector Primitives; + + // We have to use reference-counting pointers here instead of having + // explicit cleanup in the GeomVertexFormat destructor, because the + // cache needs to be stored in the CycleData, which makes accurate + // cleanup more difficult. We use the GeomCacheManager class to + // avoid cache bloat. + class CacheEntry : public GeomCacheEntry { + public: + INLINE CacheEntry(const GeomVertexData *source_data, + const GeomMunger *modifier); + INLINE CacheEntry(Geom *source, + const GeomVertexData *source_data, + const GeomMunger *modifier, + const Geom *geom_result, + const GeomVertexData *data_result); + virtual ~CacheEntry(); + INLINE bool operator < (const CacheEntry &other) const; + + virtual void evict_callback(); + virtual void output(ostream &out) const; + + Geom *_source; + CPT(GeomVertexData) _source_data; + CPT(GeomMunger) _modifier; + const Geom *_geom_result; // ref-counted if not same as _source + CPT(GeomVertexData) _data_result; + }; + typedef pset > Cache; + + // This is the data that must be cycled between pipeline stages. + class EXPCL_PANDA CData : public CycleData { + public: + INLINE CData(); + INLINE CData(const CData ©); + virtual CycleData *make_copy() const; + virtual void write_datagram(BamWriter *manager, Datagram &dg) const; + virtual int complete_pointers(TypedWritable **plist, BamReader *manager); + virtual void fillin(DatagramIterator &scan, BamReader *manager); + + PT(GeomVertexData) _data; + Primitives _primitives; + PrimitiveType _primitive_type; + ShadeModel _shade_model; + int _geom_rendering; + UsageHint _usage_hint; + bool _got_usage_hint; + UpdateSeq _modified; + Cache _cache; + }; + + PipelineCycler _cycler; + typedef CycleDataReader CDReader; + typedef CycleDataWriter CDWriter; + + void reset_usage_hint(CDWriter &cdata); + void reset_geom_rendering(CDWriter &cdata); + + // This works just like the Texture contexts: each Geom keeps a + // record of all the PGO objects that hold the Geom, and vice-versa. typedef pmap Contexts; Contexts _contexts; - // This value represents the intersection of all the dirty flags of - // the various GeomContexts that might be associated with this - // geom. - int _all_dirty_flags; + static UpdateSeq _next_modified; public: - //static void register_with_read_factory(void); - virtual void write_datagram(BamWriter* manager, Datagram &me); - virtual int complete_pointers(TypedWritable **plist, BamReader *manager); + static void register_with_read_factory(); + virtual void write_datagram(BamWriter *manager, Datagram &dg); - //static TypedWritable *make_Generic(const FactoryParams ¶ms); + virtual void finalize(BamReader *manager); protected: - void fillin(DatagramIterator& scan, BamReader* manager); + static TypedWritable *make_from_bam(const FactoryParams ¶ms); + void fillin(DatagramIterator &scan, BamReader *manager); public: static TypeHandle get_class_type() { return _type_handle; } static void init_type() { - dDrawable::init_type(); + TypedWritableReferenceCount::init_type(); + BoundedObject::init_type(); register_type(_type_handle, "Geom", - dDrawable::get_class_type()); + TypedWritableReferenceCount::get_class_type(), + BoundedObject::get_class_type()); } virtual TypeHandle get_type() const { return get_class_type(); @@ -342,14 +230,13 @@ public: private: static TypeHandle _type_handle; + friend class CacheEntry; + friend class GeomMunger; friend class GeomContext; friend class PreparedGraphicsObjects; }; -INLINE ostream &operator <<(ostream &out, const Geom &geom) { - geom.output(out); - return out; -} +INLINE ostream &operator << (ostream &out, const Geom &obj); #include "geom.I" diff --git a/panda/src/gobj/qpgeomCacheEntry.I b/panda/src/gobj/geomCacheEntry.I similarity index 78% rename from panda/src/gobj/qpgeomCacheEntry.I rename to panda/src/gobj/geomCacheEntry.I index 7d1688954f..2ca1f53374 100644 --- a/panda/src/gobj/qpgeomCacheEntry.I +++ b/panda/src/gobj/geomCacheEntry.I @@ -1,4 +1,4 @@ -// Filename: qpgeomCacheEntry.I +// Filename: geomCacheEntry.I // Created by: drose (21Mar05) // //////////////////////////////////////////////////////////////////// @@ -18,12 +18,12 @@ //////////////////////////////////////////////////////////////////// -// Function: qpGeomCacheEntry::Constructor +// Function: GeomCacheEntry::Constructor // Access: Public // Description: //////////////////////////////////////////////////////////////////// -INLINE qpGeomCacheEntry:: -qpGeomCacheEntry() { +INLINE GeomCacheEntry:: +GeomCacheEntry() { #ifndef NDEBUG _next = NULL; _prev = NULL; @@ -31,12 +31,12 @@ qpGeomCacheEntry() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomCacheEntry::remove_from_list +// Function: GeomCacheEntry::remove_from_list // Access: Private // Description: Removes a GeomCacheEntry record from the // doubly-linked list. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomCacheEntry:: +INLINE void GeomCacheEntry:: remove_from_list() { nassertv(_prev->_next == this && _next->_prev == this); _prev->_next = _next; @@ -48,16 +48,16 @@ remove_from_list() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomCacheEntry::insert_before +// Function: GeomCacheEntry::insert_before // Access: Private // Description: Adds a GeomCacheEntry record before the indicated // node in the doubly-linked list. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomCacheEntry:: -insert_before(qpGeomCacheEntry *node) { +INLINE void GeomCacheEntry:: +insert_before(GeomCacheEntry *node) { nassertv(node->_prev->_next == node && node->_next->_prev == node); - nassertv(_prev == (qpGeomCacheEntry *)NULL && - _next == (qpGeomCacheEntry *)NULL); + nassertv(_prev == (GeomCacheEntry *)NULL && + _next == (GeomCacheEntry *)NULL); _prev = node->_prev; _next = node; _prev->_next = this; @@ -65,7 +65,7 @@ insert_before(qpGeomCacheEntry *node) { } INLINE ostream & -operator << (ostream &out, const qpGeomCacheEntry &entry) { +operator << (ostream &out, const GeomCacheEntry &entry) { entry.output(out); return out; } diff --git a/panda/src/gobj/qpgeomCacheEntry.cxx b/panda/src/gobj/geomCacheEntry.cxx similarity index 75% rename from panda/src/gobj/qpgeomCacheEntry.cxx rename to panda/src/gobj/geomCacheEntry.cxx index 7cdbaf51ec..4f63df6427 100644 --- a/panda/src/gobj/qpgeomCacheEntry.cxx +++ b/panda/src/gobj/geomCacheEntry.cxx @@ -1,4 +1,4 @@ -// Filename: qpgeomCacheEntry.cxx +// Filename: geomCacheEntry.cxx // Created by: drose (21Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,33 +16,33 @@ // //////////////////////////////////////////////////////////////////// -#include "qpgeomCacheEntry.h" -#include "qpgeomCacheManager.h" +#include "geomCacheEntry.h" +#include "geomCacheManager.h" #include "mutexHolder.h" #include "config_gobj.h" #include "clockObject.h" //////////////////////////////////////////////////////////////////// -// Function: qpGeomCacheEntry::Destructor +// Function: GeomCacheEntry::Destructor // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -qpGeomCacheEntry:: -~qpGeomCacheEntry() { +GeomCacheEntry:: +~GeomCacheEntry() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomCacheEntry::record +// Function: GeomCacheEntry::record // Access: Public // Description: Records the entry in the global cache for the first // time. //////////////////////////////////////////////////////////////////// -PT(qpGeomCacheEntry) qpGeomCacheEntry:: +PT(GeomCacheEntry) GeomCacheEntry:: record() { - nassertr(_next == (qpGeomCacheEntry *)NULL && _prev == (qpGeomCacheEntry *)NULL, NULL); - PT(qpGeomCacheEntry) keepme = this; + nassertr(_next == (GeomCacheEntry *)NULL && _prev == (GeomCacheEntry *)NULL, NULL); + PT(GeomCacheEntry) keepme = this; - qpGeomCacheManager *cache_mgr = qpGeomCacheManager::get_global_ptr(); + GeomCacheManager *cache_mgr = GeomCacheManager::get_global_ptr(); MutexHolder holder(cache_mgr->_lock); if (gobj_cat.is_debug()) { @@ -58,7 +58,7 @@ record() { _last_frame_used = ClockObject::get_global_clock()->get_frame_count(); if (PStatClient::is_connected()) { - qpGeomCacheManager::_geom_cache_active_pcollector.add_level(1); + GeomCacheManager::_geom_cache_active_pcollector.add_level(1); } // Increment our own reference count while we're in the queue, just @@ -75,16 +75,16 @@ record() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomCacheEntry::refresh +// Function: GeomCacheEntry::refresh // Access: Public // Description: Marks the cache entry recently used, so it will not // be evicted for a while. //////////////////////////////////////////////////////////////////// -void qpGeomCacheEntry:: +void GeomCacheEntry:: refresh() { - nassertv(_next != (qpGeomCacheEntry *)NULL && _prev != (qpGeomCacheEntry *)NULL); + nassertv(_next != (GeomCacheEntry *)NULL && _prev != (GeomCacheEntry *)NULL); - qpGeomCacheManager *cache_mgr = qpGeomCacheManager::get_global_ptr(); + GeomCacheManager *cache_mgr = GeomCacheManager::get_global_ptr(); MutexHolder holder(cache_mgr->_lock); remove_from_list(); @@ -93,7 +93,7 @@ refresh() { int current_frame = ClockObject::get_global_clock()->get_frame_count(); if (PStatClient::is_connected()) { if (_last_frame_used != current_frame) { - qpGeomCacheManager::_geom_cache_active_pcollector.add_level(1); + GeomCacheManager::_geom_cache_active_pcollector.add_level(1); } } @@ -101,16 +101,16 @@ refresh() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomCacheEntry::erase +// Function: GeomCacheEntry::erase // Access: Public // Description: Removes the entry from the queue, returning a pointer // to the entry. Does not call evict_callback(). //////////////////////////////////////////////////////////////////// -PT(qpGeomCacheEntry) qpGeomCacheEntry:: +PT(GeomCacheEntry) GeomCacheEntry:: erase() { - nassertr(_next != (qpGeomCacheEntry *)NULL && _prev != (qpGeomCacheEntry *)NULL, NULL); + nassertr(_next != (GeomCacheEntry *)NULL && _prev != (GeomCacheEntry *)NULL, NULL); - PT(qpGeomCacheEntry) keepme = this; + PT(GeomCacheEntry) keepme = this; unref(); if (gobj_cat.is_debug()) { @@ -118,7 +118,7 @@ erase() { << "remove_entry(" << *this << ")\n"; } - qpGeomCacheManager *cache_mgr = qpGeomCacheManager::get_global_ptr(); + GeomCacheManager *cache_mgr = GeomCacheManager::get_global_ptr(); MutexHolder holder(cache_mgr->_lock); remove_from_list(); @@ -129,7 +129,7 @@ erase() { if (PStatClient::is_connected()) { int current_frame = ClockObject::get_global_clock()->get_frame_count(); if (_last_frame_used == current_frame) { - qpGeomCacheManager::_geom_cache_active_pcollector.sub_level(1); + GeomCacheManager::_geom_cache_active_pcollector.sub_level(1); } } @@ -137,21 +137,21 @@ erase() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomCacheEntry::evict_callback +// Function: GeomCacheEntry::evict_callback // Access: Public, Virtual // Description: Called when the entry is evicted from the cache, this // should clean up the owning object appropriately. //////////////////////////////////////////////////////////////////// -void qpGeomCacheEntry:: +void GeomCacheEntry:: evict_callback() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomCacheEntry::output +// Function: GeomCacheEntry::output // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -void qpGeomCacheEntry:: +void GeomCacheEntry:: output(ostream &out) const { out << "[ unknown ]"; } diff --git a/panda/src/gobj/qpgeomCacheEntry.h b/panda/src/gobj/geomCacheEntry.h similarity index 66% rename from panda/src/gobj/qpgeomCacheEntry.h rename to panda/src/gobj/geomCacheEntry.h index 0f914bc8be..538f863f9b 100644 --- a/panda/src/gobj/qpgeomCacheEntry.h +++ b/panda/src/gobj/geomCacheEntry.h @@ -1,4 +1,4 @@ -// Filename: qpgeomCacheEntry.h +// Filename: geomCacheEntry.h // Created by: drose (21Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,35 +16,33 @@ // //////////////////////////////////////////////////////////////////// -#ifndef qpGEOMCACHEENTRY_H -#define qpGEOMCACHEENTRY_H +#ifndef GEOMCACHEENTRY_H +#define GEOMCACHEENTRY_H #include "pandabase.h" -#include "qpgeomCacheManager.h" +#include "geomCacheManager.h" #include "referenceCount.h" #include "config_gobj.h" #include "pointerTo.h" #include "mutexHolder.h" -class qpGeom; -class qpGeomPrimitive; +class Geom; +class GeomPrimitive; //////////////////////////////////////////////////////////////////// -// Class : qpGeomCacheEntry +// Class : GeomCacheEntry // Description : This object contains a single cache entry in the // GeomCacheManager. This is actually the base class of // any number of individual cache types. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// -class EXPCL_PANDA qpGeomCacheEntry : public ReferenceCount { +class EXPCL_PANDA GeomCacheEntry : public ReferenceCount { public: - INLINE qpGeomCacheEntry(); - virtual ~qpGeomCacheEntry(); + INLINE GeomCacheEntry(); + virtual ~GeomCacheEntry(); - PT(qpGeomCacheEntry) record(); + PT(GeomCacheEntry) record(); void refresh(); - PT(qpGeomCacheEntry) erase(); + PT(GeomCacheEntry) erase(); virtual void evict_callback(); virtual void output(ostream &out) const; @@ -53,16 +51,16 @@ private: int _last_frame_used; INLINE void remove_from_list(); - INLINE void insert_before(qpGeomCacheEntry *node); + INLINE void insert_before(GeomCacheEntry *node); private: - qpGeomCacheEntry *_prev, *_next; + GeomCacheEntry *_prev, *_next; - friend class qpGeomCacheManager; + friend class GeomCacheManager; }; -INLINE ostream &operator << (ostream &out, const qpGeomCacheEntry &entry); +INLINE ostream &operator << (ostream &out, const GeomCacheEntry &entry); -#include "qpgeomCacheEntry.I" +#include "geomCacheEntry.I" #endif diff --git a/panda/src/gobj/qpgeomCacheManager.I b/panda/src/gobj/geomCacheManager.I similarity index 88% rename from panda/src/gobj/qpgeomCacheManager.I rename to panda/src/gobj/geomCacheManager.I index 2d4f29b0ba..107e134c9b 100644 --- a/panda/src/gobj/qpgeomCacheManager.I +++ b/panda/src/gobj/geomCacheManager.I @@ -1,4 +1,4 @@ -// Filename: qpgeomCacheManager.I +// Filename: geomCacheManager.I // Created by: drose (11Mar05) // //////////////////////////////////////////////////////////////////// @@ -18,7 +18,7 @@ //////////////////////////////////////////////////////////////////// -// Function: qpGeomCacheManager::set_max_size +// Function: GeomCacheManager::set_max_size // Access: Published // Description: Specifies the maximum number of entries in the cache // for storing pre-processed data for rendering @@ -31,30 +31,30 @@ // of memory used by the video driver or the system // graphics interface, which Panda has no control over. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomCacheManager:: +INLINE void GeomCacheManager:: set_max_size(int max_size) const { // We directly change the config variable. geom_cache_size = max_size; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomCacheManager::get_max_size +// Function: GeomCacheManager::get_max_size // Access: Published // Description: Returns the maximum number of entries in the cache // for storing pre-processed data for rendering // vertices. See set_max_size(). //////////////////////////////////////////////////////////////////// -INLINE int qpGeomCacheManager:: +INLINE int GeomCacheManager:: get_max_size() const { return geom_cache_size; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomCacheManager::get_total_size +// Function: GeomCacheManager::get_total_size // Access: Published // Description: Returns the number of entries currently in the cache. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomCacheManager:: +INLINE int GeomCacheManager:: get_total_size() const { return _total_size; } diff --git a/panda/src/gobj/qpgeomCacheManager.cxx b/panda/src/gobj/geomCacheManager.cxx similarity index 70% rename from panda/src/gobj/qpgeomCacheManager.cxx rename to panda/src/gobj/geomCacheManager.cxx index c3432fd1fc..00a039445f 100644 --- a/panda/src/gobj/qpgeomCacheManager.cxx +++ b/panda/src/gobj/geomCacheManager.cxx @@ -1,4 +1,4 @@ -// Filename: qpgeomCacheManager.cxx +// Filename: geomCacheManager.cxx // Created by: drose (11Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,65 +16,65 @@ // //////////////////////////////////////////////////////////////////// -#include "qpgeomCacheManager.h" -#include "qpgeomCacheEntry.h" +#include "geomCacheManager.h" +#include "geomCacheEntry.h" #include "mutexHolder.h" -qpGeomCacheManager *qpGeomCacheManager::_global_ptr = NULL; +GeomCacheManager *GeomCacheManager::_global_ptr = NULL; -PStatCollector qpGeomCacheManager::_geom_cache_size_pcollector("Geom cache size"); -PStatCollector qpGeomCacheManager::_geom_cache_active_pcollector("Geom cache size:Active"); -PStatCollector qpGeomCacheManager::_geom_cache_record_pcollector("Geom cache operations:record"); -PStatCollector qpGeomCacheManager::_geom_cache_erase_pcollector("Geom cache operations:erase"); -PStatCollector qpGeomCacheManager::_geom_cache_evict_pcollector("Geom cache operations:evict"); +PStatCollector GeomCacheManager::_geom_cache_size_pcollector("Geom cache size"); +PStatCollector GeomCacheManager::_geom_cache_active_pcollector("Geom cache size:Active"); +PStatCollector GeomCacheManager::_geom_cache_record_pcollector("Geom cache operations:record"); +PStatCollector GeomCacheManager::_geom_cache_erase_pcollector("Geom cache operations:erase"); +PStatCollector GeomCacheManager::_geom_cache_evict_pcollector("Geom cache operations:evict"); //////////////////////////////////////////////////////////////////// -// Function: qpGeomCacheManager::Constructor +// Function: GeomCacheManager::Constructor // Access: Protected // Description: //////////////////////////////////////////////////////////////////// -qpGeomCacheManager:: -qpGeomCacheManager() : +GeomCacheManager:: +GeomCacheManager() : _total_size(0) { // We deliberately hang on to this pointer forever. - _list = new qpGeomCacheEntry; + _list = new GeomCacheEntry; _list->ref(); _list->_next = _list; _list->_prev = _list; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomCacheManager::Destructor +// Function: GeomCacheManager::Destructor // Access: Protected // Description: //////////////////////////////////////////////////////////////////// -qpGeomCacheManager:: -~qpGeomCacheManager() { +GeomCacheManager:: +~GeomCacheManager() { // Shouldn't be deleting this global object. nassertv(false); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomCacheManager::get_global_ptr +// Function: GeomCacheManager::get_global_ptr // Access: Published, Static // Description: Returns the global cache manager pointer. //////////////////////////////////////////////////////////////////// -qpGeomCacheManager *qpGeomCacheManager:: +GeomCacheManager *GeomCacheManager:: get_global_ptr() { - if (_global_ptr == (qpGeomCacheManager *)NULL) { - _global_ptr = new qpGeomCacheManager; + if (_global_ptr == (GeomCacheManager *)NULL) { + _global_ptr = new GeomCacheManager; } return _global_ptr; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomCacheManager::evict_old_entries +// Function: GeomCacheManager::evict_old_entries // Access: Private // Description: Trims the cache size down to get_max_size() by // evicting old cache entries as needed. //////////////////////////////////////////////////////////////////// -void qpGeomCacheManager:: +void GeomCacheManager:: evict_old_entries() { MutexHolder holder(_lock); @@ -83,7 +83,7 @@ evict_old_entries() { int max_size = get_max_size(); while (_total_size > max_size) { - PT(qpGeomCacheEntry) entry = _list->_next; + PT(GeomCacheEntry) entry = _list->_next; nassertv(entry != _list); if (current_frame - entry->_last_frame_used < min_frames) { @@ -109,7 +109,7 @@ evict_old_entries() { if (PStatClient::is_connected()) { if (entry->_last_frame_used == current_frame) { - qpGeomCacheManager::_geom_cache_active_pcollector.sub_level(1); + GeomCacheManager::_geom_cache_active_pcollector.sub_level(1); } } diff --git a/panda/src/gobj/qpgeomCacheManager.h b/panda/src/gobj/geomCacheManager.h similarity index 85% rename from panda/src/gobj/qpgeomCacheManager.h rename to panda/src/gobj/geomCacheManager.h index 4f705187a5..71b414f23d 100644 --- a/panda/src/gobj/qpgeomCacheManager.h +++ b/panda/src/gobj/geomCacheManager.h @@ -1,4 +1,4 @@ -// Filename: qpgeomCacheManager.h +// Filename: geomCacheManager.h // Created by: drose (11Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,18 +16,18 @@ // //////////////////////////////////////////////////////////////////// -#ifndef qpGEOMCACHEMANAGER_H -#define qpGEOMCACHEMANAGER_H +#ifndef GEOMCACHEMANAGER_H +#define GEOMCACHEMANAGER_H #include "pandabase.h" #include "config_gobj.h" #include "pmutex.h" #include "pStatCollector.h" -class qpGeomCacheEntry; +class GeomCacheEntry; //////////////////////////////////////////////////////////////////// -// Class : qpGeomCacheManager +// Class : GeomCacheManager // Description : This is used to keep track of, and limit the size of, // the cache of munged vertices, which would otherwise // be distributed through all of the GeomVertexData @@ -43,13 +43,11 @@ class qpGeomCacheEntry; // the same LRU cache list. Some of them (such as // GeomMunger) are reference-counted here in the cache; // most are not. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// -class EXPCL_PANDA qpGeomCacheManager { +class EXPCL_PANDA GeomCacheManager { protected: - qpGeomCacheManager(); - ~qpGeomCacheManager(); + GeomCacheManager(); + ~GeomCacheManager(); PUBLISHED: INLINE void set_max_size(int max_size) const; @@ -57,7 +55,7 @@ PUBLISHED: INLINE int get_total_size() const; - static qpGeomCacheManager *get_global_ptr(); + static GeomCacheManager *get_global_ptr(); public: void evict_old_entries(); @@ -81,9 +79,9 @@ private: // always exists solely to keep a handle to the list. Keeping a // token of the list this way avoids special cases for an empty // list. - qpGeomCacheEntry *_list; + GeomCacheEntry *_list; - static qpGeomCacheManager *_global_ptr; + static GeomCacheManager *_global_ptr; public: static PStatCollector _geom_cache_size_pcollector; @@ -92,9 +90,9 @@ public: static PStatCollector _geom_cache_erase_pcollector; static PStatCollector _geom_cache_evict_pcollector; - friend class qpGeomCacheEntry; + friend class GeomCacheEntry; }; -#include "qpgeomCacheManager.I" +#include "geomCacheManager.I" #endif diff --git a/panda/src/gobj/geomContext.I b/panda/src/gobj/geomContext.I index 887b625442..3516a34991 100644 --- a/panda/src/gobj/geomContext.I +++ b/panda/src/gobj/geomContext.I @@ -26,66 +26,4 @@ INLINE GeomContext:: GeomContext(Geom *geom) : _geom(geom) { - _dirty_flags = 0; } - -//////////////////////////////////////////////////////////////////// -// Function: GeomContext::mark_dirty -// Access: Public -// Description: Marks the context "dirty", i.e. its properties are -// different from the last time the GSG has seen them. -// Presumably, the GSG will respond by updating the -// properties and clearing the dirty bits the next time -// it renders the geom. -// -// The value is the union of all the bits that are to be -// set dirty; bits that are not set in this parameter -// are left unchanged. See Geom::DirtyFlags for a -// list of available bits. -// -// Usually this function is not called directly, but -// rather is called by Geom::mark_dirty() as a result -// of changing properties directly on the geom. -//////////////////////////////////////////////////////////////////// -INLINE void GeomContext:: -mark_dirty(int flags_to_set) { - _dirty_flags |= flags_to_set; -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomContext::clear_dirty_flags -// Access: Public -// Description: Removes the indicated flags from the "dirty" bits. -// See mark_dirty(). -// -// The value is the union of all the bits that are to be -// cleared; if a bit is set in the parameter, it will be -// removed from the dirty set. Bits that are not set in -// this parameter are left unchanged. -// -// This function is intended to be called by the GSG -// after it has updated the geom parameters. -//////////////////////////////////////////////////////////////////// -INLINE void GeomContext:: -clear_dirty_flags(int flags_to_clear) { - _dirty_flags &= ~flags_to_clear; - _geom->_all_dirty_flags &= ~flags_to_clear; -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomContext::get_dirty_flags -// Access: Public -// Description: Returns the current state of the dirty flags. If -// this is non-zero, it represents the union of all -// properties that have been changed since the last call -// to clear_dirty_flags(). -// -// This function is intended to be called by the GSG to -// determine what properties need to be updated. See -// Geom::DirtyFlags for a list of possible bits. -//////////////////////////////////////////////////////////////////// -INLINE int GeomContext:: -get_dirty_flags() const { - return _dirty_flags; -} - diff --git a/panda/src/gobj/geomContext.h b/panda/src/gobj/geomContext.h index 98a485fdb3..9d579a3782 100644 --- a/panda/src/gobj/geomContext.h +++ b/panda/src/gobj/geomContext.h @@ -49,14 +49,6 @@ public: // reference count. Geom *_geom; - INLINE void mark_dirty(int flags_to_set); - INLINE void clear_dirty_flags(int flags_to_clear = ~0); - INLINE int get_dirty_flags() const; - -private: - int _dirty_flags; - - public: static TypeHandle get_class_type() { return _type_handle; diff --git a/panda/src/gobj/qpgeomEnums.cxx b/panda/src/gobj/geomEnums.cxx similarity index 67% rename from panda/src/gobj/qpgeomEnums.cxx rename to panda/src/gobj/geomEnums.cxx index aa6b9f0c15..9f91c9c5d7 100644 --- a/panda/src/gobj/qpgeomEnums.cxx +++ b/panda/src/gobj/geomEnums.cxx @@ -1,4 +1,4 @@ -// Filename: qpgeomEnums.cxx +// Filename: geomEnums.cxx // Created by: drose (14Apr05) // //////////////////////////////////////////////////////////////////// @@ -16,28 +16,28 @@ // //////////////////////////////////////////////////////////////////// -#include "qpgeomEnums.h" +#include "geomEnums.h" ostream & -operator << (ostream &out, qpGeomEnums::NumericType numeric_type) { +operator << (ostream &out, GeomEnums::NumericType numeric_type) { switch (numeric_type) { - case qpGeomEnums::NT_uint8: + case GeomEnums::NT_uint8: return out << "uint8"; - case qpGeomEnums::NT_uint16: + case GeomEnums::NT_uint16: return out << "uint16"; - case qpGeomEnums::NT_uint32: + case GeomEnums::NT_uint32: return out << "uint32"; - case qpGeomEnums::NT_packed_dcba: + case GeomEnums::NT_packed_dcba: return out << "packed_dcba"; - case qpGeomEnums::NT_packed_dabc: + case GeomEnums::NT_packed_dabc: return out << "packed_dabc"; - case qpGeomEnums::NT_float32: + case GeomEnums::NT_float32: return out << "float32"; } @@ -45,30 +45,30 @@ operator << (ostream &out, qpGeomEnums::NumericType numeric_type) { } ostream & -operator << (ostream &out, qpGeomEnums::Contents contents) { +operator << (ostream &out, GeomEnums::Contents contents) { switch (contents) { - case qpGeomEnums::C_other: + case GeomEnums::C_other: return out << "other"; - case qpGeomEnums::C_point: + case GeomEnums::C_point: return out << "point"; - case qpGeomEnums::C_clip_point: + case GeomEnums::C_clip_point: return out << "clip_point"; - case qpGeomEnums::C_vector: + case GeomEnums::C_vector: return out << "vector"; - case qpGeomEnums::C_texcoord: + case GeomEnums::C_texcoord: return out << "texcoord"; - case qpGeomEnums::C_color: + case GeomEnums::C_color: return out << "color"; - case qpGeomEnums::C_index: + case GeomEnums::C_index: return out << "index"; - case qpGeomEnums::C_morph_delta: + case GeomEnums::C_morph_delta: return out << "morph_delta"; } diff --git a/panda/src/gobj/qpgeomEnums.h b/panda/src/gobj/geomEnums.h similarity index 94% rename from panda/src/gobj/qpgeomEnums.h rename to panda/src/gobj/geomEnums.h index 1f37382526..888bf225c3 100644 --- a/panda/src/gobj/qpgeomEnums.h +++ b/panda/src/gobj/geomEnums.h @@ -1,4 +1,4 @@ -// Filename: qpgeomEnums.h +// Filename: geomEnums.h // Created by: drose (14Apr05) // //////////////////////////////////////////////////////////////////// @@ -16,21 +16,19 @@ // //////////////////////////////////////////////////////////////////// -#ifndef qpGEOMENUMS_H -#define qpGEOMENUMS_H +#ifndef GEOMENUMS_H +#define GEOMENUMS_H #include "pandabase.h" //////////////////////////////////////////////////////////////////// -// Class : qpGeomEnums +// Class : GeomEnums // Description : This class exists just to provide scoping for the // various enumerated types used by Geom, // GeomVertexData, GeomVertexArrayData, GeomPrimitive, // and other related classes. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// -class EXPCL_PANDA qpGeomEnums { +class EXPCL_PANDA GeomEnums { PUBLISHED: // The usage hint describes to the rendering backend how often the @@ -118,7 +116,7 @@ PUBLISHED: GR_point_sprite_tex_matrix = 0x0200, // The union of all the above point attributes, except GR_indexed_point. - GR_point_bits = 0x03f3, + GR_point_bits = 0x03fe, // If there are any of these composite types. GR_triangle_strip = 0x0400, @@ -206,8 +204,8 @@ PUBLISHED: }; -EXPCL_PANDA ostream &operator << (ostream &out, qpGeomEnums::NumericType numeric_type); -EXPCL_PANDA ostream &operator << (ostream &out, qpGeomEnums::Contents contents); +EXPCL_PANDA ostream &operator << (ostream &out, GeomEnums::NumericType numeric_type); +EXPCL_PANDA ostream &operator << (ostream &out, GeomEnums::Contents contents); #endif diff --git a/panda/src/gobj/geomLine.cxx b/panda/src/gobj/geomLine.cxx deleted file mode 100644 index 1c1610b2d9..0000000000 --- a/panda/src/gobj/geomLine.cxx +++ /dev/null @@ -1,111 +0,0 @@ -// Filename: geomLine.cxx -// Created by: charles (13Jul00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "datagram.h" -#include "datagramIterator.h" -#include "bamReader.h" -#include "bamWriter.h" -#include "ioPtaDatagramShort.h" -#include "ioPtaDatagramInt.h" -#include "ioPtaDatagramLinMath.h" -#include "graphicsStateGuardianBase.h" - -#include "geomLine.h" - -TypeHandle GeomLine::_type_handle; - -//////////////////////////////////////////////////////////////////// -// Function: GeomLine::make_copy -// Access: Public, Virtual -// Description: Returns a newly-allocated Geom that is a shallow copy -// of this one. It will be a different Geom pointer, -// but its internal data may or may not be shared with -// that of the original Geom. -//////////////////////////////////////////////////////////////////// -Geom *GeomLine:: -make_copy() const { - return new GeomLine(*this); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomLine::draw_immediate -// Access: -// Description: -//////////////////////////////////////////////////////////////////// -void GeomLine:: -draw_immediate(GraphicsStateGuardianBase *gsg, GeomContext *gc) { - gsg->draw_line(this, gc); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomLine::write_datagram -// Access: Public -// Description: Function to write the important information in -// the particular object to a Datagram -//////////////////////////////////////////////////////////////////// -void GeomLine:: -write_datagram(BamWriter *manager, Datagram &me) -{ - Geom::write_datagram(manager, me); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomLine::make_GeomLine -// Access: Protected -// Description: Factory method to generate a GeomLine object -//////////////////////////////////////////////////////////////////// -TypedWritable* GeomLine:: -make_GeomLine(const FactoryParams ¶ms) { - GeomLine *me = new GeomLine; - DatagramIterator scan; - BamReader *manager; - - parse_params(params, scan, manager); - me->fillin(scan, manager); - me->make_dirty(); - me->config(); - return me; -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomLine::fillin -// Access: Protected -// Description: Function that reads out of the datagram (or asks -// manager to read) all of the data that is needed to -// re-create this object and stores it in the appropiate -// place -//////////////////////////////////////////////////////////////////// -void GeomLine:: -fillin(DatagramIterator &scan, BamReader *manager) { - Geom::fillin(scan, manager); - - if (manager->get_file_minor_ver() < 15) { - // Skip width parameter. - scan.get_float32(); - } -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomLine::register_with_factory -// Access: Public, Static -// Description: Factory method to generate a GeomLine object -//////////////////////////////////////////////////////////////////// -void GeomLine:: -register_with_read_factory(void) { - BamReader::get_factory()->register_factory(get_class_type(), make_GeomLine); -} diff --git a/panda/src/gobj/geomLine.h b/panda/src/gobj/geomLine.h deleted file mode 100644 index 6686a77468..0000000000 --- a/panda/src/gobj/geomLine.h +++ /dev/null @@ -1,82 +0,0 @@ -// Filename: geomLine.h -// Created by: charles (13Jul00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef GEOMLINE_H -#define GEOMLINE_H - -#include "geom.h" - -//////////////////////////////////////////////////////////////////// -// Class : GeomLine -// Description : Line Primitive -//////////////////////////////////////////////////////////////////// -class EXPCL_PANDA GeomLine : public Geom -{ -public: - GeomLine( void ) : Geom() { } - virtual Geom *make_copy() const; - virtual void print_draw_immediate( void ) const { } - virtual void draw_immediate(GraphicsStateGuardianBase *gsg, GeomContext *gc); - - virtual int get_num_vertices_per_prim() const { - return 2; - } - virtual int get_num_more_vertices_than_components() const { - return 0; - } - virtual bool uses_components() const { - return false; - } - - virtual int get_length(int) const { - return 2; - } - - virtual Geom *explode() const { - return new GeomLine(*this); - } - -public: - static void register_with_read_factory(void); - virtual void write_datagram(BamWriter* manager, Datagram &me); - - static TypedWritable *make_GeomLine(const FactoryParams ¶ms); - -protected: - void fillin(DatagramIterator& scan, BamReader* manager); - -PUBLISHED: - static TypeHandle get_class_type() { - return _type_handle; - } -public: - static void init_type() { - Geom::init_type(); - register_type(_type_handle, "GeomLine", - Geom::get_class_type()); - } - virtual TypeHandle get_type() const { - return get_class_type(); - } - virtual TypeHandle force_init_type() {init_type(); return get_class_type();} - -private: - static TypeHandle _type_handle; -}; - -#endif diff --git a/panda/src/gobj/qpgeomLines.cxx b/panda/src/gobj/geomLines.cxx similarity index 77% rename from panda/src/gobj/qpgeomLines.cxx rename to panda/src/gobj/geomLines.cxx index 0ef0ed60cb..484cf43006 100644 --- a/panda/src/gobj/qpgeomLines.cxx +++ b/panda/src/gobj/geomLines.cxx @@ -1,4 +1,4 @@ -// Filename: qpgeomLines.cxx +// Filename: geomLines.cxx // Created by: drose (22Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,56 +16,56 @@ // //////////////////////////////////////////////////////////////////// -#include "qpgeomLines.h" +#include "geomLines.h" #include "pStatTimer.h" #include "bamReader.h" #include "bamWriter.h" -TypeHandle qpGeomLines::_type_handle; +TypeHandle GeomLines::_type_handle; //////////////////////////////////////////////////////////////////// -// Function: qpGeomLines::Constructor +// Function: GeomLines::Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -qpGeomLines:: -qpGeomLines(qpGeomLines::UsageHint usage_hint) : - qpGeomPrimitive(usage_hint) +GeomLines:: +GeomLines(GeomLines::UsageHint usage_hint) : + GeomPrimitive(usage_hint) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomLines::Copy Constructor +// Function: GeomLines::Copy Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -qpGeomLines:: -qpGeomLines(const qpGeomLines ©) : - qpGeomPrimitive(copy) +GeomLines:: +GeomLines(const GeomLines ©) : + GeomPrimitive(copy) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomLines::Destructor +// Function: GeomLines::Destructor // Access: Published, Virtual // Description: //////////////////////////////////////////////////////////////////// -qpGeomLines:: -~qpGeomLines() { +GeomLines:: +~GeomLines() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomLines::make_copy +// Function: GeomLines::make_copy // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -PT(qpGeomPrimitive) qpGeomLines:: +PT(GeomPrimitive) GeomLines:: make_copy() const { - return new qpGeomLines(*this); + return new GeomLines(*this); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomLines::get_primitive_type +// Function: GeomLines::get_primitive_type // Access: Public, Virtual // Description: Returns the fundamental rendering type of this // primitive: whether it is points, lines, or polygons. @@ -75,13 +75,13 @@ make_copy() const { // it also implies the type of primitive that will be // produced when decompose() is called. //////////////////////////////////////////////////////////////////// -qpGeomPrimitive::PrimitiveType qpGeomLines:: +GeomPrimitive::PrimitiveType GeomLines:: get_primitive_type() const { return PT_lines; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomLines::get_num_vertices_per_primitive +// Function: GeomLines::get_num_vertices_per_primitive // Access: Public, Virtual // Description: If the primitive type is a simple type in which all // primitives have the same number of vertices, like @@ -91,50 +91,50 @@ get_primitive_type() const { // different numbers of vertices, for instance a // line strip, returns 0. //////////////////////////////////////////////////////////////////// -int qpGeomLines:: +int GeomLines:: get_num_vertices_per_primitive() const { return 2; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomLines::get_min_num_vertices_per_primitive +// Function: GeomLines::get_min_num_vertices_per_primitive // Access: Public, Virtual // Description: Returns the minimum number of vertices that must be // added before close_primitive() may legally be called. //////////////////////////////////////////////////////////////////// -int qpGeomLines:: +int GeomLines:: get_min_num_vertices_per_primitive() const { return 2; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomLines::draw +// Function: GeomLines::draw // Access: Public, Virtual // Description: Calls the appropriate method on the GSG to draw the // primitive. //////////////////////////////////////////////////////////////////// -void qpGeomLines:: +void GeomLines:: draw(GraphicsStateGuardianBase *gsg) const { gsg->draw_lines(this); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomLines::rotate_impl +// Function: GeomLines::rotate_impl // Access: Protected, Virtual // Description: The virtual implementation of do_rotate(). //////////////////////////////////////////////////////////////////// -CPT(qpGeomVertexArrayData) qpGeomLines:: +CPT(GeomVertexArrayData) GeomLines:: rotate_impl() const { // To rotate lines, we just move reverse the pairs of vertices. int num_vertices = get_num_vertices(); - PT(qpGeomVertexArrayData) new_vertices = make_index_data(); + PT(GeomVertexArrayData) new_vertices = make_index_data(); new_vertices->set_num_rows(num_vertices); if (is_indexed()) { - CPT(qpGeomVertexArrayData) vertices = get_vertices(); - qpGeomVertexReader from(vertices, 0); - qpGeomVertexWriter to(new_vertices, 0); + CPT(GeomVertexArrayData) vertices = get_vertices(); + GeomVertexReader from(vertices, 0); + GeomVertexWriter to(new_vertices, 0); for (int begin = 0; begin < num_vertices; begin += 2) { from.set_row(begin + 1); @@ -148,7 +148,7 @@ rotate_impl() const { } else { // Nonindexed case. int first_vertex = get_first_vertex(); - qpGeomVertexWriter to(new_vertices, 0); + GeomVertexWriter to(new_vertices, 0); for (int begin = 0; begin < num_vertices; begin += 2) { to.set_data1i(begin + 1 + first_vertex); @@ -162,27 +162,27 @@ rotate_impl() const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomLines::register_with_read_factory +// Function: GeomLines::register_with_read_factory // Access: Public, Static // Description: Tells the BamReader how to create objects of type -// qpGeom. +// Geom. //////////////////////////////////////////////////////////////////// -void qpGeomLines:: +void GeomLines:: register_with_read_factory() { BamReader::get_factory()->register_factory(get_class_type(), make_from_bam); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomLines::make_from_bam +// Function: GeomLines::make_from_bam // Access: Protected, Static // Description: This function is called by the BamReader's factory -// when a new object of type qpGeom is encountered -// in the Bam file. It should create the qpGeom +// when a new object of type Geom is encountered +// in the Bam file. It should create the Geom // and extract its information from the file. //////////////////////////////////////////////////////////////////// -TypedWritable *qpGeomLines:: +TypedWritable *GeomLines:: make_from_bam(const FactoryParams ¶ms) { - qpGeomLines *object = new qpGeomLines(UH_unspecified); + GeomLines *object = new GeomLines(UH_unspecified); DatagramIterator scan; BamReader *manager; diff --git a/panda/src/gobj/qpgeomLines.h b/panda/src/gobj/geomLines.h similarity index 71% rename from panda/src/gobj/qpgeomLines.h rename to panda/src/gobj/geomLines.h index 954ababfb6..6499476e82 100644 --- a/panda/src/gobj/qpgeomLines.h +++ b/panda/src/gobj/geomLines.h @@ -1,4 +1,4 @@ -// Filename: qpgeomLines.h +// Filename: geomLines.h // Created by: drose (22Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,26 +16,24 @@ // //////////////////////////////////////////////////////////////////// -#ifndef qpGEOMLINES_H -#define qpGEOMLINES_H +#ifndef GEOMLINES_H +#define GEOMLINES_H #include "pandabase.h" -#include "qpgeomPrimitive.h" +#include "geomPrimitive.h" //////////////////////////////////////////////////////////////////// -// Class : qpGeomLines +// Class : GeomLines // Description : Defines a series of disconnected line segments. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// -class EXPCL_PANDA qpGeomLines : public qpGeomPrimitive { +class EXPCL_PANDA GeomLines : public GeomPrimitive { PUBLISHED: - qpGeomLines(UsageHint usage_hint); - qpGeomLines(const qpGeomLines ©); - virtual ~qpGeomLines(); + GeomLines(UsageHint usage_hint); + GeomLines(const GeomLines ©); + virtual ~GeomLines(); public: - virtual PT(qpGeomPrimitive) make_copy() const; + virtual PT(GeomPrimitive) make_copy() const; virtual PrimitiveType get_primitive_type() const; virtual int get_num_vertices_per_primitive() const; @@ -45,7 +43,7 @@ public: virtual void draw(GraphicsStateGuardianBase *gsg) const; protected: - virtual CPT(qpGeomVertexArrayData) rotate_impl() const; + virtual CPT(GeomVertexArrayData) rotate_impl() const; public: static void register_with_read_factory(); @@ -58,9 +56,9 @@ public: return _type_handle; } static void init_type() { - qpGeomPrimitive::init_type(); - register_type(_type_handle, "qpGeomLines", - qpGeomPrimitive::get_class_type()); + GeomPrimitive::init_type(); + register_type(_type_handle, "GeomLines", + GeomPrimitive::get_class_type()); } virtual TypeHandle get_type() const { return get_class_type(); @@ -70,7 +68,7 @@ public: private: static TypeHandle _type_handle; - friend class qpGeom; + friend class Geom; }; #endif diff --git a/panda/src/gobj/geomLinestrip.cxx b/panda/src/gobj/geomLinestrip.cxx deleted file mode 100644 index 7d13ccc0dd..0000000000 --- a/panda/src/gobj/geomLinestrip.cxx +++ /dev/null @@ -1,123 +0,0 @@ -// Filename: geomLinestrip.cxx -// Created by: charles (13Jul00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "datagram.h" -#include "datagramIterator.h" -#include "bamReader.h" -#include "bamWriter.h" -#include "ioPtaDatagramShort.h" -#include "ioPtaDatagramInt.h" -#include "ioPtaDatagramLinMath.h" -#include "graphicsStateGuardianBase.h" - -#include "config_gobj.h" -#include "geomLinestrip.h" - -TypeHandle GeomLinestrip::_type_handle; - -//////////////////////////////////////////////////////////////////// -// Function: GeomLinestrip::make_copy -// Access: Public, Virtual -// Description: Returns a newly-allocated Geom that is a shallow copy -// of this one. It will be a different Geom pointer, -// but its internal data may or may not be shared with -// that of the original Geom. -//////////////////////////////////////////////////////////////////// -Geom *GeomLinestrip:: -make_copy() const { - return new GeomLinestrip(*this); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomLinestrip::draw_immediate -// Access: -// Description: -//////////////////////////////////////////////////////////////////// -void GeomLinestrip:: -draw_immediate(GraphicsStateGuardianBase *gsg, GeomContext *gc) { - gsg->draw_linestrip(this, gc); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomLinestrip::explode -// Access: -// Description: -//////////////////////////////////////////////////////////////////// -Geom *GeomLinestrip:: -explode() const { - gobj_cat.error() - << "GeomLinestrip::explode() - not implemented yet!!!" << endl; - return new GeomLinestrip(*this); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomLinestrip::write_datagram -// Access: Public -// Description: Function to write the important information in -// the particular object to a Datagram -//////////////////////////////////////////////////////////////////// -void GeomLinestrip:: -write_datagram(BamWriter *manager, Datagram &me) { - Geom::write_datagram(manager, me); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomLinestrip::make_GeomLinestrip -// Access: Protected -// Description: Factory method to generate a GeomLinestrip object -//////////////////////////////////////////////////////////////////// -TypedWritable* GeomLinestrip:: -make_GeomLinestrip(const FactoryParams ¶ms) { - GeomLinestrip *me = new GeomLinestrip; - DatagramIterator scan; - BamReader *manager; - - parse_params(params, scan, manager); - me->fillin(scan, manager); - me->make_dirty(); - me->config(); - return me; -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomLinestrip::fillin -// Access: Protected -// Description: Function that reads out of the datagram (or asks -// manager to read) all of the data that is needed to -// re-create this object and stores it in the appropiate -// place -//////////////////////////////////////////////////////////////////// -void GeomLinestrip:: -fillin(DatagramIterator& scan, BamReader* manager) { - Geom::fillin(scan, manager); - - if (manager->get_file_minor_ver() < 15) { - // Skip width parameter. - scan.get_float32(); - } -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomLinestrip::register_with_factory -// Access: Public, Static -// Description: Factory method to generate a GeomLinestrip object -//////////////////////////////////////////////////////////////////// -void GeomLinestrip:: -register_with_read_factory(void) { - BamReader::get_factory()->register_factory(get_class_type(), make_GeomLinestrip); -} diff --git a/panda/src/gobj/geomLinestrip.h b/panda/src/gobj/geomLinestrip.h deleted file mode 100644 index 67d614648b..0000000000 --- a/panda/src/gobj/geomLinestrip.h +++ /dev/null @@ -1,81 +0,0 @@ -// Filename: geomLinestrip.h -// Created by: charles (13Jul00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef GEOMLINESTRIP_H -#define GEOMLINESTRIP_H - -#include "geom.h" - -//////////////////////////////////////////////////////////////////// -// Class : GeomLinestrip -// Description : Linestrip Primitive -//////////////////////////////////////////////////////////////////// -class EXPCL_PANDA GeomLinestrip : public Geom -{ -public: - GeomLinestrip(void) : Geom() { } - virtual Geom *make_copy() const; - virtual void print_draw_immediate( void ) const { } - virtual void draw_immediate(GraphicsStateGuardianBase *gsg, GeomContext *gc); - - // Undefined for this type of primitive - virtual int get_num_vertices_per_prim() const { - return 0; - } - virtual int get_num_more_vertices_than_components() const { - return 1; - } - virtual bool uses_components() const { - return true; - } - - virtual int get_length(int prim) const { - return _primlengths[prim]; - } - - virtual Geom *explode() const; - -public: - static void register_with_read_factory(void); - virtual void write_datagram(BamWriter* manager, Datagram &me); - - static TypedWritable *make_GeomLinestrip(const FactoryParams ¶ms); - -protected: - void fillin(DatagramIterator& scan, BamReader* manager); - -PUBLISHED: - static TypeHandle get_class_type() { - return _type_handle; - } -public: - static void init_type() { - Geom::init_type(); - register_type(_type_handle, "GeomLinestrip", - Geom::get_class_type()); - } - virtual TypeHandle get_type() const { - return get_class_type(); - } - virtual TypeHandle force_init_type() {init_type(); return get_class_type();} - -private: - static TypeHandle _type_handle; -}; - -#endif // GEOMLINESTRIP_H diff --git a/panda/src/gobj/qpgeomLinestrips.cxx b/panda/src/gobj/geomLinestrips.cxx similarity index 77% rename from panda/src/gobj/qpgeomLinestrips.cxx rename to panda/src/gobj/geomLinestrips.cxx index b28db229bf..74bfa44a45 100644 --- a/panda/src/gobj/qpgeomLinestrips.cxx +++ b/panda/src/gobj/geomLinestrips.cxx @@ -1,4 +1,4 @@ -// Filename: qpgeomLinestrips.cxx +// Filename: geomLinestrips.cxx // Created by: drose (22Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,58 +16,58 @@ // //////////////////////////////////////////////////////////////////// -#include "qpgeomLinestrips.h" -#include "qpgeomLines.h" -#include "qpgeomVertexRewriter.h" +#include "geomLinestrips.h" +#include "geomLines.h" +#include "geomVertexRewriter.h" #include "pStatTimer.h" #include "bamReader.h" #include "bamWriter.h" -TypeHandle qpGeomLinestrips::_type_handle; +TypeHandle GeomLinestrips::_type_handle; //////////////////////////////////////////////////////////////////// -// Function: qpGeomLinestrips::Constructor +// Function: GeomLinestrips::Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -qpGeomLinestrips:: -qpGeomLinestrips(qpGeomLinestrips::UsageHint usage_hint) : - qpGeomPrimitive(usage_hint) +GeomLinestrips:: +GeomLinestrips(GeomLinestrips::UsageHint usage_hint) : + GeomPrimitive(usage_hint) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomLinestrips::Copy Constructor +// Function: GeomLinestrips::Copy Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -qpGeomLinestrips:: -qpGeomLinestrips(const qpGeomLinestrips ©) : - qpGeomPrimitive(copy) +GeomLinestrips:: +GeomLinestrips(const GeomLinestrips ©) : + GeomPrimitive(copy) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomLinestrips::Destructor +// Function: GeomLinestrips::Destructor // Access: Published, Virtual // Description: //////////////////////////////////////////////////////////////////// -qpGeomLinestrips:: -~qpGeomLinestrips() { +GeomLinestrips:: +~GeomLinestrips() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomLinestrips::make_copy +// Function: GeomLinestrips::make_copy // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -PT(qpGeomPrimitive) qpGeomLinestrips:: +PT(GeomPrimitive) GeomLinestrips:: make_copy() const { - return new qpGeomLinestrips(*this); + return new GeomLinestrips(*this); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomLinestrips::get_primitive_type +// Function: GeomLinestrips::get_primitive_type // Access: Public, Virtual // Description: Returns the fundamental rendering type of this // primitive: whether it is points, lines, or polygons. @@ -77,47 +77,47 @@ make_copy() const { // it also implies the type of primitive that will be // produced when decompose() is called. //////////////////////////////////////////////////////////////////// -qpGeomPrimitive::PrimitiveType qpGeomLinestrips:: +GeomPrimitive::PrimitiveType GeomLinestrips:: get_primitive_type() const { return PT_lines; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomLinestrips::get_geom_rendering +// Function: GeomLinestrips::get_geom_rendering // Access: Published, Virtual // Description: Returns the set of GeomRendering bits that represent // the rendering properties required to properly render // this primitive. //////////////////////////////////////////////////////////////////// -int qpGeomLinestrips:: +int GeomLinestrips:: get_geom_rendering() const { return GR_line_strip; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomLinestrips::get_min_num_vertices_per_primitive +// Function: GeomLinestrips::get_min_num_vertices_per_primitive // Access: Public, Virtual // Description: Returns the minimum number of vertices that must be // added before close_primitive() may legally be called. //////////////////////////////////////////////////////////////////// -int qpGeomLinestrips:: +int GeomLinestrips:: get_min_num_vertices_per_primitive() const { return 2; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomLinestrips::draw +// Function: GeomLinestrips::draw // Access: Public, Virtual // Description: Calls the appropriate method on the GSG to draw the // primitive. //////////////////////////////////////////////////////////////////// -void qpGeomLinestrips:: +void GeomLinestrips:: draw(GraphicsStateGuardianBase *gsg) const { gsg->draw_linestrips(this); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomLinestrips::decompose_impl +// Function: GeomLinestrips::decompose_impl // Access: Protected, Virtual // Description: Decomposes a complex primitive type into a simpler // primitive type, for instance line strips to @@ -130,9 +130,9 @@ draw(GraphicsStateGuardianBase *gsg) const { // primitive without having to write handlers for each // possible kind of primitive type. //////////////////////////////////////////////////////////////////// -CPT(qpGeomPrimitive) qpGeomLinestrips:: +CPT(GeomPrimitive) GeomLinestrips:: decompose_impl() const { - PT(qpGeomLines) lines = new qpGeomLines(get_usage_hint()); + PT(GeomLines) lines = new GeomLines(get_usage_hint()); lines->set_shade_model(get_shade_model()); CPTA_int ends = get_ends(); @@ -159,21 +159,21 @@ decompose_impl() const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomLinestrips::rotate_impl +// Function: GeomLinestrips::rotate_impl // Access: Protected, Virtual // Description: The virtual implementation of do_rotate(). //////////////////////////////////////////////////////////////////// -CPT(qpGeomVertexArrayData) qpGeomLinestrips:: +CPT(GeomVertexArrayData) GeomLinestrips:: rotate_impl() const { // To rotate a line strip, we just reverse the vertices. CPTA_int ends = get_ends(); - PT(qpGeomVertexArrayData) new_vertices = make_index_data(); + PT(GeomVertexArrayData) new_vertices = make_index_data(); new_vertices->set_num_rows(get_num_vertices()); if (is_indexed()) { - CPT(qpGeomVertexArrayData) vertices = get_vertices(); - qpGeomVertexReader from(vertices, 0); - qpGeomVertexWriter to(new_vertices, 0); + CPT(GeomVertexArrayData) vertices = get_vertices(); + GeomVertexReader from(vertices, 0); + GeomVertexWriter to(new_vertices, 0); int begin = 0; CPTA_int::const_iterator ei; @@ -191,7 +191,7 @@ rotate_impl() const { } else { // Nonindexed case. int first_vertex = get_first_vertex(); - qpGeomVertexWriter to(new_vertices, 0); + GeomVertexWriter to(new_vertices, 0); int begin = 0; CPTA_int::const_iterator ei; @@ -209,27 +209,27 @@ rotate_impl() const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomLinestrips::register_with_read_factory +// Function: GeomLinestrips::register_with_read_factory // Access: Public, Static // Description: Tells the BamReader how to create objects of type -// qpGeom. +// Geom. //////////////////////////////////////////////////////////////////// -void qpGeomLinestrips:: +void GeomLinestrips:: register_with_read_factory() { BamReader::get_factory()->register_factory(get_class_type(), make_from_bam); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomLinestrips::make_from_bam +// Function: GeomLinestrips::make_from_bam // Access: Protected, Static // Description: This function is called by the BamReader's factory -// when a new object of type qpGeom is encountered -// in the Bam file. It should create the qpGeom +// when a new object of type Geom is encountered +// in the Bam file. It should create the Geom // and extract its information from the file. //////////////////////////////////////////////////////////////////// -TypedWritable *qpGeomLinestrips:: +TypedWritable *GeomLinestrips:: make_from_bam(const FactoryParams ¶ms) { - qpGeomLinestrips *object = new qpGeomLinestrips(UH_unspecified); + GeomLinestrips *object = new GeomLinestrips(UH_unspecified); DatagramIterator scan; BamReader *manager; diff --git a/panda/src/gobj/qpgeomLinestrips.h b/panda/src/gobj/geomLinestrips.h similarity index 68% rename from panda/src/gobj/qpgeomLinestrips.h rename to panda/src/gobj/geomLinestrips.h index 1820ea5491..f297bc83db 100644 --- a/panda/src/gobj/qpgeomLinestrips.h +++ b/panda/src/gobj/geomLinestrips.h @@ -1,4 +1,4 @@ -// Filename: qpgeomLinestrips.h +// Filename: geomLinestrips.h // Created by: drose (22Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,26 +16,24 @@ // //////////////////////////////////////////////////////////////////// -#ifndef qpGEOMLINESTRIPS_H -#define qpGEOMLINESTRIPS_H +#ifndef GEOMLINESTRIPS_H +#define GEOMLINESTRIPS_H #include "pandabase.h" -#include "qpgeomPrimitive.h" +#include "geomPrimitive.h" //////////////////////////////////////////////////////////////////// -// Class : qpGeomLinestrips +// Class : GeomLinestrips // Description : Defines a series of line strips. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// -class EXPCL_PANDA qpGeomLinestrips : public qpGeomPrimitive { +class EXPCL_PANDA GeomLinestrips : public GeomPrimitive { PUBLISHED: - qpGeomLinestrips(UsageHint usage_hint); - qpGeomLinestrips(const qpGeomLinestrips ©); - virtual ~qpGeomLinestrips(); + GeomLinestrips(UsageHint usage_hint); + GeomLinestrips(const GeomLinestrips ©); + virtual ~GeomLinestrips(); public: - virtual PT(qpGeomPrimitive) make_copy() const; + virtual PT(GeomPrimitive) make_copy() const; virtual PrimitiveType get_primitive_type() const; virtual int get_geom_rendering() const; virtual int get_min_num_vertices_per_primitive() const; @@ -44,8 +42,8 @@ public: virtual void draw(GraphicsStateGuardianBase *gsg) const; protected: - virtual CPT(qpGeomPrimitive) decompose_impl() const; - virtual CPT(qpGeomVertexArrayData) rotate_impl() const; + virtual CPT(GeomPrimitive) decompose_impl() const; + virtual CPT(GeomVertexArrayData) rotate_impl() const; public: static void register_with_read_factory(); @@ -58,9 +56,9 @@ public: return _type_handle; } static void init_type() { - qpGeomPrimitive::init_type(); - register_type(_type_handle, "qpGeomLinestrips", - qpGeomPrimitive::get_class_type()); + GeomPrimitive::init_type(); + register_type(_type_handle, "GeomLinestrips", + GeomPrimitive::get_class_type()); } virtual TypeHandle get_type() const { return get_class_type(); @@ -70,7 +68,7 @@ public: private: static TypeHandle _type_handle; - friend class qpGeom; + friend class Geom; }; #endif diff --git a/panda/src/gobj/qpgeomMunger.I b/panda/src/gobj/geomMunger.I similarity index 81% rename from panda/src/gobj/qpgeomMunger.I rename to panda/src/gobj/geomMunger.I index e3f9dc4112..69a8162974 100644 --- a/panda/src/gobj/qpgeomMunger.I +++ b/panda/src/gobj/geomMunger.I @@ -1,4 +1,4 @@ -// Filename: qpgeomMunger.I +// Filename: geomMunger.I // Created by: drose (10Mar05) // //////////////////////////////////////////////////////////////////// @@ -18,20 +18,20 @@ //////////////////////////////////////////////////////////////////// -// Function: qpGeomMunger::is_registered +// Function: GeomMunger::is_registered // Access: Public // Description: Returns true if this munger has been registered, // false if it has not. It may not be used for a Geom // until it has been registered, but once registered, it // may no longer be modified. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomMunger:: +INLINE bool GeomMunger:: is_registered() const { return _is_registered; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomMunger::register_munger +// Function: GeomMunger::register_munger // Access: Public, Static // Description: Adds the indicated munger to the registry, if there // is not an equivalent munger already there; in either @@ -45,20 +45,20 @@ is_registered() const { // normally; you should use only the returned value from // this point on. //////////////////////////////////////////////////////////////////// -INLINE PT(qpGeomMunger) qpGeomMunger:: -register_munger(qpGeomMunger *munger) { +INLINE PT(GeomMunger) GeomMunger:: +register_munger(GeomMunger *munger) { return get_registry()->register_munger(munger); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomMunger::compare_to +// Function: GeomMunger::compare_to // Access: Public // Description: Provides an arbitrary ordering among all unique // GeomMungers, so we can store the essentially // different ones in a big set and throw away the rest. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomMunger:: -compare_to(const qpGeomMunger &other) const { +INLINE int GeomMunger:: +compare_to(const GeomMunger &other) const { // First, we compare the types; if they are of different types then // they sort differently. TypeHandle type = get_type(); @@ -72,7 +72,7 @@ compare_to(const qpGeomMunger &other) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomMunger::geom_compare_to +// Function: GeomMunger::geom_compare_to // Access: Public // Description: Compares two GeomMungers, considering only whether // they would produce a different answer to @@ -81,8 +81,8 @@ compare_to(const qpGeomMunger &other) const { // would produce the same answer, this function consider // them to be the same.) //////////////////////////////////////////////////////////////////// -INLINE int qpGeomMunger:: -geom_compare_to(const qpGeomMunger &other) const { +INLINE int GeomMunger:: +geom_compare_to(const GeomMunger &other) const { // First, we compare the types; if they are of different types then // they sort differently. TypeHandle type = get_type(); @@ -96,7 +96,7 @@ geom_compare_to(const qpGeomMunger &other) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomMunger::munge_format +// Function: GeomMunger::munge_format // Access: Public // Description: Given a source GeomVertexFormat, converts it if // necessary to the appropriate format for rendering. @@ -106,31 +106,31 @@ geom_compare_to(const qpGeomMunger &other) const { // tables to HW-based animation tables, reserving space // for the specified number of transforms per vertex. //////////////////////////////////////////////////////////////////// -INLINE CPT(qpGeomVertexFormat) qpGeomMunger:: -munge_format(const qpGeomVertexFormat *format, - const qpGeomVertexAnimationSpec &animation) const { +INLINE CPT(GeomVertexFormat) GeomMunger:: +munge_format(const GeomVertexFormat *format, + const GeomVertexAnimationSpec &animation) const { // We cast away the const pointer, because do_munge_format() needs // to update caches and stuff, but we trust it not to change any // user-definable parameters. - return ((qpGeomMunger *)this)->do_munge_format(format, animation); + return ((GeomMunger *)this)->do_munge_format(format, animation); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomMunger::munge_data +// Function: GeomMunger::munge_data // Access: Public // Description: Given a source GeomVertexData, converts it if // necessary to the appropriate data for rendering. //////////////////////////////////////////////////////////////////// -INLINE CPT(qpGeomVertexData) qpGeomMunger:: -munge_data(const qpGeomVertexData *data) const { +INLINE CPT(GeomVertexData) GeomMunger:: +munge_data(const GeomVertexData *data) const { // We cast away the const pointer, because do_munge_data() needs to // update caches and stuff, but we trust it not to change any // user-definable parameters. - return ((qpGeomMunger *)this)->munge_data_impl(data); + return ((GeomMunger *)this)->munge_data_impl(data); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomMunger::operator new +// Function: GeomMunger::operator new // Access: Public // Description: This implementation of operator new isn't really // supposed to be called, but it's provided in case @@ -140,36 +140,36 @@ munge_data(const qpGeomVertexData *data) const { // operator new that passes NULL for _deleted_chain will // at least allow us to detect the error. //////////////////////////////////////////////////////////////////// -INLINE void *qpGeomMunger:: +INLINE void *GeomMunger:: operator new(size_t size) { return do_operator_new(size, NULL); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomMunger::operator delete +// Function: GeomMunger::operator delete // Access: Public // Description: This balances do_operator_new(), below, and adds the // deleted object to the stored deleted_chain, rather // than returning its memory to the heap. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomMunger:: +INLINE void GeomMunger:: operator delete(void *ptr) { - qpGeomMunger *obj = (qpGeomMunger *)ptr; + GeomMunger *obj = (GeomMunger *)ptr; #ifndef NDEBUG - nassertd(obj->_deleted_chain != (qpGeomMunger **)NULL) { + nassertd(obj->_deleted_chain != (GeomMunger **)NULL) { delete obj; return; } #endif - nassertv(obj->_next == (qpGeomMunger *)NULL); + nassertv(obj->_next == (GeomMunger *)NULL); obj->_next = (*obj->_deleted_chain); (*obj->_deleted_chain) = obj; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomMunger::do_operator_new +// Function: GeomMunger::do_operator_new // Access: Protected, Static // Description: Intended to be called from a derived class's operator // new method, this allocates a new object from the @@ -181,23 +181,23 @@ operator delete(void *ptr) { // constructor is called, so that it can be returned // there when it is deleted. //////////////////////////////////////////////////////////////////// -INLINE void *qpGeomMunger:: -do_operator_new(size_t size, qpGeomMunger **deleted_chain) { - qpGeomMunger *obj; +INLINE void *GeomMunger:: +do_operator_new(size_t size, GeomMunger **deleted_chain) { + GeomMunger *obj; #ifndef NDEBUG - nassertd(deleted_chain != (qpGeomMunger **)NULL) { - obj = (qpGeomMunger *)::operator new(size); + nassertd(deleted_chain != (GeomMunger **)NULL) { + obj = (GeomMunger *)::operator new(size); obj->_deleted_chain = NULL; return obj; } #endif - if ((*deleted_chain) != (qpGeomMunger *)NULL) { + if ((*deleted_chain) != (GeomMunger *)NULL) { obj = (*deleted_chain); (*deleted_chain) = (*deleted_chain)->_next; } else { - obj = (qpGeomMunger *)::operator new(size); + obj = (GeomMunger *)::operator new(size); } obj->_deleted_chain = deleted_chain; @@ -205,11 +205,11 @@ do_operator_new(size_t size, qpGeomMunger **deleted_chain) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomMunger::get_registry +// Function: GeomMunger::get_registry // Access: Private // Description: Returns the global registry object. //////////////////////////////////////////////////////////////////// -INLINE qpGeomMunger::Registry *qpGeomMunger:: +INLINE GeomMunger::Registry *GeomMunger:: get_registry() { if (_registry == (Registry *)NULL) { make_registry(); diff --git a/panda/src/gobj/qpgeomMunger.cxx b/panda/src/gobj/geomMunger.cxx similarity index 77% rename from panda/src/gobj/qpgeomMunger.cxx rename to panda/src/gobj/geomMunger.cxx index 181698a6d8..dc33e9236e 100644 --- a/panda/src/gobj/qpgeomMunger.cxx +++ b/panda/src/gobj/geomMunger.cxx @@ -1,4 +1,4 @@ -// Filename: qpgeomMunger.cxx +// Filename: geomMunger.cxx // Created by: drose (10Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,23 +16,23 @@ // //////////////////////////////////////////////////////////////////// -#include "qpgeomMunger.h" -#include "qpgeomCacheManager.h" +#include "geomMunger.h" +#include "geomCacheManager.h" #include "mutexHolder.h" #include "pStatTimer.h" -qpGeomMunger::Registry *qpGeomMunger::_registry = NULL; -TypeHandle qpGeomMunger::_type_handle; +GeomMunger::Registry *GeomMunger::_registry = NULL; +TypeHandle GeomMunger::_type_handle; -PStatCollector qpGeomMunger::_munge_pcollector("*:Munge"); +PStatCollector GeomMunger::_munge_pcollector("*:Munge"); //////////////////////////////////////////////////////////////////// -// Function: qpGeomMunger::Constructor +// Function: GeomMunger::Constructor // Access: Public // Description: //////////////////////////////////////////////////////////////////// -qpGeomMunger:: -qpGeomMunger() : +GeomMunger:: +GeomMunger() : _is_registered(false) { #ifndef NDEBUG @@ -42,12 +42,12 @@ qpGeomMunger() : } //////////////////////////////////////////////////////////////////// -// Function: qpGeomMunger::Copy Constructor +// Function: GeomMunger::Copy Constructor // Access: Public // Description: //////////////////////////////////////////////////////////////////// -qpGeomMunger:: -qpGeomMunger(const qpGeomMunger ©) : +GeomMunger:: +GeomMunger(const GeomMunger ©) : _is_registered(false) { #ifndef NDEBUG @@ -57,22 +57,22 @@ qpGeomMunger(const qpGeomMunger ©) : } //////////////////////////////////////////////////////////////////// -// Function: qpGeomMunger::Copy Assignment Operator +// Function: GeomMunger::Copy Assignment Operator // Access: Public // Description: //////////////////////////////////////////////////////////////////// -void qpGeomMunger:: -operator = (const qpGeomMunger ©) { +void GeomMunger:: +operator = (const GeomMunger ©) { nassertv(!_is_registered); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomMunger::Destructor +// Function: GeomMunger::Destructor // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -qpGeomMunger:: -~qpGeomMunger() { +GeomMunger:: +~GeomMunger() { if (is_registered()) { get_registry()->unregister_munger(this); } @@ -80,12 +80,12 @@ qpGeomMunger:: } //////////////////////////////////////////////////////////////////// -// Function: qpGeomMunger::remove_data +// Function: GeomMunger::remove_data // Access: Public // Description: Removes a prepared GeomVertexData from the cache. //////////////////////////////////////////////////////////////////// -void qpGeomMunger:: -remove_data(const qpGeomVertexData *data) { +void GeomMunger:: +remove_data(const GeomVertexData *data) { // If this assertion is triggered, maybe we accidentally deleted a // GeomVertexData while we were in the process of unregistering, // causing a recursive re-entry. @@ -93,7 +93,7 @@ remove_data(const qpGeomVertexData *data) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomMunger::munge_geom +// Function: GeomMunger::munge_geom // Access: Published // Description: Applies the indicated munger to the geom and its // data, and returns a (possibly different) geom and @@ -103,19 +103,19 @@ remove_data(const qpGeomVertexData *data) { // particular munger, the result will always be the // same; so this result may be cached. //////////////////////////////////////////////////////////////////// -void qpGeomMunger:: -munge_geom(CPT(qpGeom) &geom, CPT(qpGeomVertexData) &data) { - CPT(qpGeomVertexData) source_data = data; +void GeomMunger:: +munge_geom(CPT(Geom) &geom, CPT(GeomVertexData) &data) { + CPT(GeomVertexData) source_data = data; // Look up the munger in the geom's cache--maybe we've recently // applied it. { - qpGeom::CDReader cdata(geom->_cycler); - qpGeom::CacheEntry temp_entry(source_data, this); + Geom::CDReader cdata(geom->_cycler); + Geom::CacheEntry temp_entry(source_data, this); temp_entry.local_object(); - qpGeom::Cache::const_iterator ci = cdata->_cache.find(&temp_entry); + Geom::Cache::const_iterator ci = cdata->_cache.find(&temp_entry); if (ci != cdata->_cache.end()) { - qpGeom::CacheEntry *entry = (*ci); + Geom::CacheEntry *entry = (*ci); if (geom->get_modified() <= entry->_geom_result->get_modified() && data->get_modified() <= entry->_data_result->get_modified()) { @@ -135,7 +135,7 @@ munge_geom(CPT(qpGeom) &geom, CPT(qpGeomVertexData) &data) { << "Cache entry " << *entry << " is stale, removing.\n"; } entry->erase(); - qpGeom::CDWriter cdataw(((qpGeom *)geom.p())->_cycler, cdata); + Geom::CDWriter cdataw(((Geom *)geom.p())->_cycler, cdata); cdataw->_cache.erase(entry); } } @@ -143,16 +143,16 @@ munge_geom(CPT(qpGeom) &geom, CPT(qpGeomVertexData) &data) { // Ok, invoke the munger. PStatTimer timer(_munge_pcollector); - CPT(qpGeom) orig_geom = geom; + CPT(Geom) orig_geom = geom; data = munge_data(data); munge_geom_impl(geom, data); { // Record the new result in the cache. - qpGeom::CacheEntry *entry; + Geom::CacheEntry *entry; { - qpGeom::CDWriter cdata(((qpGeom *)orig_geom.p())->_cycler); - entry = new qpGeom::CacheEntry((qpGeom *)orig_geom.p(), source_data, this, + Geom::CDWriter cdata(((Geom *)orig_geom.p())->_cycler); + entry = new Geom::CacheEntry((Geom *)orig_geom.p(), source_data, this, geom, data); bool inserted = cdata->_cache.insert(entry).second; nassertv(inserted); @@ -166,14 +166,14 @@ munge_geom(CPT(qpGeom) &geom, CPT(qpGeomVertexData) &data) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomMunger::do_munge_format +// Function: GeomMunger::do_munge_format // Access: Protected // Description: The protected implementation of munge_format(). This // exists just to cast away the const pointer. //////////////////////////////////////////////////////////////////// -CPT(qpGeomVertexFormat) qpGeomMunger:: -do_munge_format(const qpGeomVertexFormat *format, - const qpGeomVertexAnimationSpec &animation) { +CPT(GeomVertexFormat) GeomMunger:: +do_munge_format(const GeomVertexFormat *format, + const GeomVertexAnimationSpec &animation) { nassertr(_is_registered, NULL); nassertr(format->is_registered(), NULL); @@ -188,7 +188,7 @@ do_munge_format(const qpGeomVertexFormat *format, } // We have to munge this format for the first time. - CPT(qpGeomVertexFormat) derived_format = munge_format_impl(format, animation); + CPT(GeomVertexFormat) derived_format = munge_format_impl(format, animation); nassertr(derived_format->is_registered(), NULL); // Store the answer in the map, so we can quickly get it next time. @@ -199,28 +199,28 @@ do_munge_format(const qpGeomVertexFormat *format, } //////////////////////////////////////////////////////////////////// -// Function: qpGeomMunger::munge_format_impl +// Function: GeomMunger::munge_format_impl // Access: Protected, Virtual // Description: Given a source GeomVertexFormat, converts it if // necessary to the appropriate format for rendering. //////////////////////////////////////////////////////////////////// -CPT(qpGeomVertexFormat) qpGeomMunger:: -munge_format_impl(const qpGeomVertexFormat *orig, const qpGeomVertexAnimationSpec &) { +CPT(GeomVertexFormat) GeomMunger:: +munge_format_impl(const GeomVertexFormat *orig, const GeomVertexAnimationSpec &) { return orig; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomMunger::munge_data_impl +// Function: GeomMunger::munge_data_impl // Access: Protected, Virtual // Description: Given a source GeomVertexData, converts it as // necessary for rendering. //////////////////////////////////////////////////////////////////// -CPT(qpGeomVertexData) qpGeomMunger:: -munge_data_impl(const qpGeomVertexData *data) { +CPT(GeomVertexData) GeomMunger:: +munge_data_impl(const GeomVertexData *data) { nassertr(_is_registered, NULL); - CPT(qpGeomVertexFormat) orig_format = data->get_format(); - CPT(qpGeomVertexFormat) new_format = + CPT(GeomVertexFormat) orig_format = data->get_format(); + CPT(GeomVertexFormat) new_format = munge_format(orig_format, orig_format->get_animation()); if (new_format == orig_format) { @@ -232,32 +232,32 @@ munge_data_impl(const qpGeomVertexData *data) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomMunger::munge_geom_impl +// Function: GeomMunger::munge_geom_impl // Access: Protected, Virtual // Description: Converts a Geom and/or its data as necessary. //////////////////////////////////////////////////////////////////// -bool qpGeomMunger:: -munge_geom_impl(CPT(qpGeom) &, CPT(qpGeomVertexData) &) { +bool GeomMunger:: +munge_geom_impl(CPT(Geom) &, CPT(GeomVertexData) &) { // The default implementation does nothing (the work has already // been done in munge_format_impl() and munge_data_impl()). return true; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomMunger::compare_to_impl +// Function: GeomMunger::compare_to_impl // Access: Protected, Virtual // Description: Called to compare two GeomMungers who are known to be // of the same type, for an apples-to-apples comparison. // This will never be called on two pointers of a // different type. //////////////////////////////////////////////////////////////////// -int qpGeomMunger:: -compare_to_impl(const qpGeomMunger *other) const { +int GeomMunger:: +compare_to_impl(const GeomMunger *other) const { return 0; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomMunger::geom_compare_to_impl +// Function: GeomMunger::geom_compare_to_impl // Access: Protected, Virtual // Description: Compares two GeomMungers, considering only whether // they would produce a different answer to @@ -266,17 +266,17 @@ compare_to_impl(const qpGeomMunger *other) const { // would produce the same answer, this function consider // them to be the same.) //////////////////////////////////////////////////////////////////// -int qpGeomMunger:: -geom_compare_to_impl(const qpGeomMunger *other) const { +int GeomMunger:: +geom_compare_to_impl(const GeomMunger *other) const { return 0; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomMunger::make_registry +// Function: GeomMunger::make_registry // Access: Private // Description: Returns the global registry object. //////////////////////////////////////////////////////////////////// -void qpGeomMunger:: +void GeomMunger:: make_registry() { if (_registry == (Registry *)NULL) { _registry = new Registry; @@ -284,11 +284,11 @@ make_registry() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomMunger::do_register +// Function: GeomMunger::do_register // Access: Private // Description: Called internally when the munger is registered. //////////////////////////////////////////////////////////////////// -void qpGeomMunger:: +void GeomMunger:: do_register() { if (gobj_cat.is_debug()) { gobj_cat.debug() @@ -308,11 +308,11 @@ do_register() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomMunger::do_unregister +// Function: GeomMunger::do_unregister // Access: Private // Description: Called internally when the munger is unregistered. //////////////////////////////////////////////////////////////////// -void qpGeomMunger:: +void GeomMunger:: do_unregister() { if (gobj_cat.is_debug()) { gobj_cat.debug() @@ -326,26 +326,26 @@ do_unregister() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomMunger::CacheEntry::output +// Function: GeomMunger::CacheEntry::output // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -void qpGeomMunger::CacheEntry:: +void GeomMunger::CacheEntry:: output(ostream &out) const { out << "munger " << _munger; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomMunger::Registry::Constructor +// Function: GeomMunger::Registry::Constructor // Access: Public // Description: //////////////////////////////////////////////////////////////////// -qpGeomMunger::Registry:: +GeomMunger::Registry:: Registry() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomMunger::Registry::register_munger +// Function: GeomMunger::Registry::register_munger // Access: Public // Description: Adds the indicated munger to the registry, if there // is not an equivalent munger already there; in either @@ -359,8 +359,8 @@ Registry() { // normally; you should use only the returned value from // this point on. //////////////////////////////////////////////////////////////////// -PT(qpGeomMunger) qpGeomMunger::Registry:: -register_munger(qpGeomMunger *munger) { +PT(GeomMunger) GeomMunger::Registry:: +register_munger(GeomMunger *munger) { if (munger->is_registered()) { return munger; } @@ -368,10 +368,10 @@ register_munger(qpGeomMunger *munger) { // Save the incoming pointer in a local PointerTo, so that if it has // a zero reference count and is not added into the map below, it // will be automatically deleted when this function returns. - PT(qpGeomMunger) pt_munger = munger; + PT(GeomMunger) pt_munger = munger; Mungers::iterator mi = _mungers.insert(munger).first; - qpGeomMunger *new_munger = (*mi); + GeomMunger *new_munger = (*mi); if (!new_munger->is_registered()) { new_munger->_registered_key = mi; new_munger->do_register(); @@ -381,14 +381,14 @@ register_munger(qpGeomMunger *munger) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomMunger::Registry::unregister_munger +// Function: GeomMunger::Registry::unregister_munger // Access: Public // Description: Removes the indicated munger from the registry. // Normally this should not be done until the munger is // destructing. //////////////////////////////////////////////////////////////////// -void qpGeomMunger::Registry:: -unregister_munger(qpGeomMunger *munger) { +void GeomMunger::Registry:: +unregister_munger(GeomMunger *munger) { nassertv(munger->is_registered()); nassertv(munger->_registered_key != _mungers.end()); _mungers.erase(munger->_registered_key); diff --git a/panda/src/gobj/qpgeomMunger.h b/panda/src/gobj/geomMunger.h similarity index 61% rename from panda/src/gobj/qpgeomMunger.h rename to panda/src/gobj/geomMunger.h index 6a689adc8f..3416a5f34b 100644 --- a/panda/src/gobj/qpgeomMunger.h +++ b/panda/src/gobj/geomMunger.h @@ -1,4 +1,4 @@ -// Filename: qpgeomMunger.h +// Filename: geomMunger.h // Created by: drose (10Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,15 +16,15 @@ // //////////////////////////////////////////////////////////////////// -#ifndef qpGEOMMUNGER_H -#define qpGEOMMUNGER_H +#ifndef GEOMMUNGER_H +#define GEOMMUNGER_H #include "pandabase.h" #include "typedReferenceCount.h" -#include "qpgeomVertexAnimationSpec.h" -#include "qpgeomVertexFormat.h" -#include "qpgeomVertexData.h" -#include "qpgeomCacheEntry.h" +#include "geomVertexAnimationSpec.h" +#include "geomVertexFormat.h" +#include "geomVertexData.h" +#include "geomCacheEntry.h" #include "indirectCompareTo.h" #include "pStatCollector.h" #include "pointerTo.h" @@ -33,10 +33,10 @@ class GraphicsStateGuardianBase; class RenderState; -class qpGeom; +class Geom; //////////////////////////////////////////////////////////////////// -// Class : qpGeomMunger +// Class : GeomMunger // Description : Objects of this class are used to convert vertex data // from a Geom into a format suitable for passing to the // rendering backend. Typically, the rendering backend @@ -55,41 +55,39 @@ class qpGeom; // cannot be changed. All registered GeomMungers that // perform the same operation will have the same // pointer. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// -class EXPCL_PANDA qpGeomMunger : public TypedReferenceCount, public qpGeomEnums { +class EXPCL_PANDA GeomMunger : public TypedReferenceCount, public GeomEnums { public: - qpGeomMunger(); - qpGeomMunger(const qpGeomMunger ©); - void operator = (const qpGeomMunger ©); - virtual ~qpGeomMunger(); + GeomMunger(); + GeomMunger(const GeomMunger ©); + void operator = (const GeomMunger ©); + virtual ~GeomMunger(); INLINE bool is_registered() const; - INLINE static PT(qpGeomMunger) register_munger(qpGeomMunger *munger); + INLINE static PT(GeomMunger) register_munger(GeomMunger *munger); - INLINE CPT(qpGeomVertexFormat) munge_format(const qpGeomVertexFormat *format, - const qpGeomVertexAnimationSpec &animation) const; + INLINE CPT(GeomVertexFormat) munge_format(const GeomVertexFormat *format, + const GeomVertexAnimationSpec &animation) const; - INLINE CPT(qpGeomVertexData) munge_data(const qpGeomVertexData *data) const; - void remove_data(const qpGeomVertexData *data); + INLINE CPT(GeomVertexData) munge_data(const GeomVertexData *data) const; + void remove_data(const GeomVertexData *data); - void munge_geom(CPT(qpGeom) &geom, CPT(qpGeomVertexData) &data); + void munge_geom(CPT(Geom) &geom, CPT(GeomVertexData) &data); public: - INLINE int compare_to(const qpGeomMunger &other) const; - INLINE int geom_compare_to(const qpGeomMunger &other) const; + INLINE int compare_to(const GeomMunger &other) const; + INLINE int geom_compare_to(const GeomMunger &other) const; protected: - CPT(qpGeomVertexFormat) do_munge_format(const qpGeomVertexFormat *format, - const qpGeomVertexAnimationSpec &animation); + CPT(GeomVertexFormat) do_munge_format(const GeomVertexFormat *format, + const GeomVertexAnimationSpec &animation); - virtual CPT(qpGeomVertexFormat) munge_format_impl(const qpGeomVertexFormat *orig, - const qpGeomVertexAnimationSpec &animation); - virtual CPT(qpGeomVertexData) munge_data_impl(const qpGeomVertexData *data); - virtual bool munge_geom_impl(CPT(qpGeom) &geom, CPT(qpGeomVertexData) &data); - virtual int compare_to_impl(const qpGeomMunger *other) const; - virtual int geom_compare_to_impl(const qpGeomMunger *other) const; + virtual CPT(GeomVertexFormat) munge_format_impl(const GeomVertexFormat *orig, + const GeomVertexAnimationSpec &animation); + virtual CPT(GeomVertexData) munge_data_impl(const GeomVertexData *data); + virtual bool munge_geom_impl(CPT(Geom) &geom, CPT(GeomVertexData) &data); + virtual int compare_to_impl(const GeomMunger *other) const; + virtual int geom_compare_to_impl(const GeomMunger *other) const; public: // To minimize overhead, each type of GeomMunger will implement new @@ -100,12 +98,12 @@ public: INLINE void operator delete(void *ptr); protected: - INLINE static void *do_operator_new(size_t size, qpGeomMunger **_deleted_chain); + INLINE static void *do_operator_new(size_t size, GeomMunger **_deleted_chain); private: - qpGeomMunger **_deleted_chain; + GeomMunger **_deleted_chain; // This is the next pointer along the deleted_chain. - qpGeomMunger *_next; + GeomMunger *_next; private: class Registry; @@ -116,24 +114,24 @@ private: void do_unregister(); private: - class CacheEntry : public qpGeomCacheEntry { + class CacheEntry : public GeomCacheEntry { public: virtual void output(ostream &out) const; - PT(qpGeomMunger) _munger; + PT(GeomMunger) _munger; }; - typedef pmap Formats; - typedef pmap FormatsByAnimation; + typedef pmap Formats; + typedef pmap FormatsByAnimation; FormatsByAnimation _formats_by_animation; bool _is_registered; - typedef pset > Mungers; + typedef pset > Mungers; class EXPCL_PANDA Registry { public: Registry(); - PT(qpGeomMunger) register_munger(qpGeomMunger *munger); - void unregister_munger(qpGeomMunger *munger); + PT(GeomMunger) register_munger(GeomMunger *munger); + void unregister_munger(GeomMunger *munger); Mungers _mungers; }; @@ -157,7 +155,7 @@ public: } static void init_type() { TypedReferenceCount::init_type(); - register_type(_type_handle, "qpGeomMunger", + register_type(_type_handle, "GeomMunger", TypedReferenceCount::get_class_type()); } virtual TypeHandle get_type() const { @@ -168,10 +166,10 @@ public: private: static TypeHandle _type_handle; - friend class qpGeom; + friend class Geom; }; -#include "qpgeomMunger.I" +#include "geomMunger.I" #endif diff --git a/panda/src/gobj/geomPoint.cxx b/panda/src/gobj/geomPoint.cxx deleted file mode 100644 index 8f020c164a..0000000000 --- a/panda/src/gobj/geomPoint.cxx +++ /dev/null @@ -1,119 +0,0 @@ -// Filename: geomPoint.cxx -// Created by: charles (13Jul00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "datagram.h" -#include "datagramIterator.h" -#include "bamReader.h" -#include "bamWriter.h" -#include "ioPtaDatagramShort.h" -#include "ioPtaDatagramInt.h" -#include "ioPtaDatagramLinMath.h" -#include "graphicsStateGuardianBase.h" - -#include "geomPoint.h" - -TypeHandle GeomPoint::_type_handle; - -//////////////////////////////////////////////////////////////////// -// Function: GeomPoint::make_copy -// Access: Public, Virtual -// Description: Returns a newly-allocated Geom that is a shallow copy -// of this one. It will be a different Geom pointer, -// but its internal data may or may not be shared with -// that of the original Geom. -//////////////////////////////////////////////////////////////////// -Geom *GeomPoint:: -make_copy() const { - return new GeomPoint(*this); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomPoint::print_draw_immediate -// Access: -// Description: -//////////////////////////////////////////////////////////////////// -void GeomPoint:: -print_draw_immediate(void) const { -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomPoint::draw_immediate -// Access: -// Description: -//////////////////////////////////////////////////////////////////// -void GeomPoint:: -draw_immediate(GraphicsStateGuardianBase *gsg, GeomContext *gc) { - gsg->draw_point(this, gc); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomPoint::write_datagram -// Access: Public -// Description: Function to write the important information in -// the particular object to a Datagram -//////////////////////////////////////////////////////////////////// -void GeomPoint:: -write_datagram(BamWriter *manager, Datagram &me) { - Geom::write_datagram(manager, me); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomPoint::make_GeomPoint -// Access: Protected -// Description: Factory method to generate a GeomPoint object -//////////////////////////////////////////////////////////////////// -TypedWritable* GeomPoint:: -make_GeomPoint(const FactoryParams ¶ms) { - GeomPoint *me = new GeomPoint; - DatagramIterator scan; - BamReader *manager; - - parse_params(params, scan, manager); - me->fillin(scan, manager); - me->make_dirty(); - me->config(); - return me; -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomPoint::fillin -// Access: Protected -// Description: Function that reads out of the datagram (or asks -// manager to read) all of the data that is needed to -// re-create this object and stores it in the appropiate -// place -//////////////////////////////////////////////////////////////////// -void GeomPoint:: -fillin(DatagramIterator& scan, BamReader* manager) { - Geom::fillin(scan, manager); - - if (manager->get_file_minor_ver() < 15) { - // Skip size parameter. - scan.get_float32(); - } -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomPoint::register_with_factory -// Access: Public, Static -// Description: Factory method to generate a GeomPoint object -//////////////////////////////////////////////////////////////////// -void GeomPoint:: -register_with_read_factory(void) { - BamReader::get_factory()->register_factory(get_class_type(), make_GeomPoint); -} diff --git a/panda/src/gobj/geomPoint.h b/panda/src/gobj/geomPoint.h deleted file mode 100644 index bcbe8b0872..0000000000 --- a/panda/src/gobj/geomPoint.h +++ /dev/null @@ -1,82 +0,0 @@ -// Filename: geomPoint.h -// Created by: charles (13Jul00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef GEOMPOINT_H -#define GEOMPOINT_H - -#include "geom.h" - -//////////////////////////////////////////////////////////////////// -// Class : GeomPoint -// Description : Point Primitive -//////////////////////////////////////////////////////////////////// -class EXPCL_PANDA GeomPoint : public Geom { -public: - GeomPoint() : Geom() { } - virtual Geom *make_copy() const; - - virtual void print_draw_immediate() const; - virtual void draw_immediate(GraphicsStateGuardianBase *gsg, GeomContext *gc); - - virtual int get_num_vertices_per_prim() const { - return 1; - } - virtual int get_num_more_vertices_than_components() const { - return 0; - } - virtual bool uses_components() const { - return false; - } - - virtual int get_length(int) const { - return 1; - } - - virtual Geom *explode() const { - return new GeomPoint(*this); - } - -public: - static void register_with_read_factory(void); - virtual void write_datagram(BamWriter* manager, Datagram &me); - - static TypedWritable *make_GeomPoint(const FactoryParams ¶ms); - -protected: - void fillin(DatagramIterator& scan, BamReader* manager); - -PUBLISHED: - static TypeHandle get_class_type() { - return _type_handle; - } -public: - static void init_type() { - Geom::init_type(); - register_type(_type_handle, "GeomPoint", - Geom::get_class_type()); - } - virtual TypeHandle get_type() const { - return get_class_type(); - } - virtual TypeHandle force_init_type() {init_type(); return get_class_type();} - -private: - static TypeHandle _type_handle; -}; - -#endif // GEOMPOINT_H diff --git a/panda/src/gobj/qpgeomPoints.cxx b/panda/src/gobj/geomPoints.cxx similarity index 79% rename from panda/src/gobj/qpgeomPoints.cxx rename to panda/src/gobj/geomPoints.cxx index b5d80c0a65..7cc8b700fc 100644 --- a/panda/src/gobj/qpgeomPoints.cxx +++ b/panda/src/gobj/geomPoints.cxx @@ -1,4 +1,4 @@ -// Filename: qpgeomPoints.cxx +// Filename: geomPoints.cxx // Created by: drose (22Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,56 +16,56 @@ // //////////////////////////////////////////////////////////////////// -#include "qpgeomPoints.h" +#include "geomPoints.h" #include "pStatTimer.h" #include "bamReader.h" #include "bamWriter.h" -TypeHandle qpGeomPoints::_type_handle; +TypeHandle GeomPoints::_type_handle; //////////////////////////////////////////////////////////////////// -// Function: qpGeomPoints::Constructor +// Function: GeomPoints::Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -qpGeomPoints:: -qpGeomPoints(qpGeomPoints::UsageHint usage_hint) : - qpGeomPrimitive(usage_hint) +GeomPoints:: +GeomPoints(GeomPoints::UsageHint usage_hint) : + GeomPrimitive(usage_hint) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPoints::Copy Constructor +// Function: GeomPoints::Copy Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -qpGeomPoints:: -qpGeomPoints(const qpGeomPoints ©) : - qpGeomPrimitive(copy) +GeomPoints:: +GeomPoints(const GeomPoints ©) : + GeomPrimitive(copy) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPoints::Destructor +// Function: GeomPoints::Destructor // Access: Published, Virtual // Description: //////////////////////////////////////////////////////////////////// -qpGeomPoints:: -~qpGeomPoints() { +GeomPoints:: +~GeomPoints() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPoints::make_copy +// Function: GeomPoints::make_copy // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -PT(qpGeomPrimitive) qpGeomPoints:: +PT(GeomPrimitive) GeomPoints:: make_copy() const { - return new qpGeomPoints(*this); + return new GeomPoints(*this); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPoints::get_primitive_type +// Function: GeomPoints::get_primitive_type // Access: Public, Virtual // Description: Returns the fundamental rendering type of this // primitive: whether it is points, lines, or polygons. @@ -75,19 +75,19 @@ make_copy() const { // it also implies the type of primitive that will be // produced when decompose() is called. //////////////////////////////////////////////////////////////////// -qpGeomPrimitive::PrimitiveType qpGeomPoints:: +GeomPrimitive::PrimitiveType GeomPoints:: get_primitive_type() const { return PT_points; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPoints::get_geom_rendering +// Function: GeomPoints::get_geom_rendering // Access: Published, Virtual // Description: Returns the set of GeomRendering bits that represent // the rendering properties required to properly render // this primitive. //////////////////////////////////////////////////////////////////// -int qpGeomPoints:: +int GeomPoints:: get_geom_rendering() const { // Fancy point attributes, if any, are based on whether the // appropriate columns are defined in the associated GeomVertexData; @@ -100,7 +100,7 @@ get_geom_rendering() const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPoints::get_num_vertices_per_primitive +// Function: GeomPoints::get_num_vertices_per_primitive // Access: Public, Virtual // Description: If the primitive type is a simple type in which all // primitives have the same number of vertices, like @@ -110,55 +110,55 @@ get_geom_rendering() const { // different numbers of vertices, for instance a // point strip, returns 0. //////////////////////////////////////////////////////////////////// -int qpGeomPoints:: +int GeomPoints:: get_num_vertices_per_primitive() const { return 1; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPoints::get_min_num_vertices_per_primitive +// Function: GeomPoints::get_min_num_vertices_per_primitive // Access: Public, Virtual // Description: Returns the minimum number of vertices that must be // added before close_primitive() may legally be called. //////////////////////////////////////////////////////////////////// -int qpGeomPoints:: +int GeomPoints:: get_min_num_vertices_per_primitive() const { return 1; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPoints::draw +// Function: GeomPoints::draw // Access: Public, Virtual // Description: Calls the appropriate method on the GSG to draw the // primitive. //////////////////////////////////////////////////////////////////// -void qpGeomPoints:: +void GeomPoints:: draw(GraphicsStateGuardianBase *gsg) const { gsg->draw_points(this); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPoints::register_with_read_factory +// Function: GeomPoints::register_with_read_factory // Access: Public, Static // Description: Tells the BamReader how to create objects of type -// qpGeom. +// Geom. //////////////////////////////////////////////////////////////////// -void qpGeomPoints:: +void GeomPoints:: register_with_read_factory() { BamReader::get_factory()->register_factory(get_class_type(), make_from_bam); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPoints::make_from_bam +// Function: GeomPoints::make_from_bam // Access: Protected, Static // Description: This function is called by the BamReader's factory -// when a new object of type qpGeom is encountered -// in the Bam file. It should create the qpGeom +// when a new object of type Geom is encountered +// in the Bam file. It should create the Geom // and extract its information from the file. //////////////////////////////////////////////////////////////////// -TypedWritable *qpGeomPoints:: +TypedWritable *GeomPoints:: make_from_bam(const FactoryParams ¶ms) { - qpGeomPoints *object = new qpGeomPoints(UH_unspecified); + GeomPoints *object = new GeomPoints(UH_unspecified); DatagramIterator scan; BamReader *manager; diff --git a/panda/src/gobj/qpgeomPoints.h b/panda/src/gobj/geomPoints.h similarity index 73% rename from panda/src/gobj/qpgeomPoints.h rename to panda/src/gobj/geomPoints.h index 61c7365504..6751c8d45a 100644 --- a/panda/src/gobj/qpgeomPoints.h +++ b/panda/src/gobj/geomPoints.h @@ -1,4 +1,4 @@ -// Filename: qpgeomPoints.h +// Filename: geomPoints.h // Created by: drose (22Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,26 +16,24 @@ // //////////////////////////////////////////////////////////////////// -#ifndef qpGEOMPOINTS_H -#define qpGEOMPOINTS_H +#ifndef GEOMPOINTS_H +#define GEOMPOINTS_H #include "pandabase.h" -#include "qpgeomPrimitive.h" +#include "geomPrimitive.h" //////////////////////////////////////////////////////////////////// -// Class : qpGeomPoints +// Class : GeomPoints // Description : Defines a series of disconnected points. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// -class EXPCL_PANDA qpGeomPoints : public qpGeomPrimitive { +class EXPCL_PANDA GeomPoints : public GeomPrimitive { PUBLISHED: - qpGeomPoints(UsageHint usage_hint); - qpGeomPoints(const qpGeomPoints ©); - virtual ~qpGeomPoints(); + GeomPoints(UsageHint usage_hint); + GeomPoints(const GeomPoints ©); + virtual ~GeomPoints(); public: - virtual PT(qpGeomPrimitive) make_copy() const; + virtual PT(GeomPrimitive) make_copy() const; virtual PrimitiveType get_primitive_type() const; virtual int get_geom_rendering() const; @@ -56,9 +54,9 @@ public: return _type_handle; } static void init_type() { - qpGeomPrimitive::init_type(); - register_type(_type_handle, "qpGeomPoints", - qpGeomPrimitive::get_class_type()); + GeomPrimitive::init_type(); + register_type(_type_handle, "GeomPoints", + GeomPrimitive::get_class_type()); } virtual TypeHandle get_type() const { return get_class_type(); @@ -68,7 +66,7 @@ public: private: static TypeHandle _type_handle; - friend class qpGeom; + friend class Geom; }; #endif diff --git a/panda/src/gobj/geomPolygon.cxx b/panda/src/gobj/geomPolygon.cxx deleted file mode 100644 index f40c5b9280..0000000000 --- a/panda/src/gobj/geomPolygon.cxx +++ /dev/null @@ -1,91 +0,0 @@ -// Filename: geomPolygon.cxx -// Created by: charles (13Jul00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "datagram.h" -#include "datagramIterator.h" -#include "bamReader.h" -#include "bamWriter.h" -#include "ioPtaDatagramShort.h" -#include "ioPtaDatagramInt.h" -#include "ioPtaDatagramLinMath.h" -#include "graphicsStateGuardianBase.h" - -#include "geomPolygon.h" - -TypeHandle GeomPolygon::_type_handle; - -//////////////////////////////////////////////////////////////////// -// Function: GeomPolygon::make_copy -// Access: Public, Virtual -// Description: Returns a newly-allocated Geom that is a shallow copy -// of this one. It will be a different Geom pointer, -// but its internal data may or may not be shared with -// that of the original Geom. -//////////////////////////////////////////////////////////////////// -Geom *GeomPolygon:: -make_copy() const { - return new GeomPolygon(*this); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomPolygon::print_draw_immediate -// Access: -// Description: -//////////////////////////////////////////////////////////////////// -void GeomPolygon:: -print_draw_immediate(void) const { -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomPolygon::draw_immediate -// Access: -// Description: -//////////////////////////////////////////////////////////////////// -void GeomPolygon:: -draw_immediate(GraphicsStateGuardianBase *gsg, GeomContext *gc) { - gsg->draw_polygon(this, gc); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomPolygon::make_GeomPolygon -// Access: Protected -// Description: Factory method to generate a GeomPolygon object -//////////////////////////////////////////////////////////////////// -TypedWritable* GeomPolygon:: -make_GeomPolygon(const FactoryParams ¶ms) { - GeomPolygon *me = new GeomPolygon; - DatagramIterator scan; - BamReader *manager; - - parse_params(params, scan, manager); - me->fillin(scan, manager); - me->make_dirty(); - me->config(); - return me; -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomPolygon::register_with_factory -// Access: Public, Static -// Description: Factory method to generate a GeomPolygon object -//////////////////////////////////////////////////////////////////// -void GeomPolygon:: -register_with_read_factory(void) { - BamReader::get_factory()->register_factory(get_class_type(), make_GeomPolygon); -} - diff --git a/panda/src/gobj/geomPolygon.h b/panda/src/gobj/geomPolygon.h deleted file mode 100644 index 2bc8ad2165..0000000000 --- a/panda/src/gobj/geomPolygon.h +++ /dev/null @@ -1,76 +0,0 @@ -// Filename: geomPolygon.h -// Created by: charles (13Jul00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef GEOMPOLYGON_H -#define GEOMPOLYGON_H - -#include "geom.h" - -//////////////////////////////////////////////////////////////////// -// Class : GeomPolygon -// Description : Polygon Primitive -//////////////////////////////////////////////////////////////////// -class EXPCL_PANDA GeomPolygon : public Geom { -public: - GeomPolygon() : Geom() { } - virtual Geom *make_copy() const; - virtual void print_draw_immediate() const; - virtual void draw_immediate(GraphicsStateGuardianBase *gsg, GeomContext *gc); - - virtual int get_num_vertices_per_prim() const { - return 0; - } - virtual int get_num_more_vertices_than_components() const { - return 0; - } - virtual bool uses_components() const { - return false; - } - - virtual int get_length(int prim) const { - return _primlengths[prim]; - } - - virtual Geom *explode() const { - return new GeomPolygon(*this); - } - -public: - static void register_with_read_factory(void); - static TypedWritable *make_GeomPolygon(const FactoryParams ¶ms); - -PUBLISHED: - static TypeHandle get_class_type() { - return _type_handle; - } -public: - static void init_type() { - Geom::init_type(); - register_type(_type_handle, "GeomPolygon", - Geom::get_class_type()); - } - virtual TypeHandle get_type() const { - return get_class_type(); - } - virtual TypeHandle force_init_type() {init_type(); return get_class_type();} - -private: - static TypeHandle _type_handle; -}; - -#endif // GEOMPOLYGON_H diff --git a/panda/src/gobj/qpgeomPrimitive.I b/panda/src/gobj/geomPrimitive.I similarity index 81% rename from panda/src/gobj/qpgeomPrimitive.I rename to panda/src/gobj/geomPrimitive.I index b6a25a3ce6..e0ce83f87e 100644 --- a/panda/src/gobj/qpgeomPrimitive.I +++ b/panda/src/gobj/geomPrimitive.I @@ -1,4 +1,4 @@ -// Filename: qpgeomPrimitive.I +// Filename: geomPrimitive.I // Created by: drose (06Mar05) // //////////////////////////////////////////////////////////////////// @@ -18,20 +18,20 @@ //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::get_shade_model +// Function: GeomPrimitive::get_shade_model // Access: Published // Description: Returns the ShadeModel hint for this primitive. // This is intended as a hint to the renderer to tell it // how the per-vertex colors and normals are applied. //////////////////////////////////////////////////////////////////// -INLINE qpGeomPrimitive::ShadeModel qpGeomPrimitive:: +INLINE GeomPrimitive::ShadeModel GeomPrimitive:: get_shade_model() const { CDReader cdata(_cycler); return cdata->_shade_model; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::set_shade_model +// Function: GeomPrimitive::set_shade_model // Access: Published // Description: Changes the ShadeModel hint for this primitive. // This is different from the ShadeModelAttrib that @@ -41,14 +41,14 @@ get_shade_model() const { // renderer to tell it how the per-vertex colors and // normals on this primitive are applied. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomPrimitive:: -set_shade_model(qpGeomPrimitive::ShadeModel shade_model) { +INLINE void GeomPrimitive:: +set_shade_model(GeomPrimitive::ShadeModel shade_model) { CDWriter cdata(_cycler); cdata->_shade_model = shade_model; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::get_usage_hint +// Function: GeomPrimitive::get_usage_hint // Access: Published // Description: Returns the usage hint for this primitive. See // geomEnums.h. This has nothing to do with the usage @@ -63,39 +63,39 @@ set_shade_model(qpGeomPrimitive::ShadeModel shade_model) { // the primitive will always reference the same set of // vertices from the pool. //////////////////////////////////////////////////////////////////// -INLINE qpGeomPrimitive::UsageHint qpGeomPrimitive:: +INLINE GeomPrimitive::UsageHint GeomPrimitive:: get_usage_hint() const { CDReader cdata(_cycler); return cdata->_usage_hint; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::get_index_type +// Function: GeomPrimitive::get_index_type // Access: Public // Description: Returns the numeric type of the index column. // Normally, this will be either NT_uint16 or NT_uint32. //////////////////////////////////////////////////////////////////// -INLINE qpGeomPrimitive::NumericType qpGeomPrimitive:: +INLINE GeomPrimitive::NumericType GeomPrimitive:: get_index_type() const { CDReader cdata(_cycler); return cdata->_index_type; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::is_composite +// Function: GeomPrimitive::is_composite // Access: Published // Description: Returns true if the primitive is a composite // primitive such as a tristrip or trifan, or false if // it is a fundamental primitive such as a collection of // triangles. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomPrimitive:: +INLINE bool GeomPrimitive:: is_composite() const { return (get_num_vertices_per_primitive() == 0); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::is_indexed +// Function: GeomPrimitive::is_indexed // Access: Published // Description: Returns true if the primitive is indexed, false // otherwise. An indexed primitive stores a table of @@ -105,22 +105,22 @@ is_composite() const { // vertex number and number of vertices used, so that it // can only reference the vertices consecutively. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomPrimitive:: +INLINE bool GeomPrimitive:: is_indexed() const { CDReader cdata(_cycler); - return (cdata->_vertices != (qpGeomVertexArrayData *)NULL); + return (cdata->_vertices != (GeomVertexArrayData *)NULL); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::get_num_vertices +// Function: GeomPrimitive::get_num_vertices // Access: Published // Description: Returns the number of vertex vertices used by all the // primitives in this object. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomPrimitive:: +INLINE int GeomPrimitive:: get_num_vertices() const { CDReader cdata(_cycler); - if (cdata->_vertices == (qpGeomVertexArrayData *)NULL) { + if (cdata->_vertices == (GeomVertexArrayData *)NULL) { return cdata->_num_vertices; } else { return cdata->_vertices->get_num_rows(); @@ -128,13 +128,13 @@ get_num_vertices() const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::get_num_faces +// Function: GeomPrimitive::get_num_faces // Access: Published // Description: Returns the number of triangles or other fundamental // type (such as line segments) represented by all the // primitives in this object. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomPrimitive:: +INLINE int GeomPrimitive:: get_num_faces() const { int num_vertices_per_primitive = get_num_vertices_per_primitive(); @@ -150,13 +150,13 @@ get_num_faces() const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::get_primitive_num_faces +// Function: GeomPrimitive::get_primitive_num_faces // Access: Published // Description: Returns the number of triangles or other fundamental // type (such as line segments) represented by the nth // primitive in this object. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomPrimitive:: +INLINE int GeomPrimitive:: get_primitive_num_faces(int n) const { int num_vertices_per_primitive = get_num_vertices_per_primitive(); @@ -168,17 +168,17 @@ get_primitive_num_faces(int n) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::get_min_vertex +// Function: GeomPrimitive::get_min_vertex // Access: Published // Description: Returns the minimum vertex index number used by all // the primitives in this object. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomPrimitive:: +INLINE int GeomPrimitive:: get_min_vertex() const { CDReader cdata(_cycler); if (!cdata->_got_minmax) { - CDWriter cdataw(((qpGeomPrimitive *)this)->_cycler, cdata); - ((qpGeomPrimitive *)this)->recompute_minmax(cdataw); + CDWriter cdataw(((GeomPrimitive *)this)->_cycler, cdata); + ((GeomPrimitive *)this)->recompute_minmax(cdataw); return cdataw->_min_vertex; } @@ -186,49 +186,49 @@ get_min_vertex() const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::get_max_vertex +// Function: GeomPrimitive::get_max_vertex // Access: Published // Description: Returns the maximum vertex index number used by all // the primitives in this object. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomPrimitive:: +INLINE int GeomPrimitive:: get_max_vertex() const { CDReader cdata(_cycler); if (!cdata->_got_minmax) { - CDWriter cdataw(((qpGeomPrimitive *)this)->_cycler, cdata); - ((qpGeomPrimitive *)this)->recompute_minmax(cdataw); + CDWriter cdataw(((GeomPrimitive *)this)->_cycler, cdata); + ((GeomPrimitive *)this)->recompute_minmax(cdataw); return cdataw->_max_vertex; } return cdata->_max_vertex; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::get_data_size_bytes +// Function: GeomPrimitive::get_data_size_bytes // Access: Published // Description: Returns the number of bytes stored in the vertices // array. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomPrimitive:: +INLINE int GeomPrimitive:: get_data_size_bytes() const { CDReader cdata(_cycler); return cdata->_vertices->get_data_size_bytes(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::get_modified +// Function: GeomPrimitive::get_modified // Access: Published // Description: Returns a sequence number which is guaranteed to // change at least every time the vertex index array is // modified. //////////////////////////////////////////////////////////////////// -INLINE UpdateSeq qpGeomPrimitive:: +INLINE UpdateSeq GeomPrimitive:: get_modified() const { CDReader cdata(_cycler); return cdata->_modified; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::get_vertices +// Function: GeomPrimitive::get_vertices // Access: Public // Description: Returns a const pointer to the vertex index array so // application code can read it directly. This might @@ -236,39 +236,39 @@ get_modified() const { // attempt to modify the returned array; use // modify_vertices() or set_vertices() for this. //////////////////////////////////////////////////////////////////// -INLINE const qpGeomVertexArrayData *qpGeomPrimitive:: +INLINE const GeomVertexArrayData *GeomPrimitive:: get_vertices() const { CDReader cdata(_cycler); return cdata->_vertices; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::get_index_stride +// Function: GeomPrimitive::get_index_stride // Access: Public // Description: A convenience function to return the gap between // successive index numbers, in bytes, of the index // data. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomPrimitive:: +INLINE int GeomPrimitive:: get_index_stride() const { nassertr(is_indexed(), 0); return get_vertices()->get_array_format()->get_stride(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::get_data +// Function: GeomPrimitive::get_data // Access: Public // Description: A convenience function to return the actual data of // the index array. //////////////////////////////////////////////////////////////////// -INLINE CPTA_uchar qpGeomPrimitive:: +INLINE CPTA_uchar GeomPrimitive:: get_data() const { nassertr(is_indexed(), CPTA_uchar()); return get_vertices()->get_data(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::get_ends +// Function: GeomPrimitive::get_ends // Access: Public // Description: Returns a const pointer to the primitive ends // array so application code can read it directly. Do @@ -279,14 +279,14 @@ get_data() const { // not have a ends array: since all the primitives // have the same number of vertices, it is not needed. //////////////////////////////////////////////////////////////////// -INLINE CPTA_int qpGeomPrimitive:: +INLINE CPTA_int GeomPrimitive:: get_ends() const { CDReader cdata(_cycler); return cdata->_ends; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::get_mins +// Function: GeomPrimitive::get_mins // Access: Public // Description: Returns a const pointer to the primitive mins // array so application code can read it directly. Do @@ -296,20 +296,20 @@ get_ends() const { // Note that simple primitive types, like triangles, do // not have a mins array. //////////////////////////////////////////////////////////////////// -INLINE const qpGeomVertexArrayData *qpGeomPrimitive:: +INLINE const GeomVertexArrayData *GeomPrimitive:: get_mins() const { nassertr(is_indexed(), NULL); CDReader cdata(_cycler); if (!cdata->_got_minmax) { - CDWriter cdataw(((qpGeomPrimitive *)this)->_cycler, cdata); - ((qpGeomPrimitive *)this)->recompute_minmax(cdataw); + CDWriter cdataw(((GeomPrimitive *)this)->_cycler, cdata); + ((GeomPrimitive *)this)->recompute_minmax(cdataw); return cdataw->_mins; } return cdata->_mins; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::get_maxs +// Function: GeomPrimitive::get_maxs // Access: Public // Description: Returns a const pointer to the primitive maxs // array so application code can read it directly. Do @@ -319,47 +319,47 @@ get_mins() const { // Note that simple primitive types, like triangles, do // not have a maxs array. //////////////////////////////////////////////////////////////////// -INLINE const qpGeomVertexArrayData *qpGeomPrimitive:: +INLINE const GeomVertexArrayData *GeomPrimitive:: get_maxs() const { nassertr(is_indexed(), NULL); CDReader cdata(_cycler); if (!cdata->_got_minmax) { - CDWriter cdataw(((qpGeomPrimitive *)this)->_cycler, cdata); - ((qpGeomPrimitive *)this)->recompute_minmax(cdataw); + CDWriter cdataw(((GeomPrimitive *)this)->_cycler, cdata); + ((GeomPrimitive *)this)->recompute_minmax(cdataw); return cdataw->_maxs; } return cdata->_maxs; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::get_index_format +// Function: GeomPrimitive::get_index_format // Access: Protected // Description: Returns a registered format appropriate for using to // store the index table. //////////////////////////////////////////////////////////////////// -INLINE CPT(qpGeomVertexArrayFormat) qpGeomPrimitive:: +INLINE CPT(GeomVertexArrayFormat) GeomPrimitive:: get_index_format() const { - return qpGeomVertexArrayFormat::register_format - (new qpGeomVertexArrayFormat(InternalName::get_index(), 1, + return GeomVertexArrayFormat::register_format + (new GeomVertexArrayFormat(InternalName::get_index(), 1, get_index_type(), C_index)); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::make_index_data +// Function: GeomPrimitive::make_index_data // Access: Protected // Description: Creates and returns a new, empty index table. //////////////////////////////////////////////////////////////////// -INLINE PT(qpGeomVertexArrayData) qpGeomPrimitive:: +INLINE PT(GeomVertexArrayData) GeomPrimitive:: make_index_data() const { - return new qpGeomVertexArrayData(get_index_format(), get_usage_hint()); + return new GeomVertexArrayData(get_index_format(), get_usage_hint()); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::CData::Constructor +// Function: GeomPrimitive::CData::Constructor // Access: Public // Description: //////////////////////////////////////////////////////////////////// -INLINE qpGeomPrimitive::CData:: +INLINE GeomPrimitive::CData:: CData() : _shade_model(SM_smooth), _first_vertex(0), @@ -373,12 +373,12 @@ CData() : } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::CData::Copy Constructor +// Function: GeomPrimitive::CData::Copy Constructor // Access: Public // Description: //////////////////////////////////////////////////////////////////// -INLINE qpGeomPrimitive::CData:: -CData(const qpGeomPrimitive::CData ©) : +INLINE GeomPrimitive::CData:: +CData(const GeomPrimitive::CData ©) : _shade_model(copy._shade_model), _first_vertex(copy._first_vertex), _num_vertices(copy._num_vertices), @@ -395,7 +395,7 @@ CData(const qpGeomPrimitive::CData ©) : } INLINE ostream & -operator << (ostream &out, const qpGeomPrimitive &obj) { +operator << (ostream &out, const GeomPrimitive &obj) { obj.output(out); return out; } diff --git a/panda/src/gobj/qpgeomPrimitive.cxx b/panda/src/gobj/geomPrimitive.cxx similarity index 83% rename from panda/src/gobj/qpgeomPrimitive.cxx rename to panda/src/gobj/geomPrimitive.cxx index 1288bb3ea1..4aeb767851 100644 --- a/panda/src/gobj/qpgeomPrimitive.cxx +++ b/panda/src/gobj/geomPrimitive.cxx @@ -1,4 +1,4 @@ -// Filename: qpgeomPrimitive.cxx +// Filename: geomPrimitive.cxx // Created by: drose (06Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,123 +16,124 @@ // //////////////////////////////////////////////////////////////////// -#include "qpgeomPrimitive.h" -#include "qpgeom.h" -#include "qpgeomVertexData.h" -#include "qpgeomVertexArrayFormat.h" -#include "qpgeomVertexColumn.h" -#include "qpgeomVertexReader.h" -#include "qpgeomVertexWriter.h" -#include "qpgeomVertexRewriter.h" +#include "geomPrimitive.h" +#include "geom.h" +#include "geomVertexData.h" +#include "geomVertexArrayFormat.h" +#include "geomVertexColumn.h" +#include "geomVertexReader.h" +#include "geomVertexWriter.h" +#include "geomVertexRewriter.h" #include "preparedGraphicsObjects.h" #include "internalName.h" #include "bamReader.h" #include "bamWriter.h" +#include "ioPtaDatagramInt.h" #include "indent.h" -TypeHandle qpGeomPrimitive::_type_handle; +TypeHandle GeomPrimitive::_type_handle; -PStatCollector qpGeomPrimitive::_decompose_pcollector("*:Munge:Decompose"); -PStatCollector qpGeomPrimitive::_rotate_pcollector("*:Munge:Rotate"); +PStatCollector GeomPrimitive::_decompose_pcollector("*:Munge:Decompose"); +PStatCollector GeomPrimitive::_rotate_pcollector("*:Munge:Rotate"); //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::Default Constructor +// Function: GeomPrimitive::Default Constructor // Access: Protected // Description: Constructs an invalid object. Only used when reading // from bam. //////////////////////////////////////////////////////////////////// -qpGeomPrimitive:: -qpGeomPrimitive() { +GeomPrimitive:: +GeomPrimitive() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::Constructor +// Function: GeomPrimitive::Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -qpGeomPrimitive:: -qpGeomPrimitive(qpGeomPrimitive::UsageHint usage_hint) { +GeomPrimitive:: +GeomPrimitive(GeomPrimitive::UsageHint usage_hint) { CDWriter cdata(_cycler); cdata->_usage_hint = usage_hint; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::Copy Constructor +// Function: GeomPrimitive::Copy Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -qpGeomPrimitive:: -qpGeomPrimitive(const qpGeomPrimitive ©) : +GeomPrimitive:: +GeomPrimitive(const GeomPrimitive ©) : TypedWritableReferenceCount(copy), _cycler(copy._cycler) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::Destructor +// Function: GeomPrimitive::Destructor // Access: Published, Virtual // Description: //////////////////////////////////////////////////////////////////// -qpGeomPrimitive:: -~qpGeomPrimitive() { +GeomPrimitive:: +~GeomPrimitive() { release_all(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::get_geom_rendering +// Function: GeomPrimitive::get_geom_rendering // Access: Published, Virtual // Description: Returns the set of GeomRendering bits that represent // the rendering properties required to properly render // this primitive. //////////////////////////////////////////////////////////////////// -int qpGeomPrimitive:: +int GeomPrimitive:: get_geom_rendering() const { // The default is nothing fancy. return 0; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::set_usage_hint +// Function: GeomPrimitive::set_usage_hint // Access: Published // Description: Changes the UsageHint hint for this primitive. See // get_usage_hint(). //////////////////////////////////////////////////////////////////// -void qpGeomPrimitive:: -set_usage_hint(qpGeomPrimitive::UsageHint usage_hint) { +void GeomPrimitive:: +set_usage_hint(GeomPrimitive::UsageHint usage_hint) { CDWriter cdata(_cycler); cdata->_usage_hint = usage_hint; - if (cdata->_vertices != (qpGeomVertexArrayData *)NULL) { + if (cdata->_vertices != (GeomVertexArrayData *)NULL) { if (cdata->_vertices->get_ref_count() > 1) { - cdata->_vertices = new qpGeomVertexArrayData(*cdata->_vertices); + cdata->_vertices = new GeomVertexArrayData(*cdata->_vertices); } - cdata->_modified = qpGeom::get_next_modified(); + cdata->_modified = Geom::get_next_modified(); cdata->_usage_hint = usage_hint; } } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::set_index_type +// Function: GeomPrimitive::set_index_type // Access: Published // Description: Changes the numeric type of the index column. // Normally, this should be either NT_uint16 or // NT_uint32. //////////////////////////////////////////////////////////////////// -void qpGeomPrimitive:: -set_index_type(qpGeomPrimitive::NumericType index_type) { +void GeomPrimitive:: +set_index_type(GeomPrimitive::NumericType index_type) { CDWriter cdata(_cycler); cdata->_index_type = index_type; - if (cdata->_vertices != (qpGeomVertexArrayData *)NULL) { - CPT(qpGeomVertexArrayFormat) new_format = get_index_format(); + if (cdata->_vertices != (GeomVertexArrayData *)NULL) { + CPT(GeomVertexArrayFormat) new_format = get_index_format(); if (cdata->_vertices->get_array_format() != new_format) { - PT(qpGeomVertexArrayData) new_vertices = make_index_data(); + PT(GeomVertexArrayData) new_vertices = make_index_data(); new_vertices->set_num_rows(cdata->_vertices->get_num_rows()); - qpGeomVertexReader from(cdata->_vertices, 0); - qpGeomVertexWriter to(new_vertices, 0); + GeomVertexReader from(cdata->_vertices, 0); + GeomVertexWriter to(new_vertices, 0); while (!from.is_at_end()) { to.set_data1i(from.get_data1i()); @@ -144,7 +145,7 @@ set_index_type(qpGeomPrimitive::NumericType index_type) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::get_first_vertex +// Function: GeomPrimitive::get_first_vertex // Access: Published // Description: Returns the first vertex number referenced by the // primitive. This is particularly important in the @@ -152,33 +153,33 @@ set_index_type(qpGeomPrimitive::NumericType index_type) { // get_first_vertex() and get_num_vertices() completely // define the extent of the vertex range. //////////////////////////////////////////////////////////////////// -int qpGeomPrimitive:: +int GeomPrimitive:: get_first_vertex() const { CDReader cdata(_cycler); - if (cdata->_vertices == (qpGeomVertexArrayData *)NULL) { + if (cdata->_vertices == (GeomVertexArrayData *)NULL) { return cdata->_first_vertex; } else if (cdata->_vertices->get_num_rows() == 0) { return 0; } else { - qpGeomVertexReader index(cdata->_vertices, 0); + GeomVertexReader index(cdata->_vertices, 0); return index.get_data1i(); } } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::get_vertex +// Function: GeomPrimitive::get_vertex // Access: Published // Description: Returns the ith vertex index in the table. //////////////////////////////////////////////////////////////////// -int qpGeomPrimitive:: +int GeomPrimitive:: get_vertex(int i) const { CDReader cdata(_cycler); - if (cdata->_vertices != (qpGeomVertexArrayData *)NULL) { + if (cdata->_vertices != (GeomVertexArrayData *)NULL) { // The indexed case. nassertr(i >= 0 && i < (int)cdata->_vertices->get_num_rows(), -1); - qpGeomVertexReader index(cdata->_vertices, 0); + GeomVertexReader index(cdata->_vertices, 0); index.set_row(i); return index.get_data1i(); @@ -189,7 +190,7 @@ get_vertex(int i) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::add_vertex +// Function: GeomPrimitive::add_vertex // Access: Published // Description: Adds the indicated vertex to the list of vertex // indices used by the graphics primitive type. To @@ -198,7 +199,7 @@ get_vertex(int i) const { // close_primitive() after you have specified the last // vertex of each primitive. //////////////////////////////////////////////////////////////////// -void qpGeomPrimitive:: +void GeomPrimitive:: add_vertex(int vertex) { CDWriter cdata(_cycler); @@ -208,25 +209,25 @@ add_vertex(int vertex) { get_num_vertices() == get_primitive_end(num_primitives - 1)) { // If we are beginning a new primitive, give the derived class a // chance to insert some degenerate vertices. - if (cdata->_vertices == (qpGeomVertexArrayData *)NULL) { + if (cdata->_vertices == (GeomVertexArrayData *)NULL) { do_make_indexed(cdata); } append_unused_vertices(cdata->_vertices, vertex); } - if (cdata->_vertices == (qpGeomVertexArrayData *)NULL) { + if (cdata->_vertices == (GeomVertexArrayData *)NULL) { // The nonindexed case. We can keep the primitive nonindexed only // if the vertex number happens to be the next available vertex. if (cdata->_num_vertices == 0) { cdata->_first_vertex = vertex; cdata->_num_vertices = 1; - cdata->_modified = qpGeom::get_next_modified(); + cdata->_modified = Geom::get_next_modified(); cdata->_got_minmax = false; return; } else if (vertex == cdata->_first_vertex + cdata->_num_vertices) { ++cdata->_num_vertices; - cdata->_modified = qpGeom::get_next_modified(); + cdata->_modified = Geom::get_next_modified(); cdata->_got_minmax = false; return; } @@ -235,22 +236,22 @@ add_vertex(int vertex) { do_make_indexed(cdata); } - qpGeomVertexWriter index(cdata->_vertices, 0); + GeomVertexWriter index(cdata->_vertices, 0); index.set_row(cdata->_vertices->get_num_rows()); index.add_data1i(vertex); - cdata->_modified = qpGeom::get_next_modified(); + cdata->_modified = Geom::get_next_modified(); cdata->_got_minmax = false; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::add_consecutive_vertices +// Function: GeomPrimitive::add_consecutive_vertices // Access: Published // Description: Adds a consecutive sequence of vertices, beginning at // start, to the primitive. //////////////////////////////////////////////////////////////////// -void qpGeomPrimitive:: +void GeomPrimitive:: add_consecutive_vertices(int start, int num_vertices) { if (num_vertices == 0) { return; @@ -264,13 +265,13 @@ add_consecutive_vertices(int start, int num_vertices) { get_num_vertices() == get_primitive_end(num_primitives - 1)) { // If we are beginning a new primitive, give the derived class a // chance to insert some degenerate vertices. - if (cdata->_vertices == (qpGeomVertexArrayData *)NULL) { + if (cdata->_vertices == (GeomVertexArrayData *)NULL) { do_make_indexed(cdata); } append_unused_vertices(cdata->_vertices, start); } - if (cdata->_vertices == (qpGeomVertexArrayData *)NULL) { + if (cdata->_vertices == (GeomVertexArrayData *)NULL) { // The nonindexed case. We can keep the primitive nonindexed only // if the vertex number happens to be the next available vertex. if (cdata->_num_vertices == 0) { @@ -287,19 +288,19 @@ add_consecutive_vertices(int start, int num_vertices) { do_make_indexed(cdata); } - qpGeomVertexWriter index(cdata->_vertices, 0); + GeomVertexWriter index(cdata->_vertices, 0); index.set_row(cdata->_vertices->get_num_rows()); for (int v = start; v <= end; ++v) { index.add_data1i(v); } - cdata->_modified = qpGeom::get_next_modified(); + cdata->_modified = Geom::get_next_modified(); cdata->_got_minmax = false; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::add_next_vertices +// Function: GeomPrimitive::add_next_vertices // Access: Published // Description: Adds the next n vertices in sequence, beginning from // the last vertex added to the primitive + 1. @@ -309,7 +310,7 @@ add_consecutive_vertices(int start, int num_vertices) { // you just want the primitive to reference the first n // vertices from the data, then the next n, and so on. //////////////////////////////////////////////////////////////////// -void qpGeomPrimitive:: +void GeomPrimitive:: add_next_vertices(int num_vertices) { if (get_num_vertices() == 0) { add_consecutive_vertices(0, num_vertices); @@ -319,14 +320,14 @@ add_next_vertices(int num_vertices) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::close_primitive +// Function: GeomPrimitive::close_primitive // Access: Published // Description: Indicates that the previous n calls to add_vertex(), // since the last call to close_primitive(), have fully // defined a new primitive. Returns true if successful, // false otherwise. //////////////////////////////////////////////////////////////////// -bool qpGeomPrimitive:: +bool GeomPrimitive:: close_primitive() { int num_vertices_per_primitive = get_num_vertices_per_primitive(); @@ -364,18 +365,18 @@ close_primitive() { #endif } - cdata->_modified = qpGeom::get_next_modified(); + cdata->_modified = Geom::get_next_modified(); return true; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::clear_vertices +// Function: GeomPrimitive::clear_vertices // Access: Published // Description: Removes all of the vertices and primitives from the // object, so they can be re-added. //////////////////////////////////////////////////////////////////// -void qpGeomPrimitive:: +void GeomPrimitive:: clear_vertices() { CDWriter cdata(_cycler); cdata->_first_vertex = 0; @@ -384,20 +385,20 @@ clear_vertices() { cdata->_ends.clear(); cdata->_mins.clear(); cdata->_maxs.clear(); - cdata->_modified = qpGeom::get_next_modified(); + cdata->_modified = Geom::get_next_modified(); cdata->_got_minmax = false; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::offset_vertices +// Function: GeomPrimitive::offset_vertices // Access: Published // Description: Adds the indicated offset to all vertices used by the // primitive. //////////////////////////////////////////////////////////////////// -void qpGeomPrimitive:: +void GeomPrimitive:: offset_vertices(int offset) { if (is_indexed()) { - qpGeomVertexRewriter index(modify_vertices(), 0); + GeomVertexRewriter index(modify_vertices(), 0); while (!index.is_at_end()) { index.set_data1i(index.get_data1i() + offset); } @@ -405,20 +406,20 @@ offset_vertices(int offset) { } else { CDWriter cdata(_cycler); cdata->_first_vertex += offset; - cdata->_modified = qpGeom::get_next_modified(); + cdata->_modified = Geom::get_next_modified(); cdata->_got_minmax = false; } } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::make_nonindexed +// Function: GeomPrimitive::make_nonindexed // Access: Published // Description: Converts the primitive from indexed to nonindexed by // duplicating vertices as necessary into the indicated // dest GeomVertexData. //////////////////////////////////////////////////////////////////// -void qpGeomPrimitive:: -make_nonindexed(qpGeomVertexData *dest, const qpGeomVertexData *source) { +void GeomPrimitive:: +make_nonindexed(GeomVertexData *dest, const GeomVertexData *source) { int num_vertices = get_num_vertices(); int dest_start = dest->get_num_rows(); @@ -432,14 +433,14 @@ make_nonindexed(qpGeomVertexData *dest, const qpGeomVertexData *source) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::pack_vertices +// Function: GeomPrimitive::pack_vertices // Access: Published // Description: Packs the vertices used by the primitive from the // indicated source array onto the end of the indicated // destination array. //////////////////////////////////////////////////////////////////// -void qpGeomPrimitive:: -pack_vertices(qpGeomVertexData *dest, const qpGeomVertexData *source) { +void GeomPrimitive:: +pack_vertices(GeomVertexData *dest, const GeomVertexData *source) { if (!is_indexed()) { // If the primitive is nonindexed, packing is the same as // converting (again) to nonindexed. @@ -447,9 +448,9 @@ pack_vertices(qpGeomVertexData *dest, const qpGeomVertexData *source) { } else { // The indexed case: build up a new index as we go. - CPT(qpGeomVertexArrayData) orig_vertices = get_vertices(); - PT(qpGeomVertexArrayData) new_vertices = make_index_data(); - qpGeomVertexWriter index(new_vertices, 0); + CPT(GeomVertexArrayData) orig_vertices = get_vertices(); + PT(GeomVertexArrayData) new_vertices = make_index_data(); + GeomVertexWriter index(new_vertices, 0); typedef pmap CopiedIndices; CopiedIndices copied_indices; @@ -478,7 +479,7 @@ pack_vertices(qpGeomVertexData *dest, const qpGeomVertexData *source) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::make_indexed +// Function: GeomPrimitive::make_indexed // Access: Published // Description: Converts the primitive from nonindexed form to // indexed form. This will simply create an index table @@ -488,20 +489,20 @@ pack_vertices(qpGeomVertexData *dest, const qpGeomVertexData *source) { // been split apart by a previous call to // make_nonindexed(). //////////////////////////////////////////////////////////////////// -void qpGeomPrimitive:: +void GeomPrimitive:: make_indexed() { CDWriter cdata(_cycler); do_make_indexed(cdata); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::get_num_primitives +// Function: GeomPrimitive::get_num_primitives // Access: Published // Description: Returns the number of individual primitives stored // within this object. All primitives are the same // type. //////////////////////////////////////////////////////////////////// -int qpGeomPrimitive:: +int GeomPrimitive:: get_num_primitives() const { int num_vertices_per_primitive = get_num_vertices_per_primitive(); @@ -519,7 +520,7 @@ get_num_primitives() const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::get_primitive_start +// Function: GeomPrimitive::get_primitive_start // Access: Published // Description: Returns the element within the _vertices list at which // the nth primitive starts. @@ -532,7 +533,7 @@ get_num_primitives() const { // get_primitive_start(n + 1) (although this range also // includes the unused vertices between primitives). //////////////////////////////////////////////////////////////////// -int qpGeomPrimitive:: +int GeomPrimitive:: get_primitive_start(int n) const { int num_vertices_per_primitive = get_num_vertices_per_primitive(); int num_unused_vertices_per_primitive = get_num_unused_vertices_per_primitive(); @@ -556,13 +557,13 @@ get_primitive_start(int n) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::get_primitive_end +// Function: GeomPrimitive::get_primitive_end // Access: Published // Description: Returns the element within the _vertices list at which // the nth primitive ends. This is one past the last // valid element for the nth primitive. //////////////////////////////////////////////////////////////////// -int qpGeomPrimitive:: +int GeomPrimitive:: get_primitive_end(int n) const { int num_vertices_per_primitive = get_num_vertices_per_primitive(); @@ -582,13 +583,13 @@ get_primitive_end(int n) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::get_primitive_num_vertices +// Function: GeomPrimitive::get_primitive_num_vertices // Access: Published // Description: Returns the number of vertices used by the nth // primitive. This is the same thing as // get_primitive_end(n) - get_primitive_start(n). //////////////////////////////////////////////////////////////////// -int qpGeomPrimitive:: +int GeomPrimitive:: get_primitive_num_vertices(int n) const { int num_vertices_per_primitive = get_num_vertices_per_primitive(); @@ -612,18 +613,18 @@ get_primitive_num_vertices(int n) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::get_primitive_min_vertex +// Function: GeomPrimitive::get_primitive_min_vertex // Access: Published // Description: Returns the minimum vertex index number used by the // nth primitive in this object. //////////////////////////////////////////////////////////////////// -int qpGeomPrimitive:: +int GeomPrimitive:: get_primitive_min_vertex(int n) const { if (is_indexed()) { - CPT(qpGeomVertexArrayData) mins = get_mins(); + CPT(GeomVertexArrayData) mins = get_mins(); nassertr(n >= 0 && n < mins->get_num_rows(), -1); - qpGeomVertexReader index(mins, 0); + GeomVertexReader index(mins, 0); index.set_row(n); return index.get_data1i(); } else { @@ -632,18 +633,18 @@ get_primitive_min_vertex(int n) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::get_primitive_max_vertex +// Function: GeomPrimitive::get_primitive_max_vertex // Access: Published // Description: Returns the maximum vertex index number used by the // nth primitive in this object. //////////////////////////////////////////////////////////////////// -int qpGeomPrimitive:: +int GeomPrimitive:: get_primitive_max_vertex(int n) const { if (is_indexed()) { - CPT(qpGeomVertexArrayData) maxs = get_maxs(); + CPT(GeomVertexArrayData) maxs = get_maxs(); nassertr(n >= 0 && n < maxs->get_num_rows(), -1); - qpGeomVertexReader index(maxs, 0); + GeomVertexReader index(maxs, 0); index.set_row(n); return index.get_data1i(); } else { @@ -652,7 +653,7 @@ get_primitive_max_vertex(int n) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::decompose +// Function: GeomPrimitive::decompose // Access: Published // Description: Decomposes a complex primitive type into a simpler // primitive type, for instance triangle strips to @@ -665,7 +666,7 @@ get_primitive_max_vertex(int n) const { // primitive without having to write handlers for each // possible kind of primitive type. //////////////////////////////////////////////////////////////////// -CPT(qpGeomPrimitive) qpGeomPrimitive:: +CPT(GeomPrimitive) GeomPrimitive:: decompose() const { if (gobj_cat.is_debug()) { gobj_cat.debug() @@ -677,7 +678,7 @@ decompose() const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::rotate +// Function: GeomPrimitive::rotate // Access: Published // Description: Returns a new primitive with the shade_model reversed // (if it is flat shaded), if possible. If the @@ -690,7 +691,7 @@ decompose() const { // flat_vertex_first, this should bring the first vertex // to the last position. //////////////////////////////////////////////////////////////////// -CPT(qpGeomPrimitive) qpGeomPrimitive:: +CPT(GeomPrimitive) GeomPrimitive:: rotate() const { if (gobj_cat.is_debug()) { gobj_cat.debug() @@ -698,14 +699,14 @@ rotate() const { } PStatTimer timer(_rotate_pcollector); - CPT(qpGeomVertexArrayData) rotated_vertices = rotate_impl(); + CPT(GeomVertexArrayData) rotated_vertices = rotate_impl(); - if (rotated_vertices == (qpGeomVertexArrayData *)NULL) { + if (rotated_vertices == (GeomVertexArrayData *)NULL) { // This primitive type can't be rotated. return this; } - PT(qpGeomPrimitive) new_prim = make_copy(); + PT(GeomPrimitive) new_prim = make_copy(); new_prim->set_vertices(rotated_vertices); switch (get_shade_model()) { @@ -725,7 +726,7 @@ rotate() const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::match_shade_model +// Function: GeomPrimitive::match_shade_model // Access: Published // Description: Returns a new primitive that is compatible with the // indicated shade model, if possible, or NULL if this @@ -737,8 +738,8 @@ rotate() const { // vice-versa), however, it will return a rotated // primitive. //////////////////////////////////////////////////////////////////// -CPT(qpGeomPrimitive) qpGeomPrimitive:: -match_shade_model(qpGeomPrimitive::ShadeModel shade_model) const { +CPT(GeomPrimitive) GeomPrimitive:: +match_shade_model(GeomPrimitive::ShadeModel shade_model) const { ShadeModel this_shade_model = get_shade_model(); if (this_shade_model == shade_model) { // Trivially compatible. @@ -753,7 +754,7 @@ match_shade_model(qpGeomPrimitive::ShadeModel shade_model) const { if ((this_shade_model == SM_flat_first_vertex && shade_model == SM_flat_last_vertex) || (this_shade_model == SM_flat_last_vertex && shade_model == SM_flat_first_vertex)) { // Needs to be rotated. - CPT(qpGeomPrimitive) rotated = rotate(); + CPT(GeomPrimitive) rotated = rotate(); if (rotated.p() == this) { // Oops, can't be rotated, sorry. return NULL; @@ -766,16 +767,16 @@ match_shade_model(qpGeomPrimitive::ShadeModel shade_model) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::get_num_bytes +// Function: GeomPrimitive::get_num_bytes // Access: Published // Description: Returns the number of bytes consumed by the primitive // and its index table(s). //////////////////////////////////////////////////////////////////// -int qpGeomPrimitive:: +int GeomPrimitive:: get_num_bytes() const { CDReader cdata(_cycler); - int num_bytes = cdata->_ends.size() * sizeof(int) + sizeof(qpGeomPrimitive); - if (cdata->_vertices != (qpGeomVertexArrayData *)NULL) { + int num_bytes = cdata->_ends.size() * sizeof(int) + sizeof(GeomPrimitive); + if (cdata->_vertices != (GeomVertexArrayData *)NULL) { num_bytes += cdata->_vertices->get_data_size_bytes(); } @@ -783,36 +784,36 @@ get_num_bytes() const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::check_valid +// Function: GeomPrimitive::check_valid // Access: Published // Description: Verifies that the primitive only references vertices // that actually exist within the indicated // GeomVertexData. Returns true if the primitive // appears to be valid, false otherwise. //////////////////////////////////////////////////////////////////// -bool qpGeomPrimitive:: -check_valid(const qpGeomVertexData *vertex_data) const { +bool GeomPrimitive:: +check_valid(const GeomVertexData *vertex_data) const { return get_num_vertices() == 0 || get_max_vertex() < vertex_data->get_num_rows(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::output +// Function: GeomPrimitive::output // Access: Published, Virtual // Description: //////////////////////////////////////////////////////////////////// -void qpGeomPrimitive:: +void GeomPrimitive:: output(ostream &out) const { out << get_type() << ", " << get_num_primitives() << ", " << get_num_vertices(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::write +// Function: GeomPrimitive::write // Access: Published, Virtual // Description: //////////////////////////////////////////////////////////////////// -void qpGeomPrimitive:: +void GeomPrimitive:: write(ostream &out, int indent_level) const { indent(out, indent_level) << get_type(); @@ -848,7 +849,7 @@ write(ostream &out, int indent_level) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::modify_vertices +// Function: GeomPrimitive::modify_vertices // Access: Public // Description: Returns a modifiable pointer to the vertex index // list, so application code can directly fiddle with @@ -858,59 +859,59 @@ write(ostream &out, int indent_level) const { // If this is called on a nonindexed primitive, it will // implicitly be converted to an indexed primitive. //////////////////////////////////////////////////////////////////// -qpGeomVertexArrayData *qpGeomPrimitive:: +GeomVertexArrayData *GeomPrimitive:: modify_vertices() { CDWriter cdata(_cycler); - if (cdata->_vertices == (qpGeomVertexArrayData *)NULL) { + if (cdata->_vertices == (GeomVertexArrayData *)NULL) { do_make_indexed(cdata); } if (cdata->_vertices->get_ref_count() > 1) { - cdata->_vertices = new qpGeomVertexArrayData(*cdata->_vertices); + cdata->_vertices = new GeomVertexArrayData(*cdata->_vertices); } - cdata->_modified = qpGeom::get_next_modified(); + cdata->_modified = Geom::get_next_modified(); cdata->_got_minmax = false; return cdata->_vertices; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::set_vertices +// Function: GeomPrimitive::set_vertices // Access: Public // Description: Completely replaces the vertex index list with a new // table. Chances are good that you should also replace // the ends list with set_ends() at the same time. //////////////////////////////////////////////////////////////////// -void qpGeomPrimitive:: -set_vertices(const qpGeomVertexArrayData *vertices) { +void GeomPrimitive:: +set_vertices(const GeomVertexArrayData *vertices) { CDWriter cdata(_cycler); - cdata->_vertices = (qpGeomVertexArrayData *)vertices; + cdata->_vertices = (GeomVertexArrayData *)vertices; - cdata->_modified = qpGeom::get_next_modified(); + cdata->_modified = Geom::get_next_modified(); cdata->_got_minmax = false; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::set_nonindexed_vertices +// Function: GeomPrimitive::set_nonindexed_vertices // Access: Public // Description: Sets the primitive up as a nonindexed primitive, // using the indicated vertex range. //////////////////////////////////////////////////////////////////// -void qpGeomPrimitive:: +void GeomPrimitive:: set_nonindexed_vertices(int first_vertex, int num_vertices) { CDWriter cdata(_cycler); - cdata->_vertices = (qpGeomVertexArrayData *)NULL; + cdata->_vertices = (GeomVertexArrayData *)NULL; cdata->_first_vertex = first_vertex; cdata->_num_vertices = num_vertices; - cdata->_modified = qpGeom::get_next_modified(); + cdata->_modified = Geom::get_next_modified(); cdata->_got_minmax = false; recompute_minmax(cdata); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::modify_ends +// Function: GeomPrimitive::modify_ends // Access: Public // Description: Returns a modifiable pointer to the primitive ends // array, so application code can directly fiddle with @@ -921,17 +922,17 @@ set_nonindexed_vertices(int first_vertex, int num_vertices) { // not have a ends array: since all the primitives // have the same number of vertices, it is not needed. //////////////////////////////////////////////////////////////////// -PTA_int qpGeomPrimitive:: +PTA_int GeomPrimitive:: modify_ends() { CDWriter cdata(_cycler); - cdata->_modified = qpGeom::get_next_modified(); + cdata->_modified = Geom::get_next_modified(); cdata->_got_minmax = false; return cdata->_ends; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::set_ends +// Function: GeomPrimitive::set_ends // Access: Public // Description: Completely replaces the primitive ends array with // a new table. Chances are good that you should also @@ -942,17 +943,17 @@ modify_ends() { // not have a ends array: since all the primitives // have the same number of vertices, it is not needed. //////////////////////////////////////////////////////////////////// -void qpGeomPrimitive:: +void GeomPrimitive:: set_ends(CPTA_int ends) { CDWriter cdata(_cycler); cdata->_ends = (PTA_int &)ends; - cdata->_modified = qpGeom::get_next_modified(); + cdata->_modified = Geom::get_next_modified(); cdata->_got_minmax = false; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::get_num_vertices_per_primitive +// Function: GeomPrimitive::get_num_vertices_per_primitive // Access: Public, Virtual // Description: If the primitive type is a simple type in which all // primitives have the same number of vertices, like @@ -962,24 +963,24 @@ set_ends(CPTA_int ends) { // different numbers of vertices, for instance a // triangle strip, returns 0. //////////////////////////////////////////////////////////////////// -int qpGeomPrimitive:: +int GeomPrimitive:: get_num_vertices_per_primitive() const { return 0; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::get_min_num_vertices_per_primitive +// Function: GeomPrimitive::get_min_num_vertices_per_primitive // Access: Public, Virtual // Description: Returns the minimum number of vertices that must be // added before close_primitive() may legally be called. //////////////////////////////////////////////////////////////////// -int qpGeomPrimitive:: +int GeomPrimitive:: get_min_num_vertices_per_primitive() const { return 3; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::get_num_unused_vertices_per_primitive +// Function: GeomPrimitive::get_num_unused_vertices_per_primitive // Access: Public, Virtual // Description: Returns the number of vertices that are added between // primitives that aren't, strictly speaking, part of @@ -987,13 +988,13 @@ get_min_num_vertices_per_primitive() const { // instance, to define degenerate triangles to connect // otherwise disconnected triangle strips. //////////////////////////////////////////////////////////////////// -int qpGeomPrimitive:: +int GeomPrimitive:: get_num_unused_vertices_per_primitive() const { return 0; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::prepare +// Function: GeomPrimitive::prepare // Access: Public // Description: Indicates that the data should be enqueued to be // prepared in the indicated prepared_objects at the @@ -1004,13 +1005,13 @@ get_num_unused_vertices_per_primitive() const { // Use this function instead of prepare_now() to preload // datas from a user interface standpoint. //////////////////////////////////////////////////////////////////// -void qpGeomPrimitive:: +void GeomPrimitive:: prepare(PreparedGraphicsObjects *prepared_objects) { prepared_objects->enqueue_index_buffer(this); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::prepare_now +// Function: GeomPrimitive::prepare_now // Access: Public // Description: Creates a context for the data on the particular // GSG, if it does not already exist. Returns the new @@ -1025,7 +1026,7 @@ prepare(PreparedGraphicsObjects *prepared_objects) { // explicitly prepared by the user before it may be // rendered. //////////////////////////////////////////////////////////////////// -IndexBufferContext *qpGeomPrimitive:: +IndexBufferContext *GeomPrimitive:: prepare_now(PreparedGraphicsObjects *prepared_objects, GraphicsStateGuardianBase *gsg) { Contexts::const_iterator ci; @@ -1042,13 +1043,13 @@ prepare_now(PreparedGraphicsObjects *prepared_objects, } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::release +// Function: GeomPrimitive::release // Access: Public // Description: Frees the data context only on the indicated object, // if it exists there. Returns true if it was released, // false if it had not been prepared. //////////////////////////////////////////////////////////////////// -bool qpGeomPrimitive:: +bool GeomPrimitive:: release(PreparedGraphicsObjects *prepared_objects) { Contexts::iterator ci; ci = _contexts.find(prepared_objects); @@ -1063,13 +1064,13 @@ release(PreparedGraphicsObjects *prepared_objects) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::release_all +// Function: GeomPrimitive::release_all // Access: Public // Description: Frees the context allocated on all objects for which // the data has been declared. Returns the number of // contexts which have been freed. //////////////////////////////////////////////////////////////////// -int qpGeomPrimitive:: +int GeomPrimitive:: release_all() { // We have to traverse a copy of the _contexts list, because the // PreparedGraphicsObjects object will call clear_prepared() in response @@ -1093,7 +1094,7 @@ release_all() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::clear_prepared +// Function: GeomPrimitive::clear_prepared // Access: Private // Description: Removes the indicated PreparedGraphicsObjects table // from the data array's table, without actually @@ -1102,7 +1103,7 @@ release_all() { // PreparedGraphicsObjects::release_index_buffer(); it should // never be called by user code. //////////////////////////////////////////////////////////////////// -void qpGeomPrimitive:: +void GeomPrimitive:: clear_prepared(PreparedGraphicsObjects *prepared_objects) { Contexts::iterator ci; ci = _contexts.find(prepared_objects); @@ -1116,7 +1117,7 @@ clear_prepared(PreparedGraphicsObjects *prepared_objects) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::calc_tight_bounds +// Function: GeomPrimitive::calc_tight_bounds // Access: Public, Virtual // Description: Expands min_point and max_point to include all of the // vertices in the Geom, if any. found_any is set true @@ -1124,12 +1125,12 @@ clear_prepared(PreparedGraphicsObjects *prepared_objects) { // responsibility to initialize min_point, max_point, // and found_any before calling this function. //////////////////////////////////////////////////////////////////// -void qpGeomPrimitive:: +void GeomPrimitive:: calc_tight_bounds(LPoint3f &min_point, LPoint3f &max_point, bool &found_any, - const qpGeomVertexData *vertex_data, + const GeomVertexData *vertex_data, bool got_mat, const LMatrix4f &mat) const { - qpGeomVertexReader reader(vertex_data, InternalName::get_vertex()); + GeomVertexReader reader(vertex_data, InternalName::get_vertex()); if (!reader.has_column()) { // No vertex data. return; @@ -1137,7 +1138,7 @@ calc_tight_bounds(LPoint3f &min_point, LPoint3f &max_point, CDReader cdata(_cycler); - if (cdata->_vertices == (qpGeomVertexArrayData *)NULL) { + if (cdata->_vertices == (GeomVertexArrayData *)NULL) { // Nonindexed case. if (got_mat) { for (int i = 0; i < cdata->_num_vertices; i++) { @@ -1179,7 +1180,7 @@ calc_tight_bounds(LPoint3f &min_point, LPoint3f &max_point, } else { // Indexed case. - qpGeomVertexReader index(cdata->_vertices, 0); + GeomVertexReader index(cdata->_vertices, 0); if (got_mat) { while (!index.is_at_end()) { @@ -1222,7 +1223,7 @@ calc_tight_bounds(LPoint3f &min_point, LPoint3f &max_point, } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::decompose_impl +// Function: GeomPrimitive::decompose_impl // Access: Protected, Virtual // Description: Decomposes a complex primitive type into a simpler // primitive type, for instance triangle strips to @@ -1235,17 +1236,17 @@ calc_tight_bounds(LPoint3f &min_point, LPoint3f &max_point, // primitive without having to write handlers for each // possible kind of primitive type. //////////////////////////////////////////////////////////////////// -CPT(qpGeomPrimitive) qpGeomPrimitive:: +CPT(GeomPrimitive) GeomPrimitive:: decompose_impl() const { return this; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::rotate_impl +// Function: GeomPrimitive::rotate_impl // Access: Protected, Virtual // Description: The virtual implementation of rotate(). //////////////////////////////////////////////////////////////////// -CPT(qpGeomVertexArrayData) qpGeomPrimitive:: +CPT(GeomVertexArrayData) GeomPrimitive:: rotate_impl() const { // The default implementation doesn't even try to do anything. nassertr(false, NULL); @@ -1253,18 +1254,18 @@ rotate_impl() const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::requires_unused_vertices +// Function: GeomPrimitive::requires_unused_vertices // Access: Protected, Virtual // Description: Should be redefined to return true in any primitive // that implements append_unused_vertices(). //////////////////////////////////////////////////////////////////// -bool qpGeomPrimitive:: +bool GeomPrimitive:: requires_unused_vertices() const { return false; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::append_unused_vertices +// Function: GeomPrimitive::append_unused_vertices // Access: Protected, Virtual // Description: Called when a new primitive is begun (other than the // first primitive), this should add some degenerate @@ -1275,19 +1276,19 @@ requires_unused_vertices() const { // This method is only called if // requires_unused_vertices(), above, returns true. //////////////////////////////////////////////////////////////////// -void qpGeomPrimitive:: -append_unused_vertices(qpGeomVertexArrayData *, int) { +void GeomPrimitive:: +append_unused_vertices(GeomVertexArrayData *, int) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::recompute_minmax +// Function: GeomPrimitive::recompute_minmax // Access: Private // Description: Recomputes the _min_vertex and _max_vertex values if // necessary. //////////////////////////////////////////////////////////////////// -void qpGeomPrimitive:: -recompute_minmax(qpGeomPrimitive::CDWriter &cdata) { - if (cdata->_vertices == (qpGeomVertexArrayData *)NULL) { +void GeomPrimitive:: +recompute_minmax(GeomPrimitive::CDWriter &cdata) { + if (cdata->_vertices == (GeomVertexArrayData *)NULL) { // In the nonindexed case, we don't need to do much (the // minmax is trivial). cdata->_min_vertex = cdata->_first_vertex; @@ -1305,13 +1306,13 @@ recompute_minmax(qpGeomPrimitive::CDWriter &cdata) { } else if (get_num_vertices_per_primitive() == 0) { // This is a complex primitive type like a triangle strip; compute // the minmax of each primitive (as well as the overall minmax). - qpGeomVertexReader index(cdata->_vertices, 0); + GeomVertexReader index(cdata->_vertices, 0); cdata->_mins = make_index_data(); cdata->_maxs = make_index_data(); - qpGeomVertexWriter mins(cdata->_mins, 0); - qpGeomVertexWriter maxs(cdata->_maxs, 0); + GeomVertexWriter mins(cdata->_mins, 0); + GeomVertexWriter maxs(cdata->_maxs, 0); int pi = 0; int vi = 0; @@ -1349,7 +1350,7 @@ recompute_minmax(qpGeomPrimitive::CDWriter &cdata) { } else { // This is a simple primitive type like a triangle; just compute // the overall minmax. - qpGeomVertexReader index(cdata->_vertices, 0); + GeomVertexReader index(cdata->_vertices, 0); cdata->_mins.clear(); cdata->_maxs.clear(); @@ -1369,15 +1370,15 @@ recompute_minmax(qpGeomPrimitive::CDWriter &cdata) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::do_make_indexed +// Function: GeomPrimitive::do_make_indexed // Access: Private // Description: The private implementation of make_indexed(). //////////////////////////////////////////////////////////////////// -void qpGeomPrimitive:: -do_make_indexed(qpGeomPrimitive::CDWriter &cdata) { - if (cdata->_vertices == (qpGeomVertexArrayData *)NULL) { +void GeomPrimitive:: +do_make_indexed(GeomPrimitive::CDWriter &cdata) { + if (cdata->_vertices == (GeomVertexArrayData *)NULL) { cdata->_vertices = make_index_data(); - qpGeomVertexWriter index(cdata->_vertices, 0); + GeomVertexWriter index(cdata->_vertices, 0); for (int i = 0; i < cdata->_num_vertices; ++i) { index.add_data1i(i + cdata->_first_vertex); } @@ -1385,12 +1386,12 @@ do_make_indexed(qpGeomPrimitive::CDWriter &cdata) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::write_datagram +// Function: GeomPrimitive::write_datagram // Access: Public, Virtual // Description: Writes the contents of this object to the datagram // for shipping out to a Bam file. //////////////////////////////////////////////////////////////////// -void qpGeomPrimitive:: +void GeomPrimitive:: write_datagram(BamWriter *manager, Datagram &dg) { TypedWritable::write_datagram(manager, dg); @@ -1398,30 +1399,28 @@ write_datagram(BamWriter *manager, Datagram &dg) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::finalize +// Function: GeomPrimitive::finalize // Access: Public, Virtual // Description: Called by the BamReader to perform any final actions // needed for setting up the object after all objects // have been read and all pointers have been completed. //////////////////////////////////////////////////////////////////// -void qpGeomPrimitive:: +void GeomPrimitive:: finalize(BamReader *manager) { - if (manager->get_file_minor_ver() < 19) { - const qpGeomVertexArrayData *vertices = get_vertices(); - if (vertices != (qpGeomVertexArrayData *)NULL) { - set_usage_hint(vertices->get_usage_hint()); - } + const GeomVertexArrayData *vertices = get_vertices(); + if (vertices != (GeomVertexArrayData *)NULL) { + set_usage_hint(vertices->get_usage_hint()); } } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::fillin +// Function: GeomPrimitive::fillin // Access: Protected // Description: This internal function is called by make_from_bam to // read in all of the relevant data from the BamFile for -// the new qpGeomPrimitive. +// the new GeomPrimitive. //////////////////////////////////////////////////////////////////// -void qpGeomPrimitive:: +void GeomPrimitive:: fillin(DatagramIterator &scan, BamReader *manager) { TypedWritable::fillin(scan, manager); @@ -1430,22 +1429,22 @@ fillin(DatagramIterator &scan, BamReader *manager) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::CData::make_copy +// Function: GeomPrimitive::CData::make_copy // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -CycleData *qpGeomPrimitive::CData:: +CycleData *GeomPrimitive::CData:: make_copy() const { return new CData(*this); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::CData::write_datagram +// Function: GeomPrimitive::CData::write_datagram // Access: Public, Virtual // Description: Writes the contents of this object to the datagram // for shipping out to a Bam file. //////////////////////////////////////////////////////////////////// -void qpGeomPrimitive::CData:: +void GeomPrimitive::CData:: write_datagram(BamWriter *manager, Datagram &dg) const { dg.add_uint8(_shade_model); dg.add_uint32(_first_vertex); @@ -1458,43 +1457,39 @@ write_datagram(BamWriter *manager, Datagram &dg) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::CData::complete_pointers +// Function: GeomPrimitive::CData::complete_pointers // Access: Public, Virtual // Description: Receives an array of pointers, one for each time // manager->read_pointer() was called in fillin(). // Returns the number of pointers processed. //////////////////////////////////////////////////////////////////// -int qpGeomPrimitive::CData:: +int GeomPrimitive::CData:: complete_pointers(TypedWritable **p_list, BamReader *manager) { int pi = CycleData::complete_pointers(p_list, manager); - _vertices = DCAST(qpGeomVertexArrayData, p_list[pi++]); + _vertices = DCAST(GeomVertexArrayData, p_list[pi++]); return pi; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomPrimitive::CData::fillin +// Function: GeomPrimitive::CData::fillin // Access: Public, Virtual // Description: This internal function is called by make_from_bam to // read in all of the relevant data from the BamFile for -// the new qpGeomPrimitive. +// the new GeomPrimitive. //////////////////////////////////////////////////////////////////// -void qpGeomPrimitive::CData:: +void GeomPrimitive::CData:: fillin(DatagramIterator &scan, BamReader *manager) { _shade_model = (ShadeModel)scan.get_uint8(); - if (manager->get_file_minor_ver() >= 19) { - _first_vertex = scan.get_uint32(); - _num_vertices = scan.get_uint32(); - } + _first_vertex = scan.get_uint32(); + _num_vertices = scan.get_uint32(); _index_type = (NumericType)scan.get_uint8(); - if (manager->get_file_minor_ver() >= 19) { - _usage_hint = (UsageHint)scan.get_uint8(); - } + _usage_hint = (UsageHint)scan.get_uint8(); manager->read_pointer(scan); READ_PTA(manager, scan, IPD_int::read_datagram, _ends); - _modified = qpGeom::get_next_modified(); + _modified = Geom::get_next_modified(); _got_minmax = false; } diff --git a/panda/src/gobj/qpgeomPrimitive.h b/panda/src/gobj/geomPrimitive.h similarity index 80% rename from panda/src/gobj/qpgeomPrimitive.h rename to panda/src/gobj/geomPrimitive.h index 9d7f609609..f122eff191 100644 --- a/panda/src/gobj/qpgeomPrimitive.h +++ b/panda/src/gobj/geomPrimitive.h @@ -1,4 +1,4 @@ -// Filename: qpgeomPrimitive.h +// Filename: geomPrimitive.h // Created by: drose (06Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,12 +16,12 @@ // //////////////////////////////////////////////////////////////////// -#ifndef qpGEOMPRIMITIVE_H -#define qpGEOMPRIMITIVE_H +#ifndef GEOMPRIMITIVE_H +#define GEOMPRIMITIVE_H #include "pandabase.h" -#include "qpgeomEnums.h" -#include "qpgeomVertexArrayData.h" +#include "geomEnums.h" +#include "geomVertexArrayData.h" #include "typedWritableReferenceCount.h" #include "luse.h" #include "updateSeq.h" @@ -33,14 +33,14 @@ #include "cycleDataWriter.h" #include "pipelineCycler.h" -class qpGeomVertexData; +class GeomVertexData; class PreparedGraphicsObjects; class IndexBufferContext; class GraphicsStateGuardianBase; class FactoryParams; //////////////////////////////////////////////////////////////////// -// Class : qpGeomPrimitive +// Class : GeomPrimitive // Description : This is an abstract base class for a family of // classes that represent the fundamental geometry // primitives that may be stored in a Geom. @@ -59,19 +59,17 @@ class FactoryParams; // three consecutive vertices, while a GeomTriangleStrip // renders a strip of (n - 2) connected triangles from // each sequence of n vertices. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// -class EXPCL_PANDA qpGeomPrimitive : public TypedWritableReferenceCount, public qpGeomEnums { +class EXPCL_PANDA GeomPrimitive : public TypedWritableReferenceCount, public GeomEnums { protected: - qpGeomPrimitive(); + GeomPrimitive(); PUBLISHED: - qpGeomPrimitive(UsageHint usage_hint); - qpGeomPrimitive(const qpGeomPrimitive ©); - virtual ~qpGeomPrimitive(); + GeomPrimitive(UsageHint usage_hint); + GeomPrimitive(const GeomPrimitive ©); + virtual ~GeomPrimitive(); - virtual PT(qpGeomPrimitive) make_copy() const=0; + virtual PT(GeomPrimitive) make_copy() const=0; virtual PrimitiveType get_primitive_type() const=0; virtual int get_geom_rendering() const; @@ -103,8 +101,8 @@ PUBLISHED: bool close_primitive(); void clear_vertices(); void offset_vertices(int offset); - void make_nonindexed(qpGeomVertexData *dest, const qpGeomVertexData *source); - void pack_vertices(qpGeomVertexData *dest, const qpGeomVertexData *source); + void make_nonindexed(GeomVertexData *dest, const GeomVertexData *source); + void pack_vertices(GeomVertexData *dest, const GeomVertexData *source); void make_indexed(); int get_num_primitives() const; @@ -120,15 +118,15 @@ PUBLISHED: INLINE int get_max_vertex() const; int get_primitive_max_vertex(int n) const; - CPT(qpGeomPrimitive) decompose() const; - CPT(qpGeomPrimitive) rotate() const; - CPT(qpGeomPrimitive) match_shade_model(ShadeModel shade_model) const; + CPT(GeomPrimitive) decompose() const; + CPT(GeomPrimitive) rotate() const; + CPT(GeomPrimitive) match_shade_model(ShadeModel shade_model) const; int get_num_bytes() const; INLINE int get_data_size_bytes() const; INLINE UpdateSeq get_modified() const; - bool check_valid(const qpGeomVertexData *vertex_data) const; + bool check_valid(const GeomVertexData *vertex_data) const; virtual void output(ostream &out) const; virtual void write(ostream &out, int indent_level) const; @@ -144,9 +142,9 @@ public: // recommended that application-level code use the above interfaces // instead. - INLINE const qpGeomVertexArrayData *get_vertices() const; - qpGeomVertexArrayData *modify_vertices(); - void set_vertices(const qpGeomVertexArrayData *vertices); + INLINE const GeomVertexArrayData *get_vertices() const; + GeomVertexArrayData *modify_vertices(); + void set_vertices(const GeomVertexArrayData *vertices); void set_nonindexed_vertices(int first_vertex, int num_vertices); INLINE int get_index_stride() const; @@ -156,8 +154,8 @@ public: PTA_int modify_ends(); void set_ends(CPTA_int ends); - INLINE const qpGeomVertexArrayData *get_mins() const; - INLINE const qpGeomVertexArrayData *get_maxs() const; + INLINE const GeomVertexArrayData *get_mins() const; + INLINE const GeomVertexArrayData *get_maxs() const; virtual int get_num_vertices_per_primitive() const; virtual int get_min_num_vertices_per_primitive() const; @@ -172,8 +170,8 @@ public: int release_all(); protected: - INLINE CPT(qpGeomVertexArrayFormat) get_index_format() const; - INLINE PT(qpGeomVertexArrayData) make_index_data() const; + INLINE CPT(GeomVertexArrayFormat) get_index_format() const; + INLINE PT(GeomVertexArrayData) make_index_data() const; private: void clear_prepared(PreparedGraphicsObjects *prepared_objects); @@ -183,14 +181,14 @@ public: void calc_tight_bounds(LPoint3f &min_point, LPoint3f &max_point, bool &found_any, - const qpGeomVertexData *vertex_data, + const GeomVertexData *vertex_data, bool got_mat, const LMatrix4f &mat) const; protected: - virtual CPT(qpGeomPrimitive) decompose_impl() const; - virtual CPT(qpGeomVertexArrayData) rotate_impl() const; + virtual CPT(GeomPrimitive) decompose_impl() const; + virtual CPT(GeomVertexArrayData) rotate_impl() const; virtual bool requires_unused_vertices() const; - virtual void append_unused_vertices(qpGeomVertexArrayData *vertices, + virtual void append_unused_vertices(GeomVertexArrayData *vertices, int vertex); private: @@ -217,10 +215,10 @@ private: int _num_vertices; NumericType _index_type; UsageHint _usage_hint; - PT(qpGeomVertexArrayData) _vertices; + PT(GeomVertexArrayData) _vertices; PTA_int _ends; - PT(qpGeomVertexArrayData) _mins; - PT(qpGeomVertexArrayData) _maxs; + PT(GeomVertexArrayData) _mins; + PT(GeomVertexArrayData) _maxs; UpdateSeq _modified; bool _got_minmax; @@ -252,7 +250,7 @@ public: } static void init_type() { TypedWritableReferenceCount::init_type(); - register_type(_type_handle, "qpGeomPrimitive", + register_type(_type_handle, "GeomPrimitive", TypedWritableReferenceCount::get_class_type()); } virtual TypeHandle get_type() const { @@ -263,12 +261,12 @@ public: private: static TypeHandle _type_handle; - friend class qpGeom; + friend class Geom; friend class PreparedGraphicsObjects; }; -INLINE ostream &operator << (ostream &out, const qpGeomPrimitive &obj); +INLINE ostream &operator << (ostream &out, const GeomPrimitive &obj); -#include "qpgeomPrimitive.I" +#include "geomPrimitive.I" #endif diff --git a/panda/src/gobj/geomQuad.cxx b/panda/src/gobj/geomQuad.cxx deleted file mode 100644 index 9445070f9e..0000000000 --- a/panda/src/gobj/geomQuad.cxx +++ /dev/null @@ -1,141 +0,0 @@ -// Filename: geomQuad.cxx -// Created by: charles (13Jul00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "datagram.h" -#include "datagramIterator.h" -#include "bamReader.h" -#include "bamWriter.h" -#include "ioPtaDatagramShort.h" -#include "ioPtaDatagramInt.h" -#include "ioPtaDatagramLinMath.h" -#include "graphicsStateGuardianBase.h" - -#include "geomTri.h" -#include "geomQuad.h" - -TypeHandle GeomQuad::_type_handle; - -//////////////////////////////////////////////////////////////////// -// Function: GeomQuad::make_copy -// Access: Public, Virtual -// Description: Returns a newly-allocated Geom that is a shallow copy -// of this one. It will be a different Geom pointer, -// but its internal data may or may not be shared with -// that of the original Geom. -//////////////////////////////////////////////////////////////////// -Geom *GeomQuad:: -make_copy() const { - return new GeomQuad(*this); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomQuad::print_draw_immediate -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -void GeomQuad:: -print_draw_immediate(void) const { -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomQuad::draw_immediate -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -void GeomQuad:: -draw_immediate(GraphicsStateGuardianBase *gsg, GeomContext *gc) { - gsg->draw_quad(this, gc); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomQuad::get_tris -// Access: Public, Virtual -// Description: This is similar in principle to explode(), except it -// returns only a list of triangle vertex indices, with -// no information about color or whatever. The array -// returned is a set of indices into the geom's _coords -// array, as retrieve by get_coords(); there will be 3*n -// elements in the array, where n is the number of -// triangles described by the geometry. This is useful -// when it's important to determine the physical -// structure of the geometry, without necessarily -// worrying about its rendering properties, and when -// performance considerations are not overwhelming. -//////////////////////////////////////////////////////////////////// -PTA_ushort GeomQuad:: -get_tris() const { - int num_tris = _numprims * 2; - PTA_ushort tris; - tris.reserve(num_tris * 3); - - int k = 0; - - for (int i = 0; i < _numprims; i++) { - ushort indices[4]; - if (_vindex.empty()) { - for (int j = 0; j < 4; j++) { - indices[j] = k++; - } - } else { - for (int j = 0; j < 4; j++) { - indices[j] = _vindex[k++]; - } - } - - // First tri. Vertices 0, 1, 2. - tris.push_back(indices[0]); - tris.push_back(indices[1]); - tris.push_back(indices[2]); - - // Second tri. Vertices 0, 2, 3. - tris.push_back(indices[0]); - tris.push_back(indices[2]); - tris.push_back(indices[3]); - } - - nassertr((int)tris.size() == num_tris * 3, PTA_ushort()); - return tris; -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomQuad::make_GeomQuad -// Access: Protected -// Description: Factory method to generate a GeomQuad object -//////////////////////////////////////////////////////////////////// -TypedWritable* GeomQuad:: -make_GeomQuad(const FactoryParams ¶ms) { - GeomQuad *me = new GeomQuad; - DatagramIterator scan; - BamReader *manager; - - parse_params(params, scan, manager); - me->fillin(scan, manager); - me->make_dirty(); - me->config(); - return me; -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomQuad::register_with_factory -// Access: Public, Static -// Description: Factory method to generate a GeomQuad object -//////////////////////////////////////////////////////////////////// -void GeomQuad:: -register_with_read_factory(void) { - BamReader::get_factory()->register_factory(get_class_type(), make_GeomQuad); -} diff --git a/panda/src/gobj/geomQuad.h b/panda/src/gobj/geomQuad.h deleted file mode 100644 index 0d059a9354..0000000000 --- a/panda/src/gobj/geomQuad.h +++ /dev/null @@ -1,74 +0,0 @@ -// Filename: geomQuad.h -// Created by: charles (13Jul00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef GEOMQUAD_H -#define GEOMQUAD_H - -#include "geom.h" - -//////////////////////////////////////////////////////////////////// -// Class : GeomQuad -// Description : Quadrilateral Primitive -//////////////////////////////////////////////////////////////////// -class EXPCL_PANDA GeomQuad : public Geom { -public: - GeomQuad() { } - virtual Geom *make_copy() const; - virtual void print_draw_immediate() const; - virtual void draw_immediate(GraphicsStateGuardianBase *gsg, GeomContext *gc); - - virtual int get_num_vertices_per_prim() const { - return 4; - } - virtual int get_num_more_vertices_than_components() const { - return 0; - } - virtual bool uses_components() const { - return false; - } - - virtual int get_length(int) const { - return 4; - } - - virtual PTA_ushort get_tris() const; - -public: - static void register_with_read_factory(void); - static TypedWritable *make_GeomQuad(const FactoryParams ¶ms); - -PUBLISHED: - static TypeHandle get_class_type() { - return _type_handle; - } -public: - static void init_type() { - Geom::init_type(); - register_type(_type_handle, "GeomQuad", - Geom::get_class_type()); - } - virtual TypeHandle get_type() const { - return get_class_type(); - } - virtual TypeHandle force_init_type() {init_type(); return get_class_type();} - -private: - static TypeHandle _type_handle; -}; - -#endif // GEOMQUAD_H diff --git a/panda/src/gobj/geomSphere.cxx b/panda/src/gobj/geomSphere.cxx deleted file mode 100644 index 8df01309ed..0000000000 --- a/panda/src/gobj/geomSphere.cxx +++ /dev/null @@ -1,79 +0,0 @@ -// Filename: geomSphere.cxx -// Created by: drose (01Oct99) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "geomSphere.h" -#include "graphicsStateGuardianBase.h" -#include "datagram.h" -#include "datagramIterator.h" -#include "bamReader.h" -#include "bamWriter.h" - -TypeHandle GeomSphere::_type_handle; - - -//////////////////////////////////////////////////////////////////// -// Function: GeomSphere::make_copy -// Access: Public, Virtual -// Description: Returns a newly-allocated Geom that is a shallow copy -// of this one. It will be a different Geom pointer, -// but its internal data may or may not be shared with -// that of the original Geom. -//////////////////////////////////////////////////////////////////// -Geom *GeomSphere:: -make_copy() const { - return new GeomSphere(*this); -} - -void GeomSphere:: -draw_immediate(GraphicsStateGuardianBase *gsg, GeomContext *gc) { - gsg->draw_sphere(this, gc); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomSphere::make_GeomSphere -// Access: Protected -// Description: Factory method to generate a GeomSphere object -//////////////////////////////////////////////////////////////////// -TypedWritable* GeomSphere:: -make_GeomSphere(const FactoryParams ¶ms) -{ - GeomSphere *me = new GeomSphere; - DatagramIterator scan; - BamReader *manager; - - parse_params(params, scan, manager); - me->fillin(scan, manager); - me->make_dirty(); - me->config(); - return me; -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomSphere::register_with_factory -// Access: Public, Static -// Description: Factory method to generate a GeomSphere object -//////////////////////////////////////////////////////////////////// -void GeomSphere:: -register_with_read_factory(void) -{ - BamReader::get_factory()->register_factory(get_class_type(), make_GeomSphere); -} - - - - diff --git a/panda/src/gobj/geomSphere.h b/panda/src/gobj/geomSphere.h deleted file mode 100644 index 60a689b71b..0000000000 --- a/panda/src/gobj/geomSphere.h +++ /dev/null @@ -1,89 +0,0 @@ -// Filename: geomSphere.h -// Created by: drose (01Oct99) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef GEOMSPHERE_H -#define GEOMSPHERE_H - -#include "pandabase.h" - -#include "geom.h" - -//////////////////////////////////////////////////////////////////// -// Class : GeomSphere -// Description : A sphere primitive. This isn't actually a primitive -// under OpenGL (or probably most backends), but it's -// handy to be able to render a sphere from time to -// time, and it may be a primitive on some backends. -// This will render the best way the backend knows how -// to render a sphere. -// -// This structure contains a sequence of spheres. Each -// two consecutive vertices defines a sphere, where the -// first vertex represents the center, and the second -// vertex represents a point on the surface. -//////////////////////////////////////////////////////////////////// -class EXPCL_PANDA GeomSphere : public Geom { -public: - GeomSphere() : Geom() { } - virtual Geom *make_copy() const; - virtual void print_draw_immediate() const { } - virtual void draw_immediate(GraphicsStateGuardianBase *gsg, GeomContext *gc); - - virtual int get_num_vertices_per_prim() const { - return 2; - } - virtual int get_num_more_vertices_than_components() const { - return 0; - } - virtual bool uses_components() const { - return false; - } - - virtual int get_length(int) const { - return 2; - } - - virtual Geom *explode() const { - return new GeomSphere(*this); - } - -public: - static void register_with_read_factory(void); - - static TypedWritable *make_GeomSphere(const FactoryParams ¶ms); - -PUBLISHED: - static TypeHandle get_class_type() { - return _type_handle; - } -public: - static void init_type() { - Geom::init_type(); - register_type(_type_handle, "GeomSphere", - Geom::get_class_type()); - } - virtual TypeHandle get_type() const { - return get_class_type(); - } - virtual TypeHandle force_init_type() {init_type(); return get_class_type();} - -private: - static TypeHandle _type_handle; -}; - -#endif diff --git a/panda/src/gobj/geomSprite.I b/panda/src/gobj/geomSprite.I deleted file mode 100644 index 8753c5e4ff..0000000000 --- a/panda/src/gobj/geomSprite.I +++ /dev/null @@ -1,168 +0,0 @@ -// Filename: geomSprite.I -// Created by: charles (18Jul00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////// -// Function : GeomSprite::set_texture -// Access : public -// Description : -//////////////////////////////////////////////////////////////////// -INLINE void GeomSprite:: -set_texture(Texture *tex) { - _texture = tex; -} - -//////////////////////////////////////////////////////////////////// -// Function : GeomSprite::set_ll_uv -// Access : public -// Description : Sets the UV coordinate of the lower-left corner of -// all the sprites within this GeomSprite object. -// Normally this is (0, 0), but it might be set to -// something else to use only a portion of the texture. -//////////////////////////////////////////////////////////////////// -INLINE void GeomSprite:: -set_ll_uv(const TexCoordf &ll_uv) { - _ll_uv = ll_uv; -} - -//////////////////////////////////////////////////////////////////// -// Function : GeomSprite::get_ll_uv -// Access : public -// Description : Returns the UV coordinate of the lower-left corner; -// see set_ll_uv(). -//////////////////////////////////////////////////////////////////// -INLINE const TexCoordf &GeomSprite:: -get_ll_uv() const { - return _ll_uv; -} - -//////////////////////////////////////////////////////////////////// -// Function : GeomSprite::set_ur_uv -// Access : public -// Description : Sets the UV coordinate of the upper-right corner of -// all the sprites within this GeomSprite object. -// Normally this is (1, 1), but it might be set to -// something else to use only a portion of the texture. -//////////////////////////////////////////////////////////////////// -INLINE void GeomSprite:: -set_ur_uv(const TexCoordf &ur_uv) { - _ur_uv = ur_uv; -} - -//////////////////////////////////////////////////////////////////// -// Function : GeomSprite::get_ur_uv -// Access : public -// Description : Returns the UV coordinate of the upper-right corner; -// see set_ur_uv(). -//////////////////////////////////////////////////////////////////// -INLINE const TexCoordf &GeomSprite:: -get_ur_uv() const { - return _ur_uv; -} - -//////////////////////////////////////////////////////////////////// -// Function : GeomSprite::get_texture -// Access : public -// Description : -//////////////////////////////////////////////////////////////////// -INLINE Texture *GeomSprite:: -get_texture(void) const { - return _texture; -} - -//////////////////////////////////////////////////////////////////// -// Function : GeomSprite::set_alpha_disable -// Access : public -// Description : -//////////////////////////////////////////////////////////////////// -INLINE void GeomSprite:: -set_alpha_disable(bool a) { - _alpha_disable = a; -} - -//////////////////////////////////////////////////////////////////// -// Function : GeomSprite::get_alpha_disable -// Access : public -// Description : -//////////////////////////////////////////////////////////////////// -INLINE bool GeomSprite:: -get_alpha_disable(void) const { - return _alpha_disable; -} - -//////////////////////////////////////////////////////////////////// -// Function : GeomSprite::set_x_texel_ratio -// Access : public -// Description : -//////////////////////////////////////////////////////////////////// -INLINE void GeomSprite:: -set_x_texel_ratio(PTA_float x_texel_ratio, GeomBindType x_bind_type) { - _x_texel_ratio = x_texel_ratio; - _x_bind_type = x_bind_type; -} - -//////////////////////////////////////////////////////////////////// -// Function : GeomSprite::set_y_texel_ratio -// Access : public -// Description : -//////////////////////////////////////////////////////////////////// -INLINE void GeomSprite:: -set_y_texel_ratio(PTA_float y_texel_ratio, GeomBindType y_bind_type) { - _y_texel_ratio = y_texel_ratio; - _y_bind_type = y_bind_type; -} - -//////////////////////////////////////////////////////////////////// -// Function : GeomSprite::set_thetas -// Access : public -// Description : -//////////////////////////////////////////////////////////////////// -INLINE void GeomSprite:: -set_thetas(PTA_float theta, GeomBindType theta_bind_type) { - _theta = theta; - _theta_bind_type = theta_bind_type; -} - -//////////////////////////////////////////////////////////////////// -// Function : GeomSprite::get_x_bind_type -// Access : public -// Description : -//////////////////////////////////////////////////////////////////// -INLINE GeomBindType GeomSprite:: -get_x_bind_type(void) const { - return _x_bind_type; -} - -//////////////////////////////////////////////////////////////////// -// Function : GeomSprite::get_y_bind_type -// Access : public -// Description : -//////////////////////////////////////////////////////////////////// -INLINE GeomBindType GeomSprite:: -get_y_bind_type(void) const { - return _y_bind_type; -} - -//////////////////////////////////////////////////////////////////// -// Function : GeomSprite::get_theta_bind_type -// Access : public -// Description : -//////////////////////////////////////////////////////////////////// -INLINE GeomBindType GeomSprite:: -get_theta_bind_type(void) const { - return _theta_bind_type; -} diff --git a/panda/src/gobj/geomSprite.cxx b/panda/src/gobj/geomSprite.cxx deleted file mode 100644 index a0fddd1fcb..0000000000 --- a/panda/src/gobj/geomSprite.cxx +++ /dev/null @@ -1,175 +0,0 @@ -// Filename: geomSprite.cxx -// Created by: charles (13Jul00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "datagram.h" -#include "datagramIterator.h" -#include "bamReader.h" -#include "bamWriter.h" -#include "ioPtaDatagramShort.h" -#include "ioPtaDatagramInt.h" -#include "ioPtaDatagramFloat.h" -#include "ioPtaDatagramLinMath.h" -#include "graphicsStateGuardianBase.h" - -#include "geomSprite.h" - -TypeHandle GeomSprite::_type_handle; - -//////////////////////////////////////////////////////////////////// -// Function: GeomSprite -// Access: public -// Description: constructor -//////////////////////////////////////////////////////////////////// -GeomSprite:: -GeomSprite(Texture *tex, bool alpha_disable) : - _texture(tex), _alpha_disable(alpha_disable) -{ - _ll_uv.set(0.0f, 0.0f); - _ur_uv.set(1.0f, 1.0f); - _x_texel_ratio.clear(); - _y_texel_ratio.clear(); - - _theta_bind_type = G_OFF; - // note that the other bind types are intentionally left - // uninitialized; the arrays themselves can not be set without a - // bind type. -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomSprite::make_copy -// Access: Public, Virtual -// Description: Returns a newly-allocated Geom that is a shallow copy -// of this one. It will be a different Geom pointer, -// but its internal data may or may not be shared with -// that of the original Geom. -//////////////////////////////////////////////////////////////////// -Geom *GeomSprite:: -make_copy() const { - return new GeomSprite(*this); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomSprite::print_draw_immediate -// Access: -// Description: -//////////////////////////////////////////////////////////////////// -void GeomSprite:: -print_draw_immediate(void) const { -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomSprite::draw_immediate -// Access: -// Description: -//////////////////////////////////////////////////////////////////// -void GeomSprite:: -draw_immediate(GraphicsStateGuardianBase *gsg, GeomContext *gc) { - gsg->draw_sprite(this, gc); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomSprite::is_dynamic -// Access: Public, Virtual -// Description: Returns true if the Geom has any dynamic properties -// that are expected to change from one frame to the -// next, or false if the Geom is largely static. For -// now, this is the same thing as asking whether its -// vertices are indexed. -//////////////////////////////////////////////////////////////////// -bool GeomSprite:: -is_dynamic() const { - // Sprites are always dynamic. - return true; -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomSprite::write_datagram -// Access: Public -// Description: Function to write the important information in -// the particular object to a Datagram -//////////////////////////////////////////////////////////////////// -void GeomSprite:: -write_datagram(BamWriter *manager, Datagram &me) { - Geom::write_datagram(manager, me); - WRITE_PTA(manager, me, IPD_float::write_datagram, _x_texel_ratio); - WRITE_PTA(manager, me, IPD_float::write_datagram, _y_texel_ratio); - me.add_uint8(_x_bind_type); - me.add_uint8(_y_bind_type); - me.add_uint8(_alpha_disable); - manager->write_pointer(me, _texture); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomSprite::make_GeomSprite -// Access: Protected -// Description: Factory method to generate a GeomSprite object -//////////////////////////////////////////////////////////////////// -TypedWritable* GeomSprite:: -make_GeomSprite(const FactoryParams ¶ms) { - GeomSprite *me = new GeomSprite; - DatagramIterator scan; - BamReader *manager; - - parse_params(params, scan, manager); - me->fillin(scan, manager); - me->make_dirty(); - me->config(); - return me; -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomSprite::fillin -// Access: Protected -// Description: Function that reads out of the datagram (or asks -// manager to read) all of the data that is needed to -// re-create this object and stores it in the appropiate -// place -//////////////////////////////////////////////////////////////////// -void GeomSprite:: -fillin(DatagramIterator& scan, BamReader* manager) { - Geom::fillin(scan, manager); - READ_PTA(manager, scan, IPD_float::read_datagram, _x_texel_ratio); - READ_PTA(manager, scan, IPD_float::read_datagram, _y_texel_ratio); - _x_bind_type = (GeomBindType) scan.get_uint8(); - _y_bind_type = (GeomBindType) scan.get_uint8(); - _alpha_disable = (scan.get_uint8() !=0); - manager->read_pointer(scan); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomSprite::register_with_factory -// Access: Public, Static -// Description: Factory method to generate a GeomSprite object -//////////////////////////////////////////////////////////////////// -void GeomSprite:: -register_with_read_factory(void) { - BamReader::get_factory()->register_factory(get_class_type(), make_GeomSprite); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomSprite::complete_pointers -// Access: Public, Static -// Description: -//////////////////////////////////////////////////////////////////// -int GeomSprite:: -complete_pointers(TypedWritable **p_list, BamReader *manager) { - int index = Geom::complete_pointers(p_list, manager); - _texture = DCAST(Texture, p_list[index]); - - return index + 1; -} diff --git a/panda/src/gobj/geomSprite.h b/panda/src/gobj/geomSprite.h deleted file mode 100644 index 79f5b29d75..0000000000 --- a/panda/src/gobj/geomSprite.h +++ /dev/null @@ -1,121 +0,0 @@ -// Filename: geomSprite.h -// Created by: charles (13Jul00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef GEOMSPRITE_H -#define GEOMSPRITE_H - -#include "pta_float.h" -#include "geom.h" -#include "texture.h" - -//////////////////////////////////////////////////////////////////// -// Class : GeomSprite -// Description : Sprite Primitive -//////////////////////////////////////////////////////////////////// -class EXPCL_PANDA GeomSprite : public Geom { -public: - GeomSprite(Texture *tex = (Texture *) NULL, - bool alpha_disable = false); - - virtual Geom *make_copy() const; - virtual void print_draw_immediate() const; - virtual void draw_immediate(GraphicsStateGuardianBase *gsg, GeomContext *gc); - - virtual int get_num_vertices_per_prim() const { return 1; } - virtual int get_num_more_vertices_than_components() const { return 0; } - virtual bool uses_components() const { return false; } - virtual int get_length(int) const { return 1; } - - virtual Geom *explode() const { - return new GeomSprite(*this); } - - virtual bool is_dynamic() const; - - static float get_frustum_top() { return 1.0f; } - static float get_frustum_bottom() { return -1.0f; } - static float get_frustum_left() { return -1.0f; } - static float get_frustum_right() { return 1.0f; } - - INLINE void set_texture(Texture *tex); - INLINE Texture *get_texture() const; - - INLINE void set_ll_uv(const TexCoordf &ll_uv); - INLINE const TexCoordf &get_ll_uv() const; - - INLINE void set_ur_uv(const TexCoordf &ur_uv); - INLINE const TexCoordf &get_ur_uv() const; - - INLINE void set_alpha_disable(bool a); - INLINE bool get_alpha_disable() const; - - INLINE void set_x_texel_ratio(PTA_float x_texel_ratio, GeomBindType x_bind_type); - INLINE void set_y_texel_ratio(PTA_float y_texel_ratio, GeomBindType y_bind_type); - INLINE void set_thetas(PTA_float theta, GeomBindType theta_bind_type); - - INLINE GeomBindType get_x_bind_type() const; - INLINE GeomBindType get_y_bind_type() const; - INLINE GeomBindType get_theta_bind_type() const; - - // public so we don't have to issue them... - PTA_float _x_texel_ratio; - PTA_float _y_texel_ratio; - PTA_float _theta; - -protected: - PT(Texture) _texture; - TexCoordf _ll_uv; - TexCoordf _ur_uv; - - bool _alpha_disable; - - GeomBindType _x_bind_type; - GeomBindType _y_bind_type; - GeomBindType _theta_bind_type; - -public: - static void register_with_read_factory(); - virtual void write_datagram(BamWriter *manager, Datagram &me); - - int complete_pointers(TypedWritable **plist, BamReader *manager); - static TypedWritable *make_GeomSprite(const FactoryParams ¶ms); - -protected: - void fillin(DatagramIterator &scan, BamReader *manager); - -PUBLISHED: - static TypeHandle get_class_type() { - return _type_handle; - } -public: - static void init_type() { - Geom::init_type(); - register_type(_type_handle, "GeomSprite", - Geom::get_class_type()); - } - virtual TypeHandle get_type() const { - return get_class_type(); - } - virtual TypeHandle force_init_type() {init_type(); return get_class_type();} - -private: - static TypeHandle _type_handle; -}; - -#include "geomSprite.I" - -#endif // GEOMSPRITE_H diff --git a/panda/src/gobj/geomTri.cxx b/panda/src/gobj/geomTri.cxx deleted file mode 100644 index 7c33489839..0000000000 --- a/panda/src/gobj/geomTri.cxx +++ /dev/null @@ -1,255 +0,0 @@ -// Filename: geomTri.cxx -// Created by: charles (13Jul00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "datagram.h" -#include "datagramIterator.h" -#include "bamReader.h" -#include "bamWriter.h" -#include "ioPtaDatagramShort.h" -#include "ioPtaDatagramInt.h" -#include "ioPtaDatagramLinMath.h" -#include "graphicsStateGuardianBase.h" - -#include "geomTri.h" - -TypeHandle GeomTri::_type_handle; - -//////////////////////////////////////////////////////////////////// -// Function: GeomTri::make_copy -// Access: Public, Virtual -// Description: Returns a newly-allocated Geom that is a shallow copy -// of this one. It will be a different Geom pointer, -// but its internal data may or may not be shared with -// that of the original Geom. -//////////////////////////////////////////////////////////////////// -Geom *GeomTri:: -make_copy() const { - return new GeomTri(*this); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomTri::print_draw_immediate -// Access: -// Description: -//////////////////////////////////////////////////////////////////// -void GeomTri:: -print_draw_immediate(void) const -{ - /* - int i; - int j; - int nprims = _numprims; - Vertexf* tcoords = _coords; - Normalf* tnorms = _norms; - Colorf* tcolors = _colors; - TexCoordf* ttexcoords = _texcoords; - ushort* tvindex = _vindex; - ushort* tnindex = _nindex; - ushort* tcindex = _cindex; - ushort* ttindex = _tindex; - - // Draw overall - if ( _color_command[G_OVERALL] != _issue_color_noop ) - { - nout << "Color (Overall): "; - if ( tcindex ) - { - nout << "idx: " << *tcindex << " "; - nout << tcolors[*(tcindex++)]; - } - else - nout << *(tcolors++); - nout << endl; - } - if ( _normal_command[G_OVERALL] != _issue_normal_noop ) - { - nout << "Normal (Overall): "; - if ( tnindex ) - { - nout << "idx: " << *tnindex << " "; - nout << tnorms[*(tnindex++)]; - } - else - nout << *(tnorms++); - nout << endl; - } - - nout << "BeginGfx()" << endl; - - for ( i = nprims; i > 0; i-- ) - { - // Draw per primitive - if ( _color_command[G_PER_PRIM] != _issue_color_noop ) - { - nout << "Color (Per Prim): "; - if ( tcindex ) - { - nout << "idx: " << *tcindex << " "; - nout << tcolors[*(tcindex++)]; - } - else - nout << *(tcolors++); - nout << endl; - } - if ( _normal_command[G_PER_PRIM] != _issue_normal_noop ) - { - nout << "Normal (Per Prim): "; - if ( tnindex ) - { - nout << "idx: " << *tnindex << " "; - nout << tnorms[*(tnindex++)]; - } - else - nout << *(tnorms++); - nout << endl; - } - - for ( j = 0; j < 3; j++ ) - { - // Draw per vertex - if ( _color_command[G_PER_VERTEX] != _issue_color_noop ) - { - nout << "Color (Per Vertex): "; - if ( tcindex ) - { - nout << "idx: " << *tcindex << " "; - nout << tcolors[*(tcindex++)]; - } - else - nout << *(tcolors++); - nout << endl; - } - if ( _normal_command[G_PER_VERTEX] != _issue_normal_noop ) - { - nout << "Normal (Per Vertex): "; - if ( tnindex ) - { - nout << "idx: " << *tnindex << " "; - nout << tnorms[*(tnindex++)]; - } - else - nout << *(tnorms++); - nout << endl; - } - if ( _texcoord_command[G_PER_VERTEX] != _issue_texcoord_noop ) - { - nout << "TexCoord (Per Vertex): "; - if ( ttindex ) - { - nout << "idx: " << *ttindex << " "; - nout << ttexcoords[*(ttindex++)]; - } - else - nout << *(ttexcoords++); - nout << endl; - } - if ( _vertex_command[G_PER_VERTEX] != _issue_vertex_noop ) - { - nout << "Vertex (Per Vertex): "; - if ( tvindex ) - { - nout << "idx: " << *tvindex << " "; - nout << tcoords[*(tvindex++)]; - } - else - nout << *(tcoords++); - nout << endl; - } - } - } - - nout << "EndGfx()" << endl; - */ -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomTri::draw_immediate -// Access: -// Description: -//////////////////////////////////////////////////////////////////// -void GeomTri:: -draw_immediate(GraphicsStateGuardianBase *gsg, GeomContext *gc) { - gsg->draw_tri(this, gc); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomTri::get_tris -// Access: Public, Virtual -// Description: This is similar in principle to explode(), except it -// returns only a list of triangle vertex indices, with -// no information about color or whatever. The array -// returned is a set of indices into the geom's _coords -// array, as retrieve by get_coords(); there will be 3*n -// elements in the array, where n is the number of -// triangles described by the geometry. This is useful -// when it's important to determine the physical -// structure of the geometry, without necessarily -// worrying about its rendering properties, and when -// performance considerations are not overwhelming. -//////////////////////////////////////////////////////////////////// -PTA_ushort GeomTri:: -get_tris() const { - int num_tris = _numprims; - PTA_ushort tris; - tris.reserve(num_tris * 3); - - int k = 0; - - for (int i = 0; i < _numprims; i++) { - if (_vindex.empty()) { - for (int j = 0; j < 3; j++) { - tris.push_back(k++); - } - } else { - for (int j = 0; j < 3; j++) { - tris.push_back(_vindex[k++]); - } - } - } - - nassertr((int)tris.size() == num_tris * 3, PTA_ushort()); - return tris; -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomTri::make_GeomTri -// Access: Protected -// Description: Factory method to generate a GeomTri object -//////////////////////////////////////////////////////////////////// -TypedWritable* GeomTri:: -make_GeomTri(const FactoryParams ¶ms) { - GeomTri *me = new GeomTri; - DatagramIterator scan; - BamReader *manager; - - parse_params(params, scan, manager); - me->fillin(scan, manager); - me->make_dirty(); - me->config(); - return me; -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomTri::register_with_factory -// Access: Public, Static -// Description: Factory method to generate a GeomTri object -//////////////////////////////////////////////////////////////////// -void GeomTri:: -register_with_read_factory(void) { - BamReader::get_factory()->register_factory(get_class_type(), make_GeomTri); -} diff --git a/panda/src/gobj/geomTri.h b/panda/src/gobj/geomTri.h deleted file mode 100644 index 74b3150c59..0000000000 --- a/panda/src/gobj/geomTri.h +++ /dev/null @@ -1,74 +0,0 @@ -// Filename: geomTri.h -// Created by: charles (13Jul00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef GEOMTRI_H -#define GEOMTRI_H - -#include "geom.h" - -//////////////////////////////////////////////////////////////////// -// Class : GeomTri -// Description : Triangle Primitive -//////////////////////////////////////////////////////////////////// -class EXPCL_PANDA GeomTri : public Geom { -public: - GeomTri() { } - virtual Geom *make_copy() const; - virtual void print_draw_immediate() const; - virtual void draw_immediate(GraphicsStateGuardianBase *gsg, GeomContext *gc); - - virtual int get_num_vertices_per_prim() const { - return 3; - } - virtual int get_num_more_vertices_than_components() const { - return 0; - } - virtual bool uses_components() const { - return false; - } - - virtual int get_length(int) const { - return 3; - } - - virtual PTA_ushort get_tris() const; - -public: - static void register_with_read_factory(void); - static TypedWritable *make_GeomTri(const FactoryParams ¶ms); - -PUBLISHED: - static TypeHandle get_class_type() { - return _type_handle; - } -public: - static void init_type() { - Geom::init_type(); - register_type(_type_handle, "GeomTri", - Geom::get_class_type()); - } - virtual TypeHandle get_type() const { - return get_class_type(); - } - virtual TypeHandle force_init_type() {init_type(); return get_class_type();} - -private: - static TypeHandle _type_handle; -}; - -#endif // GEOMTRI_H diff --git a/panda/src/gobj/qpgeomTriangles.cxx b/panda/src/gobj/geomTriangles.cxx similarity index 80% rename from panda/src/gobj/qpgeomTriangles.cxx rename to panda/src/gobj/geomTriangles.cxx index 0f679443a3..441554bc4e 100644 --- a/panda/src/gobj/qpgeomTriangles.cxx +++ b/panda/src/gobj/geomTriangles.cxx @@ -1,4 +1,4 @@ -// Filename: qpgeomTriangles.cxx +// Filename: geomTriangles.cxx // Created by: drose (06Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,57 +16,57 @@ // //////////////////////////////////////////////////////////////////// -#include "qpgeomTriangles.h" -#include "qpgeomVertexRewriter.h" +#include "geomTriangles.h" +#include "geomVertexRewriter.h" #include "pStatTimer.h" #include "bamReader.h" #include "bamWriter.h" -TypeHandle qpGeomTriangles::_type_handle; +TypeHandle GeomTriangles::_type_handle; //////////////////////////////////////////////////////////////////// -// Function: qpGeomTriangles::Constructor +// Function: GeomTriangles::Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -qpGeomTriangles:: -qpGeomTriangles(qpGeomTriangles::UsageHint usage_hint) : - qpGeomPrimitive(usage_hint) +GeomTriangles:: +GeomTriangles(GeomTriangles::UsageHint usage_hint) : + GeomPrimitive(usage_hint) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTriangles::Copy Constructor +// Function: GeomTriangles::Copy Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -qpGeomTriangles:: -qpGeomTriangles(const qpGeomTriangles ©) : - qpGeomPrimitive(copy) +GeomTriangles:: +GeomTriangles(const GeomTriangles ©) : + GeomPrimitive(copy) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTriangles::Destructor +// Function: GeomTriangles::Destructor // Access: Published, Virtual // Description: //////////////////////////////////////////////////////////////////// -qpGeomTriangles:: -~qpGeomTriangles() { +GeomTriangles:: +~GeomTriangles() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTriangles::make_copy +// Function: GeomTriangles::make_copy // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -PT(qpGeomPrimitive) qpGeomTriangles:: +PT(GeomPrimitive) GeomTriangles:: make_copy() const { - return new qpGeomTriangles(*this); + return new GeomTriangles(*this); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTriangles::get_primitive_type +// Function: GeomTriangles::get_primitive_type // Access: Public, Virtual // Description: Returns the fundamental rendering type of this // primitive: whether it is points, lines, or polygons. @@ -76,13 +76,13 @@ make_copy() const { // it also implies the type of primitive that will be // produced when decompose() is called. //////////////////////////////////////////////////////////////////// -qpGeomPrimitive::PrimitiveType qpGeomTriangles:: +GeomPrimitive::PrimitiveType GeomTriangles:: get_primitive_type() const { return PT_polygons; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTriangles::get_num_vertices_per_primitive +// Function: GeomTriangles::get_num_vertices_per_primitive // Access: Public, Virtual // Description: If the primitive type is a simple type in which all // primitives have the same number of vertices, like @@ -92,28 +92,28 @@ get_primitive_type() const { // different numbers of vertices, for instance a // triangle strip, returns 0. //////////////////////////////////////////////////////////////////// -int qpGeomTriangles:: +int GeomTriangles:: get_num_vertices_per_primitive() const { return 3; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTriangles::draw +// Function: GeomTriangles::draw // Access: Public, Virtual // Description: Calls the appropriate method on the GSG to draw the // primitive. //////////////////////////////////////////////////////////////////// -void qpGeomTriangles:: +void GeomTriangles:: draw(GraphicsStateGuardianBase *gsg) const { gsg->draw_triangles(this); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTriangles::rotate_impl +// Function: GeomTriangles::rotate_impl // Access: Protected, Virtual // Description: The virtual implementation of do_rotate(). //////////////////////////////////////////////////////////////////// -CPT(qpGeomVertexArrayData) qpGeomTriangles:: +CPT(GeomVertexArrayData) GeomTriangles:: rotate_impl() const { // To rotate triangles, we just move one vertex from the front to // the back, or vice-versa; but we have to know what direction we're @@ -121,13 +121,13 @@ rotate_impl() const { ShadeModel shade_model = get_shade_model(); int num_vertices = get_num_vertices(); - PT(qpGeomVertexArrayData) new_vertices = make_index_data(); + PT(GeomVertexArrayData) new_vertices = make_index_data(); new_vertices->set_num_rows(num_vertices); if (is_indexed()) { - CPT(qpGeomVertexArrayData) vertices = get_vertices(); - qpGeomVertexReader from(vertices, 0); - qpGeomVertexWriter to(new_vertices, 0); + CPT(GeomVertexArrayData) vertices = get_vertices(); + GeomVertexReader from(vertices, 0); + GeomVertexWriter to(new_vertices, 0); switch (shade_model) { case SM_flat_first_vertex: @@ -166,7 +166,7 @@ rotate_impl() const { } else { // Nonindexed case. int first_vertex = get_first_vertex(); - qpGeomVertexWriter to(new_vertices, 0); + GeomVertexWriter to(new_vertices, 0); switch (shade_model) { case SM_flat_first_vertex: @@ -203,27 +203,27 @@ rotate_impl() const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTriangles::register_with_read_factory +// Function: GeomTriangles::register_with_read_factory // Access: Public, Static // Description: Tells the BamReader how to create objects of type -// qpGeom. +// Geom. //////////////////////////////////////////////////////////////////// -void qpGeomTriangles:: +void GeomTriangles:: register_with_read_factory() { BamReader::get_factory()->register_factory(get_class_type(), make_from_bam); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTriangles::make_from_bam +// Function: GeomTriangles::make_from_bam // Access: Protected, Static // Description: This function is called by the BamReader's factory -// when a new object of type qpGeom is encountered -// in the Bam file. It should create the qpGeom +// when a new object of type Geom is encountered +// in the Bam file. It should create the Geom // and extract its information from the file. //////////////////////////////////////////////////////////////////// -TypedWritable *qpGeomTriangles:: +TypedWritable *GeomTriangles:: make_from_bam(const FactoryParams ¶ms) { - qpGeomTriangles *object = new qpGeomTriangles(UH_unspecified); + GeomTriangles *object = new GeomTriangles(UH_unspecified); DatagramIterator scan; BamReader *manager; diff --git a/panda/src/gobj/qpgeomTriangles.h b/panda/src/gobj/geomTriangles.h similarity index 69% rename from panda/src/gobj/qpgeomTriangles.h rename to panda/src/gobj/geomTriangles.h index fbef160669..bf40bb450d 100644 --- a/panda/src/gobj/qpgeomTriangles.h +++ b/panda/src/gobj/geomTriangles.h @@ -1,4 +1,4 @@ -// Filename: qpgeomTriangles.h +// Filename: geomTriangles.h // Created by: drose (06Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,26 +16,24 @@ // //////////////////////////////////////////////////////////////////// -#ifndef qpGEOMTRIANGLES_H -#define qpGEOMTRIANGLES_H +#ifndef GEOMTRIANGLES_H +#define GEOMTRIANGLES_H #include "pandabase.h" -#include "qpgeomPrimitive.h" +#include "geomPrimitive.h" //////////////////////////////////////////////////////////////////// -// Class : qpGeomTriangles +// Class : GeomTriangles // Description : Defines a series of disconnected triangles. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// -class EXPCL_PANDA qpGeomTriangles : public qpGeomPrimitive { +class EXPCL_PANDA GeomTriangles : public GeomPrimitive { PUBLISHED: - qpGeomTriangles(UsageHint usage_hint); - qpGeomTriangles(const qpGeomTriangles ©); - virtual ~qpGeomTriangles(); + GeomTriangles(UsageHint usage_hint); + GeomTriangles(const GeomTriangles ©); + virtual ~GeomTriangles(); public: - virtual PT(qpGeomPrimitive) make_copy() const; + virtual PT(GeomPrimitive) make_copy() const; virtual PrimitiveType get_primitive_type() const; virtual int get_num_vertices_per_primitive() const; @@ -44,7 +42,7 @@ public: virtual void draw(GraphicsStateGuardianBase *gsg) const; protected: - virtual CPT(qpGeomVertexArrayData) rotate_impl() const; + virtual CPT(GeomVertexArrayData) rotate_impl() const; public: static void register_with_read_factory(); @@ -57,9 +55,9 @@ public: return _type_handle; } static void init_type() { - qpGeomPrimitive::init_type(); - register_type(_type_handle, "qpGeomTriangles", - qpGeomPrimitive::get_class_type()); + GeomPrimitive::init_type(); + register_type(_type_handle, "GeomTriangles", + GeomPrimitive::get_class_type()); } virtual TypeHandle get_type() const { return get_class_type(); @@ -69,7 +67,7 @@ public: private: static TypeHandle _type_handle; - friend class qpGeom; + friend class Geom; }; #endif diff --git a/panda/src/gobj/geomTrifan.cxx b/panda/src/gobj/geomTrifan.cxx deleted file mode 100644 index 7fa6526d60..0000000000 --- a/panda/src/gobj/geomTrifan.cxx +++ /dev/null @@ -1,421 +0,0 @@ -// Filename: geomTrifan.cxx -// Created by: charles (13Jul00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "datagram.h" -#include "datagramIterator.h" -#include "bamReader.h" -#include "bamWriter.h" -#include "ioPtaDatagramShort.h" -#include "ioPtaDatagramInt.h" -#include "ioPtaDatagramLinMath.h" -#include "graphicsStateGuardianBase.h" - -#include "geomTri.h" -#include "geomTrifan.h" - -TypeHandle GeomTrifan::_type_handle; - -//////////////////////////////////////////////////////////////////// -// Function: GeomTrifan::get_num_tris -// Access: -// Description: -//////////////////////////////////////////////////////////////////// -int GeomTrifan:: -get_num_tris() const { - int numtris = 0; - for (int i = 0; i < _numprims; i++) { - numtris += _primlengths[i] - 2; - } - return numtris; -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomTrifan::make_copy -// Access: Public, Virtual -// Description: Returns a newly-allocated Geom that is a shallow copy -// of this one. It will be a different Geom pointer, -// but its internal data may or may not be shared with -// that of the original Geom. -//////////////////////////////////////////////////////////////////// -Geom *GeomTrifan:: -make_copy() const { - return new GeomTrifan(*this); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomTrifan::print_draw_immediate -// Access: -// Description: -//////////////////////////////////////////////////////////////////// -void GeomTrifan:: -print_draw_immediate( void ) const -{ - /* - int i; - int j; - int nprims = _numprims; - int* plen = _primlengths; - Vertexf* tcoords = _coords; - Normalf* tnorms = _norms; - Colorf* tcolors = _colors; - TexCoordf* ttexcoords = _texcoords; - ushort* tvindex = _vindex; - ushort* tnindex = _nindex; - ushort* tcindex = _cindex; - ushort* ttindex = _tindex; - - // Draw overall - if ( _color_command[G_OVERALL] != _issue_color_noop ) - { - nout << "Color (Overall): "; - if ( tcindex ) - { - nout << "idx: " << *tcindex << " "; - nout << tcolors[*(tcindex++)]; - } - else - nout << *(tcolors++); - nout << endl; - } - if ( _normal_command[G_OVERALL] != _issue_normal_noop ) - { - nout << "Normal (Overall): "; - if ( tnindex ) - { - nout << "idx: " << *tnindex << " "; - nout << tnorms[*(tnindex++)]; - } - else - nout << *(tnorms++); - nout << endl; - } - - for ( i = nprims; i > 0; i-- ) - { - // Draw per primitive - if ( _color_command[G_PER_PRIM] != _issue_color_noop ) - { - nout << "Color (Per Prim): "; - if ( tcindex ) - { - nout << "idx: " << *tcindex << " "; - nout << tcolors[*(tcindex++)]; - } - else - nout << *(tcolors++); - nout << endl; - } - if ( _normal_command[G_PER_PRIM] != _issue_normal_noop ) - { - nout << "Normal (Per Prim): "; - if ( tnindex ) - { - nout << "idx: " << *tnindex << " "; - nout << tnorms[*(tnindex++)]; - } - else - nout << *(tnorms++); - nout << endl; - } - - nout << "BeginGfx()" << endl; - - for ( j = *(plen++); j > 0; j-- ) - { - // Draw per vertex - if ( _color_command[G_PER_VERTEX] != _issue_color_noop ) - { - nout << "Color (Per Vertex): "; - if ( tcindex ) - { - nout << "idx: " << *tcindex << " "; - nout << tcolors[*(tcindex++)]; - } - else - nout << *(tcolors++); - nout << endl; - } - if ( _normal_command[G_PER_VERTEX] != _issue_normal_noop ) - { - nout << "Normal (Per Vertex): "; - if ( tnindex ) - { - nout << "idx: " << *tnindex << " "; - nout << tnorms[*(tnindex++)]; - } - else - nout << *(tnorms++); - nout << endl; - } - if ( _texcoord_command[G_PER_VERTEX] != _issue_texcoord_noop ) - { - nout << "TexCoord (Per Vertex): "; - if ( ttindex ) - { - nout << "idx: " << *ttindex << " "; - nout << ttexcoords[*(ttindex++)]; - } - else - nout << *(ttexcoords++); - nout << endl; - } - if ( _vertex_command[G_PER_VERTEX] != _issue_vertex_noop ) - { - nout << "Vertex (Per Vertex): "; - if ( tvindex ) - { - nout << "idx: " << *tvindex << " "; - nout << tcoords[*(tvindex++)]; - } - else - nout << *(tcoords++); - nout << endl; - } - } - - nout << "EndGfx()" << endl; - } - */ -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomTrifan::draw_immediate -// Access: -// Description: -//////////////////////////////////////////////////////////////////// -void GeomTrifan:: -draw_immediate(GraphicsStateGuardianBase *gsg, GeomContext *gc) { - gsg->draw_trifan(this, gc); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomTrifan::explode -// Access: Public, Virtual -// Description: Allocate and return a new Geom which represents the -// individual triangles that make up the trifan. -//////////////////////////////////////////////////////////////////// -Geom *GeomTrifan:: -explode() const { - PTA_Vertexf coords=PTA_Vertexf::empty_array(0); - PTA_Normalf normals=PTA_Normalf::empty_array(0); - PTA_TexCoordf texcoords=PTA_TexCoordf::empty_array(0); - PTA_Colorf colors=PTA_Colorf::empty_array(0); - - VertexIterator vi = make_vertex_iterator(); - NormalIterator ni = make_normal_iterator(); - TexCoordIterator ti = make_texcoord_iterator(); - ColorIterator ci = make_color_iterator(); - - // Get overall values - if (get_binding(G_COLOR) == G_OVERALL) { - colors.push_back(get_next_color(ci)); - } - if (get_binding(G_NORMAL) == G_OVERALL) { - normals.push_back(get_next_normal(ni)); - } - - int num_tris = 0; - int num_prims = get_num_prims(); - - for (int i = 0; i < num_prims; i++) { - // Get per-primitive values - Colorf per_trifan_color; - Normalf per_trifan_normal; - if (get_binding(G_COLOR) == G_PER_PRIM) { - per_trifan_color = get_next_color(ci); - } - if (get_binding(G_NORMAL) == G_PER_PRIM) { - per_trifan_normal = get_next_normal(ni); - } - - int num_verts = get_length(i); - assert(num_verts >= 3); - - // A few temporary arrays to hold the three most recent per-vertex - // values. - Vertexf f3vertex[3]; - Normalf f3normal[3]; - Colorf f3color[3]; - TexCoordf f3texcoord[3]; - - // Get the first two vertices. We get these into positions [0] - // and [2]. - - int v; - for (v = 0; v <= 2; v += 2) { - if (get_binding(G_COORD) == G_PER_VERTEX) { - f3vertex[v] = get_next_vertex(vi); - } - if (get_binding(G_NORMAL) == G_PER_VERTEX) { - f3normal[v] = get_next_normal(ni); - } - if (get_binding(G_TEXCOORD) == G_PER_VERTEX) { - f3texcoord[v] = get_next_texcoord(ti); - } - if (get_binding(G_COLOR) == G_PER_VERTEX) { - f3color[v] = get_next_color(ci); - } - } - - // Now fill each triangle. Each vertex from this point on defines - // a new triangle. - for (v = 2; v < num_verts; v++) { - num_tris++; - - f3vertex[1] = f3vertex[2]; - f3normal[1] = f3normal[2]; - f3texcoord[1] = f3texcoord[2]; - f3color[1] = f3color[2]; - - if (get_binding(G_COLOR) == G_PER_PRIM) { - colors.push_back(per_trifan_color); - } else if (get_binding(G_COLOR) == G_PER_COMPONENT) { - colors.push_back(get_next_color(ci)); - } - - if (get_binding(G_NORMAL) == G_PER_PRIM) { - normals.push_back(per_trifan_normal); - } else if (get_binding(G_NORMAL) == G_PER_COMPONENT) { - normals.push_back(get_next_normal(ni)); - } - - // Per-vertex attributes. - assert(get_binding(G_COORD) == G_PER_VERTEX); - f3vertex[2] = get_next_vertex(vi); - coords.push_back(f3vertex[0]); - coords.push_back(f3vertex[1]); - coords.push_back(f3vertex[2]); - - if (get_binding(G_NORMAL) == G_PER_VERTEX) { - f3normal[2] = get_next_normal(ni); - normals.push_back(f3normal[0]); - normals.push_back(f3normal[1]); - normals.push_back(f3normal[2]); - } - if (get_binding(G_TEXCOORD) == G_PER_VERTEX) { - f3texcoord[2] = get_next_texcoord(ti); - texcoords.push_back(f3texcoord[0]); - texcoords.push_back(f3texcoord[1]); - texcoords.push_back(f3texcoord[2]); - } - if (get_binding(G_COLOR) == G_PER_VERTEX) { - f3color[2] = get_next_color(ci); - colors.push_back(f3color[0]); - colors.push_back(f3color[1]); - colors.push_back(f3color[2]); - } - } - } - - Geom *tris = new GeomTri; - tris->set_coords(coords); - - tris->set_normals(normals, - get_binding(G_NORMAL) == G_PER_COMPONENT ? - G_PER_PRIM : get_binding(G_NORMAL)); - tris->set_texcoords(texcoords, get_binding(G_TEXCOORD)); - tris->set_colors(colors, - get_binding(G_COLOR) == G_PER_COMPONENT ? - G_PER_PRIM : get_binding(G_COLOR)); - tris->set_num_prims(num_tris); - - return tris; -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomTrifan::get_tris -// Access: Public, Virtual -// Description: This is similar in principle to explode(), except it -// returns only a list of triangle vertex indices, with -// no information about color or whatever. The array -// returned is a set of indices into the geom's _coords -// array, as retrieve by get_coords(); there will be 3*n -// elements in the array, where n is the number of -// triangles described by the geometry. This is useful -// when it's important to determine the physical -// structure of the geometry, without necessarily -// worrying about its rendering properties, and when -// performance considerations are not overwhelming. -//////////////////////////////////////////////////////////////////// -PTA_ushort GeomTrifan:: -get_tris() const { - int num_tris = get_num_tris(); - PTA_ushort tris; - tris.reserve(num_tris * 3); - - int k = 0; - - for (int i = 0; i < _numprims; i++) { - ushort v0, v1, v2; - if (_vindex.empty()) { - v0 = k++; - v1 = k++; - } else { - v0 = _vindex[k++]; - v1 = _vindex[k++]; - } - - int len = _primlengths[i] - 2; - - for (int j = 0; j < len; j++) { - if (_vindex.empty()) { - v2 = k++; - } else { - v2 = _vindex[k++]; - } - - tris.push_back(v0); - tris.push_back(v1); - tris.push_back(v2); - - v1 = v2; - } - } - - nassertr((int)tris.size() == num_tris * 3, PTA_ushort()); - return tris; -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomTrifan::make_GeomTrifan -// Access: Protected -// Description: Factory method to generate a GeomTrifan object -//////////////////////////////////////////////////////////////////// -TypedWritable* GeomTrifan:: -make_GeomTrifan(const FactoryParams ¶ms) { - GeomTrifan *me = new GeomTrifan; - DatagramIterator scan; - BamReader *manager; - - parse_params(params, scan, manager); - me->fillin(scan, manager); - me->make_dirty(); - me->config(); - return me; -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomTrifan::register_with_factory -// Access: Public, Static -// Description: Factory method to generate a GeomTrifan object -//////////////////////////////////////////////////////////////////// -void GeomTrifan:: -register_with_read_factory(void) { - BamReader::get_factory()->register_factory(get_class_type(), make_GeomTrifan); -} - diff --git a/panda/src/gobj/geomTrifan.h b/panda/src/gobj/geomTrifan.h deleted file mode 100644 index bea72df2c2..0000000000 --- a/panda/src/gobj/geomTrifan.h +++ /dev/null @@ -1,77 +0,0 @@ -// Filename: geomTrifan.h -// Created by: charles (13Jul00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef GEOMTRIFAN_H -#define GEOMTRIFAN_H - -#include "geom.h" - -//////////////////////////////////////////////////////////////////// -// Class : GeomTrifan -// Description : Triangle Fan Primitive -//////////////////////////////////////////////////////////////////// -class EXPCL_PANDA GeomTrifan : public Geom -{ -public: - GeomTrifan( void ) : Geom() { } - virtual Geom *make_copy() const; - virtual void print_draw_immediate( void ) const; - int get_num_tris( void ) const; - virtual void draw_immediate(GraphicsStateGuardianBase *gsg, GeomContext *gc); - - virtual int get_num_vertices_per_prim() const { - return 0; - } - virtual int get_num_more_vertices_than_components() const { - return 2; - } - virtual bool uses_components() const { - return true; - } - - virtual int get_length(int prim) const { - return _primlengths[prim]; - } - - virtual Geom *explode() const; - virtual PTA_ushort get_tris() const; - -public: - static void register_with_read_factory(void); - static TypedWritable *make_GeomTrifan(const FactoryParams ¶ms); - -PUBLISHED: - static TypeHandle get_class_type() { - return _type_handle; - } -public: - static void init_type() { - Geom::init_type(); - register_type(_type_handle, "GeomTrifan", - Geom::get_class_type()); - } - virtual TypeHandle get_type() const { - return get_class_type(); - } - virtual TypeHandle force_init_type() {init_type(); return get_class_type();} - -private: - static TypeHandle _type_handle; -}; - -#endif // GEOMTRIFAN_H diff --git a/panda/src/gobj/qpgeomTrifans.cxx b/panda/src/gobj/geomTrifans.cxx similarity index 79% rename from panda/src/gobj/qpgeomTrifans.cxx rename to panda/src/gobj/geomTrifans.cxx index 2eafff97b2..3cdcbd8808 100644 --- a/panda/src/gobj/qpgeomTrifans.cxx +++ b/panda/src/gobj/geomTrifans.cxx @@ -1,4 +1,4 @@ -// Filename: qpgeomTrifans.cxx +// Filename: geomTrifans.cxx // Created by: drose (08Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,57 +16,57 @@ // //////////////////////////////////////////////////////////////////// -#include "qpgeomTrifans.h" -#include "qpgeomTriangles.h" -#include "qpgeomVertexRewriter.h" +#include "geomTrifans.h" +#include "geomTriangles.h" +#include "geomVertexRewriter.h" #include "bamReader.h" #include "bamWriter.h" -TypeHandle qpGeomTrifans::_type_handle; +TypeHandle GeomTrifans::_type_handle; //////////////////////////////////////////////////////////////////// -// Function: qpGeomTrifans::Constructor +// Function: GeomTrifans::Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -qpGeomTrifans:: -qpGeomTrifans(qpGeomTrifans::UsageHint usage_hint) : - qpGeomPrimitive(usage_hint) +GeomTrifans:: +GeomTrifans(GeomTrifans::UsageHint usage_hint) : + GeomPrimitive(usage_hint) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTrifans::Copy Constructor +// Function: GeomTrifans::Copy Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -qpGeomTrifans:: -qpGeomTrifans(const qpGeomTrifans ©) : - qpGeomPrimitive(copy) +GeomTrifans:: +GeomTrifans(const GeomTrifans ©) : + GeomPrimitive(copy) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTrifans::Destructor +// Function: GeomTrifans::Destructor // Access: Published, Virtual // Description: //////////////////////////////////////////////////////////////////// -qpGeomTrifans:: -~qpGeomTrifans() { +GeomTrifans:: +~GeomTrifans() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTrifans::make_copy +// Function: GeomTrifans::make_copy // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -PT(qpGeomPrimitive) qpGeomTrifans:: +PT(GeomPrimitive) GeomTrifans:: make_copy() const { - return new qpGeomTrifans(*this); + return new GeomTrifans(*this); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTrifans::get_primitive_type +// Function: GeomTrifans::get_primitive_type // Access: Public, Virtual // Description: Returns the fundamental rendering type of this // primitive: whether it is points, lines, or polygons. @@ -76,36 +76,36 @@ make_copy() const { // it also implies the type of primitive that will be // produced when decompose() is called. //////////////////////////////////////////////////////////////////// -qpGeomPrimitive::PrimitiveType qpGeomTrifans:: +GeomPrimitive::PrimitiveType GeomTrifans:: get_primitive_type() const { return PT_polygons; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTrifans::get_geom_rendering +// Function: GeomTrifans::get_geom_rendering // Access: Published, Virtual // Description: Returns the set of GeomRendering bits that represent // the rendering properties required to properly render // this primitive. //////////////////////////////////////////////////////////////////// -int qpGeomTrifans:: +int GeomTrifans:: get_geom_rendering() const { return GR_triangle_fan; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTrifans::draw +// Function: GeomTrifans::draw // Access: Public, Virtual // Description: Calls the appropriate method on the GSG to draw the // primitive. //////////////////////////////////////////////////////////////////// -void qpGeomTrifans:: +void GeomTrifans:: draw(GraphicsStateGuardianBase *gsg) const { gsg->draw_trifans(this); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTrifans::decompose_impl +// Function: GeomTrifans::decompose_impl // Access: Protected, Virtual // Description: Decomposes a complex primitive type into a simpler // primitive type, for instance triangle strips to @@ -118,9 +118,9 @@ draw(GraphicsStateGuardianBase *gsg) const { // primitive without having to write handlers for each // possible kind of primitive type. //////////////////////////////////////////////////////////////////// -CPT(qpGeomPrimitive) qpGeomTrifans:: +CPT(GeomPrimitive) GeomTrifans:: decompose_impl() const { - PT(qpGeomTriangles) triangles = new qpGeomTriangles(get_usage_hint()); + PT(GeomTriangles) triangles = new GeomTriangles(get_usage_hint()); triangles->set_shade_model(get_shade_model()); CPTA_int ends = get_ends(); @@ -153,11 +153,11 @@ decompose_impl() const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTrifans::rotate_impl +// Function: GeomTrifans::rotate_impl // Access: Protected, Virtual // Description: The virtual implementation of do_rotate(). //////////////////////////////////////////////////////////////////// -CPT(qpGeomVertexArrayData) qpGeomTrifans:: +CPT(GeomVertexArrayData) GeomTrifans:: rotate_impl() const { // Actually, we can't rotate fans without chaging the winding order. // It's an error to define a flat shade model for a GeomTrifan. @@ -166,27 +166,27 @@ rotate_impl() const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTrifans::register_with_read_factory +// Function: GeomTrifans::register_with_read_factory // Access: Public, Static // Description: Tells the BamReader how to create objects of type -// qpGeom. +// Geom. //////////////////////////////////////////////////////////////////// -void qpGeomTrifans:: +void GeomTrifans:: register_with_read_factory() { BamReader::get_factory()->register_factory(get_class_type(), make_from_bam); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTrifans::make_from_bam +// Function: GeomTrifans::make_from_bam // Access: Protected, Static // Description: This function is called by the BamReader's factory -// when a new object of type qpGeom is encountered -// in the Bam file. It should create the qpGeom +// when a new object of type Geom is encountered +// in the Bam file. It should create the Geom // and extract its information from the file. //////////////////////////////////////////////////////////////////// -TypedWritable *qpGeomTrifans:: +TypedWritable *GeomTrifans:: make_from_bam(const FactoryParams ¶ms) { - qpGeomTrifans *object = new qpGeomTrifans(UH_unspecified); + GeomTrifans *object = new GeomTrifans(UH_unspecified); DatagramIterator scan; BamReader *manager; diff --git a/panda/src/gobj/qpgeomTrifans.h b/panda/src/gobj/geomTrifans.h similarity index 68% rename from panda/src/gobj/qpgeomTrifans.h rename to panda/src/gobj/geomTrifans.h index 5e81511a55..0efaea6057 100644 --- a/panda/src/gobj/qpgeomTrifans.h +++ b/panda/src/gobj/geomTrifans.h @@ -1,4 +1,4 @@ -// Filename: qpgeomTrifans.h +// Filename: geomTrifans.h // Created by: drose (08Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,26 +16,24 @@ // //////////////////////////////////////////////////////////////////// -#ifndef qpGEOMTRIFANS_H -#define qpGEOMTRIFANS_H +#ifndef GEOMTRIFANS_H +#define GEOMTRIFANS_H #include "pandabase.h" -#include "qpgeomPrimitive.h" +#include "geomPrimitive.h" //////////////////////////////////////////////////////////////////// -// Class : qpGeomTrifans +// Class : GeomTrifans // Description : Defines a series of triangle fans. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// -class EXPCL_PANDA qpGeomTrifans : public qpGeomPrimitive { +class EXPCL_PANDA GeomTrifans : public GeomPrimitive { PUBLISHED: - qpGeomTrifans(UsageHint usage_hint); - qpGeomTrifans(const qpGeomTrifans ©); - virtual ~qpGeomTrifans(); + GeomTrifans(UsageHint usage_hint); + GeomTrifans(const GeomTrifans ©); + virtual ~GeomTrifans(); public: - virtual PT(qpGeomPrimitive) make_copy() const; + virtual PT(GeomPrimitive) make_copy() const; virtual PrimitiveType get_primitive_type() const; virtual int get_geom_rendering() const; @@ -43,8 +41,8 @@ public: virtual void draw(GraphicsStateGuardianBase *gsg) const; protected: - virtual CPT(qpGeomPrimitive) decompose_impl() const; - virtual CPT(qpGeomVertexArrayData) rotate_impl() const; + virtual CPT(GeomPrimitive) decompose_impl() const; + virtual CPT(GeomVertexArrayData) rotate_impl() const; public: static void register_with_read_factory(); @@ -57,9 +55,9 @@ public: return _type_handle; } static void init_type() { - qpGeomPrimitive::init_type(); - register_type(_type_handle, "qpGeomTrifans", - qpGeomPrimitive::get_class_type()); + GeomPrimitive::init_type(); + register_type(_type_handle, "GeomTrifans", + GeomPrimitive::get_class_type()); } virtual TypeHandle get_type() const { return get_class_type(); @@ -69,7 +67,7 @@ public: private: static TypeHandle _type_handle; - friend class qpGeom; + friend class Geom; }; #endif diff --git a/panda/src/gobj/geomTristrip.cxx b/panda/src/gobj/geomTristrip.cxx deleted file mode 100644 index b0cb65a949..0000000000 --- a/panda/src/gobj/geomTristrip.cxx +++ /dev/null @@ -1,530 +0,0 @@ -// Filename: geomTristrip.cxx -// Created by: charles (13Jul00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "datagram.h" -#include "datagramIterator.h" -#include "bamReader.h" -#include "bamWriter.h" -#include "ioPtaDatagramShort.h" -#include "ioPtaDatagramInt.h" -#include "ioPtaDatagramLinMath.h" -#include "graphicsStateGuardianBase.h" - -#include "geomTri.h" -#include "geomTristrip.h" - -TypeHandle GeomTristrip::_type_handle; - - -//////////////////////////////////////////////////////////////////// -// Function: GeomTristrip::make_copy -// Access: Public, Virtual -// Description: Returns a newly-allocated Geom that is a shallow copy -// of this one. It will be a different Geom pointer, -// but its internal data may or may not be shared with -// that of the original Geom. -//////////////////////////////////////////////////////////////////// -Geom *GeomTristrip:: -make_copy() const { - return new GeomTristrip(*this); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomTristrip::print_draw_immediate -// Access: -// Description: -//////////////////////////////////////////////////////////////////// -void GeomTristrip::print_draw_immediate( void ) const -{ - /* - int i; - int j; - int k; - int nprims = _numprims; - int* plen = _primlengths; - Vertexf* tcoords = _coords; - Normalf* tnorms = _norms; - Colorf* tcolors = _colors; - TexCoordf* ttexcoords = _texcoords; - ushort* tvindex = _vindex; - ushort* tnindex = _nindex; - ushort* tcindex = _cindex; - ushort* ttindex = _tindex; - - // Draw overall - if ( _color_command[G_OVERALL] != _issue_color_noop ) - { - nout << "Color (Overall): "; - if ( tcindex ) - { - nout << "idx: " << *tcindex << " "; - nout << tcolors[*(tcindex++)]; - } - else - nout << *(tcolors++); - nout << endl; - } - if ( _normal_command[G_OVERALL] != _issue_normal_noop ) - { - nout << "Normal (Overall): "; - if ( tnindex ) - { - nout << "idx: " << *tnindex << " "; - nout << tnorms[*(tnindex++)]; - } - else - nout << *(tnorms++); - nout << endl; - } - - for ( i = nprims; i > 0; i-- ) - { - // Draw per primitive - if ( _color_command[G_PER_PRIM] != _issue_color_noop ) - { - nout << "Color (Per Prim): "; - if ( tcindex ) - { - nout << "idx: " << *tcindex << " "; - nout << tcolors[*(tcindex++)]; - } - else - nout << *(tcolors++); - nout << endl; - } - if ( _normal_command[G_PER_PRIM] != _issue_normal_noop ) - { - nout << "Normal (Per Prim): "; - if ( tnindex ) - { - nout << "idx: " << *tnindex << " "; - nout << tnorms[*(tnindex++)]; - } - else - nout << *(tnorms++); - nout << endl; - } - - nout << "BeginGfx()" << endl; - - for ( j = *(plen++); j > 1; j -= 2 ) - { - // Draw per component - if ( _color_command[G_PER_COMPONENT] != _issue_color_noop ) - { - nout << "Color (Per Component): "; - if ( tcindex ) - { - nout << "idx: " << *tcindex << " "; - nout << tcolors[*(tcindex++)]; - } - else - nout << *(tcolors++); - nout << endl; - } - if ( _normal_command[G_PER_COMPONENT] != _issue_normal_noop ) - { - nout << "Normal (Per Component): "; - if ( tnindex ) - { - nout << "idx: " << *tnindex << " "; - nout << tnorms[*(tnindex++)]; - } - else - nout << *(tnorms++); - nout << endl; - } - - for ( k = 0; k < 2; k++ ) - { - // Draw per vertex - if ( _color_command[G_PER_VERTEX] != _issue_color_noop ) - { - nout << "Color (Per Vertex): "; - if ( tcindex ) - { - nout << "idx: " << *tcindex << " "; - nout << tcolors[*(tcindex++)]; - } - else - nout << *(tcolors++); - nout << endl; - } - if ( _normal_command[G_PER_VERTEX] != _issue_normal_noop ) - { - nout << "Normal (Per Vertex): "; - if ( tnindex ) - { - nout << "idx: " << *tnindex << " "; - nout << tnorms[*(tnindex++)]; - } - else - nout << *(tnorms++); - nout << endl; - } - if ( _texcoord_command[G_PER_VERTEX] != _issue_texcoord_noop ) - { - nout << "TexCoord (Per Vertex): "; - if ( ttindex ) - { - nout << "idx: " << *ttindex << " "; - nout << ttexcoords[*(ttindex++)]; - } - else - nout << *(ttexcoords++); - nout << endl; - } - if ( _vertex_command[G_PER_VERTEX] != _issue_vertex_noop ) - { - nout << "Vertex (Per Vertex): "; - if ( tvindex ) - { - nout << "idx: " << *tvindex << " "; - nout << tcoords[*(tvindex++)]; - } - else - nout << *(tcoords++); - nout << endl; - } - } - } - if ( !j ) - { - nout << "EndGfx()" << endl; - continue; - } - else - { - // Draw per vertex - if ( _color_command[G_PER_VERTEX] != _issue_color_noop ) - { - nout << "Color (Per Vertex): "; - if ( tcindex ) - { - nout << "idx: " << *tcindex << " "; - nout << tcolors[*(tcindex++)]; - } - else - nout << *(tcolors++); - nout << endl; - } - if ( _normal_command[G_PER_VERTEX] != _issue_normal_noop ) - { - nout << "Normal (Per Vertex): "; - if ( tnindex ) - { - nout << "idx: " << *tnindex << " "; - nout << tnorms[*(tnindex++)]; - } - else - nout << *(tnorms++); - nout << endl; - } - if ( _texcoord_command[G_PER_VERTEX] != _issue_texcoord_noop ) - { - nout << "TexCoord (Per Vertex): "; - if ( ttindex ) - { - nout << "idx: " << *ttindex << " "; - nout << ttexcoords[*(ttindex++)]; - } - else - nout << *(ttexcoords++); - nout << endl; - } - if ( _vertex_command[G_PER_VERTEX] != _issue_vertex_noop ) - { - nout << "Vertex (Per Vertex): "; - if ( tvindex ) - { - nout << "idx: " << *tvindex << " "; - nout << tcoords[*(tvindex++)]; - } - else - nout << *(tcoords++); - nout << endl; - } - - nout << "EndGfx()" << endl; - continue; - } - } - */ -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomTristrip::draw_immediate -// Access: -// Description: -//////////////////////////////////////////////////////////////////// -void GeomTristrip::draw_immediate(GraphicsStateGuardianBase *gsg, GeomContext *gc) { - gsg->draw_tristrip(this, gc); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomTristrip::get_num_tris -// Access: -// Description: -//////////////////////////////////////////////////////////////////// -int -GeomTristrip::get_num_tris() const { - int numtris = 0; - for (int i = 0; i < _numprims; i++) { - numtris += _primlengths[i] - 2; - } - return numtris; -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomTristrip::explode -// Access: Public, Virtual -// Description: Allocate and return a new Geom which represents the -// individual triangles that make up the tristrip. -//////////////////////////////////////////////////////////////////// -Geom *GeomTristrip:: -explode() const { - PTA_Vertexf coords=PTA_Vertexf::empty_array(0); - PTA_Normalf normals=PTA_Normalf::empty_array(0); - PTA_TexCoordf texcoords=PTA_TexCoordf::empty_array(0); - PTA_Colorf colors=PTA_Colorf::empty_array(0); - - VertexIterator vi = make_vertex_iterator(); - NormalIterator ni = make_normal_iterator(); - TexCoordIterator ti = make_texcoord_iterator(); - ColorIterator ci = make_color_iterator(); - - // Get overall values - if (get_binding(G_COLOR) == G_OVERALL) { - colors.push_back(get_next_color(ci)); - } - if (get_binding(G_NORMAL) == G_OVERALL) { - normals.push_back(get_next_normal(ni)); - } - - int num_tris = 0; - int num_prims = get_num_prims(); - - for (int i = 0; i < num_prims; i++) { - // Get per-primitive values - Colorf per_tristrip_color; - Normalf per_tristrip_normal; - if (get_binding(G_COLOR) == G_PER_PRIM) { - per_tristrip_color = get_next_color(ci); - } - if (get_binding(G_NORMAL) == G_PER_PRIM) { - per_tristrip_normal = get_next_normal(ni); - } - - int num_verts = get_length(i); - assert(num_verts >= 3); - - // A few temporary arrays to hold the three most recent per-vertex - // values. - Vertexf f3vertex[3]; - Normalf f3normal[3]; - Colorf f3color[3]; - TexCoordf f3texcoord[3]; - - // Get the first two vertices. We get these into positions [0] - // and [2], to prepare for the back-and-forth switchback logic in - // the following loop. - - int v; - for (v = 0; v <= 2; v += 2) { - if (get_binding(G_COORD) == G_PER_VERTEX) { - f3vertex[v] = get_next_vertex(vi); - } - if (get_binding(G_NORMAL) == G_PER_VERTEX) { - f3normal[v] = get_next_normal(ni); - } - if (get_binding(G_TEXCOORD) == G_PER_VERTEX) { - f3texcoord[v] = get_next_texcoord(ti); - } - if (get_binding(G_COLOR) == G_PER_VERTEX) { - f3color[v] = get_next_color(ci); - } - } - - // Now fill each triangle. Each vertex from this point on defines - // a new triangle. - for (v = 2; v < num_verts; v++) { - num_tris++; - - if (get_binding(G_COLOR) == G_PER_PRIM) { - colors.push_back(per_tristrip_color); - } else if (get_binding(G_COLOR) == G_PER_COMPONENT) { - colors.push_back(get_next_color(ci)); - } - - if (get_binding(G_NORMAL) == G_PER_PRIM) { - normals.push_back(per_tristrip_normal); - } else if (get_binding(G_NORMAL) == G_PER_COMPONENT) { - normals.push_back(get_next_normal(ni)); - } - - if ((v & 1) == 0) { - // Even. The triangle is counter-clockwise. - f3vertex[1] = f3vertex[2]; - f3normal[1] = f3normal[2]; - f3texcoord[1] = f3texcoord[2]; - f3color[1] = f3color[2]; - } else { - // Odd. The triangle is clockwise. - f3vertex[0] = f3vertex[2]; - f3normal[0] = f3normal[2]; - f3texcoord[0] = f3texcoord[2]; - f3color[0] = f3color[2]; - } - - // Per-vertex attributes. - if (get_binding(G_COORD) == G_PER_VERTEX) { - f3vertex[2] = get_next_vertex(vi); - coords.push_back(f3vertex[0]); - coords.push_back(f3vertex[1]); - coords.push_back(f3vertex[2]); - } - if (get_binding(G_NORMAL) == G_PER_VERTEX) { - f3normal[2] = get_next_normal(ni); - normals.push_back(f3normal[0]); - normals.push_back(f3normal[1]); - normals.push_back(f3normal[2]); - } - if (get_binding(G_TEXCOORD) == G_PER_VERTEX) { - f3texcoord[2] = get_next_texcoord(ti); - texcoords.push_back(f3texcoord[0]); - texcoords.push_back(f3texcoord[1]); - texcoords.push_back(f3texcoord[2]); - } - if (get_binding(G_COLOR) == G_PER_VERTEX) { - f3color[2] = get_next_color(ci); - colors.push_back(f3color[0]); - colors.push_back(f3color[1]); - colors.push_back(f3color[2]); - } - } - } - - Geom *tris = new GeomTri; - tris->set_coords(coords); - tris->set_normals(normals, - get_binding(G_NORMAL) == G_PER_COMPONENT ? - G_PER_PRIM : get_binding(G_NORMAL)); - tris->set_texcoords(texcoords, get_binding(G_TEXCOORD)); - tris->set_colors(colors, - get_binding(G_COLOR) == G_PER_COMPONENT ? - G_PER_PRIM : get_binding(G_COLOR)); - tris->set_num_prims(num_tris); - - return tris; -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomTristrip::get_tris -// Access: Public, Virtual -// Description: This is similar in principle to explode(), except it -// returns only a list of triangle vertex indices, with -// no information about color or whatever. The array -// returned is a set of indices into the geom's _coords -// array, as retrieve by get_coords(); there will be 3*n -// elements in the array, where n is the number of -// triangles described by the geometry. This is useful -// when it's important to determine the physical -// structure of the geometry, without necessarily -// worrying about its rendering properties, and when -// performance considerations are not overwhelming. -//////////////////////////////////////////////////////////////////// -PTA_ushort GeomTristrip:: -get_tris() const { - int num_tris = get_num_tris(); - PTA_ushort tris; - tris.reserve(num_tris * 3); - - int k = 0; - - for (int i = 0; i < _numprims; i++) { - ushort v0, v1, v2; - if (_vindex.empty()) { - v0 = k++; - v1 = k++; - } else { - v0 = _vindex[k++]; - v1 = _vindex[k++]; - } - - bool even = true; - int len = _primlengths[i]; - - for (int j = 2; j < len; j++) { - if (_vindex.empty()) { - v2 = k++; - } else { - v2 = _vindex[k++]; - } - - even = !even; - - if (even) { - ushort vtmp = v1; - v1 = v2; - v2 = vtmp; - } - - tris.push_back(v0); - tris.push_back(v1); - tris.push_back(v2); - - if (even) { - v0 = v2; - } else { - v0 = v1; - v1 = v2; - } - } - } - - nassertr((int)tris.size() == num_tris * 3, PTA_ushort()); - return tris; -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomTristrip::make_GeomTristrip -// Access: Protected -// Description: Factory method to generate a GeomTristrip object -//////////////////////////////////////////////////////////////////// -TypedWritable* GeomTristrip:: -make_GeomTristrip(const FactoryParams ¶ms) { - GeomTristrip *me = new GeomTristrip; - DatagramIterator scan; - BamReader *manager; - - parse_params(params, scan, manager); - me->fillin(scan, manager); - me->make_dirty(); - me->config(); - return me; -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomTristrip::register_with_factory -// Access: Public, Static -// Description: Factory method to generate a GeomTristrip object -//////////////////////////////////////////////////////////////////// -void GeomTristrip:: -register_with_read_factory(void) { - BamReader::get_factory()->register_factory(get_class_type(), make_GeomTristrip); -} diff --git a/panda/src/gobj/geomTristrip.h b/panda/src/gobj/geomTristrip.h deleted file mode 100644 index 5dd4766d5d..0000000000 --- a/panda/src/gobj/geomTristrip.h +++ /dev/null @@ -1,76 +0,0 @@ -// Filename: geomTristrip.h -// Created by: charles (13Jul00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef GEOMTRISTRIP_H -#define GEOMTRISTRIP_H - -#include "geom.h" - -//////////////////////////////////////////////////////////////////// -// Class : GeomTristrip -// Description : Triangle Strip Primitive -//////////////////////////////////////////////////////////////////// -class EXPCL_PANDA GeomTristrip : public Geom { -public: - GeomTristrip() : Geom() { } - virtual Geom *make_copy() const; - virtual void print_draw_immediate() const; - int get_num_tris() const; - virtual void draw_immediate(GraphicsStateGuardianBase *gsg, GeomContext *gc); - - virtual int get_num_vertices_per_prim() const { - return 0; - } - virtual int get_num_more_vertices_than_components() const { - return 2; - } - virtual bool uses_components() const { - return true; - } - - virtual int get_length(int prim) const { - return _primlengths[prim]; - } - - virtual Geom *explode() const; - virtual PTA_ushort get_tris() const; - -public: - static void register_with_read_factory(void); - static TypedWritable *make_GeomTristrip(const FactoryParams ¶ms); - -PUBLISHED: - static TypeHandle get_class_type() { - return _type_handle; - } -public: - static void init_type() { - Geom::init_type(); - register_type(_type_handle, "GeomTristrip", - Geom::get_class_type()); - } - virtual TypeHandle get_type() const { - return get_class_type(); - } - virtual TypeHandle force_init_type() {init_type(); return get_class_type();} - -private: - static TypeHandle _type_handle; -}; - -#endif // GEOMTRISTRIP_H diff --git a/panda/src/gobj/qpgeomTristrips.cxx b/panda/src/gobj/geomTristrips.cxx similarity index 83% rename from panda/src/gobj/qpgeomTristrips.cxx rename to panda/src/gobj/geomTristrips.cxx index 54e123ed60..c1890c2860 100644 --- a/panda/src/gobj/qpgeomTristrips.cxx +++ b/panda/src/gobj/geomTristrips.cxx @@ -1,4 +1,4 @@ -// Filename: qpgeomTristrips.cxx +// Filename: geomTristrips.cxx // Created by: drose (08Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,58 +16,58 @@ // //////////////////////////////////////////////////////////////////// -#include "qpgeomTristrips.h" -#include "qpgeomTriangles.h" -#include "qpgeomVertexRewriter.h" +#include "geomTristrips.h" +#include "geomTriangles.h" +#include "geomVertexRewriter.h" #include "pStatTimer.h" #include "bamReader.h" #include "bamWriter.h" -TypeHandle qpGeomTristrips::_type_handle; +TypeHandle GeomTristrips::_type_handle; //////////////////////////////////////////////////////////////////// -// Function: qpGeomTristrips::Constructor +// Function: GeomTristrips::Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -qpGeomTristrips:: -qpGeomTristrips(qpGeomTristrips::UsageHint usage_hint) : - qpGeomPrimitive(usage_hint) +GeomTristrips:: +GeomTristrips(GeomTristrips::UsageHint usage_hint) : + GeomPrimitive(usage_hint) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTristrips::Copy Constructor +// Function: GeomTristrips::Copy Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -qpGeomTristrips:: -qpGeomTristrips(const qpGeomTristrips ©) : - qpGeomPrimitive(copy) +GeomTristrips:: +GeomTristrips(const GeomTristrips ©) : + GeomPrimitive(copy) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTristrips::Destructor +// Function: GeomTristrips::Destructor // Access: Published, Virtual // Description: //////////////////////////////////////////////////////////////////// -qpGeomTristrips:: -~qpGeomTristrips() { +GeomTristrips:: +~GeomTristrips() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTristrips::make_copy +// Function: GeomTristrips::make_copy // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -PT(qpGeomPrimitive) qpGeomTristrips:: +PT(GeomPrimitive) GeomTristrips:: make_copy() const { - return new qpGeomTristrips(*this); + return new GeomTristrips(*this); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTristrips::get_primitive_type +// Function: GeomTristrips::get_primitive_type // Access: Public, Virtual // Description: Returns the fundamental rendering type of this // primitive: whether it is points, lines, or polygons. @@ -77,25 +77,25 @@ make_copy() const { // it also implies the type of primitive that will be // produced when decompose() is called. //////////////////////////////////////////////////////////////////// -qpGeomPrimitive::PrimitiveType qpGeomTristrips:: +GeomPrimitive::PrimitiveType GeomTristrips:: get_primitive_type() const { return PT_polygons; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTristrips::get_geom_rendering +// Function: GeomTristrips::get_geom_rendering // Access: Published, Virtual // Description: Returns the set of GeomRendering bits that represent // the rendering properties required to properly render // this primitive. //////////////////////////////////////////////////////////////////// -int qpGeomTristrips:: +int GeomTristrips:: get_geom_rendering() const { return GR_triangle_strip; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTristrips::get_num_unused_vertices_per_primitive +// Function: GeomTristrips::get_num_unused_vertices_per_primitive // Access: Public, Virtual // Description: Returns the number of vertices that are added between // primitives that aren't, strictly speaking, part of @@ -103,24 +103,24 @@ get_geom_rendering() const { // instance, to define degenerate triangles to connect // otherwise disconnected triangle strips. //////////////////////////////////////////////////////////////////// -int qpGeomTristrips:: +int GeomTristrips:: get_num_unused_vertices_per_primitive() const { return 2; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTristrips::draw +// Function: GeomTristrips::draw // Access: Public, Virtual // Description: Calls the appropriate method on the GSG to draw the // primitive. //////////////////////////////////////////////////////////////////// -void qpGeomTristrips:: +void GeomTristrips:: draw(GraphicsStateGuardianBase *gsg) const { gsg->draw_tristrips(this); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTristrips::decompose_impl +// Function: GeomTristrips::decompose_impl // Access: Protected, Virtual // Description: Decomposes a complex primitive type into a simpler // primitive type, for instance triangle strips to @@ -133,9 +133,9 @@ draw(GraphicsStateGuardianBase *gsg) const { // primitive without having to write handlers for each // possible kind of primitive type. //////////////////////////////////////////////////////////////////// -CPT(qpGeomPrimitive) qpGeomTristrips:: +CPT(GeomPrimitive) GeomTristrips:: decompose_impl() const { - PT(qpGeomTriangles) triangles = new qpGeomTriangles(get_usage_hint()); + PT(GeomTriangles) triangles = new GeomTriangles(get_usage_hint()); triangles->set_shade_model(get_shade_model()); CPTA_int ends = get_ends(); @@ -222,11 +222,11 @@ decompose_impl() const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTristrips::rotate_impl +// Function: GeomTristrips::rotate_impl // Access: Protected, Virtual // Description: The virtual implementation of do_rotate(). //////////////////////////////////////////////////////////////////// -CPT(qpGeomVertexArrayData) qpGeomTristrips:: +CPT(GeomVertexArrayData) GeomTristrips:: rotate_impl() const { // To rotate a triangle strip with an even number of vertices, we // just reverse the vertices. But if we have an odd number of @@ -235,13 +235,13 @@ rotate_impl() const { // vertices in a flat-shaded tristrip. CPTA_int ends = get_ends(); - PT(qpGeomVertexArrayData) new_vertices = make_index_data(); + PT(GeomVertexArrayData) new_vertices = make_index_data(); new_vertices->set_num_rows(get_num_vertices()); if (is_indexed()) { - CPT(qpGeomVertexArrayData) vertices = get_vertices(); - qpGeomVertexReader from(vertices, 0); - qpGeomVertexWriter to(new_vertices, 0); + CPT(GeomVertexArrayData) vertices = get_vertices(); + GeomVertexReader from(vertices, 0); + GeomVertexWriter to(new_vertices, 0); int begin = 0; int last_added = 0; @@ -275,7 +275,7 @@ rotate_impl() const { } else { // Nonindexed case. int first_vertex = get_first_vertex(); - qpGeomVertexWriter to(new_vertices, 0); + GeomVertexWriter to(new_vertices, 0); int begin = 0; int last_added = 0; @@ -308,18 +308,18 @@ rotate_impl() const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTristrips::requires_unused_vertices +// Function: GeomTristrips::requires_unused_vertices // Access: Protected, Virtual // Description: Should be redefined to return true in any primitive // that implements append_unused_vertices(). //////////////////////////////////////////////////////////////////// -bool qpGeomTristrips:: +bool GeomTristrips:: requires_unused_vertices() const { return true; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTristrips::append_unused_vertices +// Function: GeomTristrips::append_unused_vertices // Access: Protected, Virtual // Description: Called when a new primitive is begun (other than the // first primitive), this should add some degenerate @@ -327,13 +327,13 @@ requires_unused_vertices() const { // requires that. The second parameter is the first // vertex that begins the new primitive. //////////////////////////////////////////////////////////////////// -void qpGeomTristrips:: -append_unused_vertices(qpGeomVertexArrayData *vertices, int vertex) { - qpGeomVertexReader from(vertices, 0); +void GeomTristrips:: +append_unused_vertices(GeomVertexArrayData *vertices, int vertex) { + GeomVertexReader from(vertices, 0); from.set_row(vertices->get_num_rows() - 1); int prev = from.get_data1i(); - qpGeomVertexWriter to(vertices, 0); + GeomVertexWriter to(vertices, 0); to.set_row(vertices->get_num_rows()); to.add_data1i(prev); @@ -341,27 +341,27 @@ append_unused_vertices(qpGeomVertexArrayData *vertices, int vertex) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTristrips::register_with_read_factory +// Function: GeomTristrips::register_with_read_factory // Access: Public, Static // Description: Tells the BamReader how to create objects of type -// qpGeom. +// Geom. //////////////////////////////////////////////////////////////////// -void qpGeomTristrips:: +void GeomTristrips:: register_with_read_factory() { BamReader::get_factory()->register_factory(get_class_type(), make_from_bam); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomTristrips::make_from_bam +// Function: GeomTristrips::make_from_bam // Access: Protected, Static // Description: This function is called by the BamReader's factory -// when a new object of type qpGeom is encountered -// in the Bam file. It should create the qpGeom +// when a new object of type Geom is encountered +// in the Bam file. It should create the Geom // and extract its information from the file. //////////////////////////////////////////////////////////////////// -TypedWritable *qpGeomTristrips:: +TypedWritable *GeomTristrips:: make_from_bam(const FactoryParams ¶ms) { - qpGeomTristrips *object = new qpGeomTristrips(UH_unspecified); + GeomTristrips *object = new GeomTristrips(UH_unspecified); DatagramIterator scan; BamReader *manager; diff --git a/panda/src/gobj/qpgeomTristrips.h b/panda/src/gobj/geomTristrips.h similarity index 67% rename from panda/src/gobj/qpgeomTristrips.h rename to panda/src/gobj/geomTristrips.h index e3026608b5..e1d9842c9c 100644 --- a/panda/src/gobj/qpgeomTristrips.h +++ b/panda/src/gobj/geomTristrips.h @@ -1,4 +1,4 @@ -// Filename: qpgeomTristrips.h +// Filename: geomTristrips.h // Created by: drose (08Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,26 +16,24 @@ // //////////////////////////////////////////////////////////////////// -#ifndef qpGEOMTRISTRIPS_H -#define qpGEOMTRISTRIPS_H +#ifndef GEOMTRISTRIPS_H +#define GEOMTRISTRIPS_H #include "pandabase.h" -#include "qpgeomPrimitive.h" +#include "geomPrimitive.h" //////////////////////////////////////////////////////////////////// -// Class : qpGeomTristrips +// Class : GeomTristrips // Description : Defines a series of triangle strips. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// -class EXPCL_PANDA qpGeomTristrips : public qpGeomPrimitive { +class EXPCL_PANDA GeomTristrips : public GeomPrimitive { PUBLISHED: - qpGeomTristrips(UsageHint usage_hint); - qpGeomTristrips(const qpGeomTristrips ©); - virtual ~qpGeomTristrips(); + GeomTristrips(UsageHint usage_hint); + GeomTristrips(const GeomTristrips ©); + virtual ~GeomTristrips(); public: - virtual PT(qpGeomPrimitive) make_copy() const; + virtual PT(GeomPrimitive) make_copy() const; virtual PrimitiveType get_primitive_type() const; virtual int get_geom_rendering() const; virtual int get_num_unused_vertices_per_primitive() const; @@ -44,10 +42,10 @@ public: virtual void draw(GraphicsStateGuardianBase *gsg) const; protected: - virtual CPT(qpGeomPrimitive) decompose_impl() const; - virtual CPT(qpGeomVertexArrayData) rotate_impl() const; + virtual CPT(GeomPrimitive) decompose_impl() const; + virtual CPT(GeomVertexArrayData) rotate_impl() const; virtual bool requires_unused_vertices() const; - virtual void append_unused_vertices(qpGeomVertexArrayData *vertices, + virtual void append_unused_vertices(GeomVertexArrayData *vertices, int vertex); public: @@ -61,9 +59,9 @@ public: return _type_handle; } static void init_type() { - qpGeomPrimitive::init_type(); - register_type(_type_handle, "qpGeomTristrips", - qpGeomPrimitive::get_class_type()); + GeomPrimitive::init_type(); + register_type(_type_handle, "GeomTristrips", + GeomPrimitive::get_class_type()); } virtual TypeHandle get_type() const { return get_class_type(); @@ -73,7 +71,7 @@ public: private: static TypeHandle _type_handle; - friend class qpGeom; + friend class Geom; }; #endif diff --git a/panda/src/gobj/qpgeomVertexAnimationSpec.I b/panda/src/gobj/geomVertexAnimationSpec.I similarity index 76% rename from panda/src/gobj/qpgeomVertexAnimationSpec.I rename to panda/src/gobj/geomVertexAnimationSpec.I index 2922155bc1..14ba903cbe 100644 --- a/panda/src/gobj/qpgeomVertexAnimationSpec.I +++ b/panda/src/gobj/geomVertexAnimationSpec.I @@ -1,4 +1,4 @@ -// Filename: qpgeomVertexAnimationSpec.I +// Filename: geomVertexAnimationSpec.I // Created by: drose (29Mar05) // //////////////////////////////////////////////////////////////////// @@ -18,12 +18,12 @@ //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexAnimationSpec::Constructor +// Function: GeomVertexAnimationSpec::Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexAnimationSpec:: -qpGeomVertexAnimationSpec() : +INLINE GeomVertexAnimationSpec:: +GeomVertexAnimationSpec() : _animation_type(AT_none), _num_transforms(0), _indexed_transforms(0) @@ -31,12 +31,12 @@ qpGeomVertexAnimationSpec() : } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexAnimationSpec::Copy Constructor +// Function: GeomVertexAnimationSpec::Copy Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexAnimationSpec:: -qpGeomVertexAnimationSpec(const qpGeomVertexAnimationSpec &other) : +INLINE GeomVertexAnimationSpec:: +GeomVertexAnimationSpec(const GeomVertexAnimationSpec &other) : _animation_type(other._animation_type), _num_transforms(other._num_transforms), _indexed_transforms(other._indexed_transforms) @@ -44,43 +44,43 @@ qpGeomVertexAnimationSpec(const qpGeomVertexAnimationSpec &other) : } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexAnimationSpec::Copy Assignment Operator +// Function: GeomVertexAnimationSpec::Copy Assignment Operator // Access: Published // Description: //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexAnimationSpec:: -operator = (const qpGeomVertexAnimationSpec &other) { +INLINE void GeomVertexAnimationSpec:: +operator = (const GeomVertexAnimationSpec &other) { _animation_type = other._animation_type; _num_transforms = other._num_transforms; _indexed_transforms = other._indexed_transforms; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexAnimationSpec::get_animation_type +// Function: GeomVertexAnimationSpec::get_animation_type // Access: Published // Description: Returns the type of animation represented by this // spec. //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexAnimationSpec::AnimationType qpGeomVertexAnimationSpec:: +INLINE GeomVertexAnimationSpec::AnimationType GeomVertexAnimationSpec:: get_animation_type() const { return _animation_type; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexAnimationSpec::get_num_transforms +// Function: GeomVertexAnimationSpec::get_num_transforms // Access: Published // Description: This is only meaningful for animation_type // AT_hardware. It specifies the maximum number of // transforms that might be simultaneously applied to // any one vertex by the data in this format. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexAnimationSpec:: +INLINE int GeomVertexAnimationSpec:: get_num_transforms() const { return _num_transforms; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexAnimationSpec::get_indexed_transforms +// Function: GeomVertexAnimationSpec::get_indexed_transforms // Access: Published // Description: This is only meaningful for animation_type // AT_hardware. If true, it indicates that the format @@ -88,36 +88,36 @@ get_num_transforms() const { // vertex will reference the first _num_transforms // table entries only. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexAnimationSpec:: +INLINE bool GeomVertexAnimationSpec:: get_indexed_transforms() const { return _indexed_transforms; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexAnimationSpec::set_none +// Function: GeomVertexAnimationSpec::set_none // Access: Published // Description: Specifies that no vertex animation is represented by // this spec. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexAnimationSpec:: +INLINE void GeomVertexAnimationSpec:: set_none() { _animation_type = AT_none; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexAnimationSpec::set_panda +// Function: GeomVertexAnimationSpec::set_panda // Access: Published // Description: Specifies that vertex animation is to be performed by // Panda. This is the most general setting and can // handle any kind of vertex animation represented. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexAnimationSpec:: +INLINE void GeomVertexAnimationSpec:: set_panda() { _animation_type = AT_panda; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexAnimationSpec::set_hardware +// Function: GeomVertexAnimationSpec::set_hardware // Access: Published // Description: Specifies that vertex animation is to be performed by // the graphics hardware (or at least by the graphics @@ -129,7 +129,7 @@ set_panda() { // and/or indexed transforms. Also, no current graphics // API's support morphing. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexAnimationSpec:: +INLINE void GeomVertexAnimationSpec:: set_hardware(int num_transforms, bool indexed_transforms) { _animation_type = AT_hardware; _num_transforms = num_transforms; @@ -137,44 +137,44 @@ set_hardware(int num_transforms, bool indexed_transforms) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexAnimationSpec::operator < +// Function: GeomVertexAnimationSpec::operator < // Access: Public // Description: Provides an arbitrary ordering between different // animation specs. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexAnimationSpec:: -operator < (const qpGeomVertexAnimationSpec &other) const { +INLINE bool GeomVertexAnimationSpec:: +operator < (const GeomVertexAnimationSpec &other) const { return (compare_to(other) < 0); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexAnimationSpec::operator == +// Function: GeomVertexAnimationSpec::operator == // Access: Public // Description: //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexAnimationSpec:: -operator == (const qpGeomVertexAnimationSpec &other) const { +INLINE bool GeomVertexAnimationSpec:: +operator == (const GeomVertexAnimationSpec &other) const { return (compare_to(other) == 0); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexAnimationSpec::operator != +// Function: GeomVertexAnimationSpec::operator != // Access: Public // Description: //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexAnimationSpec:: -operator != (const qpGeomVertexAnimationSpec &other) const { +INLINE bool GeomVertexAnimationSpec:: +operator != (const GeomVertexAnimationSpec &other) const { return (compare_to(other) != 0); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexAnimationSpec::compare_to +// Function: GeomVertexAnimationSpec::compare_to // Access: Public // Description: Provides an arbitrary ordering between different // animation specs. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexAnimationSpec:: -compare_to(const qpGeomVertexAnimationSpec &other) const { +INLINE int GeomVertexAnimationSpec:: +compare_to(const GeomVertexAnimationSpec &other) const { if (_animation_type != other._animation_type) { return (int)_animation_type - (int)other._animation_type; } @@ -192,7 +192,7 @@ compare_to(const qpGeomVertexAnimationSpec &other) const { } INLINE ostream & -operator << (ostream &out, const qpGeomVertexAnimationSpec &animation) { +operator << (ostream &out, const GeomVertexAnimationSpec &animation) { animation.output(out); return out; } diff --git a/panda/src/gobj/qpgeomVertexAnimationSpec.cxx b/panda/src/gobj/geomVertexAnimationSpec.cxx similarity index 84% rename from panda/src/gobj/qpgeomVertexAnimationSpec.cxx rename to panda/src/gobj/geomVertexAnimationSpec.cxx index 79b67192c1..4f6de8f783 100644 --- a/panda/src/gobj/qpgeomVertexAnimationSpec.cxx +++ b/panda/src/gobj/geomVertexAnimationSpec.cxx @@ -1,4 +1,4 @@ -// Filename: qpgeomVertexAnimationSpec.cxx +// Filename: geomVertexAnimationSpec.cxx // Created by: drose (29Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,16 +16,16 @@ // //////////////////////////////////////////////////////////////////// -#include "qpgeomVertexAnimationSpec.h" +#include "geomVertexAnimationSpec.h" #include "datagram.h" #include "datagramIterator.h" //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexAnimationSpec::output +// Function: GeomVertexAnimationSpec::output // Access: Published // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexAnimationSpec:: +void GeomVertexAnimationSpec:: output(ostream &out) const { switch (_animation_type) { case AT_none: @@ -44,12 +44,12 @@ output(ostream &out) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexAnimationSpec::write_datagram +// Function: GeomVertexAnimationSpec::write_datagram // Access: Public // Description: Writes the contents of this object to the datagram // for shipping out to a Bam file. //////////////////////////////////////////////////////////////////// -void qpGeomVertexAnimationSpec:: +void GeomVertexAnimationSpec:: write_datagram(BamWriter *, Datagram &dg) { dg.add_uint8(_animation_type); dg.add_uint16(_num_transforms); @@ -57,13 +57,13 @@ write_datagram(BamWriter *, Datagram &dg) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexAnimationSpec::fillin +// Function: GeomVertexAnimationSpec::fillin // Access: Protected // Description: This internal function is called by make_from_bam to // read in all of the relevant data from the BamFile for -// the new qpGeomVertexAnimationSpec. +// the new GeomVertexAnimationSpec. //////////////////////////////////////////////////////////////////// -void qpGeomVertexAnimationSpec:: +void GeomVertexAnimationSpec:: fillin(DatagramIterator &scan, BamReader *) { _animation_type = (AnimationType)scan.get_uint8(); _num_transforms = scan.get_uint16(); diff --git a/panda/src/gobj/qpgeomVertexAnimationSpec.h b/panda/src/gobj/geomVertexAnimationSpec.h similarity index 70% rename from panda/src/gobj/qpgeomVertexAnimationSpec.h rename to panda/src/gobj/geomVertexAnimationSpec.h index 255ecccd9a..9d238c7061 100644 --- a/panda/src/gobj/qpgeomVertexAnimationSpec.h +++ b/panda/src/gobj/geomVertexAnimationSpec.h @@ -1,4 +1,4 @@ -// Filename: qpgeomVertexAnimationSpec.h +// Filename: geomVertexAnimationSpec.h // Created by: drose (29Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,11 +16,11 @@ // //////////////////////////////////////////////////////////////////// -#ifndef qpGEOMVERTEXANIMATIONSPEC_H -#define qpGEOMVERTEXANIMATIONSPEC_H +#ifndef GEOMVERTEXANIMATIONSPEC_H +#define GEOMVERTEXANIMATIONSPEC_H #include "pandabase.h" -#include "qpgeomEnums.h" +#include "geomEnums.h" class BamWriter; class BamReader; @@ -28,7 +28,7 @@ class Datagram; class DatagramIterator; //////////////////////////////////////////////////////////////////// -// Class : qpGeomVertexAnimationSpec +// Class : GeomVertexAnimationSpec // Description : This object describes how the vertex animation, if // any, represented in a GeomVertexData is encoded. // @@ -42,14 +42,12 @@ class DatagramIterator; // Changing this setting doesn't by itself change the // way the animation is actually performed; this just // specifies how the vertices are set up to be animated. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// -class EXPCL_PANDA qpGeomVertexAnimationSpec : public qpGeomEnums { +class EXPCL_PANDA GeomVertexAnimationSpec : public GeomEnums { PUBLISHED: - INLINE qpGeomVertexAnimationSpec(); - INLINE qpGeomVertexAnimationSpec(const qpGeomVertexAnimationSpec &other); - INLINE void operator = (const qpGeomVertexAnimationSpec &other); + INLINE GeomVertexAnimationSpec(); + INLINE GeomVertexAnimationSpec(const GeomVertexAnimationSpec &other); + INLINE void operator = (const GeomVertexAnimationSpec &other); INLINE AnimationType get_animation_type() const; @@ -63,10 +61,10 @@ PUBLISHED: void output(ostream &out) const; public: - INLINE bool operator < (const qpGeomVertexAnimationSpec &other) const; - INLINE bool operator == (const qpGeomVertexAnimationSpec &other) const; - INLINE bool operator != (const qpGeomVertexAnimationSpec &other) const; - INLINE int compare_to(const qpGeomVertexAnimationSpec &other) const; + INLINE bool operator < (const GeomVertexAnimationSpec &other) const; + INLINE bool operator == (const GeomVertexAnimationSpec &other) const; + INLINE bool operator != (const GeomVertexAnimationSpec &other) const; + INLINE int compare_to(const GeomVertexAnimationSpec &other) const; public: void write_datagram(BamWriter *manager, Datagram &dg); @@ -80,8 +78,8 @@ private: }; INLINE ostream & -operator << (ostream &out, const qpGeomVertexAnimationSpec &animation); +operator << (ostream &out, const GeomVertexAnimationSpec &animation); -#include "qpgeomVertexAnimationSpec.I" +#include "geomVertexAnimationSpec.I" #endif diff --git a/panda/src/gobj/qpgeomVertexArrayData.I b/panda/src/gobj/geomVertexArrayData.I similarity index 79% rename from panda/src/gobj/qpgeomVertexArrayData.I rename to panda/src/gobj/geomVertexArrayData.I index 6e0e36a080..e4cd1a25c9 100644 --- a/panda/src/gobj/qpgeomVertexArrayData.I +++ b/panda/src/gobj/geomVertexArrayData.I @@ -1,4 +1,4 @@ -// Filename: qpgeomVertexArrayData.I +// Filename: geomVertexArrayData.I // Created by: drose (17Mar05) // //////////////////////////////////////////////////////////////////// @@ -18,119 +18,119 @@ //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::get_array_format +// Function: GeomVertexArrayData::get_array_format // Access: Published // Description: Returns the format object that describes this array. //////////////////////////////////////////////////////////////////// -INLINE const qpGeomVertexArrayFormat *qpGeomVertexArrayData:: +INLINE const GeomVertexArrayFormat *GeomVertexArrayData:: get_array_format() const { return _array_format; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::get_usage_hint +// Function: GeomVertexArrayData::get_usage_hint // Access: Published // Description: Returns the usage hint that describes to the // rendering backend how often the vertex data will be // modified and/or rendered. See geomEnums.h. //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexArrayData::UsageHint qpGeomVertexArrayData:: +INLINE GeomVertexArrayData::UsageHint GeomVertexArrayData:: get_usage_hint() const { CDReader cdata(_cycler); return cdata->_usage_hint; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::has_column +// Function: GeomVertexArrayData::has_column // Access: Published // Description: Returns true if the array has the named column, // false otherwise. This is really just a shortcut for // asking the same thing from the format. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexArrayData:: +INLINE bool GeomVertexArrayData:: has_column(const InternalName *name) const { return _array_format->has_column(name); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::get_num_rows +// Function: GeomVertexArrayData::get_num_rows // Access: Published // Description: Returns the number of rows stored in the array, // based on the number of bytes and the stride. This // should be the same for all arrays within a given // GeomVertexData object. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexArrayData:: +INLINE int GeomVertexArrayData:: get_num_rows() const { return get_data_size_bytes() / _array_format->get_stride(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::clear_rows +// Function: GeomVertexArrayData::clear_rows // Access: Published // Description: Removes all of the rows in the array. // Functionally equivalent to set_num_rows(0). //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexArrayData:: +INLINE void GeomVertexArrayData:: clear_rows() { set_data(PTA_uchar()); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::get_data_size_bytes +// Function: GeomVertexArrayData::get_data_size_bytes // Access: Published // Description: Returns the number of bytes stored in the array. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexArrayData:: +INLINE int GeomVertexArrayData:: get_data_size_bytes() const { CDReader cdata(_cycler); return cdata->_data.size(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::get_modified +// Function: GeomVertexArrayData::get_modified // Access: Published // Description: Returns a sequence number which is guaranteed to // change at least every time the array vertex data is // modified. //////////////////////////////////////////////////////////////////// -INLINE UpdateSeq qpGeomVertexArrayData:: +INLINE UpdateSeq GeomVertexArrayData:: get_modified() const { CDReader cdata(_cycler); return cdata->_modified; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::get_data +// Function: GeomVertexArrayData::get_data // Access: Public // Description: Returns a const pointer to the actual vertex data, // for application code to directly examine (but not // modify). //////////////////////////////////////////////////////////////////// -INLINE CPTA_uchar qpGeomVertexArrayData:: +INLINE CPTA_uchar GeomVertexArrayData:: get_data() const { CDReader cdata(_cycler); return cdata->_data; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::CData::Constructor +// Function: GeomVertexArrayData::CData::Constructor // Access: Public // Description: //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexArrayData::CData:: +INLINE GeomVertexArrayData::CData:: CData() : _usage_hint(UH_unspecified) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::CData::Copy Constructor +// Function: GeomVertexArrayData::CData::Copy Constructor // Access: Public // Description: //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexArrayData::CData:: -CData(const qpGeomVertexArrayData::CData ©) : +INLINE GeomVertexArrayData::CData:: +CData(const GeomVertexArrayData::CData ©) : _usage_hint(copy._usage_hint), _data(copy._data), _modified(copy._modified) @@ -138,7 +138,7 @@ CData(const qpGeomVertexArrayData::CData ©) : } INLINE ostream & -operator << (ostream &out, const qpGeomVertexArrayData &obj) { +operator << (ostream &out, const GeomVertexArrayData &obj) { obj.output(out); return out; } diff --git a/panda/src/gobj/qpgeomVertexArrayData.cxx b/panda/src/gobj/geomVertexArrayData.cxx similarity index 69% rename from panda/src/gobj/qpgeomVertexArrayData.cxx rename to panda/src/gobj/geomVertexArrayData.cxx index a537a03141..ab8ce3788c 100644 --- a/panda/src/gobj/qpgeomVertexArrayData.cxx +++ b/panda/src/gobj/geomVertexArrayData.cxx @@ -1,4 +1,4 @@ -// Filename: qpgeomVertexArrayData.cxx +// Filename: geomVertexArrayData.cxx // Created by: drose (17Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,83 +16,87 @@ // //////////////////////////////////////////////////////////////////// -#include "qpgeomVertexArrayData.h" -#include "qpgeom.h" +#include "geomVertexArrayData.h" +#include "geom.h" #include "preparedGraphicsObjects.h" +#include "reversedNumericData.h" #include "bamReader.h" #include "bamWriter.h" #include "pset.h" -TypeHandle qpGeomVertexArrayData::_type_handle; +TypeHandle GeomVertexArrayData::_type_handle; //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::Default Constructor +// Function: GeomVertexArrayData::Default Constructor // Access: Private // Description: Constructs an invalid object. This is only used when // reading from the bam file. //////////////////////////////////////////////////////////////////// -qpGeomVertexArrayData:: -qpGeomVertexArrayData() { +GeomVertexArrayData:: +GeomVertexArrayData() { + _endian_reversed = false; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::Constructor +// Function: GeomVertexArrayData::Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -qpGeomVertexArrayData:: -qpGeomVertexArrayData(const qpGeomVertexArrayFormat *array_format, - qpGeomVertexArrayData::UsageHint usage_hint) : +GeomVertexArrayData:: +GeomVertexArrayData(const GeomVertexArrayFormat *array_format, + GeomVertexArrayData::UsageHint usage_hint) : _array_format(array_format) { set_usage_hint(usage_hint); + _endian_reversed = false; nassertv(_array_format->is_registered()); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::Copy Constructor +// Function: GeomVertexArrayData::Copy Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -qpGeomVertexArrayData:: -qpGeomVertexArrayData(const qpGeomVertexArrayData ©) : +GeomVertexArrayData:: +GeomVertexArrayData(const GeomVertexArrayData ©) : TypedWritableReferenceCount(copy), _array_format(copy._array_format), _cycler(copy._cycler) { + _endian_reversed = false; nassertv(_array_format->is_registered()); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::Copy Assignment Operator +// Function: GeomVertexArrayData::Copy Assignment Operator // Access: Published // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexArrayData:: -operator = (const qpGeomVertexArrayData ©) { +void GeomVertexArrayData:: +operator = (const GeomVertexArrayData ©) { TypedWritableReferenceCount::operator = (copy); _array_format = copy._array_format; _cycler = copy._cycler; CDWriter cdata(_cycler); - cdata->_modified = qpGeom::get_next_modified(); + cdata->_modified = Geom::get_next_modified(); nassertv(_array_format->is_registered()); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::Destructor +// Function: GeomVertexArrayData::Destructor // Access: Published, Virtual // Description: //////////////////////////////////////////////////////////////////// -qpGeomVertexArrayData:: -~qpGeomVertexArrayData() { +GeomVertexArrayData:: +~GeomVertexArrayData() { release_all(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::set_num_rows +// Function: GeomVertexArrayData::set_num_rows // Access: Published // Description: Sets the length of the array to n rows. // Normally, you would not call this directly, since all @@ -108,7 +112,7 @@ qpGeomVertexArrayData:: // the "color" column (but see // GeomVertexData::set_num_rows()). //////////////////////////////////////////////////////////////////// -bool qpGeomVertexArrayData:: +bool GeomVertexArrayData:: set_num_rows(int n) { CDWriter cdata(_cycler); @@ -138,7 +142,7 @@ set_num_rows(int n) { } } - cdata->_modified = qpGeom::get_next_modified(); + cdata->_modified = Geom::get_next_modified(); return true; } @@ -147,46 +151,46 @@ set_num_rows(int n) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::set_usage_hint +// Function: GeomVertexArrayData::set_usage_hint // Access: Published // Description: Changes the UsageHint hint for this array. See // get_usage_hint(). //////////////////////////////////////////////////////////////////// -void qpGeomVertexArrayData:: -set_usage_hint(qpGeomVertexArrayData::UsageHint usage_hint) { +void GeomVertexArrayData:: +set_usage_hint(GeomVertexArrayData::UsageHint usage_hint) { CDWriter cdata(_cycler); cdata->_usage_hint = usage_hint; - cdata->_modified = qpGeom::get_next_modified(); + cdata->_modified = Geom::get_next_modified(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::output +// Function: GeomVertexArrayData::output // Access: Published // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexArrayData:: +void GeomVertexArrayData:: output(ostream &out) const { out << get_num_rows() << " rows: " << *get_array_format(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::write +// Function: GeomVertexArrayData::write // Access: Published // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexArrayData:: +void GeomVertexArrayData:: write(ostream &out, int indent_level) const { _array_format->write_with_data(out, indent_level, this); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::modify_data +// Function: GeomVertexArrayData::modify_data // Access: Public // Description: Returns a modifiable pointer to the actual vertex // array, so that application code may directly // manipulate it. Use with caution. //////////////////////////////////////////////////////////////////// -PTA_uchar qpGeomVertexArrayData:: +PTA_uchar GeomVertexArrayData:: modify_data() { // Perform copy-on-write: if the reference count on the vertex data // is greater than 1, assume some other GeomVertexData has the same @@ -198,26 +202,26 @@ modify_data() { cdata->_data = PTA_uchar(); cdata->_data.v() = orig_data.v(); } - cdata->_modified = qpGeom::get_next_modified(); + cdata->_modified = Geom::get_next_modified(); return cdata->_data; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::set_data +// Function: GeomVertexArrayData::set_data // Access: Public // Description: Replaces the vertex data array with a completely new // array. //////////////////////////////////////////////////////////////////// -void qpGeomVertexArrayData:: +void GeomVertexArrayData:: set_data(CPTA_uchar array) { CDWriter cdata(_cycler); cdata->_data = (PTA_uchar &)array; - cdata->_modified = qpGeom::get_next_modified(); + cdata->_modified = Geom::get_next_modified(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::prepare +// Function: GeomVertexArrayData::prepare // Access: Public // Description: Indicates that the data should be enqueued to be // prepared in the indicated prepared_objects at the @@ -228,13 +232,13 @@ set_data(CPTA_uchar array) { // Use this function instead of prepare_now() to preload // datas from a user interface standpoint. //////////////////////////////////////////////////////////////////// -void qpGeomVertexArrayData:: +void GeomVertexArrayData:: prepare(PreparedGraphicsObjects *prepared_objects) { prepared_objects->enqueue_vertex_buffer(this); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::prepare_now +// Function: GeomVertexArrayData::prepare_now // Access: Public // Description: Creates a context for the data on the particular // GSG, if it does not already exist. Returns the new @@ -249,7 +253,7 @@ prepare(PreparedGraphicsObjects *prepared_objects) { // explicitly prepared by the user before it may be // rendered. //////////////////////////////////////////////////////////////////// -VertexBufferContext *qpGeomVertexArrayData:: +VertexBufferContext *GeomVertexArrayData:: prepare_now(PreparedGraphicsObjects *prepared_objects, GraphicsStateGuardianBase *gsg) { Contexts::const_iterator ci; @@ -266,13 +270,13 @@ prepare_now(PreparedGraphicsObjects *prepared_objects, } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::release +// Function: GeomVertexArrayData::release // Access: Public // Description: Frees the data context only on the indicated object, // if it exists there. Returns true if it was released, // false if it had not been prepared. //////////////////////////////////////////////////////////////////// -bool qpGeomVertexArrayData:: +bool GeomVertexArrayData:: release(PreparedGraphicsObjects *prepared_objects) { Contexts::iterator ci; ci = _contexts.find(prepared_objects); @@ -287,13 +291,13 @@ release(PreparedGraphicsObjects *prepared_objects) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::release_all +// Function: GeomVertexArrayData::release_all // Access: Public // Description: Frees the context allocated on all objects for which // the data has been declared. Returns the number of // contexts which have been freed. //////////////////////////////////////////////////////////////////// -int qpGeomVertexArrayData:: +int GeomVertexArrayData:: release_all() { // We have to traverse a copy of the _contexts list, because the // PreparedGraphicsObjects object will call clear_prepared() in response @@ -317,7 +321,7 @@ release_all() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::clear_prepared +// Function: GeomVertexArrayData::clear_prepared // Access: Private // Description: Removes the indicated PreparedGraphicsObjects table // from the data array's table, without actually @@ -326,7 +330,7 @@ release_all() { // PreparedGraphicsObjects::release_vertex_buffer(); it should // never be called by user code. //////////////////////////////////////////////////////////////////// -void qpGeomVertexArrayData:: +void GeomVertexArrayData:: clear_prepared(PreparedGraphicsObjects *prepared_objects) { Contexts::iterator ci; ci = _contexts.find(prepared_objects); @@ -340,54 +344,104 @@ clear_prepared(PreparedGraphicsObjects *prepared_objects) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::register_with_read_factory +// Function: GeomVertexArrayData::reverse_data_endianness +// Access: Private +// Description: Returns a new data array with all numeric values +// expressed in the indicated array reversed, +// byte-for-byte, to convert littleendian to bigendian +// and vice-versa. +//////////////////////////////////////////////////////////////////// +PTA_uchar GeomVertexArrayData:: +reverse_data_endianness(const PTA_uchar &data) { + // First, make a complete copy of the data. + PTA_uchar new_data; + new_data.v() = data.v(); + + int num_columns = _array_format->get_num_columns(); + + // Now, walk through each row of the data. + unsigned char *begin = new_data; + unsigned char *end = new_data + new_data.size(); + for (unsigned char *row_data = begin; + row_data < end; + row_data += _array_format->get_stride()) { + nassertr(row_data + _array_format->get_stride() <= end, new_data); + + // For each row, visit all of the columns; and for each column, + // visit all of the components of that column. + for (int ci = 0; ci < num_columns; ++ci) { + const GeomVertexColumn *col = _array_format->get_column(ci); + int component_bytes = col->get_component_bytes(); + if (component_bytes > 1) { + unsigned char *col_data = row_data + col->get_start(); + int num_components = col->get_num_components(); + for (int cj = 0; cj < num_components; ++cj) { + // Reverse the bytes of each component. + ReversedNumericData nd(col_data, component_bytes); + nd.store_value(col_data, component_bytes); + col_data += component_bytes; + } + } + } + } + + return new_data; +} + +//////////////////////////////////////////////////////////////////// +// Function: GeomVertexArrayData::register_with_read_factory // Access: Public, Static // Description: Tells the BamReader how to create objects of type -// qpGeomVertexArrayData. +// GeomVertexArrayData. //////////////////////////////////////////////////////////////////// -void qpGeomVertexArrayData:: +void GeomVertexArrayData:: register_with_read_factory() { BamReader::get_factory()->register_factory(get_class_type(), make_from_bam); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::write_datagram +// Function: GeomVertexArrayData::write_datagram // Access: Public, Virtual // Description: Writes the contents of this object to the datagram // for shipping out to a Bam file. //////////////////////////////////////////////////////////////////// -void qpGeomVertexArrayData:: +void GeomVertexArrayData:: write_datagram(BamWriter *manager, Datagram &dg) { TypedWritableReferenceCount::write_datagram(manager, dg); manager->write_pointer(dg, _array_format); - - manager->write_cdata(dg, _cycler); + manager->write_cdata(dg, _cycler, this); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::write_raw_data -// Access: Public, Static +// Function: GeomVertexArrayData::write_raw_data +// Access: Public // Description: Called by CData::write_datagram to write the raw data // of the array to the indicated datagram. //////////////////////////////////////////////////////////////////// -void qpGeomVertexArrayData:: -write_raw_data(Datagram &dg, const PTA_uchar &data) { - // TODO: account for endianness of host. +void GeomVertexArrayData:: +write_raw_data(BamWriter *manager, Datagram &dg, const PTA_uchar &data) { dg.add_uint32(data.size()); - dg.append_data(data, data.size()); + + if (manager->get_file_endian() == BE_native) { + // For native endianness, we only have to write the data directly. + dg.append_data(data, data.size()); + + } else { + // Otherwise, we have to convert it. + PTA_uchar new_data = reverse_data_endianness(data); + dg.append_data(new_data, new_data.size()); + } } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::read_raw_data -// Access: Public, Static +// Function: GeomVertexArrayData::read_raw_data +// Access: Public // Description: Called by CData::fillin to read the raw data // of the array from the indicated datagram. //////////////////////////////////////////////////////////////////// -PTA_uchar qpGeomVertexArrayData:: -read_raw_data(DatagramIterator &scan) { - // TODO: account for endianness of host. - +PTA_uchar GeomVertexArrayData:: +read_raw_data(BamReader *manager, DatagramIterator &scan) { size_t size = scan.get_uint32(); PTA_uchar data = PTA_uchar::empty_array(size); const unsigned char *source_data = @@ -395,33 +449,47 @@ read_raw_data(DatagramIterator &scan) { memcpy(data, source_data + scan.get_current_index(), size); scan.skip_bytes(size); + if (manager->get_file_endian() != BE_native) { + // For non-native endian files, we have to convert the data. + if (_array_format == (GeomVertexArrayFormat *)NULL) { + // But we can't do that until we've completed the _array_format + // pointer, which tells us how to convert it. + _endian_reversed = true; + } else { + // Since we have the _array_format pointer now, we can reverse + // it immediately (and we should, to support threaded CData + // updates). + data = reverse_data_endianness(data); + } + } + return data; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::complete_pointers +// Function: GeomVertexArrayData::complete_pointers // Access: Public, Virtual // Description: Receives an array of pointers, one for each time // manager->read_pointer() was called in fillin(). // Returns the number of pointers processed. //////////////////////////////////////////////////////////////////// -int qpGeomVertexArrayData:: +int GeomVertexArrayData:: complete_pointers(TypedWritable **p_list, BamReader *manager) { int pi = TypedWritableReferenceCount::complete_pointers(p_list, manager); - _array_format = DCAST(qpGeomVertexArrayFormat, p_list[pi++]); + _array_format = DCAST(GeomVertexArrayFormat, p_list[pi++]); return pi; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::finalize +// Function: GeomVertexArrayData::finalize // Access: Public, Virtual // Description: Called by the BamReader to perform any final actions // needed for setting up the object after all objects // have been read and all pointers have been completed. //////////////////////////////////////////////////////////////////// -void qpGeomVertexArrayData:: +void GeomVertexArrayData:: finalize(BamReader *manager) { // Now we need to register the format that we have read from the bam // file (since it doesn't come out of the bam file automatically @@ -432,24 +500,29 @@ finalize(BamReader *manager) { CDWriter cdata(_cycler); - CPT(qpGeomVertexArrayFormat) new_array_format = - qpGeomVertexArrayFormat::register_format(_array_format); + CPT(GeomVertexArrayFormat) new_array_format = + GeomVertexArrayFormat::register_format(_array_format); manager->change_pointer(_array_format, new_array_format); _array_format = new_array_format; + + if (_endian_reversed) { + // Now is the time to endian-reverse the data. + cdata->_data = reverse_data_endianness(cdata->_data); + } } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::make_from_bam +// Function: GeomVertexArrayData::make_from_bam // Access: Protected, Static // Description: This function is called by the BamReader's factory -// when a new object of type qpGeomVertexArrayData is encountered -// in the Bam file. It should create the qpGeomVertexArrayData +// when a new object of type GeomVertexArrayData is encountered +// in the Bam file. It should create the GeomVertexArrayData // and extract its information from the file. //////////////////////////////////////////////////////////////////// -TypedWritable *qpGeomVertexArrayData:: +TypedWritable *GeomVertexArrayData:: make_from_bam(const FactoryParams ¶ms) { - qpGeomVertexArrayData *object = new qpGeomVertexArrayData; + GeomVertexArrayData *object = new GeomVertexArrayData; DatagramIterator scan; BamReader *manager; @@ -461,54 +534,55 @@ make_from_bam(const FactoryParams ¶ms) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::fillin +// Function: GeomVertexArrayData::fillin // Access: Protected // Description: This internal function is called by make_from_bam to // read in all of the relevant data from the BamFile for -// the new qpGeomVertexArrayData. +// the new GeomVertexArrayData. //////////////////////////////////////////////////////////////////// -void qpGeomVertexArrayData:: +void GeomVertexArrayData:: fillin(DatagramIterator &scan, BamReader *manager) { TypedWritableReferenceCount::fillin(scan, manager); manager->read_pointer(scan); - - manager->read_cdata(scan, _cycler); + manager->read_cdata(scan, _cycler, this); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::CData::make_copy +// Function: GeomVertexArrayData::CData::make_copy // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -CycleData *qpGeomVertexArrayData::CData:: +CycleData *GeomVertexArrayData::CData:: make_copy() const { return new CData(*this); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::CData::write_datagram +// Function: GeomVertexArrayData::CData::write_datagram // Access: Public, Virtual // Description: Writes the contents of this object to the datagram // for shipping out to a Bam file. //////////////////////////////////////////////////////////////////// -void qpGeomVertexArrayData::CData:: -write_datagram(BamWriter *manager, Datagram &dg) const { +void GeomVertexArrayData::CData:: +write_datagram(BamWriter *manager, Datagram &dg, void *extra_data) const { + GeomVertexArrayData *array_data = (GeomVertexArrayData *)extra_data; dg.add_uint8(_usage_hint); - WRITE_PTA(manager, dg, write_raw_data, _data); + WRITE_PTA(manager, dg, array_data->write_raw_data, _data); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayData::CData::fillin +// Function: GeomVertexArrayData::CData::fillin // Access: Public, Virtual // Description: This internal function is called by make_from_bam to // read in all of the relevant data from the BamFile for -// the new qpGeomVertexArrayData. +// the new GeomVertexArrayData. //////////////////////////////////////////////////////////////////// -void qpGeomVertexArrayData::CData:: -fillin(DatagramIterator &scan, BamReader *manager) { +void GeomVertexArrayData::CData:: +fillin(DatagramIterator &scan, BamReader *manager, void *extra_data) { + GeomVertexArrayData *array_data = (GeomVertexArrayData *)extra_data; _usage_hint = (UsageHint)scan.get_uint8(); - READ_PTA(manager, scan, read_raw_data, _data); + READ_PTA(manager, scan, array_data->read_raw_data, _data); - _modified = qpGeom::get_next_modified(); + _modified = Geom::get_next_modified(); } diff --git a/panda/src/gobj/qpgeomVertexArrayData.h b/panda/src/gobj/geomVertexArrayData.h similarity index 78% rename from panda/src/gobj/qpgeomVertexArrayData.h rename to panda/src/gobj/geomVertexArrayData.h index 15b50550f2..5c37174099 100644 --- a/panda/src/gobj/qpgeomVertexArrayData.h +++ b/panda/src/gobj/geomVertexArrayData.h @@ -1,4 +1,4 @@ -// Filename: qpgeomVertexArrayData.h +// Filename: geomVertexArrayData.h // Created by: drose (17Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,13 +16,13 @@ // //////////////////////////////////////////////////////////////////// -#ifndef qpGEOMVERTEXARRAYDATA_H -#define qpGEOMVERTEXARRAYDATA_H +#ifndef GEOMVERTEXARRAYDATA_H +#define GEOMVERTEXARRAYDATA_H #include "pandabase.h" #include "typedWritableReferenceCount.h" -#include "qpgeomVertexArrayFormat.h" -#include "qpgeomEnums.h" +#include "geomVertexArrayFormat.h" +#include "geomEnums.h" #include "pta_uchar.h" #include "updateSeq.h" #include "cycleData.h" @@ -36,7 +36,7 @@ class VertexBufferContext; class GraphicsStateGuardianBase; //////////////////////////////////////////////////////////////////// -// Class : qpGeomVertexArrayData +// Class : GeomVertexArrayData // Description : This is the data for one array of a GeomVertexData // structure. Many GeomVertexData structures will only // define one array, with all data elements interleaved @@ -53,21 +53,19 @@ class GraphicsStateGuardianBase; // organizing structure, and see // GeomVertexReader/Writer/Rewriter for high-level tools // to manipulate the actual vertex data. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// -class EXPCL_PANDA qpGeomVertexArrayData : public TypedWritableReferenceCount, public qpGeomEnums { +class EXPCL_PANDA GeomVertexArrayData : public TypedWritableReferenceCount, public GeomEnums { private: - qpGeomVertexArrayData(); + GeomVertexArrayData(); PUBLISHED: - qpGeomVertexArrayData(const qpGeomVertexArrayFormat *array_format, + GeomVertexArrayData(const GeomVertexArrayFormat *array_format, UsageHint usage_hint); - qpGeomVertexArrayData(const qpGeomVertexArrayData ©); - void operator = (const qpGeomVertexArrayData ©); - virtual ~qpGeomVertexArrayData(); + GeomVertexArrayData(const GeomVertexArrayData ©); + void operator = (const GeomVertexArrayData ©); + virtual ~GeomVertexArrayData(); - INLINE const qpGeomVertexArrayFormat *get_array_format() const; + INLINE const GeomVertexArrayFormat *get_array_format() const; INLINE UsageHint get_usage_hint() const; void set_usage_hint(UsageHint usage_hint); @@ -99,8 +97,9 @@ public: private: void clear_prepared(PreparedGraphicsObjects *prepared_objects); + PTA_uchar reverse_data_endianness(const PTA_uchar &data); - CPT(qpGeomVertexArrayFormat) _array_format; + CPT(GeomVertexArrayFormat) _array_format; // A GeomVertexArrayData keeps a list (actually, a map) of all the // PreparedGraphicsObjects tables that it has been prepared into. @@ -110,14 +109,20 @@ private: typedef pmap Contexts; Contexts _contexts; + // This is only used when reading from a bam file. It is set true + // to indicate the data must be endian-reversed in finalize(). + bool _endian_reversed; + // This is the data that must be cycled between pipeline stages. class EXPCL_PANDA CData : public CycleData { public: INLINE CData(); INLINE CData(const CData ©); virtual CycleData *make_copy() const; - virtual void write_datagram(BamWriter *manager, Datagram &dg) const; - virtual void fillin(DatagramIterator &scan, BamReader *manager); + virtual void write_datagram(BamWriter *manager, Datagram &dg, + void *extra_data) const; + virtual void fillin(DatagramIterator &scan, BamReader *manager, + void *extra_data); UsageHint _usage_hint; PTA_uchar _data; @@ -131,8 +136,8 @@ private: public: static void register_with_read_factory(); virtual void write_datagram(BamWriter *manager, Datagram &dg); - static void write_raw_data(Datagram &dg, const PTA_uchar &data); - static PTA_uchar read_raw_data(DatagramIterator &source); + void write_raw_data(BamWriter *manager, Datagram &dg, const PTA_uchar &data); + PTA_uchar read_raw_data(BamReader *manager, DatagramIterator &source); virtual int complete_pointers(TypedWritable **plist, BamReader *manager); virtual void finalize(BamReader *manager); @@ -147,7 +152,7 @@ public: } static void init_type() { TypedWritableReferenceCount::init_type(); - register_type(_type_handle, "qpGeomVertexArrayData", + register_type(_type_handle, "GeomVertexArrayData", TypedWritableReferenceCount::get_class_type()); } virtual TypeHandle get_type() const { @@ -158,13 +163,13 @@ public: private: static TypeHandle _type_handle; - friend class qpGeomCacheManager; - friend class qpGeomVertexData; + friend class GeomCacheManager; + friend class GeomVertexData; friend class PreparedGraphicsObjects; }; -INLINE ostream &operator << (ostream &out, const qpGeomVertexArrayData &obj); +INLINE ostream &operator << (ostream &out, const GeomVertexArrayData &obj); -#include "qpgeomVertexArrayData.I" +#include "geomVertexArrayData.I" #endif diff --git a/panda/src/gobj/qpgeomVertexArrayFormat.I b/panda/src/gobj/geomVertexArrayFormat.I similarity index 77% rename from panda/src/gobj/qpgeomVertexArrayFormat.I rename to panda/src/gobj/geomVertexArrayFormat.I index 41148ce9ec..cc277985d6 100644 --- a/panda/src/gobj/qpgeomVertexArrayFormat.I +++ b/panda/src/gobj/geomVertexArrayFormat.I @@ -1,4 +1,4 @@ -// Filename: qpgeomVertexArrayFormat.I +// Filename: geomVertexArrayFormat.I // Created by: drose (06Mar05) // //////////////////////////////////////////////////////////////////// @@ -18,20 +18,20 @@ //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::is_registered +// Function: GeomVertexArrayFormat::is_registered // Access: Published // Description: Returns true if this format has been registered, // false if it has not. It may not be used for a Geom // until it has been registered, but once registered, it // may no longer be modified. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexArrayFormat:: +INLINE bool GeomVertexArrayFormat:: is_registered() const { return _is_registered; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::register_format +// Function: GeomVertexArrayFormat::register_format // Access: Published, Static // Description: Adds the indicated format to the registry, if there // is not an equivalent format already there; in either @@ -44,48 +44,48 @@ is_registered() const { // GeomVertexFormat::register_format() automatically // registers all of the nested array formats. //////////////////////////////////////////////////////////////////// -INLINE CPT(qpGeomVertexArrayFormat) qpGeomVertexArrayFormat:: -register_format(const qpGeomVertexArrayFormat *format) { - return get_registry()->register_format((qpGeomVertexArrayFormat *)format); +INLINE CPT(GeomVertexArrayFormat) GeomVertexArrayFormat:: +register_format(const GeomVertexArrayFormat *format) { + return get_registry()->register_format((GeomVertexArrayFormat *)format); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::get_stride +// Function: GeomVertexArrayFormat::get_stride // Access: Published // Description: Returns the total number of bytes reserved in the // array for each vertex. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexArrayFormat:: +INLINE int GeomVertexArrayFormat:: get_stride() const { return _stride; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::set_stride +// Function: GeomVertexArrayFormat::set_stride // Access: Published // Description: Changes the total number of bytes reserved in the // array for each vertex. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexArrayFormat:: +INLINE void GeomVertexArrayFormat:: set_stride(int stride) { nassertv(!_is_registered); _stride = stride; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::get_total_bytes +// Function: GeomVertexArrayFormat::get_total_bytes // Access: Published // Description: Returns the total number of bytes used by the data // types within the format, including gaps between // elements. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexArrayFormat:: +INLINE int GeomVertexArrayFormat:: get_total_bytes() const { return _total_bytes; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::get_pad_to +// Function: GeomVertexArrayFormat::get_pad_to // Access: Published // Description: Returns the byte divisor to which the data record // must be padded to meet hardware limitations. For @@ -93,28 +93,28 @@ get_total_bytes() const { // automatically rounded up to the next multiple of 4 // bytes. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexArrayFormat:: +INLINE int GeomVertexArrayFormat:: get_pad_to() const { return _pad_to; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::get_num_columns +// Function: GeomVertexArrayFormat::get_num_columns // Access: Published // Description: Returns the number of different columns in the // array. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexArrayFormat:: +INLINE int GeomVertexArrayFormat:: get_num_columns() const { return (int)_columns.size(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::get_column +// Function: GeomVertexArrayFormat::get_column // Access: Published // Description: Returns the ith column of the array. //////////////////////////////////////////////////////////////////// -INLINE const qpGeomVertexColumn *qpGeomVertexArrayFormat:: +INLINE const GeomVertexColumn *GeomVertexArrayFormat:: get_column(int i) const { nassertr(i >= 0 && i < (int)_columns.size(), NULL); consider_sort_columns(); @@ -122,22 +122,22 @@ get_column(int i) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::has_column +// Function: GeomVertexArrayFormat::has_column // Access: Published // Description: Returns true if the array has the named column, // false otherwise. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexArrayFormat:: +INLINE bool GeomVertexArrayFormat:: has_column(const InternalName *name) const { - return (get_column(name) != (qpGeomVertexColumn *)NULL); + return (get_column(name) != (GeomVertexColumn *)NULL); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::get_registry +// Function: GeomVertexArrayFormat::get_registry // Access: Private // Description: Returns the global registry object. //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexArrayFormat::Registry *qpGeomVertexArrayFormat:: +INLINE GeomVertexArrayFormat::Registry *GeomVertexArrayFormat:: get_registry() { if (_registry == (Registry *)NULL) { make_registry(); @@ -146,19 +146,19 @@ get_registry() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::consider_sort_columns +// Function: GeomVertexArrayFormat::consider_sort_columns // Access: Private // Description: Resorts the _columns vector if necessary. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexArrayFormat:: +INLINE void GeomVertexArrayFormat:: consider_sort_columns() const { if (_columns_unsorted) { - ((qpGeomVertexArrayFormat *)this)->sort_columns(); + ((GeomVertexArrayFormat *)this)->sort_columns(); } } INLINE ostream & -operator << (ostream &out, const qpGeomVertexArrayFormat &obj) { +operator << (ostream &out, const GeomVertexArrayFormat &obj) { obj.output(out); return out; } diff --git a/panda/src/gobj/qpgeomVertexArrayFormat.cxx b/panda/src/gobj/geomVertexArrayFormat.cxx similarity index 73% rename from panda/src/gobj/qpgeomVertexArrayFormat.cxx rename to panda/src/gobj/geomVertexArrayFormat.cxx index d74e75ccb2..b2b48cfc63 100644 --- a/panda/src/gobj/qpgeomVertexArrayFormat.cxx +++ b/panda/src/gobj/geomVertexArrayFormat.cxx @@ -1,4 +1,4 @@ -// Filename: qpgeomVertexArrayFormat.cxx +// Filename: geomVertexArrayFormat.cxx // Created by: drose (06Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,25 +16,25 @@ // //////////////////////////////////////////////////////////////////// -#include "qpgeomVertexFormat.h" -#include "qpgeomVertexColumn.h" -#include "qpgeomVertexData.h" -#include "qpgeomVertexReader.h" +#include "geomVertexFormat.h" +#include "geomVertexColumn.h" +#include "geomVertexData.h" +#include "geomVertexReader.h" #include "indent.h" #include "bamReader.h" #include "bamWriter.h" #include "indirectLess.h" -qpGeomVertexArrayFormat::Registry *qpGeomVertexArrayFormat::_registry = NULL; -TypeHandle qpGeomVertexArrayFormat::_type_handle; +GeomVertexArrayFormat::Registry *GeomVertexArrayFormat::_registry = NULL; +TypeHandle GeomVertexArrayFormat::_type_handle; //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::Constructor +// Function: GeomVertexArrayFormat::Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -qpGeomVertexArrayFormat:: -qpGeomVertexArrayFormat() : +GeomVertexArrayFormat:: +GeomVertexArrayFormat() : _is_registered(false), _stride(0), _total_bytes(0), @@ -44,14 +44,14 @@ qpGeomVertexArrayFormat() : } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::Constructor +// Function: GeomVertexArrayFormat::Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -qpGeomVertexArrayFormat:: -qpGeomVertexArrayFormat(const InternalName *name0, int num_components0, - qpGeomVertexArrayFormat::NumericType numeric_type0, - qpGeomVertexArrayFormat::Contents contents0) : +GeomVertexArrayFormat:: +GeomVertexArrayFormat(const InternalName *name0, int num_components0, + GeomVertexArrayFormat::NumericType numeric_type0, + GeomVertexArrayFormat::Contents contents0) : _is_registered(false), _stride(0), _total_bytes(0), @@ -62,17 +62,17 @@ qpGeomVertexArrayFormat(const InternalName *name0, int num_components0, } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::Constructor +// Function: GeomVertexArrayFormat::Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -qpGeomVertexArrayFormat:: -qpGeomVertexArrayFormat(const InternalName *name0, int num_components0, - qpGeomVertexArrayFormat::NumericType numeric_type0, - qpGeomVertexArrayFormat::Contents contents0, - const InternalName *name1, int num_components1, - qpGeomVertexArrayFormat::NumericType numeric_type1, - qpGeomVertexArrayFormat::Contents contents1) : +GeomVertexArrayFormat:: +GeomVertexArrayFormat(const InternalName *name0, int num_components0, + GeomVertexArrayFormat::NumericType numeric_type0, + GeomVertexArrayFormat::Contents contents0, + const InternalName *name1, int num_components1, + GeomVertexArrayFormat::NumericType numeric_type1, + GeomVertexArrayFormat::Contents contents1) : _is_registered(false), _stride(0), _total_bytes(0), @@ -84,20 +84,20 @@ qpGeomVertexArrayFormat(const InternalName *name0, int num_components0, } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::Constructor +// Function: GeomVertexArrayFormat::Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -qpGeomVertexArrayFormat:: -qpGeomVertexArrayFormat(const InternalName *name0, int num_components0, - qpGeomVertexArrayFormat::NumericType numeric_type0, - qpGeomVertexArrayFormat::Contents contents0, - const InternalName *name1, int num_components1, - qpGeomVertexArrayFormat::NumericType numeric_type1, - qpGeomVertexArrayFormat::Contents contents1, - const InternalName *name2, int num_components2, - qpGeomVertexArrayFormat::NumericType numeric_type2, - qpGeomVertexArrayFormat::Contents contents2) : +GeomVertexArrayFormat:: +GeomVertexArrayFormat(const InternalName *name0, int num_components0, + GeomVertexArrayFormat::NumericType numeric_type0, + GeomVertexArrayFormat::Contents contents0, + const InternalName *name1, int num_components1, + GeomVertexArrayFormat::NumericType numeric_type1, + GeomVertexArrayFormat::Contents contents1, + const InternalName *name2, int num_components2, + GeomVertexArrayFormat::NumericType numeric_type2, + GeomVertexArrayFormat::Contents contents2) : _is_registered(false), _stride(0), _total_bytes(0), @@ -110,23 +110,23 @@ qpGeomVertexArrayFormat(const InternalName *name0, int num_components0, } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::Constructor +// Function: GeomVertexArrayFormat::Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -qpGeomVertexArrayFormat:: -qpGeomVertexArrayFormat(const InternalName *name0, int num_components0, - qpGeomVertexArrayFormat::NumericType numeric_type0, - qpGeomVertexArrayFormat::Contents contents0, - const InternalName *name1, int num_components1, - qpGeomVertexArrayFormat::NumericType numeric_type1, - qpGeomVertexArrayFormat::Contents contents1, - const InternalName *name2, int num_components2, - qpGeomVertexArrayFormat::NumericType numeric_type2, - qpGeomVertexArrayFormat::Contents contents2, - const InternalName *name3, int num_components3, - qpGeomVertexArrayFormat::NumericType numeric_type3, - qpGeomVertexArrayFormat::Contents contents3) : +GeomVertexArrayFormat:: +GeomVertexArrayFormat(const InternalName *name0, int num_components0, + GeomVertexArrayFormat::NumericType numeric_type0, + GeomVertexArrayFormat::Contents contents0, + const InternalName *name1, int num_components1, + GeomVertexArrayFormat::NumericType numeric_type1, + GeomVertexArrayFormat::Contents contents1, + const InternalName *name2, int num_components2, + GeomVertexArrayFormat::NumericType numeric_type2, + GeomVertexArrayFormat::Contents contents2, + const InternalName *name3, int num_components3, + GeomVertexArrayFormat::NumericType numeric_type3, + GeomVertexArrayFormat::Contents contents3) : _is_registered(false), _stride(0), _total_bytes(0), @@ -140,12 +140,12 @@ qpGeomVertexArrayFormat(const InternalName *name0, int num_components0, } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::Copy Constructor +// Function: GeomVertexArrayFormat::Copy Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -qpGeomVertexArrayFormat:: -qpGeomVertexArrayFormat(const qpGeomVertexArrayFormat ©) : +GeomVertexArrayFormat:: +GeomVertexArrayFormat(const GeomVertexArrayFormat ©) : _is_registered(false), _stride(copy._stride), _total_bytes(copy._total_bytes), @@ -159,12 +159,12 @@ qpGeomVertexArrayFormat(const qpGeomVertexArrayFormat ©) : } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::Copy Assignment Operator +// Function: GeomVertexArrayFormat::Copy Assignment Operator // Access: Published // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexArrayFormat:: -operator = (const qpGeomVertexArrayFormat ©) { +void GeomVertexArrayFormat:: +operator = (const GeomVertexArrayFormat ©) { nassertv(!_is_registered); _stride = copy._stride; _total_bytes = copy._total_bytes; @@ -180,12 +180,12 @@ operator = (const qpGeomVertexArrayFormat ©) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::Destructor +// Function: GeomVertexArrayFormat::Destructor // Access: Published, Virtual // Description: //////////////////////////////////////////////////////////////////// -qpGeomVertexArrayFormat:: -~qpGeomVertexArrayFormat() { +GeomVertexArrayFormat:: +~GeomVertexArrayFormat() { if (is_registered()) { get_registry()->unregister_format(this); } @@ -196,7 +196,7 @@ qpGeomVertexArrayFormat:: } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::add_column +// Function: GeomVertexArrayFormat::add_column // Access: Published // Description: Adds a new column to the specification. This is a // table of per-vertex floating-point numbers such as @@ -207,25 +207,25 @@ qpGeomVertexArrayFormat:: // The return value is the index number of the new data // type. //////////////////////////////////////////////////////////////////// -int qpGeomVertexArrayFormat:: +int GeomVertexArrayFormat:: add_column(const InternalName *name, int num_components, - qpGeomVertexArrayFormat::NumericType numeric_type, - qpGeomVertexArrayFormat::Contents contents, int start) { + GeomVertexArrayFormat::NumericType numeric_type, + GeomVertexArrayFormat::Contents contents, int start) { if (start < 0) { start = _total_bytes; - qpGeomVertexColumn temp_column + GeomVertexColumn temp_column (name, num_components, numeric_type, contents, 0); int pad_to = temp_column.get_component_bytes(); start = ((start + pad_to - 1) / pad_to) * pad_to; } - return add_column(qpGeomVertexColumn(name, num_components, + return add_column(GeomVertexColumn(name, num_components, numeric_type, contents, start)); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::add_column +// Function: GeomVertexArrayFormat::add_column // Access: Published // Description: Adds a new column to the specification. This is a // table of per-vertex floating-point numbers such as @@ -240,8 +240,8 @@ add_column(const InternalName *name, int num_components, // The return value is the index number of the new data // type. //////////////////////////////////////////////////////////////////// -int qpGeomVertexArrayFormat:: -add_column(const qpGeomVertexColumn &column) { +int GeomVertexArrayFormat:: +add_column(const GeomVertexColumn &column) { nassertr(!_is_registered, -1); // Make sure there isn't already a column with this name. @@ -249,8 +249,8 @@ add_column(const qpGeomVertexColumn &column) { // Also make sure there aren't any columns that overlap with this // one. - const qpGeomVertexColumn *orig_column = get_column(column.get_start(), column.get_total_bytes()); - while (orig_column != (const qpGeomVertexColumn *)NULL) { + const GeomVertexColumn *orig_column = get_column(column.get_start(), column.get_total_bytes()); + while (orig_column != (const GeomVertexColumn *)NULL) { remove_column(orig_column->get_name()); orig_column = get_column(column.get_start(), column.get_total_bytes()); } @@ -259,7 +259,7 @@ add_column(const qpGeomVertexColumn &column) { _pad_to = max(_pad_to, column.get_component_bytes()); _stride = max(_stride, ((_total_bytes + _pad_to - 1) / _pad_to) * _pad_to); - qpGeomVertexColumn *new_column = new qpGeomVertexColumn(column); + GeomVertexColumn *new_column = new GeomVertexColumn(column); if (!_columns.empty() && *new_column < *_columns.back()) { _columns_unsorted = true; @@ -273,18 +273,18 @@ add_column(const qpGeomVertexColumn &column) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::remove_column +// Function: GeomVertexArrayFormat::remove_column // Access: Published // Description: Removes the column with the indicated name, if // any. This leaves a gap in the byte structure. //////////////////////////////////////////////////////////////////// -void qpGeomVertexArrayFormat:: +void GeomVertexArrayFormat:: remove_column(const InternalName *name) { nassertv(!_is_registered); ColumnsByName::iterator ni; ni = _columns_by_name.find(name); if (ni != _columns_by_name.end()) { - qpGeomVertexColumn *column = (*ni).second; + GeomVertexColumn *column = (*ni).second; _columns_by_name.erase(ni); Columns::iterator ci; @@ -300,19 +300,19 @@ remove_column(const InternalName *name) { _total_bytes = 0; } else { consider_sort_columns(); - qpGeomVertexColumn *last = _columns.back(); + GeomVertexColumn *last = _columns.back(); _total_bytes = last->get_start() + last->get_total_bytes(); } } } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::clear_columns +// Function: GeomVertexArrayFormat::clear_columns // Access: Published // Description: Removes all columns previously added, sets the // stride to zero, and prepares to start over. //////////////////////////////////////////////////////////////////// -void qpGeomVertexArrayFormat:: +void GeomVertexArrayFormat:: clear_columns() { _columns.clear(); _columns_by_name.clear(); @@ -323,12 +323,12 @@ clear_columns() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::get_column +// Function: GeomVertexArrayFormat::get_column // Access: Published // Description: Returns the specification with the indicated name, or // NULL if the name is not used. //////////////////////////////////////////////////////////////////// -const qpGeomVertexColumn *qpGeomVertexArrayFormat:: +const GeomVertexColumn *GeomVertexArrayFormat:: get_column(const InternalName *name) const { ColumnsByName::const_iterator ni; ni = _columns_by_name.find(name); @@ -339,18 +339,18 @@ get_column(const InternalName *name) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::get_column +// Function: GeomVertexArrayFormat::get_column // Access: Published // Description: Returns the first specification that overlaps with // any of the indicated bytes in the range, or NULL if // none do. //////////////////////////////////////////////////////////////////// -const qpGeomVertexColumn *qpGeomVertexArrayFormat:: +const GeomVertexColumn *GeomVertexArrayFormat:: get_column(int start_byte, int num_bytes) const { consider_sort_columns(); Columns::const_iterator ci; for (ci = _columns.begin(); ci != _columns.end(); ++ci) { - const qpGeomVertexColumn *column = (*ci); + const GeomVertexColumn *column = (*ci); if (column->overlaps_with(start_byte, num_bytes)) { return column; } @@ -360,7 +360,7 @@ get_column(int start_byte, int num_bytes) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::is_data_subset_of +// Function: GeomVertexArrayFormat::is_data_subset_of // Access: Published // Description: Returns true if all of the fields in this array // format are also present and equivalent in the other @@ -369,8 +369,8 @@ get_column(int start_byte, int num_bytes) const { // share the same data pointer as the other format (with // possibly some unused gaps). //////////////////////////////////////////////////////////////////// -bool qpGeomVertexArrayFormat:: -is_data_subset_of(const qpGeomVertexArrayFormat &other) const { +bool GeomVertexArrayFormat:: +is_data_subset_of(const GeomVertexArrayFormat &other) const { if (_columns.size() > other._columns.size() || get_stride() != other.get_stride()) { return false; @@ -392,34 +392,34 @@ is_data_subset_of(const qpGeomVertexArrayFormat &other) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::output +// Function: GeomVertexArrayFormat::output // Access: Published // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexArrayFormat:: +void GeomVertexArrayFormat:: output(ostream &out) const { Columns::const_iterator ci; out << "["; for (ci = _columns.begin(); ci != _columns.end(); ++ci) { - const qpGeomVertexColumn *column = (*ci); + const GeomVertexColumn *column = (*ci); out << " " << *column; } out << " ]"; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::write +// Function: GeomVertexArrayFormat::write // Access: Published // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexArrayFormat:: +void GeomVertexArrayFormat:: write(ostream &out, int indent_level) const { indent(out, indent_level) << "Array format (stride = " << get_stride() << "):\n"; consider_sort_columns(); Columns::const_iterator ci; for (ci = _columns.begin(); ci != _columns.end(); ++ci) { - const qpGeomVertexColumn *column = (*ci); + const GeomVertexColumn *column = (*ci); indent(out, indent_level + 2) << *column << " " << column->get_numeric_type() @@ -429,17 +429,17 @@ write(ostream &out, int indent_level) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::write_with_data +// Function: GeomVertexArrayFormat::write_with_data // Access: Published // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexArrayFormat:: +void GeomVertexArrayFormat:: write_with_data(ostream &out, int indent_level, - const qpGeomVertexArrayData *array_data) const { + const GeomVertexArrayData *array_data) const { consider_sort_columns(); int num_rows = array_data->get_num_rows(); - qpGeomVertexReader reader(array_data); + GeomVertexReader reader(array_data); for (int i = 0; i < num_rows; i++) { indent(out, indent_level) @@ -447,7 +447,7 @@ write_with_data(ostream &out, int indent_level, reader.set_row(i); Columns::const_iterator ci; for (ci = _columns.begin(); ci != _columns.end(); ++ci) { - const qpGeomVertexColumn *column = (*ci); + const GeomVertexColumn *column = (*ci); int num_values = min(column->get_num_values(), 4); reader.set_column(0, column); const LVecBase4f &d = reader.get_data4f(); @@ -463,12 +463,12 @@ write_with_data(ostream &out, int indent_level, } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::compare_to +// Function: GeomVertexArrayFormat::compare_to // Access: Public // Description: //////////////////////////////////////////////////////////////////// -int qpGeomVertexArrayFormat:: -compare_to(const qpGeomVertexArrayFormat &other) const { +int GeomVertexArrayFormat:: +compare_to(const GeomVertexArrayFormat &other) const { if (_stride != other._stride) { return _stride - other._stride; } @@ -494,23 +494,23 @@ compare_to(const qpGeomVertexArrayFormat &other) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::sort_columns +// Function: GeomVertexArrayFormat::sort_columns // Access: Private // Description: Resorts the _columns vector so that the columns // are listed in the same order they appear in the // record. //////////////////////////////////////////////////////////////////// -void qpGeomVertexArrayFormat:: +void GeomVertexArrayFormat:: sort_columns() { - sort(_columns.begin(), _columns.end(), IndirectLess()); + sort(_columns.begin(), _columns.end(), IndirectLess()); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::make_registry +// Function: GeomVertexArrayFormat::make_registry // Access: Private // Description: Returns the global registry object. //////////////////////////////////////////////////////////////////// -void qpGeomVertexArrayFormat:: +void GeomVertexArrayFormat:: make_registry() { if (_registry == (Registry *)NULL) { _registry = new Registry; @@ -518,45 +518,45 @@ make_registry() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::do_register +// Function: GeomVertexArrayFormat::do_register // Access: Private // Description: Called internally when the format is registered. //////////////////////////////////////////////////////////////////// -void qpGeomVertexArrayFormat:: +void GeomVertexArrayFormat:: do_register() { nassertv(!_is_registered); _is_registered = true; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::do_unregister +// Function: GeomVertexArrayFormat::do_unregister // Access: Private // Description: Called internally when the format is unregistered. //////////////////////////////////////////////////////////////////// -void qpGeomVertexArrayFormat:: +void GeomVertexArrayFormat:: do_unregister() { nassertv(_is_registered); _is_registered = false; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::register_with_read_factory +// Function: GeomVertexArrayFormat::register_with_read_factory // Access: Public, Static // Description: Tells the BamReader how to create objects of type -// qpGeomVertexArrayFormat. +// GeomVertexArrayFormat. //////////////////////////////////////////////////////////////////// -void qpGeomVertexArrayFormat:: +void GeomVertexArrayFormat:: register_with_read_factory() { BamReader::get_factory()->register_factory(get_class_type(), make_from_bam); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::write_datagram +// Function: GeomVertexArrayFormat::write_datagram // Access: Public, Virtual // Description: Writes the contents of this object to the datagram // for shipping out to a Bam file. //////////////////////////////////////////////////////////////////// -void qpGeomVertexArrayFormat:: +void GeomVertexArrayFormat:: write_datagram(BamWriter *manager, Datagram &dg) { TypedWritableReferenceCount::write_datagram(manager, dg); @@ -569,25 +569,25 @@ write_datagram(BamWriter *manager, Datagram &dg) { dg.add_uint16(_columns.size()); Columns::iterator ci; for (ci = _columns.begin(); ci != _columns.end(); ++ci) { - qpGeomVertexColumn *column = (*ci); + GeomVertexColumn *column = (*ci); column->write_datagram(manager, dg); } } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::complete_pointers +// Function: GeomVertexArrayFormat::complete_pointers // Access: Public, Virtual // Description: Receives an array of pointers, one for each time // manager->read_pointer() was called in fillin(). // Returns the number of pointers processed. //////////////////////////////////////////////////////////////////// -int qpGeomVertexArrayFormat:: +int GeomVertexArrayFormat:: complete_pointers(TypedWritable **p_list, BamReader *manager) { int pi = TypedWritableReferenceCount::complete_pointers(p_list, manager); Columns::iterator ci; for (ci = _columns.begin(); ci != _columns.end(); ++ci) { - qpGeomVertexColumn *column = (*ci); + GeomVertexColumn *column = (*ci); pi += column->complete_pointers(p_list + pi, manager); } @@ -595,13 +595,13 @@ complete_pointers(TypedWritable **p_list, BamReader *manager) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::finalize +// Function: GeomVertexArrayFormat::finalize // Access: Public, Virtual // Description: Called by the BamReader to perform any final actions // needed for setting up the object after all objects // have been read and all pointers have been completed. //////////////////////////////////////////////////////////////////// -void qpGeomVertexArrayFormat:: +void GeomVertexArrayFormat:: finalize(BamReader *manager) { // Now we can build up the _columns_by_name index. We have to wait // until finalize(), since the index is based on the nested name @@ -610,23 +610,23 @@ finalize(BamReader *manager) { _columns_by_name.clear(); Columns::iterator ci; for (ci = _columns.begin(); ci != _columns.end(); ++ci) { - qpGeomVertexColumn *column = (*ci); + GeomVertexColumn *column = (*ci); _columns_by_name.insert(ColumnsByName::value_type(column->get_name(), column)); } } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::make_from_bam +// Function: GeomVertexArrayFormat::make_from_bam // Access: Protected, Static // Description: This function is called by the BamReader's factory -// when a new object of type qpGeomVertexArrayFormat is +// when a new object of type GeomVertexArrayFormat is // encountered in the Bam file. It should create the -// qpGeomVertexArrayFormat and extract its information +// GeomVertexArrayFormat and extract its information // from the file. //////////////////////////////////////////////////////////////////// -TypedWritable *qpGeomVertexArrayFormat:: +TypedWritable *GeomVertexArrayFormat:: make_from_bam(const FactoryParams ¶ms) { - qpGeomVertexArrayFormat *object = new qpGeomVertexArrayFormat; + GeomVertexArrayFormat *object = new GeomVertexArrayFormat; DatagramIterator scan; BamReader *manager; @@ -638,13 +638,13 @@ make_from_bam(const FactoryParams ¶ms) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::fillin +// Function: GeomVertexArrayFormat::fillin // Access: Protected // Description: This internal function is called by make_from_bam to // read in all of the relevant data from the BamFile for -// the new qpGeomVertexArrayFormat. +// the new GeomVertexArrayFormat. //////////////////////////////////////////////////////////////////// -void qpGeomVertexArrayFormat:: +void GeomVertexArrayFormat:: fillin(DatagramIterator &scan, BamReader *manager) { TypedWritableReferenceCount::fillin(scan, manager); nassertv(!_is_registered); @@ -656,7 +656,7 @@ fillin(DatagramIterator &scan, BamReader *manager) { int num_columns = scan.get_uint16(); _columns.reserve(num_columns); for (int i = 0; i < num_columns; ++i) { - qpGeomVertexColumn *column = new qpGeomVertexColumn; + GeomVertexColumn *column = new GeomVertexColumn; column->fillin(scan, manager); _columns.push_back(column); } @@ -664,16 +664,16 @@ fillin(DatagramIterator &scan, BamReader *manager) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::Registry::Constructor +// Function: GeomVertexArrayFormat::Registry::Constructor // Access: Public // Description: //////////////////////////////////////////////////////////////////// -qpGeomVertexArrayFormat::Registry:: +GeomVertexArrayFormat::Registry:: Registry() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::Registry::register_format +// Function: GeomVertexArrayFormat::Registry::register_format // Access: Public // Description: Adds the indicated format to the registry, if there // is not an equivalent format already there; in either @@ -687,8 +687,8 @@ Registry() { // normally; you should use only the returned value from // this point on. //////////////////////////////////////////////////////////////////// -CPT(qpGeomVertexArrayFormat) qpGeomVertexArrayFormat::Registry:: -register_format(qpGeomVertexArrayFormat *format) { +CPT(GeomVertexArrayFormat) GeomVertexArrayFormat::Registry:: +register_format(GeomVertexArrayFormat *format) { if (format->is_registered()) { return format; } @@ -696,11 +696,11 @@ register_format(qpGeomVertexArrayFormat *format) { // Save the incoming pointer in a local PointerTo, so that if it has // a zero reference count and is not added into the map below, it // will be automatically deleted when this function returns. - PT(qpGeomVertexArrayFormat) pt_format = format; + PT(GeomVertexArrayFormat) pt_format = format; ArrayFormats::iterator fi = _formats.insert(format).first; - qpGeomVertexArrayFormat *new_format = (*fi); + GeomVertexArrayFormat *new_format = (*fi); if (!new_format->is_registered()) { new_format->do_register(); } @@ -709,14 +709,14 @@ register_format(qpGeomVertexArrayFormat *format) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexArrayFormat::Registry::unregister_format +// Function: GeomVertexArrayFormat::Registry::unregister_format // Access: Public // Description: Removes the indicated format from the registry. // Normally this should not be done until the format is // destructing. //////////////////////////////////////////////////////////////////// -void qpGeomVertexArrayFormat::Registry:: -unregister_format(qpGeomVertexArrayFormat *format) { +void GeomVertexArrayFormat::Registry:: +unregister_format(GeomVertexArrayFormat *format) { nassertv(format->is_registered()); ArrayFormats::iterator fi = _formats.find(format); nassertv(fi != _formats.end()); diff --git a/panda/src/gobj/qpgeomVertexArrayFormat.h b/panda/src/gobj/geomVertexArrayFormat.h similarity index 55% rename from panda/src/gobj/qpgeomVertexArrayFormat.h rename to panda/src/gobj/geomVertexArrayFormat.h index 91d13f2d05..1560e22fad 100644 --- a/panda/src/gobj/qpgeomVertexArrayFormat.h +++ b/panda/src/gobj/geomVertexArrayFormat.h @@ -1,4 +1,4 @@ -// Filename: qpgeomVertexArrayFormat.h +// Filename: geomVertexArrayFormat.h // Created by: drose (06Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,27 +16,27 @@ // //////////////////////////////////////////////////////////////////// -#ifndef qpGEOMVERTEXARRAYFORMAT_H -#define qpGEOMVERTEXARRAYFORMAT_H +#ifndef GEOMVERTEXARRAYFORMAT_H +#define GEOMVERTEXARRAYFORMAT_H #include "pandabase.h" #include "typedWritableReferenceCount.h" -#include "qpgeomVertexColumn.h" -#include "qpgeomEnums.h" +#include "geomVertexColumn.h" +#include "geomEnums.h" #include "indirectCompareTo.h" #include "pvector.h" #include "pmap.h" -class qpGeomVertexFormat; -class qpGeomVertexData; -class qpGeomVertexArrayData; +class GeomVertexFormat; +class GeomVertexData; +class GeomVertexArrayData; class InternalName; class FactoryParams; class BamWriter; class BamReader; //////////////////////////////////////////////////////////////////// -// Class : qpGeomVertexArrayFormat +// Class : GeomVertexArrayFormat // Description : This describes the structure of a single array within // a Geom data. See GeomVertexFormat for the parent // class which collects together all of the individual @@ -52,38 +52,36 @@ class BamReader; // "normal", "texcoord", and "color"; other kinds of // data may be piggybacked into the data record simply // by choosing a unique name. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// -class EXPCL_PANDA qpGeomVertexArrayFormat : public TypedWritableReferenceCount, public qpGeomEnums { +class EXPCL_PANDA GeomVertexArrayFormat : public TypedWritableReferenceCount, public GeomEnums { PUBLISHED: - qpGeomVertexArrayFormat(); - qpGeomVertexArrayFormat(const qpGeomVertexArrayFormat ©); - qpGeomVertexArrayFormat(const InternalName *name0, int num_components0, - NumericType numeric_type0, Contents contents0); - qpGeomVertexArrayFormat(const InternalName *name0, int num_components0, - NumericType numeric_type0, Contents contents0, - const InternalName *name1, int num_components1, - NumericType numeric_type1, Contents contents1); - qpGeomVertexArrayFormat(const InternalName *name0, int num_components0, - NumericType numeric_type0, Contents contents0, - const InternalName *name1, int num_components1, - NumericType numeric_type1, Contents contents1, - const InternalName *name2, int num_components2, - NumericType numeric_type2, Contents contents2); - qpGeomVertexArrayFormat(const InternalName *name0, int num_components0, - NumericType numeric_type0, Contents contents0, - const InternalName *name1, int num_components1, - NumericType numeric_type1, Contents contents1, - const InternalName *name2, int num_components2, - NumericType numeric_type2, Contents contents2, - const InternalName *name3, int num_components3, - NumericType numeric_type3, Contents contents3); - void operator = (const qpGeomVertexArrayFormat ©); - ~qpGeomVertexArrayFormat(); + GeomVertexArrayFormat(); + GeomVertexArrayFormat(const GeomVertexArrayFormat ©); + GeomVertexArrayFormat(const InternalName *name0, int num_components0, + NumericType numeric_type0, Contents contents0); + GeomVertexArrayFormat(const InternalName *name0, int num_components0, + NumericType numeric_type0, Contents contents0, + const InternalName *name1, int num_components1, + NumericType numeric_type1, Contents contents1); + GeomVertexArrayFormat(const InternalName *name0, int num_components0, + NumericType numeric_type0, Contents contents0, + const InternalName *name1, int num_components1, + NumericType numeric_type1, Contents contents1, + const InternalName *name2, int num_components2, + NumericType numeric_type2, Contents contents2); + GeomVertexArrayFormat(const InternalName *name0, int num_components0, + NumericType numeric_type0, Contents contents0, + const InternalName *name1, int num_components1, + NumericType numeric_type1, Contents contents1, + const InternalName *name2, int num_components2, + NumericType numeric_type2, Contents contents2, + const InternalName *name3, int num_components3, + NumericType numeric_type3, Contents contents3); + void operator = (const GeomVertexArrayFormat ©); + ~GeomVertexArrayFormat(); INLINE bool is_registered() const; - INLINE static CPT(qpGeomVertexArrayFormat) register_format(const qpGeomVertexArrayFormat *format); + INLINE static CPT(GeomVertexArrayFormat) register_format(const GeomVertexArrayFormat *format); INLINE int get_stride() const; INLINE void set_stride(int stride); @@ -94,26 +92,26 @@ PUBLISHED: int add_column(const InternalName *name, int num_components, NumericType numeric_type, Contents contents, int start = -1); - int add_column(const qpGeomVertexColumn &column); + int add_column(const GeomVertexColumn &column); void remove_column(const InternalName *name); void clear_columns(); INLINE int get_num_columns() const; - INLINE const qpGeomVertexColumn *get_column(int i) const; + INLINE const GeomVertexColumn *get_column(int i) const; - const qpGeomVertexColumn *get_column(const InternalName *name) const; - const qpGeomVertexColumn *get_column(int start_byte, int num_bytes) const; + const GeomVertexColumn *get_column(const InternalName *name) const; + const GeomVertexColumn *get_column(int start_byte, int num_bytes) const; INLINE bool has_column(const InternalName *name) const; - bool is_data_subset_of(const qpGeomVertexArrayFormat &other) const; + bool is_data_subset_of(const GeomVertexArrayFormat &other) const; void output(ostream &out) const; void write(ostream &out, int indent_level = 0) const; void write_with_data(ostream &out, int indent_level, - const qpGeomVertexArrayData *array_data) const; + const GeomVertexArrayData *array_data) const; public: - int compare_to(const qpGeomVertexArrayFormat &other) const; + int compare_to(const GeomVertexArrayFormat &other) const; private: class Registry; @@ -131,20 +129,20 @@ private: int _total_bytes; int _pad_to; - typedef pvector Columns; + typedef pvector Columns; Columns _columns; bool _columns_unsorted; - typedef pmap ColumnsByName; + typedef pmap ColumnsByName; ColumnsByName _columns_by_name; // This is the global registry of all currently-in-use array formats. - typedef pset > ArrayFormats; + typedef pset > ArrayFormats; class EXPCL_PANDA Registry { public: Registry(); - CPT(qpGeomVertexArrayFormat) register_format(qpGeomVertexArrayFormat *format); - void unregister_format(qpGeomVertexArrayFormat *format); + CPT(GeomVertexArrayFormat) register_format(GeomVertexArrayFormat *format); + void unregister_format(GeomVertexArrayFormat *format); ArrayFormats _formats; }; @@ -168,7 +166,7 @@ public: } static void init_type() { TypedWritableReferenceCount::init_type(); - register_type(_type_handle, "qpGeomVertexArrayFormat", + register_type(_type_handle, "GeomVertexArrayFormat", TypedWritableReferenceCount::get_class_type()); } virtual TypeHandle get_type() const { @@ -179,11 +177,11 @@ public: private: static TypeHandle _type_handle; - friend class qpGeomVertexFormat; + friend class GeomVertexFormat; }; -INLINE ostream &operator << (ostream &out, const qpGeomVertexArrayFormat &obj); +INLINE ostream &operator << (ostream &out, const GeomVertexArrayFormat &obj); -#include "qpgeomVertexArrayFormat.I" +#include "geomVertexArrayFormat.I" #endif diff --git a/panda/src/gobj/qpgeomVertexColumn.I b/panda/src/gobj/geomVertexColumn.I similarity index 82% rename from panda/src/gobj/qpgeomVertexColumn.I rename to panda/src/gobj/geomVertexColumn.I index 0fd128cfd4..73034e28d2 100644 --- a/panda/src/gobj/qpgeomVertexColumn.I +++ b/panda/src/gobj/geomVertexColumn.I @@ -1,4 +1,4 @@ -// Filename: qpgeomVertexColumn.I +// Filename: geomVertexColumn.I // Created by: drose (06Mar05) // //////////////////////////////////////////////////////////////////// @@ -18,24 +18,24 @@ //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Default Constructor +// Function: GeomVertexColumn::Default Constructor // Access: Private // Description: Creates an invalid column. Used on when constructing // from a bam file. //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexColumn:: -qpGeomVertexColumn() : +INLINE GeomVertexColumn:: +GeomVertexColumn() : _packer(NULL) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Constructor +// Function: GeomVertexColumn::Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexColumn:: -qpGeomVertexColumn(const InternalName *name, int num_components, +INLINE GeomVertexColumn:: +GeomVertexColumn(const InternalName *name, int num_components, NumericType numeric_type, Contents contents, int start) : _name(name), @@ -49,12 +49,12 @@ qpGeomVertexColumn(const InternalName *name, int num_components, } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Copy Constructor +// Function: GeomVertexColumn::Copy Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexColumn:: -qpGeomVertexColumn(const qpGeomVertexColumn ©) : +INLINE GeomVertexColumn:: +GeomVertexColumn(const GeomVertexColumn ©) : _name(copy._name), _num_components(copy._num_components), _numeric_type(copy._numeric_type), @@ -66,17 +66,17 @@ qpGeomVertexColumn(const qpGeomVertexColumn ©) : } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Destructor +// Function: GeomVertexColumn::Destructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexColumn:: -~qpGeomVertexColumn() { +INLINE GeomVertexColumn:: +~GeomVertexColumn() { delete _packer; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::get_name +// Function: GeomVertexColumn::get_name // Access: Published // Description: Returns the name of this particular data field, // e.g. "vertex" or "normal". The name may be a @@ -84,26 +84,26 @@ INLINE qpGeomVertexColumn:: // system-defined field types. Only the system-defined // field types are used for the actual rendering. //////////////////////////////////////////////////////////////////// -INLINE const InternalName *qpGeomVertexColumn:: +INLINE const InternalName *GeomVertexColumn:: get_name() const { return _name; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::get_num_components +// Function: GeomVertexColumn::get_num_components // Access: Published // Description: Returns the number of components of the column: // the number of instances of the NumericType in each // element. This is usually, but not always, the same // thing as get_num_values(). //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexColumn:: +INLINE int GeomVertexColumn:: get_num_components() const { return _num_components; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::get_num_values +// Function: GeomVertexColumn::get_num_values // Access: Published // Description: Returns the number of numeric values of the column: // the number of distinct numeric values that go into @@ -113,69 +113,69 @@ get_num_components() const { // NT_packed_dcba, which has four numeric values per // component. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexColumn:: +INLINE int GeomVertexColumn:: get_num_values() const { return _num_values; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::get_numeric_type +// Function: GeomVertexColumn::get_numeric_type // Access: Published // Description: Returns the token representing the numeric type of // the data storage. //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexColumn::NumericType qpGeomVertexColumn:: +INLINE GeomVertexColumn::NumericType GeomVertexColumn:: get_numeric_type() const { return _numeric_type; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::get_contents +// Function: GeomVertexColumn::get_contents // Access: Published // Description: Returns the token representing the semantic meaning of // the stored value. //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexColumn::Contents qpGeomVertexColumn:: +INLINE GeomVertexColumn::Contents GeomVertexColumn:: get_contents() const { return _contents; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::get_start +// Function: GeomVertexColumn::get_start // Access: Published // Description: Returns the byte within the array record at which // this column starts. This can be set to non-zero // to implement interleaved arrays. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexColumn:: +INLINE int GeomVertexColumn:: get_start() const { return _start; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::get_component_bytes +// Function: GeomVertexColumn::get_component_bytes // Access: Published // Description: Returns the number of bytes used by each component // (that is, by one element of the numeric type). //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexColumn:: +INLINE int GeomVertexColumn:: get_component_bytes() const { return _component_bytes; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::get_total_bytes +// Function: GeomVertexColumn::get_total_bytes // Access: Published // Description: Returns the number of bytes used by each element of // the column: component_bytes * num_components. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexColumn:: +INLINE int GeomVertexColumn:: get_total_bytes() const { return _total_bytes; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::has_homogeneous_coord +// Function: GeomVertexColumn::has_homogeneous_coord // Access: Published // Description: Returns true if this Contents type is one that // includes a homogeneous coordinate in the fourth @@ -186,7 +186,7 @@ get_total_bytes() const { // you use the 3-component or smaller forms of // get_data() and set_data()). //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexColumn:: +INLINE bool GeomVertexColumn:: has_homogeneous_coord() const { switch (_contents) { case C_point: @@ -199,27 +199,27 @@ has_homogeneous_coord() const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::overlaps_with +// Function: GeomVertexColumn::overlaps_with // Access: Published // Description: Returns true if this column overlaps with any of // the bytes in the indicated range, false if it does // not. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexColumn:: +INLINE bool GeomVertexColumn:: overlaps_with(int start_byte, int num_bytes) const { return (_start < start_byte + num_bytes && _start + _total_bytes > start_byte); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::is_bytewise_equivalent +// Function: GeomVertexColumn::is_bytewise_equivalent // Access: Published // Description: Returns true if the data store of this column is // exactly the same as that of the other, irrespective // of name or start position within the record. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexColumn:: -is_bytewise_equivalent(const qpGeomVertexColumn &other) const { +INLINE bool GeomVertexColumn:: +is_bytewise_equivalent(const GeomVertexColumn &other) const { // Not sure if the contents are relevant, but let's say that they // are. return (_num_components == other._num_components && @@ -228,13 +228,13 @@ is_bytewise_equivalent(const qpGeomVertexColumn &other) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::is_packed_argb +// Function: GeomVertexColumn::is_packed_argb // Access: Public // Description: Returns true if this column is the standard // DirectX representation of 4-component color: C_color, // in NT_packed_dabc, with 1 component (4 values). //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexColumn:: +INLINE bool GeomVertexColumn:: is_packed_argb() const { return (_num_components == 1 && _numeric_type == NT_packed_dabc && @@ -242,13 +242,13 @@ is_packed_argb() const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::is_uint8_rgba +// Function: GeomVertexColumn::is_uint8_rgba // Access: Public // Description: Returns true if this column is the standard // OpenGL representation of 4-component color: C_color, // in NT_uint8, with 4 components. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexColumn:: +INLINE bool GeomVertexColumn:: is_uint8_rgba() const { return (_num_components == 4 && _numeric_type == NT_uint8 && @@ -256,13 +256,13 @@ is_uint8_rgba() const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::compare_to +// Function: GeomVertexColumn::compare_to // Access: Public // Description: This is used to unquify columns, and hence // formats, for the GeomVertexFormat registry. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexColumn:: -compare_to(const qpGeomVertexColumn &other) const { +INLINE int GeomVertexColumn:: +compare_to(const GeomVertexColumn &other) const { if (_name != other._name) { return _name < other._name ? -1 : 1; } @@ -282,36 +282,36 @@ compare_to(const qpGeomVertexColumn &other) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::operator == +// Function: GeomVertexColumn::operator == // Access: Public // Description: Returns true if the two columns are exactly // equivalent, false otherwise. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexColumn:: -operator == (const qpGeomVertexColumn &other) const { +INLINE bool GeomVertexColumn:: +operator == (const GeomVertexColumn &other) const { return compare_to(other) == 0; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::operator != +// Function: GeomVertexColumn::operator != // Access: Public // Description: //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexColumn:: -operator != (const qpGeomVertexColumn &other) const { +INLINE bool GeomVertexColumn:: +operator != (const GeomVertexColumn &other) const { return compare_to(other) != 0; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::operator < +// Function: GeomVertexColumn::operator < // Access: Public // Description: This is used to put columns in order within a // particular GeomVertexArrayFormat. Note that it is // *not* in the same space as operator == and operator // !=. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexColumn:: -operator < (const qpGeomVertexColumn &other) const { +INLINE bool GeomVertexColumn:: +operator < (const GeomVertexColumn &other) const { if (_start != other._start) { return _start < other._start; } @@ -322,20 +322,20 @@ operator < (const qpGeomVertexColumn &other) const { } INLINE ostream & -operator << (ostream &out, const qpGeomVertexColumn &obj) { +operator << (ostream &out, const GeomVertexColumn &obj) { obj.output(out); return out; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer::maybe_scale_color +// Function: GeomVertexColumn::Packer::maybe_scale_color // Access: Public // Description: Converts an integer (typically a uint8) value to a // floating-point value. If the contents value // indicates this is a color value, scales it into the // range 0..1 per convention; otherwise leaves it alone. //////////////////////////////////////////////////////////////////// -INLINE float qpGeomVertexColumn::Packer:: +INLINE float GeomVertexColumn::Packer:: maybe_scale_color(unsigned int value) { if (_column->get_contents() == C_color) { return (float)value / 255.0f; @@ -345,12 +345,12 @@ maybe_scale_color(unsigned int value) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer::maybe_scale_color +// Function: GeomVertexColumn::Packer::maybe_scale_color // Access: Public // Description: Converts a pair of integers into the _v2 member. See // one-parameter maybe_scale_color() for more info. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexColumn::Packer:: +INLINE void GeomVertexColumn::Packer:: maybe_scale_color(unsigned int a, unsigned int b) { if (_column->get_contents() == C_color) { _v2.set((float)a / 255.0f, @@ -361,12 +361,12 @@ maybe_scale_color(unsigned int a, unsigned int b) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer::maybe_scale_color +// Function: GeomVertexColumn::Packer::maybe_scale_color // Access: Public // Description: Converts a pair of integers into the _v3 member. See // one-parameter maybe_scale_color() for more info. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexColumn::Packer:: +INLINE void GeomVertexColumn::Packer:: maybe_scale_color(unsigned int a, unsigned int b, unsigned int c) { if (_column->get_contents() == C_color) { _v3.set((float)a / 255.0f, @@ -378,12 +378,12 @@ maybe_scale_color(unsigned int a, unsigned int b, unsigned int c) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer::maybe_scale_color +// Function: GeomVertexColumn::Packer::maybe_scale_color // Access: Public // Description: Converts a pair of integers into the _v4 member. See // one-parameter maybe_scale_color() for more info. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexColumn::Packer:: +INLINE void GeomVertexColumn::Packer:: maybe_scale_color(unsigned int a, unsigned int b, unsigned int c, unsigned int d) { if (_column->get_contents() == C_color) { @@ -398,14 +398,14 @@ maybe_scale_color(unsigned int a, unsigned int b, unsigned int c, //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer::maybe_unscale_color +// Function: GeomVertexColumn::Packer::maybe_unscale_color // Access: Public // Description: Converts a floating-point value to a uint8 value. If // the contents value indicates this is a color value, // scales it into the range 0..255 per convention; // otherwise leaves it alone. //////////////////////////////////////////////////////////////////// -INLINE unsigned int qpGeomVertexColumn::Packer:: +INLINE unsigned int GeomVertexColumn::Packer:: maybe_unscale_color(float data) { if (_column->get_contents() == C_color) { return (unsigned int)(data * 255.0f); @@ -415,13 +415,13 @@ maybe_unscale_color(float data) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer::maybe_unscale_color +// Function: GeomVertexColumn::Packer::maybe_unscale_color // Access: Public // Description: Converts an LVecBase2f into a pair of uint8 // values. See one-parameter maybe_unscale_color() for // more info. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexColumn::Packer:: +INLINE void GeomVertexColumn::Packer:: maybe_unscale_color(const LVecBase2f &data) { if (_column->get_contents() == C_color) { _a = (unsigned int)(data[0] * 255.0f); @@ -433,13 +433,13 @@ maybe_unscale_color(const LVecBase2f &data) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer::maybe_unscale_color +// Function: GeomVertexColumn::Packer::maybe_unscale_color // Access: Public // Description: Converts an LVecBase3f into a pair of uint8 // values. See one-parameter maybe_unscale_color() for // more info. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexColumn::Packer:: +INLINE void GeomVertexColumn::Packer:: maybe_unscale_color(const LVecBase3f &data) { if (_column->get_contents() == C_color) { _a = (unsigned int)(data[0] * 255.0f); @@ -453,13 +453,13 @@ maybe_unscale_color(const LVecBase3f &data) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer::maybe_unscale_color +// Function: GeomVertexColumn::Packer::maybe_unscale_color // Access: Public // Description: Converts an LVecBase4f into a pair of uint8 // values. See one-parameter maybe_unscale_color() for // more info. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexColumn::Packer:: +INLINE void GeomVertexColumn::Packer:: maybe_unscale_color(const LVecBase4f &data) { if (_column->get_contents() == C_color) { _a = (unsigned int)(data[0] * 255.0f); diff --git a/panda/src/gobj/qpgeomVertexColumn.cxx b/panda/src/gobj/geomVertexColumn.cxx similarity index 80% rename from panda/src/gobj/qpgeomVertexColumn.cxx rename to panda/src/gobj/geomVertexColumn.cxx index b2f72dedf2..4a4e9583c5 100644 --- a/panda/src/gobj/qpgeomVertexColumn.cxx +++ b/panda/src/gobj/geomVertexColumn.cxx @@ -1,4 +1,4 @@ -// Filename: qpgeomVertexColumn.cxx +// Filename: geomVertexColumn.cxx // Created by: drose (06Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,17 +16,17 @@ // //////////////////////////////////////////////////////////////////// -#include "qpgeomVertexColumn.h" +#include "geomVertexColumn.h" #include "bamReader.h" #include "bamWriter.h" //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Copy Assignment Operator +// Function: GeomVertexColumn::Copy Assignment Operator // Access: Published // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexColumn:: -operator = (const qpGeomVertexColumn ©) { +void GeomVertexColumn:: +operator = (const GeomVertexColumn ©) { _name = copy._name; _num_components = copy._num_components; _numeric_type = copy._numeric_type; @@ -40,11 +40,11 @@ operator = (const qpGeomVertexColumn ©) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::output +// Function: GeomVertexColumn::output // Access: Published // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexColumn:: +void GeomVertexColumn:: output(ostream &out) const { out << *get_name() << "(" << get_num_components(); switch (get_numeric_type()) { @@ -76,12 +76,12 @@ output(ostream &out) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::setup +// Function: GeomVertexColumn::setup // Access: Private // Description: Called once at construction time (or at bam-reading // time) to initialize the internal dependent values. //////////////////////////////////////////////////////////////////// -void qpGeomVertexColumn:: +void GeomVertexColumn:: setup() { nassertv(_num_components > 0 && _start >= 0); @@ -118,13 +118,13 @@ setup() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::make_packer +// Function: GeomVertexColumn::make_packer // Access: Private // Description: Returns a newly-allocated Packer object suitable for // packing and unpacking this column. The _column // member of the packer is not filled in. //////////////////////////////////////////////////////////////////// -qpGeomVertexColumn::Packer *qpGeomVertexColumn:: +GeomVertexColumn::Packer *GeomVertexColumn:: make_packer() const { switch (get_contents()) { case C_point: @@ -226,12 +226,12 @@ make_packer() const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::write_datagram +// Function: GeomVertexColumn::write_datagram // Access: Public // Description: Writes the contents of this object to the datagram // for shipping out to a Bam file. //////////////////////////////////////////////////////////////////// -void qpGeomVertexColumn:: +void GeomVertexColumn:: write_datagram(BamWriter *manager, Datagram &dg) { manager->write_pointer(dg, _name); dg.add_uint8(_num_components); @@ -241,13 +241,13 @@ write_datagram(BamWriter *manager, Datagram &dg) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::complete_pointers +// Function: GeomVertexColumn::complete_pointers // Access: Public // Description: Receives an array of pointers, one for each time // manager->read_pointer() was called in fillin(). // Returns the number of pointers processed. //////////////////////////////////////////////////////////////////// -int qpGeomVertexColumn:: +int GeomVertexColumn:: complete_pointers(TypedWritable **p_list, BamReader *manager) { int pi = 0; @@ -257,13 +257,13 @@ complete_pointers(TypedWritable **p_list, BamReader *manager) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::fillin +// Function: GeomVertexColumn::fillin // Access: Protected // Description: This internal function is called by make_from_bam to // read in all of the relevant data from the BamFile for -// the new qpGeomVertexColumn. +// the new GeomVertexColumn. //////////////////////////////////////////////////////////////////// -void qpGeomVertexColumn:: +void GeomVertexColumn:: fillin(DatagramIterator &scan, BamReader *manager) { manager->read_pointer(scan); @@ -276,20 +276,20 @@ fillin(DatagramIterator &scan, BamReader *manager) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer::Destructor +// Function: GeomVertexColumn::Packer::Destructor // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -qpGeomVertexColumn::Packer:: +GeomVertexColumn::Packer:: ~Packer() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer::get_data1f +// Function: GeomVertexColumn::Packer::get_data1f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -float qpGeomVertexColumn::Packer:: +float GeomVertexColumn::Packer:: get_data1f(const unsigned char *pointer) { switch (_column->get_numeric_type()) { case NT_uint8: @@ -304,13 +304,13 @@ get_data1f(const unsigned char *pointer) { case NT_packed_dcba: { PN_uint32 dword = *(const PN_uint32 *)pointer; - return maybe_scale_color(qpGeomVertexData::unpack_abcd_d(dword)); + return maybe_scale_color(GeomVertexData::unpack_abcd_d(dword)); } case NT_packed_dabc: { PN_uint32 dword = *(const PN_uint32 *)pointer; - return maybe_scale_color(qpGeomVertexData::unpack_abcd_b(dword)); + return maybe_scale_color(GeomVertexData::unpack_abcd_b(dword)); } case NT_float32: @@ -321,14 +321,14 @@ get_data1f(const unsigned char *pointer) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer::get_data2f +// Function: GeomVertexColumn::Packer::get_data2f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -const LVecBase2f &qpGeomVertexColumn::Packer:: +const LVecBase2f &GeomVertexColumn::Packer:: get_data2f(const unsigned char *pointer) { if (_column->get_num_values() == 1) { - _v2.set(get_data1i(pointer), 0.0f); + _v2.set(get_data1f(pointer), 0.0f); return _v2; } else { @@ -354,16 +354,16 @@ get_data2f(const unsigned char *pointer) { case NT_packed_dcba: { PN_uint32 dword = *(const PN_uint32 *)pointer; - maybe_scale_color(qpGeomVertexData::unpack_abcd_d(dword), - qpGeomVertexData::unpack_abcd_c(dword)); + maybe_scale_color(GeomVertexData::unpack_abcd_d(dword), + GeomVertexData::unpack_abcd_c(dword)); } return _v2; case NT_packed_dabc: { PN_uint32 dword = *(const PN_uint32 *)pointer; - maybe_scale_color(qpGeomVertexData::unpack_abcd_b(dword), - qpGeomVertexData::unpack_abcd_c(dword)); + maybe_scale_color(GeomVertexData::unpack_abcd_b(dword), + GeomVertexData::unpack_abcd_c(dword)); } return _v2; @@ -380,11 +380,11 @@ get_data2f(const unsigned char *pointer) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer::get_data3f +// Function: GeomVertexColumn::Packer::get_data3f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -const LVecBase3f &qpGeomVertexColumn::Packer:: +const LVecBase3f &GeomVertexColumn::Packer:: get_data3f(const unsigned char *pointer) { switch (_column->get_num_values()) { case 1: @@ -421,18 +421,18 @@ get_data3f(const unsigned char *pointer) { case NT_packed_dcba: { PN_uint32 dword = *(const PN_uint32 *)pointer; - maybe_scale_color(qpGeomVertexData::unpack_abcd_d(dword), - qpGeomVertexData::unpack_abcd_c(dword), - qpGeomVertexData::unpack_abcd_b(dword)); + maybe_scale_color(GeomVertexData::unpack_abcd_d(dword), + GeomVertexData::unpack_abcd_c(dword), + GeomVertexData::unpack_abcd_b(dword)); } return _v3; case NT_packed_dabc: { PN_uint32 dword = *(const PN_uint32 *)pointer; - maybe_scale_color(qpGeomVertexData::unpack_abcd_b(dword), - qpGeomVertexData::unpack_abcd_c(dword), - qpGeomVertexData::unpack_abcd_d(dword)); + maybe_scale_color(GeomVertexData::unpack_abcd_b(dword), + GeomVertexData::unpack_abcd_c(dword), + GeomVertexData::unpack_abcd_d(dword)); } return _v3; @@ -449,15 +449,15 @@ get_data3f(const unsigned char *pointer) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer::get_data4f +// Function: GeomVertexColumn::Packer::get_data4f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -const LVecBase4f &qpGeomVertexColumn::Packer:: +const LVecBase4f &GeomVertexColumn::Packer:: get_data4f(const unsigned char *pointer) { switch (_column->get_num_values()) { case 1: - _v4.set(get_data1i(pointer), 0.0f, 0.0f, 0.0f); + _v4.set(get_data1f(pointer), 0.0f, 0.0f, 0.0f); return _v4; case 2: @@ -497,20 +497,20 @@ get_data4f(const unsigned char *pointer) { case NT_packed_dcba: { PN_uint32 dword = *(const PN_uint32 *)pointer; - maybe_scale_color(qpGeomVertexData::unpack_abcd_d(dword), - qpGeomVertexData::unpack_abcd_c(dword), - qpGeomVertexData::unpack_abcd_b(dword), - qpGeomVertexData::unpack_abcd_a(dword)); + maybe_scale_color(GeomVertexData::unpack_abcd_d(dword), + GeomVertexData::unpack_abcd_c(dword), + GeomVertexData::unpack_abcd_b(dword), + GeomVertexData::unpack_abcd_a(dword)); } return _v4; case NT_packed_dabc: { PN_uint32 dword = *(const PN_uint32 *)pointer; - maybe_scale_color(qpGeomVertexData::unpack_abcd_b(dword), - qpGeomVertexData::unpack_abcd_c(dword), - qpGeomVertexData::unpack_abcd_d(dword), - qpGeomVertexData::unpack_abcd_a(dword)); + maybe_scale_color(GeomVertexData::unpack_abcd_b(dword), + GeomVertexData::unpack_abcd_c(dword), + GeomVertexData::unpack_abcd_d(dword), + GeomVertexData::unpack_abcd_a(dword)); } return _v4; @@ -527,11 +527,11 @@ get_data4f(const unsigned char *pointer) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer::get_data1i +// Function: GeomVertexColumn::Packer::get_data1i // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -int qpGeomVertexColumn::Packer:: +int GeomVertexColumn::Packer:: get_data1i(const unsigned char *pointer) { switch (_column->get_numeric_type()) { case NT_uint8: @@ -546,13 +546,13 @@ get_data1i(const unsigned char *pointer) { case NT_packed_dcba: { PN_uint32 dword = *(const PN_uint32 *)pointer; - return qpGeomVertexData::unpack_abcd_d(dword); + return GeomVertexData::unpack_abcd_d(dword); } case NT_packed_dabc: { PN_uint32 dword = *(const PN_uint32 *)pointer; - return qpGeomVertexData::unpack_abcd_b(dword); + return GeomVertexData::unpack_abcd_b(dword); } case NT_float32: @@ -563,11 +563,11 @@ get_data1i(const unsigned char *pointer) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer::get_data2i +// Function: GeomVertexColumn::Packer::get_data2i // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -const int *qpGeomVertexColumn::Packer:: +const int *GeomVertexColumn::Packer:: get_data2i(const unsigned char *pointer) { switch (_column->get_num_values()) { case 1: @@ -601,16 +601,16 @@ get_data2i(const unsigned char *pointer) { case NT_packed_dcba: { PN_uint32 dword = *(const PN_uint32 *)pointer; - _i[0] = qpGeomVertexData::unpack_abcd_d(dword); - _i[1] = qpGeomVertexData::unpack_abcd_c(dword); + _i[0] = GeomVertexData::unpack_abcd_d(dword); + _i[1] = GeomVertexData::unpack_abcd_c(dword); } return _i; case NT_packed_dabc: { PN_uint32 dword = *(const PN_uint32 *)pointer; - _i[0] = qpGeomVertexData::unpack_abcd_b(dword); - _i[1] = qpGeomVertexData::unpack_abcd_c(dword); + _i[0] = GeomVertexData::unpack_abcd_b(dword); + _i[1] = GeomVertexData::unpack_abcd_c(dword); } return _i; @@ -628,11 +628,11 @@ get_data2i(const unsigned char *pointer) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer::get_data3i +// Function: GeomVertexColumn::Packer::get_data3i // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -const int *qpGeomVertexColumn::Packer:: +const int *GeomVertexColumn::Packer:: get_data3i(const unsigned char *pointer) { switch (_column->get_num_values()) { case 1: @@ -679,18 +679,18 @@ get_data3i(const unsigned char *pointer) { case NT_packed_dcba: { PN_uint32 dword = *(const PN_uint32 *)pointer; - _i[0] = qpGeomVertexData::unpack_abcd_d(dword); - _i[1] = qpGeomVertexData::unpack_abcd_c(dword); - _i[2] = qpGeomVertexData::unpack_abcd_b(dword); + _i[0] = GeomVertexData::unpack_abcd_d(dword); + _i[1] = GeomVertexData::unpack_abcd_c(dword); + _i[2] = GeomVertexData::unpack_abcd_b(dword); } return _i; case NT_packed_dabc: { PN_uint32 dword = *(const PN_uint32 *)pointer; - _i[0] = qpGeomVertexData::unpack_abcd_b(dword); - _i[1] = qpGeomVertexData::unpack_abcd_c(dword); - _i[2] = qpGeomVertexData::unpack_abcd_d(dword); + _i[0] = GeomVertexData::unpack_abcd_b(dword); + _i[1] = GeomVertexData::unpack_abcd_c(dword); + _i[2] = GeomVertexData::unpack_abcd_d(dword); } return _i; @@ -709,11 +709,11 @@ get_data3i(const unsigned char *pointer) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer::get_data4i +// Function: GeomVertexColumn::Packer::get_data4i // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -const int *qpGeomVertexColumn::Packer:: +const int *GeomVertexColumn::Packer:: get_data4i(const unsigned char *pointer) { switch (_column->get_num_values()) { case 1: @@ -775,20 +775,20 @@ get_data4i(const unsigned char *pointer) { case NT_packed_dcba: { PN_uint32 dword = *(const PN_uint32 *)pointer; - _i[0] = qpGeomVertexData::unpack_abcd_d(dword); - _i[1] = qpGeomVertexData::unpack_abcd_c(dword); - _i[2] = qpGeomVertexData::unpack_abcd_b(dword); - _i[3] = qpGeomVertexData::unpack_abcd_a(dword); + _i[0] = GeomVertexData::unpack_abcd_d(dword); + _i[1] = GeomVertexData::unpack_abcd_c(dword); + _i[2] = GeomVertexData::unpack_abcd_b(dword); + _i[3] = GeomVertexData::unpack_abcd_a(dword); } return _i; case NT_packed_dabc: { PN_uint32 dword = *(const PN_uint32 *)pointer; - _i[0] = qpGeomVertexData::unpack_abcd_b(dword); - _i[1] = qpGeomVertexData::unpack_abcd_c(dword); - _i[2] = qpGeomVertexData::unpack_abcd_d(dword); - _i[3] = qpGeomVertexData::unpack_abcd_a(dword); + _i[0] = GeomVertexData::unpack_abcd_b(dword); + _i[1] = GeomVertexData::unpack_abcd_c(dword); + _i[2] = GeomVertexData::unpack_abcd_d(dword); + _i[3] = GeomVertexData::unpack_abcd_a(dword); } return _i; @@ -808,11 +808,11 @@ get_data4i(const unsigned char *pointer) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer::set_data1f +// Function: GeomVertexColumn::Packer::set_data1f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexColumn::Packer:: +void GeomVertexColumn::Packer:: set_data1f(unsigned char *pointer, float data) { switch (_column->get_num_values()) { case 1: @@ -855,11 +855,11 @@ set_data1f(unsigned char *pointer, float data) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer::set_data2f +// Function: GeomVertexColumn::Packer::set_data2f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexColumn::Packer:: +void GeomVertexColumn::Packer:: set_data2f(unsigned char *pointer, const LVecBase2f &data) { switch (_column->get_num_values()) { case 1: @@ -915,11 +915,11 @@ set_data2f(unsigned char *pointer, const LVecBase2f &data) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer::set_data3f +// Function: GeomVertexColumn::Packer::set_data3f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexColumn::Packer:: +void GeomVertexColumn::Packer:: set_data3f(unsigned char *pointer, const LVecBase3f &data) { switch (_column->get_num_values()) { case 1: @@ -980,11 +980,11 @@ set_data3f(unsigned char *pointer, const LVecBase3f &data) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer::set_data4f +// Function: GeomVertexColumn::Packer::set_data4f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexColumn::Packer:: +void GeomVertexColumn::Packer:: set_data4f(unsigned char *pointer, const LVecBase4f &data) { switch (_column->get_num_values()) { case 1: @@ -1031,12 +1031,12 @@ set_data4f(unsigned char *pointer, const LVecBase4f &data) { case NT_packed_dcba: maybe_unscale_color(data); - *(PN_uint32 *)pointer = qpGeomVertexData::pack_abcd(_d, _c, _b, _a); + *(PN_uint32 *)pointer = GeomVertexData::pack_abcd(_d, _c, _b, _a); break; case NT_packed_dabc: maybe_unscale_color(data); - *(PN_uint32 *)pointer = qpGeomVertexData::pack_abcd(_d, _a, _b, _c); + *(PN_uint32 *)pointer = GeomVertexData::pack_abcd(_d, _a, _b, _c); break; case NT_float32: @@ -1054,11 +1054,11 @@ set_data4f(unsigned char *pointer, const LVecBase4f &data) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer::set_data1i +// Function: GeomVertexColumn::Packer::set_data1i // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexColumn::Packer:: +void GeomVertexColumn::Packer:: set_data1i(unsigned char *pointer, int a) { switch (_column->get_num_values()) { case 1: @@ -1103,11 +1103,11 @@ set_data1i(unsigned char *pointer, int a) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer::set_data2i +// Function: GeomVertexColumn::Packer::set_data2i // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexColumn::Packer:: +void GeomVertexColumn::Packer:: set_data2i(unsigned char *pointer, int a, int b) { switch (_column->get_num_values()) { case 1: @@ -1163,11 +1163,11 @@ set_data2i(unsigned char *pointer, int a, int b) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer::set_data3i +// Function: GeomVertexColumn::Packer::set_data3i // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexColumn::Packer:: +void GeomVertexColumn::Packer:: set_data3i(unsigned char *pointer, int a, int b, int c) { switch (_column->get_num_values()) { case 1: @@ -1227,11 +1227,11 @@ set_data3i(unsigned char *pointer, int a, int b, int c) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer::set_data4i +// Function: GeomVertexColumn::Packer::set_data4i // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexColumn::Packer:: +void GeomVertexColumn::Packer:: set_data4i(unsigned char *pointer, int a, int b, int c, int d) { switch (_column->get_num_values()) { case 1: @@ -1276,11 +1276,11 @@ set_data4i(unsigned char *pointer, int a, int b, int c, int d) { break; case NT_packed_dcba: - *(PN_uint32 *)pointer = qpGeomVertexData::pack_abcd(d, c, b, a); + *(PN_uint32 *)pointer = GeomVertexData::pack_abcd(d, c, b, a); break; case NT_packed_dabc: - *(PN_uint32 *)pointer = qpGeomVertexData::pack_abcd(d, a, b, c); + *(PN_uint32 *)pointer = GeomVertexData::pack_abcd(d, a, b, c); break; case NT_float32: @@ -1298,11 +1298,11 @@ set_data4i(unsigned char *pointer, int a, int b, int c, int d) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_point::get_data1f +// Function: GeomVertexColumn::Packer_point::get_data1f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -float qpGeomVertexColumn::Packer_point:: +float GeomVertexColumn::Packer_point:: get_data1f(const unsigned char *pointer) { if (_column->get_num_values() == 4) { const LVecBase4f &v4 = get_data4f(pointer); @@ -1313,11 +1313,11 @@ get_data1f(const unsigned char *pointer) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_point::get_data2f +// Function: GeomVertexColumn::Packer_point::get_data2f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -const LVecBase2f &qpGeomVertexColumn::Packer_point:: +const LVecBase2f &GeomVertexColumn::Packer_point:: get_data2f(const unsigned char *pointer) { if (_column->get_num_values() == 4) { const LVecBase4f &v4 = get_data4f(pointer); @@ -1329,11 +1329,11 @@ get_data2f(const unsigned char *pointer) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_point::get_data3f +// Function: GeomVertexColumn::Packer_point::get_data3f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -const LVecBase3f &qpGeomVertexColumn::Packer_point:: +const LVecBase3f &GeomVertexColumn::Packer_point:: get_data3f(const unsigned char *pointer) { if (_column->get_num_values() == 4) { const LVecBase4f &v4 = get_data4f(pointer); @@ -1345,11 +1345,11 @@ get_data3f(const unsigned char *pointer) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_point::get_data4f +// Function: GeomVertexColumn::Packer_point::get_data4f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -const LVecBase4f &qpGeomVertexColumn::Packer_point:: +const LVecBase4f &GeomVertexColumn::Packer_point:: get_data4f(const unsigned char *pointer) { switch (_column->get_num_values()) { case 1: @@ -1393,20 +1393,20 @@ get_data4f(const unsigned char *pointer) { case NT_packed_dcba: { PN_uint32 dword = *(const PN_uint32 *)pointer; - maybe_scale_color(qpGeomVertexData::unpack_abcd_d(dword), - qpGeomVertexData::unpack_abcd_c(dword), - qpGeomVertexData::unpack_abcd_b(dword), - qpGeomVertexData::unpack_abcd_a(dword)); + maybe_scale_color(GeomVertexData::unpack_abcd_d(dword), + GeomVertexData::unpack_abcd_c(dword), + GeomVertexData::unpack_abcd_b(dword), + GeomVertexData::unpack_abcd_a(dword)); } return _v4; case NT_packed_dabc: { PN_uint32 dword = *(const PN_uint32 *)pointer; - maybe_scale_color(qpGeomVertexData::unpack_abcd_b(dword), - qpGeomVertexData::unpack_abcd_c(dword), - qpGeomVertexData::unpack_abcd_d(dword), - qpGeomVertexData::unpack_abcd_a(dword)); + maybe_scale_color(GeomVertexData::unpack_abcd_b(dword), + GeomVertexData::unpack_abcd_c(dword), + GeomVertexData::unpack_abcd_d(dword), + GeomVertexData::unpack_abcd_a(dword)); } return _v4; @@ -1423,11 +1423,11 @@ get_data4f(const unsigned char *pointer) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_point::set_data1f +// Function: GeomVertexColumn::Packer_point::set_data1f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexColumn::Packer_point:: +void GeomVertexColumn::Packer_point:: set_data1f(unsigned char *pointer, float data) { if (_column->get_num_values() == 4) { set_data4f(pointer, LVecBase4f(data, 0.0f, 0.0f, 1.0f)); @@ -1437,11 +1437,11 @@ set_data1f(unsigned char *pointer, float data) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_point::set_data2f +// Function: GeomVertexColumn::Packer_point::set_data2f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexColumn::Packer_point:: +void GeomVertexColumn::Packer_point:: set_data2f(unsigned char *pointer, const LVecBase2f &data) { if (_column->get_num_values() == 4) { set_data4f(pointer, LVecBase4f(data[0], data[1], 0.0f, 1.0f)); @@ -1451,11 +1451,11 @@ set_data2f(unsigned char *pointer, const LVecBase2f &data) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_point::set_data3f +// Function: GeomVertexColumn::Packer_point::set_data3f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexColumn::Packer_point:: +void GeomVertexColumn::Packer_point:: set_data3f(unsigned char *pointer, const LVecBase3f &data) { if (_column->get_num_values() == 4) { set_data4f(pointer, LVecBase4f(data[0], data[1], data[2], 1.0f)); @@ -1465,11 +1465,11 @@ set_data3f(unsigned char *pointer, const LVecBase3f &data) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_point::set_data4f +// Function: GeomVertexColumn::Packer_point::set_data4f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexColumn::Packer_point:: +void GeomVertexColumn::Packer_point:: set_data4f(unsigned char *pointer, const LVecBase4f &data) { switch (_column->get_num_values()) { case 1: @@ -1516,12 +1516,12 @@ set_data4f(unsigned char *pointer, const LVecBase4f &data) { case NT_packed_dcba: maybe_unscale_color(data); - *(PN_uint32 *)pointer = qpGeomVertexData::pack_abcd(_d, _c, _b, _a); + *(PN_uint32 *)pointer = GeomVertexData::pack_abcd(_d, _c, _b, _a); break; case NT_packed_dabc: maybe_unscale_color(data); - *(PN_uint32 *)pointer = qpGeomVertexData::pack_abcd(_d, _a, _b, _c); + *(PN_uint32 *)pointer = GeomVertexData::pack_abcd(_d, _a, _b, _c); break; case NT_float32: @@ -1539,11 +1539,11 @@ set_data4f(unsigned char *pointer, const LVecBase4f &data) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_color::get_data4f +// Function: GeomVertexColumn::Packer_color::get_data4f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -const LVecBase4f &qpGeomVertexColumn::Packer_color:: +const LVecBase4f &GeomVertexColumn::Packer_color:: get_data4f(const unsigned char *pointer) { switch (_column->get_num_values()) { case 1: @@ -1587,20 +1587,20 @@ get_data4f(const unsigned char *pointer) { case NT_packed_dcba: { PN_uint32 dword = *(const PN_uint32 *)pointer; - maybe_scale_color(qpGeomVertexData::unpack_abcd_d(dword), - qpGeomVertexData::unpack_abcd_c(dword), - qpGeomVertexData::unpack_abcd_b(dword), - qpGeomVertexData::unpack_abcd_a(dword)); + maybe_scale_color(GeomVertexData::unpack_abcd_d(dword), + GeomVertexData::unpack_abcd_c(dword), + GeomVertexData::unpack_abcd_b(dword), + GeomVertexData::unpack_abcd_a(dword)); } return _v4; case NT_packed_dabc: { PN_uint32 dword = *(const PN_uint32 *)pointer; - maybe_scale_color(qpGeomVertexData::unpack_abcd_b(dword), - qpGeomVertexData::unpack_abcd_c(dword), - qpGeomVertexData::unpack_abcd_d(dword), - qpGeomVertexData::unpack_abcd_a(dword)); + maybe_scale_color(GeomVertexData::unpack_abcd_b(dword), + GeomVertexData::unpack_abcd_c(dword), + GeomVertexData::unpack_abcd_d(dword), + GeomVertexData::unpack_abcd_a(dword)); } return _v4; @@ -1617,11 +1617,11 @@ get_data4f(const unsigned char *pointer) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_color::set_data1f +// Function: GeomVertexColumn::Packer_color::set_data1f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexColumn::Packer_color:: +void GeomVertexColumn::Packer_color:: set_data1f(unsigned char *pointer, float data) { if (_column->get_num_values() == 4) { set_data4f(pointer, LVecBase4f(data, 0.0f, 0.0f, 1.0f)); @@ -1631,11 +1631,11 @@ set_data1f(unsigned char *pointer, float data) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_color::set_data2f +// Function: GeomVertexColumn::Packer_color::set_data2f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexColumn::Packer_color:: +void GeomVertexColumn::Packer_color:: set_data2f(unsigned char *pointer, const LVecBase2f &data) { if (_column->get_num_values() == 4) { set_data4f(pointer, LVecBase4f(data[0], data[1], 0.0f, 1.0f)); @@ -1645,11 +1645,11 @@ set_data2f(unsigned char *pointer, const LVecBase2f &data) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_color::set_data3f +// Function: GeomVertexColumn::Packer_color::set_data3f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexColumn::Packer_color:: +void GeomVertexColumn::Packer_color:: set_data3f(unsigned char *pointer, const LVecBase3f &data) { if (_column->get_num_values() == 4) { set_data4f(pointer, LVecBase4f(data[0], data[1], data[2], 1.0f)); @@ -1659,11 +1659,11 @@ set_data3f(unsigned char *pointer, const LVecBase3f &data) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_float32_3::get_data3f +// Function: GeomVertexColumn::Packer_float32_3::get_data3f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -const LVecBase3f &qpGeomVertexColumn::Packer_float32_3:: +const LVecBase3f &GeomVertexColumn::Packer_float32_3:: get_data3f(const unsigned char *pointer) { const PN_float32 *pi = (const PN_float32 *)pointer; _v3.set(pi[0], pi[1], pi[2]); @@ -1671,11 +1671,11 @@ get_data3f(const unsigned char *pointer) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_float32_3::set_data3f +// Function: GeomVertexColumn::Packer_float32_3::set_data3f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexColumn::Packer_float32_3:: +void GeomVertexColumn::Packer_float32_3:: set_data3f(unsigned char *pointer, const LVecBase3f &data) { PN_float32 *pi = (PN_float32 *)pointer; pi[0] = data[0]; @@ -1684,11 +1684,11 @@ set_data3f(unsigned char *pointer, const LVecBase3f &data) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_point_float32_2::get_data2f +// Function: GeomVertexColumn::Packer_point_float32_2::get_data2f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -const LVecBase2f &qpGeomVertexColumn::Packer_point_float32_2:: +const LVecBase2f &GeomVertexColumn::Packer_point_float32_2:: get_data2f(const unsigned char *pointer) { const PN_float32 *pi = (const PN_float32 *)pointer; _v2.set(pi[0], pi[1]); @@ -1696,11 +1696,11 @@ get_data2f(const unsigned char *pointer) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_point_float32_2::set_data2f +// Function: GeomVertexColumn::Packer_point_float32_2::set_data2f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexColumn::Packer_point_float32_2:: +void GeomVertexColumn::Packer_point_float32_2:: set_data2f(unsigned char *pointer, const LVecBase2f &data) { PN_float32 *pi = (PN_float32 *)pointer; pi[0] = data[0]; @@ -1708,11 +1708,11 @@ set_data2f(unsigned char *pointer, const LVecBase2f &data) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_point_float32_3::get_data3f +// Function: GeomVertexColumn::Packer_point_float32_3::get_data3f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -const LVecBase3f &qpGeomVertexColumn::Packer_point_float32_3:: +const LVecBase3f &GeomVertexColumn::Packer_point_float32_3:: get_data3f(const unsigned char *pointer) { const PN_float32 *pi = (const PN_float32 *)pointer; _v3.set(pi[0], pi[1], pi[2]); @@ -1720,11 +1720,11 @@ get_data3f(const unsigned char *pointer) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_point_float32_3::set_data3f +// Function: GeomVertexColumn::Packer_point_float32_3::set_data3f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexColumn::Packer_point_float32_3:: +void GeomVertexColumn::Packer_point_float32_3:: set_data3f(unsigned char *pointer, const LVecBase3f &data) { PN_float32 *pi = (PN_float32 *)pointer; pi[0] = data[0]; @@ -1733,11 +1733,11 @@ set_data3f(unsigned char *pointer, const LVecBase3f &data) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_point_float32_4::get_data4f +// Function: GeomVertexColumn::Packer_point_float32_4::get_data4f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -const LVecBase4f &qpGeomVertexColumn::Packer_point_float32_4:: +const LVecBase4f &GeomVertexColumn::Packer_point_float32_4:: get_data4f(const unsigned char *pointer) { const PN_float32 *pi = (const PN_float32 *)pointer; _v4.set(pi[0], pi[1], pi[2], pi[3]); @@ -1745,11 +1745,11 @@ get_data4f(const unsigned char *pointer) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_point_float32_4::set_data4f +// Function: GeomVertexColumn::Packer_point_float32_4::set_data4f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexColumn::Packer_point_float32_4:: +void GeomVertexColumn::Packer_point_float32_4:: set_data4f(unsigned char *pointer, const LVecBase4f &data) { PN_float32 *pi = (PN_float32 *)pointer; pi[0] = data[0]; @@ -1759,68 +1759,68 @@ set_data4f(unsigned char *pointer, const LVecBase4f &data) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_nativefloat_3::get_data3f +// Function: GeomVertexColumn::Packer_nativefloat_3::get_data3f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -const LVecBase3f &qpGeomVertexColumn::Packer_nativefloat_3:: +const LVecBase3f &GeomVertexColumn::Packer_nativefloat_3:: get_data3f(const unsigned char *pointer) { return *(const LVecBase3f *)pointer; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_point_nativefloat_2::get_data2f +// Function: GeomVertexColumn::Packer_point_nativefloat_2::get_data2f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -const LVecBase2f &qpGeomVertexColumn::Packer_point_nativefloat_2:: +const LVecBase2f &GeomVertexColumn::Packer_point_nativefloat_2:: get_data2f(const unsigned char *pointer) { return *(const LVecBase2f *)pointer; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_point_nativefloat_3::get_data3f +// Function: GeomVertexColumn::Packer_point_nativefloat_3::get_data3f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -const LVecBase3f &qpGeomVertexColumn::Packer_point_nativefloat_3:: +const LVecBase3f &GeomVertexColumn::Packer_point_nativefloat_3:: get_data3f(const unsigned char *pointer) { return *(const LVecBase3f *)pointer; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_point_nativefloat_4::get_data4f +// Function: GeomVertexColumn::Packer_point_nativefloat_4::get_data4f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -const LVecBase4f &qpGeomVertexColumn::Packer_point_nativefloat_4:: +const LVecBase4f &GeomVertexColumn::Packer_point_nativefloat_4:: get_data4f(const unsigned char *pointer) { return *(const LVecBase4f *)pointer; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_argb_packed::get_data4f +// Function: GeomVertexColumn::Packer_argb_packed::get_data4f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -const LVecBase4f &qpGeomVertexColumn::Packer_argb_packed:: +const LVecBase4f &GeomVertexColumn::Packer_argb_packed:: get_data4f(const unsigned char *pointer) { PN_uint32 dword = *(const PN_uint32 *)pointer; - _v4.set((float)qpGeomVertexData::unpack_abcd_b(dword) / 255.0f, - (float)qpGeomVertexData::unpack_abcd_c(dword) / 255.0f, - (float)qpGeomVertexData::unpack_abcd_d(dword) / 255.0f, - (float)qpGeomVertexData::unpack_abcd_a(dword) / 255.0f); + _v4.set((float)GeomVertexData::unpack_abcd_b(dword) / 255.0f, + (float)GeomVertexData::unpack_abcd_c(dword) / 255.0f, + (float)GeomVertexData::unpack_abcd_d(dword) / 255.0f, + (float)GeomVertexData::unpack_abcd_a(dword) / 255.0f); return _v4; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_argb_packed::set_data4f +// Function: GeomVertexColumn::Packer_argb_packed::set_data4f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexColumn::Packer_argb_packed:: +void GeomVertexColumn::Packer_argb_packed:: set_data4f(unsigned char *pointer, const LVecBase4f &data) { - *(PN_uint32 *)pointer = qpGeomVertexData::pack_abcd + *(PN_uint32 *)pointer = GeomVertexData::pack_abcd ((unsigned int)(data[3] * 255.0f), (unsigned int)(data[0] * 255.0f), (unsigned int)(data[1] * 255.0f), @@ -1828,11 +1828,11 @@ set_data4f(unsigned char *pointer, const LVecBase4f &data) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_rgba_uint8_4::get_data4f +// Function: GeomVertexColumn::Packer_rgba_uint8_4::get_data4f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -const LVecBase4f &qpGeomVertexColumn::Packer_rgba_uint8_4:: +const LVecBase4f &GeomVertexColumn::Packer_rgba_uint8_4:: get_data4f(const unsigned char *pointer) { _v4.set((float)pointer[0] / 255.0f, (float)pointer[1] / 255.0f, @@ -1842,11 +1842,11 @@ get_data4f(const unsigned char *pointer) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_rgba_uint8_4::set_data4f +// Function: GeomVertexColumn::Packer_rgba_uint8_4::set_data4f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexColumn::Packer_rgba_uint8_4:: +void GeomVertexColumn::Packer_rgba_uint8_4:: set_data4f(unsigned char *pointer, const LVecBase4f &data) { pointer[0] = (unsigned int)(data[0] * 255.0f); pointer[1] = (unsigned int)(data[1] * 255.0f); @@ -1855,11 +1855,11 @@ set_data4f(unsigned char *pointer, const LVecBase4f &data) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_rgba_float32_4::get_data4f +// Function: GeomVertexColumn::Packer_rgba_float32_4::get_data4f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -const LVecBase4f &qpGeomVertexColumn::Packer_rgba_float32_4:: +const LVecBase4f &GeomVertexColumn::Packer_rgba_float32_4:: get_data4f(const unsigned char *pointer) { const PN_float32 *pi = (const PN_float32 *)pointer; _v4.set(pi[0], pi[1], pi[2], pi[3]); @@ -1867,11 +1867,11 @@ get_data4f(const unsigned char *pointer) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_rgba_float32_4::set_data4f +// Function: GeomVertexColumn::Packer_rgba_float32_4::set_data4f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexColumn::Packer_rgba_float32_4:: +void GeomVertexColumn::Packer_rgba_float32_4:: set_data4f(unsigned char *pointer, const LVecBase4f &data) { PN_float32 *pi = (PN_float32 *)pointer; pi[0] = data[0]; @@ -1881,31 +1881,31 @@ set_data4f(unsigned char *pointer, const LVecBase4f &data) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_rgba_nativefloat_4::get_data4f +// Function: GeomVertexColumn::Packer_rgba_nativefloat_4::get_data4f // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -const LVecBase4f &qpGeomVertexColumn::Packer_rgba_nativefloat_4:: +const LVecBase4f &GeomVertexColumn::Packer_rgba_nativefloat_4:: get_data4f(const unsigned char *pointer) { return *(const LVecBase4f *)pointer; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_uint16_1::get_data1i +// Function: GeomVertexColumn::Packer_uint16_1::get_data1i // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -int qpGeomVertexColumn::Packer_uint16_1:: +int GeomVertexColumn::Packer_uint16_1:: get_data1i(const unsigned char *pointer) { return *(const PN_uint16 *)pointer; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexColumn::Packer_uint16_1::set_data1i +// Function: GeomVertexColumn::Packer_uint16_1::set_data1i // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexColumn::Packer_uint16_1:: +void GeomVertexColumn::Packer_uint16_1:: set_data1i(unsigned char *pointer, int data) { *(PN_uint16 *)pointer = data; nassertv(*(PN_uint16 *)pointer == data); diff --git a/panda/src/gobj/qpgeomVertexColumn.h b/panda/src/gobj/geomVertexColumn.h similarity index 87% rename from panda/src/gobj/qpgeomVertexColumn.h rename to panda/src/gobj/geomVertexColumn.h index 80e149486f..65e8e18638 100644 --- a/panda/src/gobj/qpgeomVertexColumn.h +++ b/panda/src/gobj/geomVertexColumn.h @@ -1,4 +1,4 @@ -// Filename: qpgeomVertexColumn.h +// Filename: geomVertexColumn.h // Created by: drose (06Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,11 +16,11 @@ // //////////////////////////////////////////////////////////////////// -#ifndef qpGEOMVERTEXCOLUMN_H -#define qpGEOMVERTEXCOLUMN_H +#ifndef GEOMVERTEXCOLUMN_H +#define GEOMVERTEXCOLUMN_H #include "pandabase.h" -#include "qpgeomEnums.h" +#include "geomEnums.h" #include "internalName.h" #include "pointerTo.h" #include "luse.h" @@ -31,29 +31,27 @@ class BamReader; class Datagram; class DatagramIterator; -class qpGeomVertexReader; -class qpGeomVertexWriter; +class GeomVertexReader; +class GeomVertexWriter; //////////////////////////////////////////////////////////////////// -// Class : qpGeomVertexColumn +// Class : GeomVertexColumn // Description : This defines how a single column is interleaved // within a vertex array stored within a Geom. The // GeomVertexArrayFormat class maintains a list of these // to completely define a particular array structure. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// -class EXPCL_PANDA qpGeomVertexColumn : public qpGeomEnums { +class EXPCL_PANDA GeomVertexColumn : public GeomEnums { PUBLISHED: private: - INLINE qpGeomVertexColumn(); + INLINE GeomVertexColumn(); PUBLISHED: - INLINE qpGeomVertexColumn(const InternalName *name, int num_components, + INLINE GeomVertexColumn(const InternalName *name, int num_components, NumericType numeric_type, Contents contents, int start); - INLINE qpGeomVertexColumn(const qpGeomVertexColumn ©); - void operator = (const qpGeomVertexColumn ©); - INLINE ~qpGeomVertexColumn(); + INLINE GeomVertexColumn(const GeomVertexColumn ©); + void operator = (const GeomVertexColumn ©); + INLINE ~GeomVertexColumn(); INLINE const InternalName *get_name() const; INLINE int get_num_components() const; @@ -66,7 +64,7 @@ PUBLISHED: INLINE bool has_homogeneous_coord() const; INLINE bool overlaps_with(int start_byte, int num_bytes) const; - INLINE bool is_bytewise_equivalent(const qpGeomVertexColumn &other) const; + INLINE bool is_bytewise_equivalent(const GeomVertexColumn &other) const; void output(ostream &out) const; @@ -74,10 +72,10 @@ public: INLINE bool is_packed_argb() const; INLINE bool is_uint8_rgba() const; - INLINE int compare_to(const qpGeomVertexColumn &other) const; - INLINE bool operator == (const qpGeomVertexColumn &other) const; - INLINE bool operator != (const qpGeomVertexColumn &other) const; - INLINE bool operator < (const qpGeomVertexColumn &other) const; + INLINE int compare_to(const GeomVertexColumn &other) const; + INLINE bool operator == (const GeomVertexColumn &other) const; + INLINE bool operator != (const GeomVertexColumn &other) const; + INLINE bool operator < (const GeomVertexColumn &other) const; private: class Packer; @@ -140,7 +138,7 @@ private: INLINE void maybe_unscale_color(const LVecBase3f &data); INLINE void maybe_unscale_color(const LVecBase4f &data); - const qpGeomVertexColumn *_column; + const GeomVertexColumn *_column; LVecBase2f _v2; LVecBase3f _v3; LVecBase4f _v4; @@ -254,13 +252,13 @@ private: virtual void set_data1i(unsigned char *pointer, int value); }; - friend class qpGeomVertexArrayFormat; - friend class qpGeomVertexReader; - friend class qpGeomVertexWriter; + friend class GeomVertexArrayFormat; + friend class GeomVertexReader; + friend class GeomVertexWriter; }; -INLINE ostream &operator << (ostream &out, const qpGeomVertexColumn &obj); +INLINE ostream &operator << (ostream &out, const GeomVertexColumn &obj); -#include "qpgeomVertexColumn.I" +#include "geomVertexColumn.I" #endif diff --git a/panda/src/gobj/qpgeomVertexData.I b/panda/src/gobj/geomVertexData.I similarity index 81% rename from panda/src/gobj/qpgeomVertexData.I rename to panda/src/gobj/geomVertexData.I index 9eae84a4db..9f6b40a221 100644 --- a/panda/src/gobj/qpgeomVertexData.I +++ b/panda/src/gobj/geomVertexData.I @@ -1,4 +1,4 @@ -// Filename: qpgeomVertexData.I +// Filename: geomVertexData.I // Created by: drose (06Mar05) // //////////////////////////////////////////////////////////////////// @@ -18,30 +18,30 @@ //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::get_name +// Function: GeomVertexData::get_name // Access: Published // Description: Returns the name passed to the constructor, if any. // This name is reported on the PStats graph for vertex // computations. //////////////////////////////////////////////////////////////////// -INLINE const string &qpGeomVertexData:: +INLINE const string &GeomVertexData:: get_name() const { return _name; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::get_format +// Function: GeomVertexData::get_format // Access: Published // Description: Returns a pointer to the GeomVertexFormat structure // that defines this data. //////////////////////////////////////////////////////////////////// -INLINE const qpGeomVertexFormat *qpGeomVertexData:: +INLINE const GeomVertexFormat *GeomVertexData:: get_format() const { return _format; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::get_usage_hint +// Function: GeomVertexData::get_usage_hint // Access: Published // Description: Returns the usage hint that was passed to the // constructor, and which will be passed to each array @@ -54,26 +54,26 @@ get_format() const { // specified, so there is no guarantee that the // individual arrays all have the same usage_hint. //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexData::UsageHint qpGeomVertexData:: +INLINE GeomVertexData::UsageHint GeomVertexData:: get_usage_hint() const { CDReader cdata(_cycler); return cdata->_usage_hint; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::has_column +// Function: GeomVertexData::has_column // Access: Published // Description: Returns true if the data has the named column, // false otherwise. This is really just a shortcut for // asking the same thing from the format. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexData:: +INLINE bool GeomVertexData:: has_column(const InternalName *name) const { return _format->has_column(name); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::set_num_rows +// Function: GeomVertexData::set_num_rows // Access: Published // Description: Sets the length of the array to n rows in all of // the various arrays (presumably by adding rows). @@ -93,33 +93,33 @@ has_column(const InternalName *name) const { // without need to explicitly set the number of // rows. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexData:: +INLINE bool GeomVertexData:: set_num_rows(int n) { CDWriter cdata(_cycler); return do_set_num_rows(n, cdata); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::get_num_arrays +// Function: GeomVertexData::get_num_arrays // Access: Published // Description: Returns the number of individual arrays stored within // the data. This must match // get_format()->get_num_arrays(). //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexData:: +INLINE int GeomVertexData:: get_num_arrays() const { CDReader cdata(_cycler); return cdata->_arrays.size(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::get_array +// Function: GeomVertexData::get_array // Access: Published // Description: Returns a const pointer to the vertex data for the // indicated array, for application code to directly // examine (but not modify) the underlying vertex data. //////////////////////////////////////////////////////////////////// -INLINE const qpGeomVertexArrayData *qpGeomVertexData:: +INLINE const GeomVertexArrayData *GeomVertexData:: get_array(int i) const { CDReader cdata(_cycler); nassertr(i >= 0 && i < (int)cdata->_arrays.size(), NULL); @@ -127,7 +127,7 @@ get_array(int i) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::get_transform_table +// Function: GeomVertexData::get_transform_table // Access: Published // Description: Returns a const pointer to the TransformTable // assigned to this data. Vertices within the table @@ -142,26 +142,26 @@ get_array(int i) const { // vertices will not be animated by the graphics // hardware). //////////////////////////////////////////////////////////////////// -INLINE const TransformTable *qpGeomVertexData:: +INLINE const TransformTable *GeomVertexData:: get_transform_table() const { CDReader cdata(_cycler); return cdata->_transform_table; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::clear_transform_table +// Function: GeomVertexData::clear_transform_table // Access: Published // Description: Sets the TransformTable pointer to NULL, // removing the table from the vertex data. This // disables hardware-driven vertex animation. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexData:: +INLINE void GeomVertexData:: clear_transform_table() { set_transform_table(NULL); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::get_transform_blend_table +// Function: GeomVertexData::get_transform_blend_table // Access: Published // Description: Returns a const pointer to the TransformBlendTable // assigned to this data. Vertices within the table @@ -174,26 +174,26 @@ clear_transform_table() { // have a TransformBlendTable assigned (which implies // the vertices will not be animated by the CPU). //////////////////////////////////////////////////////////////////// -INLINE const TransformBlendTable *qpGeomVertexData:: +INLINE const TransformBlendTable *GeomVertexData:: get_transform_blend_table() const { CDReader cdata(_cycler); return cdata->_transform_blend_table; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::clear_transform_blend_table +// Function: GeomVertexData::clear_transform_blend_table // Access: Published // Description: Sets the TransformBlendTable pointer to NULL, // removing the table from the vertex data. This // disables CPU-driven vertex animation. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexData:: +INLINE void GeomVertexData:: clear_transform_blend_table() { set_transform_blend_table(NULL); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::get_slider_table +// Function: GeomVertexData::get_slider_table // Access: Published // Description: Returns a const pointer to the SliderTable // assigned to this data. Vertices within the vertex @@ -203,60 +203,60 @@ clear_transform_blend_table() { // This will return NULL if the vertex data does not // have a SliderTable assigned. //////////////////////////////////////////////////////////////////// -INLINE const SliderTable *qpGeomVertexData:: +INLINE const SliderTable *GeomVertexData:: get_slider_table() const { CDReader cdata(_cycler); return cdata->_slider_table; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::clear_slider_table +// Function: GeomVertexData::clear_slider_table // Access: Published // Description: Sets the SliderTable pointer to NULL, // removing the table from the vertex data. This // disables morph (blend shape) animation. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexData:: +INLINE void GeomVertexData:: clear_slider_table() { set_slider_table(NULL); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::get_modified +// Function: GeomVertexData::get_modified // Access: Published // Description: Returns a sequence number which is guaranteed to // change at least every time the vertex data is // modified. //////////////////////////////////////////////////////////////////// -INLINE UpdateSeq qpGeomVertexData:: +INLINE UpdateSeq GeomVertexData:: get_modified() const { CDReader cdata(_cycler); return cdata->_modified; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::has_vertex +// Function: GeomVertexData::has_vertex // Access: Public // Description: Returns true if the data has a "vertex" column, false // otherwise. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexData:: +INLINE bool GeomVertexData:: has_vertex() const { - return (_format->get_vertex_column() != (qpGeomVertexColumn *)NULL); + return (_format->get_vertex_column() != (GeomVertexColumn *)NULL); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::is_vertex_transformed +// Function: GeomVertexData::is_vertex_transformed // Access: Public // Description: Returns true if the data has a "vertex" column and it // is indicated as having been transformed into clip // coordinates, false if there is no vertex column or if // it contains ordinary 3-d pre-transformation points. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexData:: +INLINE bool GeomVertexData:: is_vertex_transformed() const { - const qpGeomVertexColumn *column = _format->get_vertex_column(); - if (column != (qpGeomVertexColumn *)NULL) { + const GeomVertexColumn *column = _format->get_vertex_column(); + if (column != (GeomVertexColumn *)NULL) { return column->get_contents() == C_clip_point; } @@ -264,34 +264,34 @@ is_vertex_transformed() const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::has_normal +// Function: GeomVertexData::has_normal // Access: Public // Description: Returns true if the data has a "normal" column, false // otherwise. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexData:: +INLINE bool GeomVertexData:: has_normal() const { - return (_format->get_normal_column() != (qpGeomVertexColumn *)NULL); + return (_format->get_normal_column() != (GeomVertexColumn *)NULL); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::has_color +// Function: GeomVertexData::has_color // Access: Public // Description: Returns true if the data has a "color" column, false // otherwise. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexData:: +INLINE bool GeomVertexData:: has_color() const { - return (_format->get_color_column() != (qpGeomVertexColumn *)NULL); + return (_format->get_color_column() != (GeomVertexColumn *)NULL); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::pack_abcd +// Function: GeomVertexData::pack_abcd // Access: Public, Static // Description: Packs four values in a DirectX-style NT_packed_abcd // value. //////////////////////////////////////////////////////////////////// -INLINE PN_uint32 qpGeomVertexData:: +INLINE PN_uint32 GeomVertexData:: pack_abcd(unsigned int a, unsigned int b, unsigned int c, unsigned int d) { return (((a & 0xff) << 24) | @@ -301,56 +301,56 @@ pack_abcd(unsigned int a, unsigned int b, } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::unpack_abcd_a +// Function: GeomVertexData::unpack_abcd_a // Access: Public, Static // Description: Returns the first packed value from a DirectX-style // NT_packed_abcd. //////////////////////////////////////////////////////////////////// -INLINE unsigned int qpGeomVertexData:: +INLINE unsigned int GeomVertexData:: unpack_abcd_a(PN_uint32 data) { return (data >> 24) & 0xff; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::unpack_abcd_b +// Function: GeomVertexData::unpack_abcd_b // Access: Public, Static // Description: Returns the second packed value from a DirectX-style // NT_packed_abcd. //////////////////////////////////////////////////////////////////// -INLINE unsigned int qpGeomVertexData:: +INLINE unsigned int GeomVertexData:: unpack_abcd_b(PN_uint32 data) { return (data >> 16) & 0xff; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::unpack_abcd_c +// Function: GeomVertexData::unpack_abcd_c // Access: Public, Static // Description: Returns the third packed value from a DirectX-style // NT_packed_abcd. //////////////////////////////////////////////////////////////////// -INLINE unsigned int qpGeomVertexData:: +INLINE unsigned int GeomVertexData:: unpack_abcd_c(PN_uint32 data) { return (data >> 8) & 0xff; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::unpack_abcd_d +// Function: GeomVertexData::unpack_abcd_d // Access: Public, Static // Description: Returns the fourth packed value from a DirectX-style // NT_packed_abcd. //////////////////////////////////////////////////////////////////// -INLINE unsigned int qpGeomVertexData:: +INLINE unsigned int GeomVertexData:: unpack_abcd_d(PN_uint32 data) { return data & 0xff; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::add_transform +// Function: GeomVertexData::add_transform // Access: Private, Static // Description: Adds the indicated transform to the table, if it is // not already there, and returns its index number. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexData:: +INLINE int GeomVertexData:: add_transform(TransformTable *table, const VertexTransform *transform, TransformMap &already_added) { pair result = already_added.insert(TransformMap::value_type(transform, table->get_num_transforms())); @@ -363,12 +363,12 @@ add_transform(TransformTable *table, const VertexTransform *transform, } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::CacheEntry::Constructor +// Function: GeomVertexData::CacheEntry::Constructor // Access: Public // Description: //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexData::CacheEntry:: -CacheEntry(const qpGeomVertexFormat *modifier) : +INLINE GeomVertexData::CacheEntry:: +CacheEntry(const GeomVertexFormat *modifier) : _source(NULL), _modifier(modifier), _result(NULL) @@ -376,14 +376,14 @@ CacheEntry(const qpGeomVertexFormat *modifier) : } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::CacheEntry::Constructor +// Function: GeomVertexData::CacheEntry::Constructor // Access: Public // Description: //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexData::CacheEntry:: -CacheEntry(qpGeomVertexData *source, - const qpGeomVertexFormat *modifier, - const qpGeomVertexData *result) : +INLINE GeomVertexData::CacheEntry:: +CacheEntry(GeomVertexData *source, + const GeomVertexFormat *modifier, + const GeomVertexData *result) : _source(source), _modifier(modifier), _result(result) @@ -391,33 +391,33 @@ CacheEntry(qpGeomVertexData *source, } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::CacheEntry::operator < +// Function: GeomVertexData::CacheEntry::operator < // Access: Public // Description: Provides a unique ordering within the set. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexData::CacheEntry:: +INLINE bool GeomVertexData::CacheEntry:: operator < (const CacheEntry &other) const { return _modifier < other._modifier; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::CData::Constructor +// Function: GeomVertexData::CData::Constructor // Access: Public // Description: //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexData::CData:: +INLINE GeomVertexData::CData:: CData() : _usage_hint(UH_unspecified) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::CData::Copy Constructor +// Function: GeomVertexData::CData::Copy Constructor // Access: Public // Description: //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexData::CData:: -CData(const qpGeomVertexData::CData ©) : +INLINE GeomVertexData::CData:: +CData(const GeomVertexData::CData ©) : _usage_hint(copy._usage_hint), _arrays(copy._arrays), _transform_table(copy._transform_table), @@ -430,7 +430,7 @@ CData(const qpGeomVertexData::CData ©) : } INLINE ostream & -operator << (ostream &out, const qpGeomVertexData &obj) { +operator << (ostream &out, const GeomVertexData &obj) { obj.output(out); return out; } diff --git a/panda/src/gobj/qpgeomVertexData.cxx b/panda/src/gobj/geomVertexData.cxx similarity index 82% rename from panda/src/gobj/qpgeomVertexData.cxx rename to panda/src/gobj/geomVertexData.cxx index 64af51cf75..f52acb6176 100644 --- a/panda/src/gobj/qpgeomVertexData.cxx +++ b/panda/src/gobj/geomVertexData.cxx @@ -1,4 +1,4 @@ -// Filename: qpgeomVertexData.cxx +// Filename: geomVertexData.cxx // Created by: drose (06Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,31 +16,31 @@ // //////////////////////////////////////////////////////////////////// -#include "qpgeomVertexData.h" -#include "qpgeomVertexReader.h" -#include "qpgeomVertexWriter.h" -#include "qpgeomVertexRewriter.h" +#include "geomVertexData.h" +#include "geomVertexReader.h" +#include "geomVertexWriter.h" +#include "geomVertexRewriter.h" #include "pStatTimer.h" #include "bamReader.h" #include "bamWriter.h" #include "pset.h" #include "indent.h" -TypeHandle qpGeomVertexData::_type_handle; +TypeHandle GeomVertexData::_type_handle; -PStatCollector qpGeomVertexData::_convert_pcollector("*:Munge:Convert"); -PStatCollector qpGeomVertexData::_scale_color_pcollector("*:Munge:Scale color"); -PStatCollector qpGeomVertexData::_set_color_pcollector("*:Munge:Set color"); -PStatCollector qpGeomVertexData::_animation_pcollector("*:Animation"); +PStatCollector GeomVertexData::_convert_pcollector("*:Munge:Convert"); +PStatCollector GeomVertexData::_scale_color_pcollector("*:Munge:Scale color"); +PStatCollector GeomVertexData::_set_color_pcollector("*:Munge:Set color"); +PStatCollector GeomVertexData::_animation_pcollector("*:Animation"); //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::Default Constructor +// Function: GeomVertexData::Default Constructor // Access: Private // Description: Constructs an invalid object. This is only used when // reading from the bam file. //////////////////////////////////////////////////////////////////// -qpGeomVertexData:: -qpGeomVertexData() : +GeomVertexData:: +GeomVertexData() : _char_pcollector(_animation_pcollector, "unnamed"), _skinning_pcollector(_char_pcollector, "Skinning"), _morphs_pcollector(_char_pcollector, "Morphs") @@ -48,14 +48,14 @@ qpGeomVertexData() : } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::Constructor +// Function: GeomVertexData::Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -qpGeomVertexData:: -qpGeomVertexData(const string &name, - const qpGeomVertexFormat *format, - qpGeomVertexData::UsageHint usage_hint) : +GeomVertexData:: +GeomVertexData(const string &name, + const GeomVertexFormat *format, + GeomVertexData::UsageHint usage_hint) : _name(name), _format(format), _char_pcollector(PStatCollector(_animation_pcollector, name)), @@ -71,19 +71,19 @@ qpGeomVertexData(const string &name, int num_arrays = _format->get_num_arrays(); for (int i = 0; i < num_arrays; i++) { - PT(qpGeomVertexArrayData) array = new qpGeomVertexArrayData + PT(GeomVertexArrayData) array = new GeomVertexArrayData (_format->get_array(i), usage_hint); cdata->_arrays.push_back(array); } } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::Copy Constructor +// Function: GeomVertexData::Copy Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -qpGeomVertexData:: -qpGeomVertexData(const qpGeomVertexData ©) : +GeomVertexData:: +GeomVertexData(const GeomVertexData ©) : TypedWritableReferenceCount(copy), _name(copy._name), _format(copy._format), @@ -99,16 +99,16 @@ qpGeomVertexData(const qpGeomVertexData ©) : } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::Constructor +// Function: GeomVertexData::Constructor // Access: Published // Description: This constructor copies all of the basic properties // of the source VertexData, like usage_hint and // animation tables, but does not copy the actual data, // and it allows you to specify a different format. //////////////////////////////////////////////////////////////////// -qpGeomVertexData:: -qpGeomVertexData(const qpGeomVertexData ©, - const qpGeomVertexFormat *format) : +GeomVertexData:: +GeomVertexData(const GeomVertexData ©, + const GeomVertexFormat *format) : TypedWritableReferenceCount(copy), _name(copy._name), _format(format), @@ -126,7 +126,7 @@ qpGeomVertexData(const qpGeomVertexData ©, cdata->_arrays.clear(); int num_arrays = _format->get_num_arrays(); for (int i = 0; i < num_arrays; i++) { - PT(qpGeomVertexArrayData) array = new qpGeomVertexArrayData + PT(GeomVertexArrayData) array = new GeomVertexArrayData (_format->get_array(i), usage_hint); cdata->_arrays.push_back(array); } @@ -137,12 +137,12 @@ qpGeomVertexData(const qpGeomVertexData ©, } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::Copy Assignment Operator +// Function: GeomVertexData::Copy Assignment Operator // Access: Published // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexData:: -operator = (const qpGeomVertexData ©) { +void GeomVertexData:: +operator = (const GeomVertexData ©) { TypedWritableReferenceCount::operator = (copy); _name = copy._name; _format = copy._format; @@ -153,17 +153,17 @@ operator = (const qpGeomVertexData ©) { CDWriter cdata(_cycler); clear_cache(); - cdata->_modified = qpGeom::get_next_modified(); + cdata->_modified = Geom::get_next_modified(); cdata->_animated_vertices_modified = UpdateSeq(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::Destructor +// Function: GeomVertexData::Destructor // Access: Published, Virtual // Description: //////////////////////////////////////////////////////////////////// -qpGeomVertexData:: -~qpGeomVertexData() { +GeomVertexData:: +~GeomVertexData() { // When we destruct, we should ensure that all of our cached // entries, across all pipeline stages, are properly removed from // the cache manager. @@ -184,12 +184,12 @@ qpGeomVertexData:: } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::set_name +// Function: GeomVertexData::set_name // Access: Published // Description: Changes the name of the vertex data. This name is // reported on the PStats graph for vertex computations. //////////////////////////////////////////////////////////////////// -void qpGeomVertexData:: +void GeomVertexData:: set_name(const string &name) { _name = name; _char_pcollector = PStatCollector(_animation_pcollector, name); @@ -198,14 +198,14 @@ set_name(const string &name) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::set_usage_hint +// Function: GeomVertexData::set_usage_hint // Access: Published // Description: Changes the UsageHint hint for this vertex data, and // for all of the arrays that share this data. See // get_usage_hint(). //////////////////////////////////////////////////////////////////// -void qpGeomVertexData:: -set_usage_hint(qpGeomVertexData::UsageHint usage_hint) { +void GeomVertexData:: +set_usage_hint(GeomVertexData::UsageHint usage_hint) { CDWriter cdata(_cycler); cdata->_usage_hint = usage_hint; @@ -214,23 +214,23 @@ set_usage_hint(qpGeomVertexData::UsageHint usage_hint) { ai != cdata->_arrays.end(); ++ai) { if ((*ai)->get_ref_count() > 1) { - (*ai) = new qpGeomVertexArrayData(*(*ai)); + (*ai) = new GeomVertexArrayData(*(*ai)); } (*ai)->set_usage_hint(usage_hint); } clear_cache(); - cdata->_modified = qpGeom::get_next_modified(); + cdata->_modified = Geom::get_next_modified(); cdata->_animated_vertices_modified = UpdateSeq(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::get_num_rows +// Function: GeomVertexData::get_num_rows // Access: Published // Description: Returns the number of rows stored within all the // arrays. All arrays store data for the same n // rows. //////////////////////////////////////////////////////////////////// -int qpGeomVertexData:: +int GeomVertexData:: get_num_rows() const { CDReader cdata(_cycler); nassertr(_format->get_num_arrays() == (int)cdata->_arrays.size(), 0); @@ -245,13 +245,13 @@ get_num_rows() const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::clear_rows +// Function: GeomVertexData::clear_rows // Access: Published // Description: Removes all of the rows from the arrays; // functionally equivalent to set_num_rows(0) (but // faster). //////////////////////////////////////////////////////////////////// -void qpGeomVertexData:: +void GeomVertexData:: clear_rows() { CDWriter cdata(_cycler); nassertv(_format->get_num_arrays() == (int)cdata->_arrays.size()); @@ -261,17 +261,17 @@ clear_rows() { ai != cdata->_arrays.end(); ++ai) { if ((*ai)->get_ref_count() > 1) { - (*ai) = new qpGeomVertexArrayData(*(*ai)); + (*ai) = new GeomVertexArrayData(*(*ai)); } (*ai)->clear_rows(); } clear_cache(); - cdata->_modified = qpGeom::get_next_modified(); + cdata->_modified = Geom::get_next_modified(); cdata->_animated_vertices.clear(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::modify_array +// Function: GeomVertexData::modify_array // Access: Published // Description: Returns a modifiable pointer to the indicated vertex // array, so that application code may directly @@ -280,7 +280,7 @@ clear_rows() { // should be kept in sync--use set_num_rows() // instead. //////////////////////////////////////////////////////////////////// -qpGeomVertexArrayData *qpGeomVertexData:: +GeomVertexArrayData *GeomVertexData:: modify_array(int i) { // Perform copy-on-write: if the reference count on the vertex data // is greater than 1, assume some other GeomVertexData has the same @@ -289,35 +289,35 @@ modify_array(int i) { nassertr(i >= 0 && i < (int)cdata->_arrays.size(), NULL); if (cdata->_arrays[i]->get_ref_count() > 1) { - cdata->_arrays[i] = new qpGeomVertexArrayData(*cdata->_arrays[i]); + cdata->_arrays[i] = new GeomVertexArrayData(*cdata->_arrays[i]); } clear_cache(); - cdata->_modified = qpGeom::get_next_modified(); + cdata->_modified = Geom::get_next_modified(); cdata->_animated_vertices_modified = UpdateSeq(); return cdata->_arrays[i]; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::set_array +// Function: GeomVertexData::set_array // Access: Published // Description: Replaces the indicated vertex data array with // a completely new array. You should be careful that // the new array has the same length and format as the // old one, unless you know what you are doing. //////////////////////////////////////////////////////////////////// -void qpGeomVertexData:: -set_array(int i, const qpGeomVertexArrayData *array) { +void GeomVertexData:: +set_array(int i, const GeomVertexArrayData *array) { CDWriter cdata(_cycler); nassertv(i >= 0 && i < (int)cdata->_arrays.size()); - cdata->_arrays[i] = (qpGeomVertexArrayData *)array; + cdata->_arrays[i] = (GeomVertexArrayData *)array; clear_cache(); - cdata->_modified = qpGeom::get_next_modified(); + cdata->_modified = Geom::get_next_modified(); cdata->_animated_vertices_modified = UpdateSeq(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::set_transform_table +// Function: GeomVertexData::set_transform_table // Access: Published // Description: Replaces the TransformTable on this vertex // data with the indicated table. The length of this @@ -325,26 +325,26 @@ set_array(int i, const qpGeomVertexArrayData *array) { // index assigned to the vertices under the // "transform_index" name. //////////////////////////////////////////////////////////////////// -void qpGeomVertexData:: +void GeomVertexData:: set_transform_table(const TransformTable *table) { nassertv(table == (TransformTable *)NULL || table->is_registered()); CDWriter cdata(_cycler); cdata->_transform_table = (TransformTable *)table; clear_cache(); - cdata->_modified = qpGeom::get_next_modified(); + cdata->_modified = Geom::get_next_modified(); cdata->_animated_vertices_modified = UpdateSeq(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::modify_transform_blend_table +// Function: GeomVertexData::modify_transform_blend_table // Access: Published // Description: Returns a modifiable pointer to the current // TransformBlendTable on this vertex data, if any, or // NULL if there is not a TransformBlendTable. See // get_transform_blend_table(). //////////////////////////////////////////////////////////////////// -TransformBlendTable *qpGeomVertexData:: +TransformBlendTable *GeomVertexData:: modify_transform_blend_table() { // Perform copy-on-write: if the reference count on the table is // greater than 1, assume some other GeomVertexData has the same @@ -355,14 +355,14 @@ modify_transform_blend_table() { cdata->_transform_blend_table = new TransformBlendTable(*cdata->_transform_blend_table); } clear_cache(); - cdata->_modified = qpGeom::get_next_modified(); + cdata->_modified = Geom::get_next_modified(); cdata->_animated_vertices_modified = UpdateSeq(); return cdata->_transform_blend_table; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::set_transform_blend_table +// Function: GeomVertexData::set_transform_blend_table // Access: Published // Description: Replaces the TransformBlendTable on this vertex // data with the indicated table. The length of this @@ -370,17 +370,17 @@ modify_transform_blend_table() { // index assigned to the vertices under the // "transform_blend" name. //////////////////////////////////////////////////////////////////// -void qpGeomVertexData:: +void GeomVertexData:: set_transform_blend_table(const TransformBlendTable *table) { CDWriter cdata(_cycler); cdata->_transform_blend_table = (TransformBlendTable *)table; clear_cache(); - cdata->_modified = qpGeom::get_next_modified(); + cdata->_modified = Geom::get_next_modified(); cdata->_animated_vertices_modified = UpdateSeq(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::set_slider_table +// Function: GeomVertexData::set_slider_table // Access: Published // Description: Replaces the SliderTable on this vertex // data with the indicated table. There should be an @@ -390,28 +390,28 @@ set_transform_blend_table(const TransformBlendTable *table) { // The SliderTable object must have been registered // prior to setting it on the GeomVertexData. //////////////////////////////////////////////////////////////////// -void qpGeomVertexData:: +void GeomVertexData:: set_slider_table(const SliderTable *table) { nassertv(table == (SliderTable *)NULL || table->is_registered()); CDWriter cdata(_cycler); cdata->_slider_table = (SliderTable *)table; clear_cache(); - cdata->_modified = qpGeom::get_next_modified(); + cdata->_modified = Geom::get_next_modified(); cdata->_animated_vertices_modified = UpdateSeq(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::get_num_bytes +// Function: GeomVertexData::get_num_bytes // Access: Published // Description: Returns the total number of bytes consumed by the // different arrays of the vertex data. //////////////////////////////////////////////////////////////////// -int qpGeomVertexData:: +int GeomVertexData:: get_num_bytes() const { CDReader cdata(_cycler); - int num_bytes = sizeof(qpGeomVertexData); + int num_bytes = sizeof(GeomVertexData); Arrays::const_iterator ai; for (ai = cdata->_arrays.begin(); ai != cdata->_arrays.end(); ++ai) { @@ -422,7 +422,7 @@ get_num_bytes() const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::copy_from +// Function: GeomVertexData::copy_from // Access: Published // Description: Copies all the data from the other array into the // corresponding data types in this array, by matching @@ -437,10 +437,10 @@ get_num_bytes() const { // GeomVertexArrayData objects themselves are copied // pointerwise from the source. //////////////////////////////////////////////////////////////////// -void qpGeomVertexData:: -copy_from(const qpGeomVertexData *source, bool keep_data_objects) { - const qpGeomVertexFormat *source_format = source->get_format(); - const qpGeomVertexFormat *dest_format = get_format(); +void GeomVertexData:: +copy_from(const GeomVertexData *source, bool keep_data_objects) { + const GeomVertexFormat *source_format = source->get_format(); + const GeomVertexFormat *dest_format = get_format(); int num_rows = source->get_num_rows(); int num_arrays = source_format->get_num_arrays(); @@ -451,7 +451,7 @@ copy_from(const qpGeomVertexData *source, bool keep_data_objects) { pset done_arrays; for (source_i = 0; source_i < num_arrays; ++source_i) { - const qpGeomVertexArrayFormat *source_array_format = + const GeomVertexArrayFormat *source_array_format = source_format->get_array(source_i); bool array_done = false; @@ -460,7 +460,7 @@ copy_from(const qpGeomVertexData *source, bool keep_data_objects) { for (int dest_i = 0; dest_i < dest_num_arrays && !array_done; ++dest_i) { - const qpGeomVertexArrayFormat *dest_array_format = + const GeomVertexArrayFormat *dest_array_format = dest_format->get_array(dest_i); if (dest_array_format->is_data_subset_of(*source_array_format)) { // Great! Just use the same data for this one. @@ -492,19 +492,19 @@ copy_from(const qpGeomVertexData *source, bool keep_data_objects) { // Now go back through and copy any data that's left over. for (source_i = 0; source_i < num_arrays; ++source_i) { CPTA_uchar array_data = source->get_array(source_i)->get_data(); - const qpGeomVertexArrayFormat *source_array_format = source_format->get_array(source_i); + const GeomVertexArrayFormat *source_array_format = source_format->get_array(source_i); int num_columns = source_array_format->get_num_columns(); for (int di = 0; di < num_columns; ++di) { - const qpGeomVertexColumn *source_column = source_array_format->get_column(di); + const GeomVertexColumn *source_column = source_array_format->get_column(di); int dest_i = dest_format->get_array_with(source_column->get_name()); if (dest_i >= 0 && done_arrays.count(dest_i) == 0) { // The data type exists in the new format; we have to copy it. - const qpGeomVertexArrayFormat *dest_array_format = + const GeomVertexArrayFormat *dest_array_format = dest_format->get_array(dest_i); - const qpGeomVertexColumn *dest_column = + const GeomVertexColumn *dest_column = dest_array_format->get_column(source_column->get_name()); - nassertv(dest_column != (const qpGeomVertexColumn *)NULL); + nassertv(dest_column != (const GeomVertexColumn *)NULL); if (dest_column->is_bytewise_equivalent(*source_column)) { // We can do a quick bytewise copy. @@ -545,9 +545,9 @@ copy_from(const qpGeomVertexData *source, bool keep_data_objects) { << "generic copy " << *dest_column << " from " << *source_column << "\n"; } - qpGeomVertexWriter to(this); + GeomVertexWriter to(this); to.set_column(dest_i, dest_column); - qpGeomVertexReader from(source); + GeomVertexReader from(source); from.set_column(source_i, source_column); while (!from.is_at_end()) { @@ -559,8 +559,8 @@ copy_from(const qpGeomVertexData *source, bool keep_data_objects) { } // Also convert the animation tables as necessary. - const qpGeomVertexAnimationSpec &source_animation = source_format->get_animation(); - const qpGeomVertexAnimationSpec &dest_animation = dest_format->get_animation(); + const GeomVertexAnimationSpec &source_animation = source_format->get_animation(); + const GeomVertexAnimationSpec &dest_animation = dest_format->get_animation(); if (source_animation != dest_animation) { if (dest_animation.get_animation_type() == AT_hardware) { // Convert Panda-style animation tables to hardware-style @@ -573,9 +573,9 @@ copy_from(const qpGeomVertexData *source, bool keep_data_objects) { if (dest_animation.get_indexed_transforms()) { // Build an indexed transform array. This is easier; this // means we can put the blends in any order. - qpGeomVertexWriter weight(this, InternalName::get_transform_weight()); - qpGeomVertexWriter index(this, InternalName::get_transform_index()); - qpGeomVertexReader from(source, InternalName::get_transform_blend()); + GeomVertexWriter weight(this, InternalName::get_transform_weight()); + GeomVertexWriter index(this, InternalName::get_transform_index()); + GeomVertexReader from(source, InternalName::get_transform_blend()); while (!from.is_at_end()) { const TransformBlend &blend = blend_table->get_blend(from.get_data1i()); @@ -596,8 +596,8 @@ copy_from(const qpGeomVertexData *source, bool keep_data_objects) { } else { // Build a nonindexed transform array. This means we have to // use the same n transforms, in the same order, for each vertex. - qpGeomVertexWriter weight(this, InternalName::get_transform_weight()); - qpGeomVertexReader from(source, InternalName::get_transform_blend()); + GeomVertexWriter weight(this, InternalName::get_transform_weight()); + GeomVertexReader from(source, InternalName::get_transform_blend()); while (!from.is_at_end()) { const TransformBlend &blend = blend_table->get_blend(from.get_data1i()); @@ -623,18 +623,18 @@ copy_from(const qpGeomVertexData *source, bool keep_data_objects) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::copy_row_from +// Function: GeomVertexData::copy_row_from // Access: Published // Description: Copies a single row of the data from the other array // into the indicated row of this array. In this case, // the source format must exactly match the destination // format. //////////////////////////////////////////////////////////////////// -void qpGeomVertexData:: -copy_row_from(int dest_row, const qpGeomVertexData *source, +void GeomVertexData:: +copy_row_from(int dest_row, const GeomVertexData *source, int source_row) { - const qpGeomVertexFormat *source_format = source->get_format(); - const qpGeomVertexFormat *dest_format = get_format(); + const GeomVertexFormat *source_format = source->get_format(); + const GeomVertexFormat *dest_format = get_format(); nassertv(source_format == dest_format); nassertv(source_row >= 0 && source_row < source->get_num_rows()); @@ -648,7 +648,7 @@ copy_row_from(int dest_row, const qpGeomVertexData *source, for (int i = 0; i < num_arrays; ++i) { PTA_uchar dest_array_data = modify_array(i)->modify_data(); CPTA_uchar source_array_data = source->get_array(i)->get_data(); - const qpGeomVertexArrayFormat *array_format = source_format->get_array(i); + const GeomVertexArrayFormat *array_format = source_format->get_array(i); int stride = array_format->get_stride(); memcpy(dest_array_data + stride * dest_row, @@ -658,14 +658,14 @@ copy_row_from(int dest_row, const qpGeomVertexData *source, } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::convert_to +// Function: GeomVertexData::convert_to // Access: Published // Description: Returns a new GeomVertexData that represents the same // contents as this one, with all data types matched up // name-by-name to the indicated new format. //////////////////////////////////////////////////////////////////// -CPT(qpGeomVertexData) qpGeomVertexData:: -convert_to(const qpGeomVertexFormat *new_format) const { +CPT(GeomVertexData) GeomVertexData:: +convert_to(const GeomVertexFormat *new_format) const { if (new_format == _format) { // Trivial case: no change is needed. return this; @@ -695,8 +695,8 @@ convert_to(const qpGeomVertexFormat *new_format) const { } PStatTimer timer(_convert_pcollector); - PT(qpGeomVertexData) new_data = - new qpGeomVertexData(get_name(), new_format, get_usage_hint()); + PT(GeomVertexData) new_data = + new GeomVertexData(get_name(), new_format, get_usage_hint()); new_data->set_transform_blend_table(get_transform_blend_table()); new_data->set_slider_table(get_slider_table()); @@ -706,8 +706,8 @@ convert_to(const qpGeomVertexFormat *new_format) const { // Record the new result in the cache. CacheEntry *entry; { - CDWriter cdata(((qpGeomVertexData *)this)->_cycler); - entry = new CacheEntry((qpGeomVertexData *)this, new_format, new_data); + CDWriter cdata(((GeomVertexData *)this)->_cycler); + entry = new CacheEntry((GeomVertexData *)this, new_format, new_data); bool inserted = cdata->_cache.insert(entry).second; nassertr(inserted, new_data); } @@ -723,7 +723,7 @@ convert_to(const qpGeomVertexFormat *new_format) const { //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::scale_color +// Function: GeomVertexData::scale_color // Access: Published // Description: Returns a new GeomVertexData object with the color // table modified in-place to apply the indicated scale. @@ -731,16 +731,16 @@ convert_to(const qpGeomVertexFormat *new_format) const { // If the vertex data does not include a color column, a // new one will not be added. //////////////////////////////////////////////////////////////////// -CPT(qpGeomVertexData) qpGeomVertexData:: +CPT(GeomVertexData) GeomVertexData:: scale_color(const LVecBase4f &color_scale) const { - const qpGeomVertexColumn *old_column = + const GeomVertexColumn *old_column = _format->get_column(InternalName::get_color()); - if (old_column == (qpGeomVertexColumn *)NULL) { + if (old_column == (GeomVertexColumn *)NULL) { return this; } - PT(qpGeomVertexData) new_data = new qpGeomVertexData(*this); - qpGeomVertexRewriter data(new_data, InternalName::get_color()); + PT(GeomVertexData) new_data = new GeomVertexData(*this); + GeomVertexRewriter data(new_data, InternalName::get_color()); while (!data.is_at_end()) { Colorf color = data.get_data4f(); data.set_data4f(color[0] * color_scale[0], @@ -753,7 +753,7 @@ scale_color(const LVecBase4f &color_scale) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::scale_color +// Function: GeomVertexData::scale_color // Access: Published // Description: Returns a new GeomVertexData object with the color // table replaced with a new color table that has been @@ -762,10 +762,10 @@ scale_color(const LVecBase4f &color_scale) const { // was interleaved with a previous array, the previous // array will not be repacked. //////////////////////////////////////////////////////////////////// -CPT(qpGeomVertexData) qpGeomVertexData:: +CPT(GeomVertexData) GeomVertexData:: scale_color(const LVecBase4f &color_scale, int num_components, - qpGeomVertexData::NumericType numeric_type, - qpGeomVertexData::Contents contents) const { + GeomVertexData::NumericType numeric_type, + GeomVertexData::Contents contents) const { int old_color_array = _format->get_array_with(InternalName::get_color()); if (old_color_array == -1) { // Oops, no color anyway. @@ -781,12 +781,12 @@ scale_color(const LVecBase4f &color_scale, int num_components, } PStatTimer timer(_scale_color_pcollector); - PT(qpGeomVertexData) new_data = replace_column + PT(GeomVertexData) new_data = replace_column (InternalName::get_color(), num_components, numeric_type, contents); // Now go through and apply the scale, copying it to the new data. - qpGeomVertexWriter to(new_data, InternalName::get_color()); - qpGeomVertexReader from(this, InternalName::get_color()); + GeomVertexWriter to(new_data, InternalName::get_color()); + GeomVertexReader from(this, InternalName::get_color()); for (int i = 0; i < num_rows; i++) { Colorf color = from.get_data4f(); @@ -800,7 +800,7 @@ scale_color(const LVecBase4f &color_scale, int num_components, } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::set_color +// Function: GeomVertexData::set_color // Access: Published // Description: Returns a new GeomVertexData object with the color // data modified in-place with the new value. @@ -808,16 +808,16 @@ scale_color(const LVecBase4f &color_scale, int num_components, // If the vertex data does not include a color column, a // new one will not be added. //////////////////////////////////////////////////////////////////// -CPT(qpGeomVertexData) qpGeomVertexData:: +CPT(GeomVertexData) GeomVertexData:: set_color(const Colorf &color) const { - const qpGeomVertexColumn *old_column = + const GeomVertexColumn *old_column = _format->get_column(InternalName::get_color()); - if (old_column == (qpGeomVertexColumn *)NULL) { + if (old_column == (GeomVertexColumn *)NULL) { return this; } - PT(qpGeomVertexData) new_data = new qpGeomVertexData(*this); - qpGeomVertexWriter to(new_data, InternalName::get_color()); + PT(GeomVertexData) new_data = new GeomVertexData(*this); + GeomVertexWriter to(new_data, InternalName::get_color()); while (!to.is_at_end()) { to.set_data4f(color); } @@ -826,7 +826,7 @@ set_color(const Colorf &color) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::set_color +// Function: GeomVertexData::set_color // Access: Published // Description: Returns a new GeomVertexData object with the color // table replaced with a new color table for which each @@ -835,10 +835,10 @@ set_color(const Colorf &color) const { // was interleaved with a previous array, the previous // array will not be repacked. //////////////////////////////////////////////////////////////////// -CPT(qpGeomVertexData) qpGeomVertexData:: +CPT(GeomVertexData) GeomVertexData:: set_color(const Colorf &color, int num_components, - qpGeomVertexData::NumericType numeric_type, - qpGeomVertexData::Contents contents) const { + GeomVertexData::NumericType numeric_type, + GeomVertexData::Contents contents) const { if (gobj_cat.is_debug()) { gobj_cat.debug() << "Setting color for " << get_num_rows() << " vertices to " @@ -846,11 +846,11 @@ set_color(const Colorf &color, int num_components, } PStatTimer timer(_set_color_pcollector); - PT(qpGeomVertexData) new_data = replace_column + PT(GeomVertexData) new_data = replace_column (InternalName::get_color(), num_components, numeric_type, contents); // Now go through and set the new color value. - qpGeomVertexWriter to(new_data, InternalName::get_color()); + GeomVertexWriter to(new_data, InternalName::get_color()); while (!to.is_at_end()) { to.set_data4f(color); } @@ -859,7 +859,7 @@ set_color(const Colorf &color, int num_components, } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::animate_vertices +// Function: GeomVertexData::animate_vertices // Access: Published // Description: Returns a GeomVertexData that represents the results // of computing the vertex animation on the CPU for this @@ -876,7 +876,7 @@ set_color(const Colorf &color, int num_components, // modified (this is preferred, since it allows the // graphics backend to update vertex buffers optimally). //////////////////////////////////////////////////////////////////// -CPT(qpGeomVertexData) qpGeomVertexData:: +CPT(GeomVertexData) GeomVertexData:: animate_vertices() const { CDReader cdata(_cycler); @@ -904,25 +904,25 @@ animate_vertices() const { } if (cdata->_animated_vertices_modified == modified && - cdata->_animated_vertices != (qpGeomVertexData *)NULL) { + cdata->_animated_vertices != (GeomVertexData *)NULL) { // No changes. return cdata->_animated_vertices; } - CDWriter cdataw(((qpGeomVertexData *)this)->_cycler, cdata); + CDWriter cdataw(((GeomVertexData *)this)->_cycler, cdata); cdataw->_animated_vertices_modified = modified; - ((qpGeomVertexData *)this)->update_animated_vertices(cdataw); + ((GeomVertexData *)this)->update_animated_vertices(cdataw); return cdataw->_animated_vertices; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::bytewise_copy +// Function: GeomVertexData::bytewise_copy // Access: Private, Static // Description: Quickly copies data without the need to convert it. //////////////////////////////////////////////////////////////////// -void qpGeomVertexData:: +void GeomVertexData:: bytewise_copy(unsigned char *to, int to_stride, const unsigned char *from, int from_stride, - const qpGeomVertexColumn *from_type, + const GeomVertexColumn *from_type, int num_records) { if (gobj_cat.is_debug()) { gobj_cat.debug() @@ -949,7 +949,7 @@ bytewise_copy(unsigned char *to, int to_stride, } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::replace_column +// Function: GeomVertexData::replace_column // Access: Published // Description: Returns a new GeomVertexData object, suitable for // modification, with the indicated data type replaced @@ -962,17 +962,17 @@ bytewise_copy(unsigned char *to, int to_stride, // removed from the type, without replacing it with // anything else. //////////////////////////////////////////////////////////////////// -PT(qpGeomVertexData) qpGeomVertexData:: +PT(GeomVertexData) GeomVertexData:: replace_column(const InternalName *name, int num_components, - qpGeomVertexData::NumericType numeric_type, - qpGeomVertexData::Contents contents) const { - PT(qpGeomVertexFormat) new_format = new qpGeomVertexFormat(*_format); + GeomVertexData::NumericType numeric_type, + GeomVertexData::Contents contents) const { + PT(GeomVertexFormat) new_format = new GeomVertexFormat(*_format); // Remove the old description of the type from the format. bool removed_type_array = false; int old_type_array = _format->get_array_with(name); if (old_type_array != -1) { - qpGeomVertexArrayFormat *array_format = new_format->modify_array(old_type_array); + GeomVertexArrayFormat *array_format = new_format->modify_array(old_type_array); if (array_format->get_num_columns() == 1) { // Actually, this array didn't have any other data types, so // just drop the whole array. @@ -989,13 +989,13 @@ replace_column(const InternalName *name, int num_components, // Now define a new array to contain just the type. int new_type_array = -1; if (num_components != 0) { - PT(qpGeomVertexArrayFormat) type_array_format = - new qpGeomVertexArrayFormat(name, num_components, numeric_type, contents); + PT(GeomVertexArrayFormat) type_array_format = + new GeomVertexArrayFormat(name, num_components, numeric_type, contents); new_type_array = new_format->add_array(type_array_format); } - CPT(qpGeomVertexFormat) format = - qpGeomVertexFormat::register_format(new_format); + CPT(GeomVertexFormat) format = + GeomVertexFormat::register_format(new_format); if (gobj_cat.is_debug()) { gobj_cat.debug() @@ -1004,7 +1004,7 @@ replace_column(const InternalName *name, int num_components, << *_format << " to " << *format << "\n"; } - PT(qpGeomVertexData) new_data = new qpGeomVertexData(*this, format); + PT(GeomVertexData) new_data = new GeomVertexData(*this, format); int j = 0; int num_arrays = get_num_arrays(); @@ -1029,7 +1029,7 @@ replace_column(const InternalName *name, int num_components, // For the new type array, we set up a temporary array that has // room for the right number of rows. - PT(qpGeomVertexArrayData) new_array = new qpGeomVertexArrayData + PT(GeomVertexArrayData) new_array = new GeomVertexArrayData (format->get_array(j), get_usage_hint()); new_array->set_num_rows(get_num_rows()); new_data->set_array(j, new_array); @@ -1039,11 +1039,11 @@ replace_column(const InternalName *name, int num_components, } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::output +// Function: GeomVertexData::output // Access: Published // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexData:: +void GeomVertexData:: output(ostream &out) const { if (!get_name().empty()) { out << get_name() << " "; @@ -1052,11 +1052,11 @@ output(ostream &out) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::write +// Function: GeomVertexData::write // Access: Published // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexData:: +void GeomVertexData:: write(ostream &out, int indent_level) const { if (!get_name().empty()) { indent(out, indent_level) << get_name() << "\n"; @@ -1070,12 +1070,12 @@ write(ostream &out, int indent_level) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::clear_cache +// Function: GeomVertexData::clear_cache // Access: Published // Description: Removes all of the previously-cached results of // convert_to(). //////////////////////////////////////////////////////////////////// -void qpGeomVertexData:: +void GeomVertexData:: clear_cache() { // Probably we shouldn't do anything at all here unless we are // running in pipeline stage 0. @@ -1090,7 +1090,7 @@ clear_cache() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::get_array_info +// Function: GeomVertexData::get_array_info // Access: Public // Description: A convenience function to collect together the // important parts of the array data for rendering. @@ -1103,14 +1103,14 @@ clear_cache() { // exists in this record, or false if it does not (in // which case none of the output parameters are valid). //////////////////////////////////////////////////////////////////// -bool qpGeomVertexData:: +bool GeomVertexData:: get_array_info(const InternalName *name, - const qpGeomVertexArrayData *&array_data, + const GeomVertexArrayData *&array_data, int &num_values, - qpGeomVertexData::NumericType &numeric_type, + GeomVertexData::NumericType &numeric_type, int &start, int &stride) const { int array_index; - const qpGeomVertexColumn *column; + const GeomVertexColumn *column; if (_format->get_array_info(name, array_index, column)) { CDReader cdata(_cycler); array_data = cdata->_arrays[array_index]; @@ -1124,19 +1124,19 @@ get_array_info(const InternalName *name, } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::get_vertex_info +// Function: GeomVertexData::get_vertex_info // Access: Public // Description: A shortcut to get_array_info() for the "vertex" // column. //////////////////////////////////////////////////////////////////// -bool qpGeomVertexData:: -get_vertex_info(const qpGeomVertexArrayData *&array_data, +bool GeomVertexData:: +get_vertex_info(const GeomVertexArrayData *&array_data, int &num_values, - qpGeomVertexData::NumericType &numeric_type, + GeomVertexData::NumericType &numeric_type, int &start, int &stride) const { int array_index = _format->get_vertex_array_index(); if (array_index >= 0) { - const qpGeomVertexColumn *column = _format->get_vertex_column(); + const GeomVertexColumn *column = _format->get_vertex_column(); CDReader cdata(_cycler); array_data = cdata->_arrays[array_index]; @@ -1150,19 +1150,19 @@ get_vertex_info(const qpGeomVertexArrayData *&array_data, } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::get_normal_info +// Function: GeomVertexData::get_normal_info // Access: Public // Description: A shortcut to get_array_info() for the "normal" // column. Note that there is no num_values return, // since normals should always have three values. //////////////////////////////////////////////////////////////////// -bool qpGeomVertexData:: -get_normal_info(const qpGeomVertexArrayData *&array_data, - qpGeomVertexData::NumericType &numeric_type, +bool GeomVertexData:: +get_normal_info(const GeomVertexArrayData *&array_data, + GeomVertexData::NumericType &numeric_type, int &start, int &stride) const { int array_index = _format->get_normal_array_index(); if (array_index >= 0) { - const qpGeomVertexColumn *column = _format->get_normal_column(); + const GeomVertexColumn *column = _format->get_normal_column(); nassertr(column->get_num_values() == 3, false); CDReader cdata(_cycler); @@ -1176,19 +1176,19 @@ get_normal_info(const qpGeomVertexArrayData *&array_data, } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::get_color_info +// Function: GeomVertexData::get_color_info // Access: Public // Description: A shortcut to get_array_info() for the "color" // column. //////////////////////////////////////////////////////////////////// -bool qpGeomVertexData:: -get_color_info(const qpGeomVertexArrayData *&array_data, +bool GeomVertexData:: +get_color_info(const GeomVertexArrayData *&array_data, int &num_values, - qpGeomVertexData::NumericType &numeric_type, + GeomVertexData::NumericType &numeric_type, int &start, int &stride) const { int array_index = _format->get_color_array_index(); if (array_index >= 0) { - const qpGeomVertexColumn *column = _format->get_color_column(); + const GeomVertexColumn *column = _format->get_color_column(); CDReader cdata(_cycler); array_data = cdata->_arrays[array_index]; @@ -1202,12 +1202,12 @@ get_color_info(const qpGeomVertexArrayData *&array_data, } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::packed_argb_to_uint8_rgba +// Function: GeomVertexData::packed_argb_to_uint8_rgba // Access: Private, Static // Description: Quickly converts DirectX-style color to OpenGL-style // color. //////////////////////////////////////////////////////////////////// -void qpGeomVertexData:: +void GeomVertexData:: packed_argb_to_uint8_rgba(unsigned char *to, int to_stride, const unsigned char *from, int from_stride, int num_records) { @@ -1232,12 +1232,12 @@ packed_argb_to_uint8_rgba(unsigned char *to, int to_stride, } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::uint8_rgba_to_packed_argb +// Function: GeomVertexData::uint8_rgba_to_packed_argb // Access: Private, Static // Description: Quickly converts OpenGL-style color to DirectX-style // color. //////////////////////////////////////////////////////////////////// -void qpGeomVertexData:: +void GeomVertexData:: uint8_rgba_to_packed_argb(unsigned char *to, int to_stride, const unsigned char *from, int from_stride, int num_records) { @@ -1258,12 +1258,12 @@ uint8_rgba_to_packed_argb(unsigned char *to, int to_stride, } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::do_set_num_rows +// Function: GeomVertexData::do_set_num_rows // Access: Private // Description: The private implementation of set_num_rows(). //////////////////////////////////////////////////////////////////// -bool qpGeomVertexData:: -do_set_num_rows(int n, qpGeomVertexData::CDWriter &cdata) { +bool GeomVertexData:: +do_set_num_rows(int n, GeomVertexData::CDWriter &cdata) { nassertr(_format->get_num_arrays() == (int)cdata->_arrays.size(), false); bool any_changed = false; @@ -1275,7 +1275,7 @@ do_set_num_rows(int n, qpGeomVertexData::CDWriter &cdata) { if (cdata->_arrays[i]->get_num_rows() != n) { // Copy-on-write. if (cdata->_arrays[i]->get_ref_count() > 1) { - cdata->_arrays[i] = new qpGeomVertexArrayData(*cdata->_arrays[i]); + cdata->_arrays[i] = new GeomVertexArrayData(*cdata->_arrays[i]); } if (cdata->_arrays[i]->has_column(InternalName::get_color())) { color_array = i; @@ -1289,8 +1289,8 @@ do_set_num_rows(int n, qpGeomVertexData::CDWriter &cdata) { if (color_array >= 0 && orig_color_rows < n) { // We have just added some rows, fill the "color" column with // (1, 1, 1, 1), for the programmer's convenience. - qpGeomVertexArrayData *array_data = cdata->_arrays[color_array]; - const qpGeomVertexColumn *column = + GeomVertexArrayData *array_data = cdata->_arrays[color_array]; + const GeomVertexColumn *column = array_data->get_array_format()->get_column(InternalName::get_color()); int stride = array_data->get_array_format()->get_stride(); unsigned char *start = @@ -1325,7 +1325,7 @@ do_set_num_rows(int n, qpGeomVertexData::CDWriter &cdata) { if (any_changed) { clear_cache(); - cdata->_modified = qpGeom::get_next_modified(); + cdata->_modified = Geom::get_next_modified(); cdata->_animated_vertices.clear(); } @@ -1333,14 +1333,14 @@ do_set_num_rows(int n, qpGeomVertexData::CDWriter &cdata) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::update_animated_vertices +// Function: GeomVertexData::update_animated_vertices // Access: Private // Description: Recomputes the results of computing the vertex // animation on the CPU, and applies them to the // existing animated_vertices object. //////////////////////////////////////////////////////////////////// -void qpGeomVertexData:: -update_animated_vertices(qpGeomVertexData::CDWriter &cdata) { +void GeomVertexData:: +update_animated_vertices(GeomVertexData::CDWriter &cdata) { int num_rows = get_num_rows(); if (gobj_cat.is_debug()) { @@ -1351,13 +1351,13 @@ update_animated_vertices(qpGeomVertexData::CDWriter &cdata) { PStatTimer timer(_char_pcollector); - if (cdata->_animated_vertices == (qpGeomVertexData *)NULL) { - CPT(qpGeomVertexFormat) new_format = _format->get_post_animated_format(); + if (cdata->_animated_vertices == (GeomVertexData *)NULL) { + CPT(GeomVertexFormat) new_format = _format->get_post_animated_format(); cdata->_animated_vertices = - new qpGeomVertexData(get_name(), new_format, + new GeomVertexData(get_name(), new_format, min(get_usage_hint(), UH_dynamic)); } - PT(qpGeomVertexData) new_data = cdata->_animated_vertices; + PT(GeomVertexData) new_data = cdata->_animated_vertices; // We have to make a complete copy of the data first so we can // modify it. If we were clever, we could maybe just figure out the @@ -1380,8 +1380,8 @@ update_animated_vertices(qpGeomVertexData::CDWriter &cdata) { CPT(InternalName) base_name = _format->get_morph_base(mi); CPT(InternalName) delta_name = _format->get_morph_delta(mi); - qpGeomVertexRewriter data(new_data, base_name); - qpGeomVertexReader delta(this, delta_name); + GeomVertexRewriter data(new_data, base_name); + GeomVertexReader delta(this, delta_name); if (data.get_column()->get_num_values() == 4) { if (data.get_column()->has_homogeneous_coord()) { @@ -1431,7 +1431,7 @@ update_animated_vertices(qpGeomVertexData::CDWriter &cdata) { } // Now go through and apply the transforms. - qpGeomVertexReader blendi(this, InternalName::get_transform_blend()); + GeomVertexReader blendi(this, InternalName::get_transform_blend()); if (!blendi.has_column()) { gobj_cat.warning() << "Vertex data " << get_name() @@ -1441,7 +1441,7 @@ update_animated_vertices(qpGeomVertexData::CDWriter &cdata) { int ci; for (ci = 0; ci < _format->get_num_points(); ci++) { - qpGeomVertexRewriter data(new_data, _format->get_point(ci)); + GeomVertexRewriter data(new_data, _format->get_point(ci)); blendi.set_row(0); if (data.get_column()->get_num_values() == 4) { @@ -1461,7 +1461,7 @@ update_animated_vertices(qpGeomVertexData::CDWriter &cdata) { } } for (ci = 0; ci < _format->get_num_vectors(); ci++) { - qpGeomVertexRewriter data(new_data, _format->get_vector(ci)); + GeomVertexRewriter data(new_data, _format->get_vector(ci)); blendi.set_row(0); for (int i = 0; i < num_rows; i++) { @@ -1475,23 +1475,23 @@ update_animated_vertices(qpGeomVertexData::CDWriter &cdata) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::register_with_read_factory +// Function: GeomVertexData::register_with_read_factory // Access: Public, Static // Description: Tells the BamReader how to create objects of type -// qpGeomVertexData. +// GeomVertexData. //////////////////////////////////////////////////////////////////// -void qpGeomVertexData:: +void GeomVertexData:: register_with_read_factory() { BamReader::get_factory()->register_factory(get_class_type(), make_from_bam); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::write_datagram +// Function: GeomVertexData::write_datagram // Access: Public, Virtual // Description: Writes the contents of this object to the datagram // for shipping out to a Bam file. //////////////////////////////////////////////////////////////////// -void qpGeomVertexData:: +void GeomVertexData:: write_datagram(BamWriter *manager, Datagram &dg) { TypedWritableReferenceCount::write_datagram(manager, dg); @@ -1502,16 +1502,16 @@ write_datagram(BamWriter *manager, Datagram &dg) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::make_from_bam +// Function: GeomVertexData::make_from_bam // Access: Protected, Static // Description: This function is called by the BamReader's factory -// when a new object of type qpGeomVertexData is encountered -// in the Bam file. It should create the qpGeomVertexData +// when a new object of type GeomVertexData is encountered +// in the Bam file. It should create the GeomVertexData // and extract its information from the file. //////////////////////////////////////////////////////////////////// -TypedWritable *qpGeomVertexData:: +TypedWritable *GeomVertexData:: make_from_bam(const FactoryParams ¶ms) { - qpGeomVertexData *object = new qpGeomVertexData; + GeomVertexData *object = new GeomVertexData; DatagramIterator scan; BamReader *manager; @@ -1523,29 +1523,29 @@ make_from_bam(const FactoryParams ¶ms) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::complete_pointers +// Function: GeomVertexData::complete_pointers // Access: Public, Virtual // Description: Receives an array of pointers, one for each time // manager->read_pointer() was called in fillin(). // Returns the number of pointers processed. //////////////////////////////////////////////////////////////////// -int qpGeomVertexData:: +int GeomVertexData:: complete_pointers(TypedWritable **p_list, BamReader *manager) { int pi = TypedWritableReferenceCount::complete_pointers(p_list, manager); - _format = DCAST(qpGeomVertexFormat, p_list[pi++]); + _format = DCAST(GeomVertexFormat, p_list[pi++]); return pi; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::finalize +// Function: GeomVertexData::finalize // Access: Public, Virtual // Description: Called by the BamReader to perform any final actions // needed for setting up the object after all objects // have been read and all pointers have been completed. //////////////////////////////////////////////////////////////////// -void qpGeomVertexData:: +void GeomVertexData:: finalize(BamReader *manager) { // NOTE: This method may be called more than once, because the // Geom::finalize() will call it explicitly. We have to be prepared @@ -1563,11 +1563,11 @@ finalize(BamReader *manager) { CDWriter cdata(_cycler); - CPT(qpGeomVertexFormat) new_format = - qpGeomVertexFormat::register_format(_format); + CPT(GeomVertexFormat) new_format = + GeomVertexFormat::register_format(_format); for (size_t i = 0; i < cdata->_arrays.size(); ++i) { - CPT(qpGeomVertexArrayFormat) new_array_format = new_format->get_array(i); + CPT(GeomVertexArrayFormat) new_array_format = new_format->get_array(i); nassertv(cdata->_arrays[i]->_array_format->compare_to(*new_array_format) == 0); manager->change_pointer(cdata->_arrays[i]->_array_format, new_array_format); @@ -1593,13 +1593,13 @@ finalize(BamReader *manager) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::fillin +// Function: GeomVertexData::fillin // Access: Protected // Description: This internal function is called by make_from_bam to // read in all of the relevant data from the BamFile for -// the new qpGeomVertexData. +// the new GeomVertexData. //////////////////////////////////////////////////////////////////// -void qpGeomVertexData:: +void GeomVertexData:: fillin(DatagramIterator &scan, BamReader *manager) { TypedWritableReferenceCount::fillin(scan, manager); @@ -1610,12 +1610,12 @@ fillin(DatagramIterator &scan, BamReader *manager) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::CacheEntry::evict_callback +// Function: GeomVertexData::CacheEntry::evict_callback // Access: Public, Virtual // Description: Called when the entry is evicted from the cache, this // should clean up the owning object appropriately. //////////////////////////////////////////////////////////////////// -void qpGeomVertexData::CacheEntry:: +void GeomVertexData::CacheEntry:: evict_callback() { // We have to operate on stage 0 of the pipeline, since that's where // the cache really counts. Because of the multistage pipeline, we @@ -1630,33 +1630,33 @@ evict_callback() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::CacheEntry::output +// Function: GeomVertexData::CacheEntry::output // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexData::CacheEntry:: +void GeomVertexData::CacheEntry:: output(ostream &out) const { out << "vertex data " << (void *)_source << " to " << *_modifier; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::CData::make_copy +// Function: GeomVertexData::CData::make_copy // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// -CycleData *qpGeomVertexData::CData:: +CycleData *GeomVertexData::CData:: make_copy() const { return new CData(*this); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::CData::write_datagram +// Function: GeomVertexData::CData::write_datagram // Access: Public, Virtual // Description: Writes the contents of this object to the datagram // for shipping out to a Bam file. //////////////////////////////////////////////////////////////////// -void qpGeomVertexData::CData:: +void GeomVertexData::CData:: write_datagram(BamWriter *manager, Datagram &dg) const { dg.add_uint8(_usage_hint); @@ -1672,38 +1672,38 @@ write_datagram(BamWriter *manager, Datagram &dg) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::CData::complete_pointers +// Function: GeomVertexData::CData::complete_pointers // Access: Public, Virtual // Description: Receives an array of pointers, one for each time // manager->read_pointer() was called in fillin(). // Returns the number of pointers processed. //////////////////////////////////////////////////////////////////// -int qpGeomVertexData::CData:: +int GeomVertexData::CData:: complete_pointers(TypedWritable **p_list, BamReader *manager) { int pi = CycleData::complete_pointers(p_list, manager); Arrays::iterator ai; for (ai = _arrays.begin(); ai != _arrays.end(); ++ai) { - (*ai) = DCAST(qpGeomVertexArrayData, p_list[pi++]); + (*ai) = DCAST(GeomVertexArrayData, p_list[pi++]); } _transform_table = DCAST(TransformTable, p_list[pi++]); _transform_blend_table = DCAST(TransformBlendTable, p_list[pi++]); _slider_table = DCAST(SliderTable, p_list[pi++]); - _modified = qpGeom::get_next_modified(); + _modified = Geom::get_next_modified(); return pi; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexData::CData::fillin +// Function: GeomVertexData::CData::fillin // Access: Public, Virtual // Description: This internal function is called by make_from_bam to // read in all of the relevant data from the BamFile for -// the new qpGeomVertexData. +// the new GeomVertexData. //////////////////////////////////////////////////////////////////// -void qpGeomVertexData::CData:: +void GeomVertexData::CData:: fillin(DatagramIterator &scan, BamReader *manager) { _usage_hint = (UsageHint)scan.get_uint8(); diff --git a/panda/src/gobj/qpgeomVertexData.h b/panda/src/gobj/geomVertexData.h similarity index 77% rename from panda/src/gobj/qpgeomVertexData.h rename to panda/src/gobj/geomVertexData.h index 80535c07ac..5bcad8cf09 100644 --- a/panda/src/gobj/qpgeomVertexData.h +++ b/panda/src/gobj/geomVertexData.h @@ -1,4 +1,4 @@ -// Filename: qpgeomVertexData.h +// Filename: geomVertexData.h // Created by: drose (06Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,16 +16,16 @@ // //////////////////////////////////////////////////////////////////// -#ifndef qpGEOMVERTEXDATA_H -#define qpGEOMVERTEXDATA_H +#ifndef GEOMVERTEXDATA_H +#define GEOMVERTEXDATA_H #include "pandabase.h" #include "typedWritableReferenceCount.h" -#include "qpgeomVertexFormat.h" -#include "qpgeomVertexColumn.h" -#include "qpgeomVertexArrayData.h" -#include "qpgeomEnums.h" -#include "qpgeomCacheEntry.h" +#include "geomVertexFormat.h" +#include "geomVertexColumn.h" +#include "geomVertexArrayData.h" +#include "geomEnums.h" +#include "geomCacheEntry.h" #include "transformTable.h" #include "transformBlendTable.h" #include "sliderTable.h" @@ -40,10 +40,10 @@ #include "pvector.h" class FactoryParams; -class qpGeomVertexColumn; +class GeomVertexColumn; //////////////////////////////////////////////////////////////////// -// Class : qpGeomVertexData +// Class : GeomVertexData // Description : This defines the actual numeric vertex data stored in // a Geom, in the structure defined by a particular // GeomVertexFormat object. @@ -70,26 +70,24 @@ class qpGeomVertexColumn; // structure; instead, use the GeomVertexReader, // GeomVertexWriter, and GeomVertexRewriter objects to // read and write vertex data at a high level. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// -class EXPCL_PANDA qpGeomVertexData : public TypedWritableReferenceCount, public qpGeomEnums { +class EXPCL_PANDA GeomVertexData : public TypedWritableReferenceCount, public GeomEnums { private: - qpGeomVertexData(); + GeomVertexData(); PUBLISHED: - qpGeomVertexData(const string &name, - const qpGeomVertexFormat *format, - UsageHint usage_hint); - qpGeomVertexData(const qpGeomVertexData ©); - qpGeomVertexData(const qpGeomVertexData ©, - const qpGeomVertexFormat *format); - void operator = (const qpGeomVertexData ©); - virtual ~qpGeomVertexData(); + GeomVertexData(const string &name, + const GeomVertexFormat *format, + UsageHint usage_hint); + GeomVertexData(const GeomVertexData ©); + GeomVertexData(const GeomVertexData ©, + const GeomVertexFormat *format); + void operator = (const GeomVertexData ©); + virtual ~GeomVertexData(); INLINE const string &get_name() const; void set_name(const string &name); - INLINE const qpGeomVertexFormat *get_format() const; + INLINE const GeomVertexFormat *get_format() const; INLINE UsageHint get_usage_hint() const; void set_usage_hint(UsageHint usage_hint); @@ -100,9 +98,9 @@ PUBLISHED: void clear_rows(); INLINE int get_num_arrays() const; - INLINE const qpGeomVertexArrayData *get_array(int i) const; - qpGeomVertexArrayData *modify_array(int i); - void set_array(int i, const qpGeomVertexArrayData *array); + INLINE const GeomVertexArrayData *get_array(int i) const; + GeomVertexArrayData *modify_array(int i); + void set_array(int i, const GeomVertexArrayData *array); INLINE const TransformTable *get_transform_table() const; void set_transform_table(const TransformTable *table); @@ -120,24 +118,24 @@ PUBLISHED: int get_num_bytes() const; INLINE UpdateSeq get_modified() const; - void copy_from(const qpGeomVertexData *source, bool keep_data_objects); - void copy_row_from(int dest_row, const qpGeomVertexData *source, + void copy_from(const GeomVertexData *source, bool keep_data_objects); + void copy_row_from(int dest_row, const GeomVertexData *source, int source_row); - CPT(qpGeomVertexData) convert_to(const qpGeomVertexFormat *new_format) const; - CPT(qpGeomVertexData) + CPT(GeomVertexData) convert_to(const GeomVertexFormat *new_format) const; + CPT(GeomVertexData) scale_color(const LVecBase4f &color_scale) const; - CPT(qpGeomVertexData) + CPT(GeomVertexData) scale_color(const LVecBase4f &color_scale, int num_components, NumericType numeric_type, Contents contents) const; - CPT(qpGeomVertexData) + CPT(GeomVertexData) set_color(const Colorf &color) const; - CPT(qpGeomVertexData) + CPT(GeomVertexData) set_color(const Colorf &color, int num_components, NumericType numeric_type, Contents contents) const; - CPT(qpGeomVertexData) animate_vertices() const; + CPT(GeomVertexData) animate_vertices() const; - PT(qpGeomVertexData) + PT(GeomVertexData) replace_column(const InternalName *name, int num_components, NumericType numeric_type, Contents contents) const; @@ -148,23 +146,23 @@ PUBLISHED: public: bool get_array_info(const InternalName *name, - const qpGeomVertexArrayData *&array_data, + const GeomVertexArrayData *&array_data, int &num_values, NumericType &numeric_type, int &start, int &stride) const; INLINE bool has_vertex() const; INLINE bool is_vertex_transformed() const; - bool get_vertex_info(const qpGeomVertexArrayData *&array_data, + bool get_vertex_info(const GeomVertexArrayData *&array_data, int &num_values, NumericType &numeric_type, int &start, int &stride) const; INLINE bool has_normal() const; - bool get_normal_info(const qpGeomVertexArrayData *&array_data, + bool get_normal_info(const GeomVertexArrayData *&array_data, NumericType &numeric_type, int &start, int &stride) const; INLINE bool has_color() const; - bool get_color_info(const qpGeomVertexArrayData *&array_data, + bool get_color_info(const GeomVertexArrayData *&array_data, int &num_values, NumericType &numeric_type, int &start, int &stride) const; @@ -178,7 +176,7 @@ public: private: static void bytewise_copy(unsigned char *to, int to_stride, const unsigned char *from, int from_stride, - const qpGeomVertexColumn *from_type, + const GeomVertexColumn *from_type, int num_records); static void packed_argb_to_uint8_rgba(unsigned char *to, int to_stride, @@ -196,24 +194,24 @@ private: private: string _name; - CPT(qpGeomVertexFormat) _format; + CPT(GeomVertexFormat) _format; - typedef pvector< PT(qpGeomVertexArrayData) > Arrays; + typedef pvector< PT(GeomVertexArrayData) > Arrays; - class CacheEntry : public qpGeomCacheEntry { + class CacheEntry : public GeomCacheEntry { public: - INLINE CacheEntry(const qpGeomVertexFormat *modifier); - INLINE CacheEntry(qpGeomVertexData *source, - const qpGeomVertexFormat *modifier, - const qpGeomVertexData *result); + INLINE CacheEntry(const GeomVertexFormat *modifier); + INLINE CacheEntry(GeomVertexData *source, + const GeomVertexFormat *modifier, + const GeomVertexData *result); INLINE bool operator < (const CacheEntry &other) const; virtual void evict_callback(); virtual void output(ostream &out) const; - qpGeomVertexData *_source; - CPT(qpGeomVertexFormat) _modifier; - CPT(qpGeomVertexData) _result; + GeomVertexData *_source; + CPT(GeomVertexFormat) _modifier; + CPT(GeomVertexData) _result; }; typedef pset > Cache; @@ -232,7 +230,7 @@ private: CPT(TransformTable) _transform_table; PT(TransformBlendTable) _transform_blend_table; CPT(SliderTable) _slider_table; - PT(qpGeomVertexData) _animated_vertices; + PT(GeomVertexData) _animated_vertices; UpdateSeq _animated_vertices_modified; UpdateSeq _modified; Cache _cache; @@ -272,7 +270,7 @@ public: } static void init_type() { TypedWritableReferenceCount::init_type(); - register_type(_type_handle, "qpGeomVertexData", + register_type(_type_handle, "GeomVertexData", TypedWritableReferenceCount::get_class_type()); } virtual TypeHandle get_type() const { @@ -286,8 +284,8 @@ private: friend class CacheEntry; }; -INLINE ostream &operator << (ostream &out, const qpGeomVertexData &obj); +INLINE ostream &operator << (ostream &out, const GeomVertexData &obj); -#include "qpgeomVertexData.I" +#include "geomVertexData.I" #endif diff --git a/panda/src/gobj/qpgeomVertexFormat.I b/panda/src/gobj/geomVertexFormat.I similarity index 80% rename from panda/src/gobj/qpgeomVertexFormat.I rename to panda/src/gobj/geomVertexFormat.I index d7d8eac4fb..ab4c70c9cc 100644 --- a/panda/src/gobj/qpgeomVertexFormat.I +++ b/panda/src/gobj/geomVertexFormat.I @@ -1,4 +1,4 @@ -// Filename: qpgeomVertexFormat.I +// Filename: geomVertexFormat.I // Created by: drose (07Mar05) // //////////////////////////////////////////////////////////////////// @@ -18,26 +18,26 @@ INLINE ostream & -operator << (ostream &out, const qpGeomVertexFormat &obj) { +operator << (ostream &out, const GeomVertexFormat &obj) { obj.output(out); return out; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::is_registered +// Function: GeomVertexFormat::is_registered // Access: Published // Description: Returns true if this format has been registered, // false if it has not. It may not be used for a Geom // until it has been registered, but once registered, it // may no longer be modified. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexFormat:: +INLINE bool GeomVertexFormat:: is_registered() const { return _is_registered; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::register_format +// Function: GeomVertexFormat::register_format // Access: Published, Static // Description: Adds the indicated format to the registry, if there // is not an equivalent format already there; in either @@ -51,35 +51,35 @@ is_registered() const { // normally; you should use only the returned value from // this point on. //////////////////////////////////////////////////////////////////// -INLINE CPT(qpGeomVertexFormat) qpGeomVertexFormat:: -register_format(const qpGeomVertexFormat *format) { - return get_registry()->register_format((qpGeomVertexFormat *)format); +INLINE CPT(GeomVertexFormat) GeomVertexFormat:: +register_format(const GeomVertexFormat *format) { + return get_registry()->register_format((GeomVertexFormat *)format); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::register_format +// Function: GeomVertexFormat::register_format // Access: Published, Static // Description: This flavor of register_format() implicitly creates a // one-array vertex format from the array definition. //////////////////////////////////////////////////////////////////// -INLINE CPT(qpGeomVertexFormat) qpGeomVertexFormat:: -register_format(const qpGeomVertexArrayFormat *format) { - return register_format(new qpGeomVertexFormat(format)); +INLINE CPT(GeomVertexFormat) GeomVertexFormat:: +register_format(const GeomVertexArrayFormat *format) { + return register_format(new GeomVertexFormat(format)); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_animation +// Function: GeomVertexFormat::get_animation // Access: Published // Description: Returns the GeomVertexAnimationSpec that indicates // how this format's vertices are set up for animation. //////////////////////////////////////////////////////////////////// -INLINE const qpGeomVertexAnimationSpec &qpGeomVertexFormat:: +INLINE const GeomVertexAnimationSpec &GeomVertexFormat:: get_animation() const { return _animation; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::set_animation +// Function: GeomVertexFormat::set_animation // Access: Published // Description: Resets the GeomVertexAnimationSpec that indicates // how this format's vertices are set up for animation. @@ -89,14 +89,14 @@ get_animation() const { // This may not be called once the format has been // registered. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexFormat:: -set_animation(const qpGeomVertexAnimationSpec &animation) { +INLINE void GeomVertexFormat:: +set_animation(const GeomVertexAnimationSpec &animation) { nassertv(!_is_registered); _animation = animation; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_num_arrays +// Function: GeomVertexFormat::get_num_arrays // Access: Published // Description: Returns the number of individual arrays required by // the format. If the array data is completely @@ -104,36 +104,36 @@ set_animation(const qpGeomVertexAnimationSpec &animation) { // parallel, this will be the same as the number of data // types. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexFormat:: +INLINE int GeomVertexFormat:: get_num_arrays() const { return _arrays.size(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_array +// Function: GeomVertexFormat::get_array // Access: Published // Description: Returns the description of the nth array used by the // format. //////////////////////////////////////////////////////////////////// -INLINE const qpGeomVertexArrayFormat *qpGeomVertexFormat:: +INLINE const GeomVertexArrayFormat *GeomVertexFormat:: get_array(int array) const { nassertr(array >= 0 && array < (int)_arrays.size(), NULL); return _arrays[array]; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::has_column +// Function: GeomVertexFormat::has_column // Access: Published // Description: Returns true if the format has the named column, // false otherwise. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexFormat:: +INLINE bool GeomVertexFormat:: has_column(const InternalName *name) const { - return (get_column(name) != (qpGeomVertexColumn *)NULL); + return (get_column(name) != (GeomVertexColumn *)NULL); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_num_points +// Function: GeomVertexFormat::get_num_points // Access: Published // Description: Returns the number of columns within the format // that represent points in space. @@ -141,14 +141,14 @@ has_column(const InternalName *name) const { // This may only be called after the format has been // registered. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexFormat:: +INLINE int GeomVertexFormat:: get_num_points() const { nassertr(_is_registered, 0); return _points.size(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_point +// Function: GeomVertexFormat::get_point // Access: Published // Description: Returns the name of the nth point column. This // represents a point in space, which should be @@ -157,7 +157,7 @@ get_num_points() const { // This may only be called after the format has been // registered. //////////////////////////////////////////////////////////////////// -INLINE const InternalName *qpGeomVertexFormat:: +INLINE const InternalName *GeomVertexFormat:: get_point(int n) const { nassertr(_is_registered, NULL); nassertr(n >= 0 && n < (int)_points.size(), NULL); @@ -165,7 +165,7 @@ get_point(int n) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_num_vectors +// Function: GeomVertexFormat::get_num_vectors // Access: Published // Description: Returns the number of columns within the format // that represent directional vectors. @@ -173,14 +173,14 @@ get_point(int n) const { // This may only be called after the format has been // registered. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexFormat:: +INLINE int GeomVertexFormat:: get_num_vectors() const { nassertr(_is_registered, 0); return _vectors.size(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_vector +// Function: GeomVertexFormat::get_vector // Access: Published // Description: Returns the name of the nth vector column. This // represents a directional vector, which should be @@ -190,7 +190,7 @@ get_num_vectors() const { // This may only be called after the format has been // registered. //////////////////////////////////////////////////////////////////// -INLINE const InternalName *qpGeomVertexFormat:: +INLINE const InternalName *GeomVertexFormat:: get_vector(int n) const { nassertr(_is_registered, NULL); nassertr(n >= 0 && n < (int)_vectors.size(), NULL); @@ -198,7 +198,7 @@ get_vector(int n) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_num_texcoords +// Function: GeomVertexFormat::get_num_texcoords // Access: Published // Description: Returns the number of columns within the format // that represent texture coordinates. @@ -206,14 +206,14 @@ get_vector(int n) const { // This may only be called after the format has been // registered. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexFormat:: +INLINE int GeomVertexFormat:: get_num_texcoords() const { nassertr(_is_registered, 0); return _texcoords.size(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_texcoord +// Function: GeomVertexFormat::get_texcoord // Access: Published // Description: Returns the name of the nth texcoord column. This // represents a texture coordinate. @@ -221,7 +221,7 @@ get_num_texcoords() const { // This may only be called after the format has been // registered. //////////////////////////////////////////////////////////////////// -INLINE const InternalName *qpGeomVertexFormat:: +INLINE const InternalName *GeomVertexFormat:: get_texcoord(int n) const { nassertr(_is_registered, NULL); nassertr(n >= 0 && n < (int)_texcoords.size(), NULL); @@ -229,7 +229,7 @@ get_texcoord(int n) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_num_morphs +// Function: GeomVertexFormat::get_num_morphs // Access: Published // Description: Returns the number of columns within the format // that represent morph deltas. @@ -237,7 +237,7 @@ get_texcoord(int n) const { // This may only be called after the format has been // registered. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexFormat:: +INLINE int GeomVertexFormat:: get_num_morphs() const { nassertr(_is_registered, 0); @@ -245,7 +245,7 @@ get_num_morphs() const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_morph_slider +// Function: GeomVertexFormat::get_morph_slider // Access: Published // Description: Returns the slider name associated with the nth morph // column. This is the name of the slider that will @@ -255,7 +255,7 @@ get_num_morphs() const { // This may only be called after the format has been // registered. //////////////////////////////////////////////////////////////////// -INLINE const InternalName *qpGeomVertexFormat:: +INLINE const InternalName *GeomVertexFormat:: get_morph_slider(int n) const { nassertr(_is_registered, NULL); nassertr(n >= 0 && n < (int)_morphs.size(), NULL); @@ -264,7 +264,7 @@ get_morph_slider(int n) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_morph_base +// Function: GeomVertexFormat::get_morph_base // Access: Published // Description: Returns the name of the base column that the nth // morph modifies. This column will also be defined @@ -274,7 +274,7 @@ get_morph_slider(int n) const { // This may only be called after the format has been // registered. //////////////////////////////////////////////////////////////////// -INLINE const InternalName *qpGeomVertexFormat:: +INLINE const InternalName *GeomVertexFormat:: get_morph_base(int n) const { nassertr(_is_registered, NULL); nassertr(n >= 0 && n < (int)_morphs.size(), NULL); @@ -283,7 +283,7 @@ get_morph_base(int n) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_morph_delta +// Function: GeomVertexFormat::get_morph_delta // Access: Published // Description: Returns the name of the column that defines the // nth morph. This contains the delta offsets that are @@ -295,7 +295,7 @@ get_morph_base(int n) const { // This may only be called after the format has been // registered. //////////////////////////////////////////////////////////////////// -INLINE const InternalName *qpGeomVertexFormat:: +INLINE const InternalName *GeomVertexFormat:: get_morph_delta(int n) const { nassertr(_is_registered, NULL); nassertr(n >= 0 && n < (int)_morphs.size(), NULL); @@ -304,149 +304,149 @@ get_morph_delta(int n) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_v3 +// Function: GeomVertexFormat::get_v3 // Access: Published, Static // Description: Returns a standard vertex format with just a // 3-component vertex position. //////////////////////////////////////////////////////////////////// -INLINE const qpGeomVertexFormat *qpGeomVertexFormat:: +INLINE const GeomVertexFormat *GeomVertexFormat:: get_v3() { return get_registry()->_v3; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_v3n3 +// Function: GeomVertexFormat::get_v3n3 // Access: Published, Static // Description: Returns a standard vertex format with a 3-component // normal and a 3-component vertex position. //////////////////////////////////////////////////////////////////// -INLINE const qpGeomVertexFormat *qpGeomVertexFormat:: +INLINE const GeomVertexFormat *GeomVertexFormat:: get_v3n3() { return get_registry()->_v3n3; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_v3t2 +// Function: GeomVertexFormat::get_v3t2 // Access: Published, Static // Description: Returns a standard vertex format with a 2-component // texture coordinate pair and a 3-component vertex // position. //////////////////////////////////////////////////////////////////// -INLINE const qpGeomVertexFormat *qpGeomVertexFormat:: +INLINE const GeomVertexFormat *GeomVertexFormat:: get_v3t2() { return get_registry()->_v3t2; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_v3n3t2 +// Function: GeomVertexFormat::get_v3n3t2 // Access: Published, Static // Description: Returns a standard vertex format with a 2-component // texture coordinate pair, a 3-component normal, and a // 3-component vertex position. //////////////////////////////////////////////////////////////////// -INLINE const qpGeomVertexFormat *qpGeomVertexFormat:: +INLINE const GeomVertexFormat *GeomVertexFormat:: get_v3n3t2() { return get_registry()->_v3n3t2; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_v3cp +// Function: GeomVertexFormat::get_v3cp // Access: Published, Static // Description: Returns a standard vertex format with a packed // color and a 3-component vertex position. //////////////////////////////////////////////////////////////////// -INLINE const qpGeomVertexFormat *qpGeomVertexFormat:: +INLINE const GeomVertexFormat *GeomVertexFormat:: get_v3cp() { return get_registry()->_v3cp; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_v3n3cp +// Function: GeomVertexFormat::get_v3n3cp // Access: Published, Static // Description: Returns a standard vertex format with a packed // color, a 3-component normal, and a 3-component vertex // position. //////////////////////////////////////////////////////////////////// -INLINE const qpGeomVertexFormat *qpGeomVertexFormat:: +INLINE const GeomVertexFormat *GeomVertexFormat:: get_v3n3cp() { return get_registry()->_v3n3cp; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_v3cpt2 +// Function: GeomVertexFormat::get_v3cpt2 // Access: Published, Static // Description: Returns a standard vertex format with a 2-component // texture coordinate pair, a packed color, and a // 3-component vertex position. //////////////////////////////////////////////////////////////////// -INLINE const qpGeomVertexFormat *qpGeomVertexFormat:: +INLINE const GeomVertexFormat *GeomVertexFormat:: get_v3cpt2() { return get_registry()->_v3cpt2; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_v3n3cpt2 +// Function: GeomVertexFormat::get_v3n3cpt2 // Access: Published, Static // Description: Returns a standard vertex format with a 2-component // texture coordinate pair, a packed color, a // 3-component normal, and a 3-component vertex // position. //////////////////////////////////////////////////////////////////// -INLINE const qpGeomVertexFormat *qpGeomVertexFormat:: +INLINE const GeomVertexFormat *GeomVertexFormat:: get_v3n3cpt2() { return get_registry()->_v3n3cpt2; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_v3c4 +// Function: GeomVertexFormat::get_v3c4 // Access: Published, Static // Description: Returns a standard vertex format with a 4-component // color and a 3-component vertex position. //////////////////////////////////////////////////////////////////// -INLINE const qpGeomVertexFormat *qpGeomVertexFormat:: +INLINE const GeomVertexFormat *GeomVertexFormat:: get_v3c4() { return get_registry()->_v3c4; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_v3n3c4 +// Function: GeomVertexFormat::get_v3n3c4 // Access: Published, Static // Description: Returns a standard vertex format with a 4-component // color, a 3-component normal, and a 3-component vertex // position. //////////////////////////////////////////////////////////////////// -INLINE const qpGeomVertexFormat *qpGeomVertexFormat:: +INLINE const GeomVertexFormat *GeomVertexFormat:: get_v3n3c4() { return get_registry()->_v3n3c4; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_v3c4t2 +// Function: GeomVertexFormat::get_v3c4t2 // Access: Published, Static // Description: Returns a standard vertex format with a 2-component // texture coordinate pair, a 4-component color, and a // 3-component vertex position. //////////////////////////////////////////////////////////////////// -INLINE const qpGeomVertexFormat *qpGeomVertexFormat:: +INLINE const GeomVertexFormat *GeomVertexFormat:: get_v3c4t2() { return get_registry()->_v3c4t2; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_v3n3c4t2 +// Function: GeomVertexFormat::get_v3n3c4t2 // Access: Published, Static // Description: Returns a standard vertex format with a 2-component // texture coordinate pair, a 4-component color, a // 3-component normal, and a 3-component vertex // position. //////////////////////////////////////////////////////////////////// -INLINE const qpGeomVertexFormat *qpGeomVertexFormat:: +INLINE const GeomVertexFormat *GeomVertexFormat:: get_v3n3c4t2() { return get_registry()->_v3n3c4t2; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_vertex_array_index +// Function: GeomVertexFormat::get_vertex_array_index // Access: Public // Description: Returns the array index of the array including the // "vertex" column, or -1 if there is no such array. @@ -454,14 +454,14 @@ get_v3n3c4t2() { // This may only be called after the format has been // registered. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexFormat:: +INLINE int GeomVertexFormat:: get_vertex_array_index() const { nassertr(_is_registered, -1); return _vertex_array_index; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_vertex_column +// Function: GeomVertexFormat::get_vertex_column // Access: Public // Description: Returns the column definition of the "vertex" column, // or NULL if there is no such column. @@ -469,14 +469,14 @@ get_vertex_array_index() const { // This may only be called after the format has been // registered. //////////////////////////////////////////////////////////////////// -INLINE const qpGeomVertexColumn *qpGeomVertexFormat:: +INLINE const GeomVertexColumn *GeomVertexFormat:: get_vertex_column() const { nassertr(_is_registered, NULL); return _vertex_column; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_normal_array_index +// Function: GeomVertexFormat::get_normal_array_index // Access: Public // Description: Returns the array index of the array including the // "normal" column, or -1 if there is no such array. @@ -484,14 +484,14 @@ get_vertex_column() const { // This may only be called after the format has been // registered. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexFormat:: +INLINE int GeomVertexFormat:: get_normal_array_index() const { nassertr(_is_registered, -1); return _normal_array_index; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_normal_column +// Function: GeomVertexFormat::get_normal_column // Access: Public // Description: Returns the column definition of the "normal" column, // or NULL if there is no such column. @@ -499,14 +499,14 @@ get_normal_array_index() const { // This may only be called after the format has been // registered. //////////////////////////////////////////////////////////////////// -INLINE const qpGeomVertexColumn *qpGeomVertexFormat:: +INLINE const GeomVertexColumn *GeomVertexFormat:: get_normal_column() const { nassertr(_is_registered, NULL); return _normal_column; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_color_array_index +// Function: GeomVertexFormat::get_color_array_index // Access: Public // Description: Returns the array index of the array including the // "color" column, or -1 if there is no such array. @@ -514,14 +514,14 @@ get_normal_column() const { // This may only be called after the format has been // registered. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexFormat:: +INLINE int GeomVertexFormat:: get_color_array_index() const { nassertr(_is_registered, -1); return _color_array_index; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_color_column +// Function: GeomVertexFormat::get_color_column // Access: Public // Description: Returns the column definition of the "color" column, // or NULL if there is no such column. @@ -529,18 +529,18 @@ get_color_array_index() const { // This may only be called after the format has been // registered. //////////////////////////////////////////////////////////////////// -INLINE const qpGeomVertexColumn *qpGeomVertexFormat:: +INLINE const GeomVertexColumn *GeomVertexFormat:: get_color_column() const { nassertr(_is_registered, NULL); return _color_column; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_registry +// Function: GeomVertexFormat::get_registry // Access: Private // Description: Returns the global registry object. //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexFormat::Registry *qpGeomVertexFormat:: +INLINE GeomVertexFormat::Registry *GeomVertexFormat:: get_registry() { if (_registry == (Registry *)NULL) { make_registry(); @@ -549,12 +549,12 @@ get_registry() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::Registry::register_format +// Function: GeomVertexFormat::Registry::register_format // Access: Public // Description: This flavor of register_format() implicitly creates a // one-array vertex format from the array definition. //////////////////////////////////////////////////////////////////// -INLINE CPT(qpGeomVertexFormat) qpGeomVertexFormat::Registry:: -register_format(qpGeomVertexArrayFormat *format) { - return register_format(new qpGeomVertexFormat(format)); +INLINE CPT(GeomVertexFormat) GeomVertexFormat::Registry:: +register_format(GeomVertexArrayFormat *format) { + return register_format(new GeomVertexFormat(format)); } diff --git a/panda/src/gobj/qpgeomVertexFormat.cxx b/panda/src/gobj/geomVertexFormat.cxx similarity index 82% rename from panda/src/gobj/qpgeomVertexFormat.cxx rename to panda/src/gobj/geomVertexFormat.cxx index e755063160..b439f40140 100644 --- a/panda/src/gobj/qpgeomVertexFormat.cxx +++ b/panda/src/gobj/geomVertexFormat.cxx @@ -1,4 +1,4 @@ -// Filename: qpgeomVertexFormat.cxx +// Filename: geomVertexFormat.cxx // Created by: drose (07Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,36 +16,36 @@ // //////////////////////////////////////////////////////////////////// -#include "qpgeomVertexFormat.h" -#include "qpgeomVertexData.h" -#include "qpgeomMunger.h" +#include "geomVertexFormat.h" +#include "geomVertexData.h" +#include "geomMunger.h" #include "mutexHolder.h" #include "indent.h" #include "bamReader.h" #include "bamWriter.h" -qpGeomVertexFormat::Registry *qpGeomVertexFormat::_registry = NULL; -TypeHandle qpGeomVertexFormat::_type_handle; +GeomVertexFormat::Registry *GeomVertexFormat::_registry = NULL; +TypeHandle GeomVertexFormat::_type_handle; //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::Constructor +// Function: GeomVertexFormat::Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -qpGeomVertexFormat:: -qpGeomVertexFormat() : +GeomVertexFormat:: +GeomVertexFormat() : _is_registered(false), _post_animated_format(NULL) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::Constructor +// Function: GeomVertexFormat::Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -qpGeomVertexFormat:: -qpGeomVertexFormat(const qpGeomVertexArrayFormat *array_format) : +GeomVertexFormat:: +GeomVertexFormat(const GeomVertexArrayFormat *array_format) : _is_registered(false), _post_animated_format(NULL) { @@ -53,12 +53,12 @@ qpGeomVertexFormat(const qpGeomVertexArrayFormat *array_format) : } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::Copy Constructor +// Function: GeomVertexFormat::Copy Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -qpGeomVertexFormat:: -qpGeomVertexFormat(const qpGeomVertexFormat ©) : +GeomVertexFormat:: +GeomVertexFormat(const GeomVertexFormat ©) : _is_registered(false), _animation(copy._animation), _arrays(copy._arrays), @@ -67,12 +67,12 @@ qpGeomVertexFormat(const qpGeomVertexFormat ©) : } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::Copy Assignment Operator +// Function: GeomVertexFormat::Copy Assignment Operator // Access: Published // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexFormat:: -operator = (const qpGeomVertexFormat ©) { +void GeomVertexFormat:: +operator = (const GeomVertexFormat ©) { nassertv(!is_registered()); _animation = copy._animation; @@ -80,12 +80,12 @@ operator = (const qpGeomVertexFormat ©) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::Destructor +// Function: GeomVertexFormat::Destructor // Access: Published, Virtual // Description: //////////////////////////////////////////////////////////////////// -qpGeomVertexFormat:: -~qpGeomVertexFormat() { +GeomVertexFormat:: +~GeomVertexFormat() { if (is_registered()) { get_registry()->unregister_format(this); } @@ -93,7 +93,7 @@ qpGeomVertexFormat:: //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_post_animated_format +// Function: GeomVertexFormat::get_post_animated_format // Access: Published // Description: Returns a suitable vertex format for sending the // animated vertices to the graphics backend. This is @@ -103,12 +103,12 @@ qpGeomVertexFormat:: // This may only be called after the format has been // registered. //////////////////////////////////////////////////////////////////// -CPT(qpGeomVertexFormat) qpGeomVertexFormat:: +CPT(GeomVertexFormat) GeomVertexFormat:: get_post_animated_format() const { nassertr(is_registered(), NULL); - if (_post_animated_format == (qpGeomVertexFormat *)NULL) { - PT(qpGeomVertexFormat) new_format = new qpGeomVertexFormat(*this); + if (_post_animated_format == (GeomVertexFormat *)NULL) { + PT(GeomVertexFormat) new_format = new GeomVertexFormat(*this); new_format->remove_column(InternalName::get_transform_blend()); int num_morphs = get_num_morphs(); @@ -119,9 +119,9 @@ get_post_animated_format() const { new_format->_animation.set_none(); - CPT(qpGeomVertexFormat) registered = - qpGeomVertexFormat::register_format(new_format); - ((qpGeomVertexFormat *)this)->_post_animated_format = registered; + CPT(GeomVertexFormat) registered = + GeomVertexFormat::register_format(new_format); + ((GeomVertexFormat *)this)->_post_animated_format = registered; if (_post_animated_format != this) { // We only keep the reference count if the new pointer is not // the same as this, to avoid a circular dependency. @@ -135,7 +135,7 @@ get_post_animated_format() const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::modify_array +// Function: GeomVertexFormat::modify_array // Access: Published // Description: Returns a modifiable pointer to the indicated array. // This means duplicating it if it is shared or @@ -144,43 +144,43 @@ get_post_animated_format() const { // This may not be called once the format has been // registered. //////////////////////////////////////////////////////////////////// -qpGeomVertexArrayFormat *qpGeomVertexFormat:: +GeomVertexArrayFormat *GeomVertexFormat:: modify_array(int array) { nassertr(!is_registered(), NULL); nassertr(array >= 0 && array < (int)_arrays.size(), NULL); if (_arrays[array]->is_registered() || _arrays[array]->get_ref_count() > 1) { - _arrays[array] = new qpGeomVertexArrayFormat(*_arrays[array]); + _arrays[array] = new GeomVertexArrayFormat(*_arrays[array]); } return _arrays[array]; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::set_array +// Function: GeomVertexFormat::set_array // Access: Published // Description: Replaces the definition of the indicated array. // // This may not be called once the format has been // registered. //////////////////////////////////////////////////////////////////// -void qpGeomVertexFormat:: -set_array(int array, const qpGeomVertexArrayFormat *format) { +void GeomVertexFormat:: +set_array(int array, const GeomVertexArrayFormat *format) { nassertv(!is_registered()); nassertv(array >= 0 && array < (int)_arrays.size()); - _arrays[array] = (qpGeomVertexArrayFormat *)format; + _arrays[array] = (GeomVertexArrayFormat *)format; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::remove_array +// Function: GeomVertexFormat::remove_array // Access: Published // Description: Removes the nth array from the format. // // This may not be called once the format has been // registered. //////////////////////////////////////////////////////////////////// -void qpGeomVertexFormat:: +void GeomVertexFormat:: remove_array(int array) { nassertv(!is_registered()); @@ -189,7 +189,7 @@ remove_array(int array) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::add_array +// Function: GeomVertexFormat::add_array // Access: Published // Description: Adds the indicated array definition to the list of // arrays included within this vertex format definition. @@ -199,17 +199,17 @@ remove_array(int array) { // This may not be called once the format has been // registered. //////////////////////////////////////////////////////////////////// -int qpGeomVertexFormat:: -add_array(const qpGeomVertexArrayFormat *array_format) { +int GeomVertexFormat:: +add_array(const GeomVertexArrayFormat *array_format) { nassertr(!is_registered(), -1); int new_array = (int)_arrays.size(); - _arrays.push_back((qpGeomVertexArrayFormat *)array_format); + _arrays.push_back((GeomVertexArrayFormat *)array_format); return new_array; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::insert_array +// Function: GeomVertexFormat::insert_array // Access: Published // Description: Adds the indicated array definition to the list of // arrays at the indicated position. This works just @@ -219,16 +219,16 @@ add_array(const qpGeomVertexArrayFormat *array_format) { // This may not be called once the format has been // registered. //////////////////////////////////////////////////////////////////// -void qpGeomVertexFormat:: -insert_array(int array, const qpGeomVertexArrayFormat *array_format) { +void GeomVertexFormat:: +insert_array(int array, const GeomVertexArrayFormat *array_format) { nassertv(!is_registered()); nassertv(array >= 0 && array <= (int)_arrays.size()); - _arrays.insert(_arrays.begin() + array, (qpGeomVertexArrayFormat *)array_format); + _arrays.insert(_arrays.begin() + array, (GeomVertexArrayFormat *)array_format); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::clear_arrays +// Function: GeomVertexFormat::clear_arrays // Access: Published // Description: Removes all of the array definitions from the format // and starts over. @@ -236,7 +236,7 @@ insert_array(int array, const qpGeomVertexArrayFormat *array_format) { // This may not be called once the format has been // registered. //////////////////////////////////////////////////////////////////// -void qpGeomVertexFormat:: +void GeomVertexFormat:: clear_arrays() { nassertv(!is_registered()); @@ -244,12 +244,12 @@ clear_arrays() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_num_columns +// Function: GeomVertexFormat::get_num_columns // Access: Published // Description: Returns the total number of different columns in // the specification, across all arrays. //////////////////////////////////////////////////////////////////// -int qpGeomVertexFormat:: +int GeomVertexFormat:: get_num_columns() const { int num_columns = 0; Arrays::const_iterator ai; @@ -260,12 +260,12 @@ get_num_columns() const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_column +// Function: GeomVertexFormat::get_column // Access: Published // Description: Returns the ith column of the specification, // across all arrays. //////////////////////////////////////////////////////////////////// -const qpGeomVertexColumn *qpGeomVertexFormat:: +const GeomVertexColumn *GeomVertexFormat:: get_column(int i) const { Arrays::const_iterator ai; for (ai = _arrays.begin(); ai != _arrays.end(); ++ai) { @@ -279,7 +279,7 @@ get_column(int i) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_array_with +// Function: GeomVertexFormat::get_array_with // Access: Published // Description: Returns the index number of the array with the // ith column. @@ -290,7 +290,7 @@ get_column(int i) const { // get_data() or set_data() to manipulate the actual // array data. //////////////////////////////////////////////////////////////////// -int qpGeomVertexFormat:: +int GeomVertexFormat:: get_array_with(int i) const { int array_index = 0; for (array_index = 0; array_index < (int)_arrays.size(); array_index++) { @@ -304,7 +304,7 @@ get_array_with(int i) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_array_with +// Function: GeomVertexFormat::get_array_with // Access: Published // Description: Returns the index number of the array with the // indicated column, or -1 if no arrays contained @@ -319,7 +319,7 @@ get_array_with(int i) const { // This may only be called after the format has been // registered. //////////////////////////////////////////////////////////////////// -int qpGeomVertexFormat:: +int GeomVertexFormat:: get_array_with(const InternalName *name) const { nassertr(_is_registered, -1); @@ -332,7 +332,7 @@ get_array_with(const InternalName *name) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_column +// Function: GeomVertexFormat::get_column // Access: Published // Description: Returns the specification with the indicated name, or // NULL if the name is not used. Use get_array_with() @@ -342,7 +342,7 @@ get_array_with(const InternalName *name) const { // This may only be called after the format has been // registered. //////////////////////////////////////////////////////////////////// -const qpGeomVertexColumn *qpGeomVertexFormat:: +const GeomVertexColumn *GeomVertexFormat:: get_column(const InternalName *name) const { nassertr(_is_registered, NULL); @@ -359,7 +359,7 @@ get_column(const InternalName *name) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::remove_column +// Function: GeomVertexFormat::remove_column // Access: Published // Description: Removes the named column from the format, from // whichever array it exists in. If there are other @@ -371,7 +371,7 @@ get_column(const InternalName *name) const { // This may not be called once the format has been // registered. //////////////////////////////////////////////////////////////////// -void qpGeomVertexFormat:: +void GeomVertexFormat:: remove_column(const InternalName *name) { nassertv(!is_registered()); @@ -379,14 +379,14 @@ remove_column(const InternalName *name) { // of columns--so we have to search all of the arrays, one at a // time, until we find it. for (int array = 0; array < (int)_arrays.size(); ++array) { - qpGeomVertexArrayFormat *array_format = _arrays[array]; + GeomVertexArrayFormat *array_format = _arrays[array]; - if (array_format->get_column(name) != (qpGeomVertexColumn *)NULL) { + if (array_format->get_column(name) != (GeomVertexColumn *)NULL) { // Here's the array with the named column! if (array_format->is_registered() || array_format->get_ref_count() > 1) { // Get a safe-to-modify copy of the array format. - _arrays[array] = new qpGeomVertexArrayFormat(*array_format); + _arrays[array] = new GeomVertexArrayFormat(*array_format); array_format = _arrays[array]; } @@ -406,11 +406,11 @@ remove_column(const InternalName *name) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::output +// Function: GeomVertexFormat::output // Access: Published // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexFormat:: +void GeomVertexFormat:: output(ostream &out) const { if (_arrays.empty()) { out << "(empty)"; @@ -432,11 +432,11 @@ output(ostream &out) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::write +// Function: GeomVertexFormat::write // Access: Published // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexFormat:: +void GeomVertexFormat:: write(ostream &out, int indent_level) const { for (size_t i = 0; i < _arrays.size(); i++) { indent(out, indent_level) @@ -451,13 +451,13 @@ write(ostream &out, int indent_level) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::write_with_data +// Function: GeomVertexFormat::write_with_data // Access: Published // Description: //////////////////////////////////////////////////////////////////// -void qpGeomVertexFormat:: +void GeomVertexFormat:: write_with_data(ostream &out, int indent_level, - const qpGeomVertexData *data) const { + const GeomVertexData *data) const { indent(out, indent_level) << data->get_num_rows() << " rows.\n"; for (size_t i = 0; i < _arrays.size(); i++) { @@ -470,7 +470,7 @@ write_with_data(ostream &out, int indent_level, } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::get_array_info +// Function: GeomVertexFormat::get_array_info // Access: Public // Description: Quickly looks up the indicated column within all // of the nested arrays and sets array_index and @@ -482,9 +482,9 @@ write_with_data(ostream &out, int indent_level, // This may only be called after the format has been // registered. //////////////////////////////////////////////////////////////////// -bool qpGeomVertexFormat:: +bool GeomVertexFormat:: get_array_info(const InternalName *name, int &array_index, - const qpGeomVertexColumn *&column) const { + const GeomVertexColumn *&column) const { nassertr(_is_registered, false); DataTypesByName::const_iterator ai; @@ -502,12 +502,12 @@ get_array_info(const InternalName *name, int &array_index, } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::compare_to +// Function: GeomVertexFormat::compare_to // Access: Public // Description: //////////////////////////////////////////////////////////////////// -int qpGeomVertexFormat:: -compare_to(const qpGeomVertexFormat &other) const { +int GeomVertexFormat:: +compare_to(const GeomVertexFormat &other) const { int compare = _animation.compare_to(other._animation); if (compare != 0) { return compare; @@ -528,11 +528,11 @@ compare_to(const qpGeomVertexFormat &other) const { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::make_registry +// Function: GeomVertexFormat::make_registry // Access: Private // Description: Returns the global registry object. //////////////////////////////////////////////////////////////////// -void qpGeomVertexFormat:: +void GeomVertexFormat:: make_registry() { if (_registry == (Registry *)NULL) { _registry = new Registry; @@ -540,26 +540,26 @@ make_registry() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::do_register +// Function: GeomVertexFormat::do_register // Access: Private // Description: Called internally when the format is registered. //////////////////////////////////////////////////////////////////// -void qpGeomVertexFormat:: +void GeomVertexFormat:: do_register() { nassertv(!is_registered()); nassertv(_columns_by_name.empty()); for (int array = 0; array < (int)_arrays.size(); ++array) { - CPT(qpGeomVertexArrayFormat) array_format = _arrays[array]; + CPT(GeomVertexArrayFormat) array_format = _arrays[array]; if (!array_format->is_registered()) { - array_format = qpGeomVertexArrayFormat::register_format(array_format); - _arrays[array] = (qpGeomVertexArrayFormat *)array_format.p(); + array_format = GeomVertexArrayFormat::register_format(array_format); + _arrays[array] = (GeomVertexArrayFormat *)array_format.p(); } // Now add the names to the index. int num_columns = array_format->get_num_columns(); for (int i = 0; i < num_columns; i++) { - const qpGeomVertexColumn *column = array_format->get_column(i); + const GeomVertexColumn *column = array_format->get_column(i); pair result; result = _columns_by_name.insert(DataTypesByName::value_type(column->get_name(), DataTypeRecord())); if (!result.second) { @@ -580,7 +580,7 @@ do_register() { ni != _columns_by_name.end(); ++ni) { const DataTypeRecord &record = (*ni).second; - const qpGeomVertexColumn *column = _arrays[record._array_index]->get_column(record._column_index); + const GeomVertexColumn *column = _arrays[record._array_index]->get_column(record._column_index); switch (column->get_contents()) { case C_point: @@ -644,11 +644,11 @@ do_register() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::do_unregister +// Function: GeomVertexFormat::do_unregister // Access: Private // Description: Called internally when the format is unregistered. //////////////////////////////////////////////////////////////////// -void qpGeomVertexFormat:: +void GeomVertexFormat:: do_unregister() { nassertv(_is_registered); _is_registered = false; @@ -659,7 +659,7 @@ do_unregister() { _texcoords.clear(); _morphs.clear(); - if (_post_animated_format != (qpGeomVertexFormat *)NULL && + if (_post_animated_format != (GeomVertexFormat *)NULL && _post_animated_format != this) { unref_delete(_post_animated_format); } @@ -667,23 +667,23 @@ do_unregister() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::register_with_read_factory +// Function: GeomVertexFormat::register_with_read_factory // Access: Public, Static // Description: Tells the BamReader how to create objects of type -// qpGeomVertexFormat. +// GeomVertexFormat. //////////////////////////////////////////////////////////////////// -void qpGeomVertexFormat:: +void GeomVertexFormat:: register_with_read_factory() { BamReader::get_factory()->register_factory(get_class_type(), make_from_bam); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::write_datagram +// Function: GeomVertexFormat::write_datagram // Access: Public, Virtual // Description: Writes the contents of this object to the datagram // for shipping out to a Bam file. //////////////////////////////////////////////////////////////////// -void qpGeomVertexFormat:: +void GeomVertexFormat:: write_datagram(BamWriter *manager, Datagram &dg) { TypedWritableReferenceCount::write_datagram(manager, dg); @@ -697,36 +697,36 @@ write_datagram(BamWriter *manager, Datagram &dg) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::complete_pointers +// Function: GeomVertexFormat::complete_pointers // Access: Public, Virtual // Description: Receives an array of pointers, one for each time // manager->read_pointer() was called in fillin(). // Returns the number of pointers processed. //////////////////////////////////////////////////////////////////// -int qpGeomVertexFormat:: +int GeomVertexFormat:: complete_pointers(TypedWritable **p_list, BamReader *manager) { int pi = TypedWritableReferenceCount::complete_pointers(p_list, manager); Arrays::iterator ai; for (ai = _arrays.begin(); ai != _arrays.end(); ++ai) { - (*ai) = DCAST(qpGeomVertexArrayFormat, p_list[pi++]); + (*ai) = DCAST(GeomVertexArrayFormat, p_list[pi++]); } return pi; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::make_from_bam +// Function: GeomVertexFormat::make_from_bam // Access: Protected, Static // Description: This function is called by the BamReader's factory -// when a new object of type qpGeomVertexFormat is +// when a new object of type GeomVertexFormat is // encountered in the Bam file. It should create the -// qpGeomVertexFormat and extract its information +// GeomVertexFormat and extract its information // from the file. //////////////////////////////////////////////////////////////////// -TypedWritable *qpGeomVertexFormat:: +TypedWritable *GeomVertexFormat:: make_from_bam(const FactoryParams ¶ms) { - qpGeomVertexFormat *object = new qpGeomVertexFormat; + GeomVertexFormat *object = new GeomVertexFormat; DatagramIterator scan; BamReader *manager; @@ -737,13 +737,13 @@ make_from_bam(const FactoryParams ¶ms) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::fillin +// Function: GeomVertexFormat::fillin // Access: Protected // Description: This internal function is called by make_from_bam to // read in all of the relevant data from the BamFile for -// the new qpGeomVertexFormat. +// the new GeomVertexFormat. //////////////////////////////////////////////////////////////////// -void qpGeomVertexFormat:: +void GeomVertexFormat:: fillin(DatagramIterator &scan, BamReader *manager) { TypedWritableReferenceCount::fillin(scan, manager); @@ -758,29 +758,29 @@ fillin(DatagramIterator &scan, BamReader *manager) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::Registry::Constructor +// Function: GeomVertexFormat::Registry::Constructor // Access: Public // Description: //////////////////////////////////////////////////////////////////// -qpGeomVertexFormat::Registry:: +GeomVertexFormat::Registry:: Registry() { - _v3 = register_format(new qpGeomVertexArrayFormat + _v3 = register_format(new GeomVertexArrayFormat (InternalName::get_vertex(), 3, NT_float32, C_point)); - _v3n3 = register_format(new qpGeomVertexArrayFormat + _v3n3 = register_format(new GeomVertexArrayFormat (InternalName::get_vertex(), 3, NT_float32, C_point, InternalName::get_normal(), 3, NT_float32, C_vector)); - _v3t2 = register_format(new qpGeomVertexArrayFormat + _v3t2 = register_format(new GeomVertexArrayFormat (InternalName::get_vertex(), 3, NT_float32, C_point, InternalName::get_texcoord(), 2, NT_float32, C_texcoord)); - _v3n3t2 = register_format(new qpGeomVertexArrayFormat + _v3n3t2 = register_format(new GeomVertexArrayFormat (InternalName::get_vertex(), 3, NT_float32, C_point, InternalName::get_normal(), 3, @@ -789,13 +789,13 @@ Registry() { NT_float32, C_texcoord)); // Define the DirectX-style packed color formats - _v3cp = register_format(new qpGeomVertexArrayFormat + _v3cp = register_format(new GeomVertexArrayFormat (InternalName::get_vertex(), 3, NT_float32, C_point, InternalName::get_color(), 1, NT_packed_dabc, C_color)); - _v3n3cp = register_format(new qpGeomVertexArrayFormat + _v3n3cp = register_format(new GeomVertexArrayFormat (InternalName::get_vertex(), 3, NT_float32, C_point, InternalName::get_normal(), 3, @@ -803,7 +803,7 @@ Registry() { InternalName::get_color(), 1, NT_packed_dabc, C_color)); - _v3cpt2 = register_format(new qpGeomVertexArrayFormat + _v3cpt2 = register_format(new GeomVertexArrayFormat (InternalName::get_vertex(), 3, NT_float32, C_point, InternalName::get_color(), 1, @@ -811,7 +811,7 @@ Registry() { InternalName::get_texcoord(), 2, NT_float32, C_texcoord)); - _v3n3cpt2 = register_format(new qpGeomVertexArrayFormat + _v3n3cpt2 = register_format(new GeomVertexArrayFormat (InternalName::get_vertex(), 3, NT_float32, C_point, InternalName::get_normal(), 3, @@ -824,13 +824,13 @@ Registry() { // Define the OpenGL-style per-byte color formats. This is not the // same as a packed format, above, because the resulting byte order // is endian-independent. - _v3c4 = register_format(new qpGeomVertexArrayFormat + _v3c4 = register_format(new GeomVertexArrayFormat (InternalName::get_vertex(), 3, NT_float32, C_point, InternalName::get_color(), 4, NT_uint8, C_color)); - _v3n3c4 = register_format(new qpGeomVertexArrayFormat + _v3n3c4 = register_format(new GeomVertexArrayFormat (InternalName::get_vertex(), 3, NT_float32, C_point, InternalName::get_normal(), 3, @@ -838,7 +838,7 @@ Registry() { InternalName::get_color(), 4, NT_uint8, C_color)); - _v3c4t2 = register_format(new qpGeomVertexArrayFormat + _v3c4t2 = register_format(new GeomVertexArrayFormat (InternalName::get_vertex(), 3, NT_float32, C_point, InternalName::get_color(), 4, @@ -846,7 +846,7 @@ Registry() { InternalName::get_texcoord(), 2, NT_float32, C_texcoord)); - _v3n3c4t2 = register_format(new qpGeomVertexArrayFormat + _v3n3c4t2 = register_format(new GeomVertexArrayFormat (InternalName::get_vertex(), 3, NT_float32, C_point, InternalName::get_normal(), 3, @@ -858,7 +858,7 @@ Registry() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::Registry::register_format +// Function: GeomVertexFormat::Registry::register_format // Access: Public // Description: Adds the indicated format to the registry, if there // is not an equivalent format already there; in either @@ -872,8 +872,8 @@ Registry() { // normally; you should use only the returned value from // this point on. //////////////////////////////////////////////////////////////////// -CPT(qpGeomVertexFormat) qpGeomVertexFormat::Registry:: -register_format(qpGeomVertexFormat *format) { +CPT(GeomVertexFormat) GeomVertexFormat::Registry:: +register_format(GeomVertexFormat *format) { if (format->is_registered()) { return format; } @@ -881,11 +881,11 @@ register_format(qpGeomVertexFormat *format) { // Save the incoming pointer in a local PointerTo, so that if it has // a zero reference count and is not added into the map below, it // will be automatically deleted when this function returns. - PT(qpGeomVertexFormat) pt_format = format; + PT(GeomVertexFormat) pt_format = format; Formats::iterator fi = _formats.insert(format).first; - qpGeomVertexFormat *new_format = (*fi); + GeomVertexFormat *new_format = (*fi); if (!new_format->is_registered()) { new_format->do_register(); } @@ -894,14 +894,14 @@ register_format(qpGeomVertexFormat *format) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexFormat::Registry::unregister_format +// Function: GeomVertexFormat::Registry::unregister_format // Access: Public // Description: Removes the indicated format from the registry. // Normally this should not be done until the format is // destructing. //////////////////////////////////////////////////////////////////// -void qpGeomVertexFormat::Registry:: -unregister_format(qpGeomVertexFormat *format) { +void GeomVertexFormat::Registry:: +unregister_format(GeomVertexFormat *format) { nassertv(format->is_registered()); Formats::iterator fi = _formats.find(format); nassertv(fi != _formats.end()); diff --git a/panda/src/gobj/qpgeomVertexFormat.h b/panda/src/gobj/geomVertexFormat.h similarity index 61% rename from panda/src/gobj/qpgeomVertexFormat.h rename to panda/src/gobj/geomVertexFormat.h index 0f986375b5..97f80734a0 100644 --- a/panda/src/gobj/qpgeomVertexFormat.h +++ b/panda/src/gobj/geomVertexFormat.h @@ -1,4 +1,4 @@ -// Filename: qpgeomVertexFormat.h +// Filename: geomVertexFormat.h // Created by: drose (07Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,30 +16,29 @@ // //////////////////////////////////////////////////////////////////// -#ifndef qpGEOMVERTEXFORMAT_H -#define qpGEOMVERTEXFORMAT_H +#ifndef GEOMVERTEXFORMAT_H +#define GEOMVERTEXFORMAT_H #include "pandabase.h" #include "typedWritableReferenceCount.h" -#include "qpgeomVertexAnimationSpec.h" -#include "qpgeomVertexArrayFormat.h" -#include "qpgeomEnums.h" +#include "geomVertexAnimationSpec.h" +#include "geomVertexArrayFormat.h" +#include "geomEnums.h" #include "internalName.h" #include "luse.h" #include "pointerTo.h" #include "pmap.h" #include "pset.h" #include "pvector.h" -#include "pta_float.h" #include "indirectCompareTo.h" #include "pmutex.h" class FactoryParams; -class qpGeomVertexData; -class qpGeomMunger; +class GeomVertexData; +class GeomMunger; //////////////////////////////////////////////////////////////////// -// Class : qpGeomVertexFormat +// Class : GeomVertexFormat // Description : This class defines the physical layout of the vertex // data stored within a Geom. The layout consists of a // list of named columns, each of which has a numeric @@ -62,41 +61,39 @@ class qpGeomMunger; // as needed. You may record any combination of // standard and/or user-defined columns in your custom // GeomVertexFormat constructions. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// -class EXPCL_PANDA qpGeomVertexFormat : public TypedWritableReferenceCount, public qpGeomEnums { +class EXPCL_PANDA GeomVertexFormat : public TypedWritableReferenceCount, public GeomEnums { PUBLISHED: - qpGeomVertexFormat(); - qpGeomVertexFormat(const qpGeomVertexArrayFormat *array_format); - qpGeomVertexFormat(const qpGeomVertexFormat ©); - void operator = (const qpGeomVertexFormat ©); - virtual ~qpGeomVertexFormat(); + GeomVertexFormat(); + GeomVertexFormat(const GeomVertexArrayFormat *array_format); + GeomVertexFormat(const GeomVertexFormat ©); + void operator = (const GeomVertexFormat ©); + virtual ~GeomVertexFormat(); INLINE bool is_registered() const; - INLINE static CPT(qpGeomVertexFormat) register_format(const qpGeomVertexFormat *format); - INLINE static CPT(qpGeomVertexFormat) register_format(const qpGeomVertexArrayFormat *format); + INLINE static CPT(GeomVertexFormat) register_format(const GeomVertexFormat *format); + INLINE static CPT(GeomVertexFormat) register_format(const GeomVertexArrayFormat *format); - INLINE const qpGeomVertexAnimationSpec &get_animation() const; - INLINE void set_animation(const qpGeomVertexAnimationSpec &animation); + INLINE const GeomVertexAnimationSpec &get_animation() const; + INLINE void set_animation(const GeomVertexAnimationSpec &animation); - CPT(qpGeomVertexFormat) get_post_animated_format() const; + CPT(GeomVertexFormat) get_post_animated_format() const; INLINE int get_num_arrays() const; - INLINE const qpGeomVertexArrayFormat *get_array(int array) const; - qpGeomVertexArrayFormat *modify_array(int array); - void set_array(int array, const qpGeomVertexArrayFormat *format); + INLINE const GeomVertexArrayFormat *get_array(int array) const; + GeomVertexArrayFormat *modify_array(int array); + void set_array(int array, const GeomVertexArrayFormat *format); void remove_array(int array); - int add_array(const qpGeomVertexArrayFormat *array_format); - void insert_array(int array, const qpGeomVertexArrayFormat *array_format); + int add_array(const GeomVertexArrayFormat *array_format); + void insert_array(int array, const GeomVertexArrayFormat *array_format); void clear_arrays(); int get_num_columns() const; int get_array_with(int i) const; - const qpGeomVertexColumn *get_column(int i) const; + const GeomVertexColumn *get_column(int i) const; int get_array_with(const InternalName *name) const; - const qpGeomVertexColumn *get_column(const InternalName *name) const; + const GeomVertexColumn *get_column(const InternalName *name) const; INLINE bool has_column(const InternalName *name) const; void remove_column(const InternalName *name); @@ -118,49 +115,49 @@ PUBLISHED: void output(ostream &out) const; void write(ostream &out, int indent_level = 0) const; void write_with_data(ostream &out, int indent_level, - const qpGeomVertexData *data) const; + const GeomVertexData *data) const; // Some standard vertex formats. No particular requirement to use // one of these, but the DirectX renderers can use these formats // directly, whereas any other format will have to be converted // first. - INLINE static const qpGeomVertexFormat *get_v3(); - INLINE static const qpGeomVertexFormat *get_v3n3(); - INLINE static const qpGeomVertexFormat *get_v3t2(); - INLINE static const qpGeomVertexFormat *get_v3n3t2(); + INLINE static const GeomVertexFormat *get_v3(); + INLINE static const GeomVertexFormat *get_v3n3(); + INLINE static const GeomVertexFormat *get_v3t2(); + INLINE static const GeomVertexFormat *get_v3n3t2(); // These formats, with the DirectX-style packed color, are not // supported directly by OpenGL. If you use them, the // GLGraphicsStateGuardian will automatically convert to OpenGL // form (with a small runtime overhead). - INLINE static const qpGeomVertexFormat *get_v3cp(); - INLINE static const qpGeomVertexFormat *get_v3cpt2(); - INLINE static const qpGeomVertexFormat *get_v3n3cp(); - INLINE static const qpGeomVertexFormat *get_v3n3cpt2(); + INLINE static const GeomVertexFormat *get_v3cp(); + INLINE static const GeomVertexFormat *get_v3cpt2(); + INLINE static const GeomVertexFormat *get_v3n3cp(); + INLINE static const GeomVertexFormat *get_v3n3cpt2(); // These formats, with an OpenGL-style four-byte color, are not // supported directly by DirectX. If you use them, the // DXGraphicsStateGuardian will automatically convert to DirectX // form (with a larger runtime overhead, since DirectX8, and old // DirectX9 drivers, require everything to be interleaved together). - INLINE static const qpGeomVertexFormat *get_v3c4(); - INLINE static const qpGeomVertexFormat *get_v3c4t2(); - INLINE static const qpGeomVertexFormat *get_v3n3c4(); - INLINE static const qpGeomVertexFormat *get_v3n3c4t2(); + INLINE static const GeomVertexFormat *get_v3c4(); + INLINE static const GeomVertexFormat *get_v3c4t2(); + INLINE static const GeomVertexFormat *get_v3n3c4(); + INLINE static const GeomVertexFormat *get_v3n3c4t2(); public: bool get_array_info(const InternalName *name, int &array_index, - const qpGeomVertexColumn *&column) const; + const GeomVertexColumn *&column) const; INLINE int get_vertex_array_index() const; - INLINE const qpGeomVertexColumn *get_vertex_column() const; + INLINE const GeomVertexColumn *get_vertex_column() const; INLINE int get_normal_array_index() const; - INLINE const qpGeomVertexColumn *get_normal_column() const; + INLINE const GeomVertexColumn *get_normal_column() const; INLINE int get_color_array_index() const; - INLINE const qpGeomVertexColumn *get_color_column() const; + INLINE const GeomVertexColumn *get_color_column() const; - int compare_to(const qpGeomVertexFormat &other) const; + int compare_to(const GeomVertexFormat &other) const; private: class Registry; @@ -172,9 +169,9 @@ private: bool _is_registered; - qpGeomVertexAnimationSpec _animation; + GeomVertexAnimationSpec _animation; - typedef pvector< PT(qpGeomVertexArrayFormat) > Arrays; + typedef pvector< PT(GeomVertexArrayFormat) > Arrays; Arrays _arrays; class DataTypeRecord { @@ -187,11 +184,11 @@ private: DataTypesByName _columns_by_name; int _vertex_array_index; - const qpGeomVertexColumn *_vertex_column; + const GeomVertexColumn *_vertex_column; int _normal_array_index; - const qpGeomVertexColumn *_normal_column; + const GeomVertexColumn *_normal_column; int _color_array_index; - const qpGeomVertexColumn *_color_column; + const GeomVertexColumn *_color_column; typedef pvector< CPT(InternalName) > Columns; Columns _points; @@ -207,33 +204,33 @@ private: typedef pvector Morphs; Morphs _morphs; - const qpGeomVertexFormat *_post_animated_format; + const GeomVertexFormat *_post_animated_format; // This is the global registry of all currently-in-use formats. - typedef pset > Formats; + typedef pset > Formats; class EXPCL_PANDA Registry { public: Registry(); - CPT(qpGeomVertexFormat) register_format(qpGeomVertexFormat *format); - INLINE CPT(qpGeomVertexFormat) register_format(qpGeomVertexArrayFormat *format); - void unregister_format(qpGeomVertexFormat *format); + CPT(GeomVertexFormat) register_format(GeomVertexFormat *format); + INLINE CPT(GeomVertexFormat) register_format(GeomVertexArrayFormat *format); + void unregister_format(GeomVertexFormat *format); Formats _formats; - CPT(qpGeomVertexFormat) _v3; - CPT(qpGeomVertexFormat) _v3n3; - CPT(qpGeomVertexFormat) _v3t2; - CPT(qpGeomVertexFormat) _v3n3t2; + CPT(GeomVertexFormat) _v3; + CPT(GeomVertexFormat) _v3n3; + CPT(GeomVertexFormat) _v3t2; + CPT(GeomVertexFormat) _v3n3t2; - CPT(qpGeomVertexFormat) _v3cp; - CPT(qpGeomVertexFormat) _v3n3cp; - CPT(qpGeomVertexFormat) _v3cpt2; - CPT(qpGeomVertexFormat) _v3n3cpt2; + CPT(GeomVertexFormat) _v3cp; + CPT(GeomVertexFormat) _v3n3cp; + CPT(GeomVertexFormat) _v3cpt2; + CPT(GeomVertexFormat) _v3n3cpt2; - CPT(qpGeomVertexFormat) _v3c4; - CPT(qpGeomVertexFormat) _v3n3c4; - CPT(qpGeomVertexFormat) _v3c4t2; - CPT(qpGeomVertexFormat) _v3n3c4t2; + CPT(GeomVertexFormat) _v3c4; + CPT(GeomVertexFormat) _v3n3c4; + CPT(GeomVertexFormat) _v3c4t2; + CPT(GeomVertexFormat) _v3n3c4t2; }; static Registry *_registry; @@ -254,7 +251,7 @@ public: } static void init_type() { TypedWritableReferenceCount::init_type(); - register_type(_type_handle, "qpGeomVertexFormat", + register_type(_type_handle, "GeomVertexFormat", TypedWritableReferenceCount::get_class_type()); } virtual TypeHandle get_type() const { @@ -265,12 +262,12 @@ public: private: static TypeHandle _type_handle; - friend class qpGeomVertexFormat::Registry; - friend class qpGeomMunger; + friend class GeomVertexFormat::Registry; + friend class GeomMunger; }; -INLINE ostream &operator << (ostream &out, const qpGeomVertexFormat &obj); +INLINE ostream &operator << (ostream &out, const GeomVertexFormat &obj); -#include "qpgeomVertexFormat.I" +#include "geomVertexFormat.I" #endif diff --git a/panda/src/gobj/qpgeomVertexReader.I b/panda/src/gobj/geomVertexReader.I similarity index 79% rename from panda/src/gobj/qpgeomVertexReader.I rename to panda/src/gobj/geomVertexReader.I index e79d10b07c..416b2084fe 100644 --- a/panda/src/gobj/qpgeomVertexReader.I +++ b/panda/src/gobj/geomVertexReader.I @@ -1,4 +1,4 @@ -// Filename: qpgeomVertexReader.I +// Filename: geomVertexReader.I // Created by: drose (25Mar05) // //////////////////////////////////////////////////////////////////// @@ -18,27 +18,27 @@ //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::Constructor +// Function: GeomVertexReader::Constructor // Access: Published // Description: Constructs a new reader to process the vertices of // the indicated data object. //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexReader:: -qpGeomVertexReader(const qpGeomVertexData *vertex_data) : +INLINE GeomVertexReader:: +GeomVertexReader(const GeomVertexData *vertex_data) : _vertex_data(vertex_data) { initialize(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::Constructor +// Function: GeomVertexReader::Constructor // Access: Published // Description: Constructs a new reader to process the vertices of // the indicated data object. This flavor creates the // reader specifically to process the named data type. //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexReader:: -qpGeomVertexReader(const qpGeomVertexData *vertex_data, const string &name) : +INLINE GeomVertexReader:: +GeomVertexReader(const GeomVertexData *vertex_data, const string &name) : _vertex_data(vertex_data) { initialize(); @@ -46,14 +46,14 @@ qpGeomVertexReader(const qpGeomVertexData *vertex_data, const string &name) : } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::Constructor +// Function: GeomVertexReader::Constructor // Access: Published // Description: Constructs a new reader to process the vertices of // the indicated data object. This flavor creates the // reader specifically to process the named data type. //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexReader:: -qpGeomVertexReader(const qpGeomVertexData *vertex_data, +INLINE GeomVertexReader:: +GeomVertexReader(const GeomVertexData *vertex_data, const InternalName *name) : _vertex_data(vertex_data) { @@ -62,26 +62,26 @@ qpGeomVertexReader(const qpGeomVertexData *vertex_data, } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::Constructor +// Function: GeomVertexReader::Constructor // Access: Published // Description: Constructs a new reader to process the vertices of // the indicated array only. //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexReader:: -qpGeomVertexReader(const qpGeomVertexArrayData *array_data) : +INLINE GeomVertexReader:: +GeomVertexReader(const GeomVertexArrayData *array_data) : _array_data(array_data) { initialize(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::Constructor +// Function: GeomVertexReader::Constructor // Access: Published // Description: Constructs a new reader to process the vertices of // the indicated array only. //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexReader:: -qpGeomVertexReader(const qpGeomVertexArrayData *array_data, int column) : +INLINE GeomVertexReader:: +GeomVertexReader(const GeomVertexArrayData *array_data, int column) : _array_data(array_data) { initialize(); @@ -89,39 +89,39 @@ qpGeomVertexReader(const qpGeomVertexArrayData *array_data, int column) : } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::Destructor +// Function: GeomVertexReader::Destructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexReader:: -~qpGeomVertexReader() { +INLINE GeomVertexReader:: +~GeomVertexReader() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::get_vertex_data +// Function: GeomVertexReader::get_vertex_data // Access: Published // Description: Returns the vertex data object that the // reader is processing. This may return NULL if the // reader was constructed with just an array pointer. //////////////////////////////////////////////////////////////////// -INLINE const qpGeomVertexData *qpGeomVertexReader:: +INLINE const GeomVertexData *GeomVertexReader:: get_vertex_data() const { return _vertex_data; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::get_array_data +// Function: GeomVertexReader::get_array_data // Access: Published // Description: Returns the particular array object that the // reader is currently processing. //////////////////////////////////////////////////////////////////// -INLINE const qpGeomVertexArrayData *qpGeomVertexReader:: +INLINE const GeomVertexArrayData *GeomVertexReader:: get_array_data() const { return _array_data; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::set_column +// Function: GeomVertexReader::set_column // Access: Published // Description: Sets up the reader to use the nth data type of the // GeomVertexFormat, numbering from 0. @@ -133,20 +133,20 @@ get_array_data() const { // The return value is true if the data type is valid, // false otherwise. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexReader:: +INLINE bool GeomVertexReader:: set_column(int column) { - if (_vertex_data != (const qpGeomVertexData *)NULL) { + if (_vertex_data != (const GeomVertexData *)NULL) { return set_column(_vertex_data->get_format()->get_array_with(column), _vertex_data->get_format()->get_column(column)); } - if (_array_data != (const qpGeomVertexArrayData *)NULL) { + if (_array_data != (const GeomVertexArrayData *)NULL) { return set_column(0, _array_data->get_array_format()->get_column(column)); } return false; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::set_column +// Function: GeomVertexReader::set_column // Access: Published // Description: Sets up the reader to use the data type with the // indicated name. @@ -158,13 +158,13 @@ set_column(int column) { // The return value is true if the data type is valid, // false otherwise. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexReader:: +INLINE bool GeomVertexReader:: set_column(const string &name) { return set_column(InternalName::make(name)); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::set_column +// Function: GeomVertexReader::set_column // Access: Published // Description: Sets up the reader to use the data type with the // indicated name. @@ -176,13 +176,13 @@ set_column(const string &name) { // The return value is true if the data type is valid, // false otherwise. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexReader:: +INLINE bool GeomVertexReader:: set_column(const InternalName *name) { - if (_vertex_data != (const qpGeomVertexData *)NULL) { + if (_vertex_data != (const GeomVertexData *)NULL) { return set_column(_vertex_data->get_format()->get_array_with(name), _vertex_data->get_format()->get_column(name)); } - if (_array_data != (const qpGeomVertexArrayData *)NULL) { + if (_array_data != (const GeomVertexArrayData *)NULL) { return set_column(0, _array_data->get_array_format()->get_column(name)); } @@ -190,44 +190,44 @@ set_column(const InternalName *name) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::has_column +// Function: GeomVertexReader::has_column // Access: Published // Description: Returns true if a valid data type has been // successfully set, or false if the data type does not // exist. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexReader:: +INLINE bool GeomVertexReader:: has_column() const { - return (_packer != (qpGeomVertexColumn::Packer *)NULL); + return (_packer != (GeomVertexColumn::Packer *)NULL); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::get_array +// Function: GeomVertexReader::get_array // Access: Published // Description: Returns the array index containing the data type that // the reader is working on. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexReader:: +INLINE int GeomVertexReader:: get_array() const { return _array; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::get_column +// Function: GeomVertexReader::get_column // Access: Published // Description: Returns the description of the data type that the // reader is working on. //////////////////////////////////////////////////////////////////// -INLINE const qpGeomVertexColumn *qpGeomVertexReader:: +INLINE const GeomVertexColumn *GeomVertexReader:: get_column() const { - if (_packer != (qpGeomVertexColumn::Packer *)NULL) { + if (_packer != (GeomVertexColumn::Packer *)NULL) { return _packer->_column; } return NULL; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::set_row +// Function: GeomVertexReader::set_row // Access: Published // Description: Sets the start row to the indicated value. The // reader will begin reading from the indicated row; @@ -235,7 +235,7 @@ get_column() const { // from the subsequent row. If set_column() is called, // the reader will return to this row. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexReader:: +INLINE void GeomVertexReader:: set_row(int row) { _start_row = row; if (has_column()) { @@ -244,156 +244,156 @@ set_row(int row) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::get_start_row +// Function: GeomVertexReader::get_start_row // Access: Published // Description: Returns the row index at which the reader started. // It will return to this row if you reset the current // column. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexReader:: +INLINE int GeomVertexReader:: get_start_row() const { return _start_row; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::get_read_row +// Function: GeomVertexReader::get_read_row // Access: Published // Description: Returns the row index from which the data will be // retrieved by the next call to get_data*(). //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexReader:: +INLINE int GeomVertexReader:: get_read_row() const { return (int)(_pointer - _pointer_begin) / _stride; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::is_at_end +// Function: GeomVertexReader::is_at_end // Access: Published // Description: Returns true if the reader is currently at the end of // the list of vertices, false otherwise. If this is // true, another call to get_data*() will result in a // crash. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexReader:: +INLINE bool GeomVertexReader:: is_at_end() const { return _pointer >= _pointer_end; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::get_data1f +// Function: GeomVertexReader::get_data1f // Access: Published // Description: Returns the data associated with the read row, // expressed as a 1-component value, and advances the // read row. //////////////////////////////////////////////////////////////////// -INLINE float qpGeomVertexReader:: +INLINE float GeomVertexReader:: get_data1f() { nassertr(has_column(), 0.0f); return _packer->get_data1f(inc_pointer()); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::get_data2f +// Function: GeomVertexReader::get_data2f // Access: Published // Description: Returns the data associated with the read row, // expressed as a 2-component value, and advances the // read row. //////////////////////////////////////////////////////////////////// -INLINE const LVecBase2f &qpGeomVertexReader:: +INLINE const LVecBase2f &GeomVertexReader:: get_data2f() { nassertr(has_column(), LVecBase2f::zero()); return _packer->get_data2f(inc_pointer()); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::get_data3f +// Function: GeomVertexReader::get_data3f // Access: Published // Description: Returns the data associated with the read row, // expressed as a 3-component value, and advances the // read row. //////////////////////////////////////////////////////////////////// -INLINE const LVecBase3f &qpGeomVertexReader:: +INLINE const LVecBase3f &GeomVertexReader:: get_data3f() { nassertr(has_column(), LVecBase3f::zero()); return _packer->get_data3f(inc_pointer()); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::get_data4f +// Function: GeomVertexReader::get_data4f // Access: Published // Description: Returns the data associated with the read row, // expressed as a 4-component value, and advances the // read row. //////////////////////////////////////////////////////////////////// -INLINE const LVecBase4f &qpGeomVertexReader:: +INLINE const LVecBase4f &GeomVertexReader:: get_data4f() { nassertr(has_column(), LVecBase4f::zero()); return _packer->get_data4f(inc_pointer()); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::get_data1i +// Function: GeomVertexReader::get_data1i // Access: Published // Description: Returns the data associated with the read row, // expressed as a 1-component value, and advances the // read row. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexReader:: +INLINE int GeomVertexReader:: get_data1i() { nassertr(has_column(), 0); return _packer->get_data1i(inc_pointer()); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::get_data2i +// Function: GeomVertexReader::get_data2i // Access: Published // Description: Returns the data associated with the read row, // expressed as a 2-component value, and advances the // read row. //////////////////////////////////////////////////////////////////// -INLINE const int *qpGeomVertexReader:: +INLINE const int *GeomVertexReader:: get_data2i() { nassertr(has_column(), 0); return _packer->get_data2i(inc_pointer()); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::get_data3i +// Function: GeomVertexReader::get_data3i // Access: Published // Description: Returns the data associated with the read row, // expressed as a 3-component value, and advances the // read row. //////////////////////////////////////////////////////////////////// -INLINE const int *qpGeomVertexReader:: +INLINE const int *GeomVertexReader:: get_data3i() { nassertr(has_column(), 0); return _packer->get_data3i(inc_pointer()); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::get_data4i +// Function: GeomVertexReader::get_data4i // Access: Published // Description: Returns the data associated with the read row, // expressed as a 4-component value, and advances the // read row. //////////////////////////////////////////////////////////////////// -INLINE const int *qpGeomVertexReader:: +INLINE const int *GeomVertexReader:: get_data4i() { nassertr(has_column(), 0); return _packer->get_data4i(inc_pointer()); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::set_pointer +// Function: GeomVertexReader::set_pointer // Access: Private // Description: Sets up the array pointers freshly from the source // object (in case they have been reallocated recently), // and sets the internal pointer to the indicated row. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexReader:: +INLINE void GeomVertexReader:: set_pointer(int row) { - if (_vertex_data != (const qpGeomVertexData *)NULL) { - const qpGeomVertexArrayData *array_data = _vertex_data->get_array(_array); + if (_vertex_data != (const GeomVertexData *)NULL) { + const GeomVertexArrayData *array_data = _vertex_data->get_array(_array); _pointer_begin = array_data->get_data(); _pointer_end = _pointer_begin + array_data->get_data_size_bytes(); @@ -405,19 +405,19 @@ set_pointer(int row) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::quick_set_pointer +// Function: GeomVertexReader::quick_set_pointer // Access: Private // Description: Sets up the internal pointer to the indicated row, // without first verifying that arrays haven't been // reallocated. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexReader:: +INLINE void GeomVertexReader:: quick_set_pointer(int row) { nassertv(has_column()); #ifdef _DEBUG - if (_vertex_data != (const qpGeomVertexData *)NULL) { - const qpGeomVertexArrayData *array_data = _vertex_data->get_array(_array); + if (_vertex_data != (const GeomVertexData *)NULL) { + const GeomVertexArrayData *array_data = _vertex_data->get_array(_array); nassertv(_pointer_begin == array_data->get_data()); } else { nassertv(_pointer_begin == _array_data->get_data()); @@ -428,17 +428,17 @@ quick_set_pointer(int row) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::inc_pointer +// Function: GeomVertexReader::inc_pointer // Access: Private // Description: Increments to the next row, and returns the data // pointer as it was before incrementing. //////////////////////////////////////////////////////////////////// -INLINE const unsigned char *qpGeomVertexReader:: +INLINE const unsigned char *GeomVertexReader:: inc_pointer() { #ifdef _DEBUG nassertr(_pointer < _pointer_end, empty_buffer); - if (_vertex_data != (const qpGeomVertexData *)NULL){ - const qpGeomVertexArrayData *array_data = _vertex_data->get_array(_array); + if (_vertex_data != (const GeomVertexData *)NULL){ + const GeomVertexArrayData *array_data = _vertex_data->get_array(_array); nassertr(_pointer >= array_data->get_data().p() && _pointer < array_data->get_data().p() + array_data->get_data_size_bytes(), empty_buffer); } else { nassertr(_pointer >= _array_data->get_data().p() && _pointer < _array_data->get_data().p() + _array_data->get_data_size_bytes(), empty_buffer); diff --git a/panda/src/gobj/qpgeomVertexReader.cxx b/panda/src/gobj/geomVertexReader.cxx similarity index 77% rename from panda/src/gobj/qpgeomVertexReader.cxx rename to panda/src/gobj/geomVertexReader.cxx index 500775b1c8..c4c00653a7 100644 --- a/panda/src/gobj/qpgeomVertexReader.cxx +++ b/panda/src/gobj/geomVertexReader.cxx @@ -1,4 +1,4 @@ -// Filename: qpgeomVertexReader.cxx +// Filename: geomVertexReader.cxx // Created by: drose (25Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,17 +16,17 @@ // //////////////////////////////////////////////////////////////////// -#include "qpgeomVertexReader.h" +#include "geomVertexReader.h" #ifndef NDEBUG // This is defined just for the benefit of having something non-NULL // to return from a nassertr() call. -const unsigned char qpGeomVertexReader::empty_buffer[100] = { 0 }; +const unsigned char GeomVertexReader::empty_buffer[100] = { 0 }; #endif //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::set_column +// Function: GeomVertexReader::set_column // Access: Published // Description: Sets up the reader to use the indicated column // description on the given array. @@ -38,14 +38,14 @@ const unsigned char qpGeomVertexReader::empty_buffer[100] = { 0 }; // The return value is true if the data type is valid, // false otherwise. //////////////////////////////////////////////////////////////////// -bool qpGeomVertexReader:: -set_column(int array, const qpGeomVertexColumn *column) { - if (_vertex_data == (const qpGeomVertexData *)NULL && - _array_data == (const qpGeomVertexArrayData *)NULL) { +bool GeomVertexReader:: +set_column(int array, const GeomVertexColumn *column) { + if (_vertex_data == (const GeomVertexData *)NULL && + _array_data == (const GeomVertexArrayData *)NULL) { return false; } - if (column == (const qpGeomVertexColumn *)NULL) { + if (column == (const GeomVertexColumn *)NULL) { // Clear the data type. _array = -1; _packer = NULL; @@ -56,14 +56,14 @@ set_column(int array, const qpGeomVertexColumn *column) { return false; } - if (_vertex_data != (const qpGeomVertexData *)NULL) { + if (_vertex_data != (const GeomVertexData *)NULL) { #ifndef NDEBUG _array = -1; _packer = NULL; nassertr(array >= 0 && array < _vertex_data->get_num_arrays(), false); #endif _array = array; - const qpGeomVertexArrayData *array_data =_vertex_data->get_array(_array); + const GeomVertexArrayData *array_data =_vertex_data->get_array(_array); _stride = array_data->get_array_format()->get_stride(); } else { @@ -78,11 +78,11 @@ set_column(int array, const qpGeomVertexColumn *column) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexReader::initialize +// Function: GeomVertexReader::initialize // Access: Private // Description: Called only by the constructor. //////////////////////////////////////////////////////////////////// -void qpGeomVertexReader:: +void GeomVertexReader:: initialize() { _array = 0; _packer = NULL; diff --git a/panda/src/gobj/qpgeomVertexReader.h b/panda/src/gobj/geomVertexReader.h similarity index 79% rename from panda/src/gobj/qpgeomVertexReader.h rename to panda/src/gobj/geomVertexReader.h index d1f5e6bbf4..808e3655d3 100644 --- a/panda/src/gobj/qpgeomVertexReader.h +++ b/panda/src/gobj/geomVertexReader.h @@ -1,4 +1,4 @@ -// Filename: qpgeomVertexReader.h +// Filename: geomVertexReader.h // Created by: drose (25Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,18 +16,18 @@ // //////////////////////////////////////////////////////////////////// -#ifndef qpGEOMVERTEXREADER_H -#define qpGEOMVERTEXREADER_H +#ifndef GEOMVERTEXREADER_H +#define GEOMVERTEXREADER_H #include "pandabase.h" -#include "qpgeomVertexData.h" -#include "qpgeomVertexColumn.h" +#include "geomVertexData.h" +#include "geomVertexColumn.h" #include "internalName.h" #include "luse.h" #include "pointerTo.h" //////////////////////////////////////////////////////////////////// -// Class : qpGeomVertexReader +// Class : GeomVertexReader // Description : This object provides a high-level interface for // quickly reading a sequence of numeric values from a // vertex table. @@ -56,32 +56,30 @@ // the vertex buffer to be deallocated. Better yet, use // a GeomVertexRewriter if you are going to create both // of them anyway. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// -class EXPCL_PANDA qpGeomVertexReader : public qpGeomEnums { +class EXPCL_PANDA GeomVertexReader : public GeomEnums { PUBLISHED: - INLINE qpGeomVertexReader(const qpGeomVertexData *vertex_data); - INLINE qpGeomVertexReader(const qpGeomVertexData *vertex_data, + INLINE GeomVertexReader(const GeomVertexData *vertex_data); + INLINE GeomVertexReader(const GeomVertexData *vertex_data, const string &name); - INLINE qpGeomVertexReader(const qpGeomVertexData *vertex_data, + INLINE GeomVertexReader(const GeomVertexData *vertex_data, const InternalName *name); - INLINE qpGeomVertexReader(const qpGeomVertexArrayData *array_data); - INLINE qpGeomVertexReader(const qpGeomVertexArrayData *array_data, + INLINE GeomVertexReader(const GeomVertexArrayData *array_data); + INLINE GeomVertexReader(const GeomVertexArrayData *array_data, int column); - INLINE ~qpGeomVertexReader(); + INLINE ~GeomVertexReader(); - INLINE const qpGeomVertexData *get_vertex_data() const; - INLINE const qpGeomVertexArrayData *get_array_data() const; + INLINE const GeomVertexData *get_vertex_data() const; + INLINE const GeomVertexArrayData *get_array_data() const; INLINE bool set_column(int column); INLINE bool set_column(const string &name); INLINE bool set_column(const InternalName *name); - bool set_column(int array, const qpGeomVertexColumn *column); + bool set_column(int array, const GeomVertexColumn *column); INLINE bool has_column() const; INLINE int get_array() const; - INLINE const qpGeomVertexColumn *get_column() const; + INLINE const GeomVertexColumn *get_column() const; INLINE void set_row(int row); @@ -111,11 +109,11 @@ private: // must not keep a pointer to the particular ArrayData we are // working on (if we do, it may result in an extra copy of the data // due to holding the reference count). - CPT(qpGeomVertexData) _vertex_data; + CPT(GeomVertexData) _vertex_data; int _array; - CPT(qpGeomVertexArrayData) _array_data; + CPT(GeomVertexArrayData) _array_data; - qpGeomVertexColumn::Packer *_packer; + GeomVertexColumn::Packer *_packer; int _stride; const unsigned char *_pointer_begin; @@ -131,6 +129,6 @@ private: #endif }; -#include "qpgeomVertexReader.I" +#include "geomVertexReader.I" #endif diff --git a/panda/src/gobj/qpgeomVertexRewriter.I b/panda/src/gobj/geomVertexRewriter.I similarity index 68% rename from panda/src/gobj/qpgeomVertexRewriter.I rename to panda/src/gobj/geomVertexRewriter.I index f3dd806a95..7c22eebde6 100644 --- a/panda/src/gobj/qpgeomVertexRewriter.I +++ b/panda/src/gobj/geomVertexRewriter.I @@ -1,4 +1,4 @@ -// Filename: qpgeomVertexRewriter.I +// Filename: geomVertexRewriter.I // Created by: drose (28Mar05) // //////////////////////////////////////////////////////////////////// @@ -18,112 +18,112 @@ //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexRewriter::Constructor +// Function: GeomVertexRewriter::Constructor // Access: Published // Description: Constructs a new rewriter to process the vertices of // the indicated data object. //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexRewriter:: -qpGeomVertexRewriter(qpGeomVertexData *vertex_data) : - qpGeomVertexWriter(vertex_data), - qpGeomVertexReader(vertex_data) +INLINE GeomVertexRewriter:: +GeomVertexRewriter(GeomVertexData *vertex_data) : + GeomVertexWriter(vertex_data), + GeomVertexReader(vertex_data) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexRewriter::Constructor +// Function: GeomVertexRewriter::Constructor // Access: Published // Description: Constructs a new rewriter to process the vertices of // the indicated data object. This flavor creates the // rewriter specifically to process the named data type. //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexRewriter:: -qpGeomVertexRewriter(qpGeomVertexData *vertex_data, const string &name) : - qpGeomVertexWriter(vertex_data), - qpGeomVertexReader(vertex_data) +INLINE GeomVertexRewriter:: +GeomVertexRewriter(GeomVertexData *vertex_data, const string &name) : + GeomVertexWriter(vertex_data), + GeomVertexReader(vertex_data) { set_column(name); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexRewriter::Constructor +// Function: GeomVertexRewriter::Constructor // Access: Published // Description: Constructs a new rewriter to process the vertices of // the indicated data object. This flavor creates the // rewriter specifically to process the named data type. //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexRewriter:: -qpGeomVertexRewriter(qpGeomVertexData *vertex_data, const InternalName *name) : - qpGeomVertexWriter(vertex_data), - qpGeomVertexReader(vertex_data) +INLINE GeomVertexRewriter:: +GeomVertexRewriter(GeomVertexData *vertex_data, const InternalName *name) : + GeomVertexWriter(vertex_data), + GeomVertexReader(vertex_data) { set_column(name); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexRewriter::Constructor +// Function: GeomVertexRewriter::Constructor // Access: Published // Description: Constructs a new rewriter to process the vertices of // the indicated array only. //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexRewriter:: -qpGeomVertexRewriter(qpGeomVertexArrayData *array_data) : - qpGeomVertexWriter(array_data), - qpGeomVertexReader(array_data) +INLINE GeomVertexRewriter:: +GeomVertexRewriter(GeomVertexArrayData *array_data) : + GeomVertexWriter(array_data), + GeomVertexReader(array_data) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexRewriter::Constructor +// Function: GeomVertexRewriter::Constructor // Access: Published // Description: Constructs a new rewriter to process the vertices of // the indicated array only. //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexRewriter:: -qpGeomVertexRewriter(qpGeomVertexArrayData *array_data, int column) : - qpGeomVertexWriter(array_data), - qpGeomVertexReader(array_data) +INLINE GeomVertexRewriter:: +GeomVertexRewriter(GeomVertexArrayData *array_data, int column) : + GeomVertexWriter(array_data), + GeomVertexReader(array_data) { set_column(column); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexRewriter::Destructor +// Function: GeomVertexRewriter::Destructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexRewriter:: -~qpGeomVertexRewriter() { +INLINE GeomVertexRewriter:: +~GeomVertexRewriter() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexRewriter::get_vertex_data +// Function: GeomVertexRewriter::get_vertex_data // Access: Published // Description: Returns the vertex data object that the // rewriter is processing. //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexData *qpGeomVertexRewriter:: +INLINE GeomVertexData *GeomVertexRewriter:: get_vertex_data() const { - nassertr(qpGeomVertexWriter::get_vertex_data() == - qpGeomVertexReader::get_vertex_data(), NULL); - return qpGeomVertexWriter::get_vertex_data(); + nassertr(GeomVertexWriter::get_vertex_data() == + GeomVertexReader::get_vertex_data(), NULL); + return GeomVertexWriter::get_vertex_data(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexRewriter::get_array_data +// Function: GeomVertexRewriter::get_array_data // Access: Published // Description: Returns the particular array object that the // rewriter is currently processing. //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexArrayData *qpGeomVertexRewriter:: +INLINE GeomVertexArrayData *GeomVertexRewriter:: get_array_data() const { - nassertr(qpGeomVertexWriter::get_array_data() == - qpGeomVertexReader::get_array_data(), NULL); - return qpGeomVertexWriter::get_array_data(); + nassertr(GeomVertexWriter::get_array_data() == + GeomVertexReader::get_array_data(), NULL); + return GeomVertexWriter::get_array_data(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexRewriter::set_column +// Function: GeomVertexRewriter::set_column // Access: Published // Description: Sets up the rewriter to use the nth data type of the // GeomVertexFormat, numbering from 0. @@ -136,16 +136,16 @@ get_array_data() const { // The return value is true if the data type is valid, // false otherwise. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexRewriter:: +INLINE bool GeomVertexRewriter:: set_column(int column) { // It's important to invoke the writer first, then the reader. See // set_row(). - qpGeomVertexWriter::set_column(column); - return qpGeomVertexReader::set_column(column); + GeomVertexWriter::set_column(column); + return GeomVertexReader::set_column(column); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexRewriter::set_column +// Function: GeomVertexRewriter::set_column // Access: Published // Description: Sets up the rewriter to use the data type with the // indicated name. @@ -158,13 +158,13 @@ set_column(int column) { // The return value is true if the data type is valid, // false otherwise. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexRewriter:: +INLINE bool GeomVertexRewriter:: set_column(const string &name) { return set_column(InternalName::make(name)); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexRewriter::set_column +// Function: GeomVertexRewriter::set_column // Access: Published // Description: Sets up the rewriter to use the data type with the // indicated name. @@ -177,16 +177,16 @@ set_column(const string &name) { // The return value is true if the data type is valid, // false otherwise. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexRewriter:: +INLINE bool GeomVertexRewriter:: set_column(const InternalName *name) { // It's important to invoke the writer first, then the reader. See // set_row(). - qpGeomVertexWriter::set_column(name); - return qpGeomVertexReader::set_column(name); + GeomVertexWriter::set_column(name); + return GeomVertexReader::set_column(name); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexRewriter::set_column +// Function: GeomVertexRewriter::set_column // Access: Published // Description: Sets up the rewriter to use the indicated column // description on the given array. @@ -199,91 +199,91 @@ set_column(const InternalName *name) { // The return value is true if the data type is valid, // false otherwise. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexRewriter:: -set_column(int array, const qpGeomVertexColumn *column) { +INLINE bool GeomVertexRewriter:: +set_column(int array, const GeomVertexColumn *column) { // It's important to invoke the writer first, then the reader. See // set_row(). - qpGeomVertexWriter::set_column(array, column); - return qpGeomVertexReader::set_column(array, column); + GeomVertexWriter::set_column(array, column); + return GeomVertexReader::set_column(array, column); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexRewriter::has_column +// Function: GeomVertexRewriter::has_column // Access: Published // Description: Returns true if a valid data type has been // successfully set, or false if the data type does not // exist. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexRewriter:: +INLINE bool GeomVertexRewriter:: has_column() const { - nassertr(qpGeomVertexWriter::get_column() == - qpGeomVertexReader::get_column(), false); - return qpGeomVertexWriter::has_column(); + nassertr(GeomVertexWriter::get_column() == + GeomVertexReader::get_column(), false); + return GeomVertexWriter::has_column(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexRewriter::get_array +// Function: GeomVertexRewriter::get_array // Access: Published // Description: Returns the array index containing the data type that // the rewriter is working on. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexRewriter:: +INLINE int GeomVertexRewriter:: get_array() const { - nassertr(qpGeomVertexWriter::get_array() == - qpGeomVertexReader::get_array(), -1); - return qpGeomVertexWriter::get_array(); + nassertr(GeomVertexWriter::get_array() == + GeomVertexReader::get_array(), -1); + return GeomVertexWriter::get_array(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexRewriter::get_column +// Function: GeomVertexRewriter::get_column // Access: Published // Description: Returns the description of the data type that the // rewriter is working on. //////////////////////////////////////////////////////////////////// -INLINE const qpGeomVertexColumn *qpGeomVertexRewriter:: +INLINE const GeomVertexColumn *GeomVertexRewriter:: get_column() const { - nassertr(qpGeomVertexWriter::get_column() == - qpGeomVertexReader::get_column(), NULL); - return qpGeomVertexWriter::get_column(); + nassertr(GeomVertexWriter::get_column() == + GeomVertexReader::get_column(), NULL); + return GeomVertexWriter::get_column(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexRewriter::set_row +// Function: GeomVertexRewriter::set_row // Access: Published // Description: Sets the start, write, and write index to the // indicated value. The rewriter will begin traversing // from the given row. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexRewriter:: +INLINE void GeomVertexRewriter:: set_row(int row) { // It's important to invoke the Writer first, since that might force // a recopy of the array, which might invalidate the pointer already // stored by the Reader if we invoked the Reader first. - qpGeomVertexWriter::set_row(row); - qpGeomVertexReader::set_row(row); + GeomVertexWriter::set_row(row); + GeomVertexReader::set_row(row); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexRewriter::get_start_row +// Function: GeomVertexRewriter::get_start_row // Access: Published // Description: Returns the row index at which the rewriter // started. It will return to this row if you reset // the current column. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexRewriter:: +INLINE int GeomVertexRewriter:: get_start_row() const { - nassertr(qpGeomVertexWriter::get_start_row() == - qpGeomVertexReader::get_start_row(), 0); - return qpGeomVertexWriter::get_start_row(); + nassertr(GeomVertexWriter::get_start_row() == + GeomVertexReader::get_start_row(), 0); + return GeomVertexWriter::get_start_row(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexRewriter::is_at_end +// Function: GeomVertexRewriter::is_at_end // Access: Published // Description: Returns true if the reader or writer is currently at // the end of the list of vertices, false otherwise. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexRewriter:: +INLINE bool GeomVertexRewriter:: is_at_end() const { - return qpGeomVertexWriter::is_at_end() || qpGeomVertexReader::is_at_end(); + return GeomVertexWriter::is_at_end() || GeomVertexReader::is_at_end(); } diff --git a/panda/src/gobj/qpgeomVertexRewriter.cxx b/panda/src/gobj/geomVertexRewriter.cxx similarity index 90% rename from panda/src/gobj/qpgeomVertexRewriter.cxx rename to panda/src/gobj/geomVertexRewriter.cxx index 43cd8c4776..9e3c896b54 100644 --- a/panda/src/gobj/qpgeomVertexRewriter.cxx +++ b/panda/src/gobj/geomVertexRewriter.cxx @@ -1,4 +1,4 @@ -// Filename: qpgeomVertexRewriter.cxx +// Filename: geomVertexRewriter.cxx // Created by: drose (28Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,4 +16,4 @@ // //////////////////////////////////////////////////////////////////// -#include "qpgeomVertexRewriter.h" +#include "geomVertexRewriter.h" diff --git a/panda/src/gobj/qpgeomVertexRewriter.h b/panda/src/gobj/geomVertexRewriter.h similarity index 68% rename from panda/src/gobj/qpgeomVertexRewriter.h rename to panda/src/gobj/geomVertexRewriter.h index dc00a07126..4b3a751946 100644 --- a/panda/src/gobj/qpgeomVertexRewriter.h +++ b/panda/src/gobj/geomVertexRewriter.h @@ -1,4 +1,4 @@ -// Filename: qpgeomVertexRewriter.h +// Filename: geomVertexRewriter.h // Created by: drose (28Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,15 +16,15 @@ // //////////////////////////////////////////////////////////////////// -#ifndef qpGEOMVERTEXREWRITER_H -#define qpGEOMVERTEXREWRITER_H +#ifndef GEOMVERTEXREWRITER_H +#define GEOMVERTEXREWRITER_H #include "pandabase.h" -#include "qpgeomVertexReader.h" -#include "qpgeomVertexWriter.h" +#include "geomVertexReader.h" +#include "geomVertexWriter.h" //////////////////////////////////////////////////////////////////// -// Class : qpGeomVertexRewriter +// Class : GeomVertexRewriter // Description : This object provides the functionality of both a // GeomVertexReader and a GeomVertexWriter, combined // together into one convenient package. It is designed @@ -39,32 +39,30 @@ // properly between the reader and the writer to avoid // accidentally dereferencing either array while // recopying. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// -class EXPCL_PANDA qpGeomVertexRewriter : public qpGeomVertexWriter, public qpGeomVertexReader { +class EXPCL_PANDA GeomVertexRewriter : public GeomVertexWriter, public GeomVertexReader { PUBLISHED: - INLINE qpGeomVertexRewriter(qpGeomVertexData *vertex_data); - INLINE qpGeomVertexRewriter(qpGeomVertexData *vertex_data, + INLINE GeomVertexRewriter(GeomVertexData *vertex_data); + INLINE GeomVertexRewriter(GeomVertexData *vertex_data, const string &name); - INLINE qpGeomVertexRewriter(qpGeomVertexData *vertex_data, + INLINE GeomVertexRewriter(GeomVertexData *vertex_data, const InternalName *name); - INLINE qpGeomVertexRewriter(qpGeomVertexArrayData *array_data); - INLINE qpGeomVertexRewriter(qpGeomVertexArrayData *array_data, + INLINE GeomVertexRewriter(GeomVertexArrayData *array_data); + INLINE GeomVertexRewriter(GeomVertexArrayData *array_data, int column); - INLINE ~qpGeomVertexRewriter(); + INLINE ~GeomVertexRewriter(); - INLINE qpGeomVertexData *get_vertex_data() const; - INLINE qpGeomVertexArrayData *get_array_data() const; + INLINE GeomVertexData *get_vertex_data() const; + INLINE GeomVertexArrayData *get_array_data() const; INLINE bool set_column(int column); INLINE bool set_column(const string &name); INLINE bool set_column(const InternalName *name); - INLINE bool set_column(int array, const qpGeomVertexColumn *column); + INLINE bool set_column(int array, const GeomVertexColumn *column); INLINE bool has_column() const; INLINE int get_array() const; - INLINE const qpGeomVertexColumn *get_column() const; + INLINE const GeomVertexColumn *get_column() const; INLINE void set_row(int row); @@ -72,6 +70,6 @@ PUBLISHED: INLINE bool is_at_end() const; }; -#include "qpgeomVertexRewriter.I" +#include "geomVertexRewriter.I" #endif diff --git a/panda/src/gobj/qpgeomVertexWriter.I b/panda/src/gobj/geomVertexWriter.I similarity index 82% rename from panda/src/gobj/qpgeomVertexWriter.I rename to panda/src/gobj/geomVertexWriter.I index 980d2e8d62..38d84ecd16 100644 --- a/panda/src/gobj/qpgeomVertexWriter.I +++ b/panda/src/gobj/geomVertexWriter.I @@ -1,4 +1,4 @@ -// Filename: qpgeomVertexWriter.I +// Filename: geomVertexWriter.I // Created by: drose (25Mar05) // //////////////////////////////////////////////////////////////////// @@ -18,27 +18,27 @@ //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::Constructor +// Function: GeomVertexWriter::Constructor // Access: Published // Description: Constructs a new writer to process the vertices of // the indicated data object. //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexWriter:: -qpGeomVertexWriter(qpGeomVertexData *vertex_data) : +INLINE GeomVertexWriter:: +GeomVertexWriter(GeomVertexData *vertex_data) : _vertex_data(vertex_data) { initialize(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::Constructor +// Function: GeomVertexWriter::Constructor // Access: Published // Description: Constructs a new writer to process the vertices of // the indicated data object. This flavor creates the // writer specifically to process the named data type. //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexWriter:: -qpGeomVertexWriter(qpGeomVertexData *vertex_data, const string &name) : +INLINE GeomVertexWriter:: +GeomVertexWriter(GeomVertexData *vertex_data, const string &name) : _vertex_data(vertex_data) { initialize(); @@ -46,14 +46,14 @@ qpGeomVertexWriter(qpGeomVertexData *vertex_data, const string &name) : } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::Constructor +// Function: GeomVertexWriter::Constructor // Access: Published // Description: Constructs a new writer to process the vertices of // the indicated data object. This flavor creates the // writer specifically to process the named data type. //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexWriter:: -qpGeomVertexWriter(qpGeomVertexData *vertex_data, const InternalName *name) : +INLINE GeomVertexWriter:: +GeomVertexWriter(GeomVertexData *vertex_data, const InternalName *name) : _vertex_data(vertex_data) { initialize(); @@ -61,26 +61,26 @@ qpGeomVertexWriter(qpGeomVertexData *vertex_data, const InternalName *name) : } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::Constructor +// Function: GeomVertexWriter::Constructor // Access: Published // Description: Constructs a new writer to process the vertices of // the indicated array only. //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexWriter:: -qpGeomVertexWriter(qpGeomVertexArrayData *array_data) : +INLINE GeomVertexWriter:: +GeomVertexWriter(GeomVertexArrayData *array_data) : _array_data(array_data) { initialize(); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::Constructor +// Function: GeomVertexWriter::Constructor // Access: Published // Description: Constructs a new writer to process the vertices of // the indicated array only. //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexWriter:: -qpGeomVertexWriter(qpGeomVertexArrayData *array_data, int column) : +INLINE GeomVertexWriter:: +GeomVertexWriter(GeomVertexArrayData *array_data, int column) : _array_data(array_data) { initialize(); @@ -88,39 +88,39 @@ qpGeomVertexWriter(qpGeomVertexArrayData *array_data, int column) : } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::Destructor +// Function: GeomVertexWriter::Destructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexWriter:: -~qpGeomVertexWriter() { +INLINE GeomVertexWriter:: +~GeomVertexWriter() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::get_vertex_data +// Function: GeomVertexWriter::get_vertex_data // Access: Published // Description: Returns the vertex data object that the // writer is processing. This may return NULL if the // writer was constructed with just an array pointer. //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexData *qpGeomVertexWriter:: +INLINE GeomVertexData *GeomVertexWriter:: get_vertex_data() const { return _vertex_data; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::get_array_data +// Function: GeomVertexWriter::get_array_data // Access: Published // Description: Returns the particular array object that the // writer is currently processing. //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexArrayData *qpGeomVertexWriter:: +INLINE GeomVertexArrayData *GeomVertexWriter:: get_array_data() const { return _array_data; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::set_column +// Function: GeomVertexWriter::set_column // Access: Published // Description: Sets up the writer to use the nth data type of the // GeomVertexFormat, numbering from 0. @@ -132,20 +132,20 @@ get_array_data() const { // The return value is true if the data type is valid, // false otherwise. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexWriter:: +INLINE bool GeomVertexWriter:: set_column(int column) { - if (_vertex_data != (qpGeomVertexData *)NULL) { + if (_vertex_data != (GeomVertexData *)NULL) { return set_column(_vertex_data->get_format()->get_array_with(column), _vertex_data->get_format()->get_column(column)); } - if (_array_data != (qpGeomVertexArrayData *)NULL) { + if (_array_data != (GeomVertexArrayData *)NULL) { return set_column(0, _array_data->get_array_format()->get_column(column)); } return false; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::set_column +// Function: GeomVertexWriter::set_column // Access: Published // Description: Sets up the writer to use the data type with the // indicated name. @@ -157,13 +157,13 @@ set_column(int column) { // The return value is true if the data type is valid, // false otherwise. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexWriter:: +INLINE bool GeomVertexWriter:: set_column(const string &name) { return set_column(InternalName::make(name)); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::set_column +// Function: GeomVertexWriter::set_column // Access: Published // Description: Sets up the writer to use the data type with the // indicated name. @@ -175,13 +175,13 @@ set_column(const string &name) { // The return value is true if the data type is valid, // false otherwise. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexWriter:: +INLINE bool GeomVertexWriter:: set_column(const InternalName *name) { - if (_vertex_data != (qpGeomVertexData *)NULL) { + if (_vertex_data != (GeomVertexData *)NULL) { return set_column(_vertex_data->get_format()->get_array_with(name), _vertex_data->get_format()->get_column(name)); } - if (_array_data != (qpGeomVertexArrayData *)NULL) { + if (_array_data != (GeomVertexArrayData *)NULL) { return set_column(0, _array_data->get_array_format()->get_column(name)); } @@ -189,44 +189,44 @@ set_column(const InternalName *name) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::has_column +// Function: GeomVertexWriter::has_column // Access: Published // Description: Returns true if a valid data type has been // successfully set, or false if the data type does not // exist. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexWriter:: +INLINE bool GeomVertexWriter:: has_column() const { - return (_packer != (qpGeomVertexColumn::Packer *)NULL); + return (_packer != (GeomVertexColumn::Packer *)NULL); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::get_array +// Function: GeomVertexWriter::get_array // Access: Published // Description: Returns the array index containing the data type that // the writer is working on. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexWriter:: +INLINE int GeomVertexWriter:: get_array() const { return _array; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::get_column +// Function: GeomVertexWriter::get_column // Access: Published // Description: Returns the description of the data type that the // writer is working on. //////////////////////////////////////////////////////////////////// -INLINE const qpGeomVertexColumn *qpGeomVertexWriter:: +INLINE const GeomVertexColumn *GeomVertexWriter:: get_column() const { - if (_packer != (qpGeomVertexColumn::Packer *)NULL) { + if (_packer != (GeomVertexColumn::Packer *)NULL) { return _packer->_column; } return NULL; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::set_row +// Function: GeomVertexWriter::set_row // Access: Published // Description: Sets the start row to the indicated value. The // writer will begin writing to the indicated row; @@ -234,7 +234,7 @@ get_column() const { // into the subsequent row. If set_column() is called, // the writer will return to this row. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: set_row(int row) { _start_row = row; if (has_column()) { @@ -243,31 +243,31 @@ set_row(int row) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::get_start_row +// Function: GeomVertexWriter::get_start_row // Access: Published // Description: Returns the row index at which the writer // started. It will return to this row if you reset // the current column. //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexWriter:: +INLINE int GeomVertexWriter:: get_start_row() const { return _start_row; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::get_write_row +// Function: GeomVertexWriter::get_write_row // Access: Published // Description: Returns the row index to which the data will be // written at the next call to set_data*() or // add_data*(). //////////////////////////////////////////////////////////////////// -INLINE int qpGeomVertexWriter:: +INLINE int GeomVertexWriter:: get_write_row() const { return (int)(_pointer - _pointer_begin) / _stride; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::is_at_end +// Function: GeomVertexWriter::is_at_end // Access: Published // Description: Returns true if the writer is currently at the end of // the list of vertices, false otherwise. If this is @@ -275,13 +275,13 @@ get_write_row() const { // crash, but another call to add_data*() will add a new // row. //////////////////////////////////////////////////////////////////// -INLINE bool qpGeomVertexWriter:: +INLINE bool GeomVertexWriter:: is_at_end() const { return _pointer >= _pointer_end; } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::set_data1f +// Function: GeomVertexWriter::set_data1f // Access: Published // Description: Sets the write row to a particular 1-component // value, and advances the write row. @@ -289,14 +289,14 @@ is_at_end() const { // It is an error for the write row to advance past // the end of data. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: set_data1f(float data) { nassertv(has_column()); _packer->set_data1f(inc_pointer(), data); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::set_data2f +// Function: GeomVertexWriter::set_data2f // Access: Published // Description: Sets the write row to a particular 2-component // value, and advances the write row. @@ -304,13 +304,13 @@ set_data1f(float data) { // It is an error for the write row to advance past // the end of data. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: set_data2f(float x, float y) { set_data2f(LVecBase2f(x, y)); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::set_data2f +// Function: GeomVertexWriter::set_data2f // Access: Published // Description: Sets the write row to a particular 2-component // value, and advances the write row. @@ -318,14 +318,14 @@ set_data2f(float x, float y) { // It is an error for the write row to advance past // the end of data. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: set_data2f(const LVecBase2f &data) { nassertv(has_column()); _packer->set_data2f(inc_pointer(), data); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::set_data3f +// Function: GeomVertexWriter::set_data3f // Access: Published // Description: Sets the write row to a particular 3-component // value, and advances the write row. @@ -333,13 +333,13 @@ set_data2f(const LVecBase2f &data) { // It is an error for the write row to advance past // the end of data. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: set_data3f(float x, float y, float z) { set_data3f(LVecBase3f(x, y, z)); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::set_data3f +// Function: GeomVertexWriter::set_data3f // Access: Published // Description: Sets the write row to a particular 3-component // value, and advances the write row. @@ -347,14 +347,14 @@ set_data3f(float x, float y, float z) { // It is an error for the write row to advance past // the end of data. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: set_data3f(const LVecBase3f &data) { nassertv(has_column()); _packer->set_data3f(inc_pointer(), data); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::set_data4f +// Function: GeomVertexWriter::set_data4f // Access: Published // Description: Sets the write row to a particular 4-component // value, and advances the write row. @@ -362,13 +362,13 @@ set_data3f(const LVecBase3f &data) { // It is an error for the write row to advance past // the end of data. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: set_data4f(float x, float y, float z, float w) { set_data4f(LVecBase4f(x, y, z, w)); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::set_data4f +// Function: GeomVertexWriter::set_data4f // Access: Published // Description: Sets the write row to a particular 4-component // value, and advances the write row. @@ -376,14 +376,14 @@ set_data4f(float x, float y, float z, float w) { // It is an error for the write row to advance past // the end of data. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: set_data4f(const LVecBase4f &data) { nassertv(has_column()); _packer->set_data4f(inc_pointer(), data); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::set_data1i +// Function: GeomVertexWriter::set_data1i // Access: Published // Description: Sets the write row to a particular 1-component // value, and advances the write row. @@ -391,14 +391,14 @@ set_data4f(const LVecBase4f &data) { // It is an error for the write row to advance past // the end of data. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: set_data1i(int data) { nassertv(has_column()); _packer->set_data1i(inc_pointer(), data); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::set_data2i +// Function: GeomVertexWriter::set_data2i // Access: Published // Description: Sets the write row to a particular 2-component // value, and advances the write row. @@ -406,14 +406,14 @@ set_data1i(int data) { // It is an error for the write row to advance past // the end of data. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: set_data2i(int a, int b) { nassertv(has_column()); _packer->set_data2i(inc_pointer(), a, b); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::set_data2i +// Function: GeomVertexWriter::set_data2i // Access: Published // Description: Sets the write row to a particular 2-component // value, and advances the write row. @@ -421,13 +421,13 @@ set_data2i(int a, int b) { // It is an error for the write row to advance past // the end of data. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: set_data2i(const int data[2]) { set_data2i(data[0], data[1]); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::set_data3i +// Function: GeomVertexWriter::set_data3i // Access: Published // Description: Sets the write row to a particular 3-component // value, and advances the write row. @@ -435,14 +435,14 @@ set_data2i(const int data[2]) { // It is an error for the write row to advance past // the end of data. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: set_data3i(int a, int b, int c) { nassertv(has_column()); _packer->set_data3i(inc_pointer(), a, b, c); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::set_data3i +// Function: GeomVertexWriter::set_data3i // Access: Published // Description: Sets the write row to a particular 3-component // value, and advances the write row. @@ -450,13 +450,13 @@ set_data3i(int a, int b, int c) { // It is an error for the write row to advance past // the end of data. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: set_data3i(const int data[3]) { set_data3i(data[0], data[1], data[2]); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::set_data4i +// Function: GeomVertexWriter::set_data4i // Access: Published // Description: Sets the write row to a particular 4-component // value, and advances the write row. @@ -464,14 +464,14 @@ set_data3i(const int data[3]) { // It is an error for the write row to advance past // the end of data. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: set_data4i(int a, int b, int c, int d) { nassertv(has_column()); _packer->set_data4i(inc_pointer(), a, b, c, d); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::set_data4i +// Function: GeomVertexWriter::set_data4i // Access: Published // Description: Sets the write row to a particular 4-component // value, and advances the write row. @@ -479,13 +479,13 @@ set_data4i(int a, int b, int c, int d) { // It is an error for the write row to advance past // the end of data. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: set_data4i(const int data[4]) { set_data4i(data[0], data[1], data[2], data[3]); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::add_data1f +// Function: GeomVertexWriter::add_data1f // Access: Published // Description: Sets the write row to a particular 1-component // value, and advances the write row. @@ -493,14 +493,14 @@ set_data4i(const int data[4]) { // If the write row advances past the end of data, // implicitly adds a new row to the data. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: add_data1f(float data) { nassertv(has_column()); _packer->set_data1f(inc_add_pointer(), data); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::add_data2f +// Function: GeomVertexWriter::add_data2f // Access: Published // Description: Sets the write row to a particular 2-component // value, and advances the write row. @@ -508,13 +508,13 @@ add_data1f(float data) { // If the write row advances past the end of data, // implicitly adds a new row to the data. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: add_data2f(float x, float y) { add_data2f(LVecBase2f(x, y)); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::add_data2f +// Function: GeomVertexWriter::add_data2f // Access: Published // Description: Sets the write row to a particular 2-component // value, and advances the write row. @@ -522,14 +522,14 @@ add_data2f(float x, float y) { // If the write row advances past the end of data, // implicitly adds a new row to the data. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: add_data2f(const LVecBase2f &data) { nassertv(has_column()); _packer->set_data2f(inc_add_pointer(), data); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::add_data3f +// Function: GeomVertexWriter::add_data3f // Access: Published // Description: Sets the write row to a particular 3-component // value, and advances the write row. @@ -537,13 +537,13 @@ add_data2f(const LVecBase2f &data) { // If the write row advances past the end of data, // implicitly adds a new row to the data. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: add_data3f(float x, float y, float z) { add_data3f(LVecBase3f(x, y, z)); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::add_data3f +// Function: GeomVertexWriter::add_data3f // Access: Published // Description: Sets the write row to a particular 3-component // value, and advances the write row. @@ -551,14 +551,14 @@ add_data3f(float x, float y, float z) { // If the write row advances past the end of data, // implicitly adds a new row to the data. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: add_data3f(const LVecBase3f &data) { nassertv(has_column()); _packer->set_data3f(inc_add_pointer(), data); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::add_data4f +// Function: GeomVertexWriter::add_data4f // Access: Published // Description: Sets the write row to a particular 4-component // value, and advances the write row. @@ -566,13 +566,13 @@ add_data3f(const LVecBase3f &data) { // If the write row advances past the end of data, // implicitly adds a new row to the data. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: add_data4f(float x, float y, float z, float w) { add_data4f(LVecBase4f(x, y, z, w)); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::add_data4f +// Function: GeomVertexWriter::add_data4f // Access: Published // Description: Sets the write row to a particular 4-component // value, and advances the write row. @@ -580,14 +580,14 @@ add_data4f(float x, float y, float z, float w) { // If the write row advances past the end of data, // implicitly adds a new row to the data. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: add_data4f(const LVecBase4f &data) { nassertv(has_column()); _packer->set_data4f(inc_add_pointer(), data); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::add_data1i +// Function: GeomVertexWriter::add_data1i // Access: Published // Description: Sets the write row to a particular 1-component // value, and advances the write row. @@ -595,14 +595,14 @@ add_data4f(const LVecBase4f &data) { // If the write row advances past the end of data, // implicitly adds a new row to the data. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: add_data1i(int data) { nassertv(has_column()); _packer->set_data1i(inc_add_pointer(), data); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::add_data2i +// Function: GeomVertexWriter::add_data2i // Access: Published // Description: Sets the write row to a particular 2-component // value, and advances the write row. @@ -610,14 +610,14 @@ add_data1i(int data) { // If the write row advances past the end of data, // implicitly adds a new row to the data. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: add_data2i(int a, int b) { nassertv(has_column()); _packer->set_data2i(inc_add_pointer(), a, b); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::add_data2i +// Function: GeomVertexWriter::add_data2i // Access: Published // Description: Sets the write row to a particular 2-component // value, and advances the write row. @@ -625,13 +625,13 @@ add_data2i(int a, int b) { // If the write row advances past the end of data, // implicitly adds a new row to the data. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: add_data2i(const int data[2]) { add_data2i(data[0], data[1]); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::add_data3i +// Function: GeomVertexWriter::add_data3i // Access: Published // Description: Sets the write row to a particular 3-component // value, and advances the write row. @@ -639,14 +639,14 @@ add_data2i(const int data[2]) { // If the write row advances past the end of data, // implicitly adds a new row to the data. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: add_data3i(int a, int b, int c) { nassertv(has_column()); _packer->set_data3i(inc_add_pointer(), a, b, c); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::add_data3i +// Function: GeomVertexWriter::add_data3i // Access: Published // Description: Sets the write row to a particular 3-component // value, and advances the write row. @@ -654,13 +654,13 @@ add_data3i(int a, int b, int c) { // If the write row advances past the end of data, // implicitly adds a new row to the data. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: add_data3i(const int data[3]) { add_data3i(data[0], data[1], data[2]); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::add_data4i +// Function: GeomVertexWriter::add_data4i // Access: Published // Description: Sets the write row to a particular 4-component // value, and advances the write row. @@ -668,14 +668,14 @@ add_data3i(const int data[3]) { // If the write row advances past the end of data, // implicitly adds a new row to the data. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: add_data4i(int a, int b, int c, int d) { nassertv(has_column()); _packer->set_data4i(inc_add_pointer(), a, b, c, d); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::add_data4i +// Function: GeomVertexWriter::add_data4i // Access: Published // Description: Sets the write row to a particular 4-component // value, and advances the write row. @@ -683,22 +683,22 @@ add_data4i(int a, int b, int c, int d) { // If the write row advances past the end of data, // implicitly adds a new row to the data. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: add_data4i(const int data[4]) { add_data4i(data[0], data[1], data[2], data[3]); } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::set_pointer +// Function: GeomVertexWriter::set_pointer // Access: Private // Description: Sets up the array pointers freshly from the source // object (in case they have been reallocated recently), // and sets the internal pointer to the indicated row. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: set_pointer(int row) { - if (_vertex_data != (const qpGeomVertexData *)NULL) { - qpGeomVertexArrayData *array_data = _vertex_data->modify_array(_array); + if (_vertex_data != (const GeomVertexData *)NULL) { + GeomVertexArrayData *array_data = _vertex_data->modify_array(_array); _pointer_begin = array_data->modify_data(); _pointer_end = _pointer_begin + array_data->get_data_size_bytes(); @@ -710,19 +710,19 @@ set_pointer(int row) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::quick_set_pointer +// Function: GeomVertexWriter::quick_set_pointer // Access: Private // Description: Sets up the internal pointer to the indicated row, // without first verifying that arrays haven't been // reallocated. //////////////////////////////////////////////////////////////////// -INLINE void qpGeomVertexWriter:: +INLINE void GeomVertexWriter:: quick_set_pointer(int row) { nassertv(has_column()); #ifdef _DEBUG - if (_vertex_data != (const qpGeomVertexData *)NULL) { - const qpGeomVertexArrayData *array_data = _vertex_data->get_array(_array); + if (_vertex_data != (const GeomVertexData *)NULL) { + const GeomVertexArrayData *array_data = _vertex_data->get_array(_array); nassertv(_pointer_begin == array_data->get_data()); } else { nassertv(_pointer_begin == _array_data->get_data()); @@ -733,17 +733,17 @@ quick_set_pointer(int row) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::inc_pointer +// Function: GeomVertexWriter::inc_pointer // Access: Private // Description: Increments to the next row, and returns the data // pointer as it was before incrementing. //////////////////////////////////////////////////////////////////// -INLINE unsigned char *qpGeomVertexWriter:: +INLINE unsigned char *GeomVertexWriter:: inc_pointer() { #ifdef _DEBUG nassertr(_pointer < _pointer_end, empty_buffer); - if (_vertex_data != (qpGeomVertexData *)NULL){ - const qpGeomVertexArrayData *array_data = _vertex_data->get_array(_array); + if (_vertex_data != (GeomVertexData *)NULL){ + const GeomVertexArrayData *array_data = _vertex_data->get_array(_array); nassertr(_pointer >= array_data->get_data().p() && _pointer < array_data->get_data().p() + array_data->get_data_size_bytes(), empty_buffer); } else { nassertr(_pointer >= _array_data->get_data().p() && _pointer < _array_data->get_data().p() + _array_data->get_data_size_bytes(), empty_buffer); @@ -756,19 +756,19 @@ inc_pointer() { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::inc_add_pointer +// Function: GeomVertexWriter::inc_add_pointer // Access: Private // Description: Increments to the next row, and returns the data // pointer as it was before incrementing. If we are at // or past the end of data, implicitly adds more // rows first. //////////////////////////////////////////////////////////////////// -INLINE unsigned char *qpGeomVertexWriter:: +INLINE unsigned char *GeomVertexWriter:: inc_add_pointer() { if (_pointer >= _pointer_end) { // Reset the data pointer. int write_row = get_write_row(); - if (_vertex_data != (qpGeomVertexData *)NULL) { + if (_vertex_data != (GeomVertexData *)NULL) { _vertex_data->set_num_rows(max(write_row + 1, _vertex_data->get_num_rows())); } else { _array_data->set_num_rows(max(write_row + 1, _array_data->get_num_rows())); diff --git a/panda/src/gobj/qpgeomVertexWriter.cxx b/panda/src/gobj/geomVertexWriter.cxx similarity index 78% rename from panda/src/gobj/qpgeomVertexWriter.cxx rename to panda/src/gobj/geomVertexWriter.cxx index f8a03f0a14..4c6daa34e5 100644 --- a/panda/src/gobj/qpgeomVertexWriter.cxx +++ b/panda/src/gobj/geomVertexWriter.cxx @@ -1,4 +1,4 @@ -// Filename: qpgeomVertexWriter.cxx +// Filename: geomVertexWriter.cxx // Created by: drose (25Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,17 +16,17 @@ // //////////////////////////////////////////////////////////////////// -#include "qpgeomVertexWriter.h" +#include "geomVertexWriter.h" #ifndef NDEBUG // This is defined just for the benefit of having something non-NULL // to return from a nassertr() call. -unsigned char qpGeomVertexWriter::empty_buffer[100] = { 0 }; +unsigned char GeomVertexWriter::empty_buffer[100] = { 0 }; #endif //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::set_column +// Function: GeomVertexWriter::set_column // Access: Published // Description: Sets up the writer to use the indicated column // description on the given array. @@ -38,14 +38,14 @@ unsigned char qpGeomVertexWriter::empty_buffer[100] = { 0 }; // The return value is true if the data type is valid, // false otherwise. //////////////////////////////////////////////////////////////////// -bool qpGeomVertexWriter:: -set_column(int array, const qpGeomVertexColumn *column) { - if (_vertex_data == (qpGeomVertexData *)NULL && - _array_data == (qpGeomVertexArrayData *)NULL) { +bool GeomVertexWriter:: +set_column(int array, const GeomVertexColumn *column) { + if (_vertex_data == (GeomVertexData *)NULL && + _array_data == (GeomVertexArrayData *)NULL) { return false; } - if (column == (const qpGeomVertexColumn *)NULL) { + if (column == (const GeomVertexColumn *)NULL) { // Clear the data type. _array = -1; _packer = NULL; @@ -56,14 +56,14 @@ set_column(int array, const qpGeomVertexColumn *column) { return false; } - if (_vertex_data != (qpGeomVertexData *)NULL) { + if (_vertex_data != (GeomVertexData *)NULL) { #ifndef NDEBUG _array = -1; _packer = NULL; nassertr(array >= 0 && array < _vertex_data->get_num_arrays(), false); #endif _array = array; - const qpGeomVertexArrayData *array_data =_vertex_data->get_array(_array); + const GeomVertexArrayData *array_data =_vertex_data->get_array(_array); _stride = array_data->get_array_format()->get_stride(); } else { @@ -78,11 +78,11 @@ set_column(int array, const qpGeomVertexColumn *column) { } //////////////////////////////////////////////////////////////////// -// Function: qpGeomVertexWriter::initialize +// Function: GeomVertexWriter::initialize // Access: Private // Description: Called only by the constructor. //////////////////////////////////////////////////////////////////// -void qpGeomVertexWriter:: +void GeomVertexWriter:: initialize() { _array = 0; _packer = NULL; diff --git a/panda/src/gobj/qpgeomVertexWriter.h b/panda/src/gobj/geomVertexWriter.h similarity index 85% rename from panda/src/gobj/qpgeomVertexWriter.h rename to panda/src/gobj/geomVertexWriter.h index 68eeddfd5d..c74f20dd98 100644 --- a/panda/src/gobj/qpgeomVertexWriter.h +++ b/panda/src/gobj/geomVertexWriter.h @@ -1,4 +1,4 @@ -// Filename: qpgeomVertexWriter.h +// Filename: geomVertexWriter.h // Created by: drose (25Mar05) // //////////////////////////////////////////////////////////////////// @@ -16,18 +16,18 @@ // //////////////////////////////////////////////////////////////////// -#ifndef qpGEOMVERTEXWRITER_H -#define qpGEOMVERTEXWRITER_H +#ifndef GEOMVERTEXWRITER_H +#define GEOMVERTEXWRITER_H #include "pandabase.h" -#include "qpgeomVertexData.h" -#include "qpgeomVertexColumn.h" +#include "geomVertexData.h" +#include "geomVertexColumn.h" #include "internalName.h" #include "luse.h" #include "pointerTo.h" //////////////////////////////////////////////////////////////////// -// Class : qpGeomVertexWriter +// Class : GeomVertexWriter // Description : This object provides a high-level interface for // quickly writing a sequence of numeric values from a // vertex table. @@ -69,32 +69,30 @@ // the vertex buffer to be deallocated. Better yet, use // a GeomVertexRewriter if you are going to create both // of them anyway. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// -class EXPCL_PANDA qpGeomVertexWriter : public qpGeomEnums { +class EXPCL_PANDA GeomVertexWriter : public GeomEnums { PUBLISHED: - INLINE qpGeomVertexWriter(qpGeomVertexData *vertex_data); - INLINE qpGeomVertexWriter(qpGeomVertexData *vertex_data, + INLINE GeomVertexWriter(GeomVertexData *vertex_data); + INLINE GeomVertexWriter(GeomVertexData *vertex_data, const string &name); - INLINE qpGeomVertexWriter(qpGeomVertexData *vertex_data, + INLINE GeomVertexWriter(GeomVertexData *vertex_data, const InternalName *name); - INLINE qpGeomVertexWriter(qpGeomVertexArrayData *array_data); - INLINE qpGeomVertexWriter(qpGeomVertexArrayData *array_data, + INLINE GeomVertexWriter(GeomVertexArrayData *array_data); + INLINE GeomVertexWriter(GeomVertexArrayData *array_data, int column); - INLINE ~qpGeomVertexWriter(); + INLINE ~GeomVertexWriter(); - INLINE qpGeomVertexData *get_vertex_data() const; - INLINE qpGeomVertexArrayData *get_array_data() const; + INLINE GeomVertexData *get_vertex_data() const; + INLINE GeomVertexArrayData *get_array_data() const; INLINE bool set_column(int column); INLINE bool set_column(const string &name); INLINE bool set_column(const InternalName *name); - bool set_column(int array, const qpGeomVertexColumn *column); + bool set_column(int array, const GeomVertexColumn *column); INLINE bool has_column() const; INLINE int get_array() const; - INLINE const qpGeomVertexColumn *get_column() const; + INLINE const GeomVertexColumn *get_column() const; INLINE void set_row(int row); @@ -149,11 +147,11 @@ private: // must not keep a pointer to the particular ArrayData we are // working on (if we do, it may result in an extra copy of the data // due to holding the reference count). - PT(qpGeomVertexData) _vertex_data; + PT(GeomVertexData) _vertex_data; int _array; - PT(qpGeomVertexArrayData) _array_data; + PT(GeomVertexArrayData) _array_data; - qpGeomVertexColumn::Packer *_packer; + GeomVertexColumn::Packer *_packer; int _stride; unsigned char *_pointer_begin; @@ -169,6 +167,6 @@ private: #endif }; -#include "qpgeomVertexWriter.I" +#include "geomVertexWriter.I" #endif diff --git a/panda/src/gobj/geomprimitives.h b/panda/src/gobj/geomprimitives.h deleted file mode 100644 index 8fb8d06395..0000000000 --- a/panda/src/gobj/geomprimitives.h +++ /dev/null @@ -1,33 +0,0 @@ -// Filename: geomprimitives.h -// Created by: charles (13Jul00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef GEOMPRIMITIVES_H -#define GEOMPRIMITIVES_H - -#include "geomPoint.h" -#include "geomLine.h" -#include "geomLinestrip.h" -#include "geomSprite.h" -#include "geomTri.h" -#include "geomTristrip.h" -#include "geomTrifan.h" -#include "geomQuad.h" -#include "geomPolygon.h" -#include "geomSphere.h" - -#endif // GEOMPRIMITIVES_H diff --git a/panda/src/gobj/gobj_composite1.cxx b/panda/src/gobj/gobj_composite1.cxx index 786abc8137..764fdd48f7 100644 --- a/panda/src/gobj/gobj_composite1.cxx +++ b/panda/src/gobj/gobj_composite1.cxx @@ -1,34 +1,24 @@ #include "boundedObject.cxx" #include "geom.cxx" -#include "geomLine.cxx" -#include "geomLinestrip.cxx" -#include "geomPoint.cxx" -#include "geomPolygon.cxx" -#include "geomQuad.cxx" -#include "geomSphere.cxx" -#include "geomSprite.cxx" -#include "geomTri.cxx" -#include "geomTrifan.cxx" -#include "geomTristrip.cxx" -#include "qpgeom.cxx" -#include "qpgeomEnums.cxx" -#include "qpgeomMunger.cxx" -#include "qpgeomPrimitive.cxx" -#include "qpgeomTriangles.cxx" -#include "qpgeomTristrips.cxx" -#include "qpgeomTrifans.cxx" -#include "qpgeomLines.cxx" -#include "qpgeomLinestrips.cxx" -#include "qpgeomPoints.cxx" -#include "qpgeomVertexArrayData.cxx" -#include "qpgeomVertexArrayFormat.cxx" -#include "qpgeomCacheEntry.cxx" -#include "qpgeomCacheManager.cxx" -#include "qpgeomVertexAnimationSpec.cxx" -#include "qpgeomVertexData.cxx" -#include "qpgeomVertexColumn.cxx" -#include "qpgeomVertexFormat.cxx" -#include "qpgeomVertexReader.cxx" -#include "qpgeomVertexRewriter.cxx" -#include "qpgeomVertexWriter.cxx" +#include "geomContext.cxx" +#include "geomEnums.cxx" +#include "geomMunger.cxx" +#include "geomPrimitive.cxx" +#include "geomTriangles.cxx" +#include "geomTristrips.cxx" +#include "geomTrifans.cxx" +#include "geomLines.cxx" +#include "geomLinestrips.cxx" +#include "geomPoints.cxx" +#include "geomVertexArrayData.cxx" +#include "geomVertexArrayFormat.cxx" +#include "geomCacheEntry.cxx" +#include "geomCacheManager.cxx" +#include "geomVertexAnimationSpec.cxx" +#include "geomVertexData.cxx" +#include "geomVertexColumn.cxx" +#include "geomVertexFormat.cxx" +#include "geomVertexReader.cxx" +#include "geomVertexRewriter.cxx" +#include "geomVertexWriter.cxx" diff --git a/panda/src/gobj/gobj_composite2.cxx b/panda/src/gobj/gobj_composite2.cxx index 601c493ffc..389b773052 100644 --- a/panda/src/gobj/gobj_composite2.cxx +++ b/panda/src/gobj/gobj_composite2.cxx @@ -1,7 +1,6 @@ #include "config_gobj.cxx" #include "drawable.cxx" -#include "geomContext.cxx" #include "indexBufferContext.cxx" #include "internalName.cxx" #include "lens.cxx" diff --git a/panda/src/gobj/indexBufferContext.I b/panda/src/gobj/indexBufferContext.I index fe78cc44b6..18a65a4149 100644 --- a/panda/src/gobj/indexBufferContext.I +++ b/panda/src/gobj/indexBufferContext.I @@ -23,7 +23,7 @@ // Description: //////////////////////////////////////////////////////////////////// INLINE IndexBufferContext:: -IndexBufferContext(qpGeomPrimitive *data) : +IndexBufferContext(GeomPrimitive *data) : _data(data), // Initially, the number of bytes is zero, until the data has been // loaded (and mark_loaded() is called). @@ -37,7 +37,7 @@ IndexBufferContext(qpGeomPrimitive *data) : // Description: Returns the pointer to the client-side array data // object. //////////////////////////////////////////////////////////////////// -INLINE qpGeomPrimitive *IndexBufferContext:: +INLINE GeomPrimitive *IndexBufferContext:: get_data() const { return _data; } diff --git a/panda/src/gobj/indexBufferContext.h b/panda/src/gobj/indexBufferContext.h index 356c119eb5..3bd81838af 100644 --- a/panda/src/gobj/indexBufferContext.h +++ b/panda/src/gobj/indexBufferContext.h @@ -23,7 +23,7 @@ #include "savedContext.h" #include "updateSeq.h" -#include "qpgeomPrimitive.h" +#include "geomPrimitive.h" //////////////////////////////////////////////////////////////////// // Class : IndexBufferContext @@ -38,9 +38,9 @@ //////////////////////////////////////////////////////////////////// class EXPCL_PANDA IndexBufferContext : public SavedContext { public: - INLINE IndexBufferContext(qpGeomPrimitive *data); + INLINE IndexBufferContext(GeomPrimitive *data); - INLINE qpGeomPrimitive *get_data() const; + INLINE GeomPrimitive *get_data() const; INLINE int get_data_size_bytes() const; INLINE bool changed_size() const; @@ -51,13 +51,13 @@ public: INLINE void mark_loaded(); private: - // This cannot be a PT(qpGeomPrimitive), because the data and + // This cannot be a PT(GeomPrimitive), because the data and // the GSG both own their IndexBufferContexts! That would create a // circular reference count. - qpGeomPrimitive *_data; + GeomPrimitive *_data; UpdateSeq _modified; int _data_size_bytes; - qpGeomEnums::UsageHint _usage_hint; + GeomEnums::UsageHint _usage_hint; public: static TypeHandle get_class_type() { diff --git a/panda/src/gobj/lens.cxx b/panda/src/gobj/lens.cxx index ac26c12ae7..317ca75b6d 100644 --- a/panda/src/gobj/lens.cxx +++ b/panda/src/gobj/lens.cxx @@ -20,10 +20,9 @@ #include "throw_event.h" #include "compose_matrix.h" #include "look_at.h" -#include "geomLinestrip.h" -#include "qpgeom.h" -#include "qpgeomLinestrips.h" -#include "qpgeomVertexWriter.h" +#include "geom.h" +#include "geomLinestrips.h" +#include "geomVertexWriter.h" #include "boundingHexahedron.h" #include "indent.h" #include "config_gobj.h" @@ -903,133 +902,65 @@ make_geometry() { // subdivide the lines into several segments to get an approximation // of the curve. - if (use_qpgeom) { - // First, define all the points we'll use in this Geom. That's one - // point at each corner of the near and far planes (and possibly - // more points along the edges). - int num_segments = define_geom_data(); - if (num_segments == 0) { - // Can't do a frustum. - _geom_data.clear(); - return (Geom *)NULL; - } - - // Now string together the line segments. - PT(qpGeomLinestrips) line = new qpGeomLinestrips(qpGeom::UH_static); - - // Draw a frame around the near plane. - int i, si; - for (i = 0; i < 4; ++i) { - for (si = 0; si < num_segments; ++si) { - line->add_vertex(i * 2 + si * (4 * 2) + 0); - } - } - line->add_vertex(0); - line->close_primitive(); - - // Draw a frame around the far plane. - for (i = 0; i < 4; ++i) { - for (si = 0; si < num_segments; ++si) { - line->add_vertex(i * 2 + si * (4 * 2) + 1); - } - } - line->add_vertex(1); - line->close_primitive(); - - // Draw connecting lines at the corners. - line->add_vertex(0 * 2 + 0); - line->add_vertex(0 * 2 + 1); - line->close_primitive(); - - line->add_vertex(1 * 2 + 0); - line->add_vertex(1 * 2 + 1); - line->close_primitive(); - - line->add_vertex(2 * 2 + 0); - line->add_vertex(2 * 2 + 1); - line->close_primitive(); - - line->add_vertex(3 * 2 + 0); - line->add_vertex(3 * 2 + 1); - line->close_primitive(); - - // And one more line for the viewing axis. - line->add_vertex(num_segments * (4 * 2) + 0); - line->add_vertex(num_segments * (4 * 2) + 1); - line->close_primitive(); - - PT(qpGeom) geom = new qpGeom; - geom->set_vertex_data(_geom_data); - geom->add_primitive(line); - - return geom.p(); - - } else { - // First, define all the points we'll use in this Geom. That's one - // point at each corner of the near and far planes (and possibly - // more points along the edges). - int num_segments = define_geom_coords(); - if (num_segments == 0) { - // Can't do a frustum. - _geom_coords.clear(); - return (Geom *)NULL; - } - - // Now string together the line segments. - PTA_ushort vindex; - PTA_int lengths; - PTA_Colorf colors; - - int num_points = num_segments * 4; - - // Draw a frame around the near plane. - int i; - for (i = 0; i < num_points; i++) { - vindex.push_back(i * num_segments * 2); - } - vindex.push_back(0); - lengths.push_back(num_points + 1); - - // Draw a frame around the far plane. - for (i = 0; i < num_points; i++) { - vindex.push_back(i * num_segments * 2 + 1); - } - vindex.push_back(1); - lengths.push_back(num_points + 1); - - // Draw connecting lines at the corners. - vindex.push_back(0); - vindex.push_back(1); - lengths.push_back(2); - - vindex.push_back(num_segments * 2 + 0); - vindex.push_back(num_segments * 2+ 1); - lengths.push_back(2); - - vindex.push_back(num_segments * 4 + 0); - vindex.push_back(num_segments * 4 + 1); - lengths.push_back(2); - - vindex.push_back(num_segments * 6 + 0); - vindex.push_back(num_segments * 6 + 1); - lengths.push_back(2); - - // And one more line for the viewing axis. - vindex.push_back(num_segments * 8 + 0); - vindex.push_back(num_segments * 8 + 1); - lengths.push_back(2); - - // We just specify overall color. - colors.push_back(Colorf(1.0f, 1.0f, 1.0f, 1.0f)); - - GeomLinestrip *gline = new GeomLinestrip; - gline->set_coords(_geom_coords, vindex); - gline->set_colors(colors, G_OVERALL); - gline->set_lengths(lengths); - gline->set_num_prims(lengths.size()); - - return gline; + // First, define all the points we'll use in this Geom. That's one + // point at each corner of the near and far planes (and possibly + // more points along the edges). + int num_segments = define_geom_data(); + if (num_segments == 0) { + // Can't do a frustum. + _geom_data.clear(); + return (Geom *)NULL; } + + // Now string together the line segments. + PT(GeomLinestrips) line = new GeomLinestrips(Geom::UH_static); + + // Draw a frame around the near plane. + int i, si; + for (i = 0; i < 4; ++i) { + for (si = 0; si < num_segments; ++si) { + line->add_vertex(i * 2 + si * (4 * 2) + 0); + } + } + line->add_vertex(0); + line->close_primitive(); + + // Draw a frame around the far plane. + for (i = 0; i < 4; ++i) { + for (si = 0; si < num_segments; ++si) { + line->add_vertex(i * 2 + si * (4 * 2) + 1); + } + } + line->add_vertex(1); + line->close_primitive(); + + // Draw connecting lines at the corners. + line->add_vertex(0 * 2 + 0); + line->add_vertex(0 * 2 + 1); + line->close_primitive(); + + line->add_vertex(1 * 2 + 0); + line->add_vertex(1 * 2 + 1); + line->close_primitive(); + + line->add_vertex(2 * 2 + 0); + line->add_vertex(2 * 2 + 1); + line->close_primitive(); + + line->add_vertex(3 * 2 + 0); + line->add_vertex(3 * 2 + 1); + line->close_primitive(); + + // And one more line for the viewing axis. + line->add_vertex(num_segments * (4 * 2) + 0); + line->add_vertex(num_segments * (4 * 2) + 1); + line->close_primitive(); + + PT(Geom) geom = new Geom; + geom->set_vertex_data(_geom_data); + geom->add_primitive(line); + + return geom.p(); } //////////////////////////////////////////////////////////////////// @@ -1147,18 +1078,6 @@ throw_change_event() { throw_event(_change_event, this); } - // Also update the _geom_coords, if it is in use. - if (!_geom_coords.is_null()) { - if (_geom_coords.get_ref_count() == 1) { - // No one's using the array any more (other than us), so release - // it. - _geom_coords.clear(); - } else { - // Someone else still has a handle to the array, so recompute - // it. - define_geom_coords(); - } - } if (!_geom_data.is_null()) { if (_geom_data->get_ref_count() == 1) { // No one's using the data any more (there are no references to @@ -1680,86 +1599,6 @@ resequence_fov_triad(char &newest, char &older_a, char &older_b) { } } -//////////////////////////////////////////////////////////////////// -// Function: Lens::define_geom_coords -// Access: Private -// Description: Adjusts (or defines for the first time) all the -// vertices in the _geom_coords array to match the -// properties of the lens. This will update the visual -// representation of the lens's frustum to match the -// changing parameters. Returns the number of line -// segments per edge. -//////////////////////////////////////////////////////////////////// -int Lens:: -define_geom_coords() { - int num_segments = 1; - if (!is_linear()) { - num_segments = 10; - } - - PTA_Vertexf coords; - LPoint3f near_point, far_point; - for (int si = 0; si < num_segments; si++) { - float t = 2.0f * (float)si / (float)num_segments; - - // Upper left, top edge. - LPoint2f p1(-1.0f + t, 1.0f); - if (!extrude(p1, near_point, far_point)) { - // Hey, this point is off the lens! Can't do a frustum. - return 0; - } - coords.push_back(near_point); - coords.push_back(far_point); - - // Upper right, right edge. - LPoint2f p2(1.0f, 1.0f - t); - if (!extrude(p2, near_point, far_point)) { - // Hey, this point is off the lens! Can't do a frustum. - return 0; - } - coords.push_back(near_point); - coords.push_back(far_point); - - // Lower right, bottom edge. - LPoint2f p3(1.0f - t, -1.0f); - if (!extrude(p3, near_point, far_point)) { - // Hey, this point is off the lens! Can't do a frustum. - return 0; - } - coords.push_back(near_point); - coords.push_back(far_point); - - // Lower left, left edge. - LPoint2f p4(-1.0f, -1.0f + t); - if (!extrude(p4, near_point, far_point)) { - // Hey, this point is off the lens! Can't do a frustum. - return 0; - } - coords.push_back(near_point); - coords.push_back(far_point); - } - - // Finally, push one more pair for the viewing axis. - LPoint3f near_axis = LPoint3f::origin(_cs) + LVector3f::forward(_cs) * _near_distance; - LPoint3f far_axis = LPoint3f::origin(_cs) + LVector3f::forward(_cs) * _far_distance; - const LMatrix4f &lens_mat = get_lens_mat(); - near_axis = near_axis * lens_mat; - far_axis = far_axis * lens_mat; - coords.push_back(near_axis); - coords.push_back(far_axis); - - if (_geom_coords.is_null()) { - // If the previous array is NULL, simply assign the pointer. - _geom_coords = coords; - } else { - // Otherwise, swap out the vectors within the array so other - // objects that share the PTA will get the new data. - _geom_coords.v().swap(coords.v()); - } - - return num_segments; -} - //////////////////////////////////////////////////////////////////// // Function: Lens::define_geom_data // Access: Private @@ -1777,13 +1616,13 @@ define_geom_data() { num_segments = 10; } - if (_geom_data == (qpGeomVertexData *)NULL) { - _geom_data = new qpGeomVertexData - ("lens", qpGeomVertexFormat::get_v3(), - qpGeom::UH_dynamic); + if (_geom_data == (GeomVertexData *)NULL) { + _geom_data = new GeomVertexData + ("lens", GeomVertexFormat::get_v3(), + Geom::UH_dynamic); } - qpGeomVertexWriter vertex(_geom_data, InternalName::get_vertex()); + GeomVertexWriter vertex(_geom_data, InternalName::get_vertex()); LPoint3f near_point, far_point; for (int si = 0; si < num_segments; si++) { float t = 2.0f * (float)si / (float)num_segments; diff --git a/panda/src/gobj/lens.h b/panda/src/gobj/lens.h index 742379de90..26e4a13d1f 100644 --- a/panda/src/gobj/lens.h +++ b/panda/src/gobj/lens.h @@ -25,7 +25,7 @@ #include "luse.h" #include "geom.h" #include "updateSeq.h" -#include "qpgeomVertexData.h" +#include "geomVertexData.h" #include "pointerTo.h" class BoundingVolume; @@ -185,7 +185,6 @@ protected: private: static void resequence_fov_triad(char &newest, char &older_a, char &older_b); - int define_geom_coords(); int define_geom_data(); static void build_shear_mat(LMatrix4f &shear_mat, const LPoint3f &cul, const LPoint3f &cur, @@ -256,8 +255,7 @@ protected: // specified these three parameters. A bit of a mess. char _focal_length_seq, _fov_seq, _film_size_seq; - PTA_Vertexf _geom_coords; - PT(qpGeomVertexData) _geom_data; + PT(GeomVertexData) _geom_data; public: virtual void write_datagram(BamWriter *manager, Datagram &dg); diff --git a/panda/src/gobj/preparedGraphicsObjects.cxx b/panda/src/gobj/preparedGraphicsObjects.cxx index b601a4f7cf..b2eefb12a3 100644 --- a/panda/src/gobj/preparedGraphicsObjects.cxx +++ b/panda/src/gobj/preparedGraphicsObjects.cxx @@ -22,8 +22,8 @@ #include "indexBufferContext.h" #include "texture.h" #include "geom.h" -#include "qpgeomVertexArrayData.h" -#include "qpgeomPrimitive.h" +#include "geomVertexArrayData.h" +#include "geomPrimitive.h" #include "mutexHolder.h" PStatCollector PreparedGraphicsObjects::_total_texusage_pcollector("Texture usage"); @@ -398,7 +398,7 @@ prepare_geom_now(Geom *geom, GraphicsStateGuardianBase *gsg) { // do this (presumably at the next frame). //////////////////////////////////////////////////////////////////// void PreparedGraphicsObjects:: -enqueue_vertex_buffer(qpGeomVertexArrayData *data) { +enqueue_vertex_buffer(GeomVertexArrayData *data) { MutexHolder holder(_lock); _enqueued_vertex_buffers.insert(data); @@ -419,7 +419,7 @@ enqueue_vertex_buffer(qpGeomVertexArrayData *data) { // queued. //////////////////////////////////////////////////////////////////// bool PreparedGraphicsObjects:: -dequeue_vertex_buffer(qpGeomVertexArrayData *data) { +dequeue_vertex_buffer(GeomVertexArrayData *data) { MutexHolder holder(_lock); EnqueuedVertexBuffers::iterator qi = _enqueued_vertex_buffers.find(data); @@ -453,7 +453,7 @@ release_vertex_buffer(VertexBufferContext *vbc) { // We have to set the Data pointer to NULL at this point, since // the Data itself might destruct at any time after it has been // released. - vbc->_data = (qpGeomVertexArrayData *)NULL; + vbc->_data = (GeomVertexArrayData *)NULL; bool removed = (_prepared_vertex_buffers.erase(vbc) != 0); nassertv(removed); @@ -482,7 +482,7 @@ release_all_vertex_buffers() { VertexBufferContext *vbc = (*vbci); vbc->_data->clear_prepared(this); _total_buffers_pcollector.sub_level(vbc->get_data_size_bytes()); - vbc->_data = (qpGeomVertexArrayData *)NULL; + vbc->_data = (GeomVertexArrayData *)NULL; _released_vertex_buffers.insert(vbc); } @@ -515,7 +515,7 @@ release_all_vertex_buffers() { // VertexBufferContext will be deleted. //////////////////////////////////////////////////////////////////// VertexBufferContext *PreparedGraphicsObjects:: -prepare_vertex_buffer_now(qpGeomVertexArrayData *data, GraphicsStateGuardianBase *gsg) { +prepare_vertex_buffer_now(GeomVertexArrayData *data, GraphicsStateGuardianBase *gsg) { MutexHolder holder(_lock); // Ask the GSG to create a brand new VertexBufferContext. There might @@ -545,7 +545,7 @@ prepare_vertex_buffer_now(qpGeomVertexArrayData *data, GraphicsStateGuardianBase // do this (presumably at the next frame). //////////////////////////////////////////////////////////////////// void PreparedGraphicsObjects:: -enqueue_index_buffer(qpGeomPrimitive *data) { +enqueue_index_buffer(GeomPrimitive *data) { MutexHolder holder(_lock); _enqueued_index_buffers.insert(data); @@ -566,7 +566,7 @@ enqueue_index_buffer(qpGeomPrimitive *data) { // queued. //////////////////////////////////////////////////////////////////// bool PreparedGraphicsObjects:: -dequeue_index_buffer(qpGeomPrimitive *data) { +dequeue_index_buffer(GeomPrimitive *data) { MutexHolder holder(_lock); EnqueuedIndexBuffers::iterator qi = _enqueued_index_buffers.find(data); @@ -600,7 +600,7 @@ release_index_buffer(IndexBufferContext *ibc) { // We have to set the Data pointer to NULL at this point, since // the Data itself might destruct at any time after it has been // released. - ibc->_data = (qpGeomPrimitive *)NULL; + ibc->_data = (GeomPrimitive *)NULL; bool removed = (_prepared_index_buffers.erase(ibc) != 0); nassertv(removed); @@ -629,7 +629,7 @@ release_all_index_buffers() { IndexBufferContext *ibc = (*ibci); ibc->_data->clear_prepared(this); _total_buffers_pcollector.sub_level(ibc->get_data_size_bytes()); - ibc->_data = (qpGeomPrimitive *)NULL; + ibc->_data = (GeomPrimitive *)NULL; _released_index_buffers.insert(ibc); } @@ -662,7 +662,7 @@ release_all_index_buffers() { // IndexBufferContext will be deleted. //////////////////////////////////////////////////////////////////// IndexBufferContext *PreparedGraphicsObjects:: -prepare_index_buffer_now(qpGeomPrimitive *data, GraphicsStateGuardianBase *gsg) { +prepare_index_buffer_now(GeomPrimitive *data, GraphicsStateGuardianBase *gsg) { MutexHolder holder(_lock); // Ask the GSG to create a brand new IndexBufferContext. There might @@ -768,7 +768,7 @@ update(GraphicsStateGuardianBase *gsg) { for (qvbi = _enqueued_vertex_buffers.begin(); qvbi != _enqueued_vertex_buffers.end(); ++qvbi) { - qpGeomVertexArrayData *data = (*qvbi); + GeomVertexArrayData *data = (*qvbi); data->prepare_now(this, gsg); } @@ -778,7 +778,7 @@ update(GraphicsStateGuardianBase *gsg) { for (qibi = _enqueued_index_buffers.begin(); qibi != _enqueued_index_buffers.end(); ++qibi) { - qpGeomPrimitive *data = (*qibi); + GeomPrimitive *data = (*qibi); data->prepare_now(this, gsg); } diff --git a/panda/src/gobj/preparedGraphicsObjects.h b/panda/src/gobj/preparedGraphicsObjects.h index 09d8726fc4..48848d0af8 100644 --- a/panda/src/gobj/preparedGraphicsObjects.h +++ b/panda/src/gobj/preparedGraphicsObjects.h @@ -23,8 +23,8 @@ #include "referenceCount.h" #include "texture.h" #include "geom.h" -#include "qpgeomVertexArrayData.h" -#include "qpgeomPrimitive.h" +#include "geomVertexArrayData.h" +#include "geomPrimitive.h" #include "pointerTo.h" #include "pStatCollector.h" #include "pset.h" @@ -76,22 +76,22 @@ public: GeomContext *prepare_geom_now(Geom *geom, GraphicsStateGuardianBase *gsg); - void enqueue_vertex_buffer(qpGeomVertexArrayData *data); - bool dequeue_vertex_buffer(qpGeomVertexArrayData *data); + void enqueue_vertex_buffer(GeomVertexArrayData *data); + bool dequeue_vertex_buffer(GeomVertexArrayData *data); void release_vertex_buffer(VertexBufferContext *vbc); int release_all_vertex_buffers(); VertexBufferContext * - prepare_vertex_buffer_now(qpGeomVertexArrayData *data, + prepare_vertex_buffer_now(GeomVertexArrayData *data, GraphicsStateGuardianBase *gsg); - void enqueue_index_buffer(qpGeomPrimitive *data); - bool dequeue_index_buffer(qpGeomPrimitive *data); + void enqueue_index_buffer(GeomPrimitive *data); + bool dequeue_index_buffer(GeomPrimitive *data); void release_index_buffer(IndexBufferContext *ibc); int release_all_index_buffers(); IndexBufferContext * - prepare_index_buffer_now(qpGeomPrimitive *data, + prepare_index_buffer_now(GeomPrimitive *data, GraphicsStateGuardianBase *gsg); void update(GraphicsStateGuardianBase *gsg); @@ -102,9 +102,9 @@ private: typedef phash_set Geoms; typedef phash_set< PT(Geom) > EnqueuedGeoms; typedef phash_set VertexBuffers; - typedef phash_set< PT(qpGeomVertexArrayData) > EnqueuedVertexBuffers; + typedef phash_set< PT(GeomVertexArrayData) > EnqueuedVertexBuffers; typedef phash_set IndexBuffers; - typedef phash_set< PT(qpGeomPrimitive) > EnqueuedIndexBuffers; + typedef phash_set< PT(GeomPrimitive) > EnqueuedIndexBuffers; Mutex _lock; Textures _prepared_textures, _released_textures; diff --git a/panda/src/gobj/qpgeom.I b/panda/src/gobj/qpgeom.I deleted file mode 100644 index dfa5eafecd..0000000000 --- a/panda/src/gobj/qpgeom.I +++ /dev/null @@ -1,295 +0,0 @@ -// Filename: qpgeom.I -// Created by: drose (06Mar05) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::get_primitive_type -// Access: Published -// Description: Returns the fundamental primitive type that is common -// to all GeomPrimitives added within the Geom. All -// nested primitives within a particular Geom must be -// the same type (that is, you can mix triangles and -// tristrips, because they are both the same fundamental -// type PT_polygons, but you cannot mix triangles and -// points withn the same Geom). -//////////////////////////////////////////////////////////////////// -INLINE qpGeom::PrimitiveType qpGeom:: -get_primitive_type() const { - CDReader cdata(_cycler); - return cdata->_primitive_type; -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::get_shade_model -// Access: Published -// Description: Returns the shade model common to all of the -// individual GeomPrimitives that have been added to the -// geom. -//////////////////////////////////////////////////////////////////// -INLINE qpGeom::ShadeModel qpGeom:: -get_shade_model() const { - CDReader cdata(_cycler); - return cdata->_shade_model; -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::get_geom_rendering -// Access: Published -// Description: Returns the set of GeomRendering bits that represent -// the rendering properties required to properly render -// this Geom. -//////////////////////////////////////////////////////////////////// -INLINE int qpGeom:: -get_geom_rendering() const { - CDReader cdata(_cycler); - return cdata->_geom_rendering; -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::get_usage_hint -// Access: Published -// Description: Returns the minimum (i.e. most dynamic) usage_hint -// among all of the individual GeomPrimitives that have -// been added to the geom. -//////////////////////////////////////////////////////////////////// -INLINE qpGeom::UsageHint qpGeom:: -get_usage_hint() const { - CDReader cdata(_cycler); - if (!cdata->_got_usage_hint) { - CDWriter cdataw(((qpGeom *)this)->_cycler, cdata); - ((qpGeom *)this)->reset_usage_hint(cdataw); - return cdataw->_usage_hint; - } - return cdata->_usage_hint; -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::get_vertex_data -// Access: Published -// Description: Returns a const pointer to the GeomVertexData, -// for application code to directly examine (but not -// modify) the geom's underlying data. -//////////////////////////////////////////////////////////////////// -INLINE CPT(qpGeomVertexData) qpGeom:: -get_vertex_data() const { - CDReader cdata(_cycler); - return cdata->_data; -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::get_num_primitives -// Access: Published -// Description: Returns the number of GeomPrimitive objects stored -// within the Geom, each of which represents a number of -// primitives of a particular type. -//////////////////////////////////////////////////////////////////// -INLINE int qpGeom:: -get_num_primitives() const { - CDReader cdata(_cycler); - return cdata->_primitives.size(); -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::get_primitive -// Access: Published -// Description: Returns a const pointer to the ith GeomPrimitive -// object stored within the Geom. Use this call only to -// inspect the ith object; use modify_primitive() or -// set_primitive() if you want to modify it. -//////////////////////////////////////////////////////////////////// -INLINE const qpGeomPrimitive *qpGeom:: -get_primitive(int i) const { - CDReader cdata(_cycler); - nassertr(i >= 0 && i < (int)cdata->_primitives.size(), NULL); - return cdata->_primitives[i]; -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::modify_primitive -// Access: Published -// Description: Returns a modifiable pointer to the ith GeomPrimitive -// object stored within the Geom, so application code -// can directly manipulate the properties of this -// primitive. -//////////////////////////////////////////////////////////////////// -INLINE qpGeomPrimitive *qpGeom:: -modify_primitive(int i) { - clear_cache(); - CDWriter cdata(_cycler); - nassertr(i >= 0 && i < (int)cdata->_primitives.size(), NULL); - cdata->_got_usage_hint = false; - cdata->_modified = qpGeom::get_next_modified(); - if (cdata->_primitives[i]->get_ref_count() > 1) { - cdata->_primitives[i] = cdata->_primitives[i]->make_copy(); - } - return cdata->_primitives[i]; -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::decompose -// Access: Published -// Description: Decomposes all of the primitives within this Geom, -// returning the result. See -// GeomPrimitive::decompose(). -//////////////////////////////////////////////////////////////////// -INLINE CPT(qpGeom) qpGeom:: -decompose() const { - PT(qpGeom) new_geom = new qpGeom(*this); - new_geom->decompose_in_place(); - return new_geom; -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::rotate -// Access: Published -// Description: Rotates all of the primitives within this Geom, -// returning the result. See -// GeomPrimitive::rotate(). -//////////////////////////////////////////////////////////////////// -INLINE CPT(qpGeom) qpGeom:: -rotate() const { - PT(qpGeom) new_geom = new qpGeom(*this); - new_geom->rotate_in_place(); - return new_geom; -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::unify -// Access: Published -// Description: Unifies all of the primitives contained within this -// Geom into a single primitive object. This may -// require decomposing the primitives if, for instance, -// the Geom contains both triangle strips and triangle -// fans. -//////////////////////////////////////////////////////////////////// -INLINE CPT(qpGeom) qpGeom:: -unify() const { - PT(qpGeom) new_geom = new qpGeom(*this); - new_geom->unify_in_place(); - return new_geom; -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::get_modified -// Access: Published -// Description: Returns a sequence number which is guaranteed to -// change at least every time any of the primitives in -// the Geom is modified, or the set of primitives is -// modified. However, this does not include -// modifications to the vertex data, which should be -// tested separately. -//////////////////////////////////////////////////////////////////// -INLINE UpdateSeq qpGeom:: -get_modified() const { - CDReader cdata(_cycler); - return cdata->_modified; -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::CacheEntry::Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE qpGeom::CacheEntry:: -CacheEntry(const qpGeomVertexData *source_data, const qpGeomMunger *modifier) : - _source(NULL), - _source_data(source_data), - _modifier(modifier), - _geom_result(NULL), - _data_result(NULL) -{ -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::CacheEntry::Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE qpGeom::CacheEntry:: -CacheEntry(qpGeom *source, const qpGeomVertexData *source_data, - const qpGeomMunger *modifier, const qpGeom *geom_result, - const qpGeomVertexData *data_result) : - _source(source), - _source_data(source_data), - _modifier(modifier), - _geom_result(geom_result), - _data_result(data_result) -{ - if (_geom_result != _source) { - _geom_result->ref(); - } -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::CacheEntry::operator < -// Access: Public -// Description: Provides a unique ordering within the set. -//////////////////////////////////////////////////////////////////// -INLINE bool qpGeom::CacheEntry:: -operator < (const CacheEntry &other) const { - if (_modifier != other._modifier) { - int compare = _modifier->geom_compare_to(*other._modifier); - if (compare != 0) { - return (compare < 0); - } - } - if (_source_data != other._source_data) { - return (_source_data < other._source_data); - } - return 0; -} - - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::CData::Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE qpGeom::CData:: -CData() : - _primitive_type(PT_none), - _shade_model(SM_uniform), - _geom_rendering(0), - _usage_hint(UH_unspecified), - _got_usage_hint(false) -{ -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::CData::Copy Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE qpGeom::CData:: -CData(const qpGeom::CData ©) : - _data(copy._data), - _primitives(copy._primitives), - _primitive_type(copy._primitive_type), - _shade_model(copy._shade_model), - _geom_rendering(copy._geom_rendering), - _usage_hint(copy._usage_hint), - _got_usage_hint(copy._got_usage_hint), - _modified(copy._modified) -{ -} - -INLINE ostream & -operator << (ostream &out, const qpGeom &obj) { - obj.output(out); - return out; -} diff --git a/panda/src/gobj/qpgeom.cxx b/panda/src/gobj/qpgeom.cxx deleted file mode 100644 index d2373cac39..0000000000 --- a/panda/src/gobj/qpgeom.cxx +++ /dev/null @@ -1,1138 +0,0 @@ -// Filename: qpgeom.cxx -// Created by: drose (06Mar05) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "qpgeom.h" -#include "qpgeomPoints.h" -#include "qpgeomVertexReader.h" -#include "qpgeomVertexRewriter.h" -#include "pStatTimer.h" -#include "bamReader.h" -#include "bamWriter.h" - -UpdateSeq qpGeom::_next_modified; -TypeHandle qpGeom::_type_handle; - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::Constructor -// Access: Published -// Description: -//////////////////////////////////////////////////////////////////// -qpGeom:: -qpGeom() { -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::Copy Constructor -// Access: Published -// Description: -//////////////////////////////////////////////////////////////////// -qpGeom:: -qpGeom(const qpGeom ©) : - /* - TypedWritableReferenceCount(copy), - BoundedObject(copy), - */ - Geom(copy), - _cycler(copy._cycler) -{ -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::Copy Assignment Operator -// Access: Published -// Description: -//////////////////////////////////////////////////////////////////// -void qpGeom:: -operator = (const qpGeom ©) { - /* - TypedWritableReferenceCount::operator = (copy); - BoundedObject::operator = (copy); - */ - clear_cache(); - Geom::operator = (copy); - _cycler = copy._cycler; - mark_bound_stale(); -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::Destructor -// Access: Published, Virtual -// Description: -//////////////////////////////////////////////////////////////////// -qpGeom:: -~qpGeom() { - // When we destruct, we should ensure that all of our cached - // entries, across all pipeline stages, are properly removed from - // the cache manager. - int num_stages = _cycler.get_num_stages(); - for (int i = 0; i < num_stages; i++) { - if (_cycler.is_stage_unique(i)) { - CData *cdata = _cycler.write_stage(i); - for (Cache::iterator ci = cdata->_cache.begin(); - ci != cdata->_cache.end(); - ++ci) { - CacheEntry *entry = (*ci); - entry->erase(); - } - cdata->_cache.clear(); - _cycler.release_write_stage(i, cdata); - } - } -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::make_copy -// Access: Published, Virtual -// Description: Temporarily redefined from Geom base class. -//////////////////////////////////////////////////////////////////// -Geom *qpGeom:: -make_copy() const { - return new qpGeom(*this); -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::is_qpgeom -// Access: Published, Virtual -// Description: Returns true if this is a new-style qpGeom class, -// false otherwise. Temporary until the experimental -// Geom rewrite becomes the actual Geom implementation. -//////////////////////////////////////////////////////////////////// -bool qpGeom:: -is_qpgeom() const { - return true; -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::set_usage_hint -// Access: Published -// Description: Changes the UsageHint hint for all of the primitives -// on this Geom to the same value. See -// get_usage_hint(). -//////////////////////////////////////////////////////////////////// -void qpGeom:: -set_usage_hint(qpGeom::UsageHint usage_hint) { - clear_cache(); - CDWriter cdata(_cycler); - cdata->_usage_hint = usage_hint; - - Primitives::iterator pi; - for (pi = cdata->_primitives.begin(); pi != cdata->_primitives.end(); ++pi) { - if ((*pi)->get_ref_count() > 1) { - (*pi) = (*pi)->make_copy(); - } - (*pi)->set_usage_hint(usage_hint); - } - - cdata->_modified = qpGeom::get_next_modified(); -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::modify_vertex_data -// Access: Published -// Description: Returns a modifiable pointer to the GeomVertexData, -// so that application code may directly maniuplate the -// geom's underlying data. -//////////////////////////////////////////////////////////////////// -PT(qpGeomVertexData) qpGeom:: -modify_vertex_data() { - // Perform copy-on-write: if the reference count on the vertex data - // is greater than 1, assume some other Geom has the same pointer, - // so make a copy of it first. - clear_cache(); - CDWriter cdata(_cycler); - if (cdata->_data->get_ref_count() > 1) { - cdata->_data = new qpGeomVertexData(*cdata->_data); - } - mark_bound_stale(); - return cdata->_data; -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::set_vertex_data -// Access: Published -// Description: Replaces the Geom's underlying vertex data table with -// a completely new table. -//////////////////////////////////////////////////////////////////// -void qpGeom:: -set_vertex_data(const qpGeomVertexData *data) { - nassertv(check_will_be_valid(data)); - clear_cache(); - CDWriter cdata(_cycler); - cdata->_data = (qpGeomVertexData *)data; - mark_bound_stale(); - reset_geom_rendering(cdata); -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::offset_vertices -// Access: Published -// Description: Replaces a Geom's vertex table with a new table, and -// simultaneously adds the indicated offset to all -// vertex references within the Geom's primitives. This -// is intended to be used to combine multiple -// GeomVertexDatas from different Geoms into a single -// big buffer, with each Geom referencing a subset of -// the vertices in the buffer. -//////////////////////////////////////////////////////////////////// -void qpGeom:: -offset_vertices(const qpGeomVertexData *data, int offset) { - clear_cache(); - CDWriter cdata(_cycler); - cdata->_data = (qpGeomVertexData *)data; - -#ifndef NDEBUG - bool all_is_valid = true; -#endif - Primitives::iterator pi; - for (pi = cdata->_primitives.begin(); pi != cdata->_primitives.end(); ++pi) { - if ((*pi)->get_ref_count() > 1) { - (*pi) = (*pi)->make_copy(); - } - (*pi)->offset_vertices(offset); - -#ifndef NDEBUG - if (!(*pi)->check_valid(data)) { - all_is_valid = false; - } -#endif - } - - cdata->_modified = qpGeom::get_next_modified(); - nassertv(all_is_valid); -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::make_nonindexed -// Access: Published -// Description: Converts the geom from indexed to nonindexed by -// duplicating vertices as necessary. If composite_only -// is true, then only composite primitives such as -// trifans and tristrips are converted. Returns the -// number of GeomPrimitive objects converted. -//////////////////////////////////////////////////////////////////// -int qpGeom:: -make_nonindexed(bool composite_only) { - int num_changed = 0; - - clear_cache(); - CDWriter cdata(_cycler); - CPT(qpGeomVertexData) orig_data = cdata->_data; - PT(qpGeomVertexData) new_data = new qpGeomVertexData(*cdata->_data); - new_data->clear_rows(); - -#ifndef NDEBUG - bool all_is_valid = true; -#endif - Primitives::iterator pi; - Primitives new_prims; - new_prims.reserve(cdata->_primitives.size()); - for (pi = cdata->_primitives.begin(); pi != cdata->_primitives.end(); ++pi) { - PT(qpGeomPrimitive) primitive = (*pi)->make_copy(); - new_prims.push_back(primitive); - - // GeomPoints are considered "composite" for the purposes of - // making nonindexed, since there's no particular advantage to - // having indexed points (as opposed to, say, indexed triangles or - // indexed lines). - if (primitive->is_indexed() && - (primitive->is_composite() || - primitive->is_exact_type(qpGeomPoints::get_class_type()) || - !composite_only)) { - primitive->make_nonindexed(new_data, orig_data); - ++num_changed; - } else { - // If it's a simple primitive, pack it anyway, so it can share - // the same GeomVertexData. - primitive->pack_vertices(new_data, orig_data); - } - -#ifndef NDEBUG - if (!primitive->check_valid(new_data)) { - all_is_valid = false; - } -#endif - } - - nassertr(all_is_valid, 0); - - if (num_changed != 0) { - // If any at all were changed, then keep the result (otherwise, - // discard it, since we might have de-optimized the indexed - // geometry a bit). - cdata->_data = new_data; - cdata->_primitives.swap(new_prims); - cdata->_modified = qpGeom::get_next_modified(); - } - - return num_changed; -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::set_primitive -// Access: Published -// Description: Replaces the ith GeomPrimitive object stored within -// the Geom with the new object. -//////////////////////////////////////////////////////////////////// -void qpGeom:: -set_primitive(int i, const qpGeomPrimitive *primitive) { - clear_cache(); - CDWriter cdata(_cycler); - nassertv(i >= 0 && i < (int)cdata->_primitives.size()); - nassertv(primitive->check_valid(cdata->_data)); - - // All primitives within a particular Geom must have the same - // fundamental primitive type (triangles, points, or lines). - nassertv(cdata->_primitive_type == PT_none || - cdata->_primitive_type == primitive->get_primitive_type()); - - // They also should have the a compatible shade model. - CPT(qpGeomPrimitive) compat = primitive->match_shade_model(cdata->_shade_model); - nassertv_always(compat != (qpGeomPrimitive *)NULL); - - cdata->_primitives[i] = (qpGeomPrimitive *)compat.p(); - PrimitiveType new_primitive_type = compat->get_primitive_type(); - if (new_primitive_type != cdata->_primitive_type) { - cdata->_primitive_type = new_primitive_type; - } - ShadeModel new_shade_model = compat->get_shade_model(); - if (new_shade_model != cdata->_shade_model && - new_shade_model != SM_uniform) { - cdata->_shade_model = new_shade_model; - } - - reset_geom_rendering(cdata); - cdata->_got_usage_hint = false; - cdata->_modified = qpGeom::get_next_modified(); -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::add_primitive -// Access: Published -// Description: Adds a new GeomPrimitive structure to the Geom -// object. This specifies a particular subset of -// vertices that are used to define geometric primitives -// of the indicated type. -//////////////////////////////////////////////////////////////////// -void qpGeom:: -add_primitive(const qpGeomPrimitive *primitive) { - clear_cache(); - CDWriter cdata(_cycler); - - nassertv(primitive->check_valid(cdata->_data)); - - // All primitives within a particular Geom must have the same - // fundamental primitive type (triangles, points, or lines). - nassertv(cdata->_primitive_type == PT_none || - cdata->_primitive_type == primitive->get_primitive_type()); - - // They also should have the a compatible shade model. - CPT(qpGeomPrimitive) compat = primitive->match_shade_model(cdata->_shade_model); - nassertv_always(compat != (qpGeomPrimitive *)NULL); - - cdata->_primitives.push_back((qpGeomPrimitive *)compat.p()); - PrimitiveType new_primitive_type = compat->get_primitive_type(); - if (new_primitive_type != cdata->_primitive_type) { - cdata->_primitive_type = new_primitive_type; - } - ShadeModel new_shade_model = compat->get_shade_model(); - if (new_shade_model != cdata->_shade_model && - new_shade_model != SM_uniform) { - cdata->_shade_model = new_shade_model; - } - - reset_geom_rendering(cdata); - cdata->_got_usage_hint = false; - cdata->_modified = qpGeom::get_next_modified(); -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::remove_primitive -// Access: Published -// Description: Removes the ith primitive from the list. -//////////////////////////////////////////////////////////////////// -void qpGeom:: -remove_primitive(int i) { - clear_cache(); - CDWriter cdata(_cycler); - nassertv(i >= 0 && i < (int)cdata->_primitives.size()); - cdata->_primitives.erase(cdata->_primitives.begin() + i); - if (cdata->_primitives.empty()) { - cdata->_primitive_type = PT_none; - cdata->_shade_model = SM_uniform; - } - reset_geom_rendering(cdata); - cdata->_got_usage_hint = false; - cdata->_modified = qpGeom::get_next_modified(); -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::clear_primitives -// Access: Published -// Description: Removes all the primitives from the Geom object (but -// keeps the same table of vertices). You may then -// re-add primitives one at a time via calls to -// add_primitive(). -//////////////////////////////////////////////////////////////////// -void qpGeom:: -clear_primitives() { - clear_cache(); - CDWriter cdata(_cycler); - cdata->_primitives.clear(); - cdata->_primitive_type = PT_none; - cdata->_shade_model = SM_uniform; - reset_geom_rendering(cdata); -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::decompose_in_place -// Access: Published -// Description: Decomposes all of the primitives within this Geom, -// leaving the results in place. See -// GeomPrimitive::decompose(). -//////////////////////////////////////////////////////////////////// -void qpGeom:: -decompose_in_place() { - clear_cache(); - CDWriter cdata(_cycler); - -#ifndef NDEBUG - bool all_is_valid = true; -#endif - Primitives::iterator pi; - for (pi = cdata->_primitives.begin(); pi != cdata->_primitives.end(); ++pi) { - CPT(qpGeomPrimitive) new_prim = (*pi)->decompose(); - (*pi) = (qpGeomPrimitive *)new_prim.p(); - -#ifndef NDEBUG - if (!(*pi)->check_valid(cdata->_data)) { - all_is_valid = false; - } -#endif - } - - cdata->_modified = qpGeom::get_next_modified(); - reset_geom_rendering(cdata); - - nassertv(all_is_valid); -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::rotate_in_place -// Access: Published -// Description: Rotates all of the primitives within this Geom, -// leaving the results in place. See -// GeomPrimitive::rotate(). -//////////////////////////////////////////////////////////////////// -void qpGeom:: -rotate_in_place() { - clear_cache(); - CDWriter cdata(_cycler); - -#ifndef NDEBUG - bool all_is_valid = true; -#endif - Primitives::iterator pi; - for (pi = cdata->_primitives.begin(); pi != cdata->_primitives.end(); ++pi) { - CPT(qpGeomPrimitive) new_prim = (*pi)->rotate(); - (*pi) = (qpGeomPrimitive *)new_prim.p(); - -#ifndef NDEBUG - if (!(*pi)->check_valid(cdata->_data)) { - all_is_valid = false; - } -#endif - } - - cdata->_modified = qpGeom::get_next_modified(); - - nassertv(all_is_valid); -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::unify_in_place -// Access: Published -// Description: Unifies all of the primitives contained within this -// Geom into a single primitive object. This may -// require decomposing the primitives if, for instance, -// the Geom contains both triangle strips and triangle -// fans. -//////////////////////////////////////////////////////////////////// -void qpGeom:: -unify_in_place() { - if (get_num_primitives() <= 1) { - // If we don't have more than one primitive to start with, no need - // to do anything. - return; - } - - clear_cache(); - CDWriter cdata(_cycler); - - PT(qpGeomPrimitive) new_prim; - - Primitives::const_iterator pi; - for (pi = cdata->_primitives.begin(); pi != cdata->_primitives.end(); ++pi) { - CPT(qpGeomPrimitive) primitive = (*pi); - if (new_prim == (qpGeomPrimitive *)NULL) { - // The first primitive type we come across is copied directly. - new_prim = primitive->make_copy(); - } else { - // Thereafter, we must try to merge primitives. If they are not - // the same type, we have to decompose both of them. - if (new_prim->get_type() != primitive->get_type()) { - CPT(qpGeomPrimitive) decomposed = new_prim->decompose(); - new_prim = (qpGeomPrimitive *)decomposed.p(); - primitive = primitive->decompose(); - - nassertv(new_prim->get_type() == primitive->get_type()); - } - - // Now simply copy in the vertices. - int num_primitives = primitive->get_num_primitives(); - for (int pi = 0; pi < num_primitives; ++pi) { - int start = primitive->get_primitive_start(pi); - int end = primitive->get_primitive_end(pi); - for (int vi = start; vi < end; ++vi) { - new_prim->add_vertex(primitive->get_vertex(vi)); - } - new_prim->close_primitive(); - } - } - } - - // At the end of the day, we have just one primitive, which becomes - // the one primitive in our list of primitives. - nassertv(new_prim->check_valid(cdata->_data)); - - // The new primitive, naturally, inherits the Geom's overall shade - // model. - new_prim->set_shade_model(cdata->_shade_model); - - cdata->_primitives.clear(); - cdata->_primitives.push_back(new_prim); - - cdata->_modified = qpGeom::get_next_modified(); - reset_geom_rendering(cdata); -} - - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::copy_primitives_from -// Access: Published -// Description: Copies the primitives from the indicated Geom into -// this one. This does require that both Geoms contain -// the same fundamental type primitives, both have a -// compatible shade model, and both use the same -// GeomVertexData. -// -// Returns true if the copy is successful, or false -// otherwise (because the Geoms were mismatched). -//////////////////////////////////////////////////////////////////// -bool qpGeom:: -copy_primitives_from(const qpGeom *other) { - if (get_primitive_type() != PT_none && - other->get_primitive_type() != get_primitive_type()) { - return false; - } - if (get_vertex_data() != other->get_vertex_data()) { - return false; - } - - ShadeModel this_shade_model = get_shade_model(); - ShadeModel other_shade_model = other->get_shade_model(); - if (this_shade_model != SM_uniform && other_shade_model != SM_uniform && - this_shade_model != other_shade_model) { - if ((this_shade_model == SM_flat_first_vertex && other_shade_model == SM_flat_last_vertex) || - (this_shade_model == SM_flat_last_vertex && other_shade_model == SM_flat_first_vertex)) { - // This is acceptable; we can rotate the primitives to match. - - } else { - // Otherwise, we have incompatible shade models. - return false; - } - } - - int num_primitives = other->get_num_primitives(); - for (int i = 0; i < num_primitives; i++) { - add_primitive(other->get_primitive(i)); - } - - return true; -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::get_num_bytes -// Access: Published -// Description: Returns the number of bytes consumed by the geom and -// its primitives (but not including its vertex table). -//////////////////////////////////////////////////////////////////// -int qpGeom:: -get_num_bytes() const { - CDReader cdata(_cycler); - - int num_bytes = sizeof(qpGeom); - Primitives::const_iterator pi; - for (pi = cdata->_primitives.begin(); - pi != cdata->_primitives.end(); - ++pi) { - num_bytes += (*pi)->get_num_bytes(); - } - - return num_bytes; -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::transform_vertices -// Access: Published, Virtual -// Description: Applies the indicated transform to all of the -// vertices in the Geom. If the Geom happens to share a -// vertex table with another Geom, this operation will -// duplicate the vertex table instead of breaking the -// other Geom; however, if multiple Geoms with shared -// tables are transformed by the same matrix, they will -// no longer share tables after the operation. Consider -// using the GeomTransformer if you will be applying the -// same transform to multiple Geoms. -//////////////////////////////////////////////////////////////////// -void qpGeom:: -transform_vertices(const LMatrix4f &mat) { - PT(qpGeomVertexData) new_data = modify_vertex_data(); - CPT(qpGeomVertexFormat) format = new_data->get_format(); - - int ci; - for (ci = 0; ci < format->get_num_points(); ci++) { - qpGeomVertexRewriter data(new_data, format->get_point(ci)); - - while (!data.is_at_end()) { - const LPoint3f &point = data.get_data3f(); - data.set_data3f(point * mat); - } - } - for (ci = 0; ci < format->get_num_vectors(); ci++) { - qpGeomVertexRewriter data(new_data, format->get_vector(ci)); - - while (!data.is_at_end()) { - const LVector3f &vector = data.get_data3f(); - data.set_data3f(normalize(vector * mat)); - } - } -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::check_valid -// Access: Published -// Description: Verifies that the all of the primitives within the -// geom reference vertices that actually exist within -// the geom's GeomVertexData. Returns true if the geom -// appears to be valid, false otherwise. -//////////////////////////////////////////////////////////////////// -bool qpGeom:: -check_valid() const { - CDReader cdata(_cycler); - - Primitives::const_iterator pi; - for (pi = cdata->_primitives.begin(); - pi != cdata->_primitives.end(); - ++pi) { - if (!(*pi)->check_valid(cdata->_data)) { - return false; - } - } - - return true; -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::output -// Access: Published -// Description: -//////////////////////////////////////////////////////////////////// -void qpGeom:: -output(ostream &out) const { - CDReader cdata(_cycler); - - // Get a list of the primitive types contained within this object. - int num_faces = 0; - pset types; - Primitives::const_iterator pi; - for (pi = cdata->_primitives.begin(); - pi != cdata->_primitives.end(); - ++pi) { - num_faces += (*pi)->get_num_faces(); - types.insert((*pi)->get_type()); - } - - out << "Geom ["; - pset::iterator ti; - for (ti = types.begin(); ti != types.end(); ++ti) { - out << " " << (*ti); - } - out << " ], " << num_faces << " faces"; -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::write -// Access: Published -// Description: -//////////////////////////////////////////////////////////////////// -void qpGeom:: -write(ostream &out, int indent_level) const { - CDReader cdata(_cycler); - - // Get a list of the primitive types contained within this object. - Primitives::const_iterator pi; - for (pi = cdata->_primitives.begin(); - pi != cdata->_primitives.end(); - ++pi) { - (*pi)->write(out, indent_level); - } -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::clear_cache -// Access: Published -// Description: Removes all of the previously-cached results of -// munge_geom(). -//////////////////////////////////////////////////////////////////// -void qpGeom:: -clear_cache() { - // Probably we shouldn't do anything at all here unless we are - // running in pipeline stage 0. - CData *cdata = CDWriter(_cycler); - for (Cache::iterator ci = cdata->_cache.begin(); - ci != cdata->_cache.end(); - ++ci) { - CacheEntry *entry = (*ci); - entry->erase(); - } - cdata->_cache.clear(); -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::draw -// Access: Public -// Description: Actually draws the Geom with the indicated GSG, using -// the indicated vertex data (which might have been -// pre-munged to support the GSG's needs). -//////////////////////////////////////////////////////////////////// -void qpGeom:: -draw(GraphicsStateGuardianBase *gsg, const qpGeomMunger *munger, - const qpGeomVertexData *vertex_data) const { -#ifdef DO_PIPELINING - // Make sure the usage_hint is already updated before we start to - // draw, so we don't end up with a circular lock if the GSG asks us - // to update this while we're holding the read lock. - { - CDReader cdata(_cycler); - if (!cdata->_got_usage_hint) { - CDWriter cdataw(((qpGeom *)this)->_cycler, cdata); - ((qpGeom *)this)->reset_usage_hint(cdataw); - } - } - // TODO: fix up the race condition between this line and the next. - // Maybe CDWriter's elevate-to-write should return the read lock to - // its original locked state when it's done. -#endif // DO_PIPELINING - - CDReader cdata(_cycler); - - if (gsg->begin_draw_primitives(this, munger, vertex_data)) { - Primitives::const_iterator pi; - for (pi = cdata->_primitives.begin(); - pi != cdata->_primitives.end(); - ++pi) { - const qpGeomPrimitive *primitive = (*pi); - if (primitive->get_num_vertices() != 0) { - (*pi)->draw(gsg); - } - } - gsg->end_draw_primitives(); - } -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::calc_tight_bounds -// Access: Public, Virtual -// Description: Expands min_point and max_point to include all of the -// vertices in the Geom, if any. found_any is set true -// if any points are found. It is the caller's -// responsibility to initialize min_point, max_point, -// and found_any before calling this function. -//////////////////////////////////////////////////////////////////// -void qpGeom:: -calc_tight_bounds(LPoint3f &min_point, LPoint3f &max_point, - bool &found_any, - const qpGeomVertexData *vertex_data, - bool got_mat, const LMatrix4f &mat) const { - - CDReader cdata(_cycler); - - Primitives::const_iterator pi; - for (pi = cdata->_primitives.begin(); - pi != cdata->_primitives.end(); - ++pi) { - (*pi)->calc_tight_bounds(min_point, max_point, found_any, vertex_data, - got_mat, mat); - } -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::get_next_modified -// Access: Public, Static -// Description: Returns a monotonically increasing sequence. Each -// time this is called, a new sequence number is -// returned, higher than the previous value. -// -// This is used to ensure that -// GeomVertexArrayData::get_modified() and -// GeomPrimitive::get_modified() update from the same -// space, so that Geom::get_modified() returns a -// meaningful value. -//////////////////////////////////////////////////////////////////// -UpdateSeq qpGeom:: -get_next_modified() { - ++_next_modified; - return _next_modified; -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::recompute_bound -// Access: Protected, Virtual -// Description: Recomputes the dynamic bounding volume for this Geom. -// This includes all of the vertices. -//////////////////////////////////////////////////////////////////// -BoundingVolume *qpGeom:: -recompute_bound() { - // First, get ourselves a fresh, empty bounding volume. - BoundingVolume *bound = BoundedObject::recompute_bound(); - nassertr(bound != (BoundingVolume*)0L, bound); - - GeometricBoundingVolume *gbv = DCAST(GeometricBoundingVolume, bound); - - // Now actually compute the bounding volume. We do this by using - // calc_tight_bounds to determine our minmax first. - LPoint3f points[2]; - bool found_any = false; - calc_tight_bounds(points[0], points[1], found_any, get_vertex_data(), - false, LMatrix4f::ident_mat()); - if (found_any) { - // Then we put the bounding volume around both of those points. - // Technically, we should put it around the eight points at the - // corners of the rectangular solid, but we happen to know that - // the two diagonally opposite points is good enough to define any - // of our bound volume types. - - const LPoint3f *points_begin = &points[0]; - const LPoint3f *points_end = points_begin + 2; - gbv->around(points_begin, points_end); - } - - return bound; -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::check_will_be_valid -// Access: Private -// Description: Verifies that the all of the primitives within the -// geom reference vertices that actually exist within -// the indicated GeomVertexData (presumably in -// preparation for assigning the geom to use this data). -// Returns true if the data appears to be valid, false -// otherwise. -//////////////////////////////////////////////////////////////////// -bool qpGeom:: -check_will_be_valid(const qpGeomVertexData *vertex_data) const { - CDReader cdata(_cycler); - - Primitives::const_iterator pi; - for (pi = cdata->_primitives.begin(); - pi != cdata->_primitives.end(); - ++pi) { - if (!(*pi)->check_valid(vertex_data)) { - return false; - } - } - - return true; -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::reset_usage_hint -// Access: Private -// Description: Recomputes the minimum usage_hint. -//////////////////////////////////////////////////////////////////// -void qpGeom:: -reset_usage_hint(qpGeom::CDWriter &cdata) { - cdata->_usage_hint = UH_unspecified; - Primitives::const_iterator pi; - for (pi = cdata->_primitives.begin(); - pi != cdata->_primitives.end(); - ++pi) { - cdata->_usage_hint = min(cdata->_usage_hint, (*pi)->get_usage_hint()); - } - cdata->_got_usage_hint = true; -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::reset_geom_rendering -// Access: Private -// Description: Rederives the _geom_rendering member. -//////////////////////////////////////////////////////////////////// -void qpGeom:: -reset_geom_rendering(qpGeom::CDWriter &cdata) { - cdata->_geom_rendering = 0; - Primitives::const_iterator pi; - for (pi = cdata->_primitives.begin(); - pi != cdata->_primitives.end(); - ++pi) { - cdata->_geom_rendering |= (*pi)->get_geom_rendering(); - } - - if ((cdata->_geom_rendering & GR_point) != 0) { - if (cdata->_data->has_column(InternalName::get_size())) { - cdata->_geom_rendering |= GR_per_point_size; - } - if (cdata->_data->has_column(InternalName::get_aspect_ratio())) { - cdata->_geom_rendering |= GR_point_aspect_ratio; - } - if (cdata->_data->has_column(InternalName::get_rotate())) { - cdata->_geom_rendering |= GR_point_rotate; - } - } - - switch (get_shade_model()) { - case SM_flat_first_vertex: - cdata->_geom_rendering |= GR_flat_first_vertex; - break; - - case SM_flat_last_vertex: - cdata->_geom_rendering |= GR_flat_last_vertex; - break; - - default: - break; - } -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::register_with_read_factory -// Access: Public, Static -// Description: Tells the BamReader how to create objects of type -// qpGeom. -//////////////////////////////////////////////////////////////////// -void qpGeom:: -register_with_read_factory() { - BamReader::get_factory()->register_factory(get_class_type(), make_from_bam); -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::write_datagram -// Access: Public, Virtual -// Description: Writes the contents of this object to the datagram -// for shipping out to a Bam file. -//////////////////////////////////////////////////////////////////// -void qpGeom:: -write_datagram(BamWriter *manager, Datagram &dg) { - TypedWritable::write_datagram(manager, dg); - - manager->write_cdata(dg, _cycler); -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::make_from_bam -// Access: Protected, Static -// Description: This function is called by the BamReader's factory -// when a new object of type qpGeom is encountered -// in the Bam file. It should create the qpGeom -// and extract its information from the file. -//////////////////////////////////////////////////////////////////// -TypedWritable *qpGeom:: -make_from_bam(const FactoryParams ¶ms) { - qpGeom *object = new qpGeom; - DatagramIterator scan; - BamReader *manager; - - parse_params(params, scan, manager); - object->fillin(scan, manager); - manager->register_finalize(object); - - return object; -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::finalize -// Access: Public, Virtual -// Description: Called by the BamReader to perform any final actions -// needed for setting up the object after all objects -// have been read and all pointers have been completed. -//////////////////////////////////////////////////////////////////// -void qpGeom:: -finalize(BamReader *manager) { - CDWriter cdata(_cycler); - - // Make sure our GeomVertexData is finalized first. This may result - // in the data getting finalized multiple times, but it doesn't mind - // that. - if (cdata->_data != (qpGeomVertexData *)NULL) { - cdata->_data->finalize(manager); - } - - reset_geom_rendering(cdata); -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::fillin -// Access: Protected -// Description: This internal function is called by make_from_bam to -// read in all of the relevant data from the BamFile for -// the new qpGeom. -//////////////////////////////////////////////////////////////////// -void qpGeom:: -fillin(DatagramIterator &scan, BamReader *manager) { - TypedWritable::fillin(scan, manager); - - manager->read_cdata(scan, _cycler); -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::CacheEntry::Destructor -// Access: Public, Virtual -// Description: -//////////////////////////////////////////////////////////////////// -qpGeom::CacheEntry:: -~CacheEntry() { - if (_geom_result != _source) { - unref_delete(_geom_result); - } -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::CacheEntry::evict_callback -// Access: Public, Virtual -// Description: Called when the entry is evicted from the cache, this -// should clean up the owning object appropriately. -//////////////////////////////////////////////////////////////////// -void qpGeom::CacheEntry:: -evict_callback() { - // We have to operate on stage 0 of the pipeline, since that's where - // the cache really counts. Because of the multistage pipeline, we - // might not actually have a cache entry there (it might have been - // added to stage 1 instead). No big deal if we don't. - CData *cdata = _source->_cycler.write_stage(0); - Cache::iterator ci = cdata->_cache.find(this); - if (ci != cdata->_cache.end()) { - cdata->_cache.erase(ci); - } - _source->_cycler.release_write_stage(0, cdata); -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::CacheEntry::output -// Access: Public, Virtual -// Description: -//////////////////////////////////////////////////////////////////// -void qpGeom::CacheEntry:: -output(ostream &out) const { - out << "geom " << (void *)_source << ", " - << (const void *)_modifier; -} - - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::CData::make_copy -// Access: Public, Virtual -// Description: -//////////////////////////////////////////////////////////////////// -CycleData *qpGeom::CData:: -make_copy() const { - return new CData(*this); -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::CData::write_datagram -// Access: Public, Virtual -// Description: Writes the contents of this object to the datagram -// for shipping out to a Bam file. -//////////////////////////////////////////////////////////////////// -void qpGeom::CData:: -write_datagram(BamWriter *manager, Datagram &dg) const { - manager->write_pointer(dg, _data); - - dg.add_uint16(_primitives.size()); - Primitives::const_iterator pi; - for (pi = _primitives.begin(); pi != _primitives.end(); ++pi) { - manager->write_pointer(dg, *pi); - } - - dg.add_uint8(_primitive_type); - dg.add_uint8(_shade_model); - - // Actually, we shouldn't bother writing out _geom_rendering; we'll - // just throw it away anyway. - dg.add_uint16(_geom_rendering); -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::CData::complete_pointers -// Access: Public, Virtual -// Description: Receives an array of pointers, one for each time -// manager->read_pointer() was called in fillin(). -// Returns the number of pointers processed. -//////////////////////////////////////////////////////////////////// -int qpGeom::CData:: -complete_pointers(TypedWritable **p_list, BamReader *manager) { - int pi = CycleData::complete_pointers(p_list, manager); - - _data = DCAST(qpGeomVertexData, p_list[pi++]); - - Primitives::iterator pri; - for (pri = _primitives.begin(); pri != _primitives.end(); ++pri) { - (*pri) = DCAST(qpGeomPrimitive, p_list[pi++]); - } - - return pi; -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeom::CData::fillin -// Access: Public, Virtual -// Description: This internal function is called by make_from_bam to -// read in all of the relevant data from the BamFile for -// the new qpGeom. -//////////////////////////////////////////////////////////////////// -void qpGeom::CData:: -fillin(DatagramIterator &scan, BamReader *manager) { - manager->read_pointer(scan); - - int num_primitives = scan.get_uint16(); - _primitives.reserve(num_primitives); - for (int i = 0; i < num_primitives; ++i) { - manager->read_pointer(scan); - _primitives.push_back(NULL); - } - - _primitive_type = (PrimitiveType)scan.get_uint8(); - _shade_model = (ShadeModel)scan.get_uint8(); - - // To be removed: we no longer read _geom_rendering from the bam - // file; instead, we rederive it in finalize(). - scan.get_uint16(); - - _got_usage_hint = false; - _modified = qpGeom::get_next_modified(); -} diff --git a/panda/src/gobj/qpgeom.h b/panda/src/gobj/qpgeom.h deleted file mode 100644 index 89dfe0b7ca..0000000000 --- a/panda/src/gobj/qpgeom.h +++ /dev/null @@ -1,234 +0,0 @@ -// Filename: qpgeom.h -// Created by: drose (06Mar05) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef qpGEOM_H -#define qpGEOM_H - -#include "pandabase.h" -#include "typedWritableReferenceCount.h" -#include "boundedObject.h" -#include "cycleData.h" -#include "cycleDataReader.h" -#include "cycleDataWriter.h" -#include "pipelineCycler.h" -#include "qpgeomVertexData.h" -#include "qpgeomPrimitive.h" -#include "qpgeomMunger.h" -#include "qpgeomEnums.h" -#include "qpgeomCacheEntry.h" -#include "updateSeq.h" -#include "pointerTo.h" -#include "geom.h" -#include "indirectLess.h" -#include "pset.h" - -//////////////////////////////////////////////////////////////////// -// Class : qpGeom -// Description : A container for geometry primitives. This class -// associates one or more GeomPrimitive objects with a -// table of vertices defined by a GeomVertexData object. -// All of the primitives stored in a particular Geom are -// drawn from the same set of vertices (each primitive -// uses a subset of all of the vertices in the table), -// and all of them must be rendered at the same time, in -// the same graphics state. -// -// This is part of the experimental Geom rewrite. -//////////////////////////////////////////////////////////////////// -class EXPCL_PANDA qpGeom /* : public TypedWritableReferenceCount, public BoundedObject */ -// We temporarily inherit from Geom, merely so we can store this -// pointer where a Geom should go, while we have both implementations -// in the codebase. We pick up some additional cruft from Geom that -// we're not really using. - : public Geom, - public qpGeomEnums -{ -PUBLISHED: - qpGeom(); - qpGeom(const qpGeom ©); - void operator = (const qpGeom ©); - virtual ~qpGeom(); - - // Temporary. - virtual Geom *make_copy() const; - virtual bool is_qpgeom() const; - - INLINE PrimitiveType get_primitive_type() const; - INLINE ShadeModel get_shade_model() const; - INLINE int get_geom_rendering() const; - - INLINE UsageHint get_usage_hint() const; - void set_usage_hint(UsageHint usage_hint); - - INLINE CPT(qpGeomVertexData) get_vertex_data() const; - PT(qpGeomVertexData) modify_vertex_data(); - void set_vertex_data(const qpGeomVertexData *data); - void offset_vertices(const qpGeomVertexData *data, int offset); - int make_nonindexed(bool composite_only); - - INLINE int get_num_primitives() const; - INLINE const qpGeomPrimitive *get_primitive(int i) const; - INLINE qpGeomPrimitive *modify_primitive(int i); - void set_primitive(int i, const qpGeomPrimitive *primitive); - void add_primitive(const qpGeomPrimitive *primitive); - void remove_primitive(int i); - void clear_primitives(); - - INLINE CPT(qpGeom) decompose() const; - INLINE CPT(qpGeom) rotate() const; - INLINE CPT(qpGeom) unify() const; - - void decompose_in_place(); - void rotate_in_place(); - void unify_in_place(); - - bool copy_primitives_from(const qpGeom *other); - - int get_num_bytes() const; - INLINE UpdateSeq get_modified() const; - - // Temporarily virtual. - virtual void transform_vertices(const LMatrix4f &mat); - - // Temporarily virtual. - virtual bool check_valid() const; - - void output(ostream &out) const; - void write(ostream &out, int indent_level = 0) const; - - void clear_cache(); - -public: - void draw(GraphicsStateGuardianBase *gsg, - const qpGeomMunger *munger, - const qpGeomVertexData *vertex_data) const; - - void calc_tight_bounds(LPoint3f &min_point, LPoint3f &max_point, - bool &found_any, - const qpGeomVertexData *vertex_data, - bool got_mat, const LMatrix4f &mat) const; - - static UpdateSeq get_next_modified(); - -protected: - virtual BoundingVolume *recompute_bound(); - -private: - bool check_will_be_valid(const qpGeomVertexData *vertex_data) const; - -private: - typedef pvector Primitives; - - // We have to use reference-counting pointers here instead of having - // explicit cleanup in the GeomVertexFormat destructor, because the - // cache needs to be stored in the CycleData, which makes accurate - // cleanup more difficult. We use the GeomCacheManager class to - // avoid cache bloat. - class CacheEntry : public qpGeomCacheEntry { - public: - INLINE CacheEntry(const qpGeomVertexData *source_data, - const qpGeomMunger *modifier); - INLINE CacheEntry(qpGeom *source, - const qpGeomVertexData *source_data, - const qpGeomMunger *modifier, - const qpGeom *geom_result, - const qpGeomVertexData *data_result); - virtual ~CacheEntry(); - INLINE bool operator < (const CacheEntry &other) const; - - virtual void evict_callback(); - virtual void output(ostream &out) const; - - qpGeom *_source; - CPT(qpGeomVertexData) _source_data; - CPT(qpGeomMunger) _modifier; - const qpGeom *_geom_result; // ref-counted if not same as _source - CPT(qpGeomVertexData) _data_result; - }; - typedef pset > Cache; - - // This is the data that must be cycled between pipeline stages. - class EXPCL_PANDA CData : public CycleData { - public: - INLINE CData(); - INLINE CData(const CData ©); - virtual CycleData *make_copy() const; - virtual void write_datagram(BamWriter *manager, Datagram &dg) const; - virtual int complete_pointers(TypedWritable **plist, BamReader *manager); - virtual void fillin(DatagramIterator &scan, BamReader *manager); - - PT(qpGeomVertexData) _data; - Primitives _primitives; - PrimitiveType _primitive_type; - ShadeModel _shade_model; - int _geom_rendering; - UsageHint _usage_hint; - bool _got_usage_hint; - UpdateSeq _modified; - Cache _cache; - }; - - PipelineCycler _cycler; - typedef CycleDataReader CDReader; - typedef CycleDataWriter CDWriter; - - void reset_usage_hint(CDWriter &cdata); - void reset_geom_rendering(CDWriter &cdata); - - static UpdateSeq _next_modified; - -public: - static void register_with_read_factory(); - virtual void write_datagram(BamWriter *manager, Datagram &dg); - - virtual void finalize(BamReader *manager); - -protected: - static TypedWritable *make_from_bam(const FactoryParams ¶ms); - void fillin(DatagramIterator &scan, BamReader *manager); - -public: - static TypeHandle get_class_type() { - return _type_handle; - } - static void init_type() { - /*TypedWritableReferenceCount::init_type(); - BoundedObject::init_type();*/ - Geom::init_type(); - register_type(_type_handle, "qpGeom", - Geom::get_class_type() - /*TypedWritableReferenceCount::get_class_type(), - BoundedObject::get_class_type()*/); - } - virtual TypeHandle get_type() const { - return get_class_type(); - } - virtual TypeHandle force_init_type() {init_type(); return get_class_type();} - -private: - static TypeHandle _type_handle; - - friend class CacheEntry; - friend class qpGeomMunger; -}; - -INLINE ostream &operator << (ostream &out, const qpGeom &obj); - -#include "qpgeom.I" - -#endif diff --git a/panda/src/gobj/qpgeomPrimitive.N b/panda/src/gobj/qpgeomPrimitive.N deleted file mode 100644 index c602bc87bf..0000000000 --- a/panda/src/gobj/qpgeomPrimitive.N +++ /dev/null @@ -1,2 +0,0 @@ -forcetype PointerToArray< unsigned short int> -forcetype PointerToBase>> diff --git a/panda/src/gobj/sliderTable.h b/panda/src/gobj/sliderTable.h index d13672b0ae..a234b33556 100644 --- a/panda/src/gobj/sliderTable.h +++ b/panda/src/gobj/sliderTable.h @@ -42,8 +42,6 @@ // Also, it is only used when animating vertices on the // CPU, since GPU's don't support morphs at this point // in time. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// class EXPCL_PANDA SliderTable : public TypedWritableReferenceCount { PUBLISHED: diff --git a/panda/src/gobj/texture.cxx b/panda/src/gobj/texture.cxx index 3e0859e74f..2544ea1517 100644 --- a/panda/src/gobj/texture.cxx +++ b/panda/src/gobj/texture.cxx @@ -1314,15 +1314,13 @@ register_with_read_factory() { //////////////////////////////////////////////////////////////////// TypedWritable *Texture:: make_Texture(const FactoryParams ¶ms) { - //The process of making a texture is slightly - //different than making other Writable objects. - //That is because all creation of Textures should - //be done through calls to TexturePool, which ensures - //that any loads of the same Texture, refer to the - //same memory + // The process of making a texture is slightly different than making + // other TypedWritable objects. That is because all creation of + // Textures should be done through calls to TexturePool, which + // ensures that any loads of the same filename refer to the same + // memory. DatagramIterator scan; BamReader *manager; - bool has_rawdata = false; parse_params(params, scan, manager); @@ -1331,27 +1329,14 @@ make_Texture(const FactoryParams ¶ms) { Filename filename = scan.get_string(); Filename alpha_filename = scan.get_string(); - int primary_file_num_channels = 0; - int alpha_file_channel = 0; - - if (manager->get_file_minor_ver() == 2) { - // We temporarily had a version that stored the number of channels - // here. - primary_file_num_channels = scan.get_uint8(); - - } else if (manager->get_file_minor_ver() >= 3) { - primary_file_num_channels = scan.get_uint8(); - alpha_file_channel = scan.get_uint8(); - } - - // from minor version 5, read the rawdata mode, else carry on - if (manager->get_file_minor_ver() >= 5) { - has_rawdata = scan.get_bool(); - } + int primary_file_num_channels = scan.get_uint8(); + int alpha_file_channel = scan.get_uint8(); + bool has_rawdata = scan.get_bool(); Texture *me = NULL; if (has_rawdata) { - // then create a Texture and don't load from the file + // If the raw image data is included, then just create a Texture + // and don't load from the file. me = new Texture; } else { @@ -1398,63 +1383,43 @@ void Texture:: fillin(DatagramIterator &scan, BamReader *manager, bool has_rawdata) { // We have already read in the filenames; don't read them again. - if (manager->get_file_minor_ver() < 17) { - _texture_type = TT_2d_texture; - } else { - _texture_type = (TextureType)scan.get_uint8(); - } - + _texture_type = (TextureType)scan.get_uint8(); _wrap_u = (WrapMode)scan.get_uint8(); _wrap_v = (WrapMode)scan.get_uint8(); - if (manager->get_file_minor_ver() < 17) { - _wrap_w = WM_repeat; - } else { - _wrap_w = (WrapMode)scan.get_uint8(); - } + _wrap_w = (WrapMode)scan.get_uint8(); _minfilter = (FilterType)scan.get_uint8(); _magfilter = (FilterType)scan.get_uint8(); _anisotropic_degree = scan.get_int16(); - bool has_pbuffer = true; - if (manager->get_file_minor_ver() < 17) { - has_pbuffer = scan.get_bool(); + Format format = (Format)scan.get_uint8(); + int num_components = scan.get_uint8(); + + if (num_components == get_num_components()) { + // Only reset the format if the number of components hasn't + // changed, since if the number of components has changed our + // texture no longer matches what it was when the bam was + // written. + set_format(format); } - if (has_pbuffer) { - Format format = (Format)scan.get_uint8(); - int num_channels = -1; - num_channels = scan.get_uint8(); - - if (num_channels == get_num_components()) { - // Only reset the format if the number of components hasn't - // changed, since if the number of components has changed our - // texture no longer matches what it was when the bam was - // written. - set_format(format); - } + + if (has_rawdata) { + // In the rawdata case, we must always set the format. + _format = format; + _num_components = num_components; + _x_size = scan.get_uint32(); + _y_size = scan.get_uint32(); + _z_size = scan.get_uint32(); + _component_type = (ComponentType)scan.get_uint8(); + _component_width = scan.get_uint8(); + _loaded_from_disk = false; - if (has_rawdata) { - // In the rawdata case, we must always set the format. - _format = format; - _x_size = scan.get_uint32(); - _y_size = scan.get_uint32(); - if (manager->get_file_minor_ver() < 17) { - _z_size = 1; - } else { - _z_size = scan.get_uint32(); - } - _component_type = (ComponentType)scan.get_uint8(); - _num_components = scan.get_uint8(); - _component_width = scan.get_uint8(); - _loaded_from_disk = false; - - PN_uint32 u_size = scan.get_uint32(); - - // fill the _image buffer with image data - string temp_buff = scan.extract_bytes(u_size); - _image = PTA_uchar::empty_array((int) u_size); - for (PN_uint32 u_idx=0; u_idx < u_size; ++u_idx) { - _image[(int)u_idx] = (uchar) temp_buff[u_idx]; - } + PN_uint32 u_size = scan.get_uint32(); + + // fill the _image buffer with image data + string temp_buff = scan.extract_bytes(u_size); + _image = PTA_uchar::empty_array((int) u_size); + for (PN_uint32 u_idx=0; u_idx < u_size; ++u_idx) { + _image[(int)u_idx] = (uchar) temp_buff[u_idx]; } } } @@ -1544,7 +1509,6 @@ write_datagram(BamWriter *manager, Datagram &me) { me.add_uint32(_y_size); me.add_uint32(_z_size); me.add_uint8(_component_type); - me.add_uint8(_num_components); me.add_uint8(_component_width); me.add_uint32(_image.size()); diff --git a/panda/src/gobj/texture.h b/panda/src/gobj/texture.h index 11e985e1f4..6c7fc71d81 100644 --- a/panda/src/gobj/texture.h +++ b/panda/src/gobj/texture.h @@ -319,7 +319,7 @@ private: // Each PGO conversely keeps a list (a set) of all the Textures that // have been prepared there. When either destructs, it removes // itself from the other's list. - typedef pmap Contexts; + typedef pmap Contexts; Contexts _contexts; // This value represents the intersection of all the dirty flags of diff --git a/panda/src/gobj/textureStage.cxx b/panda/src/gobj/textureStage.cxx index 435aebdf82..86703ec469 100755 --- a/panda/src/gobj/textureStage.cxx +++ b/panda/src/gobj/textureStage.cxx @@ -279,13 +279,8 @@ fillin(DatagramIterator &scan, BamReader *manager) { _mode = (TextureStage::Mode) scan.get_uint8(); _color.read_datagram(scan); - if (manager->get_file_minor_ver() >= 16) { - _rgb_scale = scan.get_uint8(); - _alpha_scale = scan.get_uint8(); - } else { - _rgb_scale = 1; - _alpha_scale = 1; - } + _rgb_scale = scan.get_uint8(); + _alpha_scale = scan.get_uint8(); _combine_rgb_mode = (TextureStage::CombineMode) scan.get_uint8(); _num_combine_rgb_operands = scan.get_uint8(); diff --git a/panda/src/gobj/transformBlend.h b/panda/src/gobj/transformBlend.h index fda1000dba..08baa1d465 100644 --- a/panda/src/gobj/transformBlend.h +++ b/panda/src/gobj/transformBlend.h @@ -35,8 +35,6 @@ // TransformBlendTable. It represents a unique // combination of VertexTransform pointers and blend // amounts. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// class EXPCL_PANDA TransformBlend { PUBLISHED: diff --git a/panda/src/gobj/transformBlendTable.h b/panda/src/gobj/transformBlendTable.h index 8ad3ae66b1..4913c4a29d 100644 --- a/panda/src/gobj/transformBlendTable.h +++ b/panda/src/gobj/transformBlendTable.h @@ -46,8 +46,6 @@ // compute its dynamic vertices on the CPU. See // TransformTable for one set up to compute its // dynamic vertices on the graphics card. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// class EXPCL_PANDA TransformBlendTable : public TypedWritableReferenceCount { PUBLISHED: diff --git a/panda/src/gobj/transformTable.h b/panda/src/gobj/transformTable.h index 855be8974c..37d987d786 100644 --- a/panda/src/gobj/transformTable.h +++ b/panda/src/gobj/transformTable.h @@ -41,8 +41,6 @@ // compute its dynamic vertices on the graphics card. // See TransformBlendTable for one set up to compute // its dynamic vertices on the CPU. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// class EXPCL_PANDA TransformTable : public TypedWritableReferenceCount { PUBLISHED: diff --git a/panda/src/gobj/userVertexSlider.h b/panda/src/gobj/userVertexSlider.h index 61cd175ce5..4b44114e6d 100644 --- a/panda/src/gobj/userVertexSlider.h +++ b/panda/src/gobj/userVertexSlider.h @@ -32,8 +32,6 @@ // allows the user to specify any arbitrary slider // valie he likes. This is rarely used except for // testing. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// class EXPCL_PANDA UserVertexSlider : public VertexSlider { PUBLISHED: diff --git a/panda/src/gobj/userVertexTransform.h b/panda/src/gobj/userVertexTransform.h index 1b9e013f6a..deee1dce38 100644 --- a/panda/src/gobj/userVertexTransform.h +++ b/panda/src/gobj/userVertexTransform.h @@ -32,8 +32,6 @@ // allows the user to specify any arbitrary transform // matrix he likes. This is rarely used except for // testing. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// class EXPCL_PANDA UserVertexTransform : public VertexTransform { PUBLISHED: diff --git a/panda/src/gobj/vertexBufferContext.I b/panda/src/gobj/vertexBufferContext.I index 34c8a84f28..c60cf88dcc 100644 --- a/panda/src/gobj/vertexBufferContext.I +++ b/panda/src/gobj/vertexBufferContext.I @@ -23,7 +23,7 @@ // Description: //////////////////////////////////////////////////////////////////// INLINE VertexBufferContext:: -VertexBufferContext(qpGeomVertexArrayData *data) : +VertexBufferContext(GeomVertexArrayData *data) : _data(data), // Initially, the number of bytes is zero, until the data has been // loaded (and mark_loaded() is called). @@ -37,7 +37,7 @@ VertexBufferContext(qpGeomVertexArrayData *data) : // Description: Returns the pointer to the client-side array data // object. //////////////////////////////////////////////////////////////////// -INLINE qpGeomVertexArrayData *VertexBufferContext:: +INLINE GeomVertexArrayData *VertexBufferContext:: get_data() const { return _data; } diff --git a/panda/src/gobj/vertexBufferContext.h b/panda/src/gobj/vertexBufferContext.h index 851fa1ef5a..f0df684c8c 100644 --- a/panda/src/gobj/vertexBufferContext.h +++ b/panda/src/gobj/vertexBufferContext.h @@ -23,7 +23,7 @@ #include "savedContext.h" #include "updateSeq.h" -#include "qpgeomVertexArrayData.h" +#include "geomVertexArrayData.h" //////////////////////////////////////////////////////////////////// // Class : VertexBufferContext @@ -38,9 +38,9 @@ //////////////////////////////////////////////////////////////////// class EXPCL_PANDA VertexBufferContext : public SavedContext { public: - INLINE VertexBufferContext(qpGeomVertexArrayData *data); + INLINE VertexBufferContext(GeomVertexArrayData *data); - INLINE qpGeomVertexArrayData *get_data() const; + INLINE GeomVertexArrayData *get_data() const; INLINE int get_data_size_bytes() const; INLINE bool changed_size() const; @@ -51,13 +51,13 @@ public: INLINE void mark_loaded(); private: - // This cannot be a PT(qpGeomVertexArrayData), because the data and + // This cannot be a PT(GeomVertexArrayData), because the data and // the GSG both own their VertexBufferContexts! That would create a // circular reference count. - qpGeomVertexArrayData *_data; + GeomVertexArrayData *_data; UpdateSeq _modified; int _data_size_bytes; - qpGeomEnums::UsageHint _usage_hint; + GeomEnums::UsageHint _usage_hint; public: static TypeHandle get_class_type() { diff --git a/panda/src/gobj/vertexSlider.h b/panda/src/gobj/vertexSlider.h index 8d6fccf13e..14e85a74c8 100644 --- a/panda/src/gobj/vertexSlider.h +++ b/panda/src/gobj/vertexSlider.h @@ -41,8 +41,6 @@ class SliderTable; // It is similar to VertexTransform, which keeps a full // 4x4 transform matrix, but the VertexSlider only keeps // a single float value. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// class EXPCL_PANDA VertexSlider : public TypedWritableReferenceCount { PUBLISHED: diff --git a/panda/src/gobj/vertexTransform.h b/panda/src/gobj/vertexTransform.h index 57bfe2d1f9..bbf6c45dc8 100644 --- a/panda/src/gobj/vertexTransform.h +++ b/panda/src/gobj/vertexTransform.h @@ -39,8 +39,6 @@ class TransformTable; // This is used to implement soft-skinned and animated // vertices. Derived classes will define how the // transform is actually computed. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// class EXPCL_PANDA VertexTransform : public TypedWritableReferenceCount { PUBLISHED: diff --git a/panda/src/grutil/cardMaker.cxx b/panda/src/grutil/cardMaker.cxx index 7a7c1172e2..6cd8a2c74d 100644 --- a/panda/src/grutil/cardMaker.cxx +++ b/panda/src/grutil/cardMaker.cxx @@ -18,13 +18,12 @@ #include "cardMaker.h" #include "geomNode.h" -#include "geomTristrip.h" #include "transformState.h" #include "colorAttrib.h" #include "sceneGraphReducer.h" -#include "qpgeom.h" -#include "qpgeomTristrips.h" -#include "qpgeomVertexWriter.h" +#include "geom.h" +#include "geomTristrips.h" +#include "geomVertexWriter.h" //////////////////////////////////////////////////////////////////// @@ -64,79 +63,46 @@ generate() { float bottom = _frame[2]; float top = _frame[3]; - if (use_qpgeom) { - CPT(qpGeomVertexFormat) format; - if (_has_uvs) { - format = qpGeomVertexFormat::get_v3cpt2(); - } else { - format = qpGeomVertexFormat::get_v3cp(); - } - - PT(qpGeomVertexData) vdata = new qpGeomVertexData - ("card", format, qpGeom::UH_static); - qpGeomVertexWriter vertex(vdata, InternalName::get_vertex()); - qpGeomVertexWriter color(vdata, InternalName::get_color()); - - vertex.add_data3f(Vertexf::rfu(left, 0.0f, top)); - vertex.add_data3f(Vertexf::rfu(left, 0.0f, bottom)); - vertex.add_data3f(Vertexf::rfu(right, 0.0f, top)); - vertex.add_data3f(Vertexf::rfu(right, 0.0f, bottom)); - - color.add_data4f(_color); - color.add_data4f(_color); - color.add_data4f(_color); - color.add_data4f(_color); - - if (_has_uvs) { - qpGeomVertexWriter texcoord(vdata, InternalName::get_texcoord()); - texcoord.add_data2f(_ll[0], _ur[1]); - texcoord.add_data2f(_ll[0], _ll[1]); - texcoord.add_data2f(_ur[0], _ur[1]); - texcoord.add_data2f(_ur[0], _ll[1]); - } - - PT(qpGeomTristrips) strip = new qpGeomTristrips(qpGeom::UH_static); - strip->add_next_vertices(4); - strip->close_primitive(); - - PT(qpGeom) geom = new qpGeom; - geom->set_vertex_data(vdata); - geom->add_primitive(strip); - - gnode->add_geom(geom); - + CPT(GeomVertexFormat) format; + if (_has_uvs) { + format = GeomVertexFormat::get_v3cpt2(); } else { - Geom *geom = new GeomTristrip; - gnode->add_geom(geom); - - PTA_int lengths = PTA_int::empty_array(0); - lengths.push_back(4); - - PTA_Vertexf verts; - verts.push_back(Vertexf::rfu(left, 0.0f, top)); - verts.push_back(Vertexf::rfu(left, 0.0f, bottom)); - verts.push_back(Vertexf::rfu(right, 0.0f, top)); - verts.push_back(Vertexf::rfu(right, 0.0f, bottom)); - - geom->set_num_prims(1); - geom->set_lengths(lengths); - - geom->set_coords(verts); - - PTA_Colorf colors; - colors.push_back(_color); - geom->set_colors(colors, G_OVERALL); - - if (_has_uvs) { - PTA_TexCoordf uvs; - uvs.push_back(TexCoordf(_ll[0], _ur[1])); - uvs.push_back(TexCoordf(_ll[0], _ll[1])); - uvs.push_back(TexCoordf(_ur[0], _ur[1])); - uvs.push_back(TexCoordf(_ur[0], _ll[1])); - geom->set_texcoords(uvs, G_PER_VERTEX); - } + format = GeomVertexFormat::get_v3cp(); } + PT(GeomVertexData) vdata = new GeomVertexData + ("card", format, Geom::UH_static); + GeomVertexWriter vertex(vdata, InternalName::get_vertex()); + GeomVertexWriter color(vdata, InternalName::get_color()); + + vertex.add_data3f(Vertexf::rfu(left, 0.0f, top)); + vertex.add_data3f(Vertexf::rfu(left, 0.0f, bottom)); + vertex.add_data3f(Vertexf::rfu(right, 0.0f, top)); + vertex.add_data3f(Vertexf::rfu(right, 0.0f, bottom)); + + color.add_data4f(_color); + color.add_data4f(_color); + color.add_data4f(_color); + color.add_data4f(_color); + + if (_has_uvs) { + GeomVertexWriter texcoord(vdata, InternalName::get_texcoord()); + texcoord.add_data2f(_ll[0], _ur[1]); + texcoord.add_data2f(_ll[0], _ll[1]); + texcoord.add_data2f(_ur[0], _ur[1]); + texcoord.add_data2f(_ur[0], _ll[1]); + } + + PT(GeomTristrips) strip = new GeomTristrips(Geom::UH_static); + strip->add_next_vertices(4); + strip->close_primitive(); + + PT(Geom) geom = new Geom; + geom->set_vertex_data(vdata); + geom->add_primitive(strip); + + gnode->add_geom(geom); + return gnode.p(); } diff --git a/panda/src/grutil/frameRateMeter.cxx b/panda/src/grutil/frameRateMeter.cxx index 6701a9d703..0ce2b47780 100644 --- a/panda/src/grutil/frameRateMeter.cxx +++ b/panda/src/grutil/frameRateMeter.cxx @@ -47,7 +47,7 @@ FrameRateMeter(const string &name) : TextNode(name) { LMatrix4f::translate_mat(LVector3f::rfu(1.0f - frame_rate_meter_side_margins * frame_rate_meter_scale, 0.0f, 1.0f - frame_rate_meter_scale))); set_card_color(0.0f, 0.0f, 0.0f, 0.4f); set_card_as_margin(frame_rate_meter_side_margins, frame_rate_meter_side_margins, 0.1f, 0.0f); - set_usage_hint(qpGeom::UH_client); + set_usage_hint(Geom::UH_client); do_update(); } diff --git a/panda/src/grutil/lineSegs.I b/panda/src/grutil/lineSegs.I index a03a577a92..f6fc5ab283 100644 --- a/panda/src/grutil/lineSegs.I +++ b/panda/src/grutil/lineSegs.I @@ -153,23 +153,10 @@ create(bool dynamic) { //////////////////////////////////////////////////////////////////// INLINE int LineSegs:: get_num_vertices() const { - return _created_verts.size(); -} - -//////////////////////////////////////////////////////////////////// -// Function: LineSegs::get_vertex -// Access: Public -// Description: Returns the nth point or vertex of the line segment -// sequence generated by the last call to create(). The -// first move_to() generates vertex 0; subsequent -// move_to() and draw_to() calls generate consecutively -// higher vertex numbers. -//////////////////////////////////////////////////////////////////// -INLINE Vertexf LineSegs:: -get_vertex(int vertex) const { - nassertr(vertex >= 0 && vertex < (int)_created_verts.size(), - Vertexf(0.0f, 0.0f, 0.0f)); - return _created_verts[vertex]; + if (_created_data == (GeomVertexData *)NULL) { + return 0; + } + return _created_data->get_num_rows(); } //////////////////////////////////////////////////////////////////// @@ -182,35 +169,8 @@ get_vertex(int vertex) const { // higher vertex numbers. //////////////////////////////////////////////////////////////////// INLINE void LineSegs:: -set_vertex(int vertex, const Vertexf &vert) { - nassertv(vertex >= 0 && vertex < (int)_created_verts.size()); - _created_verts[vertex] = vert; -} - -//////////////////////////////////////////////////////////////////// -// Function: LineSegs::set_vertex -// Access: Public -// Description: Moves the nth point or vertex of the line segment -// sequence generated by the last call to create(). The -// first move_to() generates vertex 0; subsequent -// move_to() and draw_to() calls generate consecutively -// higher vertex numbers. -//////////////////////////////////////////////////////////////////// -INLINE void LineSegs:: -set_vertex(int vertex, float x, float y, float z) { - set_vertex(vertex, Vertexf(x, y, z)); -} - -//////////////////////////////////////////////////////////////////// -// Function: LineSegs::get_vertex_color -// Access: Public -// Description: Returns the color of the nth point or vertex/ -//////////////////////////////////////////////////////////////////// -INLINE Colorf LineSegs:: -get_vertex_color(int vertex) const { - nassertr(vertex >= 0 && vertex < (int)_created_colors.size(), - Colorf(0.0f, 0.0f, 0.0f, 0.0f)); - return _created_colors[vertex]; +set_vertex(int n, float x, float y, float z) { + set_vertex(n, Vertexf(x, y, z)); } //////////////////////////////////////////////////////////////////// @@ -220,18 +180,6 @@ get_vertex_color(int vertex) const { // See set_vertex(). //////////////////////////////////////////////////////////////////// INLINE void LineSegs:: -set_vertex_color(int vertex, const Colorf &color) { - nassertv(vertex >= 0 && vertex < (int)_created_verts.size()); - _created_colors[vertex] = color; -} - -//////////////////////////////////////////////////////////////////// -// Function: LineSegs::set_vertex_color -// Access: Public -// Description: Changes the vertex color of the nth point or vertex. -// See set_vertex(). -//////////////////////////////////////////////////////////////////// -INLINE void LineSegs:: -set_vertex_color(int vertex, float r, float g, float b, float a) { - set_vertex_color(vertex, Colorf(r, g, b, a)); +set_vertex_color(int n, float r, float g, float b, float a) { + set_vertex_color(n, Colorf(r, g, b, a)); } diff --git a/panda/src/grutil/lineSegs.cxx b/panda/src/grutil/lineSegs.cxx index 5944bece19..67084039a7 100644 --- a/panda/src/grutil/lineSegs.cxx +++ b/panda/src/grutil/lineSegs.cxx @@ -19,10 +19,11 @@ #include "lineSegs.h" #include "renderState.h" #include "renderModeAttrib.h" -#include "qpgeom.h" -#include "qpgeomLinestrips.h" -#include "qpgeomPoints.h" -#include "qpgeomVertexWriter.h" +#include "geom.h" +#include "geomLinestrips.h" +#include "geomPoints.h" +#include "geomVertexReader.h" +#include "geomVertexWriter.h" //////////////////////////////////////////////////////////////////// // Function: LineSegs::Constructor @@ -118,6 +119,67 @@ is_empty() { return _list.empty(); } +//////////////////////////////////////////////////////////////////// +// Function: LineSegs::get_vertex +// Access: Public +// Description: Returns the nth point or vertex of the line segment +// sequence generated by the last call to create(). The +// first move_to() generates vertex 0; subsequent +// move_to() and draw_to() calls generate consecutively +// higher vertex numbers. +//////////////////////////////////////////////////////////////////// +Vertexf LineSegs:: +get_vertex(int n) const { + nassertr(_created_data != (GeomVertexData *)NULL, Vertexf::zero()); + GeomVertexReader vertex(_created_data, InternalName::get_vertex()); + vertex.set_row(n); + return vertex.get_data3f(); +} + +//////////////////////////////////////////////////////////////////// +// Function: LineSegs::set_vertex +// Access: Public +// Description: Moves the nth point or vertex of the line segment +// sequence generated by the last call to create(). The +// first move_to() generates vertex 0; subsequent +// move_to() and draw_to() calls generate consecutively +// higher vertex numbers. +//////////////////////////////////////////////////////////////////// +void LineSegs:: +set_vertex(int n, const Vertexf &vert) { + nassertv(_created_data != (GeomVertexData *)NULL); + GeomVertexWriter vertex(_created_data, InternalName::get_vertex()); + vertex.set_row(n); + vertex.set_data3f(vert); +} + +//////////////////////////////////////////////////////////////////// +// Function: LineSegs::get_vertex_color +// Access: Public +// Description: Returns the color of the nth point or vertex. +//////////////////////////////////////////////////////////////////// +Colorf LineSegs:: +get_vertex_color(int n) const { + nassertr(_created_data != (GeomVertexData *)NULL, Colorf::zero()); + GeomVertexReader color(_created_data, InternalName::get_color()); + color.set_row(n); + return color.get_data4f(); +} + +//////////////////////////////////////////////////////////////////// +// Function: LineSegs::set_vertex_color +// Access: Public +// Description: Changes the vertex color of the nth point or vertex. +// See set_vertex(). +//////////////////////////////////////////////////////////////////// +void LineSegs:: +set_vertex_color(int n, const Colorf &c) { + nassertv(_created_data != (GeomVertexData *)NULL); + GeomVertexWriter color(_created_data, InternalName::get_color()); + color.set_row(n); + color.set_data4f(c); +} + //////////////////////////////////////////////////////////////////// // Function: LineSegs::get_current_position // Access: Public @@ -151,136 +213,63 @@ get_current_position() { GeomNode *LineSegs:: create(GeomNode *previous, bool dynamic) { if (!_list.empty()) { - _created_verts.clear(); - _created_colors.clear(); _created_data = NULL; CPT(RenderAttrib) thick = RenderModeAttrib::make(RenderModeAttrib::M_unchanged, _thick); CPT(RenderState) state = RenderState::make(thick); - if (use_qpgeom) { - PT(qpGeomVertexData) vdata = new qpGeomVertexData - ("lineSegs", qpGeomVertexFormat::get_v3cp(), - dynamic ? qpGeom::UH_dynamic : qpGeom::UH_static); - qpGeomVertexWriter vertex(vdata, InternalName::get_vertex()); - qpGeomVertexWriter color(vdata, InternalName::get_color()); - - PT(qpGeomLinestrips) lines = new qpGeomLinestrips(qpGeom::UH_static); - PT(qpGeomPoints) points = new qpGeomPoints(qpGeom::UH_static); - - int v = 0; - LineList::const_iterator ll; - SegmentList::const_iterator sl; - - for (ll = _list.begin(); ll != _list.end(); ll++) { - const SegmentList &segs = (*ll); - - if (segs.size() < 2) { - // A segment of length 1 is just a point. - for (sl = segs.begin(); sl != segs.end(); sl++) { - points->add_vertex(v); - vertex.add_data3f((*sl)._point); - color.add_data4f((*sl)._color); - v++; - } - points->close_primitive(); - - } else { - // A segment of length 2 or more is a line segment or - // segments. - for (sl = segs.begin(); sl != segs.end(); sl++) { - lines->add_vertex(v); - vertex.add_data3f((*sl)._point); - color.add_data4f((*sl)._color); - v++; - } - lines->close_primitive(); - } - } - - if (lines->get_num_vertices() != 0) { - PT(qpGeom) geom = new qpGeom; - geom->set_vertex_data(vdata); - geom->add_primitive(lines); - previous->add_geom(geom, state); - } - if (points->get_num_vertices() != 0) { - PT(qpGeom) geom = new qpGeom; - geom->set_vertex_data(vdata); - geom->add_primitive(points); - previous->add_geom(geom, state); - } - - } else { - // One array each for the indices into these arrays for points - // and lines, and one for our line-segment lengths array. - PTA_ushort point_index; - PTA_ushort line_index; - PTA_int lengths; + PT(GeomVertexData) vdata = new GeomVertexData + ("lineSegs", GeomVertexFormat::get_v3cp(), + dynamic ? Geom::UH_dynamic : Geom::UH_static); + GeomVertexWriter vertex(vdata, InternalName::get_vertex()); + GeomVertexWriter color(vdata, InternalName::get_color()); + + PT(GeomLinestrips) lines = new GeomLinestrips(Geom::UH_static); + PT(GeomPoints) points = new GeomPoints(Geom::UH_static); + + int v = 0; + LineList::const_iterator ll; + SegmentList::const_iterator sl; + + for (ll = _list.begin(); ll != _list.end(); ll++) { + const SegmentList &segs = (*ll); - // Now fill up the arrays. - int v = 0; - LineList::const_iterator ll; - SegmentList::const_iterator sl; - - for (ll = _list.begin(); ll != _list.end(); ll++) { - const SegmentList &segs = (*ll); - - if (segs.size() < 2) { - point_index.push_back(v); - } else { - lengths.push_back(segs.size()); - } - + if (segs.size() < 2) { + // A segment of length 1 is just a point. for (sl = segs.begin(); sl != segs.end(); sl++) { - if (segs.size() >= 2) { - line_index.push_back(v); - } - _created_verts.push_back((*sl)._point); - _created_colors.push_back((*sl)._color); + points->add_vertex(v); + vertex.add_data3f((*sl)._point); + color.add_data4f((*sl)._color); v++; - nassertr(v == (int)_created_verts.size(), previous); } - } - - // Now create the lines. - if (line_index.size() > 0) { - // Create a new Geom and add the line segments. - Geom *geom; - if (line_index.size() <= 2) { - // Here's a special case: just one line segment. - GeomLine *geom_line = new GeomLine; - geom_line->set_num_prims(1); - geom = geom_line; - - } else { - // The more normal case: multiple line segments, connected - // end-to-end like a series of linestrips. - GeomLinestrip *geom_linestrip = new GeomLinestrip; - geom_linestrip->set_num_prims(lengths.size()); - geom_linestrip->set_lengths(lengths); - geom = geom_linestrip; + points->close_primitive(); + + } else { + // A segment of length 2 or more is a line segment or + // segments. + for (sl = segs.begin(); sl != segs.end(); sl++) { + lines->add_vertex(v); + vertex.add_data3f((*sl)._point); + color.add_data4f((*sl)._color); + v++; } - - geom->set_colors(_created_colors, G_PER_VERTEX, line_index); - geom->set_coords(_created_verts, line_index); - - previous->add_geom(geom, state); - } - - // And now create the points. - if (point_index.size() > 0) { - // Create a new Geom and add the points. - GeomPoint *geom = new GeomPoint; - - geom->set_num_prims(point_index.size()); - geom->set_colors(_created_colors, G_PER_VERTEX, point_index); - geom->set_coords(_created_verts, point_index); - - previous->add_geom(geom, state); + lines->close_primitive(); } } + if (lines->get_num_vertices() != 0) { + PT(Geom) geom = new Geom; + geom->set_vertex_data(vdata); + geom->add_primitive(lines); + previous->add_geom(geom, state); + } + if (points->get_num_vertices() != 0) { + PT(Geom) geom = new Geom; + geom->set_vertex_data(vdata); + geom->add_primitive(points); + previous->add_geom(geom, state); + } + // And reset for next time. reset(); } diff --git a/panda/src/grutil/lineSegs.h b/panda/src/grutil/lineSegs.h index d474eae3be..4b543fa100 100644 --- a/panda/src/grutil/lineSegs.h +++ b/panda/src/grutil/lineSegs.h @@ -23,11 +23,8 @@ #include "luse.h" #include "geom.h" -#include "geomPoint.h" -#include "geomLine.h" -#include "geomLinestrip.h" #include "geomNode.h" -#include "qpgeomVertexData.h" +#include "geomVertexData.h" #include "namable.h" #include "pvector.h" @@ -65,12 +62,12 @@ PUBLISHED: // Functions to move the line vertices after they have been created. INLINE int get_num_vertices() const; - INLINE Vertexf get_vertex(int vertex) const; - INLINE void set_vertex(int vertex, const Vertexf &vert); + Vertexf get_vertex(int n) const; + void set_vertex(int n, const Vertexf &vert); INLINE void set_vertex(int vertex, float x, float y, float z); - INLINE Colorf get_vertex_color(int vertex) const; - INLINE void set_vertex_color(int vertex, const Colorf &color); + Colorf get_vertex_color(int vertex) const; + void set_vertex_color(int vertex, const Colorf &c); INLINE void set_vertex_color(int vertex, float r, float g, float b, float a = 1.0f); private: @@ -92,9 +89,7 @@ private: Colorf _color; float _thick; - PTA_Vertexf _created_verts; - PTA_Colorf _created_colors; - PT(qpGeomVertexData) _created_data; + PT(GeomVertexData) _created_data; }; #include "lineSegs.I" diff --git a/panda/src/grutil/multitexReducer.cxx b/panda/src/grutil/multitexReducer.cxx index a90772098e..ef5515ec2b 100644 --- a/panda/src/grutil/multitexReducer.cxx +++ b/panda/src/grutil/multitexReducer.cxx @@ -37,9 +37,9 @@ #include "config_grutil.h" #include "config_gobj.h" #include "dcast.h" -#include "qpgeom.h" -#include "qpgeomVertexWriter.h" -#include "qpgeomVertexReader.h" +#include "geom.h" +#include "geomVertexWriter.h" +#include "geomVertexReader.h" //////////////////////////////////////////////////////////////////// // Function: MultitexReducer::Constructor @@ -554,29 +554,29 @@ determine_uv_range(TexCoordf &min_uv, TexCoordf &max_uv, const GeomInfo &geom_info = (*gi); PT(Geom) geom = - geom_info._geom_node->get_geom(geom_info._index)->make_copy(); + new Geom(*geom_info._geom_node->get_geom(geom_info._index)); - int num_vertices = geom->get_num_vertices(); - if (geom->has_texcoords(model_name) && num_vertices > 0) { - Geom::TexCoordIterator ti = geom->make_texcoord_iterator(model_name); + CPT(GeomVertexData) vdata = geom->get_vertex_data(); + CPT(GeomVertexFormat) format = vdata->get_format(); + if (format->has_column(model_name)) { + GeomVertexReader texcoord(vdata, model_name); - int i = 0; - const TexCoordf &uv = geom->get_next_texcoord(ti); - if (!got_any) { - min_uv = max_uv = uv; - got_any = true; + if (!texcoord.is_at_end()) { + const LVecBase2f &uv = texcoord.get_data2f(); + if (!got_any) { + min_uv = max_uv = uv; + got_any = true; + + } else { + min_uv.set(min(min_uv[0], uv[0]), min(min_uv[1], uv[1])); + max_uv.set(max(max_uv[0], uv[0]), max(max_uv[1], uv[1])); + } - } else { - min_uv.set(min(min_uv[0], uv[0]), min(min_uv[1], uv[1])); - max_uv.set(max(max_uv[0], uv[0]), max(max_uv[1], uv[1])); - } - ++i; - - while (i < num_vertices) { - const TexCoordf &uv = geom->get_next_texcoord(ti); - min_uv.set(min(min_uv[0], uv[0]), min(min_uv[1], uv[1])); - max_uv.set(max(max_uv[0], uv[0]), max(max_uv[1], uv[1])); - ++i; + while (!texcoord.is_at_end()) { + const LVecBase2f &uv = texcoord.get_data2f(); + min_uv.set(min(min_uv[0], uv[0]), min(min_uv[1], uv[1])); + max_uv.set(max(max_uv[0], uv[0]), max(max_uv[1], uv[1])); + } } } } @@ -809,92 +809,54 @@ transfer_geom(GeomNode *geom_node, const InternalName *texcoord_name, const GeomInfo &geom_info = (*gi); const Geom *orig_geom = geom_info._geom_node->get_geom(geom_info._index); - if (orig_geom->is_qpgeom()) { - PT(qpGeom) geom = new qpGeom(*DCAST(qpGeom, orig_geom)); - PT(qpGeomVertexData) vdata = geom->modify_vertex_data(); - vdata->set_usage_hint(qpGeom::UH_stream); - - if (vdata->has_column(_target_stage->get_texcoord_name())) { - qpGeomVertexWriter vertex(vdata, InternalName::get_vertex()); - qpGeomVertexReader texcoord(vdata, _target_stage->get_texcoord_name()); - - while (!texcoord.is_at_end()) { - const LVecBase2f &tc = texcoord.get_data2f(); - vertex.set_data3f(tc[0], 0.0f, tc[1]); - } - } - - if (texcoord_name != (const InternalName *)NULL && - texcoord_name != InternalName::get_texcoord()) { - // Copy the texture coordinates from the indicated name over - // to the default name. - const qpGeomVertexColumn *column = - vdata->get_format()->get_column(texcoord_name); - if (column != (const qpGeomVertexColumn *)NULL) { - vdata = vdata->replace_column - (InternalName::get_texcoord(), column->get_num_components(), - column->get_numeric_type(), column->get_contents()); - geom->set_vertex_data(vdata); - - qpGeomVertexReader from(vdata, texcoord_name); - qpGeomVertexWriter to(vdata, InternalName::get_texcoord()); - while (!from.is_at_end()) { - to.add_data2f(from.get_data2f()); - } - } - } - - CPT(RenderState) geom_state = RenderState::make_empty(); - if (preserve_color) { - // Be sure to preserve whatever colors are on the geom. - const RenderAttrib *ca = geom_info._geom_net_state->get_attrib(ColorAttrib::get_class_type()); - if (ca != (const RenderAttrib *)NULL) { - geom_state = geom_state->add_attrib(ca); - } - const RenderAttrib *csa = geom_info._geom_net_state->get_attrib(ColorScaleAttrib::get_class_type()); - if (csa != (const RenderAttrib *)NULL) { - geom_state = geom_state->add_attrib(csa); - } - } + PT(Geom) geom = new Geom(*orig_geom); + PT(GeomVertexData) vdata = geom->modify_vertex_data(); + vdata->set_usage_hint(Geom::UH_stream); + + if (vdata->has_column(_target_stage->get_texcoord_name())) { + GeomVertexWriter vertex(vdata, InternalName::get_vertex()); + GeomVertexReader texcoord(vdata, _target_stage->get_texcoord_name()); - geom_node->add_geom(geom, geom_state); - - } else { - PT(Geom) geom = orig_geom->make_copy(); - - PTA_Vertexf coords = PTA_Vertexf::empty_array(0); - PTA_TexCoordf texcoords = geom->get_texcoords_array(_target_stage->get_texcoord_name()); - if (!texcoords.empty()) { - coords.reserve(texcoords.size()); - for (size_t i = 0; i < texcoords.size(); i++) { - const TexCoordf &tc = texcoords[i]; - Vertexf v(tc[0], 0.0f, tc[1]); - coords.push_back(v); - } - - geom->set_coords(coords, geom->get_texcoords_index(_target_stage->get_texcoord_name())); - if (texcoord_name != (const InternalName *)NULL) { - geom->set_texcoords(InternalName::get_texcoord(), - geom->get_texcoords_array(texcoord_name), - geom->get_texcoords_index(texcoord_name)); - } - - CPT(RenderState) geom_state = RenderState::make_empty(); - if (preserve_color) { - // Be sure to preserve whatever colors are on the geom. - const RenderAttrib *ca = geom_info._geom_net_state->get_attrib(ColorAttrib::get_class_type()); - if (ca != (const RenderAttrib *)NULL) { - geom_state = geom_state->add_attrib(ca); - } - const RenderAttrib *csa = geom_info._geom_net_state->get_attrib(ColorScaleAttrib::get_class_type()); - if (csa != (const RenderAttrib *)NULL) { - geom_state = geom_state->add_attrib(csa); - } - } - - geom_node->add_geom(geom, geom_state); + while (!texcoord.is_at_end()) { + const LVecBase2f &tc = texcoord.get_data2f(); + vertex.set_data3f(tc[0], 0.0f, tc[1]); } } + + if (texcoord_name != (const InternalName *)NULL && + texcoord_name != InternalName::get_texcoord()) { + // Copy the texture coordinates from the indicated name over + // to the default name. + const GeomVertexColumn *column = + vdata->get_format()->get_column(texcoord_name); + if (column != (const GeomVertexColumn *)NULL) { + vdata = vdata->replace_column + (InternalName::get_texcoord(), column->get_num_components(), + column->get_numeric_type(), column->get_contents()); + geom->set_vertex_data(vdata); + + GeomVertexReader from(vdata, texcoord_name); + GeomVertexWriter to(vdata, InternalName::get_texcoord()); + while (!from.is_at_end()) { + to.add_data2f(from.get_data2f()); + } + } + } + + CPT(RenderState) geom_state = RenderState::make_empty(); + if (preserve_color) { + // Be sure to preserve whatever colors are on the geom. + const RenderAttrib *ca = geom_info._geom_net_state->get_attrib(ColorAttrib::get_class_type()); + if (ca != (const RenderAttrib *)NULL) { + geom_state = geom_state->add_attrib(ca); + } + const RenderAttrib *csa = geom_info._geom_net_state->get_attrib(ColorScaleAttrib::get_class_type()); + if (csa != (const RenderAttrib *)NULL) { + geom_state = geom_state->add_attrib(csa); + } + } + + geom_node->add_geom(geom, geom_state); } } @@ -945,18 +907,9 @@ scan_color(const MultitexReducer::GeomList &geom_list, Colorf &geom_color, } else if (color_type == ColorAttrib::T_vertex) { // This geom gets its color from its vertices. const Geom *geom = geom_info._geom_node->get_geom(geom_info._index); - - int binding = geom->get_binding(G_COLOR); - if (binding == G_OVERALL) { - // This geom has a flat color on its vertices. - Geom::ColorIterator ci = geom->make_color_iterator(); - flat_color = geom->get_next_color(ci); - has_flat_color = true; - - } else if (binding != G_OFF) { - // This geom has per-vertex (or per-prim, or per-component) - // color. Assume the colors in the table are actually - // different. + if (geom->get_vertex_data()->has_column(InternalName::get_color())) { + // This geom has per-vertex color. Assume the colors in the + // table are actually different from each other. has_vertex_color = true; } } diff --git a/panda/src/gsgbase/graphicsStateGuardianBase.h b/panda/src/gsgbase/graphicsStateGuardianBase.h index 9e4f5587c3..04aad3329d 100644 --- a/panda/src/gsgbase/graphicsStateGuardianBase.h +++ b/panda/src/gsgbase/graphicsStateGuardianBase.h @@ -45,17 +45,17 @@ class GeomTri; class GeomTristrip; class GeomTrifan; class GeomSphere; -class qpGeom; -class qpGeomVertexData; -class qpGeomVertexArrayData; -class qpGeomPrimitive; -class qpGeomTriangles; -class qpGeomTristrips; -class qpGeomTrifans; -class qpGeomLines; -class qpGeomLinestrips; -class qpGeomPoints; -class qpGeomMunger; +class Geom; +class GeomVertexData; +class GeomVertexArrayData; +class GeomPrimitive; +class GeomTriangles; +class GeomTristrips; +class GeomTrifans; +class GeomLines; +class GeomLinestrips; +class GeomPoints; +class GeomMunger; class PreparedGraphicsObjects; class GraphicsOutput; @@ -136,13 +136,13 @@ public: virtual GeomContext *prepare_geom(Geom *geom)=0; virtual void release_geom(GeomContext *gc)=0; - virtual VertexBufferContext *prepare_vertex_buffer(qpGeomVertexArrayData *data)=0; + virtual VertexBufferContext *prepare_vertex_buffer(GeomVertexArrayData *data)=0; virtual void release_vertex_buffer(VertexBufferContext *vbc)=0; - virtual IndexBufferContext *prepare_index_buffer(qpGeomPrimitive *data)=0; + virtual IndexBufferContext *prepare_index_buffer(GeomPrimitive *data)=0; virtual void release_index_buffer(IndexBufferContext *ibc)=0; - virtual PT(qpGeomMunger) get_geom_munger(const RenderState *state)=0; + virtual PT(GeomMunger) get_geom_munger(const RenderState *state)=0; virtual void set_state_and_transform(const RenderState *state, const TransformState *transform)=0; @@ -183,15 +183,15 @@ public: virtual void draw_trifan(GeomTrifan *geom, GeomContext *gc) { } virtual void draw_sphere(GeomSphere *geom, GeomContext *gc) { } - virtual bool begin_draw_primitives(const qpGeom *geom, - const qpGeomMunger *munger, - const qpGeomVertexData *vertex_data)=0; - virtual void draw_triangles(const qpGeomTriangles *primitive)=0; - virtual void draw_tristrips(const qpGeomTristrips *primitive)=0; - virtual void draw_trifans(const qpGeomTrifans *primitive)=0; - virtual void draw_lines(const qpGeomLines *primitive)=0; - virtual void draw_linestrips(const qpGeomLinestrips *primitive)=0; - virtual void draw_points(const qpGeomPoints *primitive)=0; + virtual bool begin_draw_primitives(const Geom *geom, + const GeomMunger *munger, + const GeomVertexData *vertex_data)=0; + virtual void draw_triangles(const GeomTriangles *primitive)=0; + virtual void draw_tristrips(const GeomTristrips *primitive)=0; + virtual void draw_trifans(const GeomTrifans *primitive)=0; + virtual void draw_lines(const GeomLines *primitive)=0; + virtual void draw_linestrips(const GeomLinestrips *primitive)=0; + virtual void draw_points(const GeomPoints *primitive)=0; virtual void end_draw_primitives()=0; virtual void framebuffer_copy_to_texture diff --git a/panda/src/gsgmisc/Sources.pp b/panda/src/gsgmisc/Sources.pp index ff477d5a1e..1b30bab0d9 100644 --- a/panda/src/gsgmisc/Sources.pp +++ b/panda/src/gsgmisc/Sources.pp @@ -1,3 +1,7 @@ +// Now that we have removed GeomIssuer, there's nothing left in this +// directory. +#define BUILD_DIRECTORY + #define OTHER_LIBS interrogatedb:c dconfig:c dtoolconfig:m \ dtoolutil:c dtoolbase:c dtool:m @@ -6,11 +10,5 @@ #define LOCAL_LIBS \ putil gobj gsgbase mathutil - #define SOURCES \ - geomIssuer.I geomIssuer.cxx geomIssuer.h - - #define INSTALL_HEADERS \ - geomIssuer.I geomIssuer.h - #end lib_target diff --git a/panda/src/gsgmisc/geomIssuer.I b/panda/src/gsgmisc/geomIssuer.I deleted file mode 100644 index 2093d1ab2d..0000000000 --- a/panda/src/gsgmisc/geomIssuer.I +++ /dev/null @@ -1,82 +0,0 @@ -// Filename: geomIssuer.I -// Created by: drose (04Feb99) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////// -// Function: GeomIssuer::issue_vertex -// Access: Public -// Description: Uses the function pointers set up by the constructor -// to actually issue the vertex to the rendering -// backend. If the vertex does not have the indicated -// bind type, nothing is done. -//////////////////////////////////////////////////////////////////// -INLINE void GeomIssuer:: -issue_vertex(GeomBindType bind, Geom::VertexIterator &i) { - _vertex_command[bind](_geom, i, _gsg); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomIssuer::issue_normal -// Access: Public -// Description: Uses the function pointers set up by the constructor -// to actually issue the normal to the rendering -// backend. If the normal does not have the indicated -// bind type, nothing is done. -//////////////////////////////////////////////////////////////////// -INLINE void GeomIssuer:: -issue_normal(GeomBindType bind, Geom::NormalIterator &i) { - _normal_command[bind](_geom, i, _gsg); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomIssuer::issue_texcoord -// Access: Public -// Description: Uses the function pointers set up by the constructor -// to actually issue the texCoord to the rendering -// backend. If the texCoord does not have the indicated -// bind type, nothing is done. -//////////////////////////////////////////////////////////////////// -INLINE void GeomIssuer:: -issue_texcoord(GeomBindType bind, Geom::TexCoordIterator &i) { - _texcoord_command[bind](_geom, i, _gsg); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomIssuer::issue_texcoord -// Access: Public -// Description: Handles the case of multitexture coordinates. -//////////////////////////////////////////////////////////////////// -INLINE void GeomIssuer:: -issue_texcoord(GeomBindType bind, Geom::MultiTexCoordIterator &i) { - _multitexcoord_command[bind](_geom, i, _gsg); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomIssuer::issue_color -// Access: Public -// Description: Uses the function pointers set up by the constructor -// to actually issue the color to the rendering -// backend. If the color does not have the indicated -// bind type, nothing is done. -//////////////////////////////////////////////////////////////////// -INLINE void GeomIssuer:: -issue_color(GeomBindType bind, Geom::ColorIterator &i) { - _color_command[bind](_geom, i, _gsg); -} - - diff --git a/panda/src/gsgmisc/geomIssuer.cxx b/panda/src/gsgmisc/geomIssuer.cxx deleted file mode 100644 index aa2f1d89a9..0000000000 --- a/panda/src/gsgmisc/geomIssuer.cxx +++ /dev/null @@ -1,170 +0,0 @@ -// Filename: geomIssuer.cxx -// Created by: drose (03Feb99) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "geomIssuer.h" -#include "geom.h" -#include "graphicsStateGuardianBase.h" - -static void -issue_vertex_noop(const Geom *, Geom::VertexIterator &, - GraphicsStateGuardianBase *) { -} - -static void -issue_normal_noop(const Geom *, Geom::NormalIterator &, - GraphicsStateGuardianBase *) { -} - -static void -issue_texcoord_noop(const Geom *, Geom::TexCoordIterator &, - GraphicsStateGuardianBase *) { -} - -static void -issue_multitexcoord_noop(const Geom *, Geom::MultiTexCoordIterator &, - GraphicsStateGuardianBase *) { -} - -static void -issue_color_noop(const Geom *, Geom::ColorIterator &, - GraphicsStateGuardianBase *) { -} - -static GeomIssuer noop_issuer; - - -//////////////////////////////////////////////////////////////////// -// Function: GeomIssuer::Constructor -// Access: Public -// Description: The default constructor makes a no-op GeomIssuer. -// It's primarily intended to create the static -// _noop_issuer once and only once; normally, the real -// constructor, below, will be used. -//////////////////////////////////////////////////////////////////// -GeomIssuer:: -GeomIssuer() { - for (int i = 0; i < num_GeomBindTypes; i++) { - _vertex_command[i] = issue_vertex_noop; - _normal_command[i] = issue_normal_noop; - _texcoord_command[i] = issue_texcoord_noop; - _multitexcoord_command[i] = issue_multitexcoord_noop; - _color_command[i] = issue_color_noop; - } - _geom = NULL; -} - - -//////////////////////////////////////////////////////////////////// -// Function: GeomIssuer::Constructor -// Access: Public -// Description: This is the real constructor. Given a Geom, the -// current gsg, and a series of functions that, when -// called, will actually issue the vertex/normal/whatnot -// to the rendering engine. It will construct a -// GeomIssuer with these pointers in the appropriate -// places to either issue the component or do nothing, -// according to the requirements of the geom and of the -// current state of the gsg. -// -// This constructor is deprecated; it only supports -// single-stage texturing. Use the next constructor for -// multitexturing support. -//////////////////////////////////////////////////////////////////// -GeomIssuer:: -GeomIssuer(const Geom *geom, - GraphicsStateGuardianBase *gsg, - IssueVertex *vertex, - IssueNormal *normal, - IssueTexCoord *texcoord, - IssueColor *color) { - memcpy(this, &noop_issuer, sizeof(GeomIssuer)); - _geom = geom; - _gsg = gsg; - - // Issue vertices by default (we might not want to if we're doing - // performance analysis) - if (vertex != NULL) { - _vertex_command[geom->get_binding(G_COORD)] = vertex; - } - - // Issue normals only if we have them and the gsg says we should. - if (normal != NULL && gsg->wants_normals()) { - _normal_command[geom->get_binding(G_NORMAL)] = normal; - } - - // Issue texcoords if we have them and the gsg wants them. - if (texcoord != NULL && gsg->wants_texcoords()) { - _texcoord_command[geom->get_binding(G_TEXCOORD)] = texcoord; - } - - // And ditto for colors. - if (color != NULL && gsg->wants_colors()) { - _color_command[geom->get_binding(G_COLOR)] = color; - } -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomIssuer::Constructor -// Access: Public -// Description: This constructor supports switchably issuing -// multitexture calls. If the MultiTexCoordIterator -// indicates that multitexturing is in use (e.g. texture -// coordinates are to be issued for any stage other than -// stage 0), then multi_texcoord() will be called for -// each issue_texcoord() call. Otherwise, -// single_texcoord() will be called. -//////////////////////////////////////////////////////////////////// -GeomIssuer:: -GeomIssuer(const Geom *geom, - GraphicsStateGuardianBase *gsg, - IssueVertex *vertex, - IssueNormal *normal, - IssueColor *color, - IssueMultiTexCoord *single_texcoord, - IssueMultiTexCoord *multi_texcoord, - const Geom::MultiTexCoordIterator &ti) { - memcpy(this, &noop_issuer, sizeof(GeomIssuer)); - _geom = geom; - _gsg = gsg; - - // Issue vertices by default (we might not want to if we're doing - // performance analysis) - if (vertex != NULL) { - _vertex_command[geom->get_binding(G_COORD)] = vertex; - } - - // Issue normals only if we have them and the gsg says we should. - if (normal != NULL && gsg->wants_normals()) { - _normal_command[geom->get_binding(G_NORMAL)] = normal; - } - - // And ditto for colors. - if (color != NULL && gsg->wants_colors()) { - _color_command[geom->get_binding(G_COLOR)] = color; - } - - // Issue texcoords if we have them and the gsg wants them. - if ((single_texcoord != NULL && multi_texcoord != NULL) && - ti._num_stages > 0 && gsg->wants_texcoords()) { - if (ti._num_stages > 1 || ti._stage_index[0] != 0) { - _multitexcoord_command[G_PER_VERTEX] = multi_texcoord; - } else { - _multitexcoord_command[G_PER_VERTEX] = single_texcoord; - } - } -} diff --git a/panda/src/gsgmisc/geomIssuer.h b/panda/src/gsgmisc/geomIssuer.h deleted file mode 100644 index 552bd3dcd1..0000000000 --- a/panda/src/gsgmisc/geomIssuer.h +++ /dev/null @@ -1,100 +0,0 @@ -// Filename: geomIssuer.h -// Created by: drose (03Feb99) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef GEOMISSUER_H -#define GEOMISSUER_H - -#include "pandabase.h" - -#include "luse.h" -#include "typedef.h" -#include "geom.h" - -class GraphicsStateGuardianBase; - -//////////////////////////////////////////////////////////////////// -// Class : GeomIssuer -// Description : This is a utility class used by the various -// GraphicsStateGuardians to issue the vertex/normal/etc -// commands to the rendering engine. Given a geom and a -// gsg, as well as a set of functions that actually do -// the work of issuing vertices etc. to the rendering -// backend, it configures itself so that subsequent -// calls to issue_normal() (for instance) will either do -// nothing or issue a normal, depending on whether the -// requested binding type matches the geom's actual -// binding type for normals, and on whether vertices are -// required by the current state. -//////////////////////////////////////////////////////////////////// -class EXPCL_PANDA GeomIssuer { -public: - - // Declare some function types. This declares several typenames - // which are pointers to function types--these are not themselves - // functions. A function pointed to by a variable of this type, - // when given a Geom and an associated iterator, will issue the - // vertex (or whatever) referenced by the iterator to the rendering - // backend, and increment the iterator. - typedef void IssueVertex(const Geom *, Geom::VertexIterator &, GraphicsStateGuardianBase *gsg); - typedef void IssueNormal(const Geom *, Geom::NormalIterator &, GraphicsStateGuardianBase *gsg); - typedef void IssueColor(const Geom *, Geom::ColorIterator &, GraphicsStateGuardianBase *gsg); - typedef void IssueTexCoord(const Geom *, Geom::TexCoordIterator &, GraphicsStateGuardianBase *gsg); - typedef void IssueMultiTexCoord(const Geom *, Geom::MultiTexCoordIterator &, GraphicsStateGuardianBase *gsg); - - GeomIssuer(); - GeomIssuer(const Geom *geom, - GraphicsStateGuardianBase *gsg, - IssueVertex *vertex, - IssueNormal *normal, - IssueTexCoord *texcoord, - IssueColor *color); - GeomIssuer(const Geom *geom, - GraphicsStateGuardianBase *gsg, - IssueVertex *vertex, - IssueNormal *normal, - IssueColor *color, - IssueMultiTexCoord *single_texcoord, - IssueMultiTexCoord *multi_texcoord, - const Geom::MultiTexCoordIterator &ti); - - - - INLINE void issue_vertex(GeomBindType bind, - Geom::VertexIterator &i); - INLINE void issue_normal(GeomBindType bind, - Geom::NormalIterator &i); - INLINE void issue_texcoord(GeomBindType bind, - Geom::TexCoordIterator &i); - INLINE void issue_texcoord(GeomBindType bind, - Geom::MultiTexCoordIterator &i); - INLINE void issue_color(GeomBindType bind, - Geom::ColorIterator &i); - -protected: - const Geom *_geom; - GraphicsStateGuardianBase *_gsg; - IssueVertex *_vertex_command[num_GeomBindTypes]; - IssueNormal *_normal_command[num_GeomBindTypes]; - IssueTexCoord *_texcoord_command[num_GeomBindTypes]; - IssueMultiTexCoord *_multitexcoord_command[num_GeomBindTypes]; - IssueColor *_color_command[num_GeomBindTypes]; -}; - -#include "geomIssuer.I" - -#endif diff --git a/panda/src/linmath/Sources.pp b/panda/src/linmath/Sources.pp index 5a85ac9e8f..a98f889bb7 100644 --- a/panda/src/linmath/Sources.pp +++ b/panda/src/linmath/Sources.pp @@ -9,11 +9,11 @@ #define COMBINED_SOURCES $[TARGET]_composite1.cxx $[TARGET]_composite2.cxx #define SOURCES \ + aa_luse.h \ compose_matrix.h compose_matrix_src.I \ compose_matrix_src.cxx compose_matrix_src.h config_linmath.h \ coordinateSystem.h dbl2fltnames.h dblnames.h deg_2_rad.h \ - flt2dblnames.h fltnames.h ioPtaDatagramLinMath.I \ - ioPtaDatagramLinMath.h lcast_to.h lcast_to_src.h \ + flt2dblnames.h fltnames.h lcast_to.h lcast_to_src.h \ lcast_to_src.I lmatrix.h lmatrix3.h lmatrix3_src.I \ lmatrix3_src.cxx lmatrix3_src.h lmatrix4.h lmatrix4_src.I \ lmatrix4_src.cxx lmatrix4_src.h lorientation.h \ @@ -33,28 +33,26 @@ lvecBase4_src.h lvector2.h lvector2_src.I lvector2_src.cxx \ lvector2_src.h lvector3.h lvector3_src.I lvector3_src.cxx \ lvector3_src.h lvector4.h lvector4_src.I lvector4_src.cxx \ - lvector4_src.h mathNumbers.h mathNumbers.I pta_Colorf.h \ - pta_Normalf.h pta_TexCoordf.h pta_Vertexf.h vector_Colorf.h \ + lvector4_src.h mathNumbers.h mathNumbers.I vector_Colorf.h \ vector_LPoint2f.h vector_LVecBase3f.h vector_Normalf.h \ vector_TexCoordf.h vector_Vertexf.h #define INCLUDED_SOURCES \ compose_matrix.cxx config_linmath.cxx coordinateSystem.cxx \ - ioPtaDatagramLinMath.cxx lmatrix.cxx lmatrix3.cxx \ + lmatrix.cxx lmatrix3.cxx \ lmatrix4.cxx lorientation.cxx lorientation lpoint2.cxx \ lpoint3.cxx lpoint4.cxx lquaternion.cxx lrotation.cxx \ lrotation luse.cxx lvecBase2.cxx lvecBase3.cxx lvecBase4.cxx \ lvector2.cxx lvector3.cxx lvector4.cxx mathNumbers.cxx \ - pta_Colorf.cxx pta_Normalf.cxx pta_TexCoordf.cxx \ - pta_Vertexf.cxx vector_Colorf.cxx vector_LPoint2f.cxx \ + vector_Colorf.cxx vector_LPoint2f.cxx \ vector_LVecBase3f.cxx vector_Normalf.cxx vector_Vertexf.cxx \ #define INSTALL_HEADERS \ + aa_luse.h \ compose_matrix.h compose_matrix_src.I \ compose_matrix_src.h config_linmath.h coordinateSystem.h \ dbl2fltnames.h dblnames.h deg_2_rad.h \ - flt2dblnames.h fltnames.h ioPtaDatagramLinMath.I \ - ioPtaDatagramLinMath.h lcast_to.h lcast_to_src.I lcast_to_src.h \ + flt2dblnames.h fltnames.h lcast_to.h lcast_to_src.I lcast_to_src.h \ lmat_ops.h lmat_ops_src.I lmat_ops_src.h lmatrix.h lmatrix3.h \ lmatrix3_src.I lmatrix3_src.h lmatrix4.h lmatrix4_src.I \ lmatrix4_src.h lorientation.h lorientation_src.I \ @@ -68,8 +66,7 @@ lvecBase3_src.I lvecBase3_src.h lvecBase4.h lvecBase4_src.I \ lvecBase4_src.h lvector2.h lvector2_src.I lvector2_src.h \ lvector3.h lvector3_src.I lvector3_src.h lvector4.h lvector4_src.I \ - lvector4_src.h mathNumbers.h mathNumbers.I pta_Colorf.h \ - pta_Normalf.h pta_TexCoordf.h pta_Vertexf.h vector_Colorf.h \ + lvector4_src.h mathNumbers.h mathNumbers.I vector_Colorf.h \ vector_LPoint2f.h vector_LVecBase3f.h vector_Normalf.h \ vector_TexCoordf.h vector_Vertexf.h diff --git a/panda/src/linmath/aa_luse.h b/panda/src/linmath/aa_luse.h new file mode 100644 index 0000000000..8665ed5695 --- /dev/null +++ b/panda/src/linmath/aa_luse.h @@ -0,0 +1,67 @@ +// Filename: aa_luse.h +// Created by: drose (13Jan99) +// +//////////////////////////////////////////////////////////////////// +// +// PANDA 3D SOFTWARE +// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved +// +// All use of this software is subject to the terms of the Panda 3d +// Software license. You should have received a copy of this license +// along with this source code; you will also find a current copy of +// the license at http://etc.cmu.edu/panda3d/docs/license/ . +// +// To contact the maintainers of this program write to +// panda3d-general@lists.sourceforge.net . +// +//////////////////////////////////////////////////////////////////// + +#ifndef AA_LUSE_H +#define AA_LUSE_H + +// This file is include by luse.h to do all the work required by that +// header file. It is in a separate header file to avoid cyclic +// header dependencies, and because interrogate wants to sort header +// files in alphabetical order and this one should pretty much be +// included first. + +#include "pandabase.h" + +#include "stl_compares.h" +#include "lvec2_ops.h" +#include "lvec3_ops.h" +#include "lvec4_ops.h" +#include "lmat_ops.h" +#include "lmatrix.h" +#include "lquaternion.h" +#include "lrotation.h" +#include "lorientation.h" +#include "lcast_to.h" + +//ensure FLOATTYPE is set to float for macros are used outside of LINMATH +#include "fltnames.h" + +// This macro defines the cast-to-another-numeric-type operator for +// all of the things defined in this package. It works by virtue of +// there being an appropriate lcast_to() template function defined for +// each class. + +#define LCAST(numeric_type, object) lcast_to((numeric_type *)0, object) + + +// Now we define some handy typedefs for these classes. +typedef LPoint3f Vertexf; +typedef LVector3f Normalf; +typedef LPoint2f TexCoordf; +typedef LVecBase4f Colorf; +typedef LVecBase3f RGBColorf; + +typedef LPoint3d Vertexd; +typedef LVector3d Normald; +typedef LPoint2d TexCoordd; +typedef LVecBase4d Colord; +typedef LVecBase3d RGBColord; + + +#endif + diff --git a/panda/src/linmath/coordinateSystem.cxx b/panda/src/linmath/coordinateSystem.cxx index 28d98862db..f10c4ea26c 100644 --- a/panda/src/linmath/coordinateSystem.cxx +++ b/panda/src/linmath/coordinateSystem.cxx @@ -19,6 +19,7 @@ #include "coordinateSystem.h" #include "config_linmath.h" #include "configVariableEnum.h" +#include "string_utils.h" #include "dconfig.h" #include "notify.h" @@ -42,26 +43,27 @@ CoordinateSystem parse_coordinate_system_string(const string &str) { // First, make sure the string is lowercase before we compare it, so // we'll be case-insensitive. - string lstr = str; - for (string::iterator si = lstr.begin(); - si != lstr.end(); - ++si) { - (*si) = tolower(*si); - } - - if (lstr == "default") { + if (cmp_nocase_uh(str, "default") == 0) { return CS_default; - } else if (lstr == "z-up" || lstr == "z-up-right") { + } else if (cmp_nocase_uh(str, "zup") == 0 || + cmp_nocase_uh(str, "zup-right") == 0 || + cmp_nocase_uh(str, "z-up") == 0 || + cmp_nocase_uh(str, "z-up-right") == 0) { return CS_zup_right; - } else if (lstr == "y-up" || lstr == "y-up-right") { + } else if (cmp_nocase_uh(str, "yup") == 0 || + cmp_nocase_uh(str, "yup-right") == 0 || + cmp_nocase_uh(str, "y-up") == 0 || + cmp_nocase_uh(str, "y-up-right") == 0) { return CS_yup_right; - } else if (lstr == "z-up-left") { + } else if (cmp_nocase_uh(str, "z-up-left") == 0 || + cmp_nocase_uh(str, "zup-left") == 0) { return CS_zup_left; - } else if (lstr == "y-up-left") { + } else if (cmp_nocase_uh(str, "y-up-left") == 0 || + cmp_nocase_uh(str, "yup-left") == 0) { return CS_yup_left; } @@ -112,7 +114,7 @@ operator << (ostream &out, CoordinateSystem cs) { return out << "invalid"; } - linmath_cat.error() + linmath_cat->error() << "Invalid coordinate_system value: " << (int)cs << "\n"; nassertr(false, out); return out; @@ -123,6 +125,10 @@ operator >> (istream &in, CoordinateSystem &cs) { string word; in >> word; cs = parse_coordinate_system_string(word); + if (cs == CS_invalid) { + linmath_cat->error() + << "Invalid coordinate_system string: " << word << "\n"; + } return in; } diff --git a/panda/src/linmath/ioPtaDatagramLinMath.I b/panda/src/linmath/ioPtaDatagramLinMath.I deleted file mode 100644 index 2f3d9fc3db..0000000000 --- a/panda/src/linmath/ioPtaDatagramLinMath.I +++ /dev/null @@ -1,58 +0,0 @@ -// Filename: ioPtaDatagramLinMath.I -// Created by: jason (26Jun00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////// -// Function: IoPtaDatagamLinMath::write_datagram -// Access: Public, Static -// Description: -//////////////////////////////////////////////////////////////////// -template -void IoPtaDatagramLinMath:: -write_datagram(Datagram &dest, CPTA(LinMathElement) array) -{ - dest.add_uint32(array.size()); - for(int i = 0; i < (int)array.size(); i++) - { - array[i].write_datagram(dest); - } -} - -//////////////////////////////////////////////////////////////////// -// Function: IoPtaDatagamLinMath::read_datagram -// Access: Public, Static -// Description: -//////////////////////////////////////////////////////////////////// -template -PTA(LinMathElement) IoPtaDatagramLinMath:: -read_datagram(DatagramIterator &source) -{ - PTA(LinMathElement) array; - LinMathElement temp; - - int size = source.get_uint32(); - for(int i = 0; i < size; i++) - { - temp.read_datagram(source); - array.push_back(temp); - } - - return array; -} - - diff --git a/panda/src/linmath/ioPtaDatagramLinMath.cxx b/panda/src/linmath/ioPtaDatagramLinMath.cxx deleted file mode 100644 index b4081b6a71..0000000000 --- a/panda/src/linmath/ioPtaDatagramLinMath.cxx +++ /dev/null @@ -1,24 +0,0 @@ -// Filename: ioPtaDatagramLinMath.cxx -// Created by: drose (29Jun00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "ioPtaDatagramLinMath.h" - -// Tell GCC that we'll take care of the instantiation explicitly here. -#ifdef __GNUC__ -#pragma implementation -#endif diff --git a/panda/src/linmath/ioPtaDatagramLinMath.h b/panda/src/linmath/ioPtaDatagramLinMath.h deleted file mode 100644 index 2015ba4274..0000000000 --- a/panda/src/linmath/ioPtaDatagramLinMath.h +++ /dev/null @@ -1,75 +0,0 @@ -// Filename: ioPtaDatagramLinMath.h -// Created by: jason (26Jun00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef _IO_PTA_DATAGRAM_LINMATH -#define _IO_PTA_DATAGRAM_LINMATH - -#include "pandabase.h" - -#include "luse.h" -#include "pta_Vertexf.h" -#include "pta_Colorf.h" -#include "pta_Normalf.h" -#include "pta_TexCoordf.h" - -#include "pointerToArray.h" - -class Datagram; -class DatagramIterator; - -//////////////////////////////////////////////////////////////////// -// Class : IoPtaDatagramLinMath -// Description : This class is used to read and write a PTA_something -// (where something is some kind of LinMath object like -// LMatrix4f or LVector3f) from a Datagram, in support -// of Bam. It's not intended to be constructed; it's -// just a convenient place to scope these static methods -// which should be called directly. -//////////////////////////////////////////////////////////////////// -template -class IoPtaDatagramLinMath { -public: - static void write_datagram(Datagram &dest, CPTA(LinMathElement) array); - static PTA(LinMathElement) read_datagram(DatagramIterator &source); -}; - -#include "ioPtaDatagramLinMath.I" - -// Now export all of the likely template classes for Windows' benefit. -// This must be done in this file, and not in the individual pta_* -// files, because it's important that this export command be the first -// appearance of a particular template instantiation. - -EXPORT_TEMPLATE_CLASS(EXPCL_PANDA, EXPTP_PANDA, IoPtaDatagramLinMath) -EXPORT_TEMPLATE_CLASS(EXPCL_PANDA, EXPTP_PANDA, IoPtaDatagramLinMath) -EXPORT_TEMPLATE_CLASS(EXPCL_PANDA, EXPTP_PANDA, IoPtaDatagramLinMath) -EXPORT_TEMPLATE_CLASS(EXPCL_PANDA, EXPTP_PANDA, IoPtaDatagramLinMath) - - -typedef IoPtaDatagramLinMath IPD_Colorf; -typedef IoPtaDatagramLinMath IPD_Normalf; -typedef IoPtaDatagramLinMath IPD_TexCoordf; -typedef IoPtaDatagramLinMath IPD_Vertexf; - - -// Tell GCC that we'll take care of the instantiation explicitly here. -#ifdef __GNUC__ -#pragma interface -#endif - -#endif diff --git a/panda/src/linmath/lcast_to_src.I b/panda/src/linmath/lcast_to_src.I index eff3d71b7d..ad211aba00 100644 --- a/panda/src/linmath/lcast_to_src.I +++ b/panda/src/linmath/lcast_to_src.I @@ -62,7 +62,7 @@ lcast_to(FLOATTYPE2 *, const FLOATNAME(LPoint4) &source) { } INLINE_LINMATH FLOATNAME2(LQuaternion) -lcast_to(FLOATTYPE2 *, const FLOATNAME(LQuaternion)& c) { +lcast_to(FLOATTYPE2 *, const FLOATNAME(LQuaternion) &c) { return FLOATNAME2(LQuaternion)(c.get_r(), c.get_i(), c.get_j(), c.get_k()); } diff --git a/panda/src/linmath/lcast_to_src.h b/panda/src/linmath/lcast_to_src.h index b78eae3eaa..4f3b6e885d 100644 --- a/panda/src/linmath/lcast_to_src.h +++ b/panda/src/linmath/lcast_to_src.h @@ -44,7 +44,7 @@ INLINE_LINMATH FLOATNAME2(LPoint4) lcast_to(FLOATTYPE2 *, const FLOATNAME(LPoint4) &source); INLINE_LINMATH FLOATNAME2(LQuaternion) -lcast_to(FLOATTYPE2 *, const FLOATNAME(LQuaternion)& c); +lcast_to(FLOATTYPE2 *, const FLOATNAME(LQuaternion) &c); INLINE_LINMATH FLOATNAME2(LMatrix3) lcast_to(FLOATTYPE2 *, const FLOATNAME(LMatrix3) &source); diff --git a/panda/src/linmath/linmath_composite1.cxx b/panda/src/linmath/linmath_composite1.cxx index ee493a03e1..f5366c2682 100644 --- a/panda/src/linmath/linmath_composite1.cxx +++ b/panda/src/linmath/linmath_composite1.cxx @@ -9,10 +9,6 @@ #include "lvector4.cxx" #include "luse.cxx" #include "mathNumbers.cxx" -#include "pta_Colorf.cxx" -#include "pta_Normalf.cxx" -#include "pta_TexCoordf.cxx" -#include "pta_Vertexf.cxx" #include "vector_Colorf.cxx" #include "vector_LPoint2f.cxx" #include "vector_LVecBase3f.cxx" diff --git a/panda/src/linmath/linmath_composite2.cxx b/panda/src/linmath/linmath_composite2.cxx index 7d0fea6152..988e72363f 100644 --- a/panda/src/linmath/linmath_composite2.cxx +++ b/panda/src/linmath/linmath_composite2.cxx @@ -2,7 +2,6 @@ #include "compose_matrix.cxx" #include "config_linmath.cxx" #include "coordinateSystem.cxx" -#include "ioPtaDatagramLinMath.cxx" #include "lmatrix3.cxx" #include "lmatrix4.cxx" #include "lmatrix.cxx" diff --git a/panda/src/linmath/luse.N b/panda/src/linmath/luse.N index 9e1f4a10b3..4430f08ffb 100644 --- a/panda/src/linmath/luse.N +++ b/panda/src/linmath/luse.N @@ -1,11 +1,4 @@ -forcetype PointerToBase< RefCountObj< pvector>> -forcetype PointerToBase< RefCountObj< pvector>> - -forcetype PointerToBase< RefCountObj< pvector>> - -forcetype PointerToBase< RefCountObj< pvector>> - renametype LPoint2f LPoint2f renametype LPoint3f LPoint3f renametype LPoint4f LPoint4f @@ -40,15 +33,6 @@ renametype LQuaterniond LQuaterniond renametype LRotationd LRotationd renametype LOrientationd LOrientationd -forcetype PTA_Vertexf -renametype PTA_Vertexf PTA_Vertexf -forcetype PTA_Normalf -renametype PTA_Normalf PTA_Normalf -forcetype PTA_TexCoordf -renametype PTA_TexCoordf PTA_TexCoordf -forcetype PTA_Colorf -renametype PTA_Colorf PTA_Colorf - # We don't want to accidentally include any of the _src files in the # generated output, since these files aren't intended to be included by # anything but their associated .h file. diff --git a/panda/src/linmath/luse.h b/panda/src/linmath/luse.h index 28c1737a3a..7c95bbd3c1 100644 --- a/panda/src/linmath/luse.h +++ b/panda/src/linmath/luse.h @@ -62,43 +62,9 @@ // //////////////////////////////////////////////////////////////////// -#include "pandabase.h" - -#include "stl_compares.h" -#include "lvec2_ops.h" -#include "lvec3_ops.h" -#include "lvec4_ops.h" -#include "lmat_ops.h" -#include "lmatrix.h" -#include "lquaternion.h" -#include "lrotation.h" -#include "lorientation.h" -#include "lcast_to.h" - -//ensure FLOATTYPE is set to float for macros are used outside of LINMATH -#include "fltnames.h" - -// This macro defines the cast-to-another-numeric-type operator for -// all of the things defined in this package. It works by virtue of -// there being an appropriate lcast_to() template function defined for -// each class. - -#define LCAST(numeric_type, object) lcast_to((numeric_type *)0, object) - - -// Now we define some handy typedefs for these classes. -typedef LPoint3f Vertexf; -typedef LVector3f Normalf; -typedef LPoint2f TexCoordf; -typedef LVecBase4f Colorf; -typedef LVecBase3f RGBColorf; - -typedef LPoint3d Vertexd; -typedef LVector3d Normald; -typedef LPoint2d TexCoordd; -typedef LVecBase4d Colord; -typedef LVecBase3d RGBColord; - +// All of the guts is actually defined in this other header file, +// which is not intended to be included directly by the user. +#include "aa_luse.h" #endif diff --git a/panda/src/linmath/pta_Colorf.cxx b/panda/src/linmath/pta_Colorf.cxx deleted file mode 100644 index 92e2c350be..0000000000 --- a/panda/src/linmath/pta_Colorf.cxx +++ /dev/null @@ -1,24 +0,0 @@ -// Filename: pta_Colorf.cxx -// Created by: drose (10May00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "pta_Colorf.h" - -// Tell GCC that we'll take care of the instantiation explicitly here. -#ifdef __GNUC__ -#pragma implementation -#endif diff --git a/panda/src/linmath/pta_Colorf.h b/panda/src/linmath/pta_Colorf.h deleted file mode 100644 index 6dc7dacefb..0000000000 --- a/panda/src/linmath/pta_Colorf.h +++ /dev/null @@ -1,50 +0,0 @@ -// Filename: pta_Colorf.h -// Created by: drose (10May00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef PTA_COLORF_H -#define PTA_COLORF_H - -#include "pandabase.h" - -#include "vector_Colorf.h" - -#include "pointerToArray.h" - -//////////////////////////////////////////////////////////////////// -// Class : PTA_Colorf -// Description : A pta of Colorfs. This class is defined once here, -// and exported to PANDA.DLL; other packages that want -// to use a pta of this type (whether they need to -// export it or not) should include this header file, -// rather than defining the pta again. -//////////////////////////////////////////////////////////////////// - -EXPORT_TEMPLATE_CLASS(EXPCL_PANDA, EXPTP_PANDA, RefCountObj); -EXPORT_TEMPLATE_CLASS(EXPCL_PANDA, EXPTP_PANDA, PointerToBase >); -EXPORT_TEMPLATE_CLASS(EXPCL_PANDA, EXPTP_PANDA, PointerToArray) -EXPORT_TEMPLATE_CLASS(EXPCL_PANDA, EXPTP_PANDA, ConstPointerToArray) - -typedef PointerToArray PTA_Colorf; -typedef ConstPointerToArray CPTA_Colorf; - -// Tell GCC that we'll take care of the instantiation explicitly here. -#ifdef __GNUC__ -#pragma interface -#endif - -#endif diff --git a/panda/src/linmath/pta_Normalf.cxx b/panda/src/linmath/pta_Normalf.cxx deleted file mode 100644 index d75875b97d..0000000000 --- a/panda/src/linmath/pta_Normalf.cxx +++ /dev/null @@ -1,24 +0,0 @@ -// Filename: pta_Normalf.cxx -// Created by: drose (10May00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "pta_Normalf.h" - -// Tell GCC that we'll take care of the instantiation explicitly here. -#ifdef __GNUC__ -#pragma implementation -#endif diff --git a/panda/src/linmath/pta_Normalf.h b/panda/src/linmath/pta_Normalf.h deleted file mode 100644 index 8af7bfdfdd..0000000000 --- a/panda/src/linmath/pta_Normalf.h +++ /dev/null @@ -1,50 +0,0 @@ -// Filename: pta_Normalf.h -// Created by: drose (10May00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef PTA_NORMALF_H -#define PTA_NORMALF_H - -#include "pandabase.h" - -#include "vector_Normalf.h" - -#include "pointerToArray.h" - -//////////////////////////////////////////////////////////////////// -// Class : PTA_Normalf -// Description : A pta of Normalfs. This class is defined once here, -// and exported to PANDA.DLL; other packages that want -// to use a pta of this type (whether they need to -// export it or not) should include this header file, -// rather than defining the pta again. -//////////////////////////////////////////////////////////////////// - -EXPORT_TEMPLATE_CLASS(EXPCL_PANDA, EXPTP_PANDA, RefCountObj); -EXPORT_TEMPLATE_CLASS(EXPCL_PANDA, EXPTP_PANDA, PointerToBase >); -EXPORT_TEMPLATE_CLASS(EXPCL_PANDA, EXPTP_PANDA, PointerToArray) -EXPORT_TEMPLATE_CLASS(EXPCL_PANDA, EXPTP_PANDA, ConstPointerToArray) - -typedef PointerToArray PTA_Normalf; -typedef ConstPointerToArray CPTA_Normalf; - -// Tell GCC that we'll take care of the instantiation explicitly here. -#ifdef __GNUC__ -#pragma interface -#endif - -#endif diff --git a/panda/src/linmath/pta_TexCoordf.cxx b/panda/src/linmath/pta_TexCoordf.cxx deleted file mode 100644 index 25b283c363..0000000000 --- a/panda/src/linmath/pta_TexCoordf.cxx +++ /dev/null @@ -1,24 +0,0 @@ -// Filename: pta_TexCoordf.cxx -// Created by: drose (10May00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "pta_TexCoordf.h" - -// Tell GCC that we'll take care of the instantiation explicitly here. -#ifdef __GNUC__ -#pragma implementation -#endif diff --git a/panda/src/linmath/pta_TexCoordf.h b/panda/src/linmath/pta_TexCoordf.h deleted file mode 100644 index 47cf8d0b02..0000000000 --- a/panda/src/linmath/pta_TexCoordf.h +++ /dev/null @@ -1,50 +0,0 @@ -// Filename: pta_TexCoordf.h -// Created by: drose (10May00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef PTA_TEXCOORDF_H -#define PTA_TEXCOORDF_H - -#include "pandabase.h" - -#include "vector_TexCoordf.h" - -#include "pointerToArray.h" - -//////////////////////////////////////////////////////////////////// -// Class : PTA_TexCoordf -// Description : A pta of TexCoordfs. This class is defined once here, -// and exported to PANDA.DLL; other packages that want -// to use a pta of this type (whether they need to -// export it or not) should include this header file, -// rather than defining the pta again. -//////////////////////////////////////////////////////////////////// - -EXPORT_TEMPLATE_CLASS(EXPCL_PANDA, EXPTP_PANDA, RefCountObj); -EXPORT_TEMPLATE_CLASS(EXPCL_PANDA, EXPTP_PANDA, PointerToBase >); -EXPORT_TEMPLATE_CLASS(EXPCL_PANDA, EXPTP_PANDA, PointerToArray) -EXPORT_TEMPLATE_CLASS(EXPCL_PANDA, EXPTP_PANDA, ConstPointerToArray) - -typedef PointerToArray PTA_TexCoordf; -typedef ConstPointerToArray CPTA_TexCoordf; - -// Tell GCC that we'll take care of the instantiation explicitly here. -#ifdef __GNUC__ -#pragma interface -#endif - -#endif diff --git a/panda/src/linmath/pta_Vertexf.cxx b/panda/src/linmath/pta_Vertexf.cxx deleted file mode 100644 index 60421c7a95..0000000000 --- a/panda/src/linmath/pta_Vertexf.cxx +++ /dev/null @@ -1,24 +0,0 @@ -// Filename: pta_Vertexf.cxx -// Created by: drose (10May00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "pta_Vertexf.h" - -// Tell GCC that we'll take care of the instantiation explicitly here. -#ifdef __GNUC__ -#pragma implementation -#endif diff --git a/panda/src/linmath/pta_Vertexf.h b/panda/src/linmath/pta_Vertexf.h deleted file mode 100644 index c9de8c4388..0000000000 --- a/panda/src/linmath/pta_Vertexf.h +++ /dev/null @@ -1,50 +0,0 @@ -// Filename: pta_Vertexf.h -// Created by: drose (10May00) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef PTA_VERTEXF_H -#define PTA_VERTEXF_H - -#include "pandabase.h" - -#include "vector_Vertexf.h" - -#include "pointerToArray.h" - -//////////////////////////////////////////////////////////////////// -// Class : PTA_Vertexf -// Description : A pta of Vertexfs. This class is defined once here, -// and exported to PANDA.DLL; other packages that want -// to use a pta of this type (whether they need to -// export it or not) should include this header file, -// rather than defining the pta again. -//////////////////////////////////////////////////////////////////// - -EXPORT_TEMPLATE_CLASS(EXPCL_PANDA, EXPTP_PANDA, RefCountObj); -EXPORT_TEMPLATE_CLASS(EXPCL_PANDA, EXPTP_PANDA, PointerToBase >); -EXPORT_TEMPLATE_CLASS(EXPCL_PANDA, EXPTP_PANDA, PointerToArray); -EXPORT_TEMPLATE_CLASS(EXPCL_PANDA, EXPTP_PANDA, ConstPointerToArray); - -typedef PointerToArray PTA_Vertexf; -typedef ConstPointerToArray CPTA_Vertexf; - -// Tell GCC that we'll take care of the instantiation explicitly here. -#ifdef __GNUC__ -#pragma interface -#endif - -#endif diff --git a/panda/src/mathutil/fftCompressor.cxx b/panda/src/mathutil/fftCompressor.cxx index 23f56ce6fd..663a6b699f 100644 --- a/panda/src/mathutil/fftCompressor.cxx +++ b/panda/src/mathutil/fftCompressor.cxx @@ -600,10 +600,7 @@ read_reals(DatagramIterator &di, vector_float &array) { // First, check the reject_compression flag. If it's set, we // decided to just write out the stream uncompressed. - bool reject_compression = false; - if (_bam_minor_version >= 8) { - reject_compression = di.get_bool(); - } + bool reject_compression = di.get_bool(); if (reject_compression) { array.reserve(array.size() + length); for (int i = 0; i < length; i++) { diff --git a/panda/src/mesadisplay/Sources.pp b/panda/src/mesadisplay/Sources.pp index eeeceacb1b..6092929990 100644 --- a/panda/src/mesadisplay/Sources.pp +++ b/panda/src/mesadisplay/Sources.pp @@ -19,7 +19,5 @@ osMesaGraphicsStateGuardian.h osMesaGraphicsStateGuardian.cxx \ osMesaGraphicsStateGuardian.I - #define IGATESCAN osMesaGraphicsPipe.h - #end lib_target diff --git a/panda/src/parametrics/ropeNode.cxx b/panda/src/parametrics/ropeNode.cxx index 9e8d8126a1..2eec0c488b 100644 --- a/panda/src/parametrics/ropeNode.cxx +++ b/panda/src/parametrics/ropeNode.cxx @@ -21,8 +21,6 @@ #include "cullTraverserData.h" #include "cullableObject.h" #include "cullHandler.h" -#include "geomLinestrip.h" -#include "geomTristrip.h" #include "renderState.h" #include "renderModeAttrib.h" #include "bamWriter.h" @@ -30,10 +28,10 @@ #include "datagram.h" #include "datagramIterator.h" #include "pStatTimer.h" -#include "qpgeom.h" -#include "qpgeomLinestrips.h" -#include "qpgeomTristrips.h" -#include "qpgeomVertexWriter.h" +#include "geom.h" +#include "geomLinestrips.h" +#include "geomTristrips.h" +#include "geomVertexWriter.h" TypeHandle RopeNode::_type_handle; @@ -259,29 +257,29 @@ recompute_internal_bound() { // rendering, according to the user-specified // requirements. //////////////////////////////////////////////////////////////////// -CPT(qpGeomVertexFormat) RopeNode:: +CPT(GeomVertexFormat) RopeNode:: get_format(bool support_normals) const { - PT(qpGeomVertexArrayFormat) array_format = new qpGeomVertexArrayFormat - (InternalName::get_vertex(), 3, qpGeom::NT_float32, - qpGeom::C_point); + PT(GeomVertexArrayFormat) array_format = new GeomVertexArrayFormat + (InternalName::get_vertex(), 3, Geom::NT_float32, + Geom::C_point); if (support_normals && get_normal_mode() == NM_vertex) { array_format->add_column - (InternalName::get_normal(), 3, qpGeom::NT_float32, - qpGeom::C_vector); + (InternalName::get_normal(), 3, Geom::NT_float32, + Geom::C_vector); } if (get_use_vertex_color()) { array_format->add_column - (InternalName::get_color(), 1, qpGeom::NT_packed_dabc, - qpGeom::C_color); + (InternalName::get_color(), 1, Geom::NT_packed_dabc, + Geom::C_color); } if (get_uv_mode() != UV_none) { array_format->add_column - (InternalName::get_texcoord(), 2, qpGeom::NT_float32, - qpGeom::C_texcoord); + (InternalName::get_texcoord(), 2, Geom::NT_float32, + Geom::C_texcoord); } - return qpGeomVertexFormat::register_format(array_format); + return GeomVertexFormat::register_format(array_format); } //////////////////////////////////////////////////////////////////// @@ -335,80 +333,33 @@ render_thread(CullTraverser *trav, CullTraverserData &data, CurveSegments curve_segments; get_connected_segments(curve_segments, result); - if (use_qpgeom) { - // Now we have stored one or more sequences of vertices down the - // center strips. Go back through and calculate the vertices on - // either side. - PT(qpGeomVertexData) vdata = new qpGeomVertexData - ("rope", get_format(false), qpGeom::UH_stream); - - compute_thread_vertices(vdata, curve_segments); + // Now we have stored one or more sequences of vertices down the + // center strips. Go back through and calculate the vertices on + // either side. + PT(GeomVertexData) vdata = new GeomVertexData + ("rope", get_format(false), Geom::UH_stream); + + compute_thread_vertices(vdata, curve_segments); + + PT(GeomLinestrips) strip = new GeomLinestrips(Geom::UH_stream); + CurveSegments::const_iterator si; + for (si = curve_segments.begin(); si != curve_segments.end(); ++si) { + const CurveSegment &segment = (*si); - PT(qpGeomLinestrips) strip = new qpGeomLinestrips(qpGeom::UH_stream); - CurveSegments::const_iterator si; - for (si = curve_segments.begin(); si != curve_segments.end(); ++si) { - const CurveSegment &segment = (*si); - - strip->add_next_vertices(segment.size()); - strip->close_primitive(); - } - - PT(qpGeom) geom = new qpGeom; - geom->set_vertex_data(vdata); - geom->add_primitive(strip); - - CPT(RenderAttrib) thick = RenderModeAttrib::make(RenderModeAttrib::M_unchanged, get_thickness()); - CPT(RenderState) state = data._state->add_attrib(thick); - - CullableObject *object = new CullableObject(geom, state, - data._modelview_transform); - trav->get_cull_handler()->record_object(object, trav); - - } else { - // Now we have stored one or more sequences of vertices down the - // center strips. Go back through and calculate the vertices on - // either side. - PTA_Vertexf verts; - PTA_TexCoordf uvs; - PTA_Colorf colors; - - compute_thread_vertices(verts, uvs, colors, curve_segments); - - // Finally, build the lengths array to make them into proper - // line strips. - - PTA_int lengths; - int num_prims = 0; - - CurveSegments::const_iterator si; - for (si = curve_segments.begin(); si != curve_segments.end(); ++si) { - const CurveSegment &segment = (*si); - - lengths.push_back(segment.size()); - num_prims++; - } - - PT(GeomLinestrip) geom = new GeomLinestrip; - geom->set_num_prims(num_prims); - geom->set_coords(verts); - if (get_uv_mode() != UV_none) { - geom->set_texcoords(uvs, G_PER_VERTEX); - } - - if (get_use_vertex_color()) { - geom->set_colors(colors, G_PER_VERTEX); - } else { - geom->set_colors(colors, G_OVERALL); - } - geom->set_lengths(lengths); - - CPT(RenderAttrib) thick = RenderModeAttrib::make(RenderModeAttrib::M_unchanged, get_thickness()); - CPT(RenderState) state = data._state->add_attrib(thick); - - CullableObject *object = new CullableObject(geom, state, - data._modelview_transform); - trav->get_cull_handler()->record_object(object, trav); + strip->add_next_vertices(segment.size()); + strip->close_primitive(); } + + PT(Geom) geom = new Geom; + geom->set_vertex_data(vdata); + geom->add_primitive(strip); + + CPT(RenderAttrib) thick = RenderModeAttrib::make(RenderModeAttrib::M_unchanged, get_thickness()); + CPT(RenderState) state = data._state->add_attrib(thick); + + CullableObject *object = new CullableObject(geom, state, + data._modelview_transform); + trav->get_cull_handler()->record_object(object, trav); } //////////////////////////////////////////////////////////////////// @@ -427,79 +378,31 @@ render_tape(CullTraverser *trav, CullTraverserData &data, CurveSegments curve_segments; get_connected_segments(curve_segments, result); - if (use_qpgeom) { - // Now we have stored one or more sequences of vertices down the - // center strips. Go back through and calculate the vertices on - // either side. - PT(qpGeomVertexData) vdata = new qpGeomVertexData - ("rope", get_format(false), qpGeom::UH_stream); - - compute_billboard_vertices(vdata, -get_tube_up(), - curve_segments, result); - - PT(qpGeomTristrips) strip = new qpGeomTristrips(qpGeom::UH_stream); - CurveSegments::const_iterator si; - for (si = curve_segments.begin(); si != curve_segments.end(); ++si) { - const CurveSegment &segment = (*si); - - strip->add_next_vertices(segment.size() * 2); - strip->close_primitive(); - } - - PT(qpGeom) geom = new qpGeom; - geom->set_vertex_data(vdata); - geom->add_primitive(strip); - - CullableObject *object = new CullableObject(geom, data._state, - data._modelview_transform); - trav->get_cull_handler()->record_object(object, trav); - - } else { - // Now we have stored one or more sequences of vertices down the - // center strips. Go back through and calculate the vertices on - // either side. - - PTA_Vertexf verts; - PTA_TexCoordf uvs; - PTA_Colorf colors; - - compute_billboard_vertices(verts, uvs, colors, -get_tube_up(), - curve_segments, result); - - // Finally, build the lengths array to make them into proper - // triangle strips. We don't need a vindex array here, since the - // vertices just happened to end up in tristrip order. - - PTA_int lengths; - int num_prims = 0; - - CurveSegments::const_iterator si; - for (si = curve_segments.begin(); si != curve_segments.end(); ++si) { - const CurveSegment &segment = (*si); - - lengths.push_back(segment.size() * 2); - num_prims++; - } - - // And create a Geom for the rendering. + // Now we have stored one or more sequences of vertices down the + // center strips. Go back through and calculate the vertices on + // either side. + PT(GeomVertexData) vdata = new GeomVertexData + ("rope", get_format(false), Geom::UH_stream); - PT(Geom) geom = new GeomTristrip; - geom->set_num_prims(num_prims); - geom->set_coords(verts); - if (get_uv_mode() != UV_none) { - geom->set_texcoords(uvs, G_PER_VERTEX); - } - if (get_use_vertex_color()) { - geom->set_colors(colors, G_PER_VERTEX); - } else { - geom->set_colors(colors, G_OVERALL); - } - geom->set_lengths(lengths); + compute_billboard_vertices(vdata, -get_tube_up(), + curve_segments, result); + + PT(GeomTristrips) strip = new GeomTristrips(Geom::UH_stream); + CurveSegments::const_iterator si; + for (si = curve_segments.begin(); si != curve_segments.end(); ++si) { + const CurveSegment &segment = (*si); - CullableObject *object = new CullableObject(geom, data._state, - data._modelview_transform); - trav->get_cull_handler()->record_object(object, trav); + strip->add_next_vertices(segment.size() * 2); + strip->close_primitive(); } + + PT(Geom) geom = new Geom; + geom->set_vertex_data(vdata); + geom->add_primitive(strip); + + CullableObject *object = new CullableObject(geom, data._state, + data._modelview_transform); + trav->get_cull_handler()->record_object(object, trav); } //////////////////////////////////////////////////////////////////// @@ -525,79 +428,31 @@ render_billboard(CullTraverser *trav, CullTraverserData &data, CurveSegments curve_segments; get_connected_segments(curve_segments, result); - if (use_qpgeom) { - // Now we have stored one or more sequences of vertices down the - // center strips. Go back through and calculate the vertices on - // either side. - PT(qpGeomVertexData) vdata = new qpGeomVertexData - ("rope", get_format(false), qpGeom::UH_stream); - - compute_billboard_vertices(vdata, camera_vec, - curve_segments, result); + // Now we have stored one or more sequences of vertices down the + // center strips. Go back through and calculate the vertices on + // either side. + PT(GeomVertexData) vdata = new GeomVertexData + ("rope", get_format(false), Geom::UH_stream); + + compute_billboard_vertices(vdata, camera_vec, + curve_segments, result); + + PT(GeomTristrips) strip = new GeomTristrips(Geom::UH_stream); + CurveSegments::const_iterator si; + for (si = curve_segments.begin(); si != curve_segments.end(); ++si) { + const CurveSegment &segment = (*si); - PT(qpGeomTristrips) strip = new qpGeomTristrips(qpGeom::UH_stream); - CurveSegments::const_iterator si; - for (si = curve_segments.begin(); si != curve_segments.end(); ++si) { - const CurveSegment &segment = (*si); - - strip->add_next_vertices(segment.size() * 2); - strip->close_primitive(); - } - - PT(qpGeom) geom = new qpGeom; - geom->set_vertex_data(vdata); - geom->add_primitive(strip); - - CullableObject *object = new CullableObject(geom, data._state, - data._modelview_transform); - trav->get_cull_handler()->record_object(object, trav); - - } else { - // Now we have stored one or more sequences of vertices down the - // center strips. Go back through and calculate the vertices on - // either side. - - PTA_Vertexf verts; - PTA_TexCoordf uvs; - PTA_Colorf colors; - - compute_billboard_vertices(verts, uvs, colors, camera_vec, - curve_segments, result); - - // Finally, build the lengths array to make them into proper - // triangle strips. We don't need a vindex array here, since the - // vertices just happened to end up in tristrip order. - - PTA_int lengths; - int num_prims = 0; - - CurveSegments::const_iterator si; - for (si = curve_segments.begin(); si != curve_segments.end(); ++si) { - const CurveSegment &segment = (*si); - - lengths.push_back(segment.size() * 2); - num_prims++; - } - - // And create a Geom for the rendering. - - PT(Geom) geom = new GeomTristrip; - geom->set_num_prims(num_prims); - geom->set_coords(verts); - if (get_uv_mode() != UV_none) { - geom->set_texcoords(uvs, G_PER_VERTEX); - } - if (get_use_vertex_color()) { - geom->set_colors(colors, G_PER_VERTEX); - } else { - geom->set_colors(colors, G_OVERALL); - } - geom->set_lengths(lengths); - - CullableObject *object = new CullableObject(geom, data._state, - data._modelview_transform); - trav->get_cull_handler()->record_object(object, trav); + strip->add_next_vertices(segment.size() * 2); + strip->close_primitive(); } + + PT(Geom) geom = new Geom; + geom->set_vertex_data(vdata); + geom->add_primitive(strip); + + CullableObject *object = new CullableObject(geom, data._state, + data._modelview_transform); + trav->get_cull_handler()->record_object(object, trav); } //////////////////////////////////////////////////////////////////// @@ -621,101 +476,40 @@ render_tube(CullTraverser *trav, CullTraverserData &data, int num_slices = get_num_slices(); int num_verts_per_slice; - if (use_qpgeom) { - PT(qpGeomVertexData) vdata = new qpGeomVertexData - ("rope", get_format(true), qpGeom::UH_stream); - - compute_tube_vertices(vdata, - num_verts_per_slice, curve_segments, result); + PT(GeomVertexData) vdata = new GeomVertexData + ("rope", get_format(true), Geom::UH_stream); + + compute_tube_vertices(vdata, num_verts_per_slice, + curve_segments, result); + + PT(GeomTristrips) strip = new GeomTristrips(Geom::UH_stream); + // Finally, go through build up the index array, to tie all the + // triangle strips together. + int vi = 0; + CurveSegments::const_iterator si; + for (si = curve_segments.begin(); si != curve_segments.end(); ++si) { + const CurveSegment &segment = (*si); - PT(qpGeomTristrips) strip = new qpGeomTristrips(qpGeom::UH_stream); - // Finally, go through build up the index array, to tie all the - // triangle strips together. - int vi = 0; - CurveSegments::const_iterator si; - for (si = curve_segments.begin(); si != curve_segments.end(); ++si) { - const CurveSegment &segment = (*si); + for (int s = 0; s < num_slices; ++s) { + int s1 = (s + 1) % num_verts_per_slice; - for (int s = 0; s < num_slices; ++s) { - int s1 = (s + 1) % num_verts_per_slice; - - for (size_t j = 0; j < segment.size(); ++j) { - strip->add_vertex((vi + j) * num_verts_per_slice + s); - strip->add_vertex((vi + j) * num_verts_per_slice + s1); - } - - strip->close_primitive(); + for (size_t j = 0; j < segment.size(); ++j) { + strip->add_vertex((vi + j) * num_verts_per_slice + s); + strip->add_vertex((vi + j) * num_verts_per_slice + s1); } - vi += (int)segment.size(); - } - - PT(qpGeom) geom = new qpGeom; - geom->set_vertex_data(vdata); - geom->add_primitive(strip); - - CullableObject *object = new CullableObject(geom, data._state, - data._modelview_transform); - trav->get_cull_handler()->record_object(object, trav); - - } else { - PTA_Vertexf verts; - PTA_Normalf normals; - PTA_TexCoordf uvs; - PTA_Colorf colors; - - compute_tube_vertices(verts, normals, uvs, colors, - num_verts_per_slice, curve_segments, result); - - // Finally, go back one more time and build up the vindex array, to - // tie all the triangle strips together. - - PTA_ushort vindex; - PTA_int lengths; - - int num_prims = 0; - int vi = 0; - CurveSegments::const_iterator si; - for (si = curve_segments.begin(); si != curve_segments.end(); ++si) { - const CurveSegment &segment = (*si); - for (int s = 0; s < num_slices; ++s) { - int s1 = (s + 1) % num_verts_per_slice; - - for (size_t j = 0; j < segment.size(); ++j) { - vindex.push_back((vi + j) * num_verts_per_slice + s); - vindex.push_back((vi + j) * num_verts_per_slice + s1); - } - - lengths.push_back(segment.size() * 2); - num_prims++; - } - vi += (int)segment.size(); + strip->close_primitive(); } - - // And create a Geom for the rendering. - - PT(Geom) geom = new GeomTristrip; - geom->set_num_prims(num_prims); - geom->set_coords(verts, vindex); - if (get_uv_mode() != UV_none) { - geom->set_texcoords(uvs, G_PER_VERTEX, vindex); - } - - if (get_normal_mode() == NM_vertex) { - geom->set_normals(normals, G_PER_VERTEX, vindex); - } - - if (get_use_vertex_color()) { - geom->set_colors(colors, G_PER_VERTEX, vindex); - } else { - geom->set_colors(colors, G_OVERALL); - } - geom->set_lengths(lengths); - - CullableObject *object = new CullableObject(geom, data._state, - data._modelview_transform); - trav->get_cull_handler()->record_object(object, trav); + vi += (int)segment.size(); } + + PT(Geom) geom = new Geom; + geom->set_vertex_data(vdata); + geom->add_primitive(strip); + + CullableObject *object = new CullableObject(geom, data._state, + data._modelview_transform); + trav->get_cull_handler()->record_object(object, trav); } //////////////////////////////////////////////////////////////////// @@ -789,11 +583,11 @@ get_connected_segments(RopeNode::CurveSegments &curve_segments, // the array. //////////////////////////////////////////////////////////////////// void RopeNode:: -compute_thread_vertices(qpGeomVertexData *vdata, +compute_thread_vertices(GeomVertexData *vdata, const RopeNode::CurveSegments &curve_segments) const { - qpGeomVertexWriter vertex(vdata, InternalName::get_vertex()); - qpGeomVertexWriter color(vdata, InternalName::get_color()); - qpGeomVertexWriter texcoord(vdata, InternalName::get_texcoord()); + GeomVertexWriter vertex(vdata, InternalName::get_vertex()); + GeomVertexWriter color(vdata, InternalName::get_color()); + GeomVertexWriter texcoord(vdata, InternalName::get_texcoord()); UVMode uv_mode = get_uv_mode(); float uv_scale = get_uv_scale(); @@ -832,13 +626,13 @@ compute_thread_vertices(qpGeomVertexData *vdata, // computed point in curve_segments. //////////////////////////////////////////////////////////////////// void RopeNode:: -compute_billboard_vertices(qpGeomVertexData *vdata, +compute_billboard_vertices(GeomVertexData *vdata, const LVector3f &camera_vec, const RopeNode::CurveSegments &curve_segments, NurbsCurveResult *result) const { - qpGeomVertexWriter vertex(vdata, InternalName::get_vertex()); - qpGeomVertexWriter color(vdata, InternalName::get_color()); - qpGeomVertexWriter texcoord(vdata, InternalName::get_texcoord()); + GeomVertexWriter vertex(vdata, InternalName::get_vertex()); + GeomVertexWriter color(vdata, InternalName::get_color()); + GeomVertexWriter texcoord(vdata, InternalName::get_texcoord()); float thickness = get_thickness(); float radius = thickness * 0.5f; @@ -889,14 +683,14 @@ compute_billboard_vertices(qpGeomVertexData *vdata, // curve_segments. //////////////////////////////////////////////////////////////////// void RopeNode:: -compute_tube_vertices(qpGeomVertexData *vdata, +compute_tube_vertices(GeomVertexData *vdata, int &num_verts_per_slice, const RopeNode::CurveSegments &curve_segments, NurbsCurveResult *result) const { - qpGeomVertexWriter vertex(vdata, InternalName::get_vertex()); - qpGeomVertexWriter normal(vdata, InternalName::get_normal()); - qpGeomVertexWriter color(vdata, InternalName::get_color()); - qpGeomVertexWriter texcoord(vdata, InternalName::get_texcoord()); + GeomVertexWriter vertex(vdata, InternalName::get_vertex()); + GeomVertexWriter normal(vdata, InternalName::get_normal()); + GeomVertexWriter color(vdata, InternalName::get_color()); + GeomVertexWriter texcoord(vdata, InternalName::get_texcoord()); int num_slices = get_num_slices(); num_verts_per_slice = num_slices; @@ -961,187 +755,6 @@ compute_tube_vertices(qpGeomVertexData *vdata, } } -//////////////////////////////////////////////////////////////////// -// Function: RopeNode::compute_thread_vertices -// Access: Private -// Description: Calculates the vertices for a RM_thread render. This -// just copies the vertices more-or-less directly into -// the array. -//////////////////////////////////////////////////////////////////// -void RopeNode:: -compute_thread_vertices(PTA_Vertexf &verts, PTA_TexCoordf &uvs, - PTA_Colorf &colors, - const RopeNode::CurveSegments &curve_segments) const { - UVMode uv_mode = get_uv_mode(); - float uv_scale = get_uv_scale(); - bool u_dominant = get_uv_direction(); - bool use_vertex_color = get_use_vertex_color(); - - float dist = 0.0f; - CurveSegments::const_iterator si; - for (si = curve_segments.begin(); si != curve_segments.end(); ++si) { - const CurveSegment &segment = (*si); - for (size_t j = 0; j < segment.size(); ++j) { - verts.push_back(segment[j]._p); - - if (use_vertex_color) { - colors.push_back(segment[j]._c); - } - - float uv_t = compute_uv_t(dist, uv_mode, uv_scale, segment, j); - - if (uv_mode != UV_none) { - if (u_dominant) { - uvs.push_back(TexCoordf(uv_t, 0.0f)); - } else { - uvs.push_back(TexCoordf(0.0f, uv_t)); - } - } - } - } - - if (!use_vertex_color) { - colors.push_back(Colorf(1.0f, 1.0f, 1.0f, 1.0f)); - } -} - -//////////////////////////////////////////////////////////////////// -// Function: RopeNode::compute_billboard_vertices -// Access: Private -// Description: Calculates the vertices for a RM_billboard render. This -// puts a pair of vertices on either side of each -// computed point in curve_segments. -//////////////////////////////////////////////////////////////////// -void RopeNode:: -compute_billboard_vertices(PTA_Vertexf &verts, PTA_TexCoordf &uvs, - PTA_Colorf &colors, const LVector3f &camera_vec, - const RopeNode::CurveSegments &curve_segments, - NurbsCurveResult *result) const { - float thickness = get_thickness(); - float radius = thickness * 0.5f; - UVMode uv_mode = get_uv_mode(); - float uv_scale = get_uv_scale(); - bool u_dominant = get_uv_direction(); - bool use_vertex_color = get_use_vertex_color(); - - float dist = 0.0f; - CurveSegments::const_iterator si; - for (si = curve_segments.begin(); si != curve_segments.end(); ++si) { - const CurveSegment &segment = (*si); - for (size_t j = 0; j < segment.size(); ++j) { - LVector3f tangent; - compute_tangent(tangent, segment, j, result); - - LVector3f normal = cross(tangent, camera_vec); - normal.normalize(); - - verts.push_back(segment[j]._p + normal * radius); - verts.push_back(segment[j]._p - normal * radius); - - if (use_vertex_color) { - colors.push_back(segment[j]._c); - colors.push_back(segment[j]._c); - } - - float uv_t = compute_uv_t(dist, uv_mode, uv_scale, segment, j); - - if (uv_mode != UV_none) { - if (u_dominant) { - uvs.push_back(TexCoordf(uv_t, 1.0f)); - uvs.push_back(TexCoordf(uv_t, 0.0f)); - } else { - uvs.push_back(TexCoordf(1.0f, uv_t)); - uvs.push_back(TexCoordf(0.0f, uv_t)); - } - } - } - } - - if (!use_vertex_color) { - colors.push_back(Colorf(1.0f, 1.0f, 1.0f, 1.0f)); - } -} - -//////////////////////////////////////////////////////////////////// -// Function: RopeNode::compute_tube_vertices -// Access: Private -// Description: Calculates the vertices for a RM_tube render. This -// puts a ring of vertices around each computed point in -// curve_segments. -//////////////////////////////////////////////////////////////////// -void RopeNode:: -compute_tube_vertices(PTA_Vertexf &verts, PTA_Normalf &normals, - PTA_TexCoordf &uvs, PTA_Colorf &colors, - int &num_verts_per_slice, - const RopeNode::CurveSegments &curve_segments, - NurbsCurveResult *result) const { - int num_slices = get_num_slices(); - num_verts_per_slice = num_slices; - - float thickness = get_thickness(); - float radius = thickness * 0.5f; - UVMode uv_mode = get_uv_mode(); - float uv_scale = get_uv_scale(); - bool u_dominant = get_uv_direction(); - NormalMode normal_mode = get_normal_mode(); - bool use_vertex_color = get_use_vertex_color(); - - // If we are generating UV's, we will need to duplicate the vertices - // along the seam so that the UV's go through the whole range of - // 0..1 instead of reflecting in the last polygon before the seam. - if (uv_mode != UV_none) { - ++num_verts_per_slice; - } - - LVector3f up = get_tube_up(); - - float dist = 0.0f; - CurveSegments::const_iterator si; - for (si = curve_segments.begin(); si != curve_segments.end(); ++si) { - const CurveSegment &segment = (*si); - for (size_t j = 0; j < segment.size(); ++j) { - LVector3f tangent; - compute_tangent(tangent, segment, j, result); - - LVector3f normal = cross(tangent, up); - normal.normalize(); - up = cross(normal, tangent); - - LMatrix3f rotate = LMatrix3f::rotate_mat(360.0f / (float)num_slices, - tangent); - - float uv_t = compute_uv_t(dist, uv_mode, uv_scale, segment, j); - - for (int s = 0; s < num_verts_per_slice; ++s) { - verts.push_back(segment[j]._p + normal * radius); - - if (normal_mode == NM_vertex) { - normals.push_back(normal); - } - - if (use_vertex_color) { - colors.push_back(segment[j]._c); - } - - normal = normal * rotate; - - if (uv_mode != UV_none) { - float uv_s = (float)s / (float)num_slices; - if (u_dominant) { - uvs.push_back(TexCoordf(uv_t, uv_s)); - } else { - uvs.push_back(TexCoordf(uv_s, uv_t)); - } - } - } - } - } - - if (!use_vertex_color) { - colors.push_back(Colorf(1.0f, 1.0f, 1.0f, 1.0f)); - } -} - //////////////////////////////////////////////////////////////////// // Function: RopeNode::compute_tangent // Access: Private, Static diff --git a/panda/src/parametrics/ropeNode.h b/panda/src/parametrics/ropeNode.h index 95c6563f61..4d0a8ed753 100644 --- a/panda/src/parametrics/ropeNode.h +++ b/panda/src/parametrics/ropeNode.h @@ -23,9 +23,9 @@ #include "nurbsCurveEvaluator.h" #include "pandaNode.h" #include "pStatCollector.h" -#include "qpgeomVertexFormat.h" +#include "geomVertexFormat.h" -class qpGeomVertexData; +class GeomVertexData; //////////////////////////////////////////////////////////////////// // Class : RopeNode @@ -146,7 +146,7 @@ protected: virtual BoundingVolume *recompute_internal_bound(); private: - CPT(qpGeomVertexFormat) get_format(bool support_normals) const; + CPT(GeomVertexFormat) get_format(bool support_normals) const; BoundingVolume *do_recompute_bound(const NodePath &rel_to); void render_thread(CullTraverser *trav, CullTraverserData &data, @@ -170,27 +170,13 @@ private: void get_connected_segments(CurveSegments &curve_segments, const NurbsCurveResult *result) const; - void compute_thread_vertices(qpGeomVertexData *vdata, + void compute_thread_vertices(GeomVertexData *vdata, const CurveSegments &curve_segments) const; - void compute_billboard_vertices(qpGeomVertexData *vdata, + void compute_billboard_vertices(GeomVertexData *vdata, const LVector3f &camera_vec, const CurveSegments &curve_segments, NurbsCurveResult *result) const; - void compute_tube_vertices(qpGeomVertexData *vdata, - int &num_verts_per_slice, - const CurveSegments &curve_segments, - NurbsCurveResult *result) const; - - void compute_thread_vertices(PTA_Vertexf &verts, PTA_TexCoordf &uvs, - PTA_Colorf &colors, - const CurveSegments &curve_segments) const; - void compute_billboard_vertices(PTA_Vertexf &verts, PTA_TexCoordf &uvs, - PTA_Colorf &colors, - const LVector3f &camera_vec, - const CurveSegments &curve_segments, - NurbsCurveResult *result) const; - void compute_tube_vertices(PTA_Vertexf &verts, PTA_Normalf &normals, - PTA_TexCoordf &uvs, PTA_Colorf &colors, + void compute_tube_vertices(GeomVertexData *vdata, int &num_verts_per_slice, const CurveSegments &curve_segments, NurbsCurveResult *result) const; diff --git a/panda/src/parametrics/sheetNode.cxx b/panda/src/parametrics/sheetNode.cxx index a87c71b055..ad92a76097 100644 --- a/panda/src/parametrics/sheetNode.cxx +++ b/panda/src/parametrics/sheetNode.cxx @@ -21,15 +21,14 @@ #include "cullTraverserData.h" #include "cullableObject.h" #include "cullHandler.h" -#include "geomTristrip.h" #include "bamWriter.h" #include "bamReader.h" #include "datagram.h" #include "datagramIterator.h" #include "pStatTimer.h" -#include "qpgeom.h" -#include "qpgeomTristrips.h" -#include "qpgeomVertexWriter.h" +#include "geom.h" +#include "geomTristrips.h" +#include "geomVertexWriter.h" TypeHandle SheetNode::_type_handle; @@ -272,140 +271,68 @@ render_sheet(CullTraverser *trav, CullTraverserData &data, int num_u_verts = get_num_u_subdiv() + 1; int num_v_verts = get_num_v_subdiv() + 1; - if (use_qpgeom) { - CPT(qpGeomVertexFormat) format; - if (use_vertex_color) { - format = qpGeomVertexFormat::get_v3n3cpt2(); - } else { - format = qpGeomVertexFormat::get_v3n3t2(); - } - PT(qpGeomVertexData) vdata = new qpGeomVertexData - ("sheet", format, qpGeom::UH_stream); - qpGeomVertexWriter vertex(vdata, InternalName::get_vertex()); - qpGeomVertexWriter normal(vdata, InternalName::get_normal()); - qpGeomVertexWriter color(vdata, InternalName::get_color()); - qpGeomVertexWriter texcoord(vdata, InternalName::get_texcoord()); - - PT(qpGeomTristrips) strip = new qpGeomTristrips(qpGeom::UH_stream); - for (int ui = 0; ui < num_u_segments; ui++) { - for (int uni = 0; uni < num_u_verts; uni++) { - float u0 = (float)uni / (float)num_u_verts; - float u1 = (float)(uni + 1) / (float)num_u_verts; - float u0_tc = result->get_segment_u(ui, u0); - float u1_tc = result->get_segment_u(ui, u1); - - for (int vi = 0; vi < num_v_segments; vi++) { - for (int vni = 0; vni < num_v_verts; vni++) { - float v = (float)vni / (float)(num_v_verts - 1); - float v_tc = result->get_segment_v(vi, v); - - LPoint3f point; - LVector3f norm; - result->eval_segment_point(ui, vi, u0, v, point); - result->eval_segment_normal(ui, vi, u0, v, norm); - vertex.add_data3f(point); - normal.add_data3f(norm); - texcoord.add_data2f(u0_tc, v_tc); - - result->eval_segment_point(ui, vi, u1, v, point); - result->eval_segment_normal(ui, vi, u1, v, norm); - vertex.add_data3f(point); - normal.add_data3f(norm); - texcoord.add_data2f(u1_tc, v_tc); - - if (use_vertex_color) { - Colorf c0, c1; - result->eval_segment_extended_points(ui, vi, u0, v, 0, &c0[0], 4); - result->eval_segment_extended_points(ui, vi, u1, v, 0, &c1[0], 4); - - color.add_data4f(c0); - color.add_data4f(c1); - } - } - strip->add_next_vertices(num_v_verts * 2); - strip->close_primitive(); - } - } - } - - PT(qpGeom) geom = new qpGeom; - geom->set_vertex_data(vdata); - geom->add_primitive(strip); - - CullableObject *object = new CullableObject(geom, data._state, - data._modelview_transform); - trav->get_cull_handler()->record_object(object, trav); - + CPT(GeomVertexFormat) format; + if (use_vertex_color) { + format = GeomVertexFormat::get_v3n3cpt2(); } else { - PTA_Vertexf verts; - PTA_Normalf normals; - PTA_TexCoordf uvs; - PTA_Colorf colors; - PTA_int lengths; - - // We define a series of triangle strips, parallel to the V - // direction. - - for (int ui = 0; ui < num_u_segments; ui++) { - for (int uni = 0; uni < num_u_verts; uni++) { - float u0 = (float)uni / (float)num_u_verts; - float u1 = (float)(uni + 1) / (float)num_u_verts; - float u0_tc = result->get_segment_u(ui, u0); - float u1_tc = result->get_segment_u(ui, u1); - - for (int vi = 0; vi < num_v_segments; vi++) { - for (int vni = 0; vni < num_v_verts; vni++) { - float v = (float)vni / (float)(num_v_verts - 1); - float v_tc = result->get_segment_v(vi, v); - - LPoint3f point; - LVector3f normal; - result->eval_segment_point(ui, vi, u0, v, point); - result->eval_segment_normal(ui, vi, u0, v, normal); - verts.push_back(point); - normals.push_back(normal); - uvs.push_back(TexCoordf(u0_tc, v_tc)); - - result->eval_segment_point(ui, vi, u1, v, point); - result->eval_segment_normal(ui, vi, u1, v, normal); - verts.push_back(point); - normals.push_back(normal); - uvs.push_back(TexCoordf(u1_tc, v_tc)); - - if (use_vertex_color) { - Colorf c0, c1; - result->eval_segment_extended_points(ui, vi, u0, v, 0, &c0[0], 4); - result->eval_segment_extended_points(ui, vi, u1, v, 0, &c1[0], 4); - - colors.push_back(c0); - colors.push_back(c1); - } + format = GeomVertexFormat::get_v3n3t2(); + } + PT(GeomVertexData) vdata = new GeomVertexData + ("sheet", format, Geom::UH_stream); + GeomVertexWriter vertex(vdata, InternalName::get_vertex()); + GeomVertexWriter normal(vdata, InternalName::get_normal()); + GeomVertexWriter color(vdata, InternalName::get_color()); + GeomVertexWriter texcoord(vdata, InternalName::get_texcoord()); + + PT(GeomTristrips) strip = new GeomTristrips(Geom::UH_stream); + for (int ui = 0; ui < num_u_segments; ui++) { + for (int uni = 0; uni < num_u_verts; uni++) { + float u0 = (float)uni / (float)num_u_verts; + float u1 = (float)(uni + 1) / (float)num_u_verts; + float u0_tc = result->get_segment_u(ui, u0); + float u1_tc = result->get_segment_u(ui, u1); + + for (int vi = 0; vi < num_v_segments; vi++) { + for (int vni = 0; vni < num_v_verts; vni++) { + float v = (float)vni / (float)(num_v_verts - 1); + float v_tc = result->get_segment_v(vi, v); + + LPoint3f point; + LVector3f norm; + result->eval_segment_point(ui, vi, u0, v, point); + result->eval_segment_normal(ui, vi, u0, v, norm); + vertex.add_data3f(point); + normal.add_data3f(norm); + texcoord.add_data2f(u0_tc, v_tc); + + result->eval_segment_point(ui, vi, u1, v, point); + result->eval_segment_normal(ui, vi, u1, v, norm); + vertex.add_data3f(point); + normal.add_data3f(norm); + texcoord.add_data2f(u1_tc, v_tc); + + if (use_vertex_color) { + Colorf c0, c1; + result->eval_segment_extended_points(ui, vi, u0, v, 0, &c0[0], 4); + result->eval_segment_extended_points(ui, vi, u1, v, 0, &c1[0], 4); + + color.add_data4f(c0); + color.add_data4f(c1); } - lengths.push_back(num_v_verts * 2); } + strip->add_next_vertices(num_v_verts * 2); + strip->close_primitive(); } } - - colors.push_back(Colorf(1.0f, 1.0f, 1.0f, 1.0f)); - - PT(GeomTristrip) geom = new GeomTristrip; - geom->set_num_prims(lengths.size()); - geom->set_coords(verts); - geom->set_normals(normals, G_PER_VERTEX); - geom->set_texcoords(uvs, G_PER_VERTEX); - - if (use_vertex_color) { - geom->set_colors(colors, G_PER_VERTEX); - } else { - colors.push_back(Colorf(1.0f, 1.0f, 1.0f, 1.0f)); - geom->set_colors(colors, G_OVERALL); - } - geom->set_lengths(lengths); - - CullableObject *object = new CullableObject(geom, data._state, - data._modelview_transform); - trav->get_cull_handler()->record_object(object, trav); } + + PT(Geom) geom = new Geom; + geom->set_vertex_data(vdata); + geom->add_primitive(strip); + + CullableObject *object = new CullableObject(geom, data._state, + data._modelview_transform); + trav->get_cull_handler()->record_object(object, trav); } //////////////////////////////////////////////////////////////////// diff --git a/panda/src/particlesystem/geomParticleRenderer.cxx b/panda/src/particlesystem/geomParticleRenderer.cxx index 7e817e22c0..df0bdf14d1 100644 --- a/panda/src/particlesystem/geomParticleRenderer.cxx +++ b/panda/src/particlesystem/geomParticleRenderer.cxx @@ -33,8 +33,8 @@ GeomParticleRenderer:: GeomParticleRenderer(ParticleRendererAlphaMode am, PandaNode *geom_node) : BaseParticleRenderer(am), _geom_node(geom_node), - _pool_size(0), - _color_interpolation_manager(new ColorInterpolationManager(Colorf(1.0f,1.0f,1.0f,1.0f))) + _color_interpolation_manager(new ColorInterpolationManager(Colorf(1.0f,1.0f,1.0f,1.0f))), + _pool_size(0) { if (_geom_node.is_null()) _geom_node = new PandaNode("empty"); diff --git a/panda/src/particlesystem/lineParticleRenderer.cxx b/panda/src/particlesystem/lineParticleRenderer.cxx index f78d109d83..e8da583cf1 100644 --- a/panda/src/particlesystem/lineParticleRenderer.cxx +++ b/panda/src/particlesystem/lineParticleRenderer.cxx @@ -19,9 +19,9 @@ #include "lineParticleRenderer.h" #include "boundingSphere.h" #include "geomNode.h" -#include "qpgeom.h" -#include "qpgeomVertexWriter.h" -#include "geomLine.h" +#include "geom.h" +#include "geomVertexWriter.h" +#include "indent.h" //////////////////////////////////////////////////////////////////// // Function : LineParticleRenderer @@ -120,11 +120,6 @@ kill_particle(int) { void LineParticleRenderer:: resize_pool(int new_size) { - if (!use_qpgeom) { - _vertex_array = PTA_Vertexf::empty_array(new_size * 2); - _color_array = PTA_Colorf::empty_array(new_size * 2); - } - _max_pool_size = new_size; init_geoms(); @@ -138,21 +133,14 @@ resize_pool(int new_size) { void LineParticleRenderer:: init_geoms() { - if (use_qpgeom) { - PT(qpGeom) qpgeom = new qpGeom; - _line_primitive = qpgeom; - _vdata = new qpGeomVertexData - ("particles", qpGeomVertexFormat::get_v3cp(), - qpGeom::UH_dynamic); - qpgeom->set_vertex_data(_vdata); - _lines = new qpGeomLines(qpGeom::UH_dynamic); - qpgeom->add_primitive(_lines); - - } else { - _line_primitive = new GeomLine; - _line_primitive->set_coords(_vertex_array); - _line_primitive->set_colors(_color_array, G_PER_VERTEX); - } + PT(Geom) geom = new Geom; + _line_primitive = geom; + _vdata = new GeomVertexData + ("particles", GeomVertexFormat::get_v3cp(), + Geom::UH_dynamic); + geom->set_vertex_data(_vdata); + _lines = new GeomLines(Geom::UH_dynamic); + geom->add_primitive(_lines); GeomNode *render_node = get_render_node(); render_node->remove_all_geoms(); @@ -176,13 +164,9 @@ render(pvector< PT(PhysicsObject) >& po_vector, int ttl_particles) { int remaining_particles = ttl_particles; int i; - Vertexf *cur_vert = &_vertex_array[0]; - Colorf *cur_color = &_color_array[0]; - qpGeomVertexWriter vertex(_vdata, InternalName::get_vertex()); - qpGeomVertexWriter color(_vdata, InternalName::get_color()); - if (use_qpgeom) { - _lines->clear_vertices(); - } + GeomVertexWriter vertex(_vdata, InternalName::get_vertex()); + GeomVertexWriter color(_vdata, InternalName::get_color()); + _lines->clear_vertices(); // init the aabb @@ -243,35 +227,20 @@ render(pvector< PT(PhysicsObject) >& po_vector, int ttl_particles) { // one line from current position to last position - if (use_qpgeom) { - vertex.add_data3f(position); - LPoint3f last_position = position + - (cur_particle->get_last_position() - position) * _line_scale_factor; - vertex.add_data3f(last_position); - color.add_data4f(head_color); - color.add_data4f(tail_color); - _lines->add_next_vertices(2); - _lines->close_primitive(); - } else { - LPoint3f last_position = position + - (cur_particle->get_last_position() - position) * _line_scale_factor; - - *cur_vert++ = position; - *cur_vert++ = last_position; - - *cur_color++ = head_color; - *cur_color++ = tail_color; - } + vertex.add_data3f(position); + LPoint3f last_position = position + + (cur_particle->get_last_position() - position) * _line_scale_factor; + vertex.add_data3f(last_position); + color.add_data4f(head_color); + color.add_data4f(tail_color); + _lines->add_next_vertices(2); + _lines->close_primitive(); remaining_particles--; if (remaining_particles == 0) break; } - if (!use_qpgeom) { - _line_primitive->set_num_prims(ttl_particles); - } - // done filling geomline node, now do the bb stuff LPoint3f aabb_center = (_aabb_min + _aabb_max) * 0.5f; @@ -301,17 +270,13 @@ output(ostream &out) const { // . //////////////////////////////////////////////////////////////////// void LineParticleRenderer:: -write(ostream &out, int indent) const { - #ifndef NDEBUG //[ - out.width(indent); out<<""; out<<"LineParticleRenderer:\n"; - out.width(indent+2); out<<""; out<<"_head_color "<<_head_color<<"\n"; - out.width(indent+2); out<<""; out<<"_tail_color "<<_tail_color<<"\n"; - out.width(indent+2); out<<""; out<<"_line_primitive "<<_line_primitive<<"\n"; - out.width(indent+2); out<<""; out<<"_vertex_array "<<_vertex_array<<"\n"; - out.width(indent+2); out<<""; out<<"_color_array "<<_color_array<<"\n"; - out.width(indent+2); out<<""; out<<"_max_pool_size "<<_max_pool_size<<"\n"; - out.width(indent+2); out<<""; out<<"_aabb_min "<<_aabb_min<<"\n"; - out.width(indent+2); out<<""; out<<"_aabb_max "<<_aabb_max<<"\n"; - BaseParticleRenderer::write(out, indent+2); - #endif //] NDEBUG +write(ostream &out, int indent_level) const { + indent(out, indent_level) << "LineParticleRenderer:\n"; + indent(out, indent_level + 2) << "_head_color "<<_head_color<<"\n"; + indent(out, indent_level + 2) << "_tail_color "<<_tail_color<<"\n"; + indent(out, indent_level + 2) << "_line_primitive "<<_line_primitive<<"\n"; + indent(out, indent_level + 2) << "_max_pool_size "<<_max_pool_size<<"\n"; + indent(out, indent_level + 2) << "_aabb_min "<<_aabb_min<<"\n"; + indent(out, indent_level + 2) << "_aabb_max "<<_aabb_max<<"\n"; + BaseParticleRenderer::write(out, indent_level + 2); } diff --git a/panda/src/particlesystem/lineParticleRenderer.h b/panda/src/particlesystem/lineParticleRenderer.h index 3600ae71d2..79f797846d 100644 --- a/panda/src/particlesystem/lineParticleRenderer.h +++ b/panda/src/particlesystem/lineParticleRenderer.h @@ -25,8 +25,8 @@ #include "pointerTo.h" #include "pointerToArray.h" #include "geom.h" -#include "qpgeomVertexData.h" -#include "qpgeomLines.h" +#include "geomVertexData.h" +#include "geomLines.h" //////////////////////////////////////////////////////////////////// // Class : LineParticleRenderer @@ -56,18 +56,15 @@ PUBLISHED: INLINE float get_line_scale_factor() const; virtual void output(ostream &out) const; - virtual void write(ostream &out, int indent=0) const; + virtual void write(ostream &out, int indent_level = 0) const; private: Colorf _head_color; Colorf _tail_color; PT(Geom) _line_primitive; - PT(qpGeomLines) _lines; - - PTA_Vertexf _vertex_array; - PTA_Colorf _color_array; - PT(qpGeomVertexData) _vdata; + PT(GeomLines) _lines; + PT(GeomVertexData) _vdata; int _max_pool_size; diff --git a/panda/src/particlesystem/pointParticleRenderer.cxx b/panda/src/particlesystem/pointParticleRenderer.cxx index 6cf3d2ebd6..65e50e8daf 100644 --- a/panda/src/particlesystem/pointParticleRenderer.cxx +++ b/panda/src/particlesystem/pointParticleRenderer.cxx @@ -19,9 +19,9 @@ #include "pointParticleRenderer.h" #include "boundingSphere.h" #include "geomNode.h" -#include "geomPoint.h" -#include "qpgeom.h" -#include "qpgeomVertexWriter.h" +#include "geom.h" +#include "geomVertexWriter.h" +#include "indent.h" //////////////////////////////////////////////////////////////////// // Function : PointParticleRenderer @@ -97,11 +97,6 @@ resize_pool(int new_size) { _max_pool_size = new_size; - if (!use_qpgeom) { - _vertex_array = PTA_Vertexf::empty_array(new_size); - _color_array = PTA_Colorf::empty_array(new_size); - } - init_geoms(); } @@ -113,21 +108,14 @@ resize_pool(int new_size) { void PointParticleRenderer:: init_geoms() { - if (use_qpgeom) { - PT(qpGeom) qpgeom = new qpGeom; - _point_primitive = qpgeom; - _vdata = new qpGeomVertexData - ("particles", qpGeomVertexFormat::get_v3cp(), - qpGeom::UH_dynamic); - qpgeom->set_vertex_data(_vdata); - _points = new qpGeomPoints(qpGeom::UH_dynamic); - qpgeom->add_primitive(_points); - - } else { - _point_primitive = new GeomPoint; - _point_primitive->set_coords(_vertex_array); - _point_primitive->set_colors(_color_array, G_PER_VERTEX); - } + PT(Geom) geom = new Geom; + _point_primitive = geom; + _vdata = new GeomVertexData + ("particles", GeomVertexFormat::get_v3cp(), + Geom::UH_dynamic); + geom->set_vertex_data(_vdata); + _points = new GeomPoints(Geom::UH_dynamic); + geom->add_primitive(_points); GeomNode *render_node = get_render_node(); render_node->remove_all_geoms(); @@ -238,10 +226,8 @@ render(pvector< PT(PhysicsObject) >& po_vector, int ttl_particles) { int remaining_particles = ttl_particles; int i; - Vertexf *cur_vert = &_vertex_array[0]; - Colorf *cur_color = &_color_array[0]; - qpGeomVertexWriter vertex(_vdata, InternalName::get_vertex()); - qpGeomVertexWriter color(_vdata, InternalName::get_color()); + GeomVertexWriter vertex(_vdata, InternalName::get_vertex()); + GeomVertexWriter color(_vdata, InternalName::get_color()); // init the aabb @@ -281,13 +267,8 @@ render(pvector< PT(PhysicsObject) >& po_vector, int ttl_particles) { // stuff it into the arrays - if (use_qpgeom) { - vertex.add_data3f(position); - color.add_data4f(create_color(cur_particle)); - } else { - *cur_vert++ = position; - *cur_color++ = create_color(cur_particle); - } + vertex.add_data3f(position); + color.add_data4f(create_color(cur_particle)); // maybe jump out early? @@ -296,12 +277,8 @@ render(pvector< PT(PhysicsObject) >& po_vector, int ttl_particles) { break; } - if (use_qpgeom) { - _points->clear_vertices(); - _points->add_next_vertices(ttl_particles); - } else { - _point_primitive->set_num_prims(ttl_particles); - } + _points->clear_vertices(); + _points->add_next_vertices(ttl_particles); // done filling geompoint node, now do the bb stuff @@ -332,20 +309,16 @@ output(ostream &out) const { // . //////////////////////////////////////////////////////////////////// void PointParticleRenderer:: -write(ostream &out, int indent) const { - #ifndef NDEBUG //[ - out.width(indent); out<<""; out<<"PointParticleRenderer:\n"; - out.width(indent+2); out<<""; out<<"_start_color "<<_start_color<<"\n"; - out.width(indent+2); out<<""; out<<"_end_color "<<_end_color<<"\n"; - out.width(indent+2); out<<""; out<<"_point_size "<<_point_size<<"\n"; - out.width(indent+2); out<<""; out<<"_point_primitive "<<_point_primitive<<"\n"; - out.width(indent+2); out<<""; out<<"_vertex_array "<<_vertex_array<<"\n"; - out.width(indent+2); out<<""; out<<"_color_array "<<_color_array<<"\n"; - out.width(indent+2); out<<""; out<<"_max_pool_size "<<_max_pool_size<<"\n"; - out.width(indent+2); out<<""; out<<"_blend_type "<<_blend_type<<"\n"; - out.width(indent+2); out<<""; out<<"_blend_method "<<_blend_method<<"\n"; - out.width(indent+2); out<<""; out<<"_aabb_min "<<_aabb_min<<"\n"; - out.width(indent+2); out<<""; out<<"_aabb_max "<<_aabb_max<<"\n"; - BaseParticleRenderer::write(out, indent+2); - #endif //] NDEBUG +write(ostream &out, int indent_level) const { + indent(out, indent_level) << "PointParticleRenderer:\n"; + indent(out, indent_level + 2) << "_start_color "<<_start_color<<"\n"; + indent(out, indent_level + 2) << "_end_color "<<_end_color<<"\n"; + indent(out, indent_level + 2) << "_point_size "<<_point_size<<"\n"; + indent(out, indent_level + 2) << "_point_primitive "<<_point_primitive<<"\n"; + indent(out, indent_level + 2) << "_max_pool_size "<<_max_pool_size<<"\n"; + indent(out, indent_level + 2) << "_blend_type "<<_blend_type<<"\n"; + indent(out, indent_level + 2) << "_blend_method "<<_blend_method<<"\n"; + indent(out, indent_level + 2) << "_aabb_min "<<_aabb_min<<"\n"; + indent(out, indent_level + 2) << "_aabb_max "<<_aabb_max<<"\n"; + BaseParticleRenderer::write(out, indent_level + 2); } diff --git a/panda/src/particlesystem/pointParticleRenderer.h b/panda/src/particlesystem/pointParticleRenderer.h index ef3c4811c8..f1ab517df9 100644 --- a/panda/src/particlesystem/pointParticleRenderer.h +++ b/panda/src/particlesystem/pointParticleRenderer.h @@ -26,8 +26,8 @@ #include "pointerToArray.h" #include "luse.h" #include "geom.h" -#include "qpgeomVertexData.h" -#include "qpgeomPoints.h" +#include "geomVertexData.h" +#include "geomPoints.h" //////////////////////////////////////////////////////////////////// // Class : PointParticleRenderer @@ -69,7 +69,7 @@ PUBLISHED: INLINE ParticleRendererBlendMethod get_blend_method() const; virtual void output(ostream &out) const; - virtual void write(ostream &out, int indent=0) const; + virtual void write(ostream &out, int indent_level = 0) const; private: Colorf _start_color; @@ -78,11 +78,8 @@ private: CPT(RenderAttrib) _thick; PT(Geom) _point_primitive; - PT(qpGeomPoints) _points; - - PTA_Vertexf _vertex_array; - PTA_Colorf _color_array; - PT(qpGeomVertexData) _vdata; + PT(GeomPoints) _points; + PT(GeomVertexData) _vdata; int _max_pool_size; diff --git a/panda/src/particlesystem/sparkleParticleRenderer.cxx b/panda/src/particlesystem/sparkleParticleRenderer.cxx index 8e6899e87d..66040fa2fd 100644 --- a/panda/src/particlesystem/sparkleParticleRenderer.cxx +++ b/panda/src/particlesystem/sparkleParticleRenderer.cxx @@ -19,9 +19,9 @@ #include "sparkleParticleRenderer.h" #include "boundingSphere.h" #include "geomNode.h" -#include "qpgeom.h" -#include "qpgeomVertexWriter.h" -#include "geomLine.h" +#include "geom.h" +#include "geomVertexWriter.h" +#include "indent.h" //////////////////////////////////////////////////////////////////// // Function : SparkleParticleRenderer @@ -117,11 +117,6 @@ kill_particle(int) { //////////////////////////////////////////////////////////////////// void SparkleParticleRenderer:: resize_pool(int new_size) { - if (!use_qpgeom) { - _vertex_array = PTA_Vertexf::empty_array(new_size * 12); - _color_array = PTA_Colorf::empty_array(new_size * 12); - } - _max_pool_size = new_size; init_geoms(); @@ -134,21 +129,14 @@ resize_pool(int new_size) { //////////////////////////////////////////////////////////////////// void SparkleParticleRenderer:: init_geoms() { - if (use_qpgeom) { - PT(qpGeom) qpgeom = new qpGeom; - _line_primitive = qpgeom; - _vdata = new qpGeomVertexData - ("particles", qpGeomVertexFormat::get_v3cp(), - qpGeom::UH_dynamic); - qpgeom->set_vertex_data(_vdata); - _lines = new qpGeomLines(qpGeom::UH_dynamic); - qpgeom->add_primitive(_lines); - - } else { - _line_primitive = new GeomLine; - _line_primitive->set_coords(_vertex_array); - _line_primitive->set_colors(_color_array, G_PER_VERTEX); - } + PT(Geom) geom = new Geom; + _line_primitive = geom; + _vdata = new GeomVertexData + ("particles", GeomVertexFormat::get_v3cp(), + Geom::UH_dynamic); + geom->set_vertex_data(_vdata); + _lines = new GeomLines(Geom::UH_dynamic); + geom->add_primitive(_lines); GeomNode *render_node = get_render_node(); render_node->remove_all_geoms(); @@ -171,17 +159,9 @@ render(pvector< PT(PhysicsObject) >& po_vector, int ttl_particles) { int remaining_particles = ttl_particles; int i; - Vertexf *cur_vert = NULL; - Colorf *cur_color = NULL; - qpGeomVertexWriter vertex(_vdata, InternalName::get_vertex()); - qpGeomVertexWriter color(_vdata, InternalName::get_color()); - if (use_qpgeom) { - _lines->clear_vertices(); - - } else { - cur_vert = &_vertex_array[0]; - cur_color = &_color_array[0]; - } + GeomVertexWriter vertex(_vdata, InternalName::get_vertex()); + GeomVertexWriter color(_vdata, InternalName::get_color()); + _lines->clear_vertices(); // init the aabb @@ -246,80 +226,49 @@ render(pvector< PT(PhysicsObject) >& po_vector, int ttl_particles) { // 6 lines coming from the center point. - if (use_qpgeom) { - vertex.add_data3f(position); - vertex.add_data3f(position + Vertexf(radius, 0.0f, 0.0f)); - vertex.add_data3f(position); - vertex.add_data3f(position + Vertexf(neg_radius, 0.0f, 0.0f)); - vertex.add_data3f(position); - vertex.add_data3f(position + Vertexf(0.0f, radius, 0.0f)); - vertex.add_data3f(position); - vertex.add_data3f(position + Vertexf(0.0f, neg_radius, 0.0f)); - vertex.add_data3f(position); - vertex.add_data3f(position + Vertexf(0.0f, 0.0f, radius)); - vertex.add_data3f(position); - vertex.add_data3f(position + Vertexf(0.0f, 0.0f, neg_radius)); - - color.add_data4f(center_color); - color.add_data4f(edge_color); - color.add_data4f(center_color); - color.add_data4f(edge_color); - color.add_data4f(center_color); - color.add_data4f(edge_color); - color.add_data4f(center_color); - color.add_data4f(edge_color); - color.add_data4f(center_color); - color.add_data4f(edge_color); - color.add_data4f(center_color); - color.add_data4f(edge_color); - - _lines->add_next_vertices(2); - _lines->close_primitive(); - _lines->add_next_vertices(2); - _lines->close_primitive(); - _lines->add_next_vertices(2); - _lines->close_primitive(); - _lines->add_next_vertices(2); - _lines->close_primitive(); - _lines->add_next_vertices(2); - _lines->close_primitive(); - _lines->add_next_vertices(2); - _lines->close_primitive(); - } else { - *cur_vert++ = position; - *cur_vert++ = position + Vertexf(radius, 0.0f, 0.0f); - *cur_vert++ = position; - *cur_vert++ = position + Vertexf(neg_radius, 0.0f, 0.0f); - *cur_vert++ = position; - *cur_vert++ = position + Vertexf(0.0f, radius, 0.0f); - *cur_vert++ = position; - *cur_vert++ = position + Vertexf(0.0f, neg_radius, 0.0f); - *cur_vert++ = position; - *cur_vert++ = position + Vertexf(0.0f, 0.0f, radius); - *cur_vert++ = position; - *cur_vert++ = position + Vertexf(0.0f, 0.0f, neg_radius); - - *cur_color++ = center_color; - *cur_color++ = edge_color; - *cur_color++ = center_color; - *cur_color++ = edge_color; - *cur_color++ = center_color; - *cur_color++ = edge_color; - *cur_color++ = center_color; - *cur_color++ = edge_color; - *cur_color++ = center_color; - *cur_color++ = edge_color; - *cur_color++ = center_color; - *cur_color++ = edge_color; - } + vertex.add_data3f(position); + vertex.add_data3f(position + Vertexf(radius, 0.0f, 0.0f)); + vertex.add_data3f(position); + vertex.add_data3f(position + Vertexf(neg_radius, 0.0f, 0.0f)); + vertex.add_data3f(position); + vertex.add_data3f(position + Vertexf(0.0f, radius, 0.0f)); + vertex.add_data3f(position); + vertex.add_data3f(position + Vertexf(0.0f, neg_radius, 0.0f)); + vertex.add_data3f(position); + vertex.add_data3f(position + Vertexf(0.0f, 0.0f, radius)); + vertex.add_data3f(position); + vertex.add_data3f(position + Vertexf(0.0f, 0.0f, neg_radius)); + color.add_data4f(center_color); + color.add_data4f(edge_color); + color.add_data4f(center_color); + color.add_data4f(edge_color); + color.add_data4f(center_color); + color.add_data4f(edge_color); + color.add_data4f(center_color); + color.add_data4f(edge_color); + color.add_data4f(center_color); + color.add_data4f(edge_color); + color.add_data4f(center_color); + color.add_data4f(edge_color); + + _lines->add_next_vertices(2); + _lines->close_primitive(); + _lines->add_next_vertices(2); + _lines->close_primitive(); + _lines->add_next_vertices(2); + _lines->close_primitive(); + _lines->add_next_vertices(2); + _lines->close_primitive(); + _lines->add_next_vertices(2); + _lines->close_primitive(); + _lines->add_next_vertices(2); + _lines->close_primitive(); + remaining_particles--; - if (remaining_particles == 0) + if (remaining_particles == 0) { break; - } - - if (!use_qpgeom) { - _line_primitive->set_num_prims(6 * ttl_particles); + } } // done filling geomline node, now do the bb stuff @@ -351,20 +300,16 @@ output(ostream &out) const { // . //////////////////////////////////////////////////////////////////// void SparkleParticleRenderer:: -write(ostream &out, int indent) const { - #ifndef NDEBUG //[ - out.width(indent); out<<""; out<<"SparkleParticleRenderer:\n"; - out.width(indent+2); out<<""; out<<"_center_color "<<_center_color<<"\n"; - out.width(indent+2); out<<""; out<<"_edge_color "<<_edge_color<<"\n"; - out.width(indent+2); out<<""; out<<"_birth_radius "<<_birth_radius<<"\n"; - out.width(indent+2); out<<""; out<<"_death_radius "<<_death_radius<<"\n"; - out.width(indent+2); out<<""; out<<"_line_primitive "<<_line_primitive<<"\n"; - out.width(indent+2); out<<""; out<<"_vertex_array "<<_vertex_array<<"\n"; - out.width(indent+2); out<<""; out<<"_color_array "<<_color_array<<"\n"; - out.width(indent+2); out<<""; out<<"_max_pool_size "<<_max_pool_size<<"\n"; - out.width(indent+2); out<<""; out<<"_life_scale "<<_life_scale<<"\n"; - out.width(indent+2); out<<""; out<<"_aabb_min "<<_aabb_min<<"\n"; - out.width(indent+2); out<<""; out<<"_aabb_max "<<_aabb_max<<"\n"; - BaseParticleRenderer::write(out, indent+2); - #endif //] NDEBUG +write(ostream &out, int indent_level) const { + indent(out, indent_level) << "SparkleParticleRenderer:\n"; + indent(out, indent_level + 2) << "_center_color "<<_center_color<<"\n"; + indent(out, indent_level + 2) << "_edge_color "<<_edge_color<<"\n"; + indent(out, indent_level + 2) << "_birth_radius "<<_birth_radius<<"\n"; + indent(out, indent_level + 2) << "_death_radius "<<_death_radius<<"\n"; + indent(out, indent_level + 2) << "_line_primitive "<<_line_primitive<<"\n"; + indent(out, indent_level + 2) << "_max_pool_size "<<_max_pool_size<<"\n"; + indent(out, indent_level + 2) << "_life_scale "<<_life_scale<<"\n"; + indent(out, indent_level + 2) << "_aabb_min "<<_aabb_min<<"\n"; + indent(out, indent_level + 2) << "_aabb_max "<<_aabb_max<<"\n"; + BaseParticleRenderer::write(out, indent_level + 2); } diff --git a/panda/src/particlesystem/sparkleParticleRenderer.h b/panda/src/particlesystem/sparkleParticleRenderer.h index a9f83db0e5..1f7a9fb4b2 100644 --- a/panda/src/particlesystem/sparkleParticleRenderer.h +++ b/panda/src/particlesystem/sparkleParticleRenderer.h @@ -25,8 +25,8 @@ #include "pointerTo.h" #include "pointerToArray.h" #include "geom.h" -#include "qpgeomVertexData.h" -#include "qpgeomLines.h" +#include "geomVertexData.h" +#include "geomLines.h" enum SparkleParticleLifeScale { SP_NO_SCALE, @@ -70,7 +70,7 @@ PUBLISHED: INLINE SparkleParticleLifeScale get_life_scale() const; virtual void output(ostream &out) const; - virtual void write(ostream &out, int indent=0) const; + virtual void write(ostream &out, int indent_level = 0) const; private: Colorf _center_color; @@ -80,11 +80,8 @@ private: float _death_radius; PT(Geom) _line_primitive; - PT(qpGeomLines) _lines; - - PTA_Vertexf _vertex_array; - PTA_Colorf _color_array; - PT(qpGeomVertexData) _vdata; + PT(GeomLines) _lines; + PT(GeomVertexData) _vdata; int _max_pool_size; diff --git a/panda/src/particlesystem/spriteParticleRenderer.I b/panda/src/particlesystem/spriteParticleRenderer.I index 62ee51351b..d296e90b2c 100644 --- a/panda/src/particlesystem/spriteParticleRenderer.I +++ b/panda/src/particlesystem/spriteParticleRenderer.I @@ -105,12 +105,6 @@ set_color(const Colorf &color) { //////////////////////////////////////////////////////////////////// INLINE void SpriteParticleRenderer:: set_x_scale_flag(bool animate_x_ratio) { - if (animate_x_ratio && !_animate_x_ratio) { - _x_texel_array = PTA_float::empty_array(_pool_size); - } else if (!animate_x_ratio && _animate_x_ratio) { - _x_texel_array = PTA_float::empty_array(1); - } - _animate_x_ratio = animate_x_ratio; init_geoms(); } @@ -121,12 +115,6 @@ set_x_scale_flag(bool animate_x_ratio) { //////////////////////////////////////////////////////////////////// INLINE void SpriteParticleRenderer:: set_y_scale_flag(bool animate_y_ratio) { - if (animate_y_ratio && !_animate_y_ratio) { - _y_texel_array = PTA_float::empty_array(_pool_size); - } else if (!animate_y_ratio && _animate_y_ratio) { - _y_texel_array = PTA_float::empty_array(1); - } - _animate_y_ratio = animate_y_ratio; init_geoms(); } @@ -137,12 +125,6 @@ set_y_scale_flag(bool animate_y_ratio) { //////////////////////////////////////////////////////////////////// INLINE void SpriteParticleRenderer:: set_anim_angle_flag(bool animate_theta) { - if (animate_theta && !_animate_theta) { - _theta_array = PTA_float::empty_array(_pool_size); - } else if (!animate_theta && _animate_theta) { - _theta_array = PTA_float::empty_array(_pool_size); - } - _animate_theta = animate_theta; init_geoms(); } diff --git a/panda/src/particlesystem/spriteParticleRenderer.cxx b/panda/src/particlesystem/spriteParticleRenderer.cxx index 09996d4c43..345f5fa9b0 100644 --- a/panda/src/particlesystem/spriteParticleRenderer.cxx +++ b/panda/src/particlesystem/spriteParticleRenderer.cxx @@ -21,14 +21,14 @@ #include "geomNode.h" #include "nodePath.h" #include "dcast.h" -#include "geomSprite.h" -#include "qpgeom.h" -#include "qpgeomVertexReader.h" -#include "qpgeomVertexWriter.h" +#include "geom.h" +#include "geomVertexReader.h" +#include "geomVertexWriter.h" #include "renderModeAttrib.h" #include "texMatrixAttrib.h" #include "texGenAttrib.h" #include "textureAttrib.h" +#include "indent.h" //////////////////////////////////////////////////////////////////// // Function : SpriteParticleRenderer::SpriteParticleRenderer @@ -55,9 +55,9 @@ SpriteParticleRenderer(Texture *tex) : _animate_theta(false), _alpha_disable(false), _blend_method(PP_BLEND_LINEAR), + _color_interpolation_manager(new ColorInterpolationManager(_color)), _pool_size(0), - _source_type(ST_texture), - _color_interpolation_manager(new ColorInterpolationManager(_color)) + _source_type(ST_texture) { init_geoms(); } @@ -157,115 +157,66 @@ set_from_node(const NodePath &node_path, bool size_from_texels) { Vertexf min_xyz(0.0f, 0.0f, 0.0f); Vertexf max_xyz(0.0f, 0.0f, 0.0f); - if (geom->is_qpgeom()) { - const qpGeom *qpgeom = DCAST(qpGeom, geom); - qpGeomVertexReader texcoord(qpgeom->get_vertex_data(), - InternalName::get_texcoord()); - if (texcoord.has_column()) { - for (int pi = 0; pi < qpgeom->get_num_primitives(); ++pi) { - const qpGeomPrimitive *primitive = qpgeom->get_primitive(pi); - for (int vi = 0; vi < primitive->get_num_vertices(); ++vi) { - int vert = primitive->get_vertex(vi); - texcoord.set_row(vert); + GeomVertexReader texcoord(geom->get_vertex_data(), + InternalName::get_texcoord()); + if (texcoord.has_column()) { + for (int pi = 0; pi < geom->get_num_primitives(); ++pi) { + const GeomPrimitive *primitive = geom->get_primitive(pi); + for (int vi = 0; vi < primitive->get_num_vertices(); ++vi) { + int vert = primitive->get_vertex(vi); + texcoord.set_row(vert); + + if (!got_texcoord) { + min_uv = max_uv = texcoord.get_data2f(); + got_texcoord = true; - if (!got_texcoord) { - min_uv = max_uv = texcoord.get_data2f(); - got_texcoord = true; - - } else { - const LVecBase2f &uv = texcoord.get_data2f(); - - min_uv[0] = min(min_uv[0], uv[0]); - max_uv[0] = max(max_uv[0], uv[0]); - min_uv[1] = min(min_uv[1], uv[1]); - max_uv[1] = max(max_uv[1], uv[1]); - } + } else { + const LVecBase2f &uv = texcoord.get_data2f(); + + min_uv[0] = min(min_uv[0], uv[0]); + max_uv[0] = max(max_uv[0], uv[0]); + min_uv[1] = min(min_uv[1], uv[1]); + max_uv[1] = max(max_uv[1], uv[1]); } } } - - qpGeomVertexReader vertex(qpgeom->get_vertex_data(), - InternalName::get_vertex()); - if (vertex.has_column()) { - for (int pi = 0; pi < qpgeom->get_num_primitives(); ++pi) { - const qpGeomPrimitive *primitive = qpgeom->get_primitive(pi); - for (int vi = 0; vi < primitive->get_num_vertices(); ++vi) { - int vert = primitive->get_vertex(vi); - vertex.set_row(vert); + } + + GeomVertexReader vertex(geom->get_vertex_data(), + InternalName::get_vertex()); + if (vertex.has_column()) { + for (int pi = 0; pi < geom->get_num_primitives(); ++pi) { + const GeomPrimitive *primitive = geom->get_primitive(pi); + for (int vi = 0; vi < primitive->get_num_vertices(); ++vi) { + int vert = primitive->get_vertex(vi); + vertex.set_row(vert); + + if (!got_vertex) { + min_xyz = max_xyz = vertex.get_data3f(); + got_vertex = true; - if (!got_vertex) { - min_xyz = max_xyz = vertex.get_data3f(); - got_vertex = true; - - } else { - const LVecBase3f &xyz = vertex.get_data3f(); - - min_xyz[0] = min(min_xyz[0], xyz[0]); - max_xyz[0] = max(max_xyz[0], xyz[0]); - min_xyz[1] = min(min_xyz[1], xyz[1]); - max_xyz[1] = max(max_xyz[1], xyz[1]); - min_xyz[2] = min(min_xyz[2], xyz[2]); - max_xyz[2] = max(max_xyz[2], xyz[2]); - } + } else { + const LVecBase3f &xyz = vertex.get_data3f(); + + min_xyz[0] = min(min_xyz[0], xyz[0]); + max_xyz[0] = max(max_xyz[0], xyz[0]); + min_xyz[1] = min(min_xyz[1], xyz[1]); + max_xyz[1] = max(max_xyz[1], xyz[1]); + min_xyz[2] = min(min_xyz[2], xyz[2]); + max_xyz[2] = max(max_xyz[2], xyz[2]); } } } - - } else { - PTA_TexCoordf texcoords; - GeomBindType bind; - PTA_ushort tindex; - geom->get_texcoords(texcoords, bind, tindex); - if (bind != G_PER_VERTEX) { - particlesystem_cat.error() - << geom_node_path << " has no UV's in its first Geom.\n"; - return; - } - - int num_verts = geom->get_num_vertices(); - if (num_verts == 0) { - particlesystem_cat.error() - << geom_node_path << " has no vertices in its first Geom.\n"; - return; - } - - got_texcoord = true; - got_vertex = true; - - Geom::TexCoordIterator ti = geom->make_texcoord_iterator(); - Geom::VertexIterator vi = geom->make_vertex_iterator(); - - const TexCoordf &first_texcoord = geom->get_next_texcoord(ti); - const Vertexf &first_vertex = geom->get_next_vertex(vi); - min_uv = first_texcoord; - max_uv = first_texcoord; - min_xyz = first_vertex; - max_xyz = first_vertex; - - for (int v = 1; v < num_verts; v++) { - const TexCoordf &texcoord = geom->get_next_texcoord(ti); - const Vertexf &vertex = geom->get_next_vertex(vi); - - min_uv[0] = min(min_uv[0], texcoord[0]); - max_uv[0] = max(max_uv[0], texcoord[0]); - min_uv[1] = min(min_uv[1], texcoord[1]); - max_uv[1] = max(max_uv[1], texcoord[1]); - - min_xyz[0] = min(min_xyz[0], vertex[0]); - max_xyz[0] = max(max_xyz[0], vertex[0]); - min_xyz[1] = min(min_xyz[1], vertex[1]); - max_xyz[1] = max(max_xyz[1], vertex[1]); - min_xyz[2] = min(min_xyz[2], vertex[2]); - max_xyz[2] = max(max_xyz[2], vertex[2]); - } } - // We don't really pay attention to orientation of UV's here; a - // minor flaw. We assume the minimum is in the lower-left, and the - // maximum is in the upper-right. _texture = tex; - set_ll_uv(min_uv); - set_ur_uv(max_uv); + if (got_texcoord) { + // We don't really pay attention to orientation of UV's here; a + // minor flaw. We assume the minimum is in the lower-left, and + // the maximum is in the upper-right. + set_ll_uv(min_uv); + set_ur_uv(max_uv); + } if (got_vertex) { float width = max_xyz[0] - min_xyz[0]; @@ -301,42 +252,11 @@ set_from_node(const NodePath &node_path, bool size_from_texels) { //////////////////////////////////////////////////////////////////// void SpriteParticleRenderer:: resize_pool(int new_size) { - if (new_size == _pool_size) - return; - - _pool_size = new_size; - - // handle the x texel ratio - if (_animate_x_ratio) { - _x_texel_array = PTA_float::empty_array(new_size); - _x_bind = G_PER_PRIM; - } else { - _x_texel_array = PTA_float::empty_array(1); - _x_bind = G_OVERALL; + if (new_size != _pool_size) { + _pool_size = new_size; + + init_geoms(); } - - // handle the y texel ratio - if (_animate_y_ratio) { - _y_texel_array = PTA_float::empty_array(new_size); - _y_bind = G_PER_PRIM; - } else { - _y_texel_array = PTA_float::empty_array(1); - _y_bind = G_OVERALL; - } - - // handle the theta vector - if (_animate_theta) { - _theta_array = PTA_float::empty_array(new_size); - _theta_bind = G_PER_PRIM; - } else { - _theta_array = PTA_float::empty_array(1); - _theta_bind = G_OVERALL; - } - - _vertex_array = PTA_Vertexf::empty_array(new_size); - _color_array = PTA_Colorf::empty_array(new_size); - - init_geoms(); } //////////////////////////////////////////////////////////////////// @@ -350,80 +270,64 @@ void SpriteParticleRenderer:: init_geoms() { CPT(RenderState) state = _render_state; - if (use_qpgeom) { - PT(qpGeom) qpgeom = new qpGeom; - _sprite_primitive = qpgeom; - - PT(qpGeomVertexArrayFormat) array_format = new qpGeomVertexArrayFormat - (InternalName::get_vertex(), 3, qpGeom::NT_float32, qpGeom::C_point, - InternalName::get_color(), 1, qpGeom::NT_packed_dabc, qpGeom::C_color); - - if (_animate_theta || _theta != 0.0f) { - array_format->add_column - (InternalName::get_rotate(), 1, qpGeom::NT_float32, qpGeom::C_other); - } - - _base_y_scale = _initial_y_scale; - _aspect_ratio = _width / _height; - - float final_x_scale = _animate_x_ratio ? _final_x_scale : _initial_x_scale; - float final_y_scale = _animate_y_ratio ? _final_y_scale : _initial_y_scale; - - if (_animate_y_ratio) { - _base_y_scale = max(_initial_y_scale, _final_y_scale); - array_format->add_column - (InternalName::get_size(), 1, qpGeom::NT_float32, qpGeom::C_other); - } - - if (_aspect_ratio * _initial_x_scale != _initial_y_scale || - _aspect_ratio * final_x_scale != final_y_scale) { - array_format->add_column - (InternalName::get_aspect_ratio(), 1, qpGeom::NT_float32, - qpGeom::C_other); - } - - CPT(qpGeomVertexFormat) format = qpGeomVertexFormat::register_format - (new qpGeomVertexFormat(array_format)); - - _vdata = new qpGeomVertexData - ("particles", format, qpGeom::UH_dynamic); - qpgeom->set_vertex_data(_vdata); - _sprites = new qpGeomPoints(qpGeom::UH_dynamic); - qpgeom->add_primitive(_sprites); - - state = state->add_attrib(RenderModeAttrib::make(RenderModeAttrib::M_unchanged, _base_y_scale * _height, true)); - - if (_texture != (Texture *)NULL) { - state = state->add_attrib(TextureAttrib::make(_texture)); - state = state->add_attrib(TexGenAttrib::make(TextureStage::get_default(), TexGenAttrib::M_point_sprite)); - - // Build a matrix to convert the texture coordinates to the ll, ur - // space. - LPoint2f ul(_ll_uv[0], _ur_uv[1]); - LPoint2f lr(_ur_uv[0], _ll_uv[1]); - LVector2f sc = lr - ul; - - LMatrix4f mat - (sc[0], 0.0f, 0.0f, 0.0f, - 0.0f, sc[1], 0.0f, 0.0f, - 0.0f, 0.0f, 1.0f, 0.0f, - ul[0], ul[1], 0.0f, 1.0f); - state = state->add_attrib(TexMatrixAttrib::make(mat)); - } - - } else { - PT(GeomSprite) sprite = new GeomSprite(get_texture()); - _sprite_primitive = sprite; - _sprite_primitive->set_num_prims(0); - - _sprite_primitive->set_coords(_vertex_array); - _sprite_primitive->set_colors(_color_array, G_PER_PRIM); - sprite->set_x_texel_ratio(_x_texel_array, _x_bind); - sprite->set_y_texel_ratio(_y_texel_array, _y_bind); - sprite->set_thetas(_theta_array, _theta_bind); - sprite->set_ll_uv(_ll_uv); - sprite->set_ur_uv(_ur_uv); - sprite->set_alpha_disable(_alpha_disable); + PT(Geom) geom = new Geom; + _sprite_primitive = geom; + + PT(GeomVertexArrayFormat) array_format = new GeomVertexArrayFormat + (InternalName::get_vertex(), 3, Geom::NT_float32, Geom::C_point, + InternalName::get_color(), 1, Geom::NT_packed_dabc, Geom::C_color); + + if (_animate_theta || _theta != 0.0f) { + array_format->add_column + (InternalName::get_rotate(), 1, Geom::NT_float32, Geom::C_other); + } + + _base_y_scale = _initial_y_scale; + _aspect_ratio = _width / _height; + + float final_x_scale = _animate_x_ratio ? _final_x_scale : _initial_x_scale; + float final_y_scale = _animate_y_ratio ? _final_y_scale : _initial_y_scale; + + if (_animate_y_ratio) { + _base_y_scale = max(_initial_y_scale, _final_y_scale); + array_format->add_column + (InternalName::get_size(), 1, Geom::NT_float32, Geom::C_other); + } + + if (_aspect_ratio * _initial_x_scale != _initial_y_scale || + _aspect_ratio * final_x_scale != final_y_scale) { + array_format->add_column + (InternalName::get_aspect_ratio(), 1, Geom::NT_float32, + Geom::C_other); + } + + CPT(GeomVertexFormat) format = GeomVertexFormat::register_format + (new GeomVertexFormat(array_format)); + + _vdata = new GeomVertexData + ("particles", format, Geom::UH_dynamic); + geom->set_vertex_data(_vdata); + _sprites = new GeomPoints(Geom::UH_dynamic); + geom->add_primitive(_sprites); + + state = state->add_attrib(RenderModeAttrib::make(RenderModeAttrib::M_unchanged, _base_y_scale * _height, true)); + + if (_texture != (Texture *)NULL) { + state = state->add_attrib(TextureAttrib::make(_texture)); + state = state->add_attrib(TexGenAttrib::make(TextureStage::get_default(), TexGenAttrib::M_point_sprite)); + + // Build a matrix to convert the texture coordinates to the ul, lr + // space. + LPoint2f ul(_ll_uv[0], _ur_uv[1]); + LPoint2f lr(_ur_uv[0], _ll_uv[1]); + LVector2f sc = lr - ul; + + LMatrix4f mat + (sc[0], 0.0f, 0.0f, 0.0f, + 0.0f, sc[1], 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + ul[0], ul[1], 0.0f, 1.0f); + state = state->add_attrib(TexMatrixAttrib::make(mat)); } GeomNode *render_node = get_render_node(); @@ -463,27 +367,11 @@ render(pvector< PT(PhysicsObject) >& po_vector, int ttl_particles) { int remaining_particles = ttl_particles; int i; - Vertexf *cur_vert = &_vertex_array[0]; - Colorf *cur_color = &_color_array[0]; - float *cur_x_texel = &_x_texel_array[0]; - float *cur_y_texel = &_y_texel_array[0]; - float *cur_theta = &_theta_array[0]; - qpGeomVertexWriter vertex(_vdata, InternalName::get_vertex()); - qpGeomVertexWriter color(_vdata, InternalName::get_color()); - qpGeomVertexWriter rotate(_vdata, InternalName::get_rotate()); - qpGeomVertexWriter size(_vdata, InternalName::get_size()); - qpGeomVertexWriter aspect_ratio(_vdata, InternalName::get_aspect_ratio()); - - if (!use_qpgeom) { - if (!_animate_x_ratio) - *cur_x_texel = _initial_x_scale; - - if (!_animate_y_ratio) - *cur_y_texel = _initial_y_scale; - - if (!_animate_theta) - *cur_theta = _theta; - } + GeomVertexWriter vertex(_vdata, InternalName::get_vertex()); + GeomVertexWriter color(_vdata, InternalName::get_color()); + GeomVertexWriter rotate(_vdata, InternalName::get_rotate()); + GeomVertexWriter size(_vdata, InternalName::get_size()); + GeomVertexWriter aspect_ratio(_vdata, InternalName::get_aspect_ratio()); // init the aabb _aabb_min.set(99999.0f, 99999.0f, 99999.0f); @@ -540,86 +428,50 @@ render(pvector< PT(PhysicsObject) >& po_vector, int ttl_particles) { } } - if (use_qpgeom) { - vertex.add_data3f(position); - color.add_data4f(c); + vertex.add_data3f(position); + color.add_data4f(c); - float current_x_scale = _initial_x_scale; - float current_y_scale = _initial_y_scale; - - if (_animate_x_ratio || _animate_y_ratio) { - float t = cur_particle->get_parameterized_age(); - if (_blend_method == PP_BLEND_CUBIC) { - t = CUBIC_T(t); - } - - if (_animate_x_ratio) { - current_x_scale = (_initial_x_scale + - (t * (_final_x_scale - _initial_x_scale))); - } - if (_animate_y_ratio) { - current_y_scale = (_initial_y_scale + - (t * (_final_y_scale - _initial_y_scale))); - } + float current_x_scale = _initial_x_scale; + float current_y_scale = _initial_y_scale; + + if (_animate_x_ratio || _animate_y_ratio) { + float t = cur_particle->get_parameterized_age(); + if (_blend_method == PP_BLEND_CUBIC) { + t = CUBIC_T(t); } - - if (size.has_column()) { - size.add_data1f(current_y_scale * _height); - } - if (aspect_ratio.has_column()) { - aspect_ratio.add_data1f(_aspect_ratio * current_x_scale / current_y_scale); - } - - if (_animate_theta) { - rotate.add_data1f(cur_particle->get_theta()); - } else if (rotate.has_column()) { - rotate.add_data1f(_theta); - } - - } else { - // put the current vertex into the array - *cur_vert++ = position; - *cur_color++ = c; - // handle x scaling if (_animate_x_ratio) { - float t = cur_particle->get_parameterized_age(); - - if (_blend_method == PP_BLEND_CUBIC) - t = CUBIC_T(t); - - *cur_x_texel++ = (_initial_x_scale + - (t * (_final_x_scale - _initial_x_scale))); + current_x_scale = (_initial_x_scale + + (t * (_final_x_scale - _initial_x_scale))); } - - // handle y scaling if (_animate_y_ratio) { - float t = cur_particle->get_parameterized_age(); - - if (_blend_method == PP_BLEND_CUBIC) - t = CUBIC_T(t); - - *cur_y_texel++ = (_initial_y_scale + - (t * (_final_y_scale - _initial_y_scale))); + current_y_scale = (_initial_y_scale + + (t * (_final_y_scale - _initial_y_scale))); } - - // handle theta - if (_animate_theta) - *cur_theta++ = cur_particle->get_theta(); + } + + if (size.has_column()) { + size.add_data1f(current_y_scale * _height); + } + if (aspect_ratio.has_column()) { + aspect_ratio.add_data1f(_aspect_ratio * current_x_scale / current_y_scale); + } + + if (_animate_theta) { + rotate.add_data1f(cur_particle->get_theta()); + } else if (rotate.has_column()) { + rotate.add_data1f(_theta); } // maybe jump out early? remaining_particles--; - if (remaining_particles == 0) + if (remaining_particles == 0) { break; + } } - if (use_qpgeom) { - _sprites->clear_vertices(); - _sprites->add_next_vertices(ttl_particles); - } else { - _sprite_primitive->set_num_prims(ttl_particles); - } + _sprites->clear_vertices(); + _sprites->add_next_vertices(ttl_particles); // done filling geompoint node, now do the bb stuff LPoint3f aabb_center = _aabb_min + ((_aabb_max - _aabb_min) * 0.5f); @@ -649,29 +501,22 @@ output(ostream &out) const { // . //////////////////////////////////////////////////////////////////// void SpriteParticleRenderer:: -write(ostream &out, int indent) const { - #ifndef NDEBUG //[ - out.width(indent); out<<""; out<<"SpriteParticleRenderer:\n"; - out.width(indent+2); out<<""; out<<"_sprite_primitive "<<_sprite_primitive<<"\n"; - out.width(indent+2); out<<""; out<<"_vertex_array "<<_vertex_array<<"\n"; - out.width(indent+2); out<<""; out<<"_color_array "<<_color_array<<"\n"; - out.width(indent+2); out<<""; out<<"_x_texel_array "<<_x_texel_array<<"\n"; - out.width(indent+2); out<<""; out<<"_y_texel_array "<<_y_texel_array<<"\n"; - out.width(indent+2); out<<""; out<<"_theta_array "<<_theta_array<<"\n"; - out.width(indent+2); out<<""; out<<"_color "<<_color<<"\n"; - out.width(indent+2); out<<""; out<<"_initial_x_scale "<<_initial_x_scale<<"\n"; - out.width(indent+2); out<<""; out<<"_final_x_scale "<<_final_x_scale<<"\n"; - out.width(indent+2); out<<""; out<<"_initial_y_scale "<<_initial_y_scale<<"\n"; - out.width(indent+2); out<<""; out<<"_final_y_scale "<<_final_y_scale<<"\n"; - out.width(indent+2); out<<""; out<<"_theta "<<_theta<<"\n"; - out.width(indent+2); out<<""; out<<"_animate_x_ratio "<<_animate_x_ratio<<"\n"; - out.width(indent+2); out<<""; out<<"_animate_y_ratio "<<_animate_y_ratio<<"\n"; - out.width(indent+2); out<<""; out<<"_animate_theta "<<_animate_theta<<"\n"; - out.width(indent+2); out<<""; out<<"_blend_method "<<_blend_method<<"\n"; - out.width(indent+2); out<<""; out<<"_aabb_min "<<_aabb_min<<"\n"; - out.width(indent+2); out<<""; out<<"_aabb_max "<<_aabb_max<<"\n"; - out.width(indent+2); out<<""; out<<"_pool_size "<<_pool_size<<"\n"; - out.width(indent+2); out<<""; out<<"_source_type "<<_source_type<<"\n"; - BaseParticleRenderer::write(out, indent+2); - #endif //] NDEBUG +write(ostream &out, int indent_level) const { + indent(out, indent_level) << "SpriteParticleRenderer:\n"; + indent(out, indent_level + 2) << "_sprite_primitive "<<_sprite_primitive<<"\n"; + indent(out, indent_level + 2) << "_color "<<_color<<"\n"; + indent(out, indent_level + 2) << "_initial_x_scale "<<_initial_x_scale<<"\n"; + indent(out, indent_level + 2) << "_final_x_scale "<<_final_x_scale<<"\n"; + indent(out, indent_level + 2) << "_initial_y_scale "<<_initial_y_scale<<"\n"; + indent(out, indent_level + 2) << "_final_y_scale "<<_final_y_scale<<"\n"; + indent(out, indent_level + 2) << "_theta "<<_theta<<"\n"; + indent(out, indent_level + 2) << "_animate_x_ratio "<<_animate_x_ratio<<"\n"; + indent(out, indent_level + 2) << "_animate_y_ratio "<<_animate_y_ratio<<"\n"; + indent(out, indent_level + 2) << "_animate_theta "<<_animate_theta<<"\n"; + indent(out, indent_level + 2) << "_blend_method "<<_blend_method<<"\n"; + indent(out, indent_level + 2) << "_aabb_min "<<_aabb_min<<"\n"; + indent(out, indent_level + 2) << "_aabb_max "<<_aabb_max<<"\n"; + indent(out, indent_level + 2) << "_pool_size "<<_pool_size<<"\n"; + indent(out, indent_level + 2) << "_source_type "<<_source_type<<"\n"; + BaseParticleRenderer::write(out, indent_level + 2); } diff --git a/panda/src/particlesystem/spriteParticleRenderer.h b/panda/src/particlesystem/spriteParticleRenderer.h index 14326143b7..9909c11125 100644 --- a/panda/src/particlesystem/spriteParticleRenderer.h +++ b/panda/src/particlesystem/spriteParticleRenderer.h @@ -24,12 +24,9 @@ #include "baseParticle.h" #include "texture.h" #include "pointerTo.h" -#include "pointerToArray.h" -#include "pta_float.h" #include "geom.h" -#include "geomSprite.h" -#include "qpgeomVertexData.h" -#include "qpgeomPoints.h" +#include "geomVertexData.h" +#include "geomPoints.h" #include "colorInterpolationManager.h" class NodePath; @@ -94,20 +91,14 @@ PUBLISHED: INLINE bool get_alpha_disable() const; virtual void output(ostream &out) const; - virtual void write(ostream &out, int indent=0) const; + virtual void write(ostream &out, int indent_level = 0) const; private: PT(Geom) _sprite_primitive; - PT(qpGeomPoints) _sprites; + PT(GeomPoints) _sprites; PT(Texture) _texture; - PTA_Vertexf _vertex_array; - PTA_Colorf _color_array; - PTA_float _x_texel_array; - PTA_float _y_texel_array; - PTA_float _theta_array; - GeomBindType _x_bind, _y_bind, _theta_bind; - PT(qpGeomVertexData) _vdata; + PT(GeomVertexData) _vdata; Colorf _color; diff --git a/panda/src/pgraph/bamFile.cxx b/panda/src/pgraph/bamFile.cxx index 33caf67694..002e16b041 100644 --- a/panda/src/pgraph/bamFile.cxx +++ b/panda/src/pgraph/bamFile.cxx @@ -336,6 +336,24 @@ get_file_minor_ver() { return _reader->get_file_minor_ver(); } +//////////////////////////////////////////////////////////////////// +// Function: BamFile::get_file_endian +// Access: Public +// Description: Returns the endian preference indicated by the Bam +// file currently being read or written. +//////////////////////////////////////////////////////////////////// +BamEndian BamFile:: +get_file_endian() const { + if (_writer != (BamWriter *)NULL) { + return _writer->get_file_endian(); + } + if (_reader != (BamReader *)NULL) { + return _reader->get_file_endian(); + } + + return bam_endian; +} + //////////////////////////////////////////////////////////////////// // Function: BamFile::get_current_major_ver // Access: Public diff --git a/panda/src/pgraph/bamFile.h b/panda/src/pgraph/bamFile.h index 18dc468f53..b1f6d6b084 100644 --- a/panda/src/pgraph/bamFile.h +++ b/panda/src/pgraph/bamFile.h @@ -20,7 +20,7 @@ #define BAMFILE_H #include "pandabase.h" - +#include "bamEndian.h" #include "datagramInputFile.h" #include "datagramOutputFile.h" #include "pandaNode.h" @@ -73,6 +73,7 @@ PUBLISHED: int get_file_major_ver(); int get_file_minor_ver(); + BamEndian get_file_endian() const; int get_current_major_ver(); int get_current_minor_ver(); diff --git a/panda/src/pgraph/cullFaceAttrib.cxx b/panda/src/pgraph/cullFaceAttrib.cxx index 024b043288..03569e08e6 100644 --- a/panda/src/pgraph/cullFaceAttrib.cxx +++ b/panda/src/pgraph/cullFaceAttrib.cxx @@ -313,7 +313,5 @@ fillin(DatagramIterator &scan, BamReader *manager) { RenderAttrib::fillin(scan, manager); _mode = (Mode)scan.get_int8(); - if (manager->get_file_minor_ver() >= 1) { - _reverse = scan.get_bool(); - } + _reverse = scan.get_bool(); } diff --git a/panda/src/pgraph/cullResult.h b/panda/src/pgraph/cullResult.h index 3c778b1077..a82de52fae 100644 --- a/panda/src/pgraph/cullResult.h +++ b/panda/src/pgraph/cullResult.h @@ -23,7 +23,7 @@ #include "cullBin.h" #include "renderState.h" #include "cullableObject.h" -#include "qpgeomMunger.h" +#include "geomMunger.h" #include "referenceCount.h" #include "pointerTo.h" diff --git a/panda/src/pgraph/cullTraverser.cxx b/panda/src/pgraph/cullTraverser.cxx index 71cb91779e..54b1a2f6cd 100644 --- a/panda/src/pgraph/cullTraverser.cxx +++ b/panda/src/pgraph/cullTraverser.cxx @@ -31,12 +31,11 @@ #include "config_pgraph.h" #include "boundingSphere.h" #include "boundingHexahedron.h" -#include "geomSphere.h" #include "portalClipper.h" -#include "qpgeom.h" -#include "qpgeomTristrips.h" -#include "qpgeomLinestrips.h" -#include "qpgeomVertexWriter.h" +#include "geom.h" +#include "geomTristrips.h" +#include "geomLinestrips.h" +#include "geomVertexWriter.h" PStatCollector CullTraverser::_nodes_pcollector("Nodes"); PStatCollector CullTraverser::_geom_nodes_pcollector("Nodes:GeomNodes"); @@ -310,47 +309,34 @@ make_bounds_viz(const BoundingVolume &vol) { } else if (vol.is_of_type(BoundingSphere::get_class_type())) { const BoundingSphere *sphere = DCAST(BoundingSphere, &vol); - if (use_qpgeom) { - static const int num_slices = 16; - static const int num_stacks = 8; + static const int num_slices = 16; + static const int num_stacks = 8; - PT(qpGeomVertexData) vdata = new qpGeomVertexData - ("bounds", qpGeomVertexFormat::get_v3(), - qpGeom::UH_stream); - qpGeomVertexWriter vertex(vdata, InternalName::get_vertex()); - - PT(qpGeomTristrips) strip = new qpGeomTristrips(qpGeom::UH_stream); - for (int sl = 0; sl < num_slices; ++sl) { - float longitude0 = (float)sl / (float)num_slices; - float longitude1 = (float)(sl + 1) / (float)num_slices; - vertex.add_data3f(compute_point(sphere, 0.0, longitude0)); - for (int st = 1; st < num_stacks; ++st) { - float latitude = (float)st / (float)num_stacks; - vertex.add_data3f(compute_point(sphere, latitude, longitude0)); - vertex.add_data3f(compute_point(sphere, latitude, longitude1)); - } - vertex.add_data3f(compute_point(sphere, 1.0, longitude0)); - - strip->add_next_vertices(num_stacks * 2); - strip->close_primitive(); + PT(GeomVertexData) vdata = new GeomVertexData + ("bounds", GeomVertexFormat::get_v3(), + Geom::UH_stream); + GeomVertexWriter vertex(vdata, InternalName::get_vertex()); + + PT(GeomTristrips) strip = new GeomTristrips(Geom::UH_stream); + for (int sl = 0; sl < num_slices; ++sl) { + float longitude0 = (float)sl / (float)num_slices; + float longitude1 = (float)(sl + 1) / (float)num_slices; + vertex.add_data3f(compute_point(sphere, 0.0, longitude0)); + for (int st = 1; st < num_stacks; ++st) { + float latitude = (float)st / (float)num_stacks; + vertex.add_data3f(compute_point(sphere, latitude, longitude0)); + vertex.add_data3f(compute_point(sphere, latitude, longitude1)); } + vertex.add_data3f(compute_point(sphere, 1.0, longitude0)); - PT(qpGeom) qpgeom = new qpGeom; - qpgeom->set_vertex_data(vdata); - qpgeom->add_primitive(strip); - geom = qpgeom.p(); - - } else { - geom = new GeomSphere; - PTA_Vertexf verts; - LPoint3f center = sphere->get_center(); - verts.push_back(center); - center[0] += sphere->get_radius(); - verts.push_back(center); - geom->set_coords(verts); - geom->set_num_prims(1); + strip->add_next_vertices(num_stacks * 2); + strip->close_primitive(); } + geom = new Geom; + geom->set_vertex_data(vdata); + geom->add_primitive(strip); + } else { pgraph_cat.warning() << "Don't know how to draw a representation of " @@ -376,10 +362,10 @@ make_tight_bounds_viz(PandaNode *node) { bool found_any = false; node->calc_tight_bounds(n, x, found_any, TransformState::make_identity()); if (found_any) { - PT(qpGeomVertexData) vdata = new qpGeomVertexData - ("bounds", qpGeomVertexFormat::get_v3(), - qpGeom::UH_stream); - qpGeomVertexWriter vertex(vdata, InternalName::get_vertex()); + PT(GeomVertexData) vdata = new GeomVertexData + ("bounds", GeomVertexFormat::get_v3(), + Geom::UH_stream); + GeomVertexWriter vertex(vdata, InternalName::get_vertex()); vertex.add_data3f(n[0], n[1], n[2]); vertex.add_data3f(n[0], n[1], x[2]); @@ -390,7 +376,7 @@ make_tight_bounds_viz(PandaNode *node) { vertex.add_data3f(x[0], x[1], n[2]); vertex.add_data3f(x[0], x[1], x[2]); - PT(qpGeomLinestrips) strip = new qpGeomLinestrips(qpGeom::UH_stream); + PT(GeomLinestrips) strip = new GeomLinestrips(Geom::UH_stream); // We wind one long linestrip around the wireframe cube. This // does require backtracking a few times here and there. @@ -412,10 +398,10 @@ make_tight_bounds_viz(PandaNode *node) { strip->add_vertex(1); strip->close_primitive(); - PT(qpGeom) qpgeom = new qpGeom; - qpgeom->set_vertex_data(vdata); - qpgeom->add_primitive(strip); - geom = qpgeom.p(); + PT(Geom) geom = new Geom; + geom->set_vertex_data(vdata); + geom->add_primitive(strip); + geom = geom.p(); } return geom; diff --git a/panda/src/pgraph/cullableObject.cxx b/panda/src/pgraph/cullableObject.cxx index 7e5b1d769f..6bd19dc575 100644 --- a/panda/src/pgraph/cullableObject.cxx +++ b/panda/src/pgraph/cullableObject.cxx @@ -25,9 +25,9 @@ #include "lens.h" #include "stateMunger.h" #include "pStatTimer.h" -#include "qpgeomVertexWriter.h" -#include "qpgeomVertexReader.h" -#include "qpgeomTriangles.h" +#include "geomVertexWriter.h" +#include "geomVertexReader.h" +#include "geomTriangles.h" PStatCollector CullableObject::_munge_points_pcollector("*:Munge:Points"); @@ -43,76 +43,70 @@ TypeHandle CullableObject::_type_handle; //////////////////////////////////////////////////////////////////// void CullableObject:: munge_geom(GraphicsStateGuardianBase *gsg, - qpGeomMunger *munger, const CullTraverser *traverser) { + GeomMunger *munger, const CullTraverser *traverser) { if (_geom != (Geom *)NULL) { - // Temporary test and dcast until the experimental Geom rewrite - // becomes the actual Geom rewrite. - if (_geom->is_qpgeom()) { - _munger = munger; - CPT(qpGeom) qpgeom = DCAST(qpGeom, _geom); - _munged_data = qpgeom->get_vertex_data(); + _munger = munger; + _munged_data = _geom->get_vertex_data(); - int geom_rendering = qpgeom->get_geom_rendering(); - geom_rendering = _state->get_geom_rendering(geom_rendering); - geom_rendering = _modelview_transform->get_geom_rendering(geom_rendering); - - GraphicsStateGuardianBase *gsg = traverser->get_gsg(); - int gsg_bits = gsg->get_supported_geom_rendering(); - if (!hardware_point_sprites) { - // If support for hardware point sprites or perspective-scaled - // points is disabled, we don't allow the GSG to tell us it - // supports them. - gsg_bits &= ~(qpGeom::GR_point_perspective | qpGeom::GR_point_sprite); - } - int unsupported_bits = geom_rendering & ~gsg_bits; - if ((unsupported_bits & qpGeom::GR_point_bits) != 0) { - // The GSG doesn't support rendering these fancy points - // directly; we have to render them in software instead. - // Munge them into quads. This will replace the _geom and - // _munged_data, and might also replace _state. - if (pgraph_cat.is_spam()) { - pgraph_cat.spam() - << "munge_points_to_quads() for geometry with bits: " - << hex << geom_rendering << ", unsupported: " - << (unsupported_bits & qpGeom::GR_point_bits) << dec << "\n"; - } - munge_points_to_quads(traverser); - qpgeom = DCAST(qpGeom, _geom); - } - - // Now invoke the munger to ensure the resulting geometry is in - // a GSG-friendly form. - munger->munge_geom(qpgeom, _munged_data); - - StateMunger *state_munger; - DCAST_INTO_V(state_munger, munger); - _state = state_munger->munge_state(_state); - - CPT(qpGeomVertexData) animated_vertices = - _munged_data->animate_vertices(); -#ifndef NDEBUG - if (show_cpu_animation && animated_vertices != _munged_data) { - // These vertices were CPU-animated, so flash them. - static const double flash_rate = 1.0; // 1 state change per second - int cycle = (int)(ClockObject::get_global_clock()->get_frame_time() * flash_rate); - if ((cycle & 1) == 0) { - static Colorf flash_color(0.8f, 0.2f, 0.2f, 1.0f); - if (animated_vertices->has_color()) { - animated_vertices = animated_vertices->set_color(flash_color); - } else { - // We have to add a color column, which means we have to - // re-munge. - animated_vertices = animated_vertices->set_color - (flash_color, 1, qpGeom::NT_packed_dabc, qpGeom::C_color); - animated_vertices = munger->munge_data(animated_vertices); - } - _state = _state->remove_attrib(TextureAttrib::get_class_type()); - } - } -#endif - _munged_data = animated_vertices; - _geom = qpgeom; + int geom_rendering = _geom->get_geom_rendering(); + geom_rendering = _state->get_geom_rendering(geom_rendering); + geom_rendering = _modelview_transform->get_geom_rendering(geom_rendering); + + GraphicsStateGuardianBase *gsg = traverser->get_gsg(); + int gsg_bits = gsg->get_supported_geom_rendering(); + if (!hardware_point_sprites) { + // If support for hardware point sprites or perspective-scaled + // points is disabled, we don't allow the GSG to tell us it + // supports them. + gsg_bits &= ~(Geom::GR_point_perspective | Geom::GR_point_sprite); } + int unsupported_bits = geom_rendering & ~gsg_bits; + + if ((unsupported_bits & Geom::GR_point_bits) != 0) { + // The GSG doesn't support rendering these fancy points + // directly; we have to render them in software instead. + // Munge them into quads. This will replace the _geom and + // _munged_data, and might also replace _state. + if (pgraph_cat.is_spam()) { + pgraph_cat.spam() + << "munge_points_to_quads() for geometry with bits: " + << hex << geom_rendering << ", unsupported: " + << (unsupported_bits & Geom::GR_point_bits) << dec << "\n"; + } + munge_points_to_quads(traverser); + } + + // Now invoke the munger to ensure the resulting geometry is in + // a GSG-friendly form. + munger->munge_geom(_geom, _munged_data); + + StateMunger *state_munger; + DCAST_INTO_V(state_munger, munger); + _state = state_munger->munge_state(_state); + + CPT(GeomVertexData) animated_vertices = + _munged_data->animate_vertices(); +#ifndef NDEBUG + if (show_cpu_animation && animated_vertices != _munged_data) { + // These vertices were CPU-animated, so flash them. + static const double flash_rate = 1.0; // 1 state change per second + int cycle = (int)(ClockObject::get_global_clock()->get_frame_time() * flash_rate); + if ((cycle & 1) == 0) { + static Colorf flash_color(0.8f, 0.2f, 0.2f, 1.0f); + if (animated_vertices->has_color()) { + animated_vertices = animated_vertices->set_color(flash_color); + } else { + // We have to add a color column, which means we have to + // re-munge. + animated_vertices = animated_vertices->set_color + (flash_color, 1, Geom::NT_packed_dabc, Geom::C_color); + animated_vertices = munger->munge_data(animated_vertices); + } + _state = _state->remove_attrib(TextureAttrib::get_class_type()); + } + } +#endif + _munged_data = animated_vertices; } if (_next != (CullableObject *)NULL) { if (_next->_state != (RenderState *)NULL) { @@ -163,15 +157,14 @@ munge_points_to_quads(const CullTraverser *traverser) { PStatTimer timer(_munge_points_pcollector); GraphicsStateGuardianBase *gsg = traverser->get_gsg(); - CPT(qpGeom) qpgeom = DCAST(qpGeom, _geom); - qpGeomVertexReader vertex(_munged_data, InternalName::get_vertex()); - qpGeomVertexReader normal(_munged_data, InternalName::get_normal()); - qpGeomVertexReader color(_munged_data, InternalName::get_color()); - qpGeomVertexReader texcoord(_munged_data, InternalName::get_texcoord()); - qpGeomVertexReader rotate(_munged_data, InternalName::get_rotate()); - qpGeomVertexReader size(_munged_data, InternalName::get_size()); - qpGeomVertexReader aspect_ratio(_munged_data, InternalName::get_aspect_ratio()); + GeomVertexReader vertex(_munged_data, InternalName::get_vertex()); + GeomVertexReader normal(_munged_data, InternalName::get_normal()); + GeomVertexReader color(_munged_data, InternalName::get_color()); + GeomVertexReader texcoord(_munged_data, InternalName::get_texcoord()); + GeomVertexReader rotate(_munged_data, InternalName::get_rotate()); + GeomVertexReader size(_munged_data, InternalName::get_size()); + GeomVertexReader aspect_ratio(_munged_data, InternalName::get_aspect_ratio()); bool has_normal = (normal.has_column()); bool has_color = (color.has_column()); @@ -191,18 +184,18 @@ munge_points_to_quads(const CullTraverser *traverser) { } } - PT(qpGeomVertexArrayFormat) new_array_format = - new qpGeomVertexArrayFormat(InternalName::get_vertex(), 4, - qpGeom::NT_float32, - qpGeom::C_clip_point); + PT(GeomVertexArrayFormat) new_array_format = + new GeomVertexArrayFormat(InternalName::get_vertex(), 4, + Geom::NT_float32, + Geom::C_clip_point); if (has_normal) { - const qpGeomVertexColumn *c = normal.get_column(); + const GeomVertexColumn *c = normal.get_column(); new_array_format->add_column (InternalName::get_normal(), c->get_num_components(), c->get_numeric_type(), c->get_contents()); } if (has_color) { - const qpGeomVertexColumn *c = color.get_column(); + const GeomVertexColumn *c = color.get_column(); new_array_format->add_column (InternalName::get_color(), c->get_num_components(), c->get_numeric_type(), c->get_contents()); @@ -210,29 +203,29 @@ munge_points_to_quads(const CullTraverser *traverser) { if (sprite_texcoord) { new_array_format->add_column (InternalName::get_texcoord(), 2, - qpGeom::NT_float32, - qpGeom::C_texcoord); + Geom::NT_float32, + Geom::C_texcoord); } else if (has_texcoord) { - const qpGeomVertexColumn *c = texcoord.get_column(); + const GeomVertexColumn *c = texcoord.get_column(); new_array_format->add_column (InternalName::get_texcoord(), c->get_num_components(), c->get_numeric_type(), c->get_contents()); } - CPT(qpGeomVertexFormat) new_format = - qpGeomVertexFormat::register_format(new_array_format); + CPT(GeomVertexFormat) new_format = + GeomVertexFormat::register_format(new_array_format); - PT(qpGeomVertexData) new_data = new qpGeomVertexData - (_munged_data->get_name(), new_format, qpGeom::UH_client); + PT(GeomVertexData) new_data = new GeomVertexData + (_munged_data->get_name(), new_format, Geom::UH_client); - qpGeomVertexWriter new_vertex(new_data, InternalName::get_vertex()); - qpGeomVertexWriter new_normal(new_data, InternalName::get_normal()); - qpGeomVertexWriter new_color(new_data, InternalName::get_color()); - qpGeomVertexWriter new_texcoord(new_data, InternalName::get_texcoord()); + GeomVertexWriter new_vertex(new_data, InternalName::get_vertex()); + GeomVertexWriter new_normal(new_data, InternalName::get_normal()); + GeomVertexWriter new_color(new_data, InternalName::get_color()); + GeomVertexWriter new_texcoord(new_data, InternalName::get_texcoord()); int new_vi = 0; - PT(qpGeom) new_geom = new qpGeom(); + PT(Geom) new_geom = new Geom(); new_geom->set_vertex_data(new_data); const LMatrix4f &modelview = _modelview_transform->get_mat(); @@ -285,9 +278,9 @@ munge_points_to_quads(const CullTraverser *traverser) { // CullFaceAttrib but will always render all of the vertices of the // polygons. This is certainly a bug, but in order to fix it we'd // have to do the face culling ourselves--not sure if it's worth it. - int num_primitives = qpgeom->get_num_primitives(); + int num_primitives = _geom->get_num_primitives(); for (int pi = 0; pi < num_primitives; ++pi) { - const qpGeomPrimitive *primitive = qpgeom->get_primitive(pi); + const GeomPrimitive *primitive = _geom->get_primitive(pi); // We must first convert all of the points to eye space. int num_points = primitive->get_max_vertex() + 1; @@ -297,7 +290,7 @@ munge_points_to_quads(const CullTraverser *traverser) { unsigned int *vertices_end = vertices + num_vertices; if (primitive->is_indexed()) { - qpGeomVertexReader index(primitive->get_vertices(), 0); + GeomVertexReader index(primitive->get_vertices(), 0); for (unsigned int *vi = vertices; vi != vertices_end; ++vi) { // Get the point in eye-space coordinates. unsigned int v = index.get_data1i(); @@ -330,7 +323,7 @@ munge_points_to_quads(const CullTraverser *traverser) { // generally faster on PC hardware (otherwise, we'd have to nearly // double the vertices to stitch all the little triangle strips // together). - PT(qpGeomPrimitive) new_primitive = new qpGeomTriangles(qpGeom::UH_client); + PT(GeomPrimitive) new_primitive = new GeomTriangles(Geom::UH_client); for (unsigned int *vi = vertices; vi != vertices_end; ++vi) { // The point in eye coordinates. diff --git a/panda/src/pgraph/cullableObject.h b/panda/src/pgraph/cullableObject.h index bb05baf627..58ef25f72a 100644 --- a/panda/src/pgraph/cullableObject.h +++ b/panda/src/pgraph/cullableObject.h @@ -22,9 +22,9 @@ #include "pandabase.h" #include "geom.h" -#include "qpgeom.h" -#include "qpgeomVertexData.h" -#include "qpgeomMunger.h" +#include "geom.h" +#include "geomVertexData.h" +#include "geomMunger.h" #include "renderState.h" #include "transformState.h" #include "pointerTo.h" @@ -58,7 +58,7 @@ public: INLINE bool has_decals() const; void munge_geom(GraphicsStateGuardianBase *gsg, - qpGeomMunger *munger, const CullTraverser *traverser); + GeomMunger *munger, const CullTraverser *traverser); INLINE void draw(GraphicsStateGuardianBase *gsg); public: @@ -77,8 +77,8 @@ PUBLISHED: public: CPT(Geom) _geom; - PT(qpGeomMunger) _munger; - CPT(qpGeomVertexData) _munged_data; + PT(GeomMunger) _munger; + CPT(GeomVertexData) _munged_data; CPT(RenderState) _state; CPT(TransformState) _modelview_transform; CullableObject *_next; diff --git a/panda/src/pgraph/geomNode.I b/panda/src/pgraph/geomNode.I index a33138ee54..d6e80d04f1 100644 --- a/panda/src/pgraph/geomNode.I +++ b/panda/src/pgraph/geomNode.I @@ -92,7 +92,7 @@ modify_geom(int n) { nassertr(n >= 0 && n < (int)cdata->_geoms.size(), NULL); Geom *geom = cdata->_geoms[n]._geom; if (geom->get_ref_count() > 1) { - geom = cdata->_geoms[n]._geom = geom->make_copy(); + geom = cdata->_geoms[n]._geom = new Geom(*geom); } return geom; diff --git a/panda/src/pgraph/geomNode.cxx b/panda/src/pgraph/geomNode.cxx index 8149c5eab6..35f81822a9 100644 --- a/panda/src/pgraph/geomNode.cxx +++ b/panda/src/pgraph/geomNode.cxx @@ -17,7 +17,7 @@ //////////////////////////////////////////////////////////////////// #include "geomNode.h" -#include "qpgeom.h" +#include "geom.h" #include "geomTransformer.h" #include "sceneGraphReducer.h" #include "accumulatedAttribs.h" @@ -194,7 +194,7 @@ apply_attribs_to_vertices(const AccumulatedAttribs &attribs, int attrib_types, GeomNode::Geoms::iterator gi; for (gi = cdata->_geoms.begin(); gi != cdata->_geoms.end(); ++gi) { GeomEntry &entry = (*gi); - PT(Geom) new_geom = entry._geom->make_copy(); + PT(Geom) new_geom = new Geom(*entry._geom); AccumulatedAttribs geom_attribs = attribs; entry._state = geom_attribs.collect(entry._state, attrib_types); @@ -352,38 +352,9 @@ calc_tight_bounds(LPoint3f &min_point, LPoint3f &max_point, bool &found_any, int num_geoms = get_num_geoms(); for (int i = 0; i < num_geoms; i++) { const Geom *geom = get_geom(i); - - // Temporary test until the experimental Geom rewrite is final. - if (geom->is_qpgeom()) { - const qpGeom *qpgeom = DCAST(qpGeom, geom); - qpgeom->calc_tight_bounds(min_point, max_point, found_any, - qpgeom->get_vertex_data()->animate_vertices(), - !next_transform->is_identity(), mat); - - } else { - Geom::VertexIterator vi = geom->make_vertex_iterator(); - int num_prims = geom->get_num_prims(); - - for (int p = 0; p < num_prims; p++) { - int length = geom->get_length(p); - for (int v = 0; v < length; v++) { - Vertexf vertex = geom->get_next_vertex(vi) * mat; - - if (found_any) { - min_point.set(min(min_point[0], vertex[0]), - min(min_point[1], vertex[1]), - min(min_point[2], vertex[2])); - max_point.set(max(max_point[0], vertex[0]), - max(max_point[1], vertex[1]), - max(max_point[2], vertex[2])); - } else { - min_point = vertex; - max_point = vertex; - found_any = true; - } - } - } - } + geom->calc_tight_bounds(min_point, max_point, found_any, + geom->get_vertex_data()->animate_vertices(), + !next_transform->is_identity(), mat); } return next_transform; @@ -481,19 +452,14 @@ unify() { const GeomEntry &entry = (*gi); bool unified = false; - if (entry._geom->is_qpgeom()) { - Geoms::iterator gj; - for (gj = new_geoms.begin(); gj != new_geoms.end() && !unified; ++gj) { - GeomEntry &new_entry = (*gj); - if (new_entry._geom->is_qpgeom()) { - if (entry._state == new_entry._state) { - // Both states match, so try to combine the primitives. - if (DCAST(qpGeom, new_entry._geom)->copy_primitives_from - (DCAST(qpGeom, entry._geom))) { - // Successfully combined! - unified = true; - } - } + Geoms::iterator gj; + for (gj = new_geoms.begin(); gj != new_geoms.end() && !unified; ++gj) { + GeomEntry &new_entry = (*gj); + if (entry._state == new_entry._state) { + // Both states match, so try to combine the primitives. + if (new_entry._geom->copy_primitives_from(entry._geom)) { + // Successfully combined! + unified = true; } } } @@ -512,9 +478,7 @@ unify() { // Finally, go back through and unify the resulting geom(s). for (gi = cdata->_geoms.begin(); gi != cdata->_geoms.end(); ++gi) { const GeomEntry &entry = (*gi); - if (entry._geom->is_qpgeom()) { - DCAST(qpGeom, entry._geom)->unify_in_place(); - } + entry._geom->unify_in_place(); } } @@ -551,7 +515,7 @@ write_verbose(ostream &out, int indent_level) const { const GeomEntry &entry = (*gi); indent(out, indent_level + 2) << *entry._geom << " " << *entry._state << "\n"; - entry._geom->write_verbose(out, indent_level + 4); + entry._geom->write(out, indent_level + 4); } } diff --git a/panda/src/pgraph/geomTransformer.I b/panda/src/pgraph/geomTransformer.I index eb1b1efff6..d4ebe45349 100644 --- a/panda/src/pgraph/geomTransformer.I +++ b/panda/src/pgraph/geomTransformer.I @@ -42,12 +42,12 @@ set_max_collect_vertices(int max_collect_vertices) { } //////////////////////////////////////////////////////////////////// -// Function: GeomTransformer::qpSourceVertices::Ordering Operator +// Function: GeomTransformer::SourceVertices::Ordering Operator // Access: Public // Description: //////////////////////////////////////////////////////////////////// -INLINE bool GeomTransformer::qpSourceVertices:: -operator < (const GeomTransformer::qpSourceVertices &other) const { +INLINE bool GeomTransformer::SourceVertices:: +operator < (const GeomTransformer::SourceVertices &other) const { if (_vertex_data != other._vertex_data) { return _vertex_data < other._vertex_data; } @@ -55,12 +55,12 @@ operator < (const GeomTransformer::qpSourceVertices &other) const { } //////////////////////////////////////////////////////////////////// -// Function: GeomTransformer::qpSourceTexCoords::Ordering Operator +// Function: GeomTransformer::SourceTexCoords::Ordering Operator // Access: Public // Description: //////////////////////////////////////////////////////////////////// -INLINE bool GeomTransformer::qpSourceTexCoords:: -operator < (const GeomTransformer::qpSourceTexCoords &other) const { +INLINE bool GeomTransformer::SourceTexCoords:: +operator < (const GeomTransformer::SourceTexCoords &other) const { if (_vertex_data != other._vertex_data) { return _vertex_data < other._vertex_data; } @@ -73,58 +73,6 @@ operator < (const GeomTransformer::qpSourceTexCoords &other) const { return (_mat.compare_to(other._mat) < 0); } -//////////////////////////////////////////////////////////////////// -// Function: GeomTransformer::qpSourceColors::Ordering Operator -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE bool GeomTransformer::qpSourceColors:: -operator < (const GeomTransformer::qpSourceColors &other) const { - if (_vertex_data != other._vertex_data) { - return _vertex_data < other._vertex_data; - } - return (_color.compare_to(other._color) < 0); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomTransformer::SourceVertices::Ordering Operator -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE bool GeomTransformer::SourceVertices:: -operator < (const GeomTransformer::SourceVertices &other) const { - if (_coords != other._coords) { - return _coords < other._coords; - } - return (_mat.compare_to(other._mat) < 0); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomTransformer::SourceNormals::Ordering Operator -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE bool GeomTransformer::SourceNormals:: -operator < (const GeomTransformer::SourceNormals &other) const { - if (_norms != other._norms) { - return _norms < other._norms; - } - return (_mat.compare_to(other._mat) < 0); -} - -//////////////////////////////////////////////////////////////////// -// Function: GeomTransformer::SourceTexCoords::Ordering Operator -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE bool GeomTransformer::SourceTexCoords:: -operator < (const GeomTransformer::SourceTexCoords &other) const { - if (_texcoords != other._texcoords) { - return _texcoords < other._texcoords; - } - return (_mat.compare_to(other._mat) < 0); -} - //////////////////////////////////////////////////////////////////// // Function: GeomTransformer::SourceColors::Ordering Operator // Access: Public @@ -132,10 +80,10 @@ operator < (const GeomTransformer::SourceTexCoords &other) const { //////////////////////////////////////////////////////////////////// INLINE bool GeomTransformer::SourceColors:: operator < (const GeomTransformer::SourceColors &other) const { - if (_colors != other._colors) { - return _colors < other._colors; + if (_vertex_data != other._vertex_data) { + return _vertex_data < other._vertex_data; } - return (_scale.compare_to(other._scale) < 0); + return (_color.compare_to(other._color) < 0); } //////////////////////////////////////////////////////////////////// diff --git a/panda/src/pgraph/geomTransformer.cxx b/panda/src/pgraph/geomTransformer.cxx index 90aee01ef2..21041dab7e 100644 --- a/panda/src/pgraph/geomTransformer.cxx +++ b/panda/src/pgraph/geomTransformer.cxx @@ -19,8 +19,8 @@ #include "geomTransformer.h" #include "sceneGraphReducer.h" #include "geomNode.h" -#include "qpgeom.h" -#include "qpgeomVertexRewriter.h" +#include "geom.h" +#include "geomVertexRewriter.h" #include "renderState.h" #include "transformTable.h" #include "transformBlendTable.h" @@ -75,105 +75,40 @@ GeomTransformer:: bool GeomTransformer:: transform_vertices(Geom *geom, const LMatrix4f &mat) { PStatTimer timer(apply_vertex_collector); - bool transformed = false; nassertr(geom != (Geom *)NULL, false); - - if (geom->is_qpgeom()) { - qpGeom *qpgeom = DCAST(qpGeom, geom); - - qpSourceVertices sv; - sv._mat = mat; - sv._vertex_data = qpgeom->get_vertex_data(); - - PT(qpGeomVertexData) &new_data = _qpvertices[sv]; - if (new_data.is_null()) { - // We have not yet converted these vertices. Do so now. - new_data = new qpGeomVertexData(*sv._vertex_data); - CPT(qpGeomVertexFormat) format = new_data->get_format(); - - int ci; - for (ci = 0; ci < format->get_num_points(); ci++) { - qpGeomVertexRewriter data(new_data, format->get_point(ci)); - - while (!data.is_at_end()) { - const LPoint3f &point = data.get_data3f(); - data.set_data3f(point * mat); - } - } - for (ci = 0; ci < format->get_num_vectors(); ci++) { - qpGeomVertexRewriter data(new_data, format->get_vector(ci)); - - while (!data.is_at_end()) { - const LVector3f &vector = data.get_data3f(); - data.set_data3f(normalize(vector * mat)); - } + SourceVertices sv; + sv._mat = mat; + sv._vertex_data = geom->get_vertex_data(); + + PT(GeomVertexData) &new_data = _vertices[sv]; + if (new_data.is_null()) { + // We have not yet converted these vertices. Do so now. + new_data = new GeomVertexData(*sv._vertex_data); + CPT(GeomVertexFormat) format = new_data->get_format(); + + int ci; + for (ci = 0; ci < format->get_num_points(); ci++) { + GeomVertexRewriter data(new_data, format->get_point(ci)); + + while (!data.is_at_end()) { + const LPoint3f &point = data.get_data3f(); + data.set_data3f(point * mat); } } - - qpgeom->set_vertex_data(new_data); - transformed = true; - - } else { - PTA_Vertexf coords; - PTA_ushort index; - - geom->get_coords(coords, index); - - if (!coords.empty()) { - // Look up the Geom's coords in our table--have we already - // transformed this array? - SourceVertices sv; - sv._mat = mat; - sv._coords = coords; + for (ci = 0; ci < format->get_num_vectors(); ci++) { + GeomVertexRewriter data(new_data, format->get_vector(ci)); - PTA_Vertexf &new_coords = _vertices[sv]; - - if (new_coords.is_null()) { - // We have not transformed the array yet. Do so now. - new_coords.reserve(coords.size()); - PTA_Vertexf::const_iterator vi; - for (vi = coords.begin(); vi != coords.end(); ++vi) { - new_coords.push_back((*vi) * mat); - } - nassertr(new_coords.size() == coords.size(), false); + while (!data.is_at_end()) { + const LVector3f &vector = data.get_data3f(); + data.set_data3f(normalize(vector * mat)); } - - geom->set_coords(new_coords, index); - transformed = true; - } - - // Now do the same thing for normals. - PTA_Normalf norms; - GeomBindType bind; - - geom->get_normals(norms, bind, index); - - if (bind != G_OFF) { - SourceNormals sn; - sn._mat = mat; - sn._norms = norms; - - PTA_Normalf &new_norms = _normals[sn]; - - if (new_norms.is_null()) { - // We have not transformed the array yet. Do so now. - new_norms.reserve(norms.size()); - PTA_Normalf::const_iterator ni; - for (ni = norms.begin(); ni != norms.end(); ++ni) { - Normalf new_norm = (*ni) * mat; - new_norm.normalize(); - new_norms.push_back(new_norm); - } - nassertr(new_norms.size() == norms.size(), false); - } - - geom->set_normals(new_norms, bind, index); - transformed = true; } } + + geom->set_vertex_data(new_data); - return transformed; + return true; } @@ -196,7 +131,7 @@ transform_vertices(GeomNode *node, const LMatrix4f &mat) { GeomNode::Geoms::iterator gi; for (gi = cdata->_geoms.begin(); gi != cdata->_geoms.end(); ++gi) { GeomNode::GeomEntry &entry = (*gi); - PT(Geom) new_geom = entry._geom->make_copy(); + PT(Geom) new_geom = new Geom(*entry._geom); if (transform_vertices(new_geom, mat)) { entry._geom = new_geom; any_changed = true; @@ -218,83 +153,48 @@ bool GeomTransformer:: transform_texcoords(Geom *geom, const InternalName *from_name, const InternalName *to_name, const LMatrix4f &mat) { PStatTimer timer(apply_texcoord_collector); - bool transformed = false; nassertr(geom != (Geom *)NULL, false); - if (geom->is_qpgeom()) { - qpGeom *qpgeom = DCAST(qpGeom, geom); - qpSourceTexCoords st; - st._mat = mat; - st._from = from_name; - st._to = to_name; - st._vertex_data = qpgeom->get_vertex_data(); - - PT(qpGeomVertexData) &new_data = _qptexcoords[st]; - if (new_data.is_null()) { - if (!st._vertex_data->has_column(from_name)) { - // No from_name column; no change. - return false; - } - - // We have not yet converted these texcoords. Do so now. - if (st._vertex_data->has_column(to_name)) { - new_data = new qpGeomVertexData(*st._vertex_data); - } else { - const qpGeomVertexColumn *old_column = - st._vertex_data->get_format()->get_column(from_name); - new_data = st._vertex_data->replace_column - (to_name, old_column->get_num_components(), - old_column->get_numeric_type(), - old_column->get_contents()); - } - - CPT(qpGeomVertexFormat) format = new_data->get_format(); - - qpGeomVertexWriter tdata(new_data, to_name); - qpGeomVertexReader fdata(new_data, from_name); - - while (!fdata.is_at_end()) { - const LPoint4f &coord = fdata.get_data4f(); - tdata.set_data4f(coord * mat); - } + SourceTexCoords st; + st._mat = mat; + st._from = from_name; + st._to = to_name; + st._vertex_data = geom->get_vertex_data(); + + PT(GeomVertexData) &new_data = _texcoords[st]; + if (new_data.is_null()) { + if (!st._vertex_data->has_column(from_name)) { + // No from_name column; no change. + return false; } - - qpgeom->set_vertex_data(new_data); - transformed = true; - - } else { - PTA_TexCoordf texcoords = geom->get_texcoords_array(from_name); - PTA_ushort index = geom->get_texcoords_index(from_name); - - if (!texcoords.is_null()) { - // Look up the Geom's texcoords in our table--have we already - // transformed this array? - SourceTexCoords stc; - stc._mat = mat; - stc._texcoords = texcoords; - - PTA_TexCoordf &new_texcoords = _texcoords[stc]; - - if (new_texcoords.is_null()) { - // We have not transformed the array yet. Do so now. - new_texcoords.reserve(texcoords.size()); - PTA_TexCoordf::const_iterator tci; - for (tci = texcoords.begin(); tci != texcoords.end(); ++tci) { - const TexCoordf &tc = (*tci); - LVecBase4f v4(tc[0], tc[1], 0.0f, 1.0f); - v4 = v4 * mat; - new_texcoords.push_back(TexCoordf(v4[0] / v4[3], v4[1] / v4[3])); - } - nassertr(new_texcoords.size() == texcoords.size(), false); - } - - geom->set_texcoords(to_name, new_texcoords, index); - transformed = true; + + // We have not yet converted these texcoords. Do so now. + if (st._vertex_data->has_column(to_name)) { + new_data = new GeomVertexData(*st._vertex_data); + } else { + const GeomVertexColumn *old_column = + st._vertex_data->get_format()->get_column(from_name); + new_data = st._vertex_data->replace_column + (to_name, old_column->get_num_components(), + old_column->get_numeric_type(), + old_column->get_contents()); + } + + CPT(GeomVertexFormat) format = new_data->get_format(); + + GeomVertexWriter tdata(new_data, to_name); + GeomVertexReader fdata(new_data, from_name); + + while (!fdata.is_at_end()) { + const LPoint4f &coord = fdata.get_data4f(); + tdata.set_data4f(coord * mat); } } + + geom->set_vertex_data(new_data); - return transformed; + return true; } @@ -318,7 +218,7 @@ transform_texcoords(GeomNode *node, const InternalName *from_name, GeomNode::Geoms::iterator gi; for (gi = cdata->_geoms.begin(); gi != cdata->_geoms.end(); ++gi) { GeomNode::GeomEntry &entry = (*gi); - PT(Geom) new_geom = entry._geom->make_copy(); + PT(Geom) new_geom = new Geom(*entry._geom); if (transform_texcoords(new_geom, from_name, to_name, mat)) { entry._geom = new_geom; any_changed = true; @@ -339,46 +239,25 @@ transform_texcoords(GeomNode *node, const InternalName *from_name, bool GeomTransformer:: set_color(Geom *geom, const Colorf &color) { PStatTimer timer(apply_set_color_collector); - bool transformed = false; - if (geom->is_qpgeom()) { - qpGeom *qpgeom = DCAST(qpGeom, geom); - - qpSourceColors sc; - sc._color = color; - sc._vertex_data = qpgeom->get_vertex_data(); - - CPT(qpGeomVertexData) &new_data = _qpfcolors[sc]; - if (new_data.is_null()) { - // We have not yet converted these colors. Do so now. - if (sc._vertex_data->has_column(InternalName::get_color())) { - new_data = sc._vertex_data->set_color(color); - } else { - new_data = sc._vertex_data->set_color - (color, 1, qpGeom::NT_packed_dabc, qpGeom::C_color); - } + SourceColors sc; + sc._color = color; + sc._vertex_data = geom->get_vertex_data(); + + CPT(GeomVertexData) &new_data = _fcolors[sc]; + if (new_data.is_null()) { + // We have not yet converted these colors. Do so now. + if (sc._vertex_data->has_column(InternalName::get_color())) { + new_data = sc._vertex_data->set_color(color); + } else { + new_data = sc._vertex_data->set_color + (color, 1, Geom::NT_packed_dabc, Geom::C_color); } - - qpgeom->set_vertex_data(new_data); - transformed = true; - - } else { - // In this case, we always replace whatever color array was there - // with a new color array containing just this color. - - // We do want to share this one-element array between Geoms, though. - PTA_Colorf &new_colors = _fcolors[color]; - - if (new_colors.is_null()) { - // We haven't seen this color before; define a new color array. - new_colors.push_back(color); - } - - geom->set_colors(new_colors, G_OVERALL); - transformed = true; } + + geom->set_vertex_data(new_data); - return transformed; + return true; } @@ -398,7 +277,7 @@ set_color(GeomNode *node, const Colorf &color) { GeomNode::Geoms::iterator gi; for (gi = cdata->_geoms.begin(); gi != cdata->_geoms.end(); ++gi) { GeomNode::GeomEntry &entry = (*gi); - PT(Geom) new_geom = entry._geom->make_copy(); + PT(Geom) new_geom = new Geom(*entry._geom); if (set_color(new_geom, color)) { entry._geom = new_geom; any_changed = true; @@ -418,68 +297,27 @@ set_color(GeomNode *node, const Colorf &color) { bool GeomTransformer:: transform_colors(Geom *geom, const LVecBase4f &scale) { PStatTimer timer(apply_scale_color_collector); - bool transformed = false; nassertr(geom != (Geom *)NULL, false); - if (geom->is_qpgeom()) { - qpGeom *qpgeom = DCAST(qpGeom, geom); - - qpSourceColors sc; - sc._color = scale; - sc._vertex_data = qpgeom->get_vertex_data(); - - CPT(qpGeomVertexData) &new_data = _qptcolors[sc]; - if (new_data.is_null()) { - // We have not yet converted these colors. Do so now. - if (sc._vertex_data->has_column(InternalName::get_color())) { - new_data = sc._vertex_data->scale_color(scale); - } else { - new_data = sc._vertex_data->set_color - (scale, 1, qpGeom::NT_packed_dabc, qpGeom::C_color); - } - } - - qpgeom->set_vertex_data(new_data); - transformed = true; - - } else { - PTA_Colorf colors; - GeomBindType bind; - PTA_ushort index; - - geom->get_colors(colors, bind, index); - - if (bind != G_OFF) { - // Look up the Geom's colors in our table--have we already - // transformed this array? - SourceColors sc; - sc._scale = scale; - sc._colors = colors; - - PTA_Colorf &new_colors = _tcolors[sc]; - - if (new_colors.is_null()) { - // We have not transformed the array yet. Do so now. - new_colors.reserve(colors.size()); - PTA_Colorf::const_iterator ci; - for (ci = colors.begin(); ci != colors.end(); ++ci) { - const Colorf &c = (*ci); - Colorf transformed(c[0] * scale[0], - c[1] * scale[1], - c[2] * scale[2], - c[3] * scale[3]); - new_colors.push_back(transformed); - } - nassertr(new_colors.size() == colors.size(), false); - } - - geom->set_colors(new_colors, bind, index); - transformed = true; + SourceColors sc; + sc._color = scale; + sc._vertex_data = geom->get_vertex_data(); + + CPT(GeomVertexData) &new_data = _tcolors[sc]; + if (new_data.is_null()) { + // We have not yet converted these colors. Do so now. + if (sc._vertex_data->has_column(InternalName::get_color())) { + new_data = sc._vertex_data->scale_color(scale); + } else { + new_data = sc._vertex_data->set_color + (scale, 1, Geom::NT_packed_dabc, Geom::C_color); } } + + geom->set_vertex_data(new_data); - return transformed; + return true; } @@ -501,7 +339,7 @@ transform_colors(GeomNode *node, const LVecBase4f &scale) { GeomNode::Geoms::iterator gi; for (gi = cdata->_geoms.begin(); gi != cdata->_geoms.end(); ++gi) { GeomNode::GeomEntry &entry = (*gi); - PT(Geom) new_geom = entry._geom->make_copy(); + PT(Geom) new_geom = new Geom(*entry._geom); if (transform_colors(new_geom, scale)) { entry._geom = new_geom; any_changed = true; @@ -545,15 +383,15 @@ apply_state(GeomNode *node, const RenderState *state) { // Returns the number of unique GeomVertexDatas created. //////////////////////////////////////////////////////////////////// int GeomTransformer:: -collect_vertex_data(qpGeom *geom, int collect_bits) { - const qpGeomVertexData *vdata = geom->get_vertex_data(); +collect_vertex_data(Geom *geom, int collect_bits) { + const GeomVertexData *vdata = geom->get_vertex_data(); if (vdata->get_num_rows() > _max_collect_vertices) { // Don't even bother. return 0; } - const qpGeomVertexFormat *format = vdata->get_format(); + const GeomVertexFormat *format = vdata->get_format(); NewCollectedKey key; if ((collect_bits & SceneGraphReducer::CVD_name) != 0) { @@ -576,11 +414,11 @@ collect_vertex_data(qpGeom *geom, int collect_bits) { int num_created = 0; NewCollectedData::iterator ni = _new_collected_data.find(key); - PT(qpGeomVertexData) new_data; + PT(GeomVertexData) new_data; if (ni != _new_collected_data.end()) { new_data = (*ni).second; } else { - new_data = new qpGeomVertexData(vdata->get_name(), format, + new_data = new GeomVertexData(vdata->get_name(), format, vdata->get_usage_hint()); _new_collected_data[key] = new_data; ++num_created; @@ -591,7 +429,7 @@ collect_vertex_data(qpGeom *geom, int collect_bits) { if (new_num_vertices > _max_collect_vertices) { // Whoa, hold the phone! Too many vertices going into this one // GeomVertexData object; we'd better start over. - new_data = new qpGeomVertexData(vdata->get_name(), format, + new_data = new GeomVertexData(vdata->get_name(), format, vdata->get_usage_hint()); _new_collected_data[key] = new_data; offset = 0; @@ -602,8 +440,8 @@ collect_vertex_data(qpGeom *geom, int collect_bits) { new_data->set_num_rows(new_num_vertices); for (int i = 0; i < vdata->get_num_arrays(); ++i) { - qpGeomVertexArrayData *new_array = new_data->modify_array(i); - const qpGeomVertexArrayData *old_array = vdata->get_array(i); + GeomVertexArrayData *new_array = new_data->modify_array(i); + const GeomVertexArrayData *old_array = vdata->get_array(i); int stride = format->get_array(i)->get_stride(); int start_byte = offset * stride; int copy_bytes = old_array->get_data_size_bytes(); @@ -671,7 +509,7 @@ collect_vertex_data(qpGeom *geom, int collect_bits) { // values in the new table. This requires a nested loop, since // each column of transform_index might define multiple index // values. - qpGeomVertexRewriter index(new_data, InternalName::get_transform_index()); + GeomVertexRewriter index(new_data, InternalName::get_transform_index()); if (index.has_column()) { int num_values = index.get_column()->get_num_values(); int new_index[4]; @@ -714,7 +552,7 @@ collect_vertex_data(qpGeom *geom, int collect_bits) { // Modify the indices. This is simpler than the transform_index, // above, because each column of transform_blend may only define // one index value. - qpGeomVertexRewriter index(new_data, InternalName::get_transform_blend()); + GeomVertexRewriter index(new_data, InternalName::get_transform_blend()); if (index.has_column()) { index.set_row(offset); while (!index.is_at_end()) { @@ -774,22 +612,20 @@ collect_vertex_data(GeomNode *node, int collect_bits) { GeomNode::Geoms::iterator gi; for (gi = cdata->_geoms.begin(); gi != cdata->_geoms.end(); ++gi) { GeomNode::GeomEntry &entry = (*gi); - if (entry._geom->is_qpgeom()) { - PT(qpGeom) new_geom = DCAST(qpGeom, entry._geom->make_copy()); - entry._geom = new_geom; + PT(Geom) new_geom = new Geom(*entry._geom); + entry._geom = new_geom; - if ((collect_bits & SceneGraphReducer::CVD_avoid_dynamic) != 0 && - new_geom->get_vertex_data()->get_usage_hint() < qpGeom::UH_static) { - // This one has some dynamic properties. Collect it - // independently of the outside world. - if (dynamic == (GeomTransformer *)NULL) { - dynamic = new GeomTransformer(*this); - } - num_created += dynamic->collect_vertex_data(new_geom, collect_bits); - - } else { - num_created += collect_vertex_data(new_geom, collect_bits); + if ((collect_bits & SceneGraphReducer::CVD_avoid_dynamic) != 0 && + new_geom->get_vertex_data()->get_usage_hint() < Geom::UH_static) { + // This one has some dynamic properties. Collect it + // independently of the outside world. + if (dynamic == (GeomTransformer *)NULL) { + dynamic = new GeomTransformer(*this); } + num_created += dynamic->collect_vertex_data(new_geom, collect_bits); + + } else { + num_created += collect_vertex_data(new_geom, collect_bits); } } diff --git a/panda/src/pgraph/geomTransformer.h b/panda/src/pgraph/geomTransformer.h index a824065e26..21dea413e7 100644 --- a/panda/src/pgraph/geomTransformer.h +++ b/panda/src/pgraph/geomTransformer.h @@ -22,8 +22,8 @@ #include "pandabase.h" #include "luse.h" -#include "qpgeom.h" -#include "qpgeomVertexData.h" +#include "geom.h" +#include "geomVertexData.h" class GeomNode; class RenderState; @@ -72,103 +72,55 @@ public: bool apply_state(GeomNode *node, const RenderState *state); - int collect_vertex_data(qpGeom *geom, int collect_bits); + int collect_vertex_data(Geom *geom, int collect_bits); int collect_vertex_data(GeomNode *node, int collect_bits); private: int _max_collect_vertices; - class qpSourceVertices { - public: - INLINE bool operator < (const qpSourceVertices &other) const; - - LMatrix4f _mat; - CPT(qpGeomVertexData) _vertex_data; - }; - typedef pmap NewVertices; - NewVertices _qpvertices; - - class qpSourceTexCoords { - public: - INLINE bool operator < (const qpSourceTexCoords &other) const; - - LMatrix4f _mat; - CPT(InternalName) _from; - CPT(InternalName) _to; - CPT(qpGeomVertexData) _vertex_data; - }; - typedef pmap NewTexCoords; - NewTexCoords _qptexcoords; - - class qpSourceColors { - public: - INLINE bool operator < (const qpSourceColors &other) const; - - LVecBase4f _color; - CPT(qpGeomVertexData) _vertex_data; - }; - typedef pmap NewColors; - - // We have two concepts of colors: the "fixed" colors, which are - // slapped in as a complete replacement of the original colors - // (e.g. via a ColorAttrib), and the "transformed" colors, which are - // modified from the original colors (e.g. via a ColorScaleAttrib). - NewColors _qpfcolors, _qptcolors; - - class SourceVertices { public: INLINE bool operator < (const SourceVertices &other) const; LMatrix4f _mat; - PTA_Vertexf _coords; + CPT(GeomVertexData) _vertex_data; }; - typedef pmap Vertices; - Vertices _vertices; - - class SourceNormals { - public: - INLINE bool operator < (const SourceNormals &other) const; - - LMatrix4f _mat; - PTA_Normalf _norms; - }; - typedef pmap Normals; - Normals _normals; + typedef pmap NewVertices; + NewVertices _vertices; class SourceTexCoords { public: INLINE bool operator < (const SourceTexCoords &other) const; LMatrix4f _mat; - PTA_TexCoordf _texcoords; + CPT(InternalName) _from; + CPT(InternalName) _to; + CPT(GeomVertexData) _vertex_data; }; - typedef pmap TexCoords; - TexCoords _texcoords; - - // We have two concepts of colors: the "fixed" colors, which are - // slapped in as a complete replacement of the original colors - // (e.g. via a ColorAttrib), and the "transformed" colors, which are - // modified from the original colors (e.g. via a ColorScaleAttrib). - typedef pmap FColors; - FColors _fcolors; + typedef pmap NewTexCoords; + NewTexCoords _texcoords; class SourceColors { public: INLINE bool operator < (const SourceColors &other) const; - LVecBase4f _scale; - PTA_Colorf _colors; + LVecBase4f _color; + CPT(GeomVertexData) _vertex_data; }; - typedef pmap TColors; - TColors _tcolors; + typedef pmap NewColors; + + // We have two concepts of colors: the "fixed" colors, which are + // slapped in as a complete replacement of the original colors + // (e.g. via a ColorAttrib), and the "transformed" colors, which are + // modified from the original colors (e.g. via a ColorScaleAttrib). + NewColors _fcolors, _tcolors; class AlreadyCollectedData { public: - CPT(qpGeomVertexData) _data; + CPT(GeomVertexData) _data; int _offset; }; - typedef pmap< CPT(qpGeomVertexData), AlreadyCollectedData> AlreadyCollected; + typedef pmap< CPT(GeomVertexData), AlreadyCollectedData> AlreadyCollected; AlreadyCollected _already_collected; class NewCollectedKey { @@ -176,10 +128,10 @@ private: INLINE bool operator < (const NewCollectedKey &other) const; string _name; - CPT(qpGeomVertexFormat) _format; - qpGeom::UsageHint _usage_hint; + CPT(GeomVertexFormat) _format; + Geom::UsageHint _usage_hint; }; - typedef pmap< NewCollectedKey, PT(qpGeomVertexData) > NewCollectedData; + typedef pmap< NewCollectedKey, PT(GeomVertexData) > NewCollectedData; NewCollectedData _new_collected_data; }; diff --git a/panda/src/pgraph/lodNode.cxx b/panda/src/pgraph/lodNode.cxx index aec2702f1b..2381081c40 100644 --- a/panda/src/pgraph/lodNode.cxx +++ b/panda/src/pgraph/lodNode.cxx @@ -92,12 +92,6 @@ fillin(DatagramIterator &scan, BamReader *manager) { Switch sw(0, 0); sw.read_datagram(scan); - if (manager->get_file_minor_ver() < 13) { - // Before bam version 4.13, we stored the square of the - // switching distance in the bam files. - sw.set_range(sqrtf(sw.get_in()), sqrtf(sw.get_out())); - } - _switch_vector.push_back(sw); } } diff --git a/panda/src/pgraph/nodePath.cxx b/panda/src/pgraph/nodePath.cxx index 1c1df9e251..941823b656 100644 --- a/panda/src/pgraph/nodePath.cxx +++ b/panda/src/pgraph/nodePath.cxx @@ -49,6 +49,7 @@ #include "plist.h" #include "boundingSphere.h" #include "geomNode.h" +#include "sceneGraphAnalyzer.h" #include "sceneGraphReducer.h" #include "textureCollection.h" #include "textureStageCollection.h" @@ -4814,6 +4815,21 @@ calc_tight_bounds(LPoint3f &min_point, LPoint3f &max_point) { return found_any; } +//////////////////////////////////////////////////////////////////// +// Function: NodePath::analyze +// Access: Published +// Description: Analyzes the geometry below this node and reports the +// number of vertices, triangles, etc. This is the same +// information reported by the bam-info program. +//////////////////////////////////////////////////////////////////// +void NodePath:: +analyze() const { + nassertv_always(!is_empty()); + SceneGraphAnalyzer sga; + sga.add_node(node()); + sga.write(nout); +} + //////////////////////////////////////////////////////////////////// // Function: NodePath::flatten_light // Access: Published diff --git a/panda/src/pgraph/nodePath.h b/panda/src/pgraph/nodePath.h index 26b8f9bae5..701b4d3a86 100644 --- a/panda/src/pgraph/nodePath.h +++ b/panda/src/pgraph/nodePath.h @@ -710,6 +710,8 @@ PUBLISHED: void write_bounds(ostream &out) const; bool calc_tight_bounds(LPoint3f &min_point, LPoint3f &max_point); + void analyze() const; + int flatten_light(); int flatten_medium(); int flatten_strong(); diff --git a/panda/src/pgraph/pandaNode.cxx b/panda/src/pgraph/pandaNode.cxx index b4ebfb8dfe..feca4eeb7c 100644 --- a/panda/src/pgraph/pandaNode.cxx +++ b/panda/src/pgraph/pandaNode.cxx @@ -143,9 +143,7 @@ fillin(DatagramIterator &scan, BamReader *manager) { manager->read_pointer(scan); _draw_mask.set_word(scan.get_uint32()); - if (manager->get_file_minor_ver() >= 12) { - _into_collide_mask.set_word(scan.get_uint32()); - } + _into_collide_mask.set_word(scan.get_uint32()); // Read the parent and child pointers. fillin_up_list(_up, scan, manager); @@ -153,13 +151,11 @@ fillin(DatagramIterator &scan, BamReader *manager) { fillin_down_list(_stashed, scan, manager); // Read in the tag list. - if (manager->get_file_minor_ver() >= 4) { - int num_tags = scan.get_uint32(); - for (int i = 0; i < num_tags; i++) { - string key = scan.get_string(); - string value = scan.get_string(); - _tag_data[key] = value; - } + int num_tags = scan.get_uint32(); + for (int i = 0; i < num_tags; i++) { + string key = scan.get_string(); + string value = scan.get_string(); + _tag_data[key] = value; } } diff --git a/panda/src/pgraph/portalClipper.cxx b/panda/src/pgraph/portalClipper.cxx index be2595a497..59865029bf 100755 --- a/panda/src/pgraph/portalClipper.cxx +++ b/panda/src/pgraph/portalClipper.cxx @@ -27,11 +27,13 @@ #include "geomNode.h" #include "config_pgraph.h" #include "boundingSphere.h" -#include "geomSphere.h" #include "colorAttrib.h" #include "renderModeAttrib.h" #include "cullFaceAttrib.h" #include "depthOffsetAttrib.h" +#include "geomVertexWriter.h" +#include "geomLinestrips.h" +#include "geomPoints.h" TypeHandle PortalClipper::_type_handle; @@ -43,9 +45,7 @@ TypeHandle PortalClipper::_type_handle; PortalClipper:: PortalClipper(GeometricBoundingVolume *frustum, SceneSetup *scene_setup) { _previous = new GeomNode("my_frustum"); - _geom_line = new GeomLine; - _geom_point = new GeomPoint; - _geom_linestrip = new GeomLinestrip; + _geom = new Geom; _view_frustum = _reduced_frustum = DCAST(BoundingHexahedron, frustum); @@ -158,19 +158,21 @@ draw_current_portal() // White frustum is the camera frustum //////////////////////////////////////////////////////////////////// void PortalClipper:: -draw_lines() -{ +draw_lines() { if (!_list.empty()) { - _created_verts.clear(); - _created_colors.clear(); + _created_data = NULL; + + CPT(RenderAttrib) thick = RenderModeAttrib::make(RenderModeAttrib::M_unchanged, _thick); + CPT(RenderState) state = RenderState::make(thick); + + PT(GeomVertexData) vdata = new GeomVertexData + ("portal", GeomVertexFormat::get_v3cp(), Geom::UH_static); + GeomVertexWriter vertex(vdata, InternalName::get_vertex()); + GeomVertexWriter color(vdata, InternalName::get_color()); - // One array each for the indices into these arrays for points - // and lines, and one for our line-segment lengths array. - PTA_ushort point_index; - PTA_ushort line_index; - PTA_int lengths; + PT(GeomLinestrips) lines = new GeomLinestrips(Geom::UH_static); + PT(GeomPoints) points = new GeomPoints(Geom::UH_static); - // Now fill up the arrays. int v = 0; LineList::const_iterator ll; SegmentList::const_iterator sl; @@ -179,49 +181,39 @@ draw_lines() const SegmentList &segs = (*ll); if (segs.size() < 2) { - point_index.push_back(v); - } else { - lengths.push_back(segs.size()); - } - - for (sl = segs.begin(); sl != segs.end(); sl++) { - if (segs.size() >= 2) { - line_index.push_back(v); + // A segment of length 1 is just a point. + for (sl = segs.begin(); sl != segs.end(); sl++) { + points->add_vertex(v); + vertex.add_data3f((*sl)._point); + color.add_data4f((*sl)._color); + v++; } - _created_verts.push_back((*sl)._point); - _created_colors.push_back((*sl)._color); - v++; - //nassertr(v == (int)_created_verts.size(), previous); + points->close_primitive(); + + } else { + // A segment of length 2 or more is a line segment or + // segments. + for (sl = segs.begin(); sl != segs.end(); sl++) { + lines->add_vertex(v); + vertex.add_data3f((*sl)._point); + color.add_data4f((*sl)._color); + v++; + } + lines->close_primitive(); } } - - // Now create the lines. - Geom *geom; - if (line_index.size() > 0) { - // Create a new Geom and add the line segments. - if (line_index.size() <= 2) { - // Here's a special case: just one line segment. - _geom_line->set_num_prims(1); - //_geom_line->set_width(_thick); - geom = _geom_line; - - } else { - // The more normal case: multiple line segments, connected - // end-to-end like a series of linestrips. - _geom_linestrip->set_num_prims(lengths.size()); - _geom_linestrip->set_lengths(lengths); - //_geom_linestrip->set_width(_thick); - geom = _geom_linestrip; - } - - geom->set_colors(_created_colors, G_PER_VERTEX, line_index); - geom->set_coords(_created_verts, line_index); - - //geom->write_verbose(cerr, 0); - - _previous->add_geom(geom); - pgraph_cat.spam() << "added geometry" << endl; + if (lines->get_num_vertices() != 0) { + PT(Geom) geom = new Geom; + geom->set_vertex_data(vdata); + geom->add_primitive(lines); + _previous->add_geom(geom, state); + } + if (points->get_num_vertices() != 0) { + PT(Geom) geom = new Geom; + geom->set_vertex_data(vdata); + geom->add_primitive(points); + _previous->add_geom(geom, state); } } } diff --git a/panda/src/pgraph/portalClipper.h b/panda/src/pgraph/portalClipper.h index 9d33ead15e..fa96e2ed75 100755 --- a/panda/src/pgraph/portalClipper.h +++ b/panda/src/pgraph/portalClipper.h @@ -22,6 +22,7 @@ #include "pandabase.h" #include "geom.h" +#include "geomVertexData.h" #include "sceneSetup.h" #include "renderState.h" #include "portalNode.h" @@ -35,9 +36,6 @@ #include "config_pgraph.h" #include "geom.h" -#include "geomPoint.h" -#include "geomLine.h" -#include "geomLinestrip.h" #include "geomNode.h" class PandaNode; @@ -125,12 +123,8 @@ private: Colorf _color; float _thick; - PTA_Vertexf _created_verts; - PTA_Colorf _created_colors; - - PT(GeomLine) _geom_line; - PT(GeomPoint) _geom_point; - PT(GeomLinestrip) _geom_linestrip; + PT(GeomVertexData) _created_data; + PT(Geom) _geom; BoundingHexahedron *_view_frustum; BoundingHexahedron *_reduced_frustum; diff --git a/panda/src/pgraph/renderModeAttrib.I b/panda/src/pgraph/renderModeAttrib.I index 988395cfca..1ff0967056 100644 --- a/panda/src/pgraph/renderModeAttrib.I +++ b/panda/src/pgraph/renderModeAttrib.I @@ -83,13 +83,13 @@ get_perspective() const { INLINE int RenderModeAttrib:: get_geom_rendering(int geom_rendering) const { if (_mode == M_point) { - geom_rendering |= qpGeom::GR_point; + geom_rendering |= Geom::GR_point; } - if ((geom_rendering & qpGeom::GR_point) != 0) { + if ((geom_rendering & Geom::GR_point) != 0) { if (_perspective) { - geom_rendering |= (qpGeom::GR_point_perspective | qpGeom::GR_point_uniform_size); + geom_rendering |= (Geom::GR_point_perspective | Geom::GR_point_uniform_size); } else if (_thickness != 1.0f) { - geom_rendering |= qpGeom::GR_point_uniform_size; + geom_rendering |= Geom::GR_point_uniform_size; } } diff --git a/panda/src/pgraph/renderModeAttrib.cxx b/panda/src/pgraph/renderModeAttrib.cxx index 197e488bcf..339fb9284a 100644 --- a/panda/src/pgraph/renderModeAttrib.cxx +++ b/panda/src/pgraph/renderModeAttrib.cxx @@ -37,16 +37,16 @@ TypeHandle RenderModeAttrib::_type_handle; // The thickness parameter specifies the thickness to be // used for wireframe lines, as well as for ordinary // linestrip lines; it also specifies the diameter of -// points. It is not supported in DirectX, which only -// supports pixel-based lines and points. +// points. (Thick lines are presently only supported in +// OpenGL; but thick points are supported on either +// platform.) // // If perspective is true, the point thickness // represented is actually a width in 3-d units, and the // points should scale according to perspective. When // it is false, the point thickness is actually a width -// in pixels, and points are a uniform size regardless -// of distance from the camera. This feature is not -// supported by all graphics drivers. +// in pixels, and points are a uniform screen size +// regardless of distance from the camera. //////////////////////////////////////////////////////////////////// CPT(RenderAttrib) RenderModeAttrib:: make(RenderModeAttrib::Mode mode, float thickness, bool perspective) { @@ -236,8 +236,5 @@ fillin(DatagramIterator &scan, BamReader *manager) { _mode = (Mode)scan.get_int8(); _thickness = scan.get_float32(); - _perspective = false; - if (manager->get_file_minor_ver() >= 18) { - _perspective = scan.get_bool(); - } + _perspective = scan.get_bool(); } diff --git a/panda/src/pgraph/renderModeAttrib.h b/panda/src/pgraph/renderModeAttrib.h index e22d7db97b..a5f940582a 100644 --- a/panda/src/pgraph/renderModeAttrib.h +++ b/panda/src/pgraph/renderModeAttrib.h @@ -22,7 +22,7 @@ #include "pandabase.h" #include "renderAttrib.h" -#include "qpgeom.h" +#include "geom.h" class FactoryParams; diff --git a/panda/src/pgraph/renderState.h b/panda/src/pgraph/renderState.h index aa0452d29d..fb27fbf59d 100644 --- a/panda/src/pgraph/renderState.h +++ b/panda/src/pgraph/renderState.h @@ -30,7 +30,7 @@ #include "renderModeAttrib.h" #include "texGenAttrib.h" #include "texMatrixAttrib.h" -#include "qpgeomMunger.h" +#include "geomMunger.h" #include "weakPointerTo.h" class GraphicsStateGuardianBase; @@ -223,7 +223,7 @@ private: // since there are likely to be far fewer GSG's than RenderStates. // The code to manage this map lives in // GraphicsStateGuardian::get_geom_munger(). - typedef pmap Mungers; + typedef pmap Mungers; Mungers _mungers; Mungers::const_iterator _last_mi; diff --git a/panda/src/pgraph/sceneGraphAnalyzer.cxx b/panda/src/pgraph/sceneGraphAnalyzer.cxx index 0d457411bf..85d7b8772f 100644 --- a/panda/src/pgraph/sceneGraphAnalyzer.cxx +++ b/panda/src/pgraph/sceneGraphAnalyzer.cxx @@ -21,8 +21,15 @@ #include "indent.h" #include "geomNode.h" +#include "geomVertexData.h" #include "geom.h" -#include "geomprimitives.h" +#include "geomPrimitive.h" +#include "geomPoints.h" +#include "geomLines.h" +#include "geomLinestrips.h" +#include "geomTriangles.h" +#include "geomTristrips.h" +#include "geomTrifans.h" #include "transformState.h" #include "textureAttrib.h" #include "pta_ushort.h" @@ -63,16 +70,14 @@ clear() { _num_nodes_with_attribs = 0; _num_geom_nodes = 0; _num_geoms = 0; + _num_geom_vertex_datas = 0; _num_vertices = 0; _num_normals = 0; _num_texcoords = 0; _num_tris = 0; - _num_quads = 0; - _num_polys = 0; _num_lines = 0; _num_points = 0; - _num_spheres = 0; _num_individual_tris = 0; _num_tristrips = 0; @@ -122,7 +127,8 @@ write(ostream &out, int indent_level) const { out << "\n"; indent(out, indent_level) - << _num_geoms << " Geoms appear on " << _num_geom_nodes << " GeomNodes.\n"; + << _num_geoms << " Geoms, with " << _num_geom_vertex_datas + << " GeomVertexDatas, appear on " << _num_geom_nodes << " GeomNodes.\n"; indent(out, indent_level) << _num_vertices << " vertices, " << _num_normals << " normals, " @@ -162,9 +168,7 @@ write(ostream &out, int indent_level) const { << " of these are independent triangles.\n"; indent(out, indent_level) - << _num_quads << " quads, " << _num_polys << " general polygons, " - << _num_lines << " lines, " << _num_points << " points, " - << _num_spheres << " spheres.\n"; + << _num_lines << " lines, " << _num_points << " points.\n"; indent(out, indent_level) << _textures.size() << " textures, estimated minimum " @@ -261,91 +265,57 @@ collect_statistics(GeomNode *geom_node) { //////////////////////////////////////////////////////////////////// void SceneGraphAnalyzer:: collect_statistics(const Geom *geom) { - int num_prims; - int num_verts; - int num_components; + const GeomVertexData *vdata = geom->get_vertex_data(); + bool inserted = _vdatas.insert(vdata).second; + if (inserted) { + // This is the first time we've encountered this vertex data. + ++_num_geom_vertex_datas; - num_prims = geom->get_num_prims(); - if (geom->uses_components()) { - num_verts = 0; - num_components = 0; - for (int i = 0; i < num_prims; i++) { - num_verts += geom->get_length(i); - num_components += (geom->get_length(i) - geom->get_num_more_vertices_than_components()); + int num_rows = vdata->get_num_rows(); + if (vdata->has_column(InternalName::get_vertex())) { + _num_vertices += num_rows; } - } else { - num_verts = num_prims * geom->get_num_vertices_per_prim(); - num_components = 1; + if (vdata->has_column(InternalName::get_normal())) { + _num_normals += num_rows; + } + const GeomVertexFormat *format = vdata->get_format(); + int num_texcoords = format->get_num_texcoords(); + _num_texcoords += num_rows * num_texcoords; } - _num_vertices += num_verts; + // Now consider the primitives in the Geom. + int num_primitives = geom->get_num_primitives(); + for (int i = 0; i < num_primitives; ++i) { + const GeomPrimitive *prim = geom->get_primitive(i); - PTA_Normalf norms; - GeomBindType nbind; - PTA_ushort nindex; - geom->get_normals(norms, nbind, nindex); + if (prim->is_of_type(GeomPoints::get_class_type())) { + _num_points += prim->get_num_primitives(); + + } else if (prim->is_of_type(GeomLines::get_class_type())) { + _num_lines += prim->get_num_primitives(); + + } else if (prim->is_of_type(GeomLinestrips::get_class_type())) { + _num_lines += prim->get_num_faces(); + + } else if (prim->is_of_type(GeomTriangles::get_class_type())) { + _num_tris += prim->get_num_primitives(); + _num_individual_tris += prim->get_num_primitives(); - switch (nbind) { - case G_OVERALL: - consider_normals(norms, nindex, 1); - break; + } else if (prim->is_of_type(GeomTristrips::get_class_type())) { + _num_tris += prim->get_num_faces(); + _num_tristrips += prim->get_num_primitives(); + _num_triangles_in_strips += prim->get_num_faces(); - case G_PER_PRIM: - consider_normals(norms, nindex, num_prims); - break; + } else if (prim->is_of_type(GeomTrifans::get_class_type())) { + _num_tris += prim->get_num_faces(); + _num_trifans += prim->get_num_primitives(); + _num_triangles_in_fans += prim->get_num_faces(); - case G_PER_COMPONENT: - consider_normals(norms, nindex, num_components); - break; - - case G_PER_VERTEX: - consider_normals(norms, nindex, num_verts); - break; - - case G_OFF: - break; - } - - if (geom->get_binding(G_TEXCOORD) == G_PER_VERTEX) { - _num_texcoords += num_verts; - } - - if (geom->is_of_type(GeomPoint::get_class_type())) { - _num_points += num_verts; - - } else if (geom->is_of_type(GeomLine::get_class_type())) { - _num_lines += num_prims; - - } else if (geom->is_of_type(GeomLinestrip::get_class_type())) { - _num_lines += num_components; - - } else if (geom->is_of_type(GeomPolygon::get_class_type())) { - _num_polys += num_prims; - - } else if (geom->is_of_type(GeomQuad::get_class_type())) { - _num_quads += num_prims; - - } else if (geom->is_of_type(GeomTri::get_class_type())) { - _num_tris += num_prims; - _num_individual_tris += num_prims; - - } else if (geom->is_of_type(GeomTristrip::get_class_type())) { - _num_tris += num_components; - _num_tristrips += num_prims; - _num_triangles_in_strips += num_components; - - } else if (geom->is_of_type(GeomTrifan::get_class_type())) { - _num_tris += num_components; - _num_trifans += num_prims; - _num_triangles_in_fans += num_components; - - } else if (geom->is_of_type(GeomSphere::get_class_type())) { - _num_spheres += num_prims; - - } else { - pgraph_cat.warning() - << "Unknown GeomType in SceneGraphAnalyzer: " - << geom->get_type() << "\n"; + } else { + pgraph_cat.warning() + << "Unknown GeomPrimitive type in SceneGraphAnalyzer: " + << prim->get_type() << "\n"; + } } } @@ -381,44 +351,3 @@ collect_statistics(Texture *texture) { (*ti).second++; } } - -//////////////////////////////////////////////////////////////////// -// Function: SceneGraphAnalyzer::consider_normals -// Access: Private -// Description: Examines the indicated set of normals. -//////////////////////////////////////////////////////////////////// -void SceneGraphAnalyzer:: -consider_normals(const Normalf *norms, const unsigned short *nindex, - int num) { - _num_normals += num; - - if (nindex != (const unsigned short *)NULL) { - // An indexed array. - for (int i = 0; i < num; i++) { - const Normalf &norm = norms[nindex[i]]; - float l = norm.length(); - if (IS_THRESHOLD_EQUAL(l, 1.0f, 0.01f)) { - // This normal is close enough to unit length to be ok. - } else if (l > 1.0f) { - _num_long_normals++; - } else { // l < 1.0f - _num_short_normals++; - } - _total_normal_length += l; - } - } else { - // A nonindexed array. - for (int i = 0; i < num; i++) { - const Normalf &norm = norms[i]; - float l = norm.length(); - if (IS_THRESHOLD_EQUAL(l, 1.0f, 0.01f)) { - // This normal is close enough to unit length to be ok. - } else if (l > 1.0f) { - _num_long_normals++; - } else { // l < 1.0 - _num_short_normals++; - } - _total_normal_length += l; - } - } -} diff --git a/panda/src/pgraph/sceneGraphAnalyzer.h b/panda/src/pgraph/sceneGraphAnalyzer.h index 3f6e1737ca..797c5a0fbc 100644 --- a/panda/src/pgraph/sceneGraphAnalyzer.h +++ b/panda/src/pgraph/sceneGraphAnalyzer.h @@ -20,15 +20,15 @@ #define SCENEGRAPHANALYZER_H #include "pandabase.h" - #include "typedObject.h" #include "luse.h" - #include "pmap.h" +#include "pset.h" class PandaNode; class GeomNode; class Geom; +class GeomVertexData; class Texture; //////////////////////////////////////////////////////////////////// @@ -52,13 +52,12 @@ private: void collect_statistics(const Geom *geom); void collect_statistics(Texture *texture); - void consider_normals(const Normalf *norms, const unsigned short *nindex, - int num); - typedef pmap Nodes; + typedef pset VDatas; typedef pmap Textures; Nodes _nodes; + VDatas _vdatas; Textures _textures; public: @@ -68,16 +67,14 @@ public: int _num_nodes_with_attribs; int _num_geom_nodes; int _num_geoms; + int _num_geom_vertex_datas; int _num_vertices; int _num_normals; int _num_texcoords; int _num_tris; - int _num_quads; - int _num_polys; int _num_lines; int _num_points; - int _num_spheres; int _num_individual_tris; int _num_tristrips; diff --git a/panda/src/pgraph/sceneGraphReducer.cxx b/panda/src/pgraph/sceneGraphReducer.cxx index 58d2a13d6a..1cfad4fe14 100644 --- a/panda/src/pgraph/sceneGraphReducer.cxx +++ b/panda/src/pgraph/sceneGraphReducer.cxx @@ -691,28 +691,26 @@ r_make_nonindexed(PandaNode *node, int nonindexed_bits) { GeomNode *geom_node = DCAST(GeomNode, node); int num_geoms = geom_node->get_num_geoms(); for (int i = 0; i < num_geoms; ++i) { - if (geom_node->get_geom(i)->is_qpgeom()) { - const qpGeom *geom = DCAST(qpGeom, geom_node->get_geom(i)); + const Geom *geom = geom_node->get_geom(i); - // Check whether the geom is animated or dynamic, and skip it - // if the user specified so. - const qpGeomVertexData *data = geom->get_vertex_data(); - int this_geom_bits = 0; - if (data->get_format()->get_animation().get_animation_type() != - qpGeom::AT_none) { - this_geom_bits |= MN_avoid_animated; - } - if (data->get_usage_hint() != qpGeom::UH_static || - geom->get_usage_hint() != qpGeom::UH_static) { - this_geom_bits |= MN_avoid_dynamic; - } - - if ((nonindexed_bits & this_geom_bits) == 0) { - // The geom meets the user's qualifications for making - // nonindexed, so do it. - qpGeom *mgeom = DCAST(qpGeom, geom_node->modify_geom(i)); - num_changed += mgeom->make_nonindexed((nonindexed_bits & MN_composite_only) != 0); - } + // Check whether the geom is animated or dynamic, and skip it + // if the user specified so. + const GeomVertexData *data = geom->get_vertex_data(); + int this_geom_bits = 0; + if (data->get_format()->get_animation().get_animation_type() != + Geom::AT_none) { + this_geom_bits |= MN_avoid_animated; + } + if (data->get_usage_hint() != Geom::UH_static || + geom->get_usage_hint() != Geom::UH_static) { + this_geom_bits |= MN_avoid_dynamic; + } + + if ((nonindexed_bits & this_geom_bits) == 0) { + // The geom meets the user's qualifications for making + // nonindexed, so do it. + Geom *mgeom = DCAST(Geom, geom_node->modify_geom(i)); + num_changed += mgeom->make_nonindexed((nonindexed_bits & MN_composite_only) != 0); } } } diff --git a/panda/src/pgraph/stateMunger.h b/panda/src/pgraph/stateMunger.h index fcf765fa34..375e635de2 100644 --- a/panda/src/pgraph/stateMunger.h +++ b/panda/src/pgraph/stateMunger.h @@ -20,7 +20,7 @@ #define STATEMUNGER_H #include "pandabase.h" -#include "qpgeomMunger.h" +#include "geomMunger.h" #include "renderState.h" #include "weakPointerTo.h" @@ -30,10 +30,8 @@ // adds the ability to munge states. That functionality // can't be declared in the base class, since it doesn't // really know about RenderState. -// -// This is part of the experimental Geom rewrite. //////////////////////////////////////////////////////////////////// -class EXPCL_PANDA StateMunger : public qpGeomMunger { +class EXPCL_PANDA StateMunger : public GeomMunger { public: virtual ~StateMunger(); CPT(RenderState) munge_state(const RenderState *state); @@ -49,9 +47,9 @@ public: return _type_handle; } static void init_type() { - qpGeomMunger::init_type(); + GeomMunger::init_type(); register_type(_type_handle, "StateMunger", - qpGeomMunger::get_class_type()); + GeomMunger::get_class_type()); } virtual TypeHandle get_type() const { return get_class_type(); diff --git a/panda/src/pgraph/texGenAttrib.I b/panda/src/pgraph/texGenAttrib.I index 5687f650aa..fd8903f0be 100755 --- a/panda/src/pgraph/texGenAttrib.I +++ b/panda/src/pgraph/texGenAttrib.I @@ -53,9 +53,9 @@ TexGenAttrib(const TexGenAttrib ©) : //////////////////////////////////////////////////////////////////// INLINE int TexGenAttrib:: get_geom_rendering(int geom_rendering) const { - if ((geom_rendering & qpGeom::GR_point) != 0) { + if ((geom_rendering & Geom::GR_point) != 0) { if (_num_point_sprites > 0) { - geom_rendering |= qpGeom::GR_point_sprite; + geom_rendering |= Geom::GR_point_sprite; } } diff --git a/panda/src/pgraph/texGenAttrib.h b/panda/src/pgraph/texGenAttrib.h index 8b2fab5dd4..7156300d76 100755 --- a/panda/src/pgraph/texGenAttrib.h +++ b/panda/src/pgraph/texGenAttrib.h @@ -21,7 +21,7 @@ #include "pandabase.h" -#include "qpgeom.h" +#include "geom.h" #include "renderAttrib.h" #include "textureStage.h" #include "texture.h" diff --git a/panda/src/pgraph/texMatrixAttrib.I b/panda/src/pgraph/texMatrixAttrib.I index 6814942850..10d881bb7e 100644 --- a/panda/src/pgraph/texMatrixAttrib.I +++ b/panda/src/pgraph/texMatrixAttrib.I @@ -50,9 +50,9 @@ TexMatrixAttrib(const TexMatrixAttrib ©) : //////////////////////////////////////////////////////////////////// INLINE int TexMatrixAttrib:: get_geom_rendering(int geom_rendering) const { - if ((geom_rendering & qpGeom::GR_point_sprite) != 0) { + if ((geom_rendering & Geom::GR_point_sprite) != 0) { if (!is_empty()) { - geom_rendering |= qpGeom::GR_point_sprite_tex_matrix; + geom_rendering |= Geom::GR_point_sprite_tex_matrix; } } diff --git a/panda/src/pgraph/texMatrixAttrib.cxx b/panda/src/pgraph/texMatrixAttrib.cxx index 91646dcfa9..23a17ba948 100644 --- a/panda/src/pgraph/texMatrixAttrib.cxx +++ b/panda/src/pgraph/texMatrixAttrib.cxx @@ -513,16 +513,10 @@ int TexMatrixAttrib:: complete_pointers(TypedWritable **p_list, BamReader *manager) { int pi = RenderAttrib::complete_pointers(p_list, manager); - if (manager->get_file_minor_ver() < 11) { - // Pre-4.11 bams didn't store any pointers. - - } else { - // More recent bams store the whole map. - for (size_t i = 0; i < _num_stages; i++) { - TextureStage *stage = DCAST(TextureStage, p_list[pi++]); - const TransformState *transform = DCAST(TransformState, p_list[pi++]); - _stages[stage] = transform; - } + for (size_t i = 0; i < _num_stages; i++) { + TextureStage *stage = DCAST(TextureStage, p_list[pi++]); + const TransformState *transform = DCAST(TransformState, p_list[pi++]); + _stages[stage] = transform; } return pi; @@ -559,20 +553,9 @@ void TexMatrixAttrib:: fillin(DatagramIterator &scan, BamReader *manager) { RenderAttrib::fillin(scan, manager); - if (manager->get_file_minor_ver() < 11) { - // Pre-4.11 bams stored a single matrix for the TexMatrixAttrib, - // which applies to the default stage. - LMatrix4f mat; - mat.read_datagram(scan); - CPT(TransformState) transform = TransformState::make_mat(mat); - _stages.insert(Stages::value_type(TextureStage::get_default(), transform)); - - } else { - // More recent bams store the whole map. - _num_stages = scan.get_uint16(); - for (size_t i = 0; i < _num_stages; i++) { - manager->read_pointer(scan); - manager->read_pointer(scan); - } + _num_stages = scan.get_uint16(); + for (size_t i = 0; i < _num_stages; i++) { + manager->read_pointer(scan); + manager->read_pointer(scan); } } diff --git a/panda/src/pgraph/texMatrixAttrib.h b/panda/src/pgraph/texMatrixAttrib.h index 853554105e..858577b2ce 100644 --- a/panda/src/pgraph/texMatrixAttrib.h +++ b/panda/src/pgraph/texMatrixAttrib.h @@ -21,7 +21,7 @@ #include "pandabase.h" -#include "qpgeom.h" +#include "geom.h" #include "renderAttrib.h" #include "textureStage.h" #include "transformState.h" diff --git a/panda/src/pgraph/textureAttrib.cxx b/panda/src/pgraph/textureAttrib.cxx index 94eb9d7369..d44d6c18ba 100644 --- a/panda/src/pgraph/textureAttrib.cxx +++ b/panda/src/pgraph/textureAttrib.cxx @@ -690,43 +690,27 @@ int TextureAttrib:: complete_pointers(TypedWritable **p_list, BamReader *manager) { int pi = RenderAttrib::complete_pointers(p_list, manager); - if (manager->get_file_minor_ver() < 11) { - TypedWritable *texture = p_list[pi++]; - if (texture != (TypedWritable *)NULL) { - _on_stages.push_back(TextureStage::get_default()); - _on_textures[TextureStage::get_default()] = DCAST(Texture, texture); - - // We know the one-element array is already sorted. - _sort_seq = TextureStage::get_sort_seq(); + OffStages::iterator ci = _off_stages.begin(); + while (ci != _off_stages.end()) { + TextureStage *ts = DCAST(TextureStage, p_list[pi++]); + *ci = ts; + ++ci; + } + + // read the pointers of the on_textures + _on_stages.reserve(_num_on_textures); + + for (int i = 0; i < _num_on_textures; ++i) { + TextureStage *ts = DCAST(TextureStage, p_list[pi++]); + Texture *tx = DCAST(Texture, p_list[pi++]); + if (tx != (Texture *)NULL) { + _on_textures[ts] = tx; + _on_stages.push_back(ts); } else { - // Pre-bam 4.11, a null pointer meant to turn off texturing. - _off_all_stages = true; - } - - } else { - OffStages::iterator ci = _off_stages.begin(); - while (ci != _off_stages.end()) { - TextureStage *ts = DCAST(TextureStage, p_list[pi++]); - *ci = ts; - ++ci; - } - - // read the pointers of the on_textures - _on_stages.reserve(_num_on_textures); - - for (int i = 0; i < _num_on_textures; ++i) { - TextureStage *ts = DCAST(TextureStage, p_list[pi++]); - Texture *tx = DCAST(Texture, p_list[pi++]); - if (tx != (Texture *)NULL) { - _on_textures[ts] = tx; - _on_stages.push_back(ts); - - } else { - // If we couldn't load a texture pointer, turn off that - // particular texture stage. - _off_stages.push_back(ts); - } + // If we couldn't load a texture pointer, turn off that + // particular texture stage. + _off_stages.push_back(ts); } } _sort_seq = UpdateSeq::old(); @@ -765,33 +749,28 @@ void TextureAttrib:: fillin(DatagramIterator &scan, BamReader *manager) { RenderAttrib::fillin(scan, manager); - if (manager->get_file_minor_ver() < 11) { - // Read the _texture pointer. + // read the boolean if _off_all_stages + _off_all_stages = scan.get_bool(); + // read the number of off_stages + int num_off_stages = scan.get_uint16(); + + // Push back a NULL pointer for each off TextureStage for now, until + // we get the actual list of pointers later in complete_pointers(). + int i; + _off_stages.reserve(num_off_stages); + for (i = 0; i < num_off_stages; i++) { manager->read_pointer(scan); + _off_stages.push_back(NULL); } - else { - // read the boolean if _off_all_stages - _off_all_stages = scan.get_bool(); - // read the number of off_stages - int num_off_stages = scan.get_uint16(); - - // Push back a NULL pointer for each off TextureStage for now, until - // we get the actual list of pointers later in complete_pointers(). - int i; - _off_stages.reserve(num_off_stages); - for (i = 0; i < num_off_stages; i++) { - manager->read_pointer(scan); - _off_stages.push_back(NULL); - } - // read the number of on stages - _num_on_textures = scan.get_uint16(); - // just read the pointers, all allocation will happen from - // complete_pointers because, it is a map template we get the - // actual list of pointers later in complete_pointers(). - for (i = 0; i < _num_on_textures; i++) { - manager->read_pointer(scan); - manager->read_pointer(scan); - } + // read the number of on stages + _num_on_textures = scan.get_uint16(); + + // just read the pointers, all allocation will happen from + // complete_pointers because it is a map template we get the actual + // list of pointers later in complete_pointers(). + for (i = 0; i < _num_on_textures; i++) { + manager->read_pointer(scan); + manager->read_pointer(scan); } } diff --git a/panda/src/pgraph/transformState.I b/panda/src/pgraph/transformState.I index 5aeb52ab4a..8423025998 100644 --- a/panda/src/pgraph/transformState.I +++ b/panda/src/pgraph/transformState.I @@ -458,9 +458,9 @@ get_mat() const { //////////////////////////////////////////////////////////////////// INLINE int TransformState:: get_geom_rendering(int geom_rendering) const { - if ((geom_rendering & qpGeomEnums::GR_point_perspective) != 0) { + if ((geom_rendering & GeomEnums::GR_point_perspective) != 0) { if (!has_identity_scale()) { - geom_rendering |= qpGeomEnums::GR_point_scale; + geom_rendering |= GeomEnums::GR_point_scale; } } diff --git a/panda/src/pgraph/transformState.cxx b/panda/src/pgraph/transformState.cxx index 89a0e1589d..611a2c7425 100644 --- a/panda/src/pgraph/transformState.cxx +++ b/panda/src/pgraph/transformState.cxx @@ -1682,11 +1682,8 @@ fillin(DatagramIterator &scan, BamReader *manager) { _flags |= (F_hpr_given | F_hpr_known); } _scale.read_datagram(scan); - if (manager->get_file_minor_ver() >= 6) { - _shear.read_datagram(scan); - } else { - _shear.set(0.0f, 0.0f, 0.0f); - } + _shear.read_datagram(scan); + check_uniform_scale(); } diff --git a/panda/src/pgraph/transformState.h b/panda/src/pgraph/transformState.h index b45ab8f40c..ce94166fd1 100644 --- a/panda/src/pgraph/transformState.h +++ b/panda/src/pgraph/transformState.h @@ -28,7 +28,7 @@ #include "event.h" #include "updateSeq.h" #include "pStatCollector.h" -#include "qpgeomEnums.h" +#include "geomEnums.h" class GraphicsStateGuardianBase; class FactoryParams; diff --git a/panda/src/pgui/pgFrameStyle.cxx b/panda/src/pgui/pgFrameStyle.cxx index 1f88fde560..0b3f9c0da4 100644 --- a/panda/src/pgui/pgFrameStyle.cxx +++ b/panda/src/pgui/pgFrameStyle.cxx @@ -17,8 +17,6 @@ //////////////////////////////////////////////////////////////////// #include "pgFrameStyle.h" -#include "geomTristrip.h" -#include "geomTrifan.h" #include "geomNode.h" #include "pandaNode.h" #include "transparencyAttrib.h" @@ -27,9 +25,9 @@ #include "textureAttrib.h" #include "renderState.h" #include "shadeModelAttrib.h" -#include "qpgeom.h" -#include "qpgeomTristrips.h" -#include "qpgeomVertexWriter.h" +#include "geom.h" +#include "geomTristrips.h" +#include "geomVertexWriter.h" // Specifies the UV range of textures applied to the frame. Maybe // we'll have a reason to make this a parameter of the frame style one @@ -180,98 +178,55 @@ generate_flat_geom(const LVecBase4f &frame) { float bottom = frame[2]; float top = frame[3]; - if (use_qpgeom) { - CPT(qpGeomVertexFormat) format; - if (has_texture()) { - format = qpGeomVertexFormat::get_v3cpt2(); - } else { - format = qpGeomVertexFormat::get_v3cp(); - } - - PT(qpGeomVertexData) vdata = new qpGeomVertexData - ("PGFrame", format, qpGeom::UH_static); - - qpGeomVertexWriter vertex(vdata, InternalName::get_vertex()); - qpGeomVertexWriter color(vdata, InternalName::get_color()); - vertex.add_data3f(left, 0.0f, top); - vertex.add_data3f(left, 0.0f, bottom); - vertex.add_data3f(right, 0.0f, top); - vertex.add_data3f(right, 0.0f, bottom); - - color.add_data4f(_color); - color.add_data4f(_color); - color.add_data4f(_color); - color.add_data4f(_color); - - if (has_texture()) { - // Generate UV's. - left = uv_range[0]; - right = uv_range[1]; - bottom = uv_range[2]; - top = uv_range[3]; - - qpGeomVertexWriter texcoord(vdata, InternalName::get_texcoord()); - texcoord.add_data2f(left, top); - texcoord.add_data2f(left, bottom); - texcoord.add_data2f(right, top); - texcoord.add_data2f(right, bottom); - } - - PT(qpGeomTristrips) strip = new qpGeomTristrips(qpGeom::UH_static); - strip->add_next_vertices(4); - strip->close_primitive(); - - PT(qpGeom) geom = new qpGeom; - geom->set_vertex_data(vdata); - geom->add_primitive(strip); - gnode->add_geom(geom); - - if (has_texture()) { - CPT(RenderState) state = - RenderState::make(TextureAttrib::make(get_texture())); - gnode->set_geom_state(0, state); - } - + CPT(GeomVertexFormat) format; + if (has_texture()) { + format = GeomVertexFormat::get_v3cpt2(); } else { - Geom *geom = new GeomTristrip; - gnode->add_geom(geom); + format = GeomVertexFormat::get_v3cp(); + } + + PT(GeomVertexData) vdata = new GeomVertexData + ("PGFrame", format, Geom::UH_static); + + GeomVertexWriter vertex(vdata, InternalName::get_vertex()); + GeomVertexWriter color(vdata, InternalName::get_color()); + vertex.add_data3f(left, 0.0f, top); + vertex.add_data3f(left, 0.0f, bottom); + vertex.add_data3f(right, 0.0f, top); + vertex.add_data3f(right, 0.0f, bottom); + + color.add_data4f(_color); + color.add_data4f(_color); + color.add_data4f(_color); + color.add_data4f(_color); - PTA_int lengths; - lengths.push_back(4); - - PTA_Vertexf verts; - verts.push_back(Vertexf(left, 0.0f, top)); - verts.push_back(Vertexf(left, 0.0f, bottom)); - verts.push_back(Vertexf(right, 0.0f, top)); - verts.push_back(Vertexf(right, 0.0f, bottom)); - - geom->set_num_prims(1); - geom->set_lengths(lengths); - - geom->set_coords(verts); - - PTA_Colorf colors; - colors.push_back(_color); - geom->set_colors(colors, G_OVERALL); - - if (has_texture()) { - // Generate UV's. - left = uv_range[0]; - right = uv_range[1]; - bottom = uv_range[2]; - top = uv_range[3]; + if (has_texture()) { + // Generate UV's. + left = uv_range[0]; + right = uv_range[1]; + bottom = uv_range[2]; + top = uv_range[3]; - PTA_TexCoordf uvs; - uvs.push_back(TexCoordf(left, top)); - uvs.push_back(TexCoordf(left, bottom)); - uvs.push_back(TexCoordf(right, top)); - uvs.push_back(TexCoordf(right, bottom)); - geom->set_texcoords(uvs, G_PER_VERTEX); - - CPT(RenderState) state = - RenderState::make(TextureAttrib::make(get_texture())); - gnode->set_geom_state(0, state); - } + GeomVertexWriter texcoord(vdata, InternalName::get_texcoord()); + texcoord.add_data2f(left, top); + texcoord.add_data2f(left, bottom); + texcoord.add_data2f(right, top); + texcoord.add_data2f(right, bottom); + } + + PT(GeomTristrips) strip = new GeomTristrips(Geom::UH_static); + strip->add_next_vertices(4); + strip->close_primitive(); + + PT(Geom) geom = new Geom; + geom->set_vertex_data(vdata); + geom->add_primitive(strip); + gnode->add_geom(geom); + + if (has_texture()) { + CPT(RenderState) state = + RenderState::make(TextureAttrib::make(get_texture())); + gnode->set_geom_state(0, state); } return gnode.p(); @@ -387,110 +342,60 @@ generate_bevel_geom(const LVecBase4f &frame, bool in) { min(_color[2] * top_color_scale, 1.0f), _color[3]); - if (use_qpgeom) { - CPT(qpGeomVertexFormat) format = qpGeomVertexFormat::get_v3cp(); - PT(qpGeomVertexData) vdata = new qpGeomVertexData - ("PGFrame", format, qpGeom::UH_static); - - qpGeomVertexWriter vertex(vdata, InternalName::get_vertex()); - qpGeomVertexWriter color(vdata, InternalName::get_color()); - - PT(qpGeomTristrips) strip = new qpGeomTristrips(qpGeom::UH_static); - // Tristrip 1. - vertex.add_data3f(right, 0.0f, bottom); - vertex.add_data3f(inner_right, 0.0f, inner_bottom); - vertex.add_data3f(left, 0.0f, bottom); - vertex.add_data3f(inner_left, 0.0f, inner_bottom); - vertex.add_data3f(left, 0.0f, top); - vertex.add_data3f(inner_left, 0.0f, inner_top); - vertex.add_data3f(right, 0.0f, top); - vertex.add_data3f(inner_right, 0.0f, inner_top); - color.add_data4f(cbottom); - color.add_data4f(cbottom); - color.add_data4f(cbottom); - color.add_data4f(cbottom); - color.add_data4f(cleft); - color.add_data4f(cleft); - color.add_data4f(ctop); - color.add_data4f(ctop); - - strip->add_next_vertices(8); - strip->close_primitive(); - - // Tristrip 2. - vertex.add_data3f(right, 0.0f, bottom); - vertex.add_data3f(right, 0.0f, top); - vertex.add_data3f(inner_right, 0.0f, inner_bottom); - vertex.add_data3f(inner_right, 0.0f, inner_top); - vertex.add_data3f(inner_left, 0.0f, inner_bottom); - vertex.add_data3f(inner_left, 0.0f, inner_top); - color.add_data4f(cright); - color.add_data4f(cright); - color.add_data4f(cright); - color.add_data4f(cright); - color.add_data4f(_color); - color.add_data4f(_color); - - strip->add_next_vertices(6); - strip->close_primitive(); - strip->set_shade_model(qpGeom::SM_flat_last_vertex); - - PT(qpGeom) geom = new qpGeom; - geom->set_vertex_data(vdata); - geom->add_primitive(strip); - - CPT(RenderState) flat_state = RenderState::make(ShadeModelAttrib::make(ShadeModelAttrib::M_flat)); - gnode->add_geom(geom, flat_state); - - } else { - // Now make the tristrips. - Geom *geom = new GeomTristrip; - gnode->add_geom(geom); - - PTA_int lengths; - PTA_Vertexf verts; - PTA_Colorf colors; - - // Tristrip 1. - lengths.push_back(8); - - verts.push_back(Vertexf(right, 0.0f, bottom)); - verts.push_back(Vertexf(inner_right, 0.0f, inner_bottom)); - verts.push_back(Vertexf(left, 0.0f, bottom)); - verts.push_back(Vertexf(inner_left, 0.0f, inner_bottom)); - verts.push_back(Vertexf(left, 0.0f, top)); - verts.push_back(Vertexf(inner_left, 0.0f, inner_top)); - verts.push_back(Vertexf(right, 0.0f, top)); - verts.push_back(Vertexf(inner_right, 0.0f, inner_top)); + CPT(GeomVertexFormat) format = GeomVertexFormat::get_v3cp(); + PT(GeomVertexData) vdata = new GeomVertexData + ("PGFrame", format, Geom::UH_static); + + GeomVertexWriter vertex(vdata, InternalName::get_vertex()); + GeomVertexWriter color(vdata, InternalName::get_color()); + + PT(GeomTristrips) strip = new GeomTristrips(Geom::UH_static); + // Tristrip 1. + vertex.add_data3f(right, 0.0f, bottom); + vertex.add_data3f(inner_right, 0.0f, inner_bottom); + vertex.add_data3f(left, 0.0f, bottom); + vertex.add_data3f(inner_left, 0.0f, inner_bottom); + vertex.add_data3f(left, 0.0f, top); + vertex.add_data3f(inner_left, 0.0f, inner_top); + vertex.add_data3f(right, 0.0f, top); + vertex.add_data3f(inner_right, 0.0f, inner_top); + color.add_data4f(cbottom); + color.add_data4f(cbottom); + color.add_data4f(cbottom); + color.add_data4f(cbottom); + color.add_data4f(cleft); + color.add_data4f(cleft); + color.add_data4f(ctop); + color.add_data4f(ctop); + + strip->add_next_vertices(8); + strip->close_primitive(); + + // Tristrip 2. + vertex.add_data3f(right, 0.0f, bottom); + vertex.add_data3f(right, 0.0f, top); + vertex.add_data3f(inner_right, 0.0f, inner_bottom); + vertex.add_data3f(inner_right, 0.0f, inner_top); + vertex.add_data3f(inner_left, 0.0f, inner_bottom); + vertex.add_data3f(inner_left, 0.0f, inner_top); + color.add_data4f(cright); + color.add_data4f(cright); + color.add_data4f(cright); + color.add_data4f(cright); + color.add_data4f(_color); + color.add_data4f(_color); + + strip->add_next_vertices(6); + strip->close_primitive(); + strip->set_shade_model(Geom::SM_flat_last_vertex); + + PT(Geom) geom = new Geom; + geom->set_vertex_data(vdata); + geom->add_primitive(strip); + + CPT(RenderState) flat_state = RenderState::make(ShadeModelAttrib::make(ShadeModelAttrib::M_flat)); + gnode->add_geom(geom, flat_state); - colors.push_back(cbottom); - colors.push_back(cbottom); - colors.push_back(cleft); - colors.push_back(cleft); - colors.push_back(ctop); - colors.push_back(ctop); - - // Tristrip 2. - lengths.push_back(6); - - verts.push_back(Vertexf(right, 0.0f, bottom)); - verts.push_back(Vertexf(right, 0.0f, top)); - verts.push_back(Vertexf(inner_right, 0.0f, inner_bottom)); - verts.push_back(Vertexf(inner_right, 0.0f, inner_top)); - verts.push_back(Vertexf(inner_left, 0.0f, inner_bottom)); - verts.push_back(Vertexf(inner_left, 0.0f, inner_top)); - - colors.push_back(cright); - colors.push_back(cright); - colors.push_back(_color); - colors.push_back(_color); - - geom->set_num_prims(2); - geom->set_lengths(lengths); - geom->set_coords(verts); - geom->set_colors(colors, G_PER_COMPONENT); - } - // For now, beveled and grooved geoms don't support textures. Easy // to add if anyone really wants this. @@ -653,159 +558,86 @@ generate_groove_geom(const LVecBase4f &frame, bool in) { min(_color[2] * top_color_scale, 1.0f), _color[3]); - if (use_qpgeom) { - CPT(qpGeomVertexFormat) format = qpGeomVertexFormat::get_v3cp(); - PT(qpGeomVertexData) vdata = new qpGeomVertexData - ("PGFrame", format, qpGeom::UH_static); - - qpGeomVertexWriter vertex(vdata, InternalName::get_vertex()); - qpGeomVertexWriter color(vdata, InternalName::get_color()); - - PT(qpGeomTristrips) strip = new qpGeomTristrips(qpGeom::UH_static); - // Tristrip 1. - vertex.add_data3f(right, 0.0f, bottom); - vertex.add_data3f(mid_right, 0.0f, mid_bottom); - vertex.add_data3f(left, 0.0f, bottom); - vertex.add_data3f(mid_left, 0.0f, mid_bottom); - vertex.add_data3f(left, 0.0f, top); - vertex.add_data3f(mid_left, 0.0f, mid_top); - vertex.add_data3f(right, 0.0f, top); - vertex.add_data3f(mid_right, 0.0f, mid_top); - color.add_data4f(cbottom); - color.add_data4f(cbottom); - color.add_data4f(cbottom); - color.add_data4f(cbottom); - color.add_data4f(cleft); - color.add_data4f(cleft); - color.add_data4f(ctop); - color.add_data4f(ctop); - - strip->add_next_vertices(8); - strip->close_primitive(); - - // Tristrip 2. - vertex.add_data3f(mid_right, 0.0f, mid_bottom); - vertex.add_data3f(inner_right, 0.0f, inner_bottom); - vertex.add_data3f(mid_left, 0.0f, mid_bottom); - vertex.add_data3f(inner_left, 0.0f, inner_bottom); - vertex.add_data3f(mid_left, 0.0f, mid_top); - vertex.add_data3f(inner_left, 0.0f, inner_top); - vertex.add_data3f(mid_right, 0.0f, mid_top); - vertex.add_data3f(inner_right, 0.0f, inner_top); - color.add_data4f(ctop); - color.add_data4f(ctop); - color.add_data4f(ctop); - color.add_data4f(ctop); - color.add_data4f(cright); - color.add_data4f(cright); - color.add_data4f(cbottom); - color.add_data4f(cbottom); - - strip->add_next_vertices(8); - strip->close_primitive(); - - // Tristrip 3. - vertex.add_data3f(right, 0.0f, bottom); - vertex.add_data3f(right, 0.0f, top); - vertex.add_data3f(mid_right, 0.0f, mid_bottom); - vertex.add_data3f(mid_right, 0.0f, mid_top); - vertex.add_data3f(inner_right, 0.0f, inner_bottom); - vertex.add_data3f(inner_right, 0.0f, inner_top); - vertex.add_data3f(inner_left, 0.0f, inner_bottom); - vertex.add_data3f(inner_left, 0.0f, inner_top); - color.add_data4f(cright); - color.add_data4f(cright); - color.add_data4f(cright); - color.add_data4f(cright); - color.add_data4f(cleft); - color.add_data4f(cleft); - color.add_data4f(_color); - color.add_data4f(_color); - - strip->add_next_vertices(8); - strip->close_primitive(); - - strip->set_shade_model(qpGeom::SM_flat_last_vertex); - - PT(qpGeom) geom = new qpGeom; - geom->set_vertex_data(vdata); - geom->add_primitive(strip); - - CPT(RenderState) flat_state = RenderState::make(ShadeModelAttrib::make(ShadeModelAttrib::M_flat)); - gnode->add_geom(geom, flat_state); - - } else { - // Now make the tristrips. - Geom *geom = new GeomTristrip; - gnode->add_geom(geom); - - PTA_int lengths; - PTA_Vertexf verts; - PTA_Colorf colors; - - // Tristrip 1. - lengths.push_back(8); - - verts.push_back(Vertexf(right, 0.0f, bottom)); - verts.push_back(Vertexf(mid_right, 0.0f, mid_bottom)); - verts.push_back(Vertexf(left, 0.0f, bottom)); - verts.push_back(Vertexf(mid_left, 0.0f, mid_bottom)); - verts.push_back(Vertexf(left, 0.0f, top)); - verts.push_back(Vertexf(mid_left, 0.0f, mid_top)); - verts.push_back(Vertexf(right, 0.0f, top)); - verts.push_back(Vertexf(mid_right, 0.0f, mid_top)); + CPT(GeomVertexFormat) format = GeomVertexFormat::get_v3cp(); + PT(GeomVertexData) vdata = new GeomVertexData + ("PGFrame", format, Geom::UH_static); - colors.push_back(cbottom); - colors.push_back(cbottom); - colors.push_back(cleft); - colors.push_back(cleft); - colors.push_back(ctop); - colors.push_back(ctop); - - // Tristrip 2. - lengths.push_back(8); - - verts.push_back(Vertexf(mid_right, 0.0f, mid_bottom)); - verts.push_back(Vertexf(inner_right, 0.0f, inner_bottom)); - verts.push_back(Vertexf(mid_left, 0.0f, mid_bottom)); - verts.push_back(Vertexf(inner_left, 0.0f, inner_bottom)); - verts.push_back(Vertexf(mid_left, 0.0f, mid_top)); - verts.push_back(Vertexf(inner_left, 0.0f, inner_top)); - verts.push_back(Vertexf(mid_right, 0.0f, mid_top)); - verts.push_back(Vertexf(inner_right, 0.0f, inner_top)); + GeomVertexWriter vertex(vdata, InternalName::get_vertex()); + GeomVertexWriter color(vdata, InternalName::get_color()); + + PT(GeomTristrips) strip = new GeomTristrips(Geom::UH_static); + // Tristrip 1. + vertex.add_data3f(right, 0.0f, bottom); + vertex.add_data3f(mid_right, 0.0f, mid_bottom); + vertex.add_data3f(left, 0.0f, bottom); + vertex.add_data3f(mid_left, 0.0f, mid_bottom); + vertex.add_data3f(left, 0.0f, top); + vertex.add_data3f(mid_left, 0.0f, mid_top); + vertex.add_data3f(right, 0.0f, top); + vertex.add_data3f(mid_right, 0.0f, mid_top); + color.add_data4f(cbottom); + color.add_data4f(cbottom); + color.add_data4f(cbottom); + color.add_data4f(cbottom); + color.add_data4f(cleft); + color.add_data4f(cleft); + color.add_data4f(ctop); + color.add_data4f(ctop); + + strip->add_next_vertices(8); + strip->close_primitive(); + + // Tristrip 2. + vertex.add_data3f(mid_right, 0.0f, mid_bottom); + vertex.add_data3f(inner_right, 0.0f, inner_bottom); + vertex.add_data3f(mid_left, 0.0f, mid_bottom); + vertex.add_data3f(inner_left, 0.0f, inner_bottom); + vertex.add_data3f(mid_left, 0.0f, mid_top); + vertex.add_data3f(inner_left, 0.0f, inner_top); + vertex.add_data3f(mid_right, 0.0f, mid_top); + vertex.add_data3f(inner_right, 0.0f, inner_top); + color.add_data4f(ctop); + color.add_data4f(ctop); + color.add_data4f(ctop); + color.add_data4f(ctop); + color.add_data4f(cright); + color.add_data4f(cright); + color.add_data4f(cbottom); + color.add_data4f(cbottom); + + strip->add_next_vertices(8); + strip->close_primitive(); + + // Tristrip 3. + vertex.add_data3f(right, 0.0f, bottom); + vertex.add_data3f(right, 0.0f, top); + vertex.add_data3f(mid_right, 0.0f, mid_bottom); + vertex.add_data3f(mid_right, 0.0f, mid_top); + vertex.add_data3f(inner_right, 0.0f, inner_bottom); + vertex.add_data3f(inner_right, 0.0f, inner_top); + vertex.add_data3f(inner_left, 0.0f, inner_bottom); + vertex.add_data3f(inner_left, 0.0f, inner_top); + color.add_data4f(cright); + color.add_data4f(cright); + color.add_data4f(cright); + color.add_data4f(cright); + color.add_data4f(cleft); + color.add_data4f(cleft); + color.add_data4f(_color); + color.add_data4f(_color); + + strip->add_next_vertices(8); + strip->close_primitive(); + + strip->set_shade_model(Geom::SM_flat_last_vertex); + + PT(Geom) geom = new Geom; + geom->set_vertex_data(vdata); + geom->add_primitive(strip); + + CPT(RenderState) flat_state = RenderState::make(ShadeModelAttrib::make(ShadeModelAttrib::M_flat)); + gnode->add_geom(geom, flat_state); - colors.push_back(ctop); - colors.push_back(ctop); - colors.push_back(cright); - colors.push_back(cright); - colors.push_back(cbottom); - colors.push_back(cbottom); - - // Tristrip 3. - lengths.push_back(8); - - verts.push_back(Vertexf(right, 0.0f, bottom)); - verts.push_back(Vertexf(right, 0.0f, top)); - verts.push_back(Vertexf(mid_right, 0.0f, mid_bottom)); - verts.push_back(Vertexf(mid_right, 0.0f, mid_top)); - verts.push_back(Vertexf(inner_right, 0.0f, inner_bottom)); - verts.push_back(Vertexf(inner_right, 0.0f, inner_top)); - verts.push_back(Vertexf(inner_left, 0.0f, inner_bottom)); - verts.push_back(Vertexf(inner_left, 0.0f, inner_top)); - - colors.push_back(cright); - colors.push_back(cright); - colors.push_back(cleft); - colors.push_back(cleft); - colors.push_back(_color); - colors.push_back(_color); - - geom->set_num_prims(3); - geom->set_lengths(lengths); - geom->set_coords(verts); - geom->set_colors(colors, G_PER_COMPONENT); - } - // For now, beveled and grooved geoms don't support textures. Easy // to add if anyone really wants this. diff --git a/panda/src/putil/Sources.pp b/panda/src/putil/Sources.pp index 7f2f5dc8e9..a634777a05 100644 --- a/panda/src/putil/Sources.pp +++ b/panda/src/putil/Sources.pp @@ -8,7 +8,8 @@ #define COMBINED_SOURCES $[TARGET]_composite1.cxx $[TARGET]_composite2.cxx #define SOURCES \ - bam.h bamReader.I bamReader.N bamReader.h bamReaderParam.I \ + bam.h bamEndian.h \ + bamReader.I bamReader.N bamReader.h bamReaderParam.I \ bamReaderParam.h bamWriter.I bamWriter.h bitMask.I \ bitMask.h \ buttonHandle.I \ @@ -58,6 +59,7 @@ writableParam.I writableParam.h #define INCLUDED_SOURCES \ + bamEndian.cxx \ bamReader.cxx bamReaderParam.cxx bamWriter.cxx bitMask.cxx \ buttonHandle.cxx buttonRegistry.cxx \ cachedTypedWritableReferenceCount.cxx \ @@ -91,7 +93,8 @@ writableConfigurable.cxx writableParam.cxx #define INSTALL_HEADERS \ - bam.h bamReader.I bamReader.h bamReaderParam.I bamReaderParam.h \ + bam.h bamEndian.h \ + bamReader.I bamReader.h bamReaderParam.I bamReaderParam.h \ bamWriter.I bamWriter.h bitMask.I bitMask.h \ buttonHandle.I buttonHandle.h buttonRegistry.I \ buttonRegistry.h \ diff --git a/panda/src/putil/bam.h b/panda/src/putil/bam.h index 0268e7933e..7b93b47470 100644 --- a/panda/src/putil/bam.h +++ b/panda/src/putil/bam.h @@ -29,31 +29,13 @@ // ASCII/Binary conversion. static const string _bam_header = string("pbj\0\n\r", 6); -static const unsigned short _bam_major_ver = 4; +static const unsigned short _bam_major_ver = 5; // Bumped to major version 2 on 7/6/00 due to major changes in Character. // Bumped to major version 3 on 12/8/00 to change float64's to float32's. // Bumped to major version 4 on 4/10/02 to store new scene graph. +// Bumped to major version 5 on 5/6/05 for new Geom implementation. -static const unsigned short _bam_minor_ver = 19; -// Bumped to minor version 1 on 4/10/03 to add CullFaceAttrib::reverse. -// Bumped to minor version 2 on 4/12/03 to add num_components to texture. -// Bumped to minor version 3 on 4/15/03 to add ImageBuffer::_alpha_file_channel -// Bumped to minor version 4 on 6/12/03 to add PandaNode::set_tag(). -// Bumped to minor version 5 on 7/09/03 to add rawdata mode to texture. -// Bumped to minor version 6 on 7/22/03 to add shear to scene graph and animation data. -// Bumped to minor version 7 on 11/10/03 to add CollisionSolid::_effective_normal -// Bumped to minor version 8 on 11/12/03 to add FFTCompressor::reject_compression -// Bumped to minor version 9 on 12/02/03 to change CollisionPolygon internals. -// Bumped to minor version 10 on 04/23/04 to make ComputedVertices use uint32's. -// Bumped to minor version 11 on 07/26/04 to add multitexture pointers. -// Bumped to minor version 12 on 09/22/04 to add PandaNode::into_collide_mask. -// Bumped to minor version 13 on 09/24/04 to store actual LODNode switch distances instead of squares. -// Bumped to minor version 14 on 11/18/04 to differentiate old_hpr from new_hpr in compressed anim channels. -// Bumped to minor version 15 on 1/16/05 to remove width from GeomLine, etc. -// Bumped to minor version 16 on 2/24/05 to add TextureStage::rgb_scale, etc. -// Bumped to minor version 17 on 3/03/05 to add 3-d textures, etc. -// Bumped to minor version 18 on 4/05/05 to add RenderModeAttrib::perspective. -// Bumped to minor version 19 on 4/19/05 to add nonindexed qpgeom primitives. +static const unsigned short _bam_minor_ver = 0; #endif diff --git a/panda/src/putil/bamEndian.cxx b/panda/src/putil/bamEndian.cxx new file mode 100644 index 0000000000..d17653c0af --- /dev/null +++ b/panda/src/putil/bamEndian.cxx @@ -0,0 +1,56 @@ +// Filename: bamEndian.cxx +// Created by: drose (07Jun05) +// +//////////////////////////////////////////////////////////////////// +// +// PANDA 3D SOFTWARE +// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved +// +// All use of this software is subject to the terms of the Panda 3d +// Software license. You should have received a copy of this license +// along with this source code; you will also find a current copy of +// the license at http://etc.cmu.edu/panda3d/docs/license/ . +// +// To contact the maintainers of this program write to +// panda3d-general@lists.sourceforge.net . +// +//////////////////////////////////////////////////////////////////// + +#include "bamEndian.h" +#include "string_utils.h" +#include "config_util.h" + +ostream & +operator << (ostream &out, BamEndian be) { + switch (be) { + case BE_bigendian: + return out << "bigendian"; + + case BE_littleendian: + return out << "littleendian"; + } + + return out << "**invalid BamEndian value: (" << (int)be << ")**"; +} + +istream & +operator >> (istream &in, BamEndian &be) { + string word; + in >> word; + if (cmp_nocase(word, "native") == 0) { + be = BE_native; + + } else if (cmp_nocase(word, "bigendian") == 0) { + be = BE_bigendian; + + } else if (cmp_nocase(word, "littleendian") == 0) { + be = BE_littleendian; + + } else { + util_cat->error() + << "Invalid bam_endian string: " << word << "\n"; + be = BE_native; + } + + return in; +} diff --git a/panda/src/putil/bamEndian.h b/panda/src/putil/bamEndian.h new file mode 100644 index 0000000000..77a27a9ab8 --- /dev/null +++ b/panda/src/putil/bamEndian.h @@ -0,0 +1,42 @@ +// Filename: bamEndian.h +// Created by: drose (07Jun05) +// +//////////////////////////////////////////////////////////////////// +// +// PANDA 3D SOFTWARE +// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved +// +// All use of this software is subject to the terms of the Panda 3d +// Software license. You should have received a copy of this license +// along with this source code; you will also find a current copy of +// the license at http://etc.cmu.edu/panda3d/docs/license/ . +// +// To contact the maintainers of this program write to +// panda3d-general@lists.sourceforge.net . +// +//////////////////////////////////////////////////////////////////// + +#ifndef BAMENDIAN_H +#define BAMENDIAN_H + +#include "pandabase.h" + +// This defines an enumerated type used to represent the endianness of +// certain numeric values stored in a Bam file. It really has only +// two possible values, either BE_bigendian or BE_littleendian; but +// through a preprocessor trick we also add BE_native, which is the +// same numerically as whichever value the hardware supports natively. +enum BamEndian { + BE_bigendian = 0, + BE_littleendian = 1, +#ifdef WORDS_BIGENDIAN + BE_native = 0, +#else + BE_native = 1, +#endif +}; + +EXPCL_PANDA ostream &operator << (ostream &out, BamEndian be); +EXPCL_PANDA istream &operator >> (istream &in, BamEndian &be); + +#endif diff --git a/panda/src/putil/bamReader.I b/panda/src/putil/bamReader.I index dbb72108ff..af2d9a6f15 100644 --- a/panda/src/putil/bamReader.I +++ b/panda/src/putil/bamReader.I @@ -51,6 +51,20 @@ get_file_minor_ver() const { return _file_minor; } +//////////////////////////////////////////////////////////////////// +// Function: BamReader::get_file_endian +// Access: Public +// Description: Returns the endian preference indicated by the Bam +// file currently being read. This does not imply that +// every number is stored using the indicated +// convention, but individual objects may choose to +// respect this flag when recording data. +//////////////////////////////////////////////////////////////////// +INLINE BamEndian BamReader:: +get_file_endian() const { + return _file_endian; +} + //////////////////////////////////////////////////////////////////// // Function: BamReader::get_current_major_ver // Access: Public diff --git a/panda/src/putil/bamReader.cxx b/panda/src/putil/bamReader.cxx index b22b386562..cf6fc4bb17 100644 --- a/panda/src/putil/bamReader.cxx +++ b/panda/src/putil/bamReader.cxx @@ -114,6 +114,8 @@ init() { return false; } + _file_endian = (BamEndian)scan.get_uint8(); + if (bam_cat.is_debug()) { bam_cat.debug() << "Bam file is version " << _file_major << "." << _file_minor @@ -123,6 +125,8 @@ init() { << "(Current version is " << _bam_major_ver << "." << _bam_minor_ver << ".)\n"; } + bam_cat.debug() + << "Endian preference is " << _file_endian << "\n"; } return true; @@ -602,6 +606,23 @@ read_cdata(DatagramIterator &scan, PipelineCyclerBase &cycler) { _reading_cycler = old_cycler; } +//////////////////////////////////////////////////////////////////// +// Function: BamReader::read_cdata +// Access: Public +// Description: This flavor of BamReader allows passing an additional +// parameter to cdata->fillin(). +//////////////////////////////////////////////////////////////////// +void BamReader:: +read_cdata(DatagramIterator &scan, PipelineCyclerBase &cycler, + void *extra_data) { + PipelineCyclerBase *old_cycler = _reading_cycler; + _reading_cycler = &cycler; + CycleData *cdata = cycler.write(); + cdata->fillin(scan, this, extra_data); + cycler.release_write(cdata); + _reading_cycler = old_cycler; +} + //////////////////////////////////////////////////////////////////// // Function: BamReader::register_finalize // Access: Public diff --git a/panda/src/putil/bamReader.h b/panda/src/putil/bamReader.h index 1304f4929a..d3567a16b0 100644 --- a/panda/src/putil/bamReader.h +++ b/panda/src/putil/bamReader.h @@ -26,6 +26,7 @@ #include "datagramGenerator.h" #include "datagramIterator.h" #include "bamReaderParam.h" +#include "bamEndian.h" #include "factory.h" #include "vector_int.h" #include "pset.h" @@ -43,7 +44,7 @@ struct PipelineCyclerBase; void *t; \ if ((t = Manager->get_pta(source)) == (void*)NULL) \ { \ - array = Read_func(source); \ + array = Read_func(Manager, source); \ Manager->register_pta(array.get_void_ptr()); \ } \ else \ @@ -109,6 +110,7 @@ public: INLINE int get_file_major_ver() const; INLINE int get_file_minor_ver() const; + INLINE BamEndian get_file_endian() const; INLINE int get_current_major_ver() const; INLINE int get_current_minor_ver() const; @@ -125,6 +127,8 @@ public: void skip_pointer(DatagramIterator &scan); void read_cdata(DatagramIterator &scan, PipelineCyclerBase &cycler); + void read_cdata(DatagramIterator &scan, PipelineCyclerBase &cycler, + void *extra_data); void register_finalize(TypedWritable *whom); @@ -229,6 +233,7 @@ private: AuxData _aux_data; int _file_major, _file_minor; + BamEndian _file_endian; static const int _cur_major; static const int _cur_minor; }; diff --git a/panda/src/putil/bamWriter.I b/panda/src/putil/bamWriter.I index 26be28556d..33ca0a4e6f 100644 --- a/panda/src/putil/bamWriter.I +++ b/panda/src/putil/bamWriter.I @@ -15,3 +15,18 @@ // panda3d-general@lists.sourceforge.net . // //////////////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////////////// +// Function: BamWriter::get_file_endian +// Access: Public +// Description: Returns the endian preference indicated by the Bam +// file currently being written. This does not imply +// that every number is stored using the indicated +// convention, but individual objects may choose to +// respect this flag when recording data. +//////////////////////////////////////////////////////////////////// +INLINE BamEndian BamWriter:: +get_file_endian() const { + return _file_endian; +} diff --git a/panda/src/putil/bamWriter.cxx b/panda/src/putil/bamWriter.cxx index 0ca784f362..147b48ebda 100644 --- a/panda/src/putil/bamWriter.cxx +++ b/panda/src/putil/bamWriter.cxx @@ -76,11 +76,14 @@ init() { _next_pta_id = 1; _long_pta_id = false; + _file_endian = bam_endian; + // Write out the current major and minor BAM file version numbers. Datagram header; header.add_uint16(_bam_major_ver); header.add_uint16(_bam_minor_ver); + header.add_uint8(_file_endian); if (!_target->put_datagram(header)) { util_cat.error() @@ -282,6 +285,20 @@ write_cdata(Datagram &packet, const PipelineCyclerBase &cycler) { cycler.release_read(cdata); } +//////////////////////////////////////////////////////////////////// +// Function: BamWriter::write_cdata +// Access: Public +// Description: This version of write_cdata allows passing an +// additional parameter to cdata->write_datagram(). +//////////////////////////////////////////////////////////////////// +void BamWriter:: +write_cdata(Datagram &packet, const PipelineCyclerBase &cycler, + void *extra_data) { + const CycleData *cdata = cycler.read(); + cdata->write_datagram(this, packet, extra_data); + cycler.release_read(cdata); +} + //////////////////////////////////////////////////////////////////// // Function: BamWriter::register_pta // Access: Public diff --git a/panda/src/putil/bamWriter.h b/panda/src/putil/bamWriter.h index 4f078e283a..c4b95d18d4 100644 --- a/panda/src/putil/bamWriter.h +++ b/panda/src/putil/bamWriter.h @@ -21,7 +21,7 @@ #include "pandabase.h" #include "notify.h" - +#include "bamEndian.h" #include "typedWritable.h" #include "datagramSink.h" #include "pdeque.h" @@ -35,7 +35,7 @@ struct PipelineCyclerBase; #define WRITE_PTA(Manager, dest, Write_func, array) \ if (!Manager->register_pta(dest, array.p())) \ { \ - Write_func(dest, array); \ + Write_func(Manager, dest, array); \ } \ @@ -85,11 +85,15 @@ public: bool write_object(const TypedWritable *obj); bool has_object(const TypedWritable *obj) const; + INLINE BamEndian get_file_endian() const; + public: // Functions to support classes that write themselves to the Bam. void write_pointer(Datagram &packet, const TypedWritable *dest); void write_cdata(Datagram &packet, const PipelineCyclerBase &cycler); + void write_cdata(Datagram &packet, const PipelineCyclerBase &cycler, + void *extra_data); bool register_pta(Datagram &packet, const void *ptr); void write_handle(Datagram &packet, TypeHandle type); @@ -100,6 +104,8 @@ private: void write_pta_id(Datagram &dg, int pta_id); int enqueue_object(const TypedWritable *object); + BamEndian _file_endian; + // This is the set of all TypeHandles already written. pset _types_written; diff --git a/panda/src/putil/config_util.cxx b/panda/src/putil/config_util.cxx index 8667b1359b..708a5e396e 100644 --- a/panda/src/putil/config_util.cxx +++ b/panda/src/putil/config_util.cxx @@ -41,6 +41,15 @@ ConfigureDef(config_util); NotifyCategoryDef(util, ""); NotifyCategoryDef(bam, util_cat); +ConfigVariableEnum bam_endian +("bam-endian", BE_native, + PRC_DESC("The default endianness to use for writing major numeric data " + "tables to bam files. This does not affect all numbers written " + "to bam files, only those for which the individual object was " + "designed to support this flag. The default is \"native\"; you " + "may set it to \"littleendian\" or \"bigendian\" to target a " + "particular platform.")); + ConfigVariableSearchPath model_path ("model-path", PRC_DESC("The default directories to search for all models and general " diff --git a/panda/src/putil/config_util.h b/panda/src/putil/config_util.h index 2a50f182eb..a33d6506bb 100644 --- a/panda/src/putil/config_util.h +++ b/panda/src/putil/config_util.h @@ -22,6 +22,8 @@ #include "pandabase.h" #include "notifyCategoryProxy.h" #include "configVariableSearchPath.h" +#include "configVariableEnum.h" +#include "bamEndian.h" #include "dconfig.h" class DSearchPath; @@ -36,6 +38,7 @@ NotifyCategoryDecl(bam, EXPCL_PANDA, EXPTP_PANDA); // MemoryUsage. //extern EXPCL_PANDA const bool track_memory_usage; +extern EXPCL_PANDA ConfigVariableEnum bam_endian; extern EXPCL_PANDA ConfigVariableSearchPath model_path; extern EXPCL_PANDA ConfigVariableSearchPath texture_path; diff --git a/panda/src/putil/cycleData.cxx b/panda/src/putil/cycleData.cxx index 46f3a3460a..7b3f5f2737 100644 --- a/panda/src/putil/cycleData.cxx +++ b/panda/src/putil/cycleData.cxx @@ -38,6 +38,16 @@ void CycleData:: write_datagram(BamWriter *, Datagram &) const { } +//////////////////////////////////////////////////////////////////// +// Function: CycleData::write_datagram +// Access: Public, Virtual +// Description: Writes the contents of this object to the datagram +// for shipping out to a Bam file. +//////////////////////////////////////////////////////////////////// +void CycleData:: +write_datagram(BamWriter *, Datagram &, void *) const { +} + //////////////////////////////////////////////////////////////////// // Function: CycleData::complete_pointers // Access: Public, Virtual @@ -62,3 +72,16 @@ void CycleData:: fillin(DatagramIterator &, BamReader *) { } + +//////////////////////////////////////////////////////////////////// +// Function: CycleData::fillin +// Access: Public, Virtual +// Description: This internal function is intended to be called by +// each class's make_from_bam() method to read in all of +// the relevant data from the BamFile for the new +// object. +//////////////////////////////////////////////////////////////////// +void CycleData:: +fillin(DatagramIterator &, BamReader *, void *) { +} + diff --git a/panda/src/putil/cycleData.h b/panda/src/putil/cycleData.h index 2721e3917c..2e0b536c20 100644 --- a/panda/src/putil/cycleData.h +++ b/panda/src/putil/cycleData.h @@ -59,8 +59,11 @@ public: virtual CycleData *make_copy() const=0; virtual void write_datagram(BamWriter *, Datagram &) const; + virtual void write_datagram(BamWriter *, Datagram &, void *extra_data) const; virtual int complete_pointers(TypedWritable **p_list, BamReader *manager); virtual void fillin(DatagramIterator &scan, BamReader *manager); + virtual void fillin(DatagramIterator &scan, BamReader *manager, + void *extra_data); }; #include "cycleData.I" diff --git a/panda/src/putil/ioPtaDatagramFloat.cxx b/panda/src/putil/ioPtaDatagramFloat.cxx index 3c40e26268..0d230295a2 100644 --- a/panda/src/putil/ioPtaDatagramFloat.cxx +++ b/panda/src/putil/ioPtaDatagramFloat.cxx @@ -28,10 +28,9 @@ // Description: //////////////////////////////////////////////////////////////////// void IoPtaDatagramFloat:: -write_datagram(Datagram &dest, CPTA_float array) -{ +write_datagram(BamWriter *, Datagram &dest, CPTA_float array) { dest.add_uint32(array.size()); - for (int i = 0; i < (int)array.size(); i++) { + for (int i = 0; i < (int)array.size(); ++i) { dest.add_float32(array[i]); } } @@ -42,12 +41,11 @@ write_datagram(Datagram &dest, CPTA_float array) // Description: //////////////////////////////////////////////////////////////////// PTA_float IoPtaDatagramFloat:: -read_datagram(DatagramIterator &source) -{ +read_datagram(BamReader *, DatagramIterator &source) { PTA_float array; int size = source.get_uint32(); - for (int i = 0; i < size; i++) { + for (int i = 0; i < size; ++i) { array.push_back(source.get_float32()); } diff --git a/panda/src/putil/ioPtaDatagramFloat.h b/panda/src/putil/ioPtaDatagramFloat.h index c1c507e363..3f9e605a70 100644 --- a/panda/src/putil/ioPtaDatagramFloat.h +++ b/panda/src/putil/ioPtaDatagramFloat.h @@ -24,6 +24,8 @@ #include "pointerToArray.h" #include "pta_float.h" +class BamReader; +class BamWriter; class Datagram; class DatagramIterator; @@ -37,8 +39,8 @@ class DatagramIterator; //////////////////////////////////////////////////////////////////// class EXPCL_PANDA IoPtaDatagramFloat { public: - static void write_datagram(Datagram &dest, CPTA_float array); - static PTA_float read_datagram(DatagramIterator &source); + static void write_datagram(BamWriter *manager, Datagram &dest, CPTA_float array); + static PTA_float read_datagram(BamReader *manager, DatagramIterator &source); }; typedef IoPtaDatagramFloat IPD_float; diff --git a/panda/src/putil/ioPtaDatagramInt.cxx b/panda/src/putil/ioPtaDatagramInt.cxx index dc853b47ce..bcd9985938 100644 --- a/panda/src/putil/ioPtaDatagramInt.cxx +++ b/panda/src/putil/ioPtaDatagramInt.cxx @@ -28,11 +28,9 @@ // Description: //////////////////////////////////////////////////////////////////// void IoPtaDatagramInt:: -write_datagram(Datagram &dest, CPTA_int array) -{ +write_datagram(BamWriter *, Datagram &dest, CPTA_int array) { dest.add_uint32(array.size()); - for(int i = 0; i < (int)array.size(); i++) - { + for(int i = 0; i < (int)array.size(); ++i) { dest.add_uint32(array[i]); } } @@ -43,13 +41,11 @@ write_datagram(Datagram &dest, CPTA_int array) // Description: //////////////////////////////////////////////////////////////////// PTA_int IoPtaDatagramInt:: -read_datagram(DatagramIterator &source) -{ +read_datagram(BamReader *, DatagramIterator &source) { PTA_int array; int size = source.get_uint32(); - for(int i = 0; i < size; i++) - { + for(int i = 0; i < size; ++i) { array.push_back(source.get_uint32()); } diff --git a/panda/src/putil/ioPtaDatagramInt.h b/panda/src/putil/ioPtaDatagramInt.h index 29cf55e25c..654d84e7c1 100644 --- a/panda/src/putil/ioPtaDatagramInt.h +++ b/panda/src/putil/ioPtaDatagramInt.h @@ -24,6 +24,8 @@ #include "pointerToArray.h" #include "pta_int.h" +class BamReader; +class BamWriter; class Datagram; class DatagramIterator; @@ -36,8 +38,8 @@ class DatagramIterator; //////////////////////////////////////////////////////////////////// class EXPCL_PANDA IoPtaDatagramInt { public: - static void write_datagram(Datagram &dest, CPTA_int array); - static PTA_int read_datagram(DatagramIterator &source); + static void write_datagram(BamWriter *manager, Datagram &dest, CPTA_int array); + static PTA_int read_datagram(BamReader *manager, DatagramIterator &source); }; typedef IoPtaDatagramInt IPD_int; diff --git a/panda/src/putil/ioPtaDatagramShort.cxx b/panda/src/putil/ioPtaDatagramShort.cxx index a60dc99b27..848a8d8233 100644 --- a/panda/src/putil/ioPtaDatagramShort.cxx +++ b/panda/src/putil/ioPtaDatagramShort.cxx @@ -28,11 +28,9 @@ // Description: //////////////////////////////////////////////////////////////////// void IoPtaDatagramShort:: -write_datagram(Datagram &dest, CPTA_ushort array) -{ +write_datagram(BamWriter *, Datagram &dest, CPTA_ushort array) { dest.add_uint32(array.size()); - for(int i = 0; i < (int)array.size(); i++) - { + for(int i = 0; i < (int)array.size(); ++i) { dest.add_uint16(array[i]); } } @@ -43,13 +41,11 @@ write_datagram(Datagram &dest, CPTA_ushort array) // Description: //////////////////////////////////////////////////////////////////// PTA_ushort IoPtaDatagramShort:: -read_datagram(DatagramIterator &source) -{ +read_datagram(BamReader *, DatagramIterator &source) { PTA_ushort array; int size = source.get_uint32(); - for(int i = 0; i < size; i++) - { + for(int i = 0; i < size; ++i) { array.push_back(source.get_uint16()); } diff --git a/panda/src/putil/ioPtaDatagramShort.h b/panda/src/putil/ioPtaDatagramShort.h index 7ffd8d1116..0b1f976026 100644 --- a/panda/src/putil/ioPtaDatagramShort.h +++ b/panda/src/putil/ioPtaDatagramShort.h @@ -24,6 +24,8 @@ #include "pointerToArray.h" #include "pta_ushort.h" +class BamReader; +class BamWriter; class Datagram; class DatagramIterator; @@ -37,8 +39,8 @@ class DatagramIterator; //////////////////////////////////////////////////////////////////// class EXPCL_PANDA IoPtaDatagramShort { public: - static void write_datagram(Datagram &dest, CPTA_ushort array); - static PTA_ushort read_datagram(DatagramIterator &source); + static void write_datagram(BamWriter *manager, Datagram &dest, CPTA_ushort array); + static PTA_ushort read_datagram(BamReader *manager, DatagramIterator &source); }; typedef IoPtaDatagramShort IPD_ushort; diff --git a/panda/src/putil/pta_int.N b/panda/src/putil/pta_int.N deleted file mode 100644 index 376ab4898b..0000000000 --- a/panda/src/putil/pta_int.N +++ /dev/null @@ -1,3 +0,0 @@ -forcetype PointerToArray< int > -forcetype ConstPointerToArray< int > -forcetype PointerToBase>> diff --git a/panda/src/putil/putil_composite1.cxx b/panda/src/putil/putil_composite1.cxx index 5fe0560119..efd5d1a79c 100644 --- a/panda/src/putil/putil_composite1.cxx +++ b/panda/src/putil/putil_composite1.cxx @@ -1,3 +1,4 @@ +#include "bamEndian.cxx" #include "bamReader.cxx" #include "bamReaderParam.cxx" #include "bamWriter.cxx" diff --git a/panda/src/text/Sources.pp b/panda/src/text/Sources.pp index c79ee6827a..db91aaff10 100644 --- a/panda/src/text/Sources.pp +++ b/panda/src/text/Sources.pp @@ -19,7 +19,6 @@ dynamicTextPage.I dynamicTextPage.h \ fontPool.I fontPool.h \ geomTextGlyph.I geomTextGlyph.h \ - qpgeomTextGlyph.I qpgeomTextGlyph.h \ staticTextFont.I staticTextFont.h \ textAssembler.I textAssembler.h \ textFont.I textFont.h \ @@ -36,7 +35,6 @@ dynamicTextPage.cxx \ fontPool.cxx \ geomTextGlyph.cxx \ - qpgeomTextGlyph.cxx \ staticTextFont.cxx \ textAssembler.cxx \ textFont.cxx textGlyph.cxx \ @@ -51,7 +49,6 @@ dynamicTextPage.I dynamicTextPage.h \ fontPool.I fontPool.h \ geomTextGlyph.I geomTextGlyph.h \ - qpgeomTextGlyph.I qpgeomTextGlyph.h \ staticTextFont.I staticTextFont.h \ textAssembler.I textAssembler.h \ textFont.I textFont.h \ diff --git a/panda/src/text/cmss12.bam.c b/panda/src/text/cmss12.bam.c index cf73080e90..34c2e7fac6 100644 --- a/panda/src/text/cmss12.bam.c +++ b/panda/src/text/cmss12.bam.c @@ -6,3185 +6,2240 @@ */ const unsigned char default_font_data[] = { - 0x70, 0x62, 0x6a, 0x00, 0x0a, 0x0d, 0x04, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x09, 0x00, 0x9a, 0x00, 0x00, 0x00, 0xb2, 0x00, 0x09, 0x00, - 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x6f, 0x6f, 0x74, 0x01, 0xb1, + 0x70, 0x62, 0x6a, 0x00, 0x0a, 0x0d, 0x04, 0x00, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, 0x54, 0x00, 0x09, 0x00, + 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52, 0x6f, 0x6f, 0x74, 0x01, 0x53, 0x00, 0x09, 0x00, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x4e, 0x6f, 0x64, - 0x65, 0x01, 0x8c, 0x00, 0x09, 0x00, 0x50, 0x61, 0x6e, 0x64, 0x61, - 0x4e, 0x6f, 0x64, 0x65, 0x03, 0x21, 0x00, 0x0d, 0x00, 0x54, 0x79, + 0x65, 0x01, 0x1e, 0x00, 0x09, 0x00, 0x50, 0x61, 0x6e, 0x64, 0x61, + 0x4e, 0x6f, 0x64, 0x65, 0x03, 0x1c, 0x00, 0x0d, 0x00, 0x54, 0x79, 0x70, 0x65, 0x64, 0x57, 0x72, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x01, 0x01, 0x00, 0x0b, 0x00, 0x54, 0x79, 0x70, 0x65, 0x64, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x00, 0x74, 0x00, 0x0d, 0x00, 0x42, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x00, 0x1d, 0x00, 0x0d, 0x00, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x00, 0x03, 0x00, 0x0e, 0x00, 0x52, 0x65, 0x66, 0x65, 0x72, + 0x74, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x00, 0x01, 0x00, 0x0a, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0x2e, 0x65, 0x67, 0x67, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, - 0xff, 0x00, 0x00, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0xb9, 0x00, 0x0b, 0x00, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x01, 0x22, 0x00, 0x1b, 0x00, 0x54, 0x79, - 0x70, 0x65, 0x64, 0x57, 0x72, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x02, 0x21, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x18, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x0d, 0x00, 0x52, 0x65, - 0x6e, 0x64, 0x65, 0x72, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x73, - 0x01, 0x22, 0x00, 0x03, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, - 0xc1, 0x00, 0x0e, 0x00, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, - 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x01, 0x22, 0x00, 0x04, - 0x00, 0x05, 0x00, 0x22, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x05, 0x00, - 0x00, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, - 0xff, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x02, 0x00, - 0x00, 0xba, 0x00, 0x0c, 0x00, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x01, 0xac, 0x00, 0x12, 0x00, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x68, - 0x69, 0x6c, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x01, 0x8c, 0x00, 0x06, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, - 0xff, 0xff, 0x01, 0x00, 0x05, 0x00, 0x60, 0x00, 0x07, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4b, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x08, - 0x00, 0x47, 0x65, 0x6f, 0x6d, 0x4e, 0x6f, 0x64, 0x65, 0x01, 0x8c, - 0x00, 0x07, 0x00, 0x02, 0x00, 0x33, 0x33, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x67, 0x00, - 0x68, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x08, 0x00, 0x02, 0x00, 0x33, 0x34, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x6b, 0x00, - 0x68, 0x00, 0x6c, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x09, 0x00, 0x02, 0x00, 0x33, 0x35, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x6d, 0x00, - 0x68, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x0a, 0x00, 0x02, 0x00, 0x33, 0x36, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x6f, 0x00, - 0x68, 0x00, 0x70, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x0b, 0x00, 0x02, 0x00, 0x33, 0x37, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, + 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7b, 0x00, 0x00, 0x00, 0x61, 0x00, 0x0b, 0x00, 0x52, 0x65, 0x6e, + 0x64, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x01, 0x60, 0x00, + 0x18, 0x00, 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, + 0x64, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x01, 0x5f, 0x00, 0x21, 0x00, 0x43, 0x61, + 0x63, 0x68, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x64, 0x57, 0x72, + 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x01, 0x27, + 0x00, 0x1b, 0x00, 0x54, 0x79, 0x70, 0x65, 0x64, 0x57, 0x72, 0x69, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x02, 0x1c, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x5d, + 0x00, 0x0d, 0x00, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x45, 0x66, + 0x66, 0x65, 0x63, 0x74, 0x73, 0x01, 0x27, 0x00, 0x03, 0x00, 0x00, + 0x00, 0x19, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x0e, 0x00, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x01, 0x60, 0x00, 0x04, 0x00, 0x05, 0x00, 0x26, 0x00, 0x00, + 0x00, 0x1e, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x03, 0x00, + 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x01, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x64, + 0x00, 0x0c, 0x00, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, + 0x4e, 0x6f, 0x64, 0x65, 0x01, 0x63, 0x00, 0x12, 0x00, 0x53, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x68, 0x69, 0x6c, + 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x01, 0x1e, 0x00, 0x06, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x05, 0x00, 0x60, 0x00, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x08, 0x00, 0x47, 0x65, 0x6f, 0x6d, 0x4e, 0x6f, 0x64, 0x65, + 0x01, 0x1e, 0x00, 0x07, 0x00, 0x02, 0x00, 0x33, 0x33, 0x02, 0x00, + 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, + 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x67, 0x00, 0x68, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x08, 0x00, 0x02, 0x00, + 0x33, 0x34, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, + 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x6b, 0x00, 0x68, + 0x00, 0x6c, 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x09, 0x00, 0x02, 0x00, 0x33, 0x35, 0x02, 0x00, 0x03, 0x00, 0x04, + 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x6d, 0x00, 0x68, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x2c, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x0a, 0x00, 0x02, 0x00, 0x33, 0x36, 0x02, + 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x6f, 0x00, 0x68, 0x00, 0x70, 0x00, + 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x0b, 0x00, 0x02, + 0x00, 0x33, 0x37, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x71, 0x00, - 0x68, 0x00, 0x72, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, + 0x68, 0x00, 0x72, 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x0c, 0x00, 0x02, 0x00, 0x33, 0x38, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x73, 0x00, - 0x68, 0x00, 0x74, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x0d, 0x00, 0x02, 0x00, 0x33, 0x39, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x75, 0x00, - 0x68, 0x00, 0x76, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x0e, 0x00, 0x02, 0x00, 0x34, 0x30, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x77, 0x00, - 0x68, 0x00, 0x78, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x0f, 0x00, 0x02, 0x00, 0x34, 0x31, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x79, 0x00, - 0x68, 0x00, 0x7a, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x10, 0x00, 0x02, 0x00, 0x34, 0x32, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x7b, 0x00, - 0x68, 0x00, 0x7c, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x11, 0x00, 0x02, 0x00, 0x34, 0x33, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x7d, 0x00, - 0x68, 0x00, 0x7e, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x12, 0x00, 0x02, 0x00, 0x34, 0x34, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x7f, 0x00, - 0x68, 0x00, 0x80, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x13, 0x00, 0x02, 0x00, 0x34, 0x35, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x81, 0x00, - 0x68, 0x00, 0x82, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x14, 0x00, 0x02, 0x00, 0x34, 0x36, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x83, 0x00, - 0x68, 0x00, 0x84, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x15, 0x00, 0x02, 0x00, 0x34, 0x37, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x85, 0x00, - 0x68, 0x00, 0x86, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x16, 0x00, 0x02, 0x00, 0x34, 0x38, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, + 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, + 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x73, 0x00, 0x68, 0x00, 0x74, 0x00, 0x6a, 0x00, 0x2c, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x0d, 0x00, 0x02, 0x00, 0x33, 0x39, + 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x75, 0x00, 0x68, 0x00, 0x76, + 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x0e, 0x00, + 0x02, 0x00, 0x34, 0x30, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x77, + 0x00, 0x68, 0x00, 0x78, 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x0f, 0x00, 0x02, 0x00, 0x34, 0x31, 0x02, 0x00, 0x03, + 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x79, 0x00, 0x68, 0x00, 0x7a, 0x00, 0x6a, 0x00, + 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x10, 0x00, 0x02, 0x00, 0x34, + 0x32, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x7b, 0x00, 0x68, 0x00, + 0x7c, 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x11, + 0x00, 0x02, 0x00, 0x34, 0x33, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x7d, 0x00, 0x68, 0x00, 0x7e, 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x12, 0x00, 0x02, 0x00, 0x34, 0x34, 0x02, 0x00, + 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, + 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x7f, 0x00, 0x68, 0x00, 0x80, 0x00, 0x6a, + 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x13, 0x00, 0x02, 0x00, + 0x34, 0x35, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, + 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x81, 0x00, 0x68, + 0x00, 0x82, 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x14, 0x00, 0x02, 0x00, 0x34, 0x36, 0x02, 0x00, 0x03, 0x00, 0x04, + 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x83, 0x00, 0x68, 0x00, 0x84, 0x00, 0x6a, 0x00, 0x2c, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x15, 0x00, 0x02, 0x00, 0x34, 0x37, 0x02, + 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x85, 0x00, 0x68, 0x00, 0x86, 0x00, + 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x16, 0x00, 0x02, + 0x00, 0x34, 0x38, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x87, 0x00, - 0x68, 0x00, 0x88, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, + 0x68, 0x00, 0x88, 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x17, 0x00, 0x02, 0x00, 0x34, 0x39, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x89, 0x00, - 0x68, 0x00, 0x8a, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x18, 0x00, 0x02, 0x00, 0x35, 0x30, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8b, 0x00, - 0x68, 0x00, 0x8c, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x19, 0x00, 0x02, 0x00, 0x35, 0x31, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8d, 0x00, - 0x68, 0x00, 0x8e, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x1a, 0x00, 0x02, 0x00, 0x35, 0x32, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8f, 0x00, - 0x68, 0x00, 0x90, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x1b, 0x00, 0x02, 0x00, 0x35, 0x33, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x91, 0x00, - 0x68, 0x00, 0x92, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x1c, 0x00, 0x02, 0x00, 0x35, 0x34, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x93, 0x00, - 0x68, 0x00, 0x94, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x1d, 0x00, 0x02, 0x00, 0x35, 0x35, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x95, 0x00, - 0x68, 0x00, 0x96, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x1e, 0x00, 0x02, 0x00, 0x35, 0x36, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x97, 0x00, - 0x68, 0x00, 0x98, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x1f, 0x00, 0x02, 0x00, 0x35, 0x37, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x99, 0x00, - 0x68, 0x00, 0x9a, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x20, 0x00, 0x02, 0x00, 0x35, 0x38, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x9b, 0x00, - 0x68, 0x00, 0x9c, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x21, 0x00, 0x02, 0x00, 0x35, 0x39, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, + 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, + 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x89, 0x00, 0x68, 0x00, 0x8a, 0x00, 0x6a, 0x00, 0x2c, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x18, 0x00, 0x02, 0x00, 0x35, 0x30, + 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8b, 0x00, 0x68, 0x00, 0x8c, + 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x19, 0x00, + 0x02, 0x00, 0x35, 0x31, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8d, + 0x00, 0x68, 0x00, 0x8e, 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x1a, 0x00, 0x02, 0x00, 0x35, 0x32, 0x02, 0x00, 0x03, + 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x8f, 0x00, 0x68, 0x00, 0x90, 0x00, 0x6a, 0x00, + 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x1b, 0x00, 0x02, 0x00, 0x35, + 0x33, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x91, 0x00, 0x68, 0x00, + 0x92, 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x1c, + 0x00, 0x02, 0x00, 0x35, 0x34, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x93, 0x00, 0x68, 0x00, 0x94, 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x1d, 0x00, 0x02, 0x00, 0x35, 0x35, 0x02, 0x00, + 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, + 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x95, 0x00, 0x68, 0x00, 0x96, 0x00, 0x6a, + 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x1e, 0x00, 0x02, 0x00, + 0x35, 0x36, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, + 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x97, 0x00, 0x68, + 0x00, 0x98, 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x1f, 0x00, 0x02, 0x00, 0x35, 0x37, 0x02, 0x00, 0x03, 0x00, 0x04, + 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x99, 0x00, 0x68, 0x00, 0x9a, 0x00, 0x6a, 0x00, 0x2c, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x20, 0x00, 0x02, 0x00, 0x35, 0x38, 0x02, + 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x9b, 0x00, 0x68, 0x00, 0x9c, 0x00, + 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x21, 0x00, 0x02, + 0x00, 0x35, 0x39, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x9d, 0x00, - 0x68, 0x00, 0x9e, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, + 0x68, 0x00, 0x9e, 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x22, 0x00, 0x02, 0x00, 0x36, 0x30, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x9f, 0x00, - 0x68, 0x00, 0xa0, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x23, 0x00, 0x02, 0x00, 0x36, 0x31, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xa1, 0x00, - 0x68, 0x00, 0xa2, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x24, 0x00, 0x02, 0x00, 0x36, 0x32, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xa3, 0x00, - 0x68, 0x00, 0xa4, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x25, 0x00, 0x02, 0x00, 0x36, 0x33, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xa5, 0x00, - 0x68, 0x00, 0xa6, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x26, 0x00, 0x02, 0x00, 0x36, 0x34, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xa7, 0x00, - 0x68, 0x00, 0xa8, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x27, 0x00, 0x02, 0x00, 0x36, 0x35, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xa9, 0x00, - 0x68, 0x00, 0xaa, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x28, 0x00, 0x02, 0x00, 0x36, 0x36, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xab, 0x00, - 0x68, 0x00, 0xac, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x29, 0x00, 0x02, 0x00, 0x36, 0x37, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xad, 0x00, - 0x68, 0x00, 0xae, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x2a, 0x00, 0x02, 0x00, 0x36, 0x38, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xaf, 0x00, - 0x68, 0x00, 0xb0, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x2b, 0x00, 0x02, 0x00, 0x36, 0x39, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xb1, 0x00, - 0x68, 0x00, 0xb2, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x2c, 0x00, 0x02, 0x00, 0x37, 0x30, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xb3, 0x00, - 0x68, 0x00, 0xb4, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x2d, 0x00, 0x02, 0x00, 0x37, 0x31, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xb5, 0x00, - 0x68, 0x00, 0xb6, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x2e, 0x00, 0x02, 0x00, 0x37, 0x32, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xb7, 0x00, - 0x68, 0x00, 0xb8, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x2f, 0x00, 0x02, 0x00, 0x37, 0x33, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xb9, 0x00, - 0x68, 0x00, 0xba, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x30, 0x00, 0x02, 0x00, 0x37, 0x34, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xbb, 0x00, - 0x68, 0x00, 0xbc, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x31, 0x00, 0x02, 0x00, 0x37, 0x35, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xbd, 0x00, - 0x68, 0x00, 0xbe, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x32, 0x00, 0x02, 0x00, 0x37, 0x36, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xbf, 0x00, - 0x68, 0x00, 0xc0, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x33, 0x00, 0x02, 0x00, 0x37, 0x37, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xc1, 0x00, - 0x68, 0x00, 0xc2, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x34, 0x00, 0x02, 0x00, 0x37, 0x38, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xc3, 0x00, - 0x68, 0x00, 0xc4, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x35, 0x00, 0x02, 0x00, 0x37, 0x39, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xc5, 0x00, - 0x68, 0x00, 0xc6, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x36, 0x00, 0x02, 0x00, 0x38, 0x30, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xc7, 0x00, - 0x68, 0x00, 0xc8, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x37, 0x00, 0x02, 0x00, 0x38, 0x31, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xc9, 0x00, - 0x68, 0x00, 0xca, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x38, 0x00, 0x02, 0x00, 0x38, 0x32, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xcb, 0x00, - 0x68, 0x00, 0xcc, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x39, 0x00, 0x02, 0x00, 0x38, 0x33, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xcd, 0x00, - 0x68, 0x00, 0xce, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x3a, 0x00, 0x02, 0x00, 0x38, 0x34, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xcf, 0x00, - 0x68, 0x00, 0xd0, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x3b, 0x00, 0x02, 0x00, 0x38, 0x35, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xd1, 0x00, - 0x68, 0x00, 0xd2, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x3c, 0x00, 0x02, 0x00, 0x38, 0x36, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xd3, 0x00, - 0x68, 0x00, 0xd4, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x3d, 0x00, 0x02, 0x00, 0x38, 0x37, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xd5, 0x00, - 0x68, 0x00, 0xd6, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x3e, 0x00, 0x02, 0x00, 0x38, 0x38, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xd7, 0x00, - 0x68, 0x00, 0xd8, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x3f, 0x00, 0x02, 0x00, 0x38, 0x39, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xd9, 0x00, - 0x68, 0x00, 0xda, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x40, 0x00, 0x02, 0x00, 0x39, 0x30, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xdb, 0x00, - 0x68, 0x00, 0xdc, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x41, 0x00, 0x02, 0x00, 0x39, 0x31, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xdd, 0x00, - 0x68, 0x00, 0xde, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x42, 0x00, 0x02, 0x00, 0x39, 0x32, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xdf, 0x00, - 0x68, 0x00, 0xe0, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x43, 0x00, 0x02, 0x00, 0x39, 0x33, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xe1, 0x00, - 0x68, 0x00, 0xe2, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x44, 0x00, 0x02, 0x00, 0x39, 0x34, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xe3, 0x00, - 0x68, 0x00, 0xe4, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x45, 0x00, 0x02, 0x00, 0x39, 0x35, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xe5, 0x00, - 0x68, 0x00, 0xe6, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x46, 0x00, 0x02, 0x00, 0x39, 0x36, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xe7, 0x00, - 0x68, 0x00, 0xe8, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x47, 0x00, 0x02, 0x00, 0x39, 0x37, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xe9, 0x00, - 0x68, 0x00, 0xea, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x48, 0x00, 0x02, 0x00, 0x39, 0x38, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xeb, 0x00, - 0x68, 0x00, 0xec, 0x00, 0x6a, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x49, 0x00, 0x02, 0x00, 0x39, 0x39, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xed, 0x00, - 0x68, 0x00, 0xee, 0x00, 0x6a, 0x00, 0x29, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x4a, 0x00, 0x03, 0x00, 0x31, 0x30, 0x30, 0x02, 0x00, 0x03, - 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xef, - 0x00, 0x68, 0x00, 0xf0, 0x00, 0x6a, 0x00, 0x29, 0x00, 0x00, 0x00, - 0xa9, 0x00, 0x4b, 0x00, 0x03, 0x00, 0x31, 0x30, 0x31, 0x02, 0x00, - 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, - 0xf1, 0x00, 0x68, 0x00, 0xf2, 0x00, 0x6a, 0x00, 0x29, 0x00, 0x00, - 0x00, 0xa9, 0x00, 0x4c, 0x00, 0x03, 0x00, 0x31, 0x30, 0x32, 0x02, - 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x00, 0xf3, 0x00, 0x68, 0x00, 0xf4, 0x00, 0x6a, 0x00, 0x29, 0x00, - 0x00, 0x00, 0xa9, 0x00, 0x4d, 0x00, 0x03, 0x00, 0x31, 0x30, 0x33, - 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, + 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x00, 0xf5, 0x00, 0x68, 0x00, 0xf6, 0x00, 0x6a, 0x00, 0x29, - 0x00, 0x00, 0x00, 0xa9, 0x00, 0x4e, 0x00, 0x03, 0x00, 0x31, 0x30, + 0x02, 0x00, 0x9f, 0x00, 0x68, 0x00, 0xa0, 0x00, 0x6a, 0x00, 0x2c, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x23, 0x00, 0x02, 0x00, 0x36, 0x31, + 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xa1, 0x00, 0x68, 0x00, 0xa2, + 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x24, 0x00, + 0x02, 0x00, 0x36, 0x32, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xa3, + 0x00, 0x68, 0x00, 0xa4, 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x25, 0x00, 0x02, 0x00, 0x36, 0x33, 0x02, 0x00, 0x03, + 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0xa5, 0x00, 0x68, 0x00, 0xa6, 0x00, 0x6a, 0x00, + 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x26, 0x00, 0x02, 0x00, 0x36, 0x34, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x00, 0xf7, 0x00, 0x68, 0x00, 0xf8, 0x00, 0x6a, 0x00, - 0x29, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x4f, 0x00, 0x03, 0x00, 0x31, - 0x30, 0x35, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, - 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x00, 0xf9, 0x00, 0x68, 0x00, 0xfa, 0x00, 0x6a, - 0x00, 0x29, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x50, 0x00, 0x03, 0x00, - 0x31, 0x30, 0x36, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, - 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x00, 0xfb, 0x00, 0x68, 0x00, 0xfc, 0x00, - 0x6a, 0x00, 0x29, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x51, 0x00, 0x03, - 0x00, 0x31, 0x30, 0x37, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, - 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xfd, 0x00, 0x68, 0x00, 0xfe, - 0x00, 0x6a, 0x00, 0x29, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x52, 0x00, - 0x03, 0x00, 0x31, 0x30, 0x38, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, - 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xff, 0x00, 0x68, 0x00, - 0x00, 0x01, 0x6a, 0x00, 0x29, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x53, - 0x00, 0x03, 0x00, 0x31, 0x30, 0x39, 0x02, 0x00, 0x03, 0x00, 0x04, - 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x01, 0x68, - 0x00, 0x02, 0x01, 0x6a, 0x00, 0x29, 0x00, 0x00, 0x00, 0xa9, 0x00, - 0x54, 0x00, 0x03, 0x00, 0x31, 0x31, 0x30, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x03, 0x01, - 0x68, 0x00, 0x04, 0x01, 0x6a, 0x00, 0x29, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x55, 0x00, 0x03, 0x00, 0x31, 0x31, 0x31, 0x02, 0x00, 0x03, - 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x05, - 0x01, 0x68, 0x00, 0x06, 0x01, 0x6a, 0x00, 0x29, 0x00, 0x00, 0x00, - 0xa9, 0x00, 0x56, 0x00, 0x03, 0x00, 0x31, 0x31, 0x32, 0x02, 0x00, - 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, + 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xa7, 0x00, 0x68, 0x00, + 0xa8, 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x27, + 0x00, 0x02, 0x00, 0x36, 0x35, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, - 0x07, 0x01, 0x68, 0x00, 0x08, 0x01, 0x6a, 0x00, 0x29, 0x00, 0x00, - 0x00, 0xa9, 0x00, 0x57, 0x00, 0x03, 0x00, 0x31, 0x31, 0x33, 0x02, - 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, + 0xa9, 0x00, 0x68, 0x00, 0xaa, 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x28, 0x00, 0x02, 0x00, 0x36, 0x36, 0x02, 0x00, + 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, + 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0xab, 0x00, 0x68, 0x00, 0xac, 0x00, 0x6a, + 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x29, 0x00, 0x02, 0x00, + 0x36, 0x37, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, + 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xad, 0x00, 0x68, + 0x00, 0xae, 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x2a, 0x00, 0x02, 0x00, 0x36, 0x38, 0x02, 0x00, 0x03, 0x00, 0x04, + 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x09, 0x01, 0x68, 0x00, 0x0a, 0x01, 0x6a, 0x00, 0x29, 0x00, - 0x00, 0x00, 0xa9, 0x00, 0x58, 0x00, 0x03, 0x00, 0x31, 0x31, 0x34, - 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, + 0x00, 0xaf, 0x00, 0x68, 0x00, 0xb0, 0x00, 0x6a, 0x00, 0x2c, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x2b, 0x00, 0x02, 0x00, 0x36, 0x39, 0x02, + 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x00, 0xb1, 0x00, 0x68, 0x00, 0xb2, 0x00, + 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x2c, 0x00, 0x02, + 0x00, 0x37, 0x30, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xb3, 0x00, + 0x68, 0x00, 0xb4, 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x2d, 0x00, 0x02, 0x00, 0x37, 0x31, 0x02, 0x00, 0x03, 0x00, + 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x0b, 0x01, 0x68, 0x00, 0x0c, 0x01, 0x6a, 0x00, 0x29, - 0x00, 0x00, 0x00, 0xa9, 0x00, 0x59, 0x00, 0x03, 0x00, 0x31, 0x31, + 0x02, 0x00, 0xb5, 0x00, 0x68, 0x00, 0xb6, 0x00, 0x6a, 0x00, 0x2c, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x2e, 0x00, 0x02, 0x00, 0x37, 0x32, + 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xb7, 0x00, 0x68, 0x00, 0xb8, + 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x2f, 0x00, + 0x02, 0x00, 0x37, 0x33, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xb9, + 0x00, 0x68, 0x00, 0xba, 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x30, 0x00, 0x02, 0x00, 0x37, 0x34, 0x02, 0x00, 0x03, + 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0xbb, 0x00, 0x68, 0x00, 0xbc, 0x00, 0x6a, 0x00, + 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x31, 0x00, 0x02, 0x00, 0x37, 0x35, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x0d, 0x01, 0x68, 0x00, 0x0e, 0x01, 0x6a, 0x00, - 0x29, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x5a, 0x00, 0x03, 0x00, 0x31, - 0x31, 0x36, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, - 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x00, 0x0f, 0x01, 0x68, 0x00, 0x10, 0x01, 0x6a, - 0x00, 0x29, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x5b, 0x00, 0x03, 0x00, - 0x31, 0x31, 0x37, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, - 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x11, 0x01, 0x68, 0x00, 0x12, 0x01, - 0x6a, 0x00, 0x29, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x5c, 0x00, 0x03, - 0x00, 0x31, 0x31, 0x38, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, - 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x13, 0x01, 0x68, 0x00, 0x14, - 0x01, 0x6a, 0x00, 0x29, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x5d, 0x00, - 0x03, 0x00, 0x31, 0x31, 0x39, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, - 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x15, 0x01, 0x68, 0x00, - 0x16, 0x01, 0x6a, 0x00, 0x29, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x5e, - 0x00, 0x03, 0x00, 0x31, 0x32, 0x30, 0x02, 0x00, 0x03, 0x00, 0x04, - 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x17, 0x01, 0x68, - 0x00, 0x18, 0x01, 0x6a, 0x00, 0x29, 0x00, 0x00, 0x00, 0xa9, 0x00, - 0x5f, 0x00, 0x03, 0x00, 0x31, 0x32, 0x31, 0x02, 0x00, 0x03, 0x00, - 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x19, 0x01, - 0x68, 0x00, 0x1a, 0x01, 0x6a, 0x00, 0x29, 0x00, 0x00, 0x00, 0xa9, - 0x00, 0x60, 0x00, 0x03, 0x00, 0x31, 0x32, 0x32, 0x02, 0x00, 0x03, - 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x1b, - 0x01, 0x68, 0x00, 0x1c, 0x01, 0x6a, 0x00, 0x29, 0x00, 0x00, 0x00, - 0xa9, 0x00, 0x61, 0x00, 0x03, 0x00, 0x31, 0x32, 0x33, 0x02, 0x00, - 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x06, + 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xbd, 0x00, 0x68, 0x00, + 0xbe, 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x32, + 0x00, 0x02, 0x00, 0x37, 0x36, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, - 0x1d, 0x01, 0x68, 0x00, 0x1e, 0x01, 0x6a, 0x00, 0x29, 0x00, 0x00, - 0x00, 0xa9, 0x00, 0x62, 0x00, 0x03, 0x00, 0x31, 0x32, 0x34, 0x02, - 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, + 0xbf, 0x00, 0x68, 0x00, 0xc0, 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x33, 0x00, 0x02, 0x00, 0x37, 0x37, 0x02, 0x00, + 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, + 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0xc1, 0x00, 0x68, 0x00, 0xc2, 0x00, 0x6a, + 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x34, 0x00, 0x02, 0x00, + 0x37, 0x38, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, + 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xc3, 0x00, 0x68, + 0x00, 0xc4, 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x35, 0x00, 0x02, 0x00, 0x37, 0x39, 0x02, 0x00, 0x03, 0x00, 0x04, + 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x1f, 0x01, 0x68, 0x00, 0x20, 0x01, 0x6a, 0x00, 0x29, 0x00, - 0x00, 0x00, 0xa9, 0x00, 0x63, 0x00, 0x03, 0x00, 0x31, 0x32, 0x35, - 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, + 0x00, 0xc5, 0x00, 0x68, 0x00, 0xc6, 0x00, 0x6a, 0x00, 0x2c, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x36, 0x00, 0x02, 0x00, 0x38, 0x30, 0x02, + 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x00, 0xc7, 0x00, 0x68, 0x00, 0xc8, 0x00, + 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x37, 0x00, 0x02, + 0x00, 0x38, 0x31, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xc9, 0x00, + 0x68, 0x00, 0xca, 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x38, 0x00, 0x02, 0x00, 0x38, 0x32, 0x02, 0x00, 0x03, 0x00, + 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x21, 0x01, 0x68, 0x00, 0x22, 0x01, 0x6a, 0x00, 0x29, - 0x00, 0x00, 0x00, 0xa9, 0x00, 0x64, 0x00, 0x03, 0x00, 0x31, 0x32, - 0x36, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x02, 0x00, 0xcb, 0x00, 0x68, 0x00, 0xcc, 0x00, 0x6a, 0x00, 0x2c, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x39, 0x00, 0x02, 0x00, 0x38, 0x33, + 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xcd, 0x00, 0x68, 0x00, 0xce, + 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x3a, 0x00, + 0x02, 0x00, 0x38, 0x34, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xcf, + 0x00, 0x68, 0x00, 0xd0, 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x3b, 0x00, 0x02, 0x00, 0x38, 0x35, 0x02, 0x00, 0x03, + 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x23, 0x01, 0x68, 0x00, 0x24, 0x01, 0x6a, 0x00, - 0x29, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x65, 0x00, 0x03, 0x00, 0x31, - 0x32, 0x37, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, - 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x00, 0x25, 0x01, 0x68, 0x00, 0x26, 0x01, 0x6a, - 0x00, 0x24, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x66, 0x00, 0x02, 0x00, - 0x64, 0x73, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, - 0xff, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x27, 0x01, 0x6a, 0x00, 0xe9, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x0c, 0x00, 0x47, 0x65, 0x6f, 0x6d, 0x54, 0x72, - 0x69, 0x73, 0x74, 0x72, 0x69, 0x70, 0x01, 0x76, 0x00, 0x04, 0x00, - 0x47, 0x65, 0x6f, 0x6d, 0x01, 0x75, 0x00, 0x09, 0x00, 0x64, 0x44, - 0x72, 0x61, 0x77, 0x61, 0x62, 0x6c, 0x65, 0x03, 0x03, 0x00, 0x23, - 0x00, 0x14, 0x00, 0x57, 0x72, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x62, 0x6c, - 0x65, 0x01, 0x21, 0x00, 0x74, 0x00, 0x67, 0x00, 0x01, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x3e, 0x6a, 0xad, 0x3d, 0x00, 0x00, 0x00, 0x00, - 0x7b, 0xd4, 0x04, 0xbd, 0x12, 0xa5, 0x5d, 0x3e, 0x00, 0x00, 0x00, - 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x3e, 0x6a, 0xad, 0x3d, 0x00, 0x00, - 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x12, 0xa5, 0x5d, 0x3e, 0x00, - 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0e, 0x86, 0xba, - 0x3d, 0xcd, 0xcd, 0x2f, 0x3f, 0x3c, 0x4d, 0xe6, 0x3d, 0xcd, 0xcd, - 0x2f, 0x3f, 0x0e, 0x86, 0xba, 0x3d, 0x0a, 0xa2, 0x4e, 0x3f, 0x3c, - 0x4d, 0xe6, 0x3d, 0x0a, 0xa2, 0x4e, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, - 0x01, 0x00, 0x04, 0x18, 0x00, 0x00, 0x00, 0xb9, 0x00, 0x68, 0x00, - 0x03, 0x00, 0x28, 0x01, 0x00, 0x00, 0x00, 0x00, 0x29, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x2a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, - 0x00, 0x00, 0x79, 0x00, 0x09, 0x00, 0x47, 0x65, 0x6f, 0x6d, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x01, 0x76, 0x00, 0x69, 0x00, 0x05, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x79, 0x75, 0x9e, 0x3e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, + 0x00, 0x02, 0x00, 0xd1, 0x00, 0x68, 0x00, 0xd2, 0x00, 0x6a, 0x00, + 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x3c, 0x00, 0x02, 0x00, 0x38, + 0x36, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xd3, 0x00, 0x68, 0x00, + 0xd4, 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x3d, + 0x00, 0x02, 0x00, 0x38, 0x37, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0xd5, 0x00, 0x68, 0x00, 0xd6, 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x3e, 0x00, 0x02, 0x00, 0x38, 0x38, 0x02, 0x00, + 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, + 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0xd7, 0x00, 0x68, 0x00, 0xd8, 0x00, 0x6a, + 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x3f, 0x00, 0x02, 0x00, + 0x38, 0x39, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, + 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xd9, 0x00, 0x68, + 0x00, 0xda, 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x40, 0x00, 0x02, 0x00, 0x39, 0x30, 0x02, 0x00, 0x03, 0x00, 0x04, + 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0xdb, 0x00, 0x68, 0x00, 0xdc, 0x00, 0x6a, 0x00, 0x2c, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x41, 0x00, 0x02, 0x00, 0x39, 0x31, 0x02, + 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x00, 0xdd, 0x00, 0x68, 0x00, 0xde, 0x00, + 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x42, 0x00, 0x02, + 0x00, 0x39, 0x32, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xdf, 0x00, + 0x68, 0x00, 0xe0, 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x43, 0x00, 0x02, 0x00, 0x39, 0x33, 0x02, 0x00, 0x03, 0x00, + 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, + 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0xe1, 0x00, 0x68, 0x00, 0xe2, 0x00, 0x6a, 0x00, 0x2c, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x44, 0x00, 0x02, 0x00, 0x39, 0x34, + 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xe3, 0x00, 0x68, 0x00, 0xe4, + 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x45, 0x00, + 0x02, 0x00, 0x39, 0x35, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xe5, + 0x00, 0x68, 0x00, 0xe6, 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x46, 0x00, 0x02, 0x00, 0x39, 0x36, 0x02, 0x00, 0x03, + 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0xe7, 0x00, 0x68, 0x00, 0xe8, 0x00, 0x6a, 0x00, + 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x47, 0x00, 0x02, 0x00, 0x39, + 0x37, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xe9, 0x00, 0x68, 0x00, + 0xea, 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x48, + 0x00, 0x02, 0x00, 0x39, 0x38, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0xeb, 0x00, 0x68, 0x00, 0xec, 0x00, 0x6a, 0x00, 0x2c, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x49, 0x00, 0x02, 0x00, 0x39, 0x39, 0x02, 0x00, + 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, + 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0xed, 0x00, 0x68, 0x00, 0xee, 0x00, 0x6a, + 0x00, 0x2d, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x4a, 0x00, 0x03, 0x00, + 0x31, 0x30, 0x30, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xef, 0x00, + 0x68, 0x00, 0xf0, 0x00, 0x6a, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x4b, 0x00, 0x03, 0x00, 0x31, 0x30, 0x31, 0x02, 0x00, 0x03, + 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0xf1, 0x00, 0x68, 0x00, 0xf2, 0x00, 0x6a, 0x00, + 0x2d, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x4c, 0x00, 0x03, 0x00, 0x31, + 0x30, 0x32, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, + 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xf3, 0x00, 0x68, + 0x00, 0xf4, 0x00, 0x6a, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x4d, 0x00, 0x03, 0x00, 0x31, 0x30, 0x33, 0x02, 0x00, 0x03, 0x00, + 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, + 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0xf5, 0x00, 0x68, 0x00, 0xf6, 0x00, 0x6a, 0x00, 0x2d, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x4e, 0x00, 0x03, 0x00, 0x31, 0x30, + 0x34, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xf7, 0x00, 0x68, 0x00, + 0xf8, 0x00, 0x6a, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x4f, + 0x00, 0x03, 0x00, 0x31, 0x30, 0x35, 0x02, 0x00, 0x03, 0x00, 0x04, + 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0xf9, 0x00, 0x68, 0x00, 0xfa, 0x00, 0x6a, 0x00, 0x2d, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x50, 0x00, 0x03, 0x00, 0x31, 0x30, 0x36, + 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xfb, 0x00, 0x68, 0x00, 0xfc, + 0x00, 0x6a, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x51, 0x00, + 0x03, 0x00, 0x31, 0x30, 0x37, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0xfd, 0x00, 0x68, 0x00, 0xfe, 0x00, 0x6a, 0x00, 0x2d, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x52, 0x00, 0x03, 0x00, 0x31, 0x30, 0x38, 0x02, + 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x00, 0xff, 0x00, 0x68, 0x00, 0x00, 0x01, + 0x6a, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x53, 0x00, 0x03, + 0x00, 0x31, 0x30, 0x39, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, + 0x01, 0x68, 0x00, 0x02, 0x01, 0x6a, 0x00, 0x2d, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x54, 0x00, 0x03, 0x00, 0x31, 0x31, 0x30, 0x02, 0x00, + 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, + 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x03, 0x01, 0x68, 0x00, 0x04, 0x01, 0x6a, + 0x00, 0x2d, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x55, 0x00, 0x03, 0x00, + 0x31, 0x31, 0x31, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x05, 0x01, + 0x68, 0x00, 0x06, 0x01, 0x6a, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x56, 0x00, 0x03, 0x00, 0x31, 0x31, 0x32, 0x02, 0x00, 0x03, + 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x07, 0x01, 0x68, 0x00, 0x08, 0x01, 0x6a, 0x00, + 0x2d, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x57, 0x00, 0x03, 0x00, 0x31, + 0x31, 0x33, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, + 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x09, 0x01, 0x68, + 0x00, 0x0a, 0x01, 0x6a, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x58, 0x00, 0x03, 0x00, 0x31, 0x31, 0x34, 0x02, 0x00, 0x03, 0x00, + 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, + 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x0b, 0x01, 0x68, 0x00, 0x0c, 0x01, 0x6a, 0x00, 0x2d, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x59, 0x00, 0x03, 0x00, 0x31, 0x31, + 0x35, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0d, 0x01, 0x68, 0x00, + 0x0e, 0x01, 0x6a, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x5a, + 0x00, 0x03, 0x00, 0x31, 0x31, 0x36, 0x02, 0x00, 0x03, 0x00, 0x04, + 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x0f, 0x01, 0x68, 0x00, 0x10, 0x01, 0x6a, 0x00, 0x2d, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x5b, 0x00, 0x03, 0x00, 0x31, 0x31, 0x37, + 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x11, 0x01, 0x68, 0x00, 0x12, + 0x01, 0x6a, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x5c, 0x00, + 0x03, 0x00, 0x31, 0x31, 0x38, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x13, 0x01, 0x68, 0x00, 0x14, 0x01, 0x6a, 0x00, 0x2d, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x5d, 0x00, 0x03, 0x00, 0x31, 0x31, 0x39, 0x02, + 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x15, 0x01, 0x68, 0x00, 0x16, 0x01, + 0x6a, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x5e, 0x00, 0x03, + 0x00, 0x31, 0x32, 0x30, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x17, + 0x01, 0x68, 0x00, 0x18, 0x01, 0x6a, 0x00, 0x2d, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x5f, 0x00, 0x03, 0x00, 0x31, 0x32, 0x31, 0x02, 0x00, + 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, + 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x19, 0x01, 0x68, 0x00, 0x1a, 0x01, 0x6a, + 0x00, 0x2d, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x60, 0x00, 0x03, 0x00, + 0x31, 0x32, 0x32, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x1b, 0x01, + 0x68, 0x00, 0x1c, 0x01, 0x6a, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x61, 0x00, 0x03, 0x00, 0x31, 0x32, 0x33, 0x02, 0x00, 0x03, + 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x1d, 0x01, 0x68, 0x00, 0x1e, 0x01, 0x6a, 0x00, + 0x2d, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x62, 0x00, 0x03, 0x00, 0x31, + 0x32, 0x34, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, + 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x1f, 0x01, 0x68, + 0x00, 0x20, 0x01, 0x6a, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x63, 0x00, 0x03, 0x00, 0x31, 0x32, 0x35, 0x02, 0x00, 0x03, 0x00, + 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, + 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x21, 0x01, 0x68, 0x00, 0x22, 0x01, 0x6a, 0x00, 0x2d, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x64, 0x00, 0x03, 0x00, 0x31, 0x32, + 0x36, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x23, 0x01, 0x68, 0x00, + 0x24, 0x01, 0x6a, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x65, + 0x00, 0x03, 0x00, 0x31, 0x32, 0x37, 0x02, 0x00, 0x03, 0x00, 0x04, + 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x25, 0x01, 0x68, 0x00, 0x26, 0x01, 0x6a, 0x00, 0x28, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x66, 0x00, 0x02, 0x00, 0x64, 0x73, 0x02, + 0x00, 0x03, 0x00, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x10, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x27, 0x01, 0x68, 0x00, 0x19, 0x00, + 0x00, 0x00, 0xd3, 0x00, 0x04, 0x00, 0x47, 0x65, 0x6f, 0x6d, 0x02, + 0x27, 0x00, 0x1d, 0x00, 0x67, 0x00, 0x28, 0x01, 0x01, 0x00, 0x29, + 0x01, 0x03, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x61, 0x00, + 0x68, 0x00, 0x01, 0x00, 0x2a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0xd3, 0x00, 0x69, 0x00, 0x2b, 0x01, 0x01, 0x00, + 0x2c, 0x01, 0x01, 0x00, 0x00, 0x04, 0x12, 0x00, 0x00, 0x00, 0x61, + 0x00, 0x6a, 0x00, 0x02, 0x00, 0x2d, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x2e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, + 0x00, 0x6b, 0x00, 0x2f, 0x01, 0x01, 0x00, 0x30, 0x01, 0x03, 0x00, + 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x6c, 0x00, 0x31, + 0x01, 0x01, 0x00, 0x32, 0x01, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, + 0x00, 0x00, 0xd3, 0x00, 0x6d, 0x00, 0x33, 0x01, 0x01, 0x00, 0x34, + 0x01, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, + 0x6e, 0x00, 0x35, 0x01, 0x01, 0x00, 0x36, 0x01, 0x01, 0x00, 0x00, + 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x6f, 0x00, 0x37, 0x01, + 0x01, 0x00, 0x38, 0x01, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0xd3, 0x00, 0x70, 0x00, 0x39, 0x01, 0x01, 0x00, 0x3a, 0x01, + 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x71, + 0x00, 0x3b, 0x01, 0x01, 0x00, 0x3c, 0x01, 0x03, 0x00, 0x02, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x72, 0x00, 0x3d, 0x01, 0x01, + 0x00, 0x3e, 0x01, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, + 0xd3, 0x00, 0x73, 0x00, 0x3f, 0x01, 0x01, 0x00, 0x40, 0x01, 0x03, + 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x74, 0x00, + 0x41, 0x01, 0x01, 0x00, 0x42, 0x01, 0x01, 0x00, 0x00, 0x04, 0x0e, + 0x00, 0x00, 0x00, 0xd3, 0x00, 0x75, 0x00, 0x43, 0x01, 0x01, 0x00, + 0x44, 0x01, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, + 0x00, 0x76, 0x00, 0x45, 0x01, 0x01, 0x00, 0x46, 0x01, 0x01, 0x00, + 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x77, 0x00, 0x47, + 0x01, 0x01, 0x00, 0x48, 0x01, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, + 0x00, 0x00, 0xd3, 0x00, 0x78, 0x00, 0x49, 0x01, 0x01, 0x00, 0x4a, + 0x01, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, + 0x79, 0x00, 0x4b, 0x01, 0x01, 0x00, 0x4c, 0x01, 0x03, 0x00, 0x02, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x7a, 0x00, 0x4d, 0x01, + 0x01, 0x00, 0x4e, 0x01, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, + 0x00, 0xd3, 0x00, 0x7b, 0x00, 0x4f, 0x01, 0x01, 0x00, 0x50, 0x01, + 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x7c, + 0x00, 0x51, 0x01, 0x01, 0x00, 0x52, 0x01, 0x01, 0x00, 0x00, 0x04, + 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x7d, 0x00, 0x53, 0x01, 0x01, + 0x00, 0x54, 0x01, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0xd3, 0x00, 0x7e, 0x00, 0x55, 0x01, 0x01, 0x00, 0x56, 0x01, 0x01, + 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x7f, 0x00, + 0x57, 0x01, 0x01, 0x00, 0x58, 0x01, 0x03, 0x00, 0x02, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0xd3, 0x00, 0x80, 0x00, 0x59, 0x01, 0x01, 0x00, + 0x5a, 0x01, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, + 0x00, 0x81, 0x00, 0x5b, 0x01, 0x01, 0x00, 0x5c, 0x01, 0x03, 0x00, + 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x82, 0x00, 0x5d, + 0x01, 0x01, 0x00, 0x5e, 0x01, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, + 0x00, 0x00, 0xd3, 0x00, 0x83, 0x00, 0x5f, 0x01, 0x01, 0x00, 0x60, + 0x01, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, + 0x84, 0x00, 0x61, 0x01, 0x01, 0x00, 0x62, 0x01, 0x01, 0x00, 0x00, + 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x85, 0x00, 0x63, 0x01, + 0x01, 0x00, 0x64, 0x01, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0xd3, 0x00, 0x86, 0x00, 0x65, 0x01, 0x01, 0x00, 0x66, 0x01, + 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x87, + 0x00, 0x67, 0x01, 0x01, 0x00, 0x68, 0x01, 0x03, 0x00, 0x02, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x88, 0x00, 0x69, 0x01, 0x01, + 0x00, 0x6a, 0x01, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, + 0xd3, 0x00, 0x89, 0x00, 0x6b, 0x01, 0x01, 0x00, 0x6c, 0x01, 0x03, + 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x8a, 0x00, + 0x6d, 0x01, 0x01, 0x00, 0x6e, 0x01, 0x01, 0x00, 0x00, 0x04, 0x0e, + 0x00, 0x00, 0x00, 0xd3, 0x00, 0x8b, 0x00, 0x6f, 0x01, 0x01, 0x00, + 0x70, 0x01, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, + 0x00, 0x8c, 0x00, 0x71, 0x01, 0x01, 0x00, 0x72, 0x01, 0x01, 0x00, + 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x8d, 0x00, 0x73, + 0x01, 0x01, 0x00, 0x74, 0x01, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, + 0x00, 0x00, 0xd3, 0x00, 0x8e, 0x00, 0x75, 0x01, 0x01, 0x00, 0x76, + 0x01, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, + 0x8f, 0x00, 0x77, 0x01, 0x01, 0x00, 0x78, 0x01, 0x03, 0x00, 0x02, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x90, 0x00, 0x79, 0x01, + 0x01, 0x00, 0x7a, 0x01, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, + 0x00, 0xd3, 0x00, 0x91, 0x00, 0x7b, 0x01, 0x01, 0x00, 0x7c, 0x01, + 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x92, + 0x00, 0x7d, 0x01, 0x01, 0x00, 0x7e, 0x01, 0x01, 0x00, 0x00, 0x04, + 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x93, 0x00, 0x7f, 0x01, 0x01, + 0x00, 0x80, 0x01, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0xd3, 0x00, 0x94, 0x00, 0x81, 0x01, 0x01, 0x00, 0x82, 0x01, 0x01, + 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x95, 0x00, + 0x83, 0x01, 0x01, 0x00, 0x84, 0x01, 0x03, 0x00, 0x02, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0xd3, 0x00, 0x96, 0x00, 0x85, 0x01, 0x01, 0x00, + 0x86, 0x01, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, + 0x00, 0x97, 0x00, 0x87, 0x01, 0x01, 0x00, 0x88, 0x01, 0x03, 0x00, + 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x98, 0x00, 0x89, + 0x01, 0x01, 0x00, 0x8a, 0x01, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, + 0x00, 0x00, 0xd3, 0x00, 0x99, 0x00, 0x8b, 0x01, 0x01, 0x00, 0x8c, + 0x01, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, + 0x9a, 0x00, 0x8d, 0x01, 0x01, 0x00, 0x8e, 0x01, 0x01, 0x00, 0x00, + 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x9b, 0x00, 0x8f, 0x01, + 0x01, 0x00, 0x90, 0x01, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0xd3, 0x00, 0x9c, 0x00, 0x91, 0x01, 0x01, 0x00, 0x92, 0x01, + 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x9d, + 0x00, 0x93, 0x01, 0x01, 0x00, 0x94, 0x01, 0x03, 0x00, 0x02, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x9e, 0x00, 0x95, 0x01, 0x01, + 0x00, 0x96, 0x01, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, + 0xd3, 0x00, 0x9f, 0x00, 0x97, 0x01, 0x01, 0x00, 0x98, 0x01, 0x03, + 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xa0, 0x00, + 0x99, 0x01, 0x01, 0x00, 0x9a, 0x01, 0x01, 0x00, 0x00, 0x04, 0x0e, + 0x00, 0x00, 0x00, 0xd3, 0x00, 0xa1, 0x00, 0x9b, 0x01, 0x01, 0x00, + 0x9c, 0x01, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, + 0x00, 0xa2, 0x00, 0x9d, 0x01, 0x01, 0x00, 0x9e, 0x01, 0x01, 0x00, + 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xa3, 0x00, 0x9f, + 0x01, 0x01, 0x00, 0xa0, 0x01, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, + 0x00, 0x00, 0xd3, 0x00, 0xa4, 0x00, 0xa1, 0x01, 0x01, 0x00, 0xa2, + 0x01, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, + 0xa5, 0x00, 0xa3, 0x01, 0x01, 0x00, 0xa4, 0x01, 0x03, 0x00, 0x02, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xa6, 0x00, 0xa5, 0x01, + 0x01, 0x00, 0xa6, 0x01, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, + 0x00, 0xd3, 0x00, 0xa7, 0x00, 0xa7, 0x01, 0x01, 0x00, 0xa8, 0x01, + 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xa8, + 0x00, 0xa9, 0x01, 0x01, 0x00, 0xaa, 0x01, 0x01, 0x00, 0x00, 0x04, + 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xa9, 0x00, 0xab, 0x01, 0x01, + 0x00, 0xac, 0x01, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0xd3, 0x00, 0xaa, 0x00, 0xad, 0x01, 0x01, 0x00, 0xae, 0x01, 0x01, + 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xab, 0x00, + 0xaf, 0x01, 0x01, 0x00, 0xb0, 0x01, 0x03, 0x00, 0x02, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0xd3, 0x00, 0xac, 0x00, 0xb1, 0x01, 0x01, 0x00, + 0xb2, 0x01, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, + 0x00, 0xad, 0x00, 0xb3, 0x01, 0x01, 0x00, 0xb4, 0x01, 0x03, 0x00, + 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xae, 0x00, 0xb5, + 0x01, 0x01, 0x00, 0xb6, 0x01, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, + 0x00, 0x00, 0xd3, 0x00, 0xaf, 0x00, 0xb7, 0x01, 0x01, 0x00, 0xb8, + 0x01, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, + 0xb0, 0x00, 0xb9, 0x01, 0x01, 0x00, 0xba, 0x01, 0x01, 0x00, 0x00, + 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xb1, 0x00, 0xbb, 0x01, + 0x01, 0x00, 0xbc, 0x01, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0xd3, 0x00, 0xb2, 0x00, 0xbd, 0x01, 0x01, 0x00, 0xbe, 0x01, + 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xb3, + 0x00, 0xbf, 0x01, 0x01, 0x00, 0xc0, 0x01, 0x03, 0x00, 0x02, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xb4, 0x00, 0xc1, 0x01, 0x01, + 0x00, 0xc2, 0x01, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, + 0xd3, 0x00, 0xb5, 0x00, 0xc3, 0x01, 0x01, 0x00, 0xc4, 0x01, 0x03, + 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xb6, 0x00, + 0xc5, 0x01, 0x01, 0x00, 0xc6, 0x01, 0x01, 0x00, 0x00, 0x04, 0x0e, + 0x00, 0x00, 0x00, 0xd3, 0x00, 0xb7, 0x00, 0xc7, 0x01, 0x01, 0x00, + 0xc8, 0x01, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, + 0x00, 0xb8, 0x00, 0xc9, 0x01, 0x01, 0x00, 0xca, 0x01, 0x01, 0x00, + 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xb9, 0x00, 0xcb, + 0x01, 0x01, 0x00, 0xcc, 0x01, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, + 0x00, 0x00, 0xd3, 0x00, 0xba, 0x00, 0xcd, 0x01, 0x01, 0x00, 0xce, + 0x01, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, + 0xbb, 0x00, 0xcf, 0x01, 0x01, 0x00, 0xd0, 0x01, 0x03, 0x00, 0x02, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xbc, 0x00, 0xd1, 0x01, + 0x01, 0x00, 0xd2, 0x01, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, + 0x00, 0xd3, 0x00, 0xbd, 0x00, 0xd3, 0x01, 0x01, 0x00, 0xd4, 0x01, + 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xbe, + 0x00, 0xd5, 0x01, 0x01, 0x00, 0xd6, 0x01, 0x01, 0x00, 0x00, 0x04, + 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xbf, 0x00, 0xd7, 0x01, 0x01, + 0x00, 0xd8, 0x01, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0xd3, 0x00, 0xc0, 0x00, 0xd9, 0x01, 0x01, 0x00, 0xda, 0x01, 0x01, + 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xc1, 0x00, + 0xdb, 0x01, 0x01, 0x00, 0xdc, 0x01, 0x03, 0x00, 0x02, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0xd3, 0x00, 0xc2, 0x00, 0xdd, 0x01, 0x01, 0x00, + 0xde, 0x01, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, + 0x00, 0xc3, 0x00, 0xdf, 0x01, 0x01, 0x00, 0xe0, 0x01, 0x03, 0x00, + 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xc4, 0x00, 0xe1, + 0x01, 0x01, 0x00, 0xe2, 0x01, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, + 0x00, 0x00, 0xd3, 0x00, 0xc5, 0x00, 0xe3, 0x01, 0x01, 0x00, 0xe4, + 0x01, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, + 0xc6, 0x00, 0xe5, 0x01, 0x01, 0x00, 0xe6, 0x01, 0x01, 0x00, 0x00, + 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xc7, 0x00, 0xe7, 0x01, + 0x01, 0x00, 0xe8, 0x01, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0xd3, 0x00, 0xc8, 0x00, 0xe9, 0x01, 0x01, 0x00, 0xea, 0x01, + 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xc9, + 0x00, 0xeb, 0x01, 0x01, 0x00, 0xec, 0x01, 0x03, 0x00, 0x02, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xca, 0x00, 0xed, 0x01, 0x01, + 0x00, 0xee, 0x01, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, + 0xd3, 0x00, 0xcb, 0x00, 0xef, 0x01, 0x01, 0x00, 0xf0, 0x01, 0x03, + 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xcc, 0x00, + 0xf1, 0x01, 0x01, 0x00, 0xf2, 0x01, 0x01, 0x00, 0x00, 0x04, 0x0e, + 0x00, 0x00, 0x00, 0xd3, 0x00, 0xcd, 0x00, 0xf3, 0x01, 0x01, 0x00, + 0xf4, 0x01, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, + 0x00, 0xce, 0x00, 0xf5, 0x01, 0x01, 0x00, 0xf6, 0x01, 0x01, 0x00, + 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xcf, 0x00, 0xf7, + 0x01, 0x01, 0x00, 0xf8, 0x01, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, + 0x00, 0x00, 0xd3, 0x00, 0xd0, 0x00, 0xf9, 0x01, 0x01, 0x00, 0xfa, + 0x01, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, + 0xd1, 0x00, 0xfb, 0x01, 0x01, 0x00, 0xfc, 0x01, 0x03, 0x00, 0x02, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xd2, 0x00, 0xfd, 0x01, + 0x01, 0x00, 0xfe, 0x01, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, + 0x00, 0xd3, 0x00, 0xd3, 0x00, 0xff, 0x01, 0x01, 0x00, 0x00, 0x02, + 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xd4, + 0x00, 0x01, 0x02, 0x01, 0x00, 0x02, 0x02, 0x01, 0x00, 0x00, 0x04, + 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xd5, 0x00, 0x03, 0x02, 0x01, + 0x00, 0x04, 0x02, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0xd3, 0x00, 0xd6, 0x00, 0x05, 0x02, 0x01, 0x00, 0x06, 0x02, 0x01, + 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xd7, 0x00, + 0x07, 0x02, 0x01, 0x00, 0x08, 0x02, 0x03, 0x00, 0x02, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0xd3, 0x00, 0xd8, 0x00, 0x09, 0x02, 0x01, 0x00, + 0x0a, 0x02, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, + 0x00, 0xd9, 0x00, 0x0b, 0x02, 0x01, 0x00, 0x0c, 0x02, 0x03, 0x00, + 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xda, 0x00, 0x0d, + 0x02, 0x01, 0x00, 0x0e, 0x02, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, + 0x00, 0x00, 0xd3, 0x00, 0xdb, 0x00, 0x0f, 0x02, 0x01, 0x00, 0x10, + 0x02, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, + 0xdc, 0x00, 0x11, 0x02, 0x01, 0x00, 0x12, 0x02, 0x01, 0x00, 0x00, + 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xdd, 0x00, 0x13, 0x02, + 0x01, 0x00, 0x14, 0x02, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0xd3, 0x00, 0xde, 0x00, 0x15, 0x02, 0x01, 0x00, 0x16, 0x02, + 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xdf, + 0x00, 0x17, 0x02, 0x01, 0x00, 0x18, 0x02, 0x03, 0x00, 0x02, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xe0, 0x00, 0x19, 0x02, 0x01, + 0x00, 0x1a, 0x02, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, + 0xd3, 0x00, 0xe1, 0x00, 0x1b, 0x02, 0x01, 0x00, 0x1c, 0x02, 0x03, + 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xe2, 0x00, + 0x1d, 0x02, 0x01, 0x00, 0x1e, 0x02, 0x01, 0x00, 0x00, 0x04, 0x0e, + 0x00, 0x00, 0x00, 0xd3, 0x00, 0xe3, 0x00, 0x1f, 0x02, 0x01, 0x00, + 0x20, 0x02, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, + 0x00, 0xe4, 0x00, 0x21, 0x02, 0x01, 0x00, 0x22, 0x02, 0x01, 0x00, + 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xe5, 0x00, 0x23, + 0x02, 0x01, 0x00, 0x24, 0x02, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, + 0x00, 0x00, 0xd3, 0x00, 0xe6, 0x00, 0x25, 0x02, 0x01, 0x00, 0x26, + 0x02, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, + 0xe7, 0x00, 0x27, 0x02, 0x01, 0x00, 0x28, 0x02, 0x03, 0x00, 0x02, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xe8, 0x00, 0x29, 0x02, + 0x01, 0x00, 0x2a, 0x02, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, + 0x00, 0xd3, 0x00, 0xe9, 0x00, 0x2b, 0x02, 0x01, 0x00, 0x2c, 0x02, + 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xea, + 0x00, 0x2d, 0x02, 0x01, 0x00, 0x2e, 0x02, 0x01, 0x00, 0x00, 0x04, + 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xeb, 0x00, 0x2f, 0x02, 0x01, + 0x00, 0x30, 0x02, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0xd3, 0x00, 0xec, 0x00, 0x31, 0x02, 0x01, 0x00, 0x32, 0x02, 0x01, + 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xed, 0x00, + 0x33, 0x02, 0x01, 0x00, 0x34, 0x02, 0x03, 0x00, 0x02, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0xd3, 0x00, 0xee, 0x00, 0x35, 0x02, 0x01, 0x00, + 0x36, 0x02, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, + 0x00, 0xef, 0x00, 0x37, 0x02, 0x01, 0x00, 0x38, 0x02, 0x03, 0x00, + 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xf0, 0x00, 0x39, + 0x02, 0x01, 0x00, 0x3a, 0x02, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, + 0x00, 0x00, 0xd3, 0x00, 0xf1, 0x00, 0x3b, 0x02, 0x01, 0x00, 0x3c, + 0x02, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, + 0xf2, 0x00, 0x3d, 0x02, 0x01, 0x00, 0x3e, 0x02, 0x01, 0x00, 0x00, + 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xf3, 0x00, 0x3f, 0x02, + 0x01, 0x00, 0x40, 0x02, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0xd3, 0x00, 0xf4, 0x00, 0x41, 0x02, 0x01, 0x00, 0x42, 0x02, + 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xf5, + 0x00, 0x43, 0x02, 0x01, 0x00, 0x44, 0x02, 0x03, 0x00, 0x02, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xf6, 0x00, 0x45, 0x02, 0x01, + 0x00, 0x46, 0x02, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, + 0xd3, 0x00, 0xf7, 0x00, 0x47, 0x02, 0x01, 0x00, 0x48, 0x02, 0x03, + 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xf8, 0x00, + 0x49, 0x02, 0x01, 0x00, 0x4a, 0x02, 0x01, 0x00, 0x00, 0x04, 0x0e, + 0x00, 0x00, 0x00, 0xd3, 0x00, 0xf9, 0x00, 0x4b, 0x02, 0x01, 0x00, + 0x4c, 0x02, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, + 0x00, 0xfa, 0x00, 0x4d, 0x02, 0x01, 0x00, 0x4e, 0x02, 0x01, 0x00, + 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xfb, 0x00, 0x4f, + 0x02, 0x01, 0x00, 0x50, 0x02, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, + 0x00, 0x00, 0xd3, 0x00, 0xfc, 0x00, 0x51, 0x02, 0x01, 0x00, 0x52, + 0x02, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, + 0xfd, 0x00, 0x53, 0x02, 0x01, 0x00, 0x54, 0x02, 0x03, 0x00, 0x02, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0xfe, 0x00, 0x55, 0x02, + 0x01, 0x00, 0x56, 0x02, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, + 0x00, 0xd3, 0x00, 0xff, 0x00, 0x57, 0x02, 0x01, 0x00, 0x58, 0x02, + 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x00, + 0x01, 0x59, 0x02, 0x01, 0x00, 0x5a, 0x02, 0x01, 0x00, 0x00, 0x04, + 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x01, 0x01, 0x5b, 0x02, 0x01, + 0x00, 0x5c, 0x02, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0xd3, 0x00, 0x02, 0x01, 0x5d, 0x02, 0x01, 0x00, 0x5e, 0x02, 0x01, + 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x03, 0x01, + 0x5f, 0x02, 0x01, 0x00, 0x60, 0x02, 0x03, 0x00, 0x02, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0xd3, 0x00, 0x04, 0x01, 0x61, 0x02, 0x01, 0x00, + 0x62, 0x02, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, + 0x00, 0x05, 0x01, 0x63, 0x02, 0x01, 0x00, 0x64, 0x02, 0x03, 0x00, + 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x06, 0x01, 0x65, + 0x02, 0x01, 0x00, 0x66, 0x02, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, + 0x00, 0x00, 0xd3, 0x00, 0x07, 0x01, 0x67, 0x02, 0x01, 0x00, 0x68, + 0x02, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, + 0x08, 0x01, 0x69, 0x02, 0x01, 0x00, 0x6a, 0x02, 0x01, 0x00, 0x00, + 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x09, 0x01, 0x6b, 0x02, + 0x01, 0x00, 0x6c, 0x02, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0xd3, 0x00, 0x0a, 0x01, 0x6d, 0x02, 0x01, 0x00, 0x6e, 0x02, + 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x0b, + 0x01, 0x6f, 0x02, 0x01, 0x00, 0x70, 0x02, 0x03, 0x00, 0x02, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x0c, 0x01, 0x71, 0x02, 0x01, + 0x00, 0x72, 0x02, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, + 0xd3, 0x00, 0x0d, 0x01, 0x73, 0x02, 0x01, 0x00, 0x74, 0x02, 0x03, + 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x0e, 0x01, + 0x75, 0x02, 0x01, 0x00, 0x76, 0x02, 0x01, 0x00, 0x00, 0x04, 0x0e, + 0x00, 0x00, 0x00, 0xd3, 0x00, 0x0f, 0x01, 0x77, 0x02, 0x01, 0x00, + 0x78, 0x02, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, + 0x00, 0x10, 0x01, 0x79, 0x02, 0x01, 0x00, 0x7a, 0x02, 0x01, 0x00, + 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x11, 0x01, 0x7b, + 0x02, 0x01, 0x00, 0x7c, 0x02, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, + 0x00, 0x00, 0xd3, 0x00, 0x12, 0x01, 0x7d, 0x02, 0x01, 0x00, 0x7e, + 0x02, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, + 0x13, 0x01, 0x7f, 0x02, 0x01, 0x00, 0x80, 0x02, 0x03, 0x00, 0x02, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x14, 0x01, 0x81, 0x02, + 0x01, 0x00, 0x82, 0x02, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, + 0x00, 0xd3, 0x00, 0x15, 0x01, 0x83, 0x02, 0x01, 0x00, 0x84, 0x02, + 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x16, + 0x01, 0x85, 0x02, 0x01, 0x00, 0x86, 0x02, 0x01, 0x00, 0x00, 0x04, + 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x17, 0x01, 0x87, 0x02, 0x01, + 0x00, 0x88, 0x02, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0xd3, 0x00, 0x18, 0x01, 0x89, 0x02, 0x01, 0x00, 0x8a, 0x02, 0x01, + 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x19, 0x01, + 0x8b, 0x02, 0x01, 0x00, 0x8c, 0x02, 0x03, 0x00, 0x02, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0xd3, 0x00, 0x1a, 0x01, 0x8d, 0x02, 0x01, 0x00, + 0x8e, 0x02, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, + 0x00, 0x1b, 0x01, 0x8f, 0x02, 0x01, 0x00, 0x90, 0x02, 0x03, 0x00, + 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x1c, 0x01, 0x91, + 0x02, 0x01, 0x00, 0x92, 0x02, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, + 0x00, 0x00, 0xd3, 0x00, 0x1d, 0x01, 0x93, 0x02, 0x01, 0x00, 0x94, + 0x02, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, + 0x1e, 0x01, 0x95, 0x02, 0x01, 0x00, 0x96, 0x02, 0x01, 0x00, 0x00, + 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x1f, 0x01, 0x97, 0x02, + 0x01, 0x00, 0x98, 0x02, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0xd3, 0x00, 0x20, 0x01, 0x99, 0x02, 0x01, 0x00, 0x9a, 0x02, + 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x21, + 0x01, 0x9b, 0x02, 0x01, 0x00, 0x9c, 0x02, 0x03, 0x00, 0x02, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x22, 0x01, 0x9d, 0x02, 0x01, + 0x00, 0x9e, 0x02, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, + 0xd3, 0x00, 0x23, 0x01, 0x9f, 0x02, 0x01, 0x00, 0xa0, 0x02, 0x03, + 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x24, 0x01, + 0xa1, 0x02, 0x01, 0x00, 0xa2, 0x02, 0x01, 0x00, 0x00, 0x04, 0x0e, + 0x00, 0x00, 0x00, 0xd3, 0x00, 0x25, 0x01, 0xa3, 0x02, 0x01, 0x00, + 0xa4, 0x02, 0x03, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd3, + 0x00, 0x26, 0x01, 0xa5, 0x02, 0x01, 0x00, 0xa6, 0x02, 0x01, 0x00, + 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x27, 0x01, 0xa7, + 0x02, 0x01, 0x00, 0xa8, 0x02, 0x03, 0x00, 0x02, 0x00, 0x2c, 0x00, + 0x00, 0x00, 0xdd, 0x00, 0x0e, 0x00, 0x47, 0x65, 0x6f, 0x6d, 0x56, + 0x65, 0x72, 0x74, 0x65, 0x78, 0x44, 0x61, 0x74, 0x61, 0x01, 0x27, + 0x00, 0x28, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, + 0xa9, 0x02, 0x03, 0x01, 0x00, 0xaa, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0xda, 0x00, 0x0a, 0x00, 0x47, + 0x65, 0x6f, 0x6d, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x01, 0xd4, + 0x00, 0x0d, 0x00, 0x47, 0x65, 0x6f, 0x6d, 0x50, 0x72, 0x69, 0x6d, + 0x69, 0x74, 0x69, 0x76, 0x65, 0x01, 0x27, 0x00, 0x29, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, + 0x6d, 0x00, 0x0d, 0x00, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x01, 0x28, 0x00, 0x0c, 0x00, + 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x01, 0x27, 0x00, 0x2a, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x2b, 0x01, 0x06, 0x00, 0x63, + 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0xac, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, + 0xd6, 0x00, 0x0d, 0x00, 0x47, 0x65, 0x6f, 0x6d, 0x54, 0x72, 0x69, + 0x73, 0x74, 0x72, 0x69, 0x70, 0x73, 0x01, 0xd4, 0x00, 0x2c, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, + 0xad, 0x02, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x0d, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x2d, 0x01, 0x00, 0x00, + 0x00, 0x01, 0x00, 0xae, 0x02, 0xaf, 0x02, 0x1c, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x12, 0x00, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x63, 0x79, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x01, 0x28, 0x00, 0x2e, 0x01, 0x01, 0x19, 0x00, 0x00, 0x00, 0xdd, + 0x00, 0x2f, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, + 0xa9, 0x02, 0x03, 0x01, 0x00, 0xb0, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x30, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xdd, 0x00, 0x31, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, + 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0xb1, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x32, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, + 0xb2, 0x02, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x33, 0x01, 0x06, 0x00, + 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, + 0xb3, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, + 0x00, 0xda, 0x00, 0x34, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x35, 0x01, 0x06, + 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, + 0x00, 0xb4, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, + 0x00, 0x00, 0xd6, 0x00, 0x36, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0xb5, 0x02, 0x03, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xdd, 0x00, 0x37, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, + 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0xb6, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x38, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, + 0x00, 0xdd, 0x00, 0x39, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, + 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0xb7, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x3a, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, + 0x03, 0xb8, 0x02, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x3b, 0x01, 0x06, + 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, + 0x00, 0xb9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, + 0x00, 0x00, 0xda, 0x00, 0x3c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x3d, 0x01, + 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, + 0x01, 0x00, 0xba, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, + 0x00, 0x00, 0x00, 0xd6, 0x00, 0x3e, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0xbb, 0x02, 0x05, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, + 0x00, 0xdd, 0x00, 0x3f, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, + 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0xbc, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x40, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, + 0x00, 0x00, 0xdd, 0x00, 0x41, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, + 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0xbd, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, + 0x42, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x03, 0xbe, 0x02, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x43, 0x01, + 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, + 0x01, 0x00, 0xbf, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, + 0x00, 0x00, 0x00, 0xda, 0x00, 0x44, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x45, + 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, + 0x03, 0x01, 0x00, 0xc0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x46, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0xc1, 0x02, 0x07, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, + 0x00, 0x00, 0xdd, 0x00, 0x47, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, + 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0xc2, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, + 0x48, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, + 0x00, 0x00, 0x00, 0xdd, 0x00, 0x49, 0x01, 0x06, 0x00, 0x63, 0x6d, + 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0xc3, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, + 0x00, 0x4a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x01, 0x03, 0xc4, 0x02, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x4b, + 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, + 0x03, 0x01, 0x00, 0xc5, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x4c, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, + 0x4d, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, + 0x02, 0x03, 0x01, 0x00, 0xc6, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x4e, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0xc7, 0x02, + 0x09, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, + 0x00, 0x00, 0x00, 0xdd, 0x00, 0x4f, 0x01, 0x06, 0x00, 0x63, 0x6d, + 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0xc8, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, + 0x00, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x51, 0x01, 0x06, 0x00, 0x63, + 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0xc9, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xd6, 0x00, 0x52, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x01, 0x03, 0xca, 0x02, 0x0a, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, + 0x53, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, + 0x02, 0x03, 0x01, 0x00, 0xcb, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x54, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, + 0x00, 0x55, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, + 0xab, 0x02, 0x03, 0x01, 0x00, 0xcc, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x56, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0xcd, + 0x02, 0x0b, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x57, 0x01, 0x06, 0x00, 0x63, + 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0xce, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0xda, 0x00, 0x58, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x59, 0x01, 0x06, 0x00, + 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, + 0xcf, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, + 0x00, 0xd6, 0x00, 0x5a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x01, 0x03, 0xd0, 0x02, 0x0c, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, + 0x00, 0x5b, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, + 0xa9, 0x02, 0x03, 0x01, 0x00, 0xd1, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x5c, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xdd, 0x00, 0x5d, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, + 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0xd2, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x5e, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, + 0xd3, 0x02, 0x0d, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x5f, 0x01, 0x06, 0x00, + 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, + 0xd4, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, + 0x00, 0xda, 0x00, 0x60, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x61, 0x01, 0x06, + 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, + 0x00, 0xd5, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, + 0x00, 0x00, 0xd6, 0x00, 0x62, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0xd6, 0x02, 0x0e, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xdd, 0x00, 0x63, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, + 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0xd7, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x64, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, + 0x00, 0xdd, 0x00, 0x65, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, + 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0xd8, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x66, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, + 0x03, 0xd9, 0x02, 0x0f, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x67, 0x01, 0x06, + 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, + 0x00, 0xda, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, + 0x00, 0x00, 0xda, 0x00, 0x68, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x69, 0x01, + 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, + 0x01, 0x00, 0xdb, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, + 0x00, 0x00, 0x00, 0xd6, 0x00, 0x6a, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0xdc, 0x02, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, + 0x00, 0xdd, 0x00, 0x6b, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, + 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0xdd, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x6c, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, + 0x00, 0x00, 0xdd, 0x00, 0x6d, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, + 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0xde, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, + 0x6e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x03, 0xdf, 0x02, 0x11, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x6f, 0x01, + 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, + 0x01, 0x00, 0xe0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, + 0x00, 0x00, 0x00, 0xda, 0x00, 0x70, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x71, + 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, + 0x03, 0x01, 0x00, 0xe1, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x72, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0xe2, 0x02, 0x12, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, + 0x00, 0x00, 0xdd, 0x00, 0x73, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, + 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0xe3, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, + 0x74, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, + 0x00, 0x00, 0x00, 0xdd, 0x00, 0x75, 0x01, 0x06, 0x00, 0x63, 0x6d, + 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0xe4, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, + 0x00, 0x76, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x01, 0x03, 0xe5, 0x02, 0x13, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x77, + 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, + 0x03, 0x01, 0x00, 0xe6, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x78, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, + 0x79, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, + 0x02, 0x03, 0x01, 0x00, 0xe7, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x7a, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0xe8, 0x02, + 0x14, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, + 0x00, 0x00, 0x00, 0xdd, 0x00, 0x7b, 0x01, 0x06, 0x00, 0x63, 0x6d, + 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0xe9, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, + 0x00, 0x7c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x7d, 0x01, 0x06, 0x00, 0x63, + 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0xea, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xd6, 0x00, 0x7e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x01, 0x03, 0xeb, 0x02, 0x15, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, + 0x7f, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, + 0x02, 0x03, 0x01, 0x00, 0xec, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x80, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, + 0x00, 0x81, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, + 0xab, 0x02, 0x03, 0x01, 0x00, 0xed, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x82, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0xee, + 0x02, 0x16, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x83, 0x01, 0x06, 0x00, 0x63, + 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0xef, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0xda, 0x00, 0x84, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x85, 0x01, 0x06, 0x00, + 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, + 0xf0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, + 0x00, 0xd6, 0x00, 0x86, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x01, 0x03, 0xf1, 0x02, 0x17, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, + 0x00, 0x87, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, + 0xa9, 0x02, 0x03, 0x01, 0x00, 0xf2, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x88, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xdd, 0x00, 0x89, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, + 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0xf3, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x8a, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, + 0xf4, 0x02, 0x18, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x8b, 0x01, 0x06, 0x00, + 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, + 0xf5, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, + 0x00, 0xda, 0x00, 0x8c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x8d, 0x01, 0x06, + 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, + 0x00, 0xf6, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, + 0x00, 0x00, 0xd6, 0x00, 0x8e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0xf7, 0x02, 0x19, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xdd, 0x00, 0x8f, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, + 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0xf8, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x90, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, + 0x00, 0xdd, 0x00, 0x91, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, + 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0xf9, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x92, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, + 0x03, 0xfa, 0x02, 0x1a, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x93, 0x01, 0x06, + 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, + 0x00, 0xfb, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, + 0x00, 0x00, 0xda, 0x00, 0x94, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x95, 0x01, + 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, + 0x01, 0x00, 0xfc, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, + 0x00, 0x00, 0x00, 0xd6, 0x00, 0x96, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0xfd, 0x02, 0x1b, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, + 0x00, 0xdd, 0x00, 0x97, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, + 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0xfe, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x98, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, + 0x00, 0x00, 0xdd, 0x00, 0x99, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, + 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0xff, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, + 0x9a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x03, 0x1c, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x9b, 0x01, + 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, + 0x01, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, + 0x00, 0x00, 0x00, 0xda, 0x00, 0x9c, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x9d, + 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, + 0x03, 0x01, 0x00, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x9e, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x1d, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, + 0x00, 0x00, 0xdd, 0x00, 0x9f, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, + 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0x04, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, + 0xa0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, + 0x00, 0x00, 0x00, 0xdd, 0x00, 0xa1, 0x01, 0x06, 0x00, 0x63, 0x6d, + 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0x05, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, + 0x00, 0xa2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x01, 0x03, 0x06, 0x03, 0x1e, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0xa3, + 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, + 0x03, 0x01, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0xa4, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, + 0xa5, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, + 0x02, 0x03, 0x01, 0x00, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0xa6, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0x09, 0x03, + 0x1f, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, + 0x00, 0x00, 0x00, 0xdd, 0x00, 0xa7, 0x01, 0x06, 0x00, 0x63, 0x6d, + 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0x0a, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, + 0x00, 0xa8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0xa9, 0x01, 0x06, 0x00, 0x63, + 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0x0b, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xd6, 0x00, 0xaa, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x01, 0x03, 0x0c, 0x03, 0x20, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, + 0xab, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, + 0x02, 0x03, 0x01, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0xac, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, + 0x00, 0xad, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, + 0xab, 0x02, 0x03, 0x01, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0xae, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0x0f, + 0x03, 0x21, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0xaf, 0x01, 0x06, 0x00, 0x63, + 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0x10, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0xda, 0x00, 0xb0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0xb1, 0x01, 0x06, 0x00, + 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, + 0x11, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, + 0x00, 0xd6, 0x00, 0xb2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x01, 0x03, 0x12, 0x03, 0x22, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, + 0x00, 0xb3, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, + 0xa9, 0x02, 0x03, 0x01, 0x00, 0x13, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0xb4, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xdd, 0x00, 0xb5, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, + 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0x14, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0xb6, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, + 0x15, 0x03, 0x23, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0xb7, 0x01, 0x06, 0x00, + 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, + 0x16, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, + 0x00, 0xda, 0x00, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0xb9, 0x01, 0x06, + 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, + 0x00, 0x17, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, + 0x00, 0x00, 0xd6, 0x00, 0xba, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0x18, 0x03, 0x24, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xdd, 0x00, 0xbb, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, + 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0x19, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0xbc, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, + 0x00, 0xdd, 0x00, 0xbd, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, + 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0x1a, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0xbe, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, + 0x03, 0x1b, 0x03, 0x25, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0xbf, 0x01, 0x06, + 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, + 0x00, 0x1c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, + 0x00, 0x00, 0xda, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0xc1, 0x01, + 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, + 0x01, 0x00, 0x1d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, + 0x00, 0x00, 0x00, 0xd6, 0x00, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0x1e, 0x03, 0x26, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, + 0x00, 0xdd, 0x00, 0xc3, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, + 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0x1f, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0xc4, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, + 0x00, 0x00, 0xdd, 0x00, 0xc5, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, + 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0x20, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, + 0xc6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x03, 0x21, 0x03, 0x27, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0xc7, 0x01, + 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, + 0x01, 0x00, 0x22, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, + 0x00, 0x00, 0x00, 0xda, 0x00, 0xc8, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0xc9, + 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, + 0x03, 0x01, 0x00, 0x23, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0xca, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0x24, 0x03, 0x28, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, + 0x00, 0x00, 0xdd, 0x00, 0xcb, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, + 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0x25, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, + 0xcc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, + 0x00, 0x00, 0x00, 0xdd, 0x00, 0xcd, 0x01, 0x06, 0x00, 0x63, 0x6d, + 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0x26, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, + 0x00, 0xce, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x01, 0x03, 0x27, 0x03, 0x29, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0xcf, + 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, + 0x03, 0x01, 0x00, 0x28, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0xd0, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, + 0xd1, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, + 0x02, 0x03, 0x01, 0x00, 0x29, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0xd2, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0x2a, 0x03, + 0x2a, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, + 0x00, 0x00, 0x00, 0xdd, 0x00, 0xd3, 0x01, 0x06, 0x00, 0x63, 0x6d, + 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0x2b, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, + 0x00, 0xd4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0xd5, 0x01, 0x06, 0x00, 0x63, + 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0x2c, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xd6, 0x00, 0xd6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x01, 0x03, 0x2d, 0x03, 0x2b, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, + 0xd7, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, + 0x02, 0x03, 0x01, 0x00, 0x2e, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0xd8, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, + 0x00, 0xd9, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, + 0xab, 0x02, 0x03, 0x01, 0x00, 0x2f, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0xda, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0x30, + 0x03, 0x2c, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0xdb, 0x01, 0x06, 0x00, 0x63, + 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0x31, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0xda, 0x00, 0xdc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0xdd, 0x01, 0x06, 0x00, + 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, + 0x32, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, + 0x00, 0xd6, 0x00, 0xde, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x01, 0x03, 0x33, 0x03, 0x2d, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, + 0x00, 0xdf, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, + 0xa9, 0x02, 0x03, 0x01, 0x00, 0x34, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0xe0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xdd, 0x00, 0xe1, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, + 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0x35, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0xe2, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, + 0x36, 0x03, 0x2e, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0xe3, 0x01, 0x06, 0x00, + 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, + 0x37, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, + 0x00, 0xda, 0x00, 0xe4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0xe5, 0x01, 0x06, + 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, + 0x00, 0x38, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, + 0x00, 0x00, 0xd6, 0x00, 0xe6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0x39, 0x03, 0x2f, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xdd, 0x00, 0xe7, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, + 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0x3a, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0xe8, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, + 0x00, 0xdd, 0x00, 0xe9, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, + 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0x3b, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0xea, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, + 0x03, 0x3c, 0x03, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0xeb, 0x01, 0x06, + 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, + 0x00, 0x3d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, + 0x00, 0x00, 0xda, 0x00, 0xec, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0xed, 0x01, + 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, + 0x01, 0x00, 0x3e, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, + 0x00, 0x00, 0x00, 0xd6, 0x00, 0xee, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0x3f, 0x03, 0x31, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, + 0x00, 0xdd, 0x00, 0xef, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, + 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0x40, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0xf0, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, + 0x00, 0x00, 0xdd, 0x00, 0xf1, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, + 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0x41, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, + 0xf2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x03, 0x42, 0x03, 0x32, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0xf3, 0x01, + 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, + 0x01, 0x00, 0x43, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, + 0x00, 0x00, 0x00, 0xda, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0xf5, + 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, + 0x03, 0x01, 0x00, 0x44, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0xf6, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0x45, 0x03, 0x33, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, + 0x00, 0x00, 0xdd, 0x00, 0xf7, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, + 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0x46, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, + 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, + 0x00, 0x00, 0x00, 0xdd, 0x00, 0xf9, 0x01, 0x06, 0x00, 0x63, 0x6d, + 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0x47, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, + 0x00, 0xfa, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x01, 0x03, 0x48, 0x03, 0x34, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0xfb, + 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, + 0x03, 0x01, 0x00, 0x49, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, + 0xfd, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, + 0x02, 0x03, 0x01, 0x00, 0x4a, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0xfe, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0x4b, 0x03, + 0x35, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, + 0x00, 0x00, 0x00, 0xdd, 0x00, 0xff, 0x01, 0x06, 0x00, 0x63, 0x6d, + 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0x4c, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x01, 0x02, 0x06, 0x00, 0x63, + 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0x4d, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xd6, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x01, 0x03, 0x4e, 0x03, 0x36, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, + 0x03, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, + 0x02, 0x03, 0x01, 0x00, 0x4f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x04, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, + 0x00, 0x05, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, + 0xab, 0x02, 0x03, 0x01, 0x00, 0x50, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x06, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0x51, + 0x03, 0x37, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x07, 0x02, 0x06, 0x00, 0x63, + 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0x52, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0xda, 0x00, 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x09, 0x02, 0x06, 0x00, + 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, + 0x53, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, + 0x00, 0xd6, 0x00, 0x0a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x01, 0x03, 0x54, 0x03, 0x38, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, + 0x00, 0x0b, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, + 0xa9, 0x02, 0x03, 0x01, 0x00, 0x55, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x0c, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xdd, 0x00, 0x0d, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, + 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0x56, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x0e, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, + 0x57, 0x03, 0x39, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x0f, 0x02, 0x06, 0x00, + 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, + 0x58, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, + 0x00, 0xda, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x11, 0x02, 0x06, + 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, + 0x00, 0x59, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, + 0x00, 0x00, 0xd6, 0x00, 0x12, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0x5a, 0x03, 0x3a, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xdd, 0x00, 0x13, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, + 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0x5b, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x14, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, + 0x00, 0xdd, 0x00, 0x15, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, + 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0x5c, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x16, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, + 0x03, 0x5d, 0x03, 0x3b, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x17, 0x02, 0x06, + 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, + 0x00, 0x5e, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, + 0x00, 0x00, 0xda, 0x00, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x19, 0x02, + 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, + 0x01, 0x00, 0x5f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, + 0x00, 0x00, 0x00, 0xd6, 0x00, 0x1a, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0x60, 0x03, 0x3c, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, + 0x00, 0xdd, 0x00, 0x1b, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, + 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0x61, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x1c, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, + 0x00, 0x00, 0xdd, 0x00, 0x1d, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, + 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0x62, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, + 0x1e, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x03, 0x63, 0x03, 0x3d, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x1f, 0x02, + 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, + 0x01, 0x00, 0x64, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, + 0x00, 0x00, 0x00, 0xda, 0x00, 0x20, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x21, + 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, + 0x03, 0x01, 0x00, 0x65, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x22, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0x66, 0x03, 0x3e, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, + 0x00, 0x00, 0xdd, 0x00, 0x23, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, + 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0x67, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, + 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, + 0x00, 0x00, 0x00, 0xdd, 0x00, 0x25, 0x02, 0x06, 0x00, 0x63, 0x6d, + 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0x68, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, + 0x00, 0x26, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x01, 0x03, 0x69, 0x03, 0x3f, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x27, + 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, + 0x03, 0x01, 0x00, 0x6a, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x28, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, + 0x29, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, + 0x02, 0x03, 0x01, 0x00, 0x6b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x2a, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0x6c, 0x03, + 0x40, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, + 0x00, 0x00, 0x00, 0xdd, 0x00, 0x2b, 0x02, 0x06, 0x00, 0x63, 0x6d, + 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0x6d, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, + 0x00, 0x2c, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x2d, 0x02, 0x06, 0x00, 0x63, + 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0x6e, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xd6, 0x00, 0x2e, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x01, 0x03, 0x6f, 0x03, 0x41, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, + 0x2f, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, + 0x02, 0x03, 0x01, 0x00, 0x70, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x30, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, + 0x00, 0x31, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, + 0xab, 0x02, 0x03, 0x01, 0x00, 0x71, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x32, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0x72, + 0x03, 0x42, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x33, 0x02, 0x06, 0x00, 0x63, + 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0x73, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0xda, 0x00, 0x34, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x35, 0x02, 0x06, 0x00, + 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, + 0x74, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, + 0x00, 0xd6, 0x00, 0x36, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x01, 0x03, 0x75, 0x03, 0x43, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, + 0x00, 0x37, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, + 0xa9, 0x02, 0x03, 0x01, 0x00, 0x76, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x38, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xdd, 0x00, 0x39, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, + 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0x77, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x3a, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, + 0x78, 0x03, 0x44, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x3b, 0x02, 0x06, 0x00, + 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, + 0x79, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, + 0x00, 0xda, 0x00, 0x3c, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x3d, 0x02, 0x06, + 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, + 0x00, 0x7a, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, + 0x00, 0x00, 0xd6, 0x00, 0x3e, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0x7b, 0x03, 0x45, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xdd, 0x00, 0x3f, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, + 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0x7c, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x40, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, + 0x00, 0xdd, 0x00, 0x41, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, + 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0x7d, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x42, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, + 0x03, 0x7e, 0x03, 0x46, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x43, 0x02, 0x06, + 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, + 0x00, 0x7f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, + 0x00, 0x00, 0xda, 0x00, 0x44, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x45, 0x02, + 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, + 0x01, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, + 0x00, 0x00, 0x00, 0xd6, 0x00, 0x46, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0x81, 0x03, 0x47, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, + 0x00, 0xdd, 0x00, 0x47, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, + 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0x82, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x48, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, + 0x00, 0x00, 0xdd, 0x00, 0x49, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, + 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0x83, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, + 0x4a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x03, 0x84, 0x03, 0x48, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x4b, 0x02, + 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, + 0x01, 0x00, 0x85, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, + 0x00, 0x00, 0x00, 0xda, 0x00, 0x4c, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x4d, + 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, + 0x03, 0x01, 0x00, 0x86, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0x87, 0x03, 0x49, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, + 0x00, 0x00, 0xdd, 0x00, 0x4f, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, + 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0x88, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, + 0x50, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, + 0x00, 0x00, 0x00, 0xdd, 0x00, 0x51, 0x02, 0x06, 0x00, 0x63, 0x6d, + 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0x89, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, + 0x00, 0x52, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x01, 0x03, 0x8a, 0x03, 0x4a, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x53, + 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, + 0x03, 0x01, 0x00, 0x8b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x54, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, + 0x55, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, + 0x02, 0x03, 0x01, 0x00, 0x8c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x56, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0x8d, 0x03, + 0x4b, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, + 0x00, 0x00, 0x00, 0xdd, 0x00, 0x57, 0x02, 0x06, 0x00, 0x63, 0x6d, + 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0x8e, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, + 0x00, 0x58, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x59, 0x02, 0x06, 0x00, 0x63, + 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0x8f, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xd6, 0x00, 0x5a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x01, 0x03, 0x90, 0x03, 0x4c, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, + 0x5b, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, + 0x02, 0x03, 0x01, 0x00, 0x91, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x5c, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, + 0x00, 0x5d, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, + 0xab, 0x02, 0x03, 0x01, 0x00, 0x92, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x5e, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0x93, + 0x03, 0x4d, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x5f, 0x02, 0x06, 0x00, 0x63, + 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0x94, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0xda, 0x00, 0x60, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x61, 0x02, 0x06, 0x00, + 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, + 0x95, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, + 0x00, 0xd6, 0x00, 0x62, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x01, 0x03, 0x96, 0x03, 0x4e, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, + 0x00, 0x63, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, + 0xa9, 0x02, 0x03, 0x01, 0x00, 0x97, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x64, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xdd, 0x00, 0x65, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, + 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0x98, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x66, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, + 0x99, 0x03, 0x4f, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x67, 0x02, 0x06, 0x00, + 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, + 0x9a, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, + 0x00, 0xda, 0x00, 0x68, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x69, 0x02, 0x06, + 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, + 0x00, 0x9b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, + 0x00, 0x00, 0xd6, 0x00, 0x6a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0x9c, 0x03, 0x50, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xdd, 0x00, 0x6b, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, + 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0x9d, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x6c, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, + 0x00, 0xdd, 0x00, 0x6d, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, + 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0x9e, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x6e, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, + 0x03, 0x9f, 0x03, 0x51, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x6f, 0x02, 0x06, + 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, + 0x00, 0xa0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, + 0x00, 0x00, 0xda, 0x00, 0x70, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x71, 0x02, + 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, + 0x01, 0x00, 0xa1, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, + 0x00, 0x00, 0x00, 0xd6, 0x00, 0x72, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0xa2, 0x03, 0x52, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, + 0x00, 0xdd, 0x00, 0x73, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, + 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0xa3, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x74, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, + 0x00, 0x00, 0xdd, 0x00, 0x75, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, + 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0xa4, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, + 0x76, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x03, 0xa5, 0x03, 0x53, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x77, 0x02, + 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, + 0x01, 0x00, 0xa6, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, + 0x00, 0x00, 0x00, 0xda, 0x00, 0x78, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x79, + 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, + 0x03, 0x01, 0x00, 0xa7, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x7a, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0xa8, 0x03, 0x54, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, + 0x00, 0x00, 0xdd, 0x00, 0x7b, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, + 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0xa9, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, + 0x7c, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, + 0x00, 0x00, 0x00, 0xdd, 0x00, 0x7d, 0x02, 0x06, 0x00, 0x63, 0x6d, + 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0xaa, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, + 0x00, 0x7e, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x01, 0x03, 0xab, 0x03, 0x55, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x7f, + 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, + 0x03, 0x01, 0x00, 0xac, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x80, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, + 0x81, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, + 0x02, 0x03, 0x01, 0x00, 0xad, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x82, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0xae, 0x03, + 0x56, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, + 0x00, 0x00, 0x00, 0xdd, 0x00, 0x83, 0x02, 0x06, 0x00, 0x63, 0x6d, + 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0xaf, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, + 0x00, 0x84, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x85, 0x02, 0x06, 0x00, 0x63, + 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0xb0, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xd6, 0x00, 0x86, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x01, 0x03, 0xb1, 0x03, 0x57, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, + 0x87, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, + 0x02, 0x03, 0x01, 0x00, 0xb2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x88, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, + 0x00, 0x89, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, + 0xab, 0x02, 0x03, 0x01, 0x00, 0xb3, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x8a, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0xb4, + 0x03, 0x58, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x8b, 0x02, 0x06, 0x00, 0x63, + 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0xb5, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0xda, 0x00, 0x8c, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x8d, 0x02, 0x06, 0x00, + 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, + 0xb6, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, + 0x00, 0xd6, 0x00, 0x8e, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x01, 0x03, 0xb7, 0x03, 0x59, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, + 0x00, 0x8f, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, + 0xa9, 0x02, 0x03, 0x01, 0x00, 0xb8, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x90, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xdd, 0x00, 0x91, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, + 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0xb9, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x92, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, + 0xba, 0x03, 0x5a, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x93, 0x02, 0x06, 0x00, + 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, + 0xbb, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, + 0x00, 0xda, 0x00, 0x94, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x95, 0x02, 0x06, + 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, + 0x00, 0xbc, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, + 0x00, 0x00, 0xd6, 0x00, 0x96, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0xbd, 0x03, 0x5b, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xdd, 0x00, 0x97, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, + 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0xbe, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0x98, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, + 0x00, 0xdd, 0x00, 0x99, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, + 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0xbf, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x9a, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, + 0x03, 0xc0, 0x03, 0x5c, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x9b, 0x02, 0x06, + 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, + 0x00, 0xc1, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, + 0x00, 0x00, 0xda, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x9d, 0x02, + 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, + 0x01, 0x00, 0xc2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, + 0x00, 0x00, 0x00, 0xd6, 0x00, 0x9e, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0xc3, 0x03, 0x5d, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, + 0x00, 0xdd, 0x00, 0x9f, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, + 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0xc4, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, 0xa0, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, + 0x00, 0x00, 0xdd, 0x00, 0xa1, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, + 0x73, 0x31, 0x32, 0xab, 0x02, 0x03, 0x01, 0x00, 0xc5, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, + 0xa2, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x03, 0xc6, 0x03, 0x5e, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0xa3, 0x02, + 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, + 0x01, 0x00, 0xc7, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, + 0x00, 0x00, 0x00, 0xda, 0x00, 0xa4, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdd, 0x00, 0xa5, + 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0xab, 0x02, + 0x03, 0x01, 0x00, 0xc8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0xd6, 0x00, 0xa6, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0xc9, 0x03, 0x5f, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x00, + 0x00, 0x00, 0xdd, 0x00, 0xa7, 0x02, 0x06, 0x00, 0x63, 0x6d, 0x73, + 0x73, 0x31, 0x32, 0xa9, 0x02, 0x03, 0x01, 0x00, 0xca, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xda, 0x00, + 0xa8, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, + 0x00, 0x00, 0x00, 0xde, 0x00, 0x10, 0x00, 0x47, 0x65, 0x6f, 0x6d, + 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x01, 0x27, 0x00, 0xa9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0xcb, 0x03, 0x31, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x13, 0x00, + 0x47, 0x65, 0x6f, 0x6d, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x41, + 0x72, 0x72, 0x61, 0x79, 0x44, 0x61, 0x74, 0x61, 0x01, 0x27, 0x00, + 0xaa, 0x02, 0xcb, 0x03, 0x03, 0x60, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x79, 0x75, 0x9e, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0c, 0x00, 0x00, 0x00, 0xde, 0x00, 0xab, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0xcc, 0x03, 0x5d, 0x00, 0x00, 0x00, 0xdb, + 0x00, 0xac, 0x02, 0xcc, 0x03, 0x03, 0x61, 0x00, 0x50, 0x00, 0x00, + 0x00, 0x3e, 0x6a, 0xad, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, + 0x04, 0xbd, 0x0e, 0x86, 0xba, 0x3d, 0xcd, 0xcd, 0x2f, 0x3f, 0x12, + 0xa5, 0x5d, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, + 0x3c, 0x4d, 0xe6, 0x3d, 0xcd, 0xcd, 0x2f, 0x3f, 0x12, 0xa5, 0x5d, + 0x3e, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x3c, 0x4d, + 0xe6, 0x3d, 0x0a, 0xa2, 0x4e, 0x3f, 0x3e, 0x6a, 0xad, 0x3d, 0x00, + 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x0e, 0x86, 0xba, 0x3d, + 0x0a, 0xa2, 0x4e, 0x3f, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xad, + 0x02, 0xcd, 0x03, 0x03, 0x62, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x16, 0x00, 0x00, 0x00, + 0xed, 0x00, 0x0c, 0x00, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x53, 0x74, 0x61, 0x67, 0x65, 0x01, 0x27, 0x00, 0xae, 0x02, 0x01, + 0x5a, 0x00, 0x01, 0x00, 0xea, 0x00, 0x07, 0x00, 0x54, 0x65, 0x78, + 0x74, 0x75, 0x72, 0x65, 0x01, 0x27, 0x00, 0xaf, 0x02, 0x06, 0x00, + 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0x1f, 0x00, 0x2e, 0x2e, 0x2f, + 0x2e, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, + 0x73, 0x2f, 0x6d, 0x61, 0x70, 0x73, 0x2f, 0x63, 0x6d, 0x73, 0x73, + 0x31, 0x32, 0x2e, 0x72, 0x67, 0x62, 0x00, 0x00, 0x01, 0x00, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x06, 0x01, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0x0c, 0x00, 0x00, 0x00, 0xb9, 0x00, 0x6a, 0x00, 0x01, - 0x00, 0x2b, 0x01, 0x00, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, - 0x80, 0x00, 0x6b, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x90, - 0xe7, 0x86, 0x3a, 0x00, 0x00, 0x00, 0x00, 0xa7, 0xca, 0xe7, 0x3e, - 0xb9, 0xc7, 0xaa, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xa7, 0xca, 0xe7, - 0x3e, 0x90, 0xe7, 0x86, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, - 0x35, 0x3f, 0xb9, 0xc7, 0xaa, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x12, - 0xc0, 0x35, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x09, 0x00, - 0x04, 0x00, 0x00, 0x00, 0xb6, 0xbd, 0xbd, 0x3e, 0x61, 0xc7, 0x7a, - 0x3d, 0xbc, 0x5b, 0xd9, 0x3e, 0x61, 0xc7, 0x7a, 0x3d, 0xb6, 0xbd, - 0xbd, 0x3e, 0x8c, 0xd9, 0xd2, 0x3d, 0xbc, 0x5b, 0xd9, 0x3e, 0x8c, - 0xd9, 0xd2, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0a, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, - 0x00, 0x00, 0x00, 0x79, 0x00, 0x6c, 0x00, 0x0b, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x9b, 0xad, 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, - 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0x6d, 0x00, 0x0d, 0x00, 0x04, - 0x00, 0x00, 0x00, 0xe7, 0xff, 0xd5, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0xe7, 0x35, 0x66, 0xbe, 0xaf, 0x05, 0x49, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0xe7, 0x35, 0x66, 0xbe, 0xe7, 0xff, 0xd5, 0x3c, 0x00, 0x00, - 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0xaf, 0x05, 0x49, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0e, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x0f, 0x00, 0x04, 0x00, 0x00, 0x00, 0xcf, 0xd8, 0xaf, - 0x3e, 0x4f, 0x03, 0x56, 0x3f, 0xe2, 0xe4, 0xee, 0x3e, 0x4f, 0x03, - 0x56, 0x3f, 0xcf, 0xd8, 0xaf, 0x3e, 0xbb, 0xd4, 0x7c, 0x3f, 0xe2, - 0xe4, 0xee, 0x3e, 0xbb, 0xd4, 0x7c, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, - 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0x6e, 0x00, - 0x11, 0x00, 0x01, 0x00, 0x00, 0x00, 0xe4, 0xd9, 0x51, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x12, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0x6f, - 0x00, 0x13, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x7a, 0x91, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x75, 0x54, 0xba, 0xbd, 0x32, 0x05, 0xeb, - 0x3e, 0x00, 0x00, 0x00, 0x00, 0x75, 0x54, 0xba, 0xbd, 0x10, 0x7a, - 0x91, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x55, 0xbd, 0x44, 0x3f, 0x32, - 0x05, 0xeb, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x55, 0xbd, 0x44, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x15, 0x00, 0x04, 0x00, 0x00, - 0x00, 0xc7, 0xd5, 0x38, 0x3f, 0xa3, 0x23, 0x59, 0x3f, 0xd8, 0x28, - 0x4b, 0x3f, 0xa3, 0x23, 0x59, 0x3f, 0xc7, 0xd5, 0x38, 0x3f, 0xbb, - 0xd4, 0x7c, 0x3f, 0xd8, 0x28, 0x4b, 0x3f, 0xbb, 0xd4, 0x7c, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x16, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, - 0x79, 0x00, 0x70, 0x00, 0x17, 0x00, 0x01, 0x00, 0x00, 0x00, 0x9b, - 0xad, 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x71, 0x00, 0x19, 0x00, 0x04, 0x00, 0x00, 0x00, - 0xe7, 0xff, 0xd5, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x75, 0x54, 0xba, - 0xbd, 0xaf, 0x05, 0x49, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x75, 0x54, - 0xba, 0xbd, 0xe7, 0xff, 0xd5, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x55, - 0xbd, 0x44, 0x3f, 0xaf, 0x05, 0x49, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x55, 0xbd, 0x44, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x1b, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x53, 0x24, 0x17, 0x3f, 0xa3, 0x23, - 0x59, 0x3f, 0x5c, 0xaa, 0x36, 0x3f, 0xa3, 0x23, 0x59, 0x3f, 0x53, - 0x24, 0x17, 0x3f, 0xbb, 0xd4, 0x7c, 0x3f, 0x5c, 0xaa, 0x36, 0x3f, - 0xbb, 0xd4, 0x7c, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x1c, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, - 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0x72, 0x00, 0x1d, 0x00, 0x01, - 0x00, 0x00, 0x00, 0xe4, 0xd9, 0x51, 0x3f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x8a, 0xad, 0xad, 0x56, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x9a, 0xad, 0xad, 0x61, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x06, 0x58, 0xad, 0xad, 0xad, 0x61, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xe8, 0xff, + 0xff, 0x91, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xf3, + 0xff, 0xff, 0xb1, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xa7, 0xff, 0xff, 0xff, + 0xb0, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x16, 0x1f, 0x1f, 0x10, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x19, 0x1f, + 0x1f, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8e, 0xff, 0xe8, 0xe8, 0xbd, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x9b, 0xff, 0xe4, 0xef, 0xe5, 0x52, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0xda, + 0xff, 0xe1, 0xf1, 0xde, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x52, 0xa9, 0xb6, + 0x86, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x5a, 0xab, 0xb6, 0x95, 0x30, 0x00, 0x00, 0x00, 0x38, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x5b, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x25, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, + 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x25, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1a, 0xc6, 0xff, 0xc9, 0xc2, 0xe1, 0x4a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x33, 0xcc, 0xf1, 0xae, 0xe0, 0xff, 0x8e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x89, 0xfc, 0xf0, 0x97, 0xcc, 0xfc, 0x89, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0xa5, 0xfc, 0xf2, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x3d, 0xd4, 0xff, 0xe4, 0x6c, 0x0d, 0x00, 0x00, 0x00, + 0x70, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x72, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, + 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, + 0xe3, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0xe9, 0xff, 0x9e, 0x93, 0xf7, + 0x76, 0x03, 0x00, 0x00, 0x00, 0x00, 0x59, 0xeb, 0xde, 0x77, 0xc6, + 0xff, 0xbb, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x26, 0xbd, 0xff, 0xcb, 0x4a, 0xa6, 0xff, 0xbd, + 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3a, 0xbf, 0xfc, 0xd8, 0x58, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3a, 0xb7, 0xfc, 0xf0, 0x8b, 0x13, 0x00, + 0x00, 0x00, 0x00, 0x50, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, + 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, + 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, + 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0x81, + 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0xe3, 0xe3, 0xe3, 0xe3, + 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, + 0xe3, 0xe3, 0xe3, 0xe3, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x7b, 0xfc, 0xfc, + 0x7a, 0x70, 0xf7, 0xa6, 0x14, 0x00, 0x00, 0x00, 0x09, 0x89, 0xfc, + 0xc3, 0x42, 0xa6, 0xff, 0xe3, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0xec, 0xff, 0x9a, 0x12, + 0x76, 0xf7, 0xec, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x45, 0xcf, 0xfc, + 0xcd, 0x49, 0x00, 0x00, 0x00, 0x00, 0x21, 0xa5, 0xfc, 0xf0, 0x8f, + 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x1c, 0x1c, 0x1c, 0x1c, + 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, + 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, + 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, + 0x1c, 0x1c, 0x14, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x49, + 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, + 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x25, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, + 0xac, 0xff, 0xe9, 0x59, 0x4a, 0xe1, 0xcc, 0x33, 0x00, 0x00, 0x00, + 0x21, 0xb5, 0xff, 0x9b, 0x16, 0x81, 0xff, 0xfc, 0x70, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x9b, 0xff, + 0xf9, 0x5e, 0x00, 0x42, 0xd9, 0xff, 0x9b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x64, 0xde, 0xff, 0xbe, 0x2b, 0x00, 0x00, 0x0d, 0x80, 0xf2, + 0xf9, 0x9c, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0x73, 0x00, 0x1f, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x10, 0x7a, 0x91, 0x3c, 0x00, 0x00, 0x00, - 0x00, 0x52, 0x5a, 0x49, 0xbd, 0x12, 0xc0, 0x35, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x52, 0x5a, 0x49, 0xbd, 0x10, 0x7a, 0x91, 0x3c, 0x00, - 0x00, 0x00, 0x00, 0x6c, 0x08, 0x3a, 0x3f, 0x12, 0xc0, 0x35, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x6c, 0x08, 0x3a, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x21, 0x00, 0x04, 0x00, 0x00, 0x00, 0x53, 0x24, - 0x17, 0x3f, 0x40, 0xc0, 0x36, 0x3f, 0xf8, 0xe2, 0x33, 0x3f, 0x40, - 0xc0, 0x36, 0x3f, 0x53, 0x24, 0x17, 0x3f, 0x27, 0xf8, 0x56, 0x3f, - 0xf8, 0xe2, 0x33, 0x3f, 0x27, 0xf8, 0x56, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x22, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0x74, - 0x00, 0x23, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x94, 0x3e, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x24, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, - 0x75, 0x00, 0x25, 0x00, 0x04, 0x00, 0x00, 0x00, 0xbb, 0x0b, 0x74, - 0x3d, 0x00, 0x00, 0x00, 0x00, 0xa7, 0xca, 0xe7, 0x3e, 0xa9, 0x83, - 0x4c, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xa7, 0xca, 0xe7, 0x3e, 0xbb, - 0x0b, 0x74, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, - 0xa9, 0x83, 0x4c, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x27, 0x00, 0x04, 0x00, - 0x00, 0x00, 0xd7, 0xbd, 0x1d, 0x3f, 0x09, 0x34, 0x68, 0x3e, 0x9b, - 0x8f, 0x23, 0x3f, 0x09, 0x34, 0x68, 0x3e, 0xd7, 0xbd, 0x1d, 0x3f, - 0x85, 0x77, 0x89, 0x3e, 0x9b, 0x8f, 0x23, 0x3f, 0x85, 0x77, 0x89, - 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x28, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, - 0x00, 0x79, 0x00, 0x76, 0x00, 0x29, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x11, 0x54, 0x8d, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, - 0x00, 0x00, 0x80, 0x00, 0x77, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x00, - 0x00, 0xbb, 0x0b, 0x74, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x5d, - 0x95, 0xbe, 0x6d, 0x58, 0xb3, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xe6, - 0x5d, 0x95, 0xbe, 0xbb, 0x0b, 0x74, 0x3d, 0x00, 0x00, 0x00, 0x00, - 0x55, 0xbd, 0x44, 0x3f, 0x6d, 0x58, 0xb3, 0x3e, 0x00, 0x00, 0x00, - 0x00, 0x55, 0xbd, 0x44, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2c, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x2d, 0x00, 0x04, 0x00, 0x00, 0x00, 0x9e, 0x48, 0x8b, 0x3d, 0x75, - 0xcd, 0x50, 0x3f, 0xa1, 0xdb, 0xeb, 0x3d, 0x75, 0xcd, 0x50, 0x3f, - 0x9e, 0x48, 0x8b, 0x3d, 0xbb, 0xd4, 0x7c, 0x3f, 0xa1, 0xdb, 0xeb, - 0x3d, 0xbb, 0xd4, 0x7c, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x2e, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, - 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0x78, 0x00, 0x2f, 0x00, - 0x01, 0x00, 0x00, 0x00, 0xd6, 0x00, 0xc5, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0x79, 0x00, 0x31, - 0x00, 0x04, 0x00, 0x00, 0x00, 0xe7, 0xff, 0xd5, 0x3c, 0x00, 0x00, - 0x00, 0x00, 0xe6, 0x5d, 0x95, 0xbe, 0x04, 0x37, 0xa2, 0x3e, 0x00, - 0x00, 0x00, 0x00, 0xe6, 0x5d, 0x95, 0xbe, 0xe7, 0xff, 0xd5, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x55, 0xbd, 0x44, 0x3f, 0x04, 0x37, 0xa2, - 0x3e, 0x00, 0x00, 0x00, 0x00, 0x55, 0xbd, 0x44, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x33, 0x00, 0x04, 0x00, 0x00, 0x00, 0x9d, - 0xcf, 0x4a, 0x3c, 0x75, 0xcd, 0x50, 0x3f, 0x73, 0xda, 0x73, 0x3d, - 0x75, 0xcd, 0x50, 0x3f, 0x9d, 0xcf, 0x4a, 0x3c, 0xbb, 0xd4, 0x7c, - 0x3f, 0x73, 0xda, 0x73, 0x3d, 0xbb, 0xd4, 0x7c, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x34, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, - 0x7a, 0x00, 0x35, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd6, 0x00, 0xc5, - 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, - 0x00, 0x7b, 0x00, 0x37, 0x00, 0x04, 0x00, 0x00, 0x00, 0xf9, 0x42, - 0x0d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xda, 0x8d, 0x3e, 0xc7, - 0xbc, 0xe6, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xda, 0x8d, 0x3e, - 0xf9, 0x42, 0x0d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x55, 0xbd, 0x44, - 0x3f, 0xc7, 0xbc, 0xe6, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x55, 0xbd, - 0x44, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x39, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x90, 0x4c, 0x23, 0x3f, 0xbd, 0x8a, 0xec, 0x3d, - 0xd5, 0x94, 0x34, 0x3f, 0xbd, 0x8a, 0xec, 0x3d, 0x90, 0x4c, 0x23, - 0x3f, 0xc0, 0xe7, 0x47, 0x3e, 0xd5, 0x94, 0x34, 0x3f, 0xc0, 0xe7, - 0x47, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x3a, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, - 0x00, 0x00, 0x79, 0x00, 0x7c, 0x00, 0x3b, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x9b, 0xad, 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, - 0x00, 0x00, 0x00, 0x80, 0x00, 0x7d, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x00, 0x00, 0xe7, 0xff, 0xd5, 0x3c, 0x00, 0x00, 0x00, 0x00, 0xbb, - 0xb8, 0xed, 0xbd, 0x6c, 0x08, 0x3a, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0xbb, 0xb8, 0xed, 0xbd, 0xe7, 0xff, 0xd5, 0x3c, 0x00, 0x00, 0x00, - 0x00, 0x8b, 0xc5, 0x17, 0x3f, 0x6c, 0x08, 0x3a, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x8b, 0xc5, 0x17, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3e, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x3f, 0x00, 0x04, 0x00, 0x00, 0x00, 0xf7, 0x1e, 0xa6, 0x3e, - 0x6c, 0x95, 0x50, 0x3e, 0x1e, 0x4e, 0xe0, 0x3e, 0x6c, 0x95, 0x50, - 0x3e, 0xf7, 0x1e, 0xa6, 0x3e, 0xbb, 0x2b, 0xa3, 0x3e, 0x1e, 0x4e, - 0xe0, 0x3e, 0xbb, 0x2b, 0xa3, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x40, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, - 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0x7e, 0x00, 0x41, - 0x00, 0x01, 0x00, 0x00, 0x00, 0xa0, 0xdc, 0x42, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x42, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0x7f, 0x00, - 0x43, 0x00, 0x04, 0x00, 0x00, 0x00, 0xbb, 0x0b, 0x74, 0x3d, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xb0, 0x21, 0xbe, 0xa9, 0x83, 0x4c, 0x3e, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xb0, 0x21, 0xbe, 0xbb, 0x0b, 0x74, - 0x3d, 0x00, 0x00, 0x00, 0x00, 0xea, 0x75, 0xcb, 0x3d, 0xa9, 0x83, - 0x4c, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xea, 0x75, 0xcb, 0x3d, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x45, 0x00, 0x04, 0x00, 0x00, 0x00, - 0xd7, 0xbd, 0x1d, 0x3f, 0x5b, 0xce, 0x8d, 0x3e, 0x9b, 0x8f, 0x23, - 0x3f, 0x5b, 0xce, 0x8d, 0x3e, 0xd7, 0xbd, 0x1d, 0x3f, 0xbb, 0x2b, - 0xa3, 0x3e, 0x9b, 0x8f, 0x23, 0x3f, 0xbb, 0x2b, 0xa3, 0x3e, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x46, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, - 0x00, 0x80, 0x00, 0x47, 0x00, 0x01, 0x00, 0x00, 0x00, 0x11, 0x54, - 0x8d, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, - 0x80, 0x00, 0x81, 0x00, 0x49, 0x00, 0x04, 0x00, 0x00, 0x00, 0x49, - 0x9d, 0x80, 0xbc, 0x00, 0x00, 0x00, 0x00, 0xc5, 0xcb, 0x23, 0x3e, - 0xe6, 0x5d, 0x95, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xc5, 0xcb, 0x23, - 0x3e, 0x49, 0x9d, 0x80, 0xbc, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x84, - 0x88, 0x3e, 0xe6, 0x5d, 0x95, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xc7, - 0x84, 0x88, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x4b, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x9d, 0xcf, 0x4a, 0x3c, 0x73, 0xf2, 0x82, - 0x3d, 0xf8, 0xf7, 0x7e, 0x3d, 0x73, 0xf2, 0x82, 0x3d, 0x9d, 0xcf, - 0x4a, 0x3c, 0x5c, 0x63, 0xa6, 0x3d, 0xf8, 0xf7, 0x7e, 0x3d, 0x5c, - 0x63, 0xa6, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x4c, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, - 0x00, 0x00, 0x00, 0x79, 0x00, 0x82, 0x00, 0x4d, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x4f, 0x06, 0xa7, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, - 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0x83, 0x00, 0x4f, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x53, 0x27, 0x8b, 0x3d, 0x00, 0x00, 0x00, 0x00, - 0x7b, 0xd4, 0x04, 0xbd, 0xa9, 0x83, 0x4c, 0x3e, 0x00, 0x00, 0x00, - 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x53, 0x27, 0x8b, 0x3d, 0x00, 0x00, - 0x00, 0x00, 0xea, 0x75, 0xcb, 0x3d, 0xa9, 0x83, 0x4c, 0x3e, 0x00, - 0x00, 0x00, 0x00, 0xea, 0x75, 0xcb, 0x3d, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x50, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x51, 0x00, 0x04, 0x00, 0x00, 0x00, 0x77, 0x67, 0xb5, - 0x3e, 0x90, 0x82, 0xa7, 0x3e, 0x43, 0x59, 0xc0, 0x3e, 0x90, 0x82, - 0xa7, 0x3e, 0x77, 0x67, 0xb5, 0x3e, 0x5c, 0x74, 0xb2, 0x3e, 0x43, - 0x59, 0xc0, 0x3e, 0x5c, 0x74, 0xb2, 0x3e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x52, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, - 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0x84, 0x00, - 0x53, 0x00, 0x01, 0x00, 0x00, 0x00, 0x11, 0x54, 0x8d, 0x3e, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x54, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0x85, - 0x00, 0x55, 0x00, 0x04, 0x00, 0x00, 0x00, 0xe7, 0xff, 0xd5, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x7b, 0x15, 0x91, 0xbe, 0x32, 0x05, 0xeb, - 0x3e, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x15, 0x91, 0xbe, 0xe7, 0xff, - 0xd5, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x55, 0xbd, 0x44, 0x3f, 0x32, - 0x05, 0xeb, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x55, 0xbd, 0x44, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x57, 0x00, 0x04, 0x00, 0x00, - 0x00, 0xf8, 0x36, 0xfd, 0x3d, 0x63, 0x26, 0x51, 0x3f, 0x06, 0x84, - 0x46, 0x3e, 0x63, 0x26, 0x51, 0x3f, 0xf8, 0x36, 0xfd, 0x3d, 0xbb, - 0xd4, 0x7c, 0x3f, 0x06, 0x84, 0x46, 0x3e, 0xbb, 0xd4, 0x7c, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x58, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, - 0x79, 0x00, 0x86, 0x00, 0x59, 0x00, 0x01, 0x00, 0x00, 0x00, 0x9b, - 0xad, 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x87, 0x00, 0x5b, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x10, 0x7a, 0x91, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x52, 0x5a, 0x49, - 0xbd, 0x9c, 0x4d, 0xef, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x52, 0x5a, - 0x49, 0xbd, 0x10, 0x7a, 0x91, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x82, - 0x53, 0x2f, 0x3f, 0x9c, 0x4d, 0xef, 0x3e, 0x00, 0x00, 0x00, 0x00, - 0x82, 0x53, 0x2f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x5d, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x9d, 0xcf, 0x4a, 0x3c, 0xaa, 0x9d, - 0x99, 0x3e, 0x79, 0xb9, 0xae, 0x3d, 0xaa, 0x9d, 0x99, 0x3e, 0x9d, - 0xcf, 0x4a, 0x3c, 0x46, 0x94, 0xd6, 0x3e, 0x79, 0xb9, 0xae, 0x3d, - 0x46, 0x94, 0xd6, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x5e, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, - 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0x88, 0x00, 0x5f, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x9b, 0xad, 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0x89, 0x00, 0x61, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x53, 0x27, 0x8b, 0x3d, 0x00, 0x00, 0x00, - 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x7e, 0x74, 0xe2, 0x3e, 0x00, 0x00, - 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x53, 0x27, 0x8b, 0x3d, 0x00, - 0x00, 0x00, 0x00, 0x82, 0x53, 0x2f, 0x3f, 0x7e, 0x74, 0xe2, 0x3e, - 0x00, 0x00, 0x00, 0x00, 0x82, 0x53, 0x2f, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x62, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x63, 0x00, 0x04, 0x00, 0x00, 0x00, 0x83, 0xf8, - 0x54, 0x3f, 0x76, 0x16, 0x5d, 0x3e, 0x30, 0x84, 0x64, 0x3f, 0x76, - 0x16, 0x5d, 0x3e, 0x83, 0xf8, 0x54, 0x3f, 0x3f, 0x1e, 0xaa, 0x3e, - 0x30, 0x84, 0x64, 0x3f, 0x3f, 0x1e, 0xaa, 0x3e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x64, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0x8a, - 0x00, 0x65, 0x00, 0x01, 0x00, 0x00, 0x00, 0x9b, 0xad, 0xfc, 0x3e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x66, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, - 0x8b, 0x00, 0x67, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x7a, 0x91, - 0x3c, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x32, 0x05, - 0xeb, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x10, - 0x7a, 0x91, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x82, 0x53, 0x2f, 0x3f, - 0x32, 0x05, 0xeb, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x82, 0x53, 0x2f, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x69, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x9b, 0xaf, 0x66, 0x3f, 0x76, 0x16, 0x5d, 0x3e, 0x9b, - 0x02, 0x79, 0x3f, 0x76, 0x16, 0x5d, 0x3e, 0x9b, 0xaf, 0x66, 0x3f, - 0x3f, 0x1e, 0xaa, 0x3e, 0x9b, 0x02, 0x79, 0x3f, 0x3f, 0x1e, 0xaa, - 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x6a, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, - 0x00, 0x79, 0x00, 0x8c, 0x00, 0x6b, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x9b, 0xad, 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, - 0x00, 0x00, 0x80, 0x00, 0x8d, 0x00, 0x6d, 0x00, 0x04, 0x00, 0x00, - 0x00, 0x10, 0x7a, 0x91, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x52, 0x5a, - 0x49, 0xbd, 0x9c, 0x4d, 0xef, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x52, - 0x5a, 0x49, 0xbd, 0x10, 0x7a, 0x91, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x82, 0x53, 0x2f, 0x3f, 0x9c, 0x4d, 0xef, 0x3e, 0x00, 0x00, 0x00, - 0x00, 0x82, 0x53, 0x2f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6e, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x6f, 0x00, 0x04, 0x00, 0x00, 0x00, 0xde, 0x14, 0xc0, 0x3d, 0xaa, - 0x9d, 0x99, 0x3e, 0x38, 0xba, 0x2a, 0x3e, 0xaa, 0x9d, 0x99, 0x3e, - 0xde, 0x14, 0xc0, 0x3d, 0x46, 0x94, 0xd6, 0x3e, 0x38, 0xba, 0x2a, - 0x3e, 0x46, 0x94, 0xd6, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x70, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, - 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0x8e, 0x00, 0x71, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x9b, 0xad, 0xfc, 0x3e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x72, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0x8f, 0x00, 0x73, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x90, 0xe7, 0x86, 0x3a, 0x00, 0x00, - 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x51, 0xde, 0xf7, 0x3e, 0x00, - 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x90, 0xe7, 0x86, 0x3a, - 0x00, 0x00, 0x00, 0x00, 0x28, 0x0b, 0x2b, 0x3f, 0x51, 0xde, 0xf7, - 0x3e, 0x00, 0x00, 0x00, 0x00, 0x28, 0x0b, 0x2b, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x75, 0x00, 0x04, 0x00, 0x00, 0x00, 0xe4, - 0x67, 0x33, 0x3e, 0x0a, 0xa3, 0x49, 0x3e, 0x24, 0xd3, 0x81, 0x3e, - 0x0a, 0xa3, 0x49, 0x3e, 0xe4, 0x67, 0x33, 0x3e, 0xac, 0x00, 0x9f, - 0x3e, 0x24, 0xd3, 0x81, 0x3e, 0xac, 0x00, 0x9f, 0x3e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x76, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, - 0x90, 0x00, 0x77, 0x00, 0x01, 0x00, 0x00, 0x00, 0x9b, 0xad, 0xfc, - 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, - 0x00, 0x91, 0x00, 0x79, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x7a, - 0x91, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x52, 0x5a, 0x49, 0xbd, 0x32, - 0x05, 0xeb, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x52, 0x5a, 0x49, 0xbd, - 0x10, 0x7a, 0x91, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x28, 0x0b, 0x2b, - 0x3f, 0x32, 0x05, 0xeb, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x28, 0x0b, - 0x2b, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x7b, 0x00, 0x04, - 0x00, 0x00, 0x00, 0xcf, 0x49, 0x2b, 0x3f, 0x6c, 0x95, 0x50, 0x3e, - 0xd0, 0x9c, 0x3d, 0x3f, 0x6c, 0x95, 0x50, 0x3e, 0xcf, 0x49, 0x2b, - 0x3f, 0x98, 0xdd, 0xa3, 0x3e, 0xd0, 0x9c, 0x3d, 0x3f, 0x98, 0xdd, - 0xa3, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x7c, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, - 0x00, 0x00, 0x79, 0x00, 0x92, 0x00, 0x7d, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x9b, 0xad, 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, - 0x00, 0x00, 0x00, 0x80, 0x00, 0x93, 0x00, 0x7f, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x10, 0x7a, 0x91, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x52, - 0x5a, 0x49, 0xbd, 0x9c, 0x4d, 0xef, 0x3e, 0x00, 0x00, 0x00, 0x00, - 0x52, 0x5a, 0x49, 0xbd, 0x10, 0x7a, 0x91, 0x3c, 0x00, 0x00, 0x00, - 0x00, 0x82, 0x53, 0x2f, 0x3f, 0x9c, 0x4d, 0xef, 0x3e, 0x00, 0x00, - 0x00, 0x00, 0x82, 0x53, 0x2f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x81, 0x00, 0x04, 0x00, 0x00, 0x00, 0x29, 0x21, 0x40, 0x3f, - 0x44, 0x4f, 0x5a, 0x3e, 0x18, 0xcd, 0x52, 0x3f, 0x44, 0x4f, 0x5a, - 0x3e, 0x29, 0x21, 0x40, 0x3f, 0x3f, 0x1e, 0xaa, 0x3e, 0x18, 0xcd, - 0x52, 0x3f, 0x3f, 0x1e, 0xaa, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x82, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, - 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0x94, 0x00, 0x83, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x9b, 0xad, 0xfc, 0x3e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x84, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0x95, 0x00, - 0x85, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x7a, 0x91, 0x3c, 0x00, - 0x00, 0x00, 0x00, 0x66, 0x17, 0x27, 0xbd, 0x9c, 0x4d, 0xef, 0x3e, - 0x00, 0x00, 0x00, 0x00, 0x66, 0x17, 0x27, 0xbd, 0x10, 0x7a, 0x91, - 0x3c, 0x00, 0x00, 0x00, 0x00, 0x28, 0x0b, 0x2b, 0x3f, 0x9c, 0x4d, - 0xef, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x28, 0x0b, 0x2b, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x87, 0x00, 0x04, 0x00, 0x00, 0x00, - 0xf4, 0xa4, 0xe4, 0x3e, 0x6c, 0x95, 0x50, 0x3e, 0x69, 0xfe, 0x04, - 0x3f, 0x6c, 0x95, 0x50, 0x3e, 0xf4, 0xa4, 0xe4, 0x3e, 0xbb, 0x2b, - 0xa3, 0x3e, 0x69, 0xfe, 0x04, 0x3f, 0xbb, 0x2b, 0xa3, 0x3e, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x88, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, - 0x00, 0x96, 0x00, 0x89, 0x00, 0x01, 0x00, 0x00, 0x00, 0x9b, 0xad, - 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, - 0x80, 0x00, 0x97, 0x00, 0x8b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, - 0x7a, 0x91, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x52, 0x5a, 0x49, 0xbd, - 0x9c, 0x4d, 0xef, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x52, 0x5a, 0x49, - 0xbd, 0x10, 0x7a, 0x91, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x82, 0x53, - 0x2f, 0x3f, 0x9c, 0x4d, 0xef, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x82, - 0x53, 0x2f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x8d, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x44, 0xe0, 0x78, 0x3e, 0x82, 0x57, 0xa3, - 0x3e, 0x21, 0xc8, 0xa1, 0x3e, 0x82, 0x57, 0xa3, 0x3e, 0x44, 0xe0, - 0x78, 0x3e, 0x1e, 0x4e, 0xe0, 0x3e, 0x21, 0xc8, 0xa1, 0x3e, 0x1e, - 0x4e, 0xe0, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8e, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, - 0x00, 0x00, 0x00, 0x79, 0x00, 0x98, 0x00, 0x8f, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x9b, 0xad, 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, - 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0x99, 0x00, 0x91, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x10, 0x7a, 0x91, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x52, 0x5a, 0x49, 0xbd, 0x9c, 0x4d, 0xef, 0x3e, 0x00, 0x00, 0x00, - 0x00, 0x52, 0x5a, 0x49, 0xbd, 0x10, 0x7a, 0x91, 0x3c, 0x00, 0x00, - 0x00, 0x00, 0x82, 0x53, 0x2f, 0x3f, 0x9c, 0x4d, 0xef, 0x3e, 0x00, - 0x00, 0x00, 0x00, 0x82, 0x53, 0x2f, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x92, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x93, 0x00, 0x04, 0x00, 0x00, 0x00, 0xcf, 0x49, 0x2b, - 0x3f, 0x6e, 0x34, 0xa8, 0x3e, 0xbe, 0xf5, 0x3d, 0x3f, 0x6e, 0x34, - 0xa8, 0x3e, 0xcf, 0x49, 0x2b, 0x3f, 0x0a, 0x2b, 0xe5, 0x3e, 0xbe, - 0xf5, 0x3d, 0x3f, 0x0a, 0x2b, 0xe5, 0x3e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x94, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, - 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0x9a, 0x00, - 0x95, 0x00, 0x01, 0x00, 0x00, 0x00, 0x9b, 0xad, 0xfc, 0x3e, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x96, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0x9b, - 0x00, 0x97, 0x00, 0x04, 0x00, 0x00, 0x00, 0x53, 0x27, 0x8b, 0x3d, - 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xa9, 0x83, 0x4c, - 0x3e, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x53, 0x27, - 0x8b, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x32, 0x05, 0xeb, 0x3e, 0xa9, - 0x83, 0x4c, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x32, 0x05, 0xeb, 0x3e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x99, 0x00, 0x04, 0x00, 0x00, - 0x00, 0x44, 0xe0, 0x78, 0x3e, 0x87, 0xc2, 0xef, 0x3e, 0xed, 0x61, - 0x87, 0x3e, 0x87, 0xc2, 0xef, 0x3e, 0x44, 0xe0, 0x78, 0x3e, 0xcb, - 0x49, 0x0c, 0x3f, 0xed, 0x61, 0x87, 0x3e, 0xcb, 0x49, 0x0c, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x9a, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, - 0x79, 0x00, 0x9c, 0x00, 0x9b, 0x00, 0x01, 0x00, 0x00, 0x00, 0x11, - 0x54, 0x8d, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x9d, 0x00, 0x9d, 0x00, 0x04, 0x00, 0x00, 0x00, - 0xbb, 0x0b, 0x74, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x03, 0xb0, 0x21, - 0xbe, 0xa9, 0x83, 0x4c, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x03, 0xb0, - 0x21, 0xbe, 0xbb, 0x0b, 0x74, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x32, - 0x05, 0xeb, 0x3e, 0xa9, 0x83, 0x4c, 0x3e, 0x00, 0x00, 0x00, 0x00, - 0x32, 0x05, 0xeb, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x9f, - 0x00, 0x04, 0x00, 0x00, 0x00, 0xdc, 0x46, 0xd3, 0x3e, 0xeb, 0xe0, - 0x18, 0x3f, 0x85, 0xea, 0xde, 0x3e, 0xeb, 0xe0, 0x18, 0x3f, 0xdc, - 0x46, 0xd3, 0x3e, 0x4e, 0x7f, 0x32, 0x3f, 0x85, 0xea, 0xde, 0x3e, - 0x4e, 0x7f, 0x32, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xa0, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, - 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0x9e, 0x00, 0xa1, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x11, 0x54, 0x8d, 0x3e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0x9f, 0x00, 0xa3, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x3e, 0x6a, 0xad, 0x3d, 0x00, 0x00, 0x00, - 0x00, 0xe7, 0x35, 0x66, 0xbe, 0x12, 0xa5, 0x5d, 0x3e, 0x00, 0x00, - 0x00, 0x00, 0xe7, 0x35, 0x66, 0xbe, 0x3e, 0x6a, 0xad, 0x3d, 0x00, - 0x00, 0x00, 0x00, 0xdc, 0x7f, 0x04, 0x3f, 0x12, 0xa5, 0x5d, 0x3e, - 0x00, 0x00, 0x00, 0x00, 0xdc, 0x7f, 0x04, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xa4, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0xa5, 0x00, 0x04, 0x00, 0x00, 0x00, 0x35, 0xd0, - 0x48, 0x3f, 0xda, 0x39, 0x19, 0x3f, 0x1b, 0x49, 0x4e, 0x3f, 0xda, - 0x39, 0x19, 0x3f, 0x35, 0xd0, 0x48, 0x3f, 0x17, 0x0e, 0x38, 0x3f, - 0x1b, 0x49, 0x4e, 0x3f, 0x17, 0x0e, 0x38, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0xa6, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0xa0, - 0x00, 0xa7, 0x00, 0x01, 0x00, 0x00, 0x00, 0x79, 0x75, 0x9e, 0x3e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xa8, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, - 0xa1, 0x00, 0xa9, 0x00, 0x04, 0x00, 0x00, 0x00, 0xe7, 0xff, 0xd5, - 0x3c, 0x00, 0x00, 0x00, 0x00, 0xb4, 0x8b, 0xbe, 0x3d, 0x6c, 0x08, - 0x3a, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xb4, 0x8b, 0xbe, 0x3d, 0xe7, - 0xff, 0xd5, 0x3c, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x79, 0xc4, 0x3e, - 0x6c, 0x08, 0x3a, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x79, 0xc4, - 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0xab, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x2f, 0x6f, 0x7e, 0x3e, 0x57, 0x8c, 0x64, 0x3d, 0xe0, - 0x66, 0xb9, 0x3e, 0x57, 0x8c, 0x64, 0x3d, 0x2f, 0x6f, 0x7e, 0x3e, - 0x8c, 0xd9, 0xd2, 0x3d, 0xe0, 0x66, 0xb9, 0x3e, 0x8c, 0xd9, 0xd2, - 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0xac, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, - 0x00, 0x79, 0x00, 0xa2, 0x00, 0xad, 0x00, 0x01, 0x00, 0x00, 0x00, - 0xa0, 0xdc, 0x42, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, - 0x00, 0x00, 0x80, 0x00, 0xa3, 0x00, 0xaf, 0x00, 0x04, 0x00, 0x00, - 0x00, 0xe7, 0xff, 0xd5, 0x3c, 0x00, 0x00, 0x00, 0x00, 0xbd, 0xc6, - 0x6e, 0xbe, 0xc9, 0xe3, 0xd9, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xbd, - 0xc6, 0x6e, 0xbe, 0xe7, 0xff, 0xd5, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0xdc, 0x7f, 0x04, 0x3f, 0xc9, 0xe3, 0xd9, 0x3e, 0x00, 0x00, 0x00, - 0x00, 0xdc, 0x7f, 0x04, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb0, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0xb1, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3b, 0xfe, 0xc3, 0x3e, 0xb9, - 0xaa, 0x34, 0x3f, 0x0a, 0x2b, 0xe5, 0x3e, 0xb9, 0xaa, 0x34, 0x3f, - 0x3b, 0xfe, 0xc3, 0x3e, 0xe4, 0xd7, 0x53, 0x3f, 0x0a, 0x2b, 0xe5, - 0x3e, 0xe4, 0xd7, 0x53, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xb2, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, - 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0xa4, 0x00, 0xb3, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x11, 0x8c, 0xeb, 0x3e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb4, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0xa5, 0x00, 0xb5, - 0x00, 0x04, 0x00, 0x00, 0x00, 0xe7, 0xff, 0xd5, 0x3c, 0x00, 0x00, - 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xc9, 0xe3, 0xd9, 0x3e, 0x00, - 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xe7, 0xff, 0xd5, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x47, 0xe4, 0x37, 0x3f, 0xc9, 0xe3, 0xd9, - 0x3e, 0x00, 0x00, 0x00, 0x00, 0x47, 0xe4, 0x37, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0xb7, 0x00, 0x04, 0x00, 0x00, 0x00, 0x63, - 0x0e, 0x36, 0x3f, 0x0c, 0xcb, 0x37, 0x3f, 0xca, 0xa4, 0x46, 0x3f, - 0x0c, 0xcb, 0x37, 0x3f, 0x63, 0x0e, 0x36, 0x3f, 0x27, 0xf8, 0x56, - 0x3f, 0xca, 0xa4, 0x46, 0x3f, 0x27, 0xf8, 0x56, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0xb8, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, - 0xa6, 0x00, 0xb9, 0x00, 0x01, 0x00, 0x00, 0x00, 0x11, 0x8c, 0xeb, - 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xba, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, - 0x00, 0xa7, 0x00, 0xbb, 0x00, 0x04, 0x00, 0x00, 0x00, 0xe7, 0xff, - 0xd5, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x66, 0x17, 0x27, 0xbd, 0x09, - 0x32, 0x1e, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x66, 0x17, 0x27, 0xbd, - 0xe7, 0xff, 0xd5, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x47, 0xe4, 0x37, - 0x3f, 0x09, 0x32, 0x1e, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x47, 0xe4, - 0x37, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0xbd, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x36, 0xe8, 0x63, 0x3f, 0xb1, 0x4e, 0x5d, 0x3f, - 0xdd, 0x7b, 0x7c, 0x3f, 0xb1, 0x4e, 0x5d, 0x3f, 0x36, 0xe8, 0x63, - 0x3f, 0xbb, 0xd4, 0x7c, 0x3f, 0xdd, 0x7b, 0x7c, 0x3f, 0xbb, 0xd4, - 0x7c, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xbe, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, - 0x00, 0x00, 0x79, 0x00, 0xa8, 0x00, 0xbf, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x3e, 0x06, 0x27, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, - 0x00, 0x00, 0x00, 0x80, 0x00, 0xa9, 0x00, 0xc1, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x90, 0xe7, 0x86, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x7b, - 0xd4, 0x04, 0xbd, 0x74, 0x7a, 0x22, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x7b, 0xd4, 0x04, 0xbd, 0x90, 0xe7, 0x86, 0x3a, 0x00, 0x00, 0x00, - 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x74, 0x7a, 0x22, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xc2, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0xc3, 0x00, 0x04, 0x00, 0x00, 0x00, 0x39, 0x09, 0x25, 0x3f, - 0xe0, 0x81, 0xe9, 0x3e, 0x79, 0x59, 0x3f, 0x3f, 0xe0, 0x81, 0xe9, - 0x3e, 0x39, 0x09, 0x25, 0x3f, 0x2d, 0x95, 0x13, 0x3f, 0x79, 0x59, - 0x3f, 0x3f, 0x2d, 0x95, 0x13, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xc4, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, - 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0xaa, 0x00, 0xc5, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x09, 0xe2, 0x24, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xc6, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0xab, 0x00, - 0xc7, 0x00, 0x04, 0x00, 0x00, 0x00, 0x53, 0x27, 0x8b, 0x3d, 0x00, - 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x09, 0x32, 0x1e, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x53, 0x27, 0x8b, - 0x3d, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x09, 0x32, - 0x1e, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0xc9, 0x00, 0x04, 0x00, 0x00, 0x00, - 0xdc, 0x46, 0xd3, 0x3e, 0x03, 0xd0, 0xe8, 0x3e, 0x6c, 0x7a, 0x00, - 0x3f, 0x03, 0xd0, 0xe8, 0x3e, 0xdc, 0x46, 0xd3, 0x3e, 0x3e, 0x3c, - 0x13, 0x3f, 0x6c, 0x7a, 0x00, 0x3f, 0x3e, 0x3c, 0x13, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0xca, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, - 0x00, 0xac, 0x00, 0xcb, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x06, - 0x27, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, - 0x80, 0x00, 0xad, 0x00, 0xcd, 0x00, 0x04, 0x00, 0x00, 0x00, 0xe5, - 0x85, 0x2f, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x66, 0x17, 0x27, 0xbd, - 0x8b, 0xc5, 0x17, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x66, 0x17, 0x27, - 0xbd, 0xe5, 0x85, 0x2f, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x47, 0xe4, - 0x37, 0x3f, 0x8b, 0xc5, 0x17, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x47, - 0xe4, 0x37, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xce, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0xcf, 0x00, - 0x04, 0x00, 0x00, 0x00, 0xf8, 0x36, 0xfd, 0x3d, 0xde, 0x74, 0x2f, - 0x3f, 0xb6, 0xf7, 0x59, 0x3e, 0xde, 0x74, 0x2f, 0x3f, 0xf8, 0x36, - 0xfd, 0x3d, 0xf8, 0xfa, 0x4e, 0x3f, 0xb6, 0xf7, 0x59, 0x3e, 0xf8, - 0xfa, 0x4e, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xd0, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, - 0x00, 0x00, 0x00, 0x79, 0x00, 0xae, 0x00, 0xd1, 0x00, 0x01, 0x00, - 0x00, 0x00, 0xaf, 0x99, 0x20, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd2, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, - 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0xaf, 0x00, 0xd3, 0x00, 0x04, - 0x00, 0x00, 0x00, 0xbb, 0x0b, 0x74, 0x3d, 0x00, 0x00, 0x00, 0x00, - 0x7b, 0xd4, 0x04, 0xbd, 0x28, 0x0b, 0x2b, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xbb, 0x0b, 0x74, 0x3d, 0x00, 0x00, - 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x28, 0x0b, 0x2b, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xd4, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0xd5, 0x00, 0x04, 0x00, 0x00, 0x00, 0xe4, 0x84, 0x41, - 0x3f, 0x14, 0x75, 0xae, 0x3e, 0x58, 0xca, 0x5a, 0x3f, 0x14, 0x75, - 0xae, 0x3e, 0xe4, 0x84, 0x41, 0x3f, 0x8f, 0x1d, 0xec, 0x3e, 0x58, - 0xca, 0x5a, 0x3f, 0x8f, 0x1d, 0xec, 0x3e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0xd6, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, - 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0xb0, 0x00, - 0xd7, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5d, 0xdf, 0x33, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xd8, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0xb1, - 0x00, 0xd9, 0x00, 0x04, 0x00, 0x00, 0x00, 0xbb, 0x0b, 0x74, 0x3d, - 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xc6, 0x34, 0x0f, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xbb, 0x0b, - 0x74, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0xc6, - 0x34, 0x0f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0xdb, 0x00, 0x04, 0x00, 0x00, - 0x00, 0x47, 0x1c, 0x0e, 0x3f, 0xe0, 0x81, 0xe9, 0x3e, 0xce, 0xdd, - 0x22, 0x3f, 0xe0, 0x81, 0xe9, 0x3e, 0x47, 0x1c, 0x0e, 0x3f, 0x2d, - 0x95, 0x13, 0x3f, 0xce, 0xdd, 0x22, 0x3f, 0x2d, 0x95, 0x13, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0xdc, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, - 0x79, 0x00, 0xb2, 0x00, 0xdd, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc5, - 0xe4, 0x15, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, - 0x00, 0x80, 0x00, 0xb3, 0x00, 0xdf, 0x00, 0x04, 0x00, 0x00, 0x00, - 0xbb, 0x0b, 0x74, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, - 0xbd, 0x12, 0xa4, 0x06, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, - 0x04, 0xbd, 0xbb, 0x0b, 0x74, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x12, - 0xc0, 0x35, 0x3f, 0x12, 0xa4, 0x06, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x12, 0xc0, 0x35, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0xe1, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x27, 0xf9, 0x51, 0x3e, 0x36, 0x75, - 0x0e, 0x3f, 0x0b, 0xb8, 0x8f, 0x3e, 0x36, 0x75, 0x0e, 0x3f, 0x27, - 0xf9, 0x51, 0x3e, 0x73, 0x49, 0x2d, 0x3f, 0x0b, 0xb8, 0x8f, 0x3e, - 0x73, 0x49, 0x2d, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xe2, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, - 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0xb4, 0x00, 0xe3, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x11, 0x54, 0x0d, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0xb5, 0x00, 0xe5, 0x00, - 0x04, 0x00, 0x00, 0x00, 0xe5, 0x85, 0x2f, 0x3d, 0x00, 0x00, 0x00, - 0x00, 0x66, 0x17, 0x27, 0xbd, 0xaf, 0xe9, 0x19, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x66, 0x17, 0x27, 0xbd, 0xe5, 0x85, 0x2f, 0x3d, 0x00, - 0x00, 0x00, 0x00, 0x47, 0xe4, 0x37, 0x3f, 0xaf, 0xe9, 0x19, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x47, 0xe4, 0x37, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xe6, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0xe7, 0x00, 0x04, 0x00, 0x00, 0x00, 0xb8, 0x3b, - 0xf3, 0x3e, 0x51, 0x67, 0x36, 0x3f, 0xc8, 0xcd, 0x10, 0x3f, 0x51, - 0x67, 0x36, 0x3f, 0xb8, 0x3b, 0xf3, 0x3e, 0x6c, 0xed, 0x55, 0x3f, - 0xc8, 0xcd, 0x10, 0x3f, 0x6c, 0xed, 0x55, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0xe8, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0xb6, - 0x00, 0xe9, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x06, 0x27, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xea, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, - 0xb7, 0x00, 0xeb, 0x00, 0x04, 0x00, 0x00, 0x00, 0xbb, 0x0b, 0x74, - 0x3d, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x09, 0x32, - 0x1e, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xbb, - 0x0b, 0x74, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, - 0x09, 0x32, 0x1e, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0xed, 0x00, 0x04, 0x00, - 0x00, 0x00, 0xe3, 0xc7, 0x60, 0x3f, 0x64, 0x74, 0xf0, 0x3e, 0xcf, - 0xf7, 0x77, 0x3f, 0x64, 0x74, 0xf0, 0x3e, 0xe3, 0xc7, 0x60, 0x3f, - 0x6f, 0x0e, 0x17, 0x3f, 0xcf, 0xf7, 0x77, 0x3f, 0x6f, 0x0e, 0x17, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0xee, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, - 0x00, 0x79, 0x00, 0xb8, 0x00, 0xef, 0x00, 0x01, 0x00, 0x00, 0x00, - 0xf2, 0x96, 0x2f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, - 0x00, 0x00, 0x80, 0x00, 0xb9, 0x00, 0xf1, 0x00, 0x04, 0x00, 0x00, - 0x00, 0x53, 0x27, 0x8b, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, - 0x04, 0xbd, 0xa9, 0x83, 0x4c, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x7b, - 0xd4, 0x04, 0xbd, 0x53, 0x27, 0x8b, 0x3d, 0x00, 0x00, 0x00, 0x00, - 0x12, 0xc0, 0x35, 0x3f, 0xa9, 0x83, 0x4c, 0x3e, 0x00, 0x00, 0x00, - 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf2, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0xf3, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3b, 0xfe, 0xc3, 0x3e, 0x11, - 0xab, 0x13, 0x3f, 0x07, 0xf0, 0xce, 0x3e, 0x11, 0xab, 0x13, 0x3f, - 0x3b, 0xfe, 0xc3, 0x3e, 0x4e, 0x7f, 0x32, 0x3f, 0x07, 0xf0, 0xce, - 0x3e, 0x4e, 0x7f, 0x32, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xf4, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, - 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0xba, 0x00, 0xf5, 0x00, - 0x01, 0x00, 0x00, 0x00, 0xa6, 0x0b, 0x89, 0x3e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf6, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0xbb, 0x00, 0xf7, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x7a, 0x91, 0x3c, 0x00, 0x00, - 0x00, 0x00, 0x52, 0x5a, 0x49, 0xbd, 0xaa, 0x0a, 0xcd, 0x3e, 0x00, - 0x00, 0x00, 0x00, 0x52, 0x5a, 0x49, 0xbd, 0x10, 0x7a, 0x91, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0xaa, 0x0a, 0xcd, - 0x3e, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0xf9, 0x00, 0x04, 0x00, 0x00, 0x00, 0xa9, - 0xda, 0x6a, 0x3f, 0x2c, 0x9d, 0x3b, 0x3f, 0x34, 0xbf, 0x7a, 0x3f, - 0x2c, 0x9d, 0x3b, 0x3f, 0xa9, 0xda, 0x6a, 0x3f, 0x46, 0x23, 0x5b, - 0x3f, 0x34, 0xbf, 0x7a, 0x3f, 0x46, 0x23, 0x5b, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0xfa, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, - 0xbc, 0x00, 0xfb, 0x00, 0x01, 0x00, 0x00, 0x00, 0x11, 0x8c, 0xeb, - 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, - 0x00, 0xbd, 0x00, 0xfd, 0x00, 0x04, 0x00, 0x00, 0x00, 0x53, 0x27, - 0x8b, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xce, - 0xc2, 0x26, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, - 0x53, 0x27, 0x8b, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, - 0x3f, 0xce, 0xc2, 0x26, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, - 0x35, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0xff, 0x00, 0x04, - 0x00, 0x00, 0x00, 0xd0, 0x61, 0x46, 0x3f, 0x64, 0x74, 0xf0, 0x3e, - 0x78, 0x9c, 0x5e, 0x3f, 0x64, 0x74, 0xf0, 0x3e, 0xd0, 0x61, 0x46, - 0x3f, 0x6f, 0x0e, 0x17, 0x3f, 0x78, 0x9c, 0x5e, 0x3f, 0x6f, 0x0e, - 0x17, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, - 0x00, 0x00, 0x79, 0x00, 0xbe, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, - 0x00, 0xcd, 0x72, 0x2d, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, - 0x00, 0x00, 0x00, 0x80, 0x00, 0xbf, 0x00, 0x03, 0x01, 0x04, 0x00, - 0x00, 0x00, 0xbb, 0x0b, 0x74, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x7b, - 0xd4, 0x04, 0xbd, 0x82, 0x37, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x7b, 0xd4, 0x04, 0xbd, 0xbb, 0x0b, 0x74, 0x3d, 0x00, 0x00, 0x00, - 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x82, 0x37, 0x00, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x05, 0x01, 0x04, 0x00, 0x00, 0x00, 0xe0, 0x0e, 0x94, 0x3e, - 0x22, 0x52, 0x13, 0x3f, 0x03, 0xb5, 0xb8, 0x3e, 0x22, 0x52, 0x13, - 0x3f, 0xe0, 0x0e, 0x94, 0x3e, 0x5f, 0x26, 0x32, 0x3f, 0x03, 0xb5, - 0xb8, 0x3e, 0x5f, 0x26, 0x32, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x06, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, - 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0xc0, 0x00, 0x07, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x82, 0xe7, 0x06, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc1, 0x00, - 0x09, 0x01, 0x04, 0x00, 0x00, 0x00, 0x53, 0x27, 0x8b, 0x3d, 0x00, - 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x8b, 0xe1, 0x46, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x53, 0x27, 0x8b, - 0x3d, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x8b, 0xe1, - 0x46, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x01, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x0b, 0x01, 0x04, 0x00, 0x00, 0x00, - 0xd2, 0xc5, 0x26, 0x3f, 0x98, 0xc0, 0x15, 0x3f, 0x54, 0x36, 0x44, - 0x3f, 0x98, 0xc0, 0x15, 0x3f, 0xd2, 0xc5, 0x26, 0x3f, 0xd5, 0x94, - 0x34, 0x3f, 0x54, 0x36, 0x44, 0x3f, 0xd5, 0x94, 0x34, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x0c, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, - 0x00, 0xc2, 0x00, 0x0d, 0x01, 0x01, 0x00, 0x00, 0x00, 0xa9, 0x6a, - 0x5a, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x01, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, - 0x80, 0x00, 0xc3, 0x00, 0x0f, 0x01, 0x04, 0x00, 0x00, 0x00, 0xbb, - 0x0b, 0x74, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, - 0x09, 0x32, 0x1e, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, - 0xbd, 0xbb, 0x0b, 0x74, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, - 0x35, 0x3f, 0x09, 0x32, 0x1e, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x12, - 0xc0, 0x35, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x11, 0x01, - 0x04, 0x00, 0x00, 0x00, 0xe0, 0x81, 0xe9, 0x3e, 0xa9, 0x67, 0x15, - 0x3f, 0xdc, 0xf0, 0x0b, 0x3f, 0xa9, 0x67, 0x15, 0x3f, 0xe0, 0x81, - 0xe9, 0x3e, 0xe6, 0x3b, 0x34, 0x3f, 0xdc, 0xf0, 0x0b, 0x3f, 0xe6, - 0x3b, 0x34, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x12, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, - 0x00, 0x00, 0x00, 0x79, 0x00, 0xc4, 0x00, 0x13, 0x01, 0x01, 0x00, - 0x00, 0x00, 0xf2, 0x96, 0x2f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, - 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc5, 0x00, 0x15, 0x01, 0x04, - 0x00, 0x00, 0x00, 0xe7, 0xff, 0xd5, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x52, 0x5a, 0x49, 0xbd, 0x82, 0x53, 0x2f, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x52, 0x5a, 0x49, 0xbd, 0xe7, 0xff, 0xd5, 0x3c, 0x00, 0x00, - 0x00, 0x00, 0x6c, 0x08, 0x3a, 0x3f, 0x82, 0x53, 0x2f, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x6c, 0x08, 0x3a, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x16, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x17, 0x01, 0x04, 0x00, 0x00, 0x00, 0x43, 0x54, 0x4d, - 0x3f, 0x82, 0x39, 0x3a, 0x3f, 0x3e, 0xaf, 0x68, 0x3f, 0x82, 0x39, - 0x3a, 0x3f, 0x43, 0x54, 0x4d, 0x3f, 0x69, 0x71, 0x5a, 0x3f, 0x3e, - 0xaf, 0x68, 0x3f, 0x69, 0x71, 0x5a, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x18, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, - 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0xc6, 0x00, - 0x19, 0x01, 0x01, 0x00, 0x00, 0x00, 0xb7, 0x27, 0x38, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1a, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc7, - 0x00, 0x1b, 0x01, 0x04, 0x00, 0x00, 0x00, 0xbb, 0x0b, 0x74, 0x3d, - 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x55, 0xa1, 0x15, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xbb, 0x0b, - 0x74, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x55, - 0xa1, 0x15, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x1d, 0x01, 0x04, 0x00, 0x00, - 0x00, 0x9d, 0xcf, 0x4a, 0x3c, 0x36, 0x75, 0x0e, 0x3f, 0xec, 0xbb, - 0xc7, 0x3d, 0x36, 0x75, 0x0e, 0x3f, 0x9d, 0xcf, 0x4a, 0x3c, 0x73, - 0x49, 0x2d, 0x3f, 0xec, 0xbb, 0xc7, 0x3d, 0x73, 0x49, 0x2d, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x1e, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, - 0x79, 0x00, 0xc8, 0x00, 0x1f, 0x01, 0x01, 0x00, 0x00, 0x00, 0x8a, - 0x75, 0x1e, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, - 0x00, 0x80, 0x00, 0xc9, 0x00, 0x21, 0x01, 0x04, 0x00, 0x00, 0x00, - 0xe7, 0xff, 0xd5, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x03, 0xb0, 0x21, - 0xbe, 0x82, 0x53, 0x2f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x03, 0xb0, - 0x21, 0xbe, 0xe7, 0xff, 0xd5, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x6c, - 0x08, 0x3a, 0x3f, 0x82, 0x53, 0x2f, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x6c, 0x08, 0x3a, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x23, - 0x01, 0x04, 0x00, 0x00, 0x00, 0xb8, 0x3b, 0xf3, 0x3e, 0xd7, 0x18, - 0x58, 0x3f, 0xe8, 0xf8, 0x14, 0x3f, 0xd7, 0x18, 0x58, 0x3f, 0xb8, - 0x3b, 0xf3, 0x3e, 0xbb, 0xd4, 0x7c, 0x3f, 0xe8, 0xf8, 0x14, 0x3f, - 0xbb, 0xd4, 0x7c, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x24, 0x01, 0x01, - 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, - 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0xca, 0x00, 0x25, 0x01, 0x01, - 0x00, 0x00, 0x00, 0xb7, 0x27, 0x38, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0xcb, 0x00, 0x27, 0x01, - 0x04, 0x00, 0x00, 0x00, 0xbb, 0x0b, 0x74, 0x3d, 0x00, 0x00, 0x00, - 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x09, 0x32, 0x1e, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xbb, 0x0b, 0x74, 0x3d, 0x00, - 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x09, 0x32, 0x1e, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x28, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x29, 0x01, 0x04, 0x00, 0x00, 0x00, 0x0d, 0x17, - 0xd9, 0x3d, 0x36, 0x75, 0x0e, 0x3f, 0x7b, 0x4b, 0x49, 0x3e, 0x36, - 0x75, 0x0e, 0x3f, 0x0d, 0x17, 0xd9, 0x3d, 0x73, 0x49, 0x2d, 0x3f, - 0x7b, 0x4b, 0x49, 0x3e, 0x73, 0x49, 0x2d, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x2a, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0xcc, - 0x00, 0x2b, 0x01, 0x01, 0x00, 0x00, 0x00, 0xaf, 0x99, 0x20, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x2c, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, - 0xcd, 0x00, 0x2d, 0x01, 0x04, 0x00, 0x00, 0x00, 0x10, 0x7a, 0x91, - 0x3c, 0x00, 0x00, 0x00, 0x00, 0x52, 0x5a, 0x49, 0xbd, 0xb8, 0x5b, - 0x02, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x52, 0x5a, 0x49, 0xbd, 0x10, - 0x7a, 0x91, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x08, 0x3a, 0x3f, - 0xb8, 0x5b, 0x02, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x08, 0x3a, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x2f, 0x01, 0x04, 0x00, - 0x00, 0x00, 0x43, 0x54, 0x4d, 0x3f, 0xd4, 0x9c, 0x5c, 0x3f, 0xcb, - 0xbc, 0x61, 0x3f, 0xd4, 0x9c, 0x5c, 0x3f, 0x43, 0x54, 0x4d, 0x3f, - 0xbb, 0xd4, 0x7c, 0x3f, 0xcb, 0xbc, 0x61, 0x3f, 0xbb, 0xd4, 0x7c, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x30, 0x01, 0x01, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, - 0x00, 0x79, 0x00, 0xce, 0x00, 0x31, 0x01, 0x01, 0x00, 0x00, 0x00, - 0xdc, 0x2f, 0x0b, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, - 0x00, 0x00, 0x80, 0x00, 0xcf, 0x00, 0x33, 0x01, 0x04, 0x00, 0x00, - 0x00, 0x9f, 0xe8, 0x19, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, - 0x04, 0xbd, 0xce, 0xc2, 0x26, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x7b, - 0xd4, 0x04, 0xbd, 0x9f, 0xe8, 0x19, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0xdc, 0x9b, 0x33, 0x3f, 0xce, 0xc2, 0x26, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0xdc, 0x9b, 0x33, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x34, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x35, 0x01, 0x04, 0x00, 0x00, 0x00, 0xf6, 0x61, 0xc5, 0x3e, 0x90, - 0x82, 0xa7, 0x3e, 0x53, 0xb4, 0xfa, 0x3e, 0x90, 0x82, 0xa7, 0x3e, - 0xf6, 0x61, 0xc5, 0x3e, 0x2d, 0x79, 0xe4, 0x3e, 0x53, 0xb4, 0xfa, - 0x3e, 0x2d, 0x79, 0xe4, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x36, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, - 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0xd0, 0x00, 0x37, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x98, 0x4e, 0x2b, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0xd1, 0x00, 0x39, - 0x01, 0x04, 0x00, 0x00, 0x00, 0x53, 0x27, 0x8b, 0x3d, 0x00, 0x00, - 0x00, 0x00, 0x52, 0x5a, 0x49, 0xbd, 0x8b, 0xc5, 0x17, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x52, 0x5a, 0x49, 0xbd, 0x53, 0x27, 0x8b, 0x3d, - 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x8b, 0xc5, 0x17, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3a, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x3b, 0x01, 0x04, 0x00, 0x00, 0x00, 0xe0, - 0x0e, 0x94, 0x3e, 0xca, 0x51, 0x34, 0x3f, 0x65, 0xa7, 0xbf, 0x3e, - 0xca, 0x51, 0x34, 0x3f, 0xe0, 0x0e, 0x94, 0x3e, 0xe4, 0xd7, 0x53, - 0x3f, 0x65, 0xa7, 0xbf, 0x3e, 0xe4, 0xd7, 0x53, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x3c, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, - 0xd2, 0x00, 0x3d, 0x01, 0x01, 0x00, 0x00, 0x00, 0x98, 0x4e, 0x2b, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3e, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, - 0x00, 0xd3, 0x00, 0x3f, 0x01, 0x04, 0x00, 0x00, 0x00, 0x8b, 0x5d, - 0xf0, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x99, - 0x9e, 0x24, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, - 0x8b, 0x5d, 0xf0, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, - 0x3f, 0x99, 0x9e, 0x24, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, - 0x35, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x41, 0x01, 0x04, - 0x00, 0x00, 0x00, 0xc3, 0xf5, 0x5c, 0x3f, 0x14, 0x75, 0xae, 0x3e, - 0xcf, 0xf7, 0x77, 0x3f, 0x14, 0x75, 0xae, 0x3e, 0xc3, 0xf5, 0x5c, - 0x3f, 0x8f, 0x1d, 0xec, 0x3e, 0xcf, 0xf7, 0x77, 0x3f, 0x8f, 0x1d, - 0xec, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, - 0x00, 0x00, 0x79, 0x00, 0xd4, 0x00, 0x43, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x09, 0xe2, 0x24, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x01, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, - 0x00, 0x00, 0x00, 0x80, 0x00, 0xd5, 0x00, 0x45, 0x01, 0x04, 0x00, - 0x00, 0x00, 0x8b, 0x5d, 0xf0, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x7b, - 0xd4, 0x04, 0xbd, 0xa1, 0x48, 0x6b, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x7b, 0xd4, 0x04, 0xbd, 0x8b, 0x5d, 0xf0, 0xbb, 0x00, 0x00, 0x00, - 0x00, 0x12, 0xc0, 0x35, 0x3f, 0xa1, 0x48, 0x6b, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x46, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x47, 0x01, 0x04, 0x00, 0x00, 0x00, 0xd7, 0xa5, 0x02, 0x3f, - 0x90, 0x82, 0xa7, 0x3e, 0x64, 0x1e, 0x29, 0x3f, 0x90, 0x82, 0xa7, - 0x3e, 0xd7, 0xa5, 0x02, 0x3f, 0x0a, 0x2b, 0xe5, 0x3e, 0x64, 0x1e, - 0x29, 0x3f, 0x0a, 0x2b, 0xe5, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x48, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, - 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0xd6, 0x00, 0x49, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x11, 0x8c, 0x6b, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x4a, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0xd7, 0x00, - 0x4b, 0x01, 0x04, 0x00, 0x00, 0x00, 0x8b, 0x5d, 0xf0, 0xbb, 0x00, - 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x99, 0x9e, 0x24, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x8b, 0x5d, 0xf0, - 0xbb, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x99, 0x9e, - 0x24, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x01, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x4d, 0x01, 0x04, 0x00, 0x00, 0x00, - 0x67, 0x2a, 0x04, 0x3e, 0x1c, 0xeb, 0xda, 0x3e, 0x98, 0x32, 0x70, - 0x3e, 0x1c, 0xeb, 0xda, 0x3e, 0x67, 0x2a, 0x04, 0x3e, 0xcb, 0x49, - 0x0c, 0x3f, 0x98, 0x32, 0x70, 0x3e, 0xcb, 0x49, 0x0c, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x4e, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, - 0x00, 0xd8, 0x00, 0x4f, 0x01, 0x01, 0x00, 0x00, 0x00, 0x09, 0xe2, - 0x24, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x01, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, - 0x80, 0x00, 0xd9, 0x00, 0x51, 0x01, 0x04, 0x00, 0x00, 0x00, 0x49, - 0x9d, 0x80, 0xbc, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, - 0xce, 0xc2, 0x26, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, - 0xbd, 0x49, 0x9d, 0x80, 0xbc, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, - 0x35, 0x3f, 0xce, 0xc2, 0x26, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x12, - 0xc0, 0x35, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x53, 0x01, - 0x04, 0x00, 0x00, 0x00, 0x9d, 0xcf, 0x4a, 0x3c, 0x1c, 0xeb, 0xda, - 0x3e, 0x76, 0xf9, 0xf6, 0x3d, 0x1c, 0xeb, 0xda, 0x3e, 0x9d, 0xcf, - 0x4a, 0x3c, 0xcb, 0x49, 0x0c, 0x3f, 0x76, 0xf9, 0xf6, 0x3d, 0xcb, - 0x49, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x54, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, - 0x00, 0x00, 0x00, 0x79, 0x00, 0xda, 0x00, 0x55, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x09, 0xe2, 0x24, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, - 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0xdb, 0x00, 0x57, 0x01, 0x04, - 0x00, 0x00, 0x00, 0xe7, 0xff, 0xd5, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x7b, 0xd4, 0x04, 0xbd, 0xfb, 0x58, 0x11, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xe7, 0xff, 0xd5, 0x3c, 0x00, 0x00, - 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0xfb, 0x58, 0x11, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x58, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x59, 0x01, 0x04, 0x00, 0x00, 0x00, 0xe0, 0x0e, 0x94, - 0x3e, 0xf4, 0xa4, 0xe4, 0x3e, 0x20, 0x0b, 0xc1, 0x3e, 0xf4, 0xa4, - 0xe4, 0x3e, 0xe0, 0x0e, 0x94, 0x3e, 0xb7, 0x26, 0x11, 0x3f, 0x20, - 0x0b, 0xc1, 0x3e, 0xb7, 0x26, 0x11, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x5a, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, - 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0xdc, 0x00, - 0x5b, 0x01, 0x01, 0x00, 0x00, 0x00, 0x1f, 0x2d, 0x1a, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x5c, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0xdd, - 0x00, 0x5d, 0x01, 0x04, 0x00, 0x00, 0x00, 0x53, 0x27, 0x8b, 0x3d, - 0x00, 0x00, 0x00, 0x00, 0x7b, 0x15, 0x91, 0xbe, 0x7b, 0x15, 0x91, - 0x3e, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x15, 0x91, 0xbe, 0x53, 0x27, - 0x8b, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x55, 0xbd, 0x44, 0x3f, 0x7b, - 0x15, 0x91, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x55, 0xbd, 0x44, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x5f, 0x01, 0x04, 0x00, 0x00, - 0x00, 0xb9, 0xa7, 0x7b, 0x3e, 0x63, 0x26, 0x51, 0x3f, 0x0b, 0xb8, - 0x8f, 0x3e, 0x63, 0x26, 0x51, 0x3f, 0xb9, 0xa7, 0x7b, 0x3e, 0xbb, - 0xd4, 0x7c, 0x3f, 0x0b, 0xb8, 0x8f, 0x3e, 0xbb, 0xd4, 0x7c, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x60, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, - 0x79, 0x00, 0xde, 0x00, 0x61, 0x01, 0x01, 0x00, 0x00, 0x00, 0x7c, - 0x9c, 0x91, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, - 0x00, 0x80, 0x00, 0xdf, 0x00, 0x63, 0x01, 0x04, 0x00, 0x00, 0x00, - 0xef, 0x3a, 0x1b, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xa7, 0xca, 0xe7, - 0x3e, 0x51, 0xde, 0xf7, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xa7, 0xca, - 0xe7, 0x3e, 0xef, 0x3a, 0x1b, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x12, - 0xc0, 0x35, 0x3f, 0x51, 0xde, 0xf7, 0x3e, 0x00, 0x00, 0x00, 0x00, - 0x12, 0xc0, 0x35, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x65, - 0x01, 0x04, 0x00, 0x00, 0x00, 0xfa, 0x29, 0x86, 0x3e, 0x4d, 0xa3, - 0x89, 0x3e, 0x21, 0xc8, 0xa1, 0x3e, 0x4d, 0xa3, 0x89, 0x3e, 0xfa, - 0x29, 0x86, 0x3e, 0xac, 0x00, 0x9f, 0x3e, 0x21, 0xc8, 0xa1, 0x3e, - 0xac, 0x00, 0x9f, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x66, 0x01, 0x01, - 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, - 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0xe0, 0x00, 0x67, 0x01, 0x01, - 0x00, 0x00, 0x00, 0x9b, 0xad, 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0xe1, 0x00, 0x69, 0x01, - 0x04, 0x00, 0x00, 0x00, 0x8b, 0x5d, 0xf0, 0xbb, 0x00, 0x00, 0x00, - 0x00, 0x7b, 0x15, 0x91, 0xbe, 0x7f, 0x14, 0x55, 0x3e, 0x00, 0x00, - 0x00, 0x00, 0x7b, 0x15, 0x91, 0xbe, 0x8b, 0x5d, 0xf0, 0xbb, 0x00, - 0x00, 0x00, 0x00, 0x55, 0xbd, 0x44, 0x3f, 0x7f, 0x14, 0x55, 0x3e, - 0x00, 0x00, 0x00, 0x00, 0x55, 0xbd, 0x44, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x6a, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x6b, 0x01, 0x04, 0x00, 0x00, 0x00, 0xb1, 0x31, - 0x4f, 0x3e, 0x63, 0x26, 0x51, 0x3f, 0x0d, 0xfa, 0x72, 0x3e, 0x63, - 0x26, 0x51, 0x3f, 0xb1, 0x31, 0x4f, 0x3e, 0xbb, 0xd4, 0x7c, 0x3f, - 0x0d, 0xfa, 0x72, 0x3e, 0xbb, 0xd4, 0x7c, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x6c, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0xe2, - 0x00, 0x6d, 0x01, 0x01, 0x00, 0x00, 0x00, 0x7c, 0x9c, 0x91, 0x3e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x6e, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, - 0xe3, 0x00, 0x6f, 0x01, 0x04, 0x00, 0x00, 0x00, 0xd0, 0xc8, 0x51, - 0x3d, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x34, 0xfd, 0x3e, 0x13, 0x2c, - 0xde, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x34, 0xfd, 0x3e, 0xd0, - 0xc8, 0x51, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, - 0x13, 0x2c, 0xde, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x71, 0x01, 0x04, 0x00, - 0x00, 0x00, 0x11, 0x1e, 0x69, 0x3f, 0x19, 0x2b, 0x80, 0x3d, 0x9b, - 0x02, 0x79, 0x3f, 0x19, 0x2b, 0x80, 0x3d, 0x11, 0x1e, 0x69, 0x3f, - 0xec, 0xbb, 0xc7, 0x3d, 0x9b, 0x02, 0x79, 0x3f, 0xec, 0xbb, 0xc7, - 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x72, 0x01, 0x01, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, - 0x00, 0x79, 0x00, 0xe4, 0x00, 0x73, 0x01, 0x01, 0x00, 0x00, 0x00, - 0x9b, 0xad, 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, - 0x00, 0x00, 0x80, 0x00, 0xe5, 0x00, 0x75, 0x01, 0x04, 0x00, 0x00, - 0x00, 0x53, 0x27, 0x8b, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xdf, - 0x11, 0x3f, 0xa9, 0x83, 0x4c, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xdb, - 0xdf, 0x11, 0x3f, 0x53, 0x27, 0x8b, 0x3d, 0x00, 0x00, 0x00, 0x00, - 0xdc, 0x9b, 0x33, 0x3f, 0xa9, 0x83, 0x4c, 0x3e, 0x00, 0x00, 0x00, - 0x00, 0xdc, 0x9b, 0x33, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x76, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x77, 0x01, 0x04, 0x00, 0x00, 0x00, 0xf7, 0x1e, 0xa6, 0x3e, 0x90, - 0x82, 0xa7, 0x3e, 0xa1, 0x10, 0xb1, 0x3e, 0x90, 0x82, 0xa7, 0x3e, - 0xf7, 0x1e, 0xa6, 0x3e, 0x5c, 0x74, 0xb2, 0x3e, 0xa1, 0x10, 0xb1, - 0x3e, 0x5c, 0x74, 0xb2, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x78, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, - 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0xe6, 0x00, 0x79, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x11, 0x54, 0x8d, 0x3e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7a, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0xe7, 0x00, 0x7b, - 0x01, 0x04, 0x00, 0x00, 0x00, 0x53, 0x27, 0x8b, 0x3d, 0x00, 0x00, - 0x00, 0x00, 0xa7, 0xca, 0xe7, 0x3e, 0x7f, 0x14, 0x55, 0x3e, 0x00, - 0x00, 0x00, 0x00, 0xa7, 0xca, 0xe7, 0x3e, 0x53, 0x27, 0x8b, 0x3d, - 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x7f, 0x14, 0x55, - 0x3e, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7c, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x7d, 0x01, 0x04, 0x00, 0x00, 0x00, 0xfa, - 0x29, 0x86, 0x3e, 0xec, 0xdd, 0x5f, 0x3e, 0xa3, 0xcd, 0x91, 0x3e, - 0xec, 0xdd, 0x5f, 0x3e, 0xfa, 0x29, 0x86, 0x3e, 0x77, 0x4c, 0x85, - 0x3e, 0xa3, 0xcd, 0x91, 0x3e, 0x77, 0x4c, 0x85, 0x3e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x7e, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, - 0xe8, 0x00, 0x7f, 0x01, 0x01, 0x00, 0x00, 0x00, 0x11, 0x54, 0x8d, - 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, - 0x00, 0xe9, 0x00, 0x81, 0x01, 0x04, 0x00, 0x00, 0x00, 0x10, 0x7a, - 0x91, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x66, 0x17, 0x27, 0xbd, 0xf4, - 0x52, 0xd1, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x66, 0x17, 0x27, 0xbd, - 0x10, 0x7a, 0x91, 0x3c, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x95, 0xf3, - 0x3e, 0xf4, 0x52, 0xd1, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x95, - 0xf3, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x01, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x83, 0x01, 0x04, - 0x00, 0x00, 0x00, 0x68, 0x3c, 0xb1, 0x3e, 0xe3, 0x34, 0xe4, 0x3d, - 0x5a, 0xb7, 0xd1, 0x3e, 0xe3, 0x34, 0xe4, 0x3d, 0x68, 0x3c, 0xb1, - 0x3e, 0xc0, 0xe7, 0x47, 0x3e, 0x5a, 0xb7, 0xd1, 0x3e, 0xc0, 0xe7, - 0x47, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x84, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, - 0x00, 0x00, 0x79, 0x00, 0xea, 0x00, 0x85, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x7c, 0xd4, 0xef, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x01, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, - 0x00, 0x00, 0x00, 0x80, 0x00, 0xeb, 0x00, 0x87, 0x01, 0x04, 0x00, - 0x00, 0x00, 0xd0, 0xc8, 0x51, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x66, - 0x17, 0x27, 0xbd, 0x51, 0xde, 0xf7, 0x3e, 0x00, 0x00, 0x00, 0x00, - 0x66, 0x17, 0x27, 0xbd, 0xd0, 0xc8, 0x51, 0x3d, 0x00, 0x00, 0x00, - 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x51, 0xde, 0xf7, 0x3e, 0x00, 0x00, - 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x88, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x89, 0x01, 0x04, 0x00, 0x00, 0x00, 0xa9, 0xda, 0x6a, 0x3f, - 0x95, 0x44, 0x1a, 0x3f, 0xbb, 0xd4, 0x7c, 0x3f, 0x95, 0x44, 0x1a, - 0x3f, 0xa9, 0xda, 0x6a, 0x3f, 0xc1, 0x71, 0x39, 0x3f, 0xbb, 0xd4, - 0x7c, 0x3f, 0xc1, 0x71, 0x39, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8a, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, - 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0xec, 0x00, 0x8b, - 0x01, 0x01, 0x00, 0x00, 0x00, 0xf2, 0x7a, 0x00, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x8c, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0xed, 0x00, - 0x8d, 0x01, 0x04, 0x00, 0x00, 0x00, 0x9f, 0xe8, 0x19, 0x3c, 0x00, - 0x00, 0x00, 0x00, 0x66, 0x17, 0x27, 0xbd, 0xc9, 0xe3, 0xd9, 0x3e, - 0x00, 0x00, 0x00, 0x00, 0x66, 0x17, 0x27, 0xbd, 0x9f, 0xe8, 0x19, - 0x3c, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x95, 0xf3, 0x3e, 0xc9, 0xe3, - 0xd9, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x95, 0xf3, 0x3e, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x01, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x8f, 0x01, 0x04, 0x00, 0x00, 0x00, - 0x30, 0x0e, 0xd6, 0x3e, 0xe3, 0x34, 0xe4, 0x3d, 0xba, 0x9e, 0xf8, - 0x3e, 0xe3, 0x34, 0xe4, 0x3d, 0x30, 0x0e, 0xd6, 0x3e, 0xc0, 0xe7, - 0x47, 0x3e, 0xba, 0x9e, 0xf8, 0x3e, 0xc0, 0xe7, 0x47, 0x3e, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x90, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, - 0x00, 0xee, 0x00, 0x91, 0x01, 0x01, 0x00, 0x00, 0x00, 0xf2, 0xb2, - 0xde, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x01, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, - 0x80, 0x00, 0xef, 0x00, 0x93, 0x01, 0x04, 0x00, 0x00, 0x00, 0x9f, - 0xe8, 0x19, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x66, 0x17, 0x27, 0xbd, - 0x7e, 0x74, 0xe2, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x66, 0x17, 0x27, - 0xbd, 0x9f, 0xe8, 0x19, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, - 0x35, 0x3f, 0x7e, 0x74, 0xe2, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x12, - 0xc0, 0x35, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x95, 0x01, - 0x04, 0x00, 0x00, 0x00, 0x9d, 0xcf, 0x4a, 0x3c, 0xde, 0x74, 0x2f, - 0x3f, 0xb7, 0x2a, 0xa9, 0x3d, 0xde, 0x74, 0x2f, 0x3f, 0x9d, 0xcf, - 0x4a, 0x3c, 0x0a, 0xa2, 0x4e, 0x3f, 0xb7, 0x2a, 0xa9, 0x3d, 0x0a, - 0xa2, 0x4e, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x96, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, - 0x00, 0x00, 0x00, 0x79, 0x00, 0xf0, 0x00, 0x97, 0x01, 0x01, 0x00, - 0x00, 0x00, 0xf2, 0x7a, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, - 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0xf1, 0x00, 0x99, 0x01, 0x04, - 0x00, 0x00, 0x00, 0x9f, 0xe8, 0x19, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x66, 0x17, 0x27, 0xbd, 0xc9, 0xe3, 0xd9, 0x3e, 0x00, 0x00, 0x00, - 0x00, 0x66, 0x17, 0x27, 0xbd, 0x9f, 0xe8, 0x19, 0x3c, 0x00, 0x00, - 0x00, 0x00, 0xe6, 0x95, 0xf3, 0x3e, 0xc9, 0xe3, 0xd9, 0x3e, 0x00, - 0x00, 0x00, 0x00, 0xe6, 0x95, 0xf3, 0x3e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x9a, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x9b, 0x01, 0x04, 0x00, 0x00, 0x00, 0x3b, 0xc8, 0x3f, - 0x3f, 0x93, 0xa8, 0xf7, 0x3d, 0x80, 0x10, 0x51, 0x3f, 0x93, 0xa8, - 0xf7, 0x3d, 0x3b, 0xc8, 0x3f, 0x3f, 0x98, 0xa1, 0x51, 0x3e, 0x80, - 0x10, 0x51, 0x3f, 0x98, 0xa1, 0x51, 0x3e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x9c, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, - 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0xf2, 0x00, - 0x9d, 0x01, 0x01, 0x00, 0x00, 0x00, 0xf2, 0xb2, 0xde, 0x3e, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x9e, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0xf3, - 0x00, 0x9f, 0x01, 0x04, 0x00, 0x00, 0x00, 0x8b, 0x5d, 0xf0, 0xbb, - 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xd7, 0xa0, 0xb7, - 0x3e, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x8b, 0x5d, - 0xf0, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x47, 0xe4, 0x37, 0x3f, 0xd7, - 0xa0, 0xb7, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x47, 0xe4, 0x37, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0xa1, 0x01, 0x04, 0x00, 0x00, - 0x00, 0x61, 0xa5, 0x62, 0x3e, 0xcd, 0xcd, 0x2f, 0x3f, 0x0b, 0xb8, - 0x8f, 0x3e, 0xcd, 0xcd, 0x2f, 0x3f, 0x61, 0xa5, 0x62, 0x3e, 0xf8, - 0xfa, 0x4e, 0x3f, 0x0b, 0xb8, 0x8f, 0x3e, 0xf8, 0xfa, 0x4e, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0xa2, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, - 0x79, 0x00, 0xf4, 0x00, 0xa3, 0x01, 0x01, 0x00, 0x00, 0x00, 0x30, - 0x2d, 0x9a, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa4, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, - 0x00, 0x80, 0x00, 0xf5, 0x00, 0xa5, 0x01, 0x04, 0x00, 0x00, 0x00, - 0x90, 0xe7, 0x86, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x57, 0x77, - 0xbe, 0x9a, 0x26, 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x57, - 0x77, 0xbe, 0x90, 0xe7, 0x86, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x9c, - 0x4d, 0xef, 0x3e, 0x9a, 0x26, 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x00, - 0x9c, 0x4d, 0xef, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0xa7, - 0x01, 0x04, 0x00, 0x00, 0x00, 0xd4, 0x29, 0x07, 0x3f, 0x6c, 0x95, - 0x50, 0x3e, 0x6c, 0x92, 0x1b, 0x3f, 0x6c, 0x95, 0x50, 0x3e, 0xd4, - 0x29, 0x07, 0x3f, 0xbb, 0x2b, 0xa3, 0x3e, 0x6c, 0x92, 0x1b, 0x3f, - 0xbb, 0x2b, 0xa3, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xa8, 0x01, 0x01, - 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, - 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0xf6, 0x00, 0xa9, 0x01, 0x01, - 0x00, 0x00, 0x00, 0x9b, 0xad, 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0xf7, 0x00, 0xab, 0x01, - 0x04, 0x00, 0x00, 0x00, 0xd0, 0xc8, 0x51, 0x3d, 0x00, 0x00, 0x00, - 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x7e, 0x74, 0xe2, 0x3e, 0x00, 0x00, - 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xd0, 0xc8, 0x51, 0x3d, 0x00, - 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x7e, 0x74, 0xe2, 0x3e, - 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xac, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0xad, 0x01, 0x04, 0x00, 0x00, 0x00, 0xe8, 0xbf, - 0x57, 0x3f, 0xda, 0x39, 0x19, 0x3f, 0x61, 0xfd, 0x67, 0x3f, 0xda, - 0x39, 0x19, 0x3f, 0xe8, 0xbf, 0x57, 0x3f, 0x17, 0x0e, 0x38, 0x3f, - 0x61, 0xfd, 0x67, 0x3f, 0x17, 0x0e, 0x38, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0xae, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0xf8, - 0x00, 0xaf, 0x01, 0x01, 0x00, 0x00, 0x00, 0xf2, 0x7a, 0x00, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xb0, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, - 0xf9, 0x00, 0xb1, 0x01, 0x04, 0x00, 0x00, 0x00, 0xe5, 0x85, 0x2f, - 0x3d, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x6c, 0xd1, - 0x32, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xe5, - 0x85, 0x2f, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x9b, 0x33, 0x3f, - 0x6c, 0xd1, 0x32, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x9b, 0x33, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0xb3, 0x01, 0x04, 0x00, - 0x00, 0x00, 0xd7, 0xa5, 0x02, 0x3f, 0xe0, 0x81, 0xe9, 0x3e, 0xbd, - 0x1e, 0x08, 0x3f, 0xe0, 0x81, 0xe9, 0x3e, 0xd7, 0xa5, 0x02, 0x3f, - 0x3e, 0x3c, 0x13, 0x3f, 0xbd, 0x1e, 0x08, 0x3f, 0x3e, 0x3c, 0x13, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0xb4, 0x01, 0x01, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, - 0x00, 0x79, 0x00, 0xfa, 0x00, 0xb5, 0x01, 0x01, 0x00, 0x00, 0x00, - 0x7c, 0xd4, 0x6f, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb6, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, - 0x00, 0x00, 0x80, 0x00, 0xfb, 0x00, 0xb7, 0x01, 0x04, 0x00, 0x00, - 0x00, 0xff, 0x32, 0xa9, 0xbd, 0x00, 0x00, 0x00, 0x00, 0xbd, 0xc6, - 0x6e, 0xbe, 0xa9, 0x83, 0x4c, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xbd, - 0xc6, 0x6e, 0xbe, 0xff, 0x32, 0xa9, 0xbd, 0x00, 0x00, 0x00, 0x00, - 0xdc, 0x9b, 0x33, 0x3f, 0xa9, 0x83, 0x4c, 0x3e, 0x00, 0x00, 0x00, - 0x00, 0xdc, 0x9b, 0x33, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb8, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0xb9, 0x01, 0x04, 0x00, 0x00, 0x00, 0xe0, 0x0e, 0x94, 0x3e, 0x4f, - 0x03, 0x56, 0x3f, 0xf9, 0x81, 0xab, 0x3e, 0x4f, 0x03, 0x56, 0x3f, - 0xe0, 0x0e, 0x94, 0x3e, 0xbb, 0xd4, 0x7c, 0x3f, 0xf9, 0x81, 0xab, - 0x3e, 0xbb, 0xd4, 0x7c, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xba, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, - 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0xfc, 0x00, 0xbb, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x5d, 0xc3, 0x84, 0x3e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xbc, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0xfd, 0x00, 0xbd, - 0x01, 0x04, 0x00, 0x00, 0x00, 0xd0, 0xc8, 0x51, 0x3d, 0x00, 0x00, - 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xe6, 0x95, 0xf3, 0x3e, 0x00, - 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xd0, 0xc8, 0x51, 0x3d, - 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0xe6, 0x95, 0xf3, - 0x3e, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xbe, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0xbf, 0x01, 0x04, 0x00, 0x00, 0x00, 0x33, - 0xf9, 0x12, 0x3f, 0x98, 0xc0, 0x15, 0x3f, 0x67, 0x9a, 0x24, 0x3f, - 0x98, 0xc0, 0x15, 0x3f, 0x33, 0xf9, 0x12, 0x3f, 0xd5, 0x94, 0x34, - 0x3f, 0x67, 0x9a, 0x24, 0x3f, 0xd5, 0x94, 0x34, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0xc0, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, - 0xfe, 0x00, 0xc1, 0x01, 0x01, 0x00, 0x00, 0x00, 0xc5, 0x1c, 0xf4, - 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc2, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, - 0x00, 0xff, 0x00, 0xc3, 0x01, 0x04, 0x00, 0x00, 0x00, 0xd0, 0xc8, - 0x51, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x6c, - 0xd1, 0x32, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, - 0xd0, 0xc8, 0x51, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, - 0x3f, 0x6c, 0xd1, 0x32, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, - 0x35, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc4, 0x01, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0xc5, 0x01, 0x04, - 0x00, 0x00, 0x00, 0x86, 0x74, 0x50, 0x3f, 0xda, 0x39, 0x19, 0x3f, - 0x7d, 0x94, 0x55, 0x3f, 0xda, 0x39, 0x19, 0x3f, 0x86, 0x74, 0x50, - 0x3f, 0x17, 0x0e, 0x38, 0x3f, 0x7d, 0x94, 0x55, 0x3f, 0x17, 0x0e, - 0x38, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xc6, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, - 0x00, 0x00, 0x79, 0x00, 0x00, 0x01, 0xc7, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x7c, 0xd4, 0x6f, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x01, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, - 0x00, 0x00, 0x00, 0x80, 0x00, 0x01, 0x01, 0xc9, 0x01, 0x04, 0x00, - 0x00, 0x00, 0xd0, 0xc8, 0x51, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x7b, - 0xd4, 0x04, 0xbd, 0x6c, 0x08, 0x3a, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x7b, 0xd4, 0x04, 0xbd, 0xd0, 0xc8, 0x51, 0x3d, 0x00, 0x00, 0x00, - 0x00, 0x9c, 0x4d, 0xef, 0x3e, 0x6c, 0x08, 0x3a, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x9c, 0x4d, 0xef, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xca, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0xcb, 0x01, 0x04, 0x00, 0x00, 0x00, 0x9d, 0xcf, 0x4a, 0x3c, - 0xb3, 0xbe, 0xb7, 0x3d, 0xec, 0xc0, 0xf9, 0x3d, 0xb3, 0xbe, 0xb7, - 0x3d, 0x9d, 0xcf, 0x4a, 0x3c, 0x26, 0xe5, 0x2e, 0x3e, 0xec, 0xc0, - 0xf9, 0x3d, 0x26, 0xe5, 0x2e, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xcc, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, - 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0x02, 0x01, 0xcd, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x30, 0x49, 0x49, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xce, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0x03, 0x01, - 0xcf, 0x01, 0x04, 0x00, 0x00, 0x00, 0xd0, 0xc8, 0x51, 0x3d, 0x00, - 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x7e, 0x74, 0xe2, 0x3e, - 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xd0, 0xc8, 0x51, - 0x3d, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x4d, 0xef, 0x3e, 0x7e, 0x74, - 0xe2, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x4d, 0xef, 0x3e, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x01, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0xd1, 0x01, 0x04, 0x00, 0x00, 0x00, - 0xac, 0xe3, 0x10, 0x3f, 0xce, 0xc3, 0xe9, 0x3d, 0x25, 0x21, 0x21, - 0x3f, 0xce, 0xc3, 0xe9, 0x3d, 0xac, 0xe3, 0x10, 0x3f, 0xc0, 0xe7, - 0x47, 0x3e, 0x25, 0x21, 0x21, 0x3f, 0xc0, 0xe7, 0x47, 0x3e, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0xd2, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, - 0x00, 0x04, 0x01, 0xd3, 0x01, 0x01, 0x00, 0x00, 0x00, 0xf2, 0x7a, - 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0x01, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, - 0x80, 0x00, 0x05, 0x01, 0xd5, 0x01, 0x04, 0x00, 0x00, 0x00, 0x9f, - 0xe8, 0x19, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x66, 0x17, 0x27, 0xbd, - 0xe6, 0x95, 0xf3, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x66, 0x17, 0x27, - 0xbd, 0x9f, 0xe8, 0x19, 0x3c, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x95, - 0xf3, 0x3e, 0xe6, 0x95, 0xf3, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xe6, - 0x95, 0xf3, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0xd7, 0x01, - 0x04, 0x00, 0x00, 0x00, 0xfa, 0x29, 0x86, 0x3e, 0xe3, 0x34, 0xe4, - 0x3d, 0x93, 0xe5, 0xac, 0x3e, 0xe3, 0x34, 0xe4, 0x3d, 0xfa, 0x29, - 0x86, 0x3e, 0xc0, 0xe7, 0x47, 0x3e, 0x93, 0xe5, 0xac, 0x3e, 0xc0, - 0xe7, 0x47, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xd8, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, - 0x00, 0x00, 0x00, 0x79, 0x00, 0x06, 0x01, 0xd9, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x9b, 0xad, 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xda, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, - 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0x07, 0x01, 0xdb, 0x01, 0x04, - 0x00, 0x00, 0x00, 0xd0, 0xc8, 0x51, 0x3d, 0x00, 0x00, 0x00, 0x00, - 0xe7, 0x35, 0x66, 0xbe, 0x51, 0xde, 0xf7, 0x3e, 0x00, 0x00, 0x00, - 0x00, 0xe7, 0x35, 0x66, 0xbe, 0xd0, 0xc8, 0x51, 0x3d, 0x00, 0x00, - 0x00, 0x00, 0x9c, 0x4d, 0xef, 0x3e, 0x51, 0xde, 0xf7, 0x3e, 0x00, - 0x00, 0x00, 0x00, 0x9c, 0x4d, 0xef, 0x3e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xdc, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0xdd, 0x01, 0x04, 0x00, 0x00, 0x00, 0x38, 0xdc, 0xc2, - 0x3d, 0xd1, 0x92, 0x37, 0x3e, 0x7e, 0x56, 0x29, 0x3e, 0xd1, 0x92, - 0x37, 0x3e, 0x38, 0xdc, 0xc2, 0x3d, 0xd4, 0x46, 0x95, 0x3e, 0x7e, - 0x56, 0x29, 0x3e, 0xd4, 0x46, 0x95, 0x3e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0xde, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, - 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0x08, 0x01, - 0xdf, 0x01, 0x01, 0x00, 0x00, 0x00, 0xf2, 0x7a, 0x00, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xe0, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0x09, - 0x01, 0xe1, 0x01, 0x04, 0x00, 0x00, 0x00, 0x9f, 0xe8, 0x19, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0xe7, 0x35, 0x66, 0xbe, 0x7e, 0x74, 0xe2, - 0x3e, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x35, 0x66, 0xbe, 0x9f, 0xe8, - 0x19, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x4d, 0xef, 0x3e, 0x7e, - 0x74, 0xe2, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x4d, 0xef, 0x3e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe2, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0xe3, 0x01, 0x04, 0x00, 0x00, - 0x00, 0x83, 0xf8, 0x54, 0x3f, 0x38, 0xdc, 0xc2, 0x3d, 0xa6, 0xf2, - 0x66, 0x3f, 0x38, 0xdc, 0xc2, 0x3d, 0x83, 0xf8, 0x54, 0x3f, 0xcb, - 0x68, 0x54, 0x3e, 0xa6, 0xf2, 0x66, 0x3f, 0xcb, 0x68, 0x54, 0x3e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0xe4, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, - 0x79, 0x00, 0x0a, 0x01, 0xe5, 0x01, 0x01, 0x00, 0x00, 0x00, 0xf2, - 0x7a, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x0b, 0x01, 0xe7, 0x01, 0x04, 0x00, 0x00, 0x00, - 0xd0, 0xc8, 0x51, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, - 0xbd, 0xb9, 0xc7, 0xaa, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, - 0x04, 0xbd, 0xd0, 0xc8, 0x51, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x9c, - 0x4d, 0xef, 0x3e, 0xb9, 0xc7, 0xaa, 0x3e, 0x00, 0x00, 0x00, 0x00, - 0x9c, 0x4d, 0xef, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0xe9, - 0x01, 0x04, 0x00, 0x00, 0x00, 0xf7, 0x1e, 0xa6, 0x3e, 0x32, 0xcb, - 0xb6, 0x3e, 0xef, 0x91, 0xbd, 0x3e, 0x32, 0xcb, 0xb6, 0x3e, 0xf7, - 0x1e, 0xa6, 0x3e, 0x1e, 0x4e, 0xe0, 0x3e, 0xef, 0x91, 0xbd, 0x3e, - 0x1e, 0x4e, 0xe0, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xea, 0x01, 0x01, - 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, - 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0x0c, 0x01, 0xeb, 0x01, 0x01, - 0x00, 0x00, 0x00, 0x98, 0x4e, 0xab, 0x3e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0x0d, 0x01, 0xed, 0x01, - 0x04, 0x00, 0x00, 0x00, 0x90, 0xe7, 0x86, 0x3a, 0x00, 0x00, 0x00, - 0x00, 0x66, 0x17, 0x27, 0xbd, 0x21, 0xe9, 0xbb, 0x3e, 0x00, 0x00, - 0x00, 0x00, 0x66, 0x17, 0x27, 0xbd, 0x90, 0xe7, 0x86, 0x3a, 0x00, - 0x00, 0x00, 0x00, 0xe6, 0x95, 0xf3, 0x3e, 0x21, 0xe9, 0xbb, 0x3e, - 0x00, 0x00, 0x00, 0x00, 0xe6, 0x95, 0xf3, 0x3e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xee, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0xef, 0x01, 0x04, 0x00, 0x00, 0x00, 0xe4, 0x67, - 0x33, 0x3e, 0x9f, 0xad, 0xab, 0x3e, 0x98, 0x32, 0x70, 0x3e, 0x9f, - 0xad, 0xab, 0x3e, 0xe4, 0x67, 0x33, 0x3e, 0x46, 0x94, 0xd6, 0x3e, - 0x98, 0x32, 0x70, 0x3e, 0x46, 0x94, 0xd6, 0x3e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0xf0, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0x0e, - 0x01, 0xf1, 0x01, 0x01, 0x00, 0x00, 0x00, 0x6b, 0xb8, 0xc0, 0x3e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xf2, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, - 0x0f, 0x01, 0xf3, 0x01, 0x04, 0x00, 0x00, 0x00, 0x8b, 0x5d, 0xf0, - 0xbb, 0x00, 0x00, 0x00, 0x00, 0x66, 0x17, 0x27, 0xbd, 0x23, 0x10, - 0xaf, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x66, 0x17, 0x27, 0xbd, 0x8b, - 0x5d, 0xf0, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x55, 0xa1, 0x15, 0x3f, - 0x23, 0x10, 0xaf, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x55, 0xa1, 0x15, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0xf5, 0x01, 0x04, 0x00, - 0x00, 0x00, 0x11, 0x1e, 0x69, 0x3f, 0x0d, 0x17, 0xd9, 0x3d, 0xf1, - 0x9e, 0x77, 0x3f, 0x0d, 0x17, 0xd9, 0x3d, 0x11, 0x1e, 0x69, 0x3f, - 0xcb, 0x68, 0x54, 0x3e, 0xf1, 0x9e, 0x77, 0x3f, 0xcb, 0x68, 0x54, - 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0xf6, 0x01, 0x01, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, - 0x00, 0x79, 0x00, 0x10, 0x01, 0xf7, 0x01, 0x01, 0x00, 0x00, 0x00, - 0x4c, 0xdf, 0xb3, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, - 0x00, 0x00, 0x80, 0x00, 0x11, 0x01, 0xf9, 0x01, 0x04, 0x00, 0x00, - 0x00, 0xd0, 0xc8, 0x51, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x66, 0x17, - 0x27, 0xbd, 0x7e, 0x74, 0xe2, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x66, - 0x17, 0x27, 0xbd, 0xd0, 0xc8, 0x51, 0x3d, 0x00, 0x00, 0x00, 0x00, - 0x32, 0x05, 0xeb, 0x3e, 0x7e, 0x74, 0xe2, 0x3e, 0x00, 0x00, 0x00, - 0x00, 0x32, 0x05, 0xeb, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xfa, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0xfb, 0x01, 0x04, 0x00, 0x00, 0x00, 0x90, 0xf5, 0xfc, 0x3e, 0xce, - 0xc3, 0xe9, 0x3d, 0x41, 0xb8, 0x0e, 0x3f, 0xce, 0xc3, 0xe9, 0x3d, - 0x90, 0xf5, 0xfc, 0x3e, 0xc0, 0xe7, 0x47, 0x3e, 0x41, 0xb8, 0x0e, - 0x3f, 0xc0, 0xe7, 0x47, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xfc, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, - 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0x12, 0x01, 0xfd, 0x01, - 0x01, 0x00, 0x00, 0x00, 0xf2, 0x7a, 0x00, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xfe, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0x13, 0x01, 0xff, - 0x01, 0x04, 0x00, 0x00, 0x00, 0x8b, 0x5d, 0xf0, 0xbb, 0x00, 0x00, - 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xc7, 0xbc, 0xe6, 0x3e, 0x00, - 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x8b, 0x5d, 0xf0, 0xbb, - 0x00, 0x00, 0x00, 0x00, 0x32, 0x05, 0xeb, 0x3e, 0xc7, 0xbc, 0xe6, - 0x3e, 0x00, 0x00, 0x00, 0x00, 0x32, 0x05, 0xeb, 0x3e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x01, 0x02, 0x04, 0x00, 0x00, 0x00, 0x0b, - 0xb3, 0x1c, 0x3f, 0x03, 0x8f, 0xd4, 0x3c, 0xe9, 0xb7, 0x2f, 0x3f, - 0x03, 0x8f, 0xd4, 0x3c, 0x0b, 0xb3, 0x1c, 0x3f, 0x77, 0x68, 0xd8, - 0x3d, 0xe9, 0xb7, 0x2f, 0x3f, 0x77, 0x68, 0xd8, 0x3d, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, - 0x14, 0x01, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00, 0xc8, 0x43, 0xe7, - 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, - 0x00, 0x15, 0x01, 0x05, 0x02, 0x04, 0x00, 0x00, 0x00, 0x8b, 0x5d, - 0xf0, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x28, - 0x0b, 0x2b, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, - 0x8b, 0x5d, 0xf0, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x32, 0x05, 0xeb, - 0x3e, 0x28, 0x0b, 0x2b, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x32, 0x05, - 0xeb, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x02, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x07, 0x02, 0x04, - 0x00, 0x00, 0x00, 0x90, 0xf5, 0xfc, 0x3e, 0x03, 0x8f, 0xd4, 0x3c, - 0xa0, 0x87, 0x1a, 0x3f, 0x03, 0x8f, 0xd4, 0x3c, 0x90, 0xf5, 0xfc, - 0x3e, 0x77, 0x68, 0xd8, 0x3d, 0xa0, 0x87, 0x1a, 0x3f, 0x77, 0x68, - 0xd8, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x02, 0x01, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, - 0x00, 0x00, 0x79, 0x00, 0x16, 0x01, 0x09, 0x02, 0x01, 0x00, 0x00, - 0x00, 0x98, 0x4e, 0x2b, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x02, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, - 0x00, 0x00, 0x00, 0x80, 0x00, 0x17, 0x01, 0x0b, 0x02, 0x04, 0x00, - 0x00, 0x00, 0x20, 0x23, 0xc5, 0xbc, 0x00, 0x00, 0x00, 0x00, 0x7b, - 0xd4, 0x04, 0xbd, 0x9c, 0x4d, 0xef, 0x3e, 0x00, 0x00, 0x00, 0x00, - 0x7b, 0xd4, 0x04, 0xbd, 0x20, 0x23, 0xc5, 0xbc, 0x00, 0x00, 0x00, - 0x00, 0x32, 0x05, 0xeb, 0x3e, 0x9c, 0x4d, 0xef, 0x3e, 0x00, 0x00, - 0x00, 0x00, 0x32, 0x05, 0xeb, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0c, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x0d, 0x02, 0x04, 0x00, 0x00, 0x00, 0x40, 0xc0, 0x36, 0x3f, - 0x5c, 0x11, 0x06, 0x3d, 0xd8, 0x28, 0x4b, 0x3f, 0x5c, 0x11, 0x06, - 0x3d, 0x40, 0xc0, 0x36, 0x3f, 0x3c, 0x4d, 0xe6, 0x3d, 0xd8, 0x28, - 0x4b, 0x3f, 0x3c, 0x4d, 0xe6, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0e, - 0x02, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, - 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0x18, 0x01, 0x0f, - 0x02, 0x01, 0x00, 0x00, 0x00, 0xc8, 0x43, 0xe7, 0x3e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x10, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0x19, 0x01, - 0x11, 0x02, 0x04, 0x00, 0x00, 0x00, 0x8b, 0x5d, 0xf0, 0xbb, 0x00, - 0x00, 0x00, 0x00, 0xbd, 0xc6, 0x6e, 0xbe, 0xc7, 0xbc, 0xe6, 0x3e, - 0x00, 0x00, 0x00, 0x00, 0xbd, 0xc6, 0x6e, 0xbe, 0x8b, 0x5d, 0xf0, - 0xbb, 0x00, 0x00, 0x00, 0x00, 0x32, 0x05, 0xeb, 0x3e, 0xc7, 0xbc, - 0xe6, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x32, 0x05, 0xeb, 0x3e, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x02, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x13, 0x02, 0x04, 0x00, 0x00, 0x00, - 0x9d, 0xcf, 0x4a, 0x3c, 0xd1, 0x92, 0x37, 0x3e, 0xe1, 0x80, 0xb1, - 0x3d, 0xd1, 0x92, 0x37, 0x3e, 0x9d, 0xcf, 0x4a, 0x3c, 0xd4, 0x46, - 0x95, 0x3e, 0xe1, 0x80, 0xb1, 0x3d, 0xd4, 0x46, 0x95, 0x3e, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x14, 0x02, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, - 0x00, 0x1a, 0x01, 0x15, 0x02, 0x01, 0x00, 0x00, 0x00, 0xc8, 0x43, - 0xe7, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x02, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, - 0x80, 0x00, 0x1b, 0x01, 0x17, 0x02, 0x04, 0x00, 0x00, 0x00, 0x90, - 0xe7, 0x86, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, - 0xf4, 0x52, 0xd1, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, - 0xbd, 0x90, 0xe7, 0x86, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x32, 0x05, - 0xeb, 0x3e, 0xf4, 0x52, 0xd1, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x32, - 0x05, 0xeb, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x02, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x19, 0x02, - 0x04, 0x00, 0x00, 0x00, 0x29, 0x04, 0x32, 0x3e, 0xf8, 0xa5, 0xde, - 0x3d, 0x83, 0xc1, 0x75, 0x3e, 0xf8, 0xa5, 0xde, 0x3d, 0x29, 0x04, - 0x32, 0x3e, 0x1b, 0xf5, 0x40, 0x3e, 0x83, 0xc1, 0x75, 0x3e, 0x1b, - 0xf5, 0x40, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x1a, 0x02, 0x01, 0x00, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, - 0x00, 0x00, 0x00, 0x79, 0x00, 0x1c, 0x01, 0x1b, 0x02, 0x01, 0x00, - 0x00, 0x00, 0xa9, 0x6a, 0xda, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x02, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, - 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0x1d, 0x01, 0x1d, 0x02, 0x04, - 0x00, 0x00, 0x00, 0x20, 0x23, 0xc5, 0xbc, 0x00, 0x00, 0x00, 0x00, - 0xfd, 0x2f, 0x57, 0x3e, 0xb8, 0x5b, 0x02, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0xfd, 0x2f, 0x57, 0x3e, 0x20, 0x23, 0xc5, 0xbc, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x37, 0xa2, 0x3e, 0xb8, 0x5b, 0x02, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x04, 0x37, 0xa2, 0x3e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1e, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x1f, 0x02, 0x04, 0x00, 0x00, 0x00, 0x61, 0xd7, 0x90, - 0x3d, 0x37, 0xdb, 0x21, 0x3d, 0x60, 0x00, 0x21, 0x3e, 0x37, 0xdb, - 0x21, 0x3d, 0x61, 0xd7, 0x90, 0x3d, 0xed, 0xbc, 0x68, 0x3d, 0x60, - 0x00, 0x21, 0x3e, 0xed, 0xbc, 0x68, 0x3d, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x20, 0x02, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, - 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0x1e, 0x01, - 0x21, 0x02, 0x01, 0x00, 0x00, 0x00, 0x9b, 0xad, 0xfc, 0x3e, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x22, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0x1f, - 0x01, 0x23, 0x02, 0x04, 0x00, 0x00, 0x00, 0x20, 0x23, 0xc5, 0xbc, - 0x00, 0x00, 0x00, 0x00, 0xfd, 0x2f, 0x57, 0x3e, 0x50, 0x8e, 0x7e, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0xfd, 0x2f, 0x57, 0x3e, 0x20, 0x23, - 0xc5, 0xbc, 0x00, 0x00, 0x00, 0x00, 0x04, 0x37, 0xa2, 0x3e, 0x50, - 0x8e, 0x7e, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x04, 0x37, 0xa2, 0x3e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x02, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x25, 0x02, 0x04, 0x00, 0x00, - 0x00, 0x43, 0x54, 0x4d, 0x3f, 0x2c, 0xa0, 0x0b, 0x3d, 0xf1, 0x9e, - 0x77, 0x3f, 0x2c, 0xa0, 0x0b, 0x3d, 0x43, 0x54, 0x4d, 0x3f, 0xe3, - 0x81, 0x52, 0x3d, 0xf1, 0x9e, 0x77, 0x3f, 0xe3, 0x81, 0x52, 0x3d, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x26, 0x02, 0x01, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, - 0x79, 0x00, 0x20, 0x01, 0x27, 0x02, 0x01, 0x00, 0x00, 0x00, 0x65, - 0x89, 0x7a, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x02, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x21, 0x01, 0x29, 0x02, 0x04, 0x00, 0x00, 0x00, - 0x3e, 0x6a, 0xad, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x34, 0xfd, - 0x3e, 0xc9, 0xe3, 0xd9, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x34, - 0xfd, 0x3e, 0x3e, 0x6a, 0xad, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x12, - 0xc0, 0x35, 0x3f, 0xc9, 0xe3, 0xd9, 0x3e, 0x00, 0x00, 0x00, 0x00, - 0x12, 0xc0, 0x35, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, - 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x2b, - 0x02, 0x04, 0x00, 0x00, 0x00, 0x22, 0x8e, 0x05, 0x3e, 0xdb, 0xb9, - 0x85, 0x3d, 0xe8, 0x2d, 0x3e, 0x3e, 0xdb, 0xb9, 0x85, 0x3d, 0x22, - 0x8e, 0x05, 0x3e, 0xa1, 0x4a, 0xcd, 0x3d, 0xe8, 0x2d, 0x3e, 0x3e, - 0xa1, 0x4a, 0xcd, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x2c, 0x02, 0x01, - 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, - 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0x22, 0x01, 0x2d, 0x02, 0x01, - 0x00, 0x00, 0x00, 0x9b, 0xad, 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, - 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, 0x23, 0x01, 0x2f, 0x02, - 0x04, 0x00, 0x00, 0x00, 0xbb, 0x0b, 0x74, 0x3d, 0x00, 0x00, 0x00, - 0x00, 0xf1, 0x2a, 0x07, 0x3f, 0xc9, 0xe3, 0xd9, 0x3e, 0x00, 0x00, - 0x00, 0x00, 0xf1, 0x2a, 0x07, 0x3f, 0xbb, 0x0b, 0x74, 0x3d, 0x00, - 0x00, 0x00, 0x00, 0xb8, 0x77, 0x31, 0x3f, 0xc9, 0xe3, 0xd9, 0x3e, - 0x00, 0x00, 0x00, 0x00, 0xb8, 0x77, 0x31, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x30, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x31, 0x02, 0x04, 0x00, 0x00, 0x00, 0x43, 0x54, - 0x4d, 0x3f, 0x91, 0x38, 0x75, 0x3d, 0xf0, 0x86, 0x5c, 0x3f, 0x91, - 0x38, 0x75, 0x3d, 0x43, 0x54, 0x4d, 0x3f, 0xe1, 0x80, 0xb1, 0x3d, - 0xf0, 0x86, 0x5c, 0x3f, 0xe1, 0x80, 0xb1, 0x3d, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x32, 0x02, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x79, 0x00, 0x24, - 0x01, 0x33, 0x02, 0x01, 0x00, 0x00, 0x00, 0x9b, 0xad, 0xfc, 0x3e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x34, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3f, 0xa4, 0x00, 0x00, 0x00, 0x80, 0x00, - 0x25, 0x01, 0x35, 0x02, 0x04, 0x00, 0x00, 0x00, 0x3e, 0x6a, 0xad, - 0x3d, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x14, 0x3f, 0xaa, 0x0a, - 0xcd, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x14, 0x3f, 0x3e, - 0x6a, 0xad, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x9b, 0x33, 0x3f, - 0xaa, 0x0a, 0xcd, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x9b, 0x33, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x02, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x37, 0x02, 0x04, 0x00, - 0x00, 0x00, 0x92, 0xb2, 0xdd, 0x3e, 0xc6, 0xd9, 0xa9, 0x3d, 0xdd, - 0xec, 0xf7, 0x3e, 0xc6, 0xd9, 0xa9, 0x3d, 0x92, 0xb2, 0xdd, 0x3e, - 0x8c, 0xd9, 0xd2, 0x3d, 0xdd, 0xec, 0xf7, 0x3e, 0x8c, 0xd9, 0xd2, - 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x38, 0x02, 0x01, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x60, 0x00, 0x00, - 0x00, 0x79, 0x00, 0x26, 0x01, 0x39, 0x02, 0x01, 0x00, 0x00, 0x00, - 0x9b, 0xad, 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x02, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, - 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x60, 0x00, - 0x00, 0x00, 0x79, 0x00, 0x27, 0x01, 0x3b, 0x02, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x02, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x2d, - 0x00, 0x00, 0x00, 0xbf, 0x00, 0x12, 0x00, 0x54, 0x65, 0x78, 0x74, - 0x75, 0x72, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x41, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x01, 0x89, 0x00, 0x0c, 0x00, 0x52, 0x65, 0x6e, - 0x64, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x01, 0x22, - 0x00, 0x28, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x0d, - 0x00, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x41, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x01, 0x89, 0x00, 0x29, 0x01, 0x2c, 0x01, 0x1c, - 0x00, 0x00, 0x00, 0xc2, 0x00, 0x12, 0x00, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x41, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x01, 0x89, 0x00, 0x2a, 0x01, 0x01, 0x06, 0x00, - 0x00, 0x00, 0xc0, 0x00, 0x2b, 0x01, 0x00, 0x00, 0x7d, 0x00, 0x01, - 0x00, 0x88, 0x00, 0x07, 0x00, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, - 0x65, 0x01, 0x81, 0x00, 0x0b, 0x00, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x03, 0x03, 0x00, 0x23, 0x00, - 0x20, 0x00, 0x07, 0x00, 0x4e, 0x61, 0x6d, 0x61, 0x62, 0x6c, 0x65, - 0x00, 0x2c, 0x01, 0x06, 0x00, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, - 0x1f, 0x00, 0x2e, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, - 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, 0x6d, 0x61, 0x70, 0x73, - 0x2f, 0x63, 0x6d, 0x73, 0x73, 0x31, 0x32, 0x2e, 0x72, 0x67, 0x62, - 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, - 0x01, 0x06, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x23, 0x8a, 0xad, 0xad, 0x56, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x9a, 0xad, 0xad, 0x61, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x06, 0x58, 0xad, 0xad, 0xad, 0x61, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xe8, 0xff, 0xff, - 0x91, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xf3, 0xff, - 0xff, 0xb1, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xa7, 0xff, 0xff, 0xff, 0xb0, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x04, 0x16, 0x1f, 0x1f, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x19, 0x1f, 0x1f, - 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, - 0xff, 0xe8, 0xe8, 0xbd, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, - 0x9b, 0xff, 0xe4, 0xef, 0xe5, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0xda, 0xff, - 0xe1, 0xf1, 0xde, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x52, 0xa9, 0xb6, 0x86, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x5a, - 0xab, 0xb6, 0x95, 0x30, 0x00, 0x00, 0x00, 0x38, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x5b, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x25, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1a, 0xc6, 0xff, 0xc9, 0xc2, 0xe1, 0x4a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x33, 0xcc, 0xf1, 0xae, 0xe0, 0xff, 0x8e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x89, 0xfc, 0xf0, 0x97, 0xcc, 0xfc, 0x89, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, - 0xa5, 0xfc, 0xf2, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x3d, 0xd4, 0xff, 0xe4, 0x6c, 0x0d, 0x00, 0x00, 0x00, 0x70, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x72, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, - 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, - 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x45, 0xe9, 0xff, 0x9e, 0x93, 0xf7, 0x76, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x59, 0xeb, 0xde, 0x77, 0xc6, 0xff, - 0xbb, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x26, 0xbd, 0xff, 0xcb, 0x4a, 0xa6, 0xff, 0xbd, 0x26, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3a, 0xbf, 0xfc, 0xd8, 0x58, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3a, 0xb7, 0xfc, 0xf0, 0x8b, 0x13, 0x00, 0x00, - 0x00, 0x00, 0x50, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, - 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, - 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, - 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0x81, 0x16, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, - 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, - 0xe3, 0xe3, 0xe3, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x7b, 0xfc, 0xfc, 0x7a, - 0x70, 0xf7, 0xa6, 0x14, 0x00, 0x00, 0x00, 0x09, 0x89, 0xfc, 0xc3, - 0x42, 0xa6, 0xff, 0xe3, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0xec, 0xff, 0x9a, 0x12, 0x76, - 0xf7, 0xec, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x45, 0xcf, 0xfc, 0xcd, - 0x49, 0x00, 0x00, 0x00, 0x00, 0x21, 0xa5, 0xfc, 0xf0, 0x8f, 0x21, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, - 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, - 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, - 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, - 0x1c, 0x14, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x49, 0x49, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x25, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xac, - 0xff, 0xe9, 0x59, 0x4a, 0xe1, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x21, - 0xb5, 0xff, 0x9b, 0x16, 0x81, 0xff, 0xfc, 0x70, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x9b, 0xff, 0xf9, - 0x5e, 0x00, 0x42, 0xd9, 0xff, 0x9b, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x64, 0xde, 0xff, 0xbe, 0x2b, 0x00, 0x00, 0x0d, 0x80, 0xf2, 0xf9, - 0x9c, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x06, 0x23, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, + 0x00, 0x00, 0x06, 0x23, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, - 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x23, 0x00, 0x00, 0x00, 0x00, + 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3b, 0xcf, 0xff, 0xd6, 0x40, 0x2a, 0xc4, 0xef, 0x61, 0x00, - 0x00, 0x00, 0x42, 0xd5, 0xf9, 0x75, 0x00, 0x55, 0xf1, 0xff, 0x99, - 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, - 0xca, 0xff, 0xdc, 0x30, 0x00, 0x21, 0xbb, 0xff, 0xca, 0x30, 0x00, + 0x00, 0x00, 0x3b, 0xcf, 0xff, 0xd6, 0x40, 0x2a, 0xc4, 0xef, 0x61, + 0x00, 0x00, 0x00, 0x42, 0xd5, 0xf9, 0x75, 0x00, 0x55, 0xf1, 0xff, + 0x99, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0xca, 0xff, 0xdc, 0x30, 0x00, 0x21, 0xbb, 0xff, 0xca, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0f, 0x8c, 0xf9, 0xfb, 0x8e, 0x15, 0x00, 0x4f, - 0xda, 0xf9, 0xb5, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0f, 0x8c, 0xf9, 0xfb, 0x8e, 0x15, 0x00, + 0x4f, 0xda, 0xf9, 0xb5, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -3195,2415 +2250,2314 @@ const unsigned char default_font_data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x37, 0xba, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0xba, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, - 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xba, 0x23, + 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xba, + 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0xf5, 0xff, 0xb3, 0x21, 0x10, + 0x9e, 0xff, 0x8a, 0x06, 0x00, 0x00, 0x7b, 0xf6, 0xe7, 0x50, 0x00, + 0x29, 0xd6, 0xff, 0xcf, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x6e, 0xf6, 0xff, 0xa3, 0x0a, 0x00, 0x09, 0x91, + 0xff, 0xf6, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x9a, 0xf5, + 0xef, 0x73, 0x37, 0xbe, 0xff, 0xc8, 0x3d, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x17, 0x33, 0x2d, 0x0f, 0x00, 0x00, 0x00, + 0x00, 0x0a, 0x29, 0x2d, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6e, 0xf5, 0xff, 0xb3, 0x21, 0x10, 0x9e, - 0xff, 0x8a, 0x06, 0x00, 0x00, 0x7b, 0xf6, 0xe7, 0x50, 0x00, 0x29, - 0xd6, 0xff, 0xcf, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x6e, 0xf6, 0xff, 0xa3, 0x0a, 0x00, 0x09, 0x91, 0xff, - 0xf6, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x9a, 0xf5, 0xef, - 0x73, 0x37, 0xbe, 0xff, 0xc8, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x17, 0x33, 0x2d, 0x0f, 0x00, 0x00, 0x00, 0x00, - 0x0a, 0x29, 0x2d, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x10, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x10, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, - 0x1f, 0x1c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x8b, 0xad, + 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, + 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, + 0xad, 0xad, 0x8b, 0x17, 0x00, 0x00, 0x07, 0x54, 0x80, 0x2e, 0x00, + 0x00, 0x00, 0x00, 0x07, 0x54, 0x80, 0x2e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x9e, 0xff, 0xff, + 0x8b, 0x0c, 0x00, 0x79, 0xfc, 0xb0, 0x1f, 0x00, 0x0a, 0xa3, 0xff, + 0xca, 0x30, 0x00, 0x0a, 0xb0, 0xff, 0xf1, 0x68, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x9e, 0xff, 0xef, 0x6d, 0x00, + 0x00, 0x00, 0x5c, 0xea, 0xff, 0x9e, 0x11, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x2f, 0xbb, 0xff, 0xcd, 0xb6, 0xf9, 0xda, 0x5a, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0xcc, 0xb3, 0x3b, + 0x00, 0x00, 0x03, 0x36, 0x88, 0xbf, 0xc4, 0x89, 0x25, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x23, 0x4f, 0x40, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1e, 0x4d, 0x4c, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xb6, 0x42, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x28, 0x7a, 0x83, 0x30, 0x00, 0x00, 0x00, 0x59, + 0x8f, 0x6b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, + 0xea, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0xea, 0x74, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, + 0xc4, 0xff, 0xe2, 0x4e, 0x00, 0x00, 0x54, 0xe9, 0xda, 0x48, 0x00, + 0x25, 0xd2, 0xff, 0xa4, 0x13, 0x00, 0x00, 0x7c, 0xff, 0xff, 0x91, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0xcf, 0xff, + 0xca, 0x36, 0x00, 0x00, 0x00, 0x22, 0xb8, 0xff, 0xcf, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xc7, 0xfc, 0xff, 0xf0, 0x73, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, + 0xe2, 0xf1, 0x6e, 0x03, 0x15, 0x68, 0xd4, 0xff, 0xff, 0xff, 0xf9, + 0xa2, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0xbe, 0xea, 0x76, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x25, 0xa5, 0xf0, 0xa0, 0x23, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0x52, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xbd, 0xf7, 0x80, 0x08, + 0x00, 0x00, 0x7b, 0xf9, 0xde, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x42, 0xd9, 0xad, 0x10, 0x00, 0x00, 0x00, 0x00, 0x42, + 0xd9, 0xad, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x54, 0xe6, 0xff, 0xba, 0x25, 0x00, 0x00, 0x33, 0xcc, + 0xf1, 0x71, 0x00, 0x44, 0xf0, 0xf7, 0x76, 0x03, 0x00, 0x00, 0x52, + 0xe5, 0xff, 0xbd, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0x6a, 0xf1, 0xff, 0x9b, 0x10, 0x00, 0x00, 0x00, 0x08, 0x89, 0xfc, + 0xf1, 0x77, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x82, 0xf3, + 0xff, 0xbf, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1a, 0xa7, 0xff, 0xcb, 0x85, 0xa0, 0xe4, 0xf2, 0xbd, + 0x8a, 0x9a, 0xe4, 0xec, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x5a, 0xde, + 0xde, 0x70, 0x09, 0x00, 0x00, 0x00, 0x1b, 0x93, 0xef, 0xba, 0x36, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x72, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x80, + 0xf7, 0xca, 0x35, 0x00, 0x00, 0x36, 0xc9, 0xfc, 0x9a, 0x13, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xb5, 0xe5, 0x3f, 0x00, 0x00, + 0x00, 0x00, 0x1e, 0xb5, 0xe5, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x89, 0xfc, 0xff, 0x8f, 0x06, 0x00, + 0x00, 0x0e, 0x9b, 0xff, 0xa0, 0x09, 0x71, 0xff, 0xe1, 0x4a, 0x00, + 0x00, 0x00, 0x25, 0xba, 0xff, 0xe6, 0x54, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x19, 0xab, 0xff, 0xf1, 0x64, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x54, 0xe6, 0xff, 0xc0, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x36, 0xcd, 0xfc, 0xff, 0xde, 0x64, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xcd, 0xfc, 0xff, 0xfc, + 0xd8, 0x80, 0x2b, 0x06, 0x15, 0xa0, 0xff, 0x9b, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0d, 0x6c, 0xe4, 0xdf, 0x4d, 0x06, 0x00, 0x0d, 0x74, 0xec, + 0xc5, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x42, 0xd9, 0xf7, 0x80, 0x08, 0x00, 0x06, 0x84, 0xf7, + 0xde, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x89, 0xfc, + 0x84, 0x06, 0x00, 0x00, 0x00, 0x08, 0x89, 0xfc, 0x84, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xb5, 0xff, 0xf9, + 0x5e, 0x00, 0x00, 0x00, 0x00, 0x70, 0xf7, 0xc5, 0x2a, 0xa0, 0xff, + 0xbd, 0x26, 0x00, 0x00, 0x00, 0x06, 0x84, 0xff, 0xfc, 0x80, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xd9, 0xff, 0xc7, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x26, 0xbd, 0xff, 0xf0, 0x4a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x32, 0xab, 0xff, 0xf2, 0xe5, 0xfc, 0xcf, 0x45, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x41, + 0x95, 0xb6, 0x95, 0x49, 0x0d, 0x00, 0x00, 0x00, 0x5b, 0xb6, 0x81, + 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x8b, 0xf0, 0xcd, 0x5a, 0x14, + 0x69, 0xde, 0xde, 0x5a, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xab, 0xff, 0xca, 0x35, 0x00, + 0x00, 0x4a, 0xd9, 0xfc, 0x9a, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0xb4, 0xf8, 0xba, 0x25, 0x00, 0x00, 0x00, 0x40, 0xb4, 0xf8, + 0xba, 0x25, 0x00, 0x00, 0x08, 0x34, 0x49, 0x49, 0x18, 0x00, 0x00, + 0x00, 0x08, 0x34, 0x49, 0x41, 0x18, 0x00, 0x00, 0x00, 0x00, 0x42, + 0xd9, 0xff, 0xda, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x42, 0xd9, 0xe5, + 0x66, 0xc5, 0xff, 0x8f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x53, 0xf9, + 0xff, 0xab, 0x19, 0x00, 0x00, 0x00, 0x00, 0x09, 0x80, 0xf7, 0xfc, + 0x89, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0xf7, 0xff, + 0x8f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0xb2, 0xf9, 0xf0, 0x96, 0x6a, 0xd8, + 0xfc, 0xba, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0e, 0x1c, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x1c, 0x14, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x8f, + 0xf6, 0xda, 0xa1, 0xde, 0xe4, 0x6c, 0x0d, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x6a, 0xf1, + 0xf7, 0x80, 0x09, 0x00, 0x15, 0xa0, 0xff, 0xde, 0x4c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x13, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, + 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, + 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x13, 0x00, + 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, + 0x80, 0xff, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x19, 0xa2, 0xe3, 0xe3, + 0x49, 0x00, 0x00, 0x00, 0x19, 0xa2, 0xe3, 0xcb, 0x49, 0x00, 0x00, + 0x00, 0x00, 0x70, 0xf7, 0xff, 0xad, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x1e, 0xb5, 0xff, 0xa4, 0xe5, 0xef, 0x64, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x2a, 0xd4, 0xff, 0xd6, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x2a, + 0xbd, 0xff, 0xe6, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x42, 0xd9, 0xff, 0xd4, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x9b, 0xf6, 0xfc, 0xa7, + 0x27, 0x0d, 0x74, 0xec, 0xf7, 0xab, 0x25, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x20, 0xb2, 0xf9, 0xff, 0xf2, 0x8b, 0x13, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x70, 0x70, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x17, 0x62, 0x70, 0x62, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x38, 0x70, 0x70, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x35, 0xcf, 0xff, 0xc3, 0x32, 0x00, 0x00, 0x68, 0xf3, 0xfc, + 0x91, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x8b, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, - 0xad, 0x8b, 0x17, 0x00, 0x00, 0x07, 0x54, 0x80, 0x2e, 0x00, 0x00, - 0x00, 0x00, 0x07, 0x54, 0x80, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xad, 0x8b, 0x17, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x33, + 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x1c, + 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, + 0x52, 0x00, 0x00, 0x00, 0x0c, 0x97, 0xff, 0xf3, 0x74, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x09, 0x91, 0xff, 0xdd, 0xff, 0xc9, 0x35, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0a, 0xa3, 0xff, 0xef, 0x61, 0x00, 0x00, + 0x00, 0x00, 0x58, 0xe3, 0xff, 0xc4, 0x2a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0xb0, 0xff, 0xf9, 0x75, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x80, 0xf0, + 0xff, 0xc7, 0x38, 0x03, 0x00, 0x1e, 0xa2, 0xf9, 0xf9, 0x90, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x9e, 0xff, 0xff, 0x8b, - 0x0c, 0x00, 0x79, 0xfc, 0xb0, 0x1f, 0x00, 0x0a, 0xa3, 0xff, 0xca, - 0x30, 0x00, 0x0a, 0xb0, 0xff, 0xf1, 0x68, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x9e, 0xff, 0xef, 0x6d, 0x00, 0x00, - 0x00, 0x5c, 0xea, 0xff, 0x9e, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2f, 0xbb, 0xff, 0xcd, 0xb6, 0xf9, 0xda, 0x5a, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0xcc, 0xb3, 0x3b, 0x00, - 0x00, 0x03, 0x36, 0x88, 0xbf, 0xc4, 0x89, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x23, 0x4f, 0x40, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1e, 0x4d, 0x4c, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xb6, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x83, 0x8f, 0x78, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x28, 0x7a, 0x83, 0x30, 0x00, 0x00, 0x00, 0x59, 0x8f, - 0x6b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0xea, - 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0xea, 0x74, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xc4, - 0xff, 0xe2, 0x4e, 0x00, 0x00, 0x54, 0xe9, 0xda, 0x48, 0x00, 0x25, - 0xd2, 0xff, 0xa4, 0x13, 0x00, 0x00, 0x7c, 0xff, 0xff, 0x91, 0x09, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0xcf, 0xff, 0xca, - 0x36, 0x00, 0x00, 0x00, 0x22, 0xb8, 0xff, 0xcf, 0x3c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0xc7, 0xfc, 0xff, 0xf0, 0x73, 0x06, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0xe2, - 0xf1, 0x6e, 0x03, 0x15, 0x68, 0xd4, 0xff, 0xff, 0xff, 0xf9, 0xa2, - 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x32, 0xbe, 0xea, 0x76, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x25, 0xa5, 0xf0, 0xa0, 0x23, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0x52, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xbd, 0xf7, 0x80, 0x08, 0x00, - 0x00, 0x7b, 0xf9, 0xde, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x42, 0xd9, 0xad, 0x10, 0x00, 0x00, 0x00, 0x00, 0x42, 0xd9, - 0xad, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x54, 0xe6, 0xff, 0xba, 0x25, 0x00, 0x00, 0x33, 0xcc, 0xf1, - 0x71, 0x00, 0x44, 0xf0, 0xf7, 0x76, 0x03, 0x00, 0x00, 0x52, 0xe5, - 0xff, 0xbd, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x6a, - 0xf1, 0xff, 0x9b, 0x10, 0x00, 0x00, 0x00, 0x08, 0x89, 0xfc, 0xf1, - 0x77, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x82, 0xf3, 0xff, - 0xbf, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1a, 0xa7, 0xff, 0xcb, 0x85, 0xa0, 0xe4, 0xf2, 0xbd, 0x8a, - 0x9a, 0xe4, 0xec, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x5a, 0xde, 0xde, - 0x70, 0x09, 0x00, 0x00, 0x00, 0x1b, 0x93, 0xef, 0xba, 0x36, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x72, - 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x80, 0xf7, - 0xca, 0x35, 0x00, 0x00, 0x36, 0xc9, 0xfc, 0x9a, 0x13, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1e, 0xb5, 0xe5, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x1e, 0xb5, 0xe5, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x89, 0xfc, 0xff, 0x8f, 0x06, 0x00, 0x00, - 0x0e, 0x9b, 0xff, 0xa0, 0x09, 0x71, 0xff, 0xe1, 0x4a, 0x00, 0x00, - 0x00, 0x25, 0xba, 0xff, 0xe6, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x19, 0xab, 0xff, 0xf1, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x54, 0xe6, 0xff, 0xc0, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, - 0xcd, 0xfc, 0xff, 0xde, 0x64, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xcd, 0xfc, 0xff, 0xfc, 0xd8, - 0x80, 0x2b, 0x06, 0x15, 0xa0, 0xff, 0x9b, 0x0e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0x6c, 0xe4, 0xdf, 0x4d, 0x06, 0x00, 0x0d, 0x74, 0xec, 0xc5, - 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x42, 0xd9, 0xf7, 0x80, 0x08, 0x00, 0x06, 0x84, 0xf7, 0xde, - 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x89, 0xfc, 0x84, - 0x06, 0x00, 0x00, 0x00, 0x08, 0x89, 0xfc, 0x84, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xb5, 0xff, 0xf9, 0x5e, - 0x00, 0x00, 0x00, 0x00, 0x70, 0xf7, 0xc5, 0x2a, 0xa0, 0xff, 0xbd, - 0x26, 0x00, 0x00, 0x00, 0x06, 0x84, 0xff, 0xfc, 0x80, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x42, 0xd9, 0xff, 0xc7, 0x30, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x26, 0xbd, 0xff, 0xf0, 0x4a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x32, 0xab, 0xff, 0xf2, 0xe5, 0xfc, 0xcf, 0x45, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x41, 0x95, - 0xb6, 0x95, 0x49, 0x0d, 0x00, 0x00, 0x00, 0x5b, 0xb6, 0x81, 0x14, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x13, 0x8b, 0xf0, 0xcd, 0x5a, 0x14, 0x69, - 0xde, 0xde, 0x5a, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x19, 0xab, 0xff, 0xca, 0x35, 0x00, 0x00, - 0x4a, 0xd9, 0xfc, 0x9a, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, - 0xb4, 0xf8, 0xba, 0x25, 0x00, 0x00, 0x00, 0x40, 0xb4, 0xf8, 0xba, - 0x25, 0x00, 0x00, 0x08, 0x34, 0x49, 0x49, 0x18, 0x00, 0x00, 0x00, - 0x08, 0x34, 0x49, 0x41, 0x18, 0x00, 0x00, 0x00, 0x00, 0x42, 0xd9, - 0xff, 0xda, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x42, 0xd9, 0xe5, 0x66, - 0xc5, 0xff, 0x8f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x53, 0xf9, 0xff, - 0xab, 0x19, 0x00, 0x00, 0x00, 0x00, 0x09, 0x80, 0xf7, 0xfc, 0x89, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0xf7, 0xff, 0x8f, - 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x30, 0xb2, 0xf9, 0xf0, 0x96, 0x6a, 0xd8, 0xfc, - 0xba, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0e, 0x1c, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, - 0x1c, 0x14, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x8f, 0xf6, - 0xda, 0xa1, 0xde, 0xe4, 0x6c, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x6a, 0xf1, 0xf7, - 0x80, 0x09, 0x00, 0x15, 0xa0, 0xff, 0xde, 0x4c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x13, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, - 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, - 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x13, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x80, - 0xff, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x19, 0xa2, 0xe3, 0xe3, 0x49, - 0x00, 0x00, 0x00, 0x19, 0xa2, 0xe3, 0xcb, 0x49, 0x00, 0x00, 0x00, - 0x00, 0x70, 0xf7, 0xff, 0xad, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1e, - 0xb5, 0xff, 0xa4, 0xe5, 0xef, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2a, 0xd4, 0xff, 0xd6, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xbd, - 0xff, 0xe6, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, - 0xd9, 0xff, 0xd4, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x9b, 0xf6, 0xfc, 0xa7, 0x27, - 0x0d, 0x74, 0xec, 0xf7, 0xab, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x20, 0xb2, 0xf9, 0xff, 0xf2, 0x8b, 0x13, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x38, 0x70, 0x70, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x17, 0x62, 0x70, 0x62, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x38, 0x70, 0x70, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x35, 0xcf, 0xff, 0xc3, 0x32, 0x00, 0x00, 0x68, 0xf3, 0xfc, 0x91, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x8b, 0xad, 0xad, 0xad, - 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, - 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, - 0x8b, 0x17, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x33, 0x00, - 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x1c, 0xb6, - 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, - 0x00, 0x00, 0x00, 0x0c, 0x97, 0xff, 0xf3, 0x74, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x09, 0x91, 0xff, 0xdd, 0xff, 0xc9, 0x35, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0a, 0xa3, 0xff, 0xef, 0x61, 0x00, 0x00, 0x00, - 0x00, 0x58, 0xe3, 0xff, 0xc4, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0xb0, 0xff, 0xf9, 0x75, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x80, 0xf0, 0xff, - 0xc7, 0x38, 0x03, 0x00, 0x1e, 0xa2, 0xf9, 0xf9, 0x90, 0x17, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x83, 0x8f, 0x78, 0x25, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0c, 0x50, 0x70, 0x64, 0x24, 0x00, 0x00, 0x20, - 0x64, 0x70, 0x50, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0xba, - 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, - 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, - 0xe0, 0xe0, 0xe0, 0xba, 0x23, 0x00, 0x00, 0x00, 0x70, 0xe0, 0xe0, - 0xb3, 0x2d, 0x00, 0x00, 0x00, 0x70, 0xe0, 0xe0, 0xb3, 0x2d, 0x00, - 0x00, 0x18, 0x9f, 0xe0, 0xe0, 0x48, 0x00, 0x00, 0x00, 0x18, 0x9f, - 0xe0, 0xc8, 0x48, 0x00, 0x00, 0x00, 0x2a, 0xc4, 0xff, 0xd5, 0x42, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xee, 0xff, 0xff, 0xa5, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0xef, 0xff, 0x91, - 0x09, 0x00, 0x00, 0x04, 0x8a, 0xf9, 0xfc, 0x91, 0x0c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x84, 0xfb, 0xff, 0xa7, 0x06, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x4d, - 0xd8, 0xff, 0xe7, 0x62, 0x00, 0x00, 0x00, 0x00, 0x37, 0xc9, 0xff, - 0xe8, 0x6f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x16, 0x1f, 0x1c, 0x0a, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, - 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x06, 0x23, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, - 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, - 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x23, 0x00, 0x00, 0x00, 0x00, - 0x1a, 0x33, 0x33, 0x29, 0x0a, 0x00, 0x00, 0x00, 0x1a, 0x33, 0x33, - 0x29, 0x0a, 0x00, 0x00, 0x06, 0x25, 0x33, 0x33, 0x11, 0x00, 0x00, - 0x00, 0x06, 0x25, 0x33, 0x2e, 0x11, 0x00, 0x00, 0x00, 0x32, 0x9a, - 0xad, 0x7b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x98, - 0xad, 0xad, 0x58, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, - 0x9a, 0xad, 0x7b, 0x13, 0x00, 0x00, 0x0f, 0x7e, 0xad, 0x9f, 0x3d, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x9e, - 0xad, 0x8d, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x41, 0xcd, 0xff, 0xe1, 0x69, 0x0a, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x5d, 0xdd, 0xff, 0xe7, 0x65, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x91, - 0xcc, 0xb6, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, - 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x19, 0x1c, 0x14, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x18, 0x1c, 0x1c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x09, 0x19, 0x1c, 0x14, 0x03, 0x00, 0x00, 0x03, 0x16, - 0x1c, 0x19, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x18, 0x1c, 0x18, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x21, 0xa5, 0xfc, 0xf2, 0x8b, 0x15, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x13, 0x7d, 0xf0, 0xff, 0xc5, 0x40, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x73, 0x80, 0x6b, 0x21, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x68, 0x80, - 0x7c, 0x45, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x40, 0x49, 0x44, 0x29, - 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x50, 0x70, 0x64, 0x24, 0x00, 0x00, + 0x20, 0x64, 0x70, 0x50, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, + 0xba, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, + 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, + 0xe0, 0xe0, 0xe0, 0xe0, 0xba, 0x23, 0x00, 0x00, 0x00, 0x70, 0xe0, + 0xe0, 0xb3, 0x2d, 0x00, 0x00, 0x00, 0x70, 0xe0, 0xe0, 0xb3, 0x2d, + 0x00, 0x00, 0x18, 0x9f, 0xe0, 0xe0, 0x48, 0x00, 0x00, 0x00, 0x18, + 0x9f, 0xe0, 0xc8, 0x48, 0x00, 0x00, 0x00, 0x2a, 0xc4, 0xff, 0xd5, + 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xee, 0xff, 0xff, + 0xa5, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0xef, 0xff, + 0x91, 0x09, 0x00, 0x00, 0x04, 0x8a, 0xf9, 0xfc, 0x91, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x84, 0xfb, 0xff, 0xa7, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0x4d, 0xd8, 0xff, 0xe7, 0x62, 0x00, 0x00, 0x00, 0x00, 0x37, 0xc9, + 0xff, 0xe8, 0x6f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x25, 0x72, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x5b, 0x0e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, - 0x1c, 0x1c, 0x14, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x14, 0x1c, 0x1c, 0x0e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x16, 0x1f, 0x1c, + 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x1c, 0x1c, 0x19, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, - 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x89, 0xda, - 0xe3, 0xde, 0xc3, 0x9b, 0x5f, 0x21, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0xde, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb6, 0x1c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x2c, 0x6e, 0x9e, 0xb6, 0xb6, 0xa6, 0x76, 0x35, 0x09, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x65, 0xa6, 0xb6, - 0xb6, 0x9b, 0x7a, 0x5b, 0x25, 0x15, 0x5b, 0x80, 0x72, 0x25, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x35, 0x6e, 0xa4, 0xb6, - 0xb6, 0xb0, 0x8f, 0x5f, 0x21, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x26, 0x44, 0x49, 0x49, 0x33, 0x14, 0x03, 0x00, 0x08, - 0x18, 0x1c, 0x18, 0x06, 0x00, 0x00, 0x08, 0x34, 0x49, 0x49, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x49, 0x49, 0x25, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, - 0x16, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x23, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, + 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, + 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x23, 0x00, 0x00, 0x00, + 0x00, 0x1a, 0x33, 0x33, 0x29, 0x0a, 0x00, 0x00, 0x00, 0x1a, 0x33, + 0x33, 0x29, 0x0a, 0x00, 0x00, 0x06, 0x25, 0x33, 0x33, 0x11, 0x00, + 0x00, 0x00, 0x06, 0x25, 0x33, 0x2e, 0x11, 0x00, 0x00, 0x00, 0x32, + 0x9a, 0xad, 0x7b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, + 0x98, 0xad, 0xad, 0x58, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x9a, 0xad, 0x7b, 0x13, 0x00, 0x00, 0x0f, 0x7e, 0xad, 0x9f, + 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, + 0x9e, 0xad, 0x8d, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x41, 0xcd, 0xff, 0xe1, 0x69, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x06, 0x5d, 0xdd, 0xff, 0xe7, 0x65, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, + 0x91, 0xcc, 0xb6, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x6a, 0xf0, 0xff, 0xf6, 0xe6, 0xeb, 0xfc, 0xec, 0x7f, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xad, 0xfc, - 0xff, 0xf6, 0xcb, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, - 0xb6, 0x81, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x21, 0x7b, 0xc3, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xca, - 0x86, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x76, - 0xea, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xec, 0xb9, 0x8f, 0xd1, 0xff, - 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x7b, 0xca, - 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xec, 0xb3, 0x65, 0x1e, 0x00, - 0x00, 0x00, 0x00, 0x0d, 0x64, 0xbd, 0xde, 0xe3, 0xe3, 0xcc, 0xa6, - 0x76, 0x35, 0x3c, 0x9f, 0xb6, 0x9f, 0x25, 0x00, 0x00, 0x19, 0xa2, - 0xe3, 0xe3, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0xe3, 0xe3, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1b, 0x83, 0xab, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x19, 0x1c, 0x14, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x18, 0x1c, 0x1c, 0x0c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x09, 0x19, 0x1c, 0x14, 0x03, 0x00, 0x00, 0x03, + 0x16, 0x1c, 0x19, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x18, 0x1c, 0x18, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x21, 0xa5, 0xfc, 0xf2, 0x8b, 0x15, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x7d, 0xf0, 0xff, 0xc5, 0x40, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x26, 0xb5, 0xff, 0xf6, 0x95, 0x4f, 0x59, 0x89, 0xc7, - 0x73, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x4d, 0xd8, 0xff, 0xf5, 0x9a, 0x29, 0x1f, 0x1f, 0x1f, 0x1f, - 0x1f, 0x1f, 0x1f, 0x1f, 0x16, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x15, 0x89, 0xf0, 0xff, 0xf5, 0xc2, 0x96, 0x8f, - 0xb3, 0xf0, 0xff, 0xf9, 0x9a, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x62, 0xe7, 0xff, 0xf9, 0xd4, 0xa0, 0x8f, 0xa0, 0xc4, 0xee, - 0xf9, 0xf9, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, - 0x89, 0xf0, 0xff, 0xf5, 0xb7, 0x8f, 0x8f, 0xa0, 0xcb, 0xf0, 0xff, - 0xea, 0x71, 0x00, 0x00, 0x00, 0x06, 0x5a, 0xda, 0xff, 0xff, 0xe8, - 0xcc, 0xcc, 0xda, 0xf0, 0xc3, 0x9e, 0xe6, 0xff, 0xe0, 0x33, 0x00, - 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x44, 0xde, 0xff, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, - 0x30, 0x5f, 0x70, 0x70, 0x52, 0x25, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x73, 0x80, 0x6b, + 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x68, + 0x80, 0x7c, 0x45, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0xda, 0xff, 0xcd, 0x24, 0x00, - 0x00, 0x09, 0x3b, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x40, 0x49, 0x44, + 0x29, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x09, 0x70, 0xe7, 0xff, 0xe7, 0x54, 0x06, + 0x00, 0x00, 0x00, 0x25, 0x72, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x5b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x80, 0xf0, 0xff, 0xdc, 0x63, - 0x1f, 0x03, 0x00, 0x15, 0x5c, 0xcd, 0xff, 0xf9, 0xa8, 0x17, 0x00, - 0x00, 0x00, 0x00, 0x22, 0xb0, 0xff, 0xf9, 0xa5, 0x31, 0x09, 0x00, - 0x09, 0x1b, 0x5c, 0xc2, 0xf9, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x80, 0xf0, 0xf9, 0xc2, 0x63, 0x18, 0x00, 0x00, 0x09, - 0x21, 0x55, 0xb6, 0xed, 0x74, 0x00, 0x00, 0x00, 0x22, 0xb8, 0xff, - 0xf3, 0x99, 0x3c, 0x1f, 0x1f, 0x2e, 0x72, 0xd4, 0xf8, 0xfb, 0xff, - 0xe0, 0x33, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x70, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0x8f, + 0x10, 0x1c, 0x1c, 0x14, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x14, 0x1c, 0x1c, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x1c, 0x1c, 0x19, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0x48, 0xa3, 0xd9, 0xf6, 0xff, 0xff, 0xef, 0xd1, 0xa7, 0x52, - 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x36, 0x69, 0x70, 0x64, 0x39, 0x0a, 0x00, 0x1c, 0xb6, 0xff, - 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, - 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, + 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x89, + 0xda, 0xe3, 0xde, 0xc3, 0x9b, 0x5f, 0x21, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x9c, 0xfb, - 0xff, 0xc1, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0xd8, 0xff, - 0xda, 0x65, 0x06, 0x00, 0x00, 0x00, 0x00, 0x06, 0x5a, 0xd6, 0xff, - 0xf1, 0x69, 0x09, 0x00, 0x00, 0x00, 0x40, 0xd6, 0xff, 0xc9, 0x3b, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0xda, 0xff, 0xe3, 0x49, - 0x00, 0x00, 0x00, 0x00, 0x4f, 0xd8, 0xff, 0xd4, 0x4d, 0x06, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x7e, 0x42, 0x00, 0x00, 0x00, - 0x40, 0xda, 0xff, 0xca, 0x36, 0x00, 0x00, 0x00, 0x00, 0x06, 0x5d, - 0xe1, 0xff, 0xff, 0xe0, 0x33, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, - 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x15, 0x03, 0x00, 0x00, 0x49, - 0xe3, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x09, 0x13, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0xde, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb6, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x2c, 0x6e, 0x9e, 0xb6, 0xb6, 0xa6, 0x76, 0x35, 0x09, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x65, 0xa6, + 0xb6, 0xb6, 0x9b, 0x7a, 0x5b, 0x25, 0x15, 0x5b, 0x80, 0x72, 0x25, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x35, 0x6e, 0xa4, + 0xb6, 0xb6, 0xb0, 0x8f, 0x5f, 0x21, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x26, 0x44, 0x49, 0x49, 0x33, 0x14, 0x03, 0x00, + 0x08, 0x18, 0x1c, 0x18, 0x06, 0x00, 0x00, 0x08, 0x34, 0x49, 0x49, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x49, 0x49, + 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x16, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0f, 0x70, 0xdb, 0xff, 0xff, 0xef, 0xe0, 0xe0, 0xef, - 0xff, 0xff, 0xdc, 0x7e, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x15, 0x68, 0xc9, 0xf9, 0xff, 0xf5, 0xcf, 0x94, 0x47, - 0x25, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x49, 0xe0, 0xff, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x6a, 0xf0, 0xff, 0xf6, 0xe6, 0xeb, 0xfc, 0xec, 0x7f, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xad, + 0xfc, 0xff, 0xf6, 0xcb, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, + 0xb6, 0xb6, 0x81, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x21, 0x7b, 0xc3, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xf7, + 0xca, 0x86, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, + 0x76, 0xea, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xec, 0xb9, 0x8f, 0xd1, + 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x7b, + 0xca, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xec, 0xb3, 0x65, 0x1e, + 0x00, 0x00, 0x00, 0x00, 0x0d, 0x64, 0xbd, 0xde, 0xe3, 0xe3, 0xcc, + 0xa6, 0x76, 0x35, 0x3c, 0x9f, 0xb6, 0x9f, 0x25, 0x00, 0x00, 0x19, + 0xa2, 0xe3, 0xe3, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xe3, 0xe3, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1b, 0x83, 0xab, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x32, 0xc9, 0xff, 0xf6, 0x98, 0x1b, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, - 0x95, 0xfc, 0xf7, 0x84, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0x76, 0xf6, 0xff, 0xc0, 0x30, 0x00, 0x00, 0x00, 0x49, 0xe0, - 0xff, 0xad, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0xbb, - 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x09, 0x9a, 0xfc, 0xf7, 0x84, - 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x12, - 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x13, 0x9a, 0xfc, 0xff, 0xe0, 0x33, 0x00, 0x00, 0x1c, - 0xb6, 0xff, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x0f, 0x7d, 0x9e, 0x4f, - 0x0d, 0x00, 0x49, 0xe3, 0xff, 0x8f, 0x00, 0x00, 0x1b, 0x6f, 0x9a, - 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0d, 0x69, 0xde, 0xff, 0xea, 0xad, 0x6a, - 0x49, 0x49, 0x64, 0xa0, 0xda, 0xfc, 0xd5, 0x28, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x25, 0x8b, 0xe4, 0xff, 0xff, 0xf1, 0xe3, - 0xe7, 0xf6, 0xcf, 0x80, 0xc3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xa0, 0x09, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe9, 0x59, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x26, 0xb5, 0xff, 0xf6, 0x95, 0x4f, 0x59, 0x89, + 0xc7, 0x73, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0xd4, 0xff, 0xec, 0x74, 0x0d, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x33, 0xcc, 0xff, 0xd9, 0x42, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2b, 0xd5, 0xff, 0xef, 0x64, 0x00, 0x00, - 0x00, 0x30, 0xc0, 0xff, 0xcf, 0x48, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x35, 0xdf, - 0xff, 0xcf, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0xe9, 0xff, 0xe0, 0x33, + 0x00, 0x03, 0x4d, 0xd8, 0xff, 0xf5, 0x9a, 0x29, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x16, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x15, 0x89, 0xf0, 0xff, 0xf5, 0xc2, 0x96, + 0x8f, 0xb3, 0xf0, 0xff, 0xf9, 0x9a, 0x23, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x06, 0x62, 0xe7, 0xff, 0xf9, 0xd4, 0xa0, 0x8f, 0xa0, 0xc4, + 0xee, 0xf9, 0xf9, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x15, 0x89, 0xf0, 0xff, 0xf5, 0xb7, 0x8f, 0x8f, 0xa0, 0xcb, 0xf0, + 0xff, 0xea, 0x71, 0x00, 0x00, 0x00, 0x06, 0x5a, 0xda, 0xff, 0xff, + 0xe8, 0xcc, 0xcc, 0xda, 0xf0, 0xc3, 0x9e, 0xe6, 0xff, 0xe0, 0x33, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x3b, - 0xe1, 0xfc, 0xd8, 0x80, 0x21, 0x33, 0xcc, 0xff, 0x71, 0x03, 0x41, - 0xa2, 0xec, 0xfc, 0x85, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xd8, 0xff, 0xdf, - 0x6b, 0x1c, 0x03, 0x00, 0x00, 0x00, 0x13, 0x46, 0x9a, 0xa6, 0x0f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x8f, 0xf2, 0xff, 0xf2, - 0xb6, 0x6a, 0x49, 0x50, 0x7b, 0xc5, 0xe9, 0xef, 0xff, 0xe3, 0x52, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xad, 0x00, + 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0xde, 0xff, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcb, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xfc, - 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0a, 0x30, 0x5f, 0x70, 0x70, 0x52, 0x25, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0xda, 0xff, 0xcd, 0x24, + 0x00, 0x00, 0x09, 0x3b, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, + 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x65, 0xea, - 0xff, 0xd8, 0x4f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0xeb, 0xff, 0xab, 0x19, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xa1, 0xff, 0xff, - 0x8f, 0x08, 0x00, 0x00, 0x08, 0x6a, 0xea, 0xfc, 0xc5, 0x65, 0x29, - 0x0e, 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, - 0x00, 0x64, 0xff, 0xff, 0xa6, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, - 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x70, 0xe7, 0xff, 0xe7, 0x54, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x80, 0xf0, 0xff, 0xdc, + 0x63, 0x1f, 0x03, 0x00, 0x15, 0x5c, 0xcd, 0xff, 0xf9, 0xa8, 0x17, + 0x00, 0x00, 0x00, 0x00, 0x22, 0xb0, 0xff, 0xf9, 0xa5, 0x31, 0x09, + 0x00, 0x09, 0x1b, 0x5c, 0xc2, 0xf9, 0xff, 0xe3, 0x49, 0x00, 0x00, + 0x00, 0x00, 0x0e, 0x80, 0xf0, 0xf9, 0xc2, 0x63, 0x18, 0x00, 0x00, + 0x09, 0x21, 0x55, 0xb6, 0xed, 0x74, 0x00, 0x00, 0x00, 0x22, 0xb8, + 0xff, 0xf3, 0x99, 0x3c, 0x1f, 0x1f, 0x2e, 0x72, 0xd4, 0xf8, 0xfb, 0xff, 0xe0, 0x33, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, - 0x00, 0x00, 0x20, 0xa1, 0xea, 0xff, 0xf2, 0xa5, 0x5b, 0xbe, 0xff, - 0x6e, 0x65, 0xcd, 0xfc, 0xfc, 0xcf, 0x55, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x9a, - 0xfc, 0xe4, 0x73, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x15, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xea, - 0xff, 0xf2, 0x96, 0x27, 0x03, 0x00, 0x00, 0x03, 0x40, 0xbf, 0xfc, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, + 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0f, 0x48, 0xa3, 0xd9, 0xf6, 0xff, 0xff, 0xef, 0xd1, 0xa7, + 0x52, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x06, 0x36, 0x69, 0x70, 0x64, 0x39, 0x0a, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0xff, 0xff, 0xf0, 0x5c, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, - 0xef, 0xff, 0xff, 0xb6, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, - 0x9b, 0xff, 0xfc, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0f, 0x8f, 0xf2, 0xfc, 0xba, 0x30, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0xfc, 0xff, - 0x85, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x77, 0xff, 0xff, 0xb0, 0x19, 0x00, 0x00, 0x00, 0x15, 0x70, 0xd8, - 0xfc, 0xec, 0xc3, 0x9b, 0x7a, 0x5b, 0x49, 0x60, 0xcb, 0xff, 0xe3, - 0x49, 0x00, 0x00, 0x00, 0x88, 0xff, 0xff, 0x85, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x49, 0xe0, 0xff, 0xe0, 0x33, 0x00, 0x00, 0x1c, 0xb6, 0xff, + 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, + 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x9c, + 0xfb, 0xff, 0xc1, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0xd8, + 0xff, 0xda, 0x65, 0x06, 0x00, 0x00, 0x00, 0x00, 0x06, 0x5a, 0xd6, + 0xff, 0xf1, 0x69, 0x09, 0x00, 0x00, 0x00, 0x40, 0xd6, 0xff, 0xc9, + 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0xda, 0xff, 0xe3, + 0x49, 0x00, 0x00, 0x00, 0x00, 0x4f, 0xd8, 0xff, 0xd4, 0x4d, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x7e, 0x42, 0x00, 0x00, + 0x00, 0x40, 0xda, 0xff, 0xca, 0x36, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x5d, 0xe1, 0xff, 0xff, 0xe0, 0x33, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, - 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x65, 0xb3, 0xec, 0xfc, - 0xdc, 0xea, 0xff, 0xd6, 0xea, 0xfc, 0xde, 0x9a, 0x3f, 0x08, 0x00, + 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x15, 0x03, 0x00, 0x00, + 0x49, 0xe3, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x09, 0x13, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x4c, 0xde, 0xff, 0xa0, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1a, 0xa7, 0xff, 0xfc, 0xa5, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x52, 0xde, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0x70, 0xdb, 0xff, 0xff, 0xef, 0xe0, 0xe0, + 0xef, 0xff, 0xff, 0xdc, 0x7e, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x15, 0x68, 0xc9, 0xf9, 0xff, 0xf5, 0xcf, 0x94, + 0x47, 0x25, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xc2, 0x42, 0x08, 0x00, 0x00, - 0x00, 0x21, 0xa0, 0xff, 0xff, 0xf8, 0xef, 0x83, 0x13, 0x00, 0x00, - 0x00, 0x03, 0x51, 0xd4, 0xff, 0xe6, 0x54, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0xa5, 0xfc, 0xf7, 0x98, 0x1b, + 0x00, 0x03, 0x32, 0xc9, 0xff, 0xf6, 0x98, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x09, 0x47, 0x95, 0xcc, 0xf1, 0xff, 0xfc, 0xec, 0xe3, 0xe7, - 0xf7, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xe0, 0x33, 0x00, 0x00, + 0x0e, 0x95, 0xfc, 0xf7, 0x84, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0d, 0x76, 0xf6, 0xff, 0xc0, 0x30, 0x00, 0x00, 0x00, 0x49, + 0xe0, 0xff, 0xad, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, + 0xbb, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x09, 0x9a, 0xfc, 0xf7, + 0x84, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, + 0x12, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x13, 0x9a, 0xfc, 0xff, 0xe0, 0x33, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x21, 0x6f, 0xca, 0xf7, 0xff, 0xff, 0xff, 0xea, 0xa7, 0x52, 0x13, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x80, 0xfc, 0xf1, 0x64, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x52, 0xe5, 0xff, 0xe6, 0x54, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x21, 0xbb, 0xff, 0xe3, 0x52, 0x00, 0x00, + 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x0f, 0x7d, 0x9e, + 0x4f, 0x0d, 0x00, 0x49, 0xe3, 0xff, 0x8f, 0x00, 0x00, 0x1b, 0x6f, + 0x9a, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x69, 0xde, 0xff, 0xea, 0xad, + 0x6a, 0x49, 0x49, 0x64, 0xa0, 0xda, 0xfc, 0xd5, 0x28, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x8b, 0xe4, 0xff, 0xff, 0xf1, + 0xe3, 0xe7, 0xf6, 0xcf, 0x80, 0xc3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xf3, 0xd8, 0xf3, 0xc2, - 0x70, 0x3a, 0x33, 0x52, 0xa0, 0xef, 0xff, 0xf9, 0xad, 0xcd, 0xe1, - 0x8d, 0x45, 0x33, 0x40, 0x6b, 0xc7, 0xfc, 0xff, 0xb9, 0x25, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xa0, 0x09, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe9, 0x59, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xcd, - 0xff, 0xea, 0x66, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xb6, 0x1c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x39, 0x71, 0x96, 0xba, - 0xcc, 0xcc, 0xd2, 0xf0, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x8f, - 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0xd4, 0xff, 0xec, 0x74, + 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xd9, 0x42, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0xd5, 0xff, 0xef, 0x64, 0x00, + 0x00, 0x00, 0x30, 0xc0, 0xff, 0xcf, 0x48, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x35, + 0xdf, 0xff, 0xcf, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, - 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xe0, + 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0xe9, 0xff, 0xe0, 0x33, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x88, 0xee, 0xff, 0xff, 0xff, 0xcf, - 0x4e, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xa4, 0xff, 0xda, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x7c, 0xff, 0xff, 0xc4, 0x2a, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, + 0x3b, 0xe1, 0xfc, 0xd8, 0x80, 0x21, 0x33, 0xcc, 0xff, 0x71, 0x03, + 0x41, 0xa2, 0xec, 0xfc, 0x85, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xd8, 0xff, + 0xdf, 0x6b, 0x1c, 0x03, 0x00, 0x00, 0x00, 0x13, 0x46, 0x9a, 0xa6, + 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x8f, 0xf2, 0xff, + 0xf2, 0xb6, 0x6a, 0x49, 0x50, 0x7b, 0xc5, 0xe9, 0xef, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xe3, - 0x6a, 0x90, 0xe8, 0xf6, 0xe3, 0xe0, 0xef, 0xff, 0xff, 0xff, 0xc1, - 0x28, 0x48, 0xc2, 0xf6, 0xe9, 0xe0, 0xe6, 0xf9, 0xff, 0xff, 0xea, - 0x65, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x65, 0xea, 0xff, 0xd4, 0x4a, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xf3, 0xff, 0x8a, 0x06, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xff, - 0xff, 0x9e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x16, 0x1f, 0x1f, 0x3a, 0xbf, 0xff, 0xe3, 0x49, 0x00, - 0x00, 0x00, 0x74, 0xff, 0xff, 0x97, 0x0c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, + 0xcb, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, + 0xfc, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, + 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x65, + 0xea, 0xff, 0xd8, 0x4f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0xeb, 0xff, 0xab, 0x19, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xa1, 0xff, + 0xff, 0x8f, 0x08, 0x00, 0x00, 0x08, 0x6a, 0xea, 0xfc, 0xc5, 0x65, + 0x29, 0x0e, 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, + 0x00, 0x00, 0x64, 0xff, 0xff, 0xa6, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xe0, 0x33, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x36, 0x97, 0xea, 0xff, 0xff, - 0xff, 0xff, 0xfb, 0xce, 0x76, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, - 0xff, 0xbb, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xa5, 0xff, - 0xff, 0x91, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, + 0x00, 0x00, 0x00, 0x20, 0xa1, 0xea, 0xff, 0xf2, 0xa5, 0x5b, 0xbe, + 0xff, 0x6e, 0x65, 0xcd, 0xfc, 0xfc, 0xcf, 0x55, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, + 0x9a, 0xfc, 0xe4, 0x73, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x15, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, + 0xea, 0xff, 0xf2, 0x96, 0x27, 0x03, 0x00, 0x00, 0x03, 0x40, 0xbf, + 0xfc, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0xff, 0xe3, 0x52, 0x17, 0x5d, 0xaa, 0xe3, 0xfc, 0xff, 0xfc, - 0xea, 0xa3, 0x3d, 0x00, 0x06, 0x36, 0x8d, 0xd5, 0xf6, 0xff, 0xff, - 0xf5, 0xce, 0x70, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xff, 0xff, 0xf0, 0x5c, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x52, 0xef, 0xff, 0xff, 0xb6, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x9b, 0xff, 0xfc, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x9a, 0xfc, 0xf9, 0xb5, 0x30, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0xde, - 0xff, 0xab, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xa0, 0xff, 0xfb, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, - 0xe3, 0x49, 0x00, 0x00, 0x00, 0x4c, 0xf9, 0xff, 0xbb, 0x21, 0x00, + 0x00, 0x00, 0x0f, 0x8f, 0xf2, 0xfc, 0xba, 0x30, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0xfc, + 0xff, 0x85, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x77, 0xff, 0xff, 0xb0, 0x19, 0x00, 0x00, 0x00, 0x15, 0x70, + 0xd8, 0xfc, 0xec, 0xc3, 0x9b, 0x7a, 0x5b, 0x49, 0x60, 0xcb, 0xff, + 0xe3, 0x49, 0x00, 0x00, 0x00, 0x88, 0xff, 0xff, 0x85, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xe0, 0x33, 0x00, 0x00, 0x1c, 0xb6, - 0xff, 0xff, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, - 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x71, 0xc9, 0xf9, - 0xfc, 0xd8, 0xe7, 0xff, 0xd2, 0xe7, 0xff, 0xf0, 0xac, 0x47, 0x09, + 0xff, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x65, 0xb3, 0xec, + 0xfc, 0xdc, 0xea, 0xff, 0xd6, 0xea, 0xfc, 0xde, 0x9a, 0x3f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0xb6, 0xff, 0xdf, 0x9b, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, - 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x4c, 0xde, 0xff, 0xa0, 0x15, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1a, 0xa7, 0xff, 0xfc, 0xa5, 0x21, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x52, 0xde, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x40, 0x80, 0x72, 0x29, 0x00, 0x03, 0x21, 0x54, - 0x7a, 0x80, 0x7a, 0x5b, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x13, 0x42, - 0x70, 0x80, 0x80, 0x6e, 0x3f, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xc2, 0x42, 0x08, 0x00, + 0x00, 0x00, 0x21, 0xa0, 0xff, 0xff, 0xf8, 0xef, 0x83, 0x13, 0x00, + 0x00, 0x00, 0x03, 0x51, 0xd4, 0xff, 0xe6, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0xc5, - 0xff, 0xf9, 0x9a, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x26, 0xbd, 0xff, 0xcf, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x20, 0xca, 0xff, 0xe3, 0x54, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x2a, 0xd4, 0xff, - 0xd9, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0xa5, 0xfc, 0xf7, 0x98, + 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x09, 0x47, 0x95, 0xcc, 0xf1, 0xff, 0xfc, 0xec, 0xe3, + 0xe7, 0xf7, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xe0, 0x33, 0x00, - 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x20, 0xa1, - 0xea, 0xff, 0xf2, 0xa5, 0x5b, 0xbe, 0xff, 0x6e, 0x65, 0xcd, 0xfc, - 0xfc, 0xcf, 0x55, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x70, 0x00, - 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, + 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x21, 0x6f, 0xca, 0xf7, 0xff, 0xff, 0xff, 0xea, 0xa7, 0x52, + 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0xfc, 0xf1, 0x64, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x52, 0xe5, 0xff, 0xe6, 0x54, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xbb, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xf3, 0xd8, 0xf3, + 0xc2, 0x70, 0x3a, 0x33, 0x52, 0xa0, 0xef, 0xff, 0xf9, 0xad, 0xcd, + 0xe1, 0x8d, 0x45, 0x33, 0x40, 0x6b, 0xc7, 0xfc, 0xff, 0xb9, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x5a, 0xde, 0xff, 0xf0, 0x70, 0x0d, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0xf7, 0xf7, 0x84, 0x0f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x76, 0xf6, 0xff, 0xaa, 0x21, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3f, 0xcf, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, - 0x09, 0x8f, 0xf7, 0xf7, 0x84, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, + 0xcd, 0xff, 0xea, 0x66, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xb6, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x39, 0x71, 0x96, + 0xba, 0xcc, 0xcc, 0xd2, 0xf0, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, + 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, - 0xe0, 0x33, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0xca, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xa0, 0xff, 0xff, 0x80, 0x00, 0x00, - 0x00, 0x3b, 0xe1, 0xfc, 0xd8, 0x80, 0x21, 0x33, 0xcc, 0xff, 0x71, - 0x03, 0x41, 0xa2, 0xec, 0xfc, 0x85, 0x06, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x9b, 0xff, 0xf7, - 0xcb, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xc4, 0xf6, - 0xfc, 0x69, 0x00, 0x00, 0x00, 0x00, 0x19, 0xa6, 0xff, 0xff, 0x85, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, - 0xe3, 0x52, 0x00, 0x00, 0x00, 0x0e, 0x1c, 0x1c, 0x5d, 0xe3, 0xff, - 0xb6, 0x1c, 0x1c, 0x1c, 0x1c, 0x19, 0x08, 0x00, 0x00, 0x00, 0x00, + 0xe0, 0x33, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x70, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x88, 0xee, 0xff, 0xff, 0xff, + 0xcf, 0x4e, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xa4, 0xff, 0xda, + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x7c, 0xff, 0xff, 0xc4, + 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, + 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, + 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, + 0xe3, 0x6a, 0x90, 0xe8, 0xf6, 0xe3, 0xe0, 0xef, 0xff, 0xff, 0xff, + 0xc1, 0x28, 0x48, 0xc2, 0xf6, 0xe9, 0xe0, 0xe6, 0xf9, 0xff, 0xff, + 0xea, 0x65, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x65, 0xea, 0xff, 0xd4, 0x4a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xf3, 0xff, 0x8a, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, + 0xff, 0xff, 0x9e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x16, 0x1f, 0x1f, 0x3a, 0xbf, 0xff, 0xe3, 0x49, + 0x00, 0x00, 0x00, 0x74, 0xff, 0xff, 0x97, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x8c, 0xd4, 0xff, 0xff, 0xda, 0x5a, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xc0, 0xff, - 0xd8, 0x69, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x5d, 0xd4, 0xff, - 0xe1, 0x49, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x5d, 0x13, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x95, 0xf7, 0xfc, 0x95, 0x0e, - 0x00, 0x00, 0x00, 0x00, 0x36, 0xc0, 0xff, 0xde, 0x69, 0x0f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x3f, 0x60, 0x16, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xe0, 0x33, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, - 0xf6, 0x76, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x46, 0xd4, 0xff, 0xf1, - 0x64, 0x00, 0x00, 0x00, 0x0f, 0x7d, 0x9e, 0x4f, 0x0d, 0x00, 0x49, - 0xe3, 0xff, 0x8f, 0x00, 0x00, 0x1b, 0x6f, 0x9a, 0x3a, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x36, 0x97, 0xea, 0xff, + 0xff, 0xff, 0xff, 0xfb, 0xce, 0x76, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, + 0xb6, 0xff, 0xbb, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xa5, + 0xff, 0xff, 0x91, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x49, 0xe0, 0xff, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0xf7, 0xf4, 0x7e, 0x1f, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, - 0x1c, 0x68, 0xf3, 0xe9, 0x45, 0x00, 0x00, 0x00, 0x00, 0x08, 0x81, - 0xff, 0xff, 0xab, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x5b, 0xb6, 0xb6, - 0xcb, 0xf6, 0xff, 0xe7, 0xb6, 0xb6, 0xb6, 0xb6, 0xa2, 0x34, 0x00, + 0x00, 0x80, 0xff, 0xe3, 0x52, 0x17, 0x5d, 0xaa, 0xe3, 0xfc, 0xff, + 0xfc, 0xea, 0xa3, 0x3d, 0x00, 0x06, 0x36, 0x8d, 0xd5, 0xf6, 0xff, + 0xff, 0xf5, 0xce, 0x70, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x9a, 0xfc, 0xf9, 0xb5, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, + 0xde, 0xff, 0xab, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xa0, 0xff, 0xfb, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xb6, + 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x4c, 0xf9, 0xff, 0xbb, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xa6, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x5a, 0xde, 0xfc, 0xe3, 0x8c, 0x46, 0x21, 0x1c, 0x38, 0x84, - 0xd8, 0xfc, 0xea, 0x7d, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, - 0xad, 0xe1, 0x9a, 0x59, 0x33, 0x1c, 0x1c, 0x30, 0x8f, 0xea, 0xff, - 0xd8, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x5a, 0xde, 0xff, - 0xde, 0x8c, 0x3c, 0x1c, 0x1c, 0x21, 0x42, 0x80, 0xcf, 0xc0, 0x2e, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xe0, 0x33, 0x00, 0x00, 0x1c, - 0xb6, 0xff, 0xf0, 0xe7, 0xda, 0x79, 0x33, 0x1c, 0x29, 0x5a, 0xb7, - 0xf9, 0xff, 0xc7, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x13, 0x03, - 0x00, 0x00, 0x49, 0xe3, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x08, 0x11, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x42, 0xd9, 0xff, 0xb3, 0x25, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x13, 0x94, 0xff, 0xc6, 0x1a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x52, 0xe5, 0xff, 0xde, 0x4c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x21, 0xbb, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, - 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x64, 0x80, 0x80, 0x6e, 0x30, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x29, 0x80, 0x80, 0x5b, 0x0e, 0x00, 0x00, 0x00, + 0xb6, 0xff, 0xff, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x71, 0xc9, + 0xf9, 0xfc, 0xd8, 0xe7, 0xff, 0xd2, 0xe7, 0xff, 0xf0, 0xac, 0x47, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xdf, 0x9b, 0x8f, 0x8f, 0x8f, 0x8f, + 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x3f, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x5b, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, - 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0x81, 0x14, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0d, 0x64, 0xcf, 0xfc, 0xf9, 0xda, 0xbb, - 0xb6, 0xcf, 0xf7, 0xfc, 0xd8, 0x70, 0x15, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x25, 0xae, 0xf9, 0xfc, 0xeb, 0xcc, 0xb6, 0xb6, 0xca, - 0xf6, 0xff, 0xde, 0x69, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0x64, 0xcf, 0xfc, 0xf9, 0xd3, 0xb6, 0xb6, 0xbb, 0xd9, 0xf7, - 0xfc, 0xc5, 0x3b, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1f, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x72, 0x29, 0x00, 0x03, 0x21, + 0x54, 0x7a, 0x80, 0x7a, 0x5b, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x13, + 0x42, 0x70, 0x80, 0x80, 0x6e, 0x3f, 0x0d, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, + 0xc5, 0xff, 0xf9, 0x9a, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x26, 0xbd, 0xff, 0xcf, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x20, 0xca, 0xff, 0xe3, 0x54, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x2a, 0xd4, + 0xff, 0xd9, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xe0, 0x33, - 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xd1, 0x7b, 0xc8, 0xe9, 0xcc, 0xb6, - 0xc3, 0xe6, 0xfc, 0xff, 0xf0, 0x7b, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0x8f, 0x00, 0x00, + 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x9b, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x20, + 0xa1, 0xea, 0xff, 0xf2, 0xa5, 0x5b, 0xbe, 0xff, 0x6e, 0x65, 0xcd, + 0xfc, 0xfc, 0xcf, 0x55, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x70, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x9a, 0xfc, 0xec, 0x82, - 0x0f, 0x00, 0x00, 0x00, 0x00, 0x03, 0x52, 0xda, 0xf9, 0x88, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0xa7, 0xff, 0xfc, 0x9a, 0x13, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0xde, 0xff, 0xe3, 0x52, - 0x00, 0x00, 0x00, 0x40, 0x80, 0x80, 0xa4, 0xef, 0xff, 0xd6, 0x80, - 0x80, 0x80, 0x80, 0x72, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x88, 0xef, 0xff, - 0xff, 0xf5, 0xb2, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, - 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x16, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x47, 0xa2, - 0xee, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xac, 0x4f, 0x0a, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x3d, 0x8a, 0xc9, 0xf9, 0xff, - 0xff, 0xff, 0xff, 0xf5, 0xc2, 0x65, 0x0f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x09, 0x47, 0xac, 0xee, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xf0, 0xac, 0x52, 0x10, 0x00, 0x00, 0x00, 0x49, 0xe3, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x5a, 0xde, 0xff, 0xf0, 0x70, 0x0d, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0xf7, 0xf7, 0x84, 0x0f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x76, 0xf6, 0xff, 0xaa, + 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3f, 0xcf, 0xff, 0xcc, 0x33, 0x00, 0x00, + 0x00, 0x09, 0x8f, 0xf7, 0xf7, 0x84, 0x0d, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, - 0xff, 0xe0, 0x33, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x37, 0x3d, - 0xa1, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xee, 0x90, 0x25, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xda, 0xff, - 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, - 0xcd, 0xff, 0xe7, 0x6f, 0x17, 0x00, 0x00, 0x06, 0x3d, 0xb7, 0xfb, - 0xd0, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0xf5, - 0xff, 0xe1, 0x5d, 0x06, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x91, 0xfc, - 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, - 0xff, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0xb6, 0xf0, 0xd2, 0xcc, 0xe8, 0xfc, 0xb2, 0x27, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, - 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xe0, 0x33, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0xca, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xa0, 0xff, 0xff, 0x80, 0x00, + 0x00, 0x00, 0x3b, 0xe1, 0xfc, 0xd8, 0x80, 0x21, 0x33, 0xcc, 0xff, + 0x71, 0x03, 0x41, 0xa2, 0xec, 0xfc, 0x85, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x9b, 0xff, + 0xf7, 0xcb, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xc4, + 0xf6, 0xfc, 0x69, 0x00, 0x00, 0x00, 0x00, 0x19, 0xa6, 0xff, 0xff, + 0x85, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, + 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x0e, 0x1c, 0x1c, 0x5d, 0xe3, + 0xff, 0xb6, 0x1c, 0x1c, 0x1c, 0x1c, 0x19, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0e, 0x42, 0x74, 0x8f, 0x8f, 0x7e, 0x4a, 0x15, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, - 0x25, 0x53, 0x7e, 0x8f, 0x8f, 0x83, 0x4f, 0x1f, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x42, - 0x7b, 0x8f, 0x8f, 0x8f, 0x71, 0x44, 0x15, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x29, 0x80, 0x8f, 0x66, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x29, 0x7e, 0x8f, 0x7e, 0x1d, 0x00, 0x00, 0x10, 0x66, 0x8f, - 0x72, 0x1d, 0x00, 0x15, 0x44, 0x71, 0x8f, 0x8f, 0x74, 0x42, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0x5f, 0x83, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x8c, 0xd4, 0xff, 0xff, 0xda, + 0x5a, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xc0, + 0xff, 0xd8, 0x69, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x5d, 0xd4, + 0xff, 0xe1, 0x49, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x5d, + 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x95, 0xf7, 0xfc, 0x95, + 0x0e, 0x00, 0x00, 0x00, 0x00, 0x36, 0xc0, 0xff, 0xde, 0x69, 0x0f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x3f, 0x60, 0x16, 0x00, 0x00, + 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x49, 0xe0, 0xff, 0xe0, 0x33, 0x00, 0x00, 0x1c, 0xb6, 0xff, + 0xff, 0xf6, 0x76, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x46, 0xd4, 0xff, + 0xf1, 0x64, 0x00, 0x00, 0x00, 0x0f, 0x7d, 0x9e, 0x4f, 0x0d, 0x00, + 0x49, 0xe3, 0xff, 0x8f, 0x00, 0x00, 0x1b, 0x6f, 0x9a, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x65, 0xea, 0xff, 0xf1, 0xbc, 0x81, 0x70, 0x94, - 0xda, 0xfc, 0xf5, 0x71, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x18, 0xab, 0xf9, 0xff, 0xe1, 0x82, 0x2b, 0x06, 0x00, 0x24, - 0x79, 0xe1, 0xff, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x49, 0xe0, 0xff, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x13, 0x69, 0x65, 0x3b, 0x33, 0x73, 0xe1, 0xf3, 0x6e, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x52, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x70, 0xf7, 0xf4, 0x7e, 0x1f, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, + 0x1c, 0x1c, 0x68, 0xf3, 0xe9, 0x45, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x81, 0xff, 0xff, 0xab, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x5b, 0xb6, + 0xb6, 0xcb, 0xf6, 0xff, 0xe7, 0xb6, 0xb6, 0xb6, 0xb6, 0xa2, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xa6, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x5a, 0xde, 0xfc, 0xe3, 0x8c, 0x46, 0x21, 0x1c, 0x38, + 0x84, 0xd8, 0xfc, 0xea, 0x7d, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1a, 0xad, 0xe1, 0x9a, 0x59, 0x33, 0x1c, 0x1c, 0x30, 0x8f, 0xea, + 0xff, 0xd8, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x5a, 0xde, + 0xff, 0xde, 0x8c, 0x3c, 0x1c, 0x1c, 0x21, 0x42, 0x80, 0xcf, 0xc0, + 0x2e, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xe0, 0x33, 0x00, 0x00, + 0x1c, 0xb6, 0xff, 0xf0, 0xe7, 0xda, 0x79, 0x33, 0x1c, 0x29, 0x5a, + 0xb7, 0xf9, 0xff, 0xc7, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x13, + 0x03, 0x00, 0x00, 0x49, 0xe3, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x08, + 0x11, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x42, 0xd9, 0xff, 0xb3, 0x25, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x13, 0x94, 0xff, 0xc6, 0x1a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x52, 0xe5, 0xff, 0xde, 0x4c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x21, 0xbb, 0xff, 0xe3, 0x52, 0x00, 0x00, + 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x64, 0x80, 0x80, 0x6e, + 0x30, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x29, 0x80, 0x80, 0x5b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x5b, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, + 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0x81, 0x14, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x64, 0xcf, 0xfc, 0xf9, 0xda, + 0xbb, 0xb6, 0xcf, 0xf7, 0xfc, 0xd8, 0x70, 0x15, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x25, 0xae, 0xf9, 0xfc, 0xeb, 0xcc, 0xb6, 0xb6, + 0xca, 0xf6, 0xff, 0xde, 0x69, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0d, 0x64, 0xcf, 0xfc, 0xf9, 0xd3, 0xb6, 0xb6, 0xbb, 0xd9, + 0xf7, 0xfc, 0xc5, 0x3b, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, + 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xe0, + 0x33, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xd1, 0x7b, 0xc8, 0xe9, 0xcc, + 0xb6, 0xc3, 0xe6, 0xfc, 0xff, 0xf0, 0x7b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x70, 0xce, 0xfb, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xea, 0x96, 0x18, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xb7, 0xfc, 0xff, 0xf0, 0xc0, - 0x96, 0x8f, 0xb7, 0xed, 0xcd, 0xdc, 0xff, 0xe3, 0x52, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xad, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, - 0x91, 0xfc, 0xb0, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x09, 0x1b, 0x1f, 0x1b, 0x09, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, - 0x2f, 0x83, 0xbd, 0xda, 0xe0, 0xd1, 0xa1, 0x53, 0x11, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0xa3, - 0xea, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xa3, 0x4d, 0xb6, 0xff, 0xe3, - 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xad, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x54, 0xe6, 0xde, 0x4c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x9a, 0xfc, 0xec, + 0x82, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x03, 0x52, 0xda, 0xf9, 0x88, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0xa7, 0xff, 0xfc, 0x9a, + 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0xde, 0xff, 0xe3, + 0x52, 0x00, 0x00, 0x00, 0x40, 0x80, 0x80, 0xa4, 0xef, 0xff, 0xd6, + 0x80, 0x80, 0x80, 0x80, 0x72, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x88, 0xef, + 0xff, 0xff, 0xf5, 0xb2, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x16, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x47, + 0xa2, 0xee, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xac, 0x4f, 0x0a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x3d, 0x8a, 0xc9, 0xf9, + 0xff, 0xff, 0xff, 0xff, 0xf5, 0xc2, 0x65, 0x0f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x47, 0xac, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf0, 0xac, 0x52, 0x10, 0x00, 0x00, 0x00, 0x49, + 0xe3, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, + 0xe0, 0xff, 0xe0, 0x33, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x37, + 0x3d, 0xa1, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xee, 0x90, 0x25, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xda, + 0xff, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x9f, 0xb6, 0x9f, 0x34, 0x00, + 0x41, 0xcd, 0xff, 0xe7, 0x6f, 0x17, 0x00, 0x00, 0x06, 0x3d, 0xb7, + 0xfb, 0xd0, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, + 0xf5, 0xff, 0xe1, 0x5d, 0x06, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x91, + 0xfc, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, + 0xe0, 0xff, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0x2a, 0x44, 0x49, 0x3c, 0x19, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x21, 0x5f, 0x9b, 0xb6, 0xb6, 0x97, 0x5c, 0x21, 0x17, - 0x81, 0xb6, 0xa2, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, - 0x9f, 0xb6, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xb3, 0xfc, 0x89, 0x08, + 0x1c, 0xb6, 0xf0, 0xd2, 0xcc, 0xe8, 0xfc, 0xb2, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, - 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x2b, 0x30, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0e, 0x42, 0x74, 0x8f, 0x8f, 0x7e, 0x4a, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x34, 0x49, 0x49, 0x29, 0x00, + 0x04, 0x25, 0x53, 0x7e, 0x8f, 0x8f, 0x83, 0x4f, 0x1f, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, + 0x42, 0x7b, 0x8f, 0x8f, 0x8f, 0x71, 0x44, 0x15, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x29, 0x80, 0x8f, 0x66, 0x11, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x29, 0x7e, 0x8f, 0x7e, 0x1d, 0x00, 0x00, 0x10, 0x66, + 0x8f, 0x72, 0x1d, 0x00, 0x15, 0x44, 0x71, 0x8f, 0x8f, 0x74, 0x42, + 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0f, 0x5f, 0x83, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x21, 0x3c, 0x49, 0x49, 0x49, - 0x40, 0x21, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x65, 0xea, 0xff, 0xf1, 0xbc, 0x81, 0x70, + 0x94, 0xda, 0xfc, 0xf5, 0x71, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0xab, 0xf9, 0xff, 0xe1, 0x82, 0x2b, 0x06, 0x00, + 0x24, 0x79, 0xe1, 0xff, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x49, 0xe0, 0xff, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x14, 0x33, 0x49, - 0x49, 0x40, 0x22, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x1c, 0x1c, 0x0c, - 0x00, 0x00, 0x03, 0x14, 0x1c, 0x19, 0x09, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x18, 0x1c, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x76, - 0xf7, 0xc7, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x52, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x0c, 0x1c, - 0x1c, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x49, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x98, 0xab, 0x16, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xa2, 0xe3, - 0xe3, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1c, 0x5c, 0x91, 0xbb, 0xd6, - 0xe3, 0xe3, 0xe3, 0xda, 0xbb, 0x97, 0x5c, 0x21, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x25, 0x65, - 0xa6, 0xcc, 0xe3, 0xe3, 0xda, 0xb8, 0x79, 0x35, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x4f, 0xe6, 0xf1, 0x6a, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, 0xb6, 0x1f, 0x30, - 0x70, 0x97, 0xb6, 0xb6, 0x9b, 0x5f, 0x21, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0xb6, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0xb6, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x4f, 0xa7, 0xea, - 0xff, 0xff, 0xf1, 0xe3, 0xe3, 0xe3, 0xef, 0xff, 0xff, 0xea, 0xad, - 0x4f, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, - 0x48, 0xb9, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xca, - 0x64, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0e, 0x1c, 0x1c, 0x0e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0xeb, 0xff, 0xab, 0x1c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, - 0xc3, 0x76, 0xc0, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xec, 0xad, 0x40, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xe0, 0x49, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0xb6, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x19, 0xb0, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x5a, - 0xd8, 0xfc, 0xf3, 0xc3, 0x8a, 0x64, 0x49, 0x49, 0x49, 0x61, 0x8a, - 0xb9, 0xf3, 0xfc, 0xd8, 0x5a, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x06, 0x5a, 0xcd, 0xff, 0xf7, 0xcf, 0x9b, 0x80, 0x80, 0x97, - 0xd3, 0xf9, 0xff, 0xde, 0x69, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x2c, 0x68, 0x9b, 0xb6, 0xb6, 0x9b, - 0x5f, 0x25, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x32, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x49, 0x34, 0x08, 0x00, 0x00, 0x00, 0x29, 0x49, 0x49, 0x49, 0x49, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x91, 0xf6, 0xf4, - 0xd5, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x52, 0xff, 0xff, 0xed, 0xea, 0xe5, 0xad, 0x8f, 0x9b, 0xc6, 0xf0, - 0xff, 0xfc, 0xb7, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, - 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, - 0x70, 0x70, 0x50, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xcc, 0x1f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x91, 0xff, 0xff, 0xaa, - 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x27, 0xb8, 0xff, 0xf5, 0x8e, 0x32, 0x06, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x06, 0x29, 0x8e, 0xea, 0xff, 0xb8, 0x27, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2f, 0xce, 0xff, 0xee, 0xa1, 0x3f, 0x10, - 0x00, 0x00, 0x0e, 0x43, 0xb5, 0xf9, 0xff, 0xda, 0x4f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x4a, 0xbc, 0xf1, 0xff, - 0xff, 0xff, 0xff, 0xea, 0xb1, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x18, 0x98, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, - 0xe0, 0xe0, 0xe0, 0xe0, 0x9f, 0x18, 0x00, 0x00, 0x00, 0x7e, 0xe0, - 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, - 0xe0, 0xe0, 0xe0, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, - 0xc4, 0xe9, 0xd4, 0xf3, 0x7c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, 0xff, 0xda, 0x69, 0x1a, 0x00, - 0x0a, 0x30, 0x82, 0xe1, 0xff, 0xf9, 0x99, 0x18, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x49, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xcc, - 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0xff, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x68, 0xf3, 0xf6, 0xa0, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x8f, 0xf6, 0xf3, - 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xe1, 0xf5, 0x88, - 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xb7, 0xfc, 0xff, - 0xa3, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x48, 0xc7, - 0xff, 0xff, 0xf6, 0xe3, 0xe3, 0xf6, 0xff, 0xff, 0xb5, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, - 0x00, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x6e, 0xf3, 0xca, 0xa9, 0xfc, 0xc6, 0x1f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, 0xea, 0x66, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x06, 0x5d, 0xe1, 0xff, 0xe3, 0x5c, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x66, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, - 0x8f, 0x8f, 0x8f, 0x8f, 0xaf, 0xf1, 0xff, 0xf1, 0xaf, 0x8f, 0x8f, - 0x80, 0x29, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0xb6, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x79, 0xfc, 0xff, 0xd2, 0x3b, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xe3, 0x52, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x49, 0xe3, 0xff, 0x80, 0x00, 0x00, 0x00, 0x06, 0x34, 0x49, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, - 0x8e, 0xa9, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x4f, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x36, 0xc8, 0xff, 0xf9, 0xb6, 0x65, 0x3a, 0x3a, 0x65, 0xbe, 0xfb, - 0xff, 0xc7, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x4c, 0x70, 0x70, - 0x70, 0x70, 0xb7, 0xff, 0xff, 0xc0, 0x70, 0x70, 0x70, 0x70, 0x50, - 0x0c, 0x00, 0x00, 0x00, 0x75, 0xf0, 0xff, 0xf6, 0xe3, 0xe0, 0xe0, - 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x62, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0xab, 0xff, 0xa6, 0x6d, 0xeb, 0xf0, - 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, - 0xff, 0xc3, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x9a, - 0xfc, 0xfc, 0xac, 0x15, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x80, 0xff, 0xf1, - 0xa2, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0xeb, 0xff, 0xf0, 0x5f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, - 0xf7, 0xeb, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x6a, 0xf1, 0xfc, 0x7a, 0x00, 0x00, 0x00, 0x06, - 0x75, 0xd0, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x2b, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x26, 0xbd, 0xff, 0xfc, 0x80, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x13, 0x90, 0xf7, 0xf9, 0xa5, 0x32, 0x03, 0x00, 0x00, - 0x03, 0x40, 0xb7, 0xfc, 0xfc, 0x97, 0x1b, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x96, 0xf2, 0xea, - 0x89, 0x4c, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x49, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xde, 0xfc, 0x80, - 0x36, 0xcc, 0xff, 0x9a, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x52, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x4c, 0xde, 0xff, 0xf0, 0x44, 0x00, 0x00, 0x00, 0x19, - 0xb0, 0xff, 0xff, 0xd4, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xbe, - 0xe7, 0xff, 0xf6, 0xcb, 0xb6, 0xb6, 0xa2, 0x34, 0x00, 0x00, 0x00, - 0x64, 0xf1, 0xbf, 0x42, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xcc, 0x1f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xd6, 0xff, - 0xff, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x42, 0xd9, 0xfc, 0xac, 0x1c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x09, 0x42, 0xbb, 0xff, 0xde, 0x4c, 0x00, - 0x00, 0x00, 0x00, 0x54, 0xe3, 0x89, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x8f, 0xff, 0xff, 0xa6, - 0x16, 0x00, 0x00, 0x00, 0x00, 0x42, 0xd9, 0xff, 0xc9, 0x2b, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x3d, 0xda, 0xff, 0xea, 0x5f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, - 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x21, 0x96, 0xef, 0xbf, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x9a, - 0xfc, 0xe6, 0x54, 0x14, 0xa6, 0xff, 0xd4, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xab, 0xff, 0xff, 0x64, 0x00, - 0x00, 0x00, 0x08, 0x7b, 0xf2, 0xff, 0xb4, 0x3c, 0x1c, 0x1c, 0x1c, - 0x1c, 0x1c, 0x34, 0xb6, 0xff, 0xe3, 0x5d, 0x1c, 0x1c, 0x19, 0x08, - 0x00, 0x00, 0x00, 0x30, 0xc7, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, - 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1e, 0xb5, 0xff, 0xff, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x8b, 0xf2, 0xf0, 0x9c, 0x54, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x6e, 0x91, 0xd3, 0xf7, 0xf2, - 0x8b, 0x13, 0x00, 0x00, 0x00, 0x00, 0x29, 0xc3, 0xbd, 0x26, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x03, 0x76, 0xf7, 0xf7, - 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x94, 0xff, - 0xff, 0x9b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x21, 0x96, 0xef, 0xbf, 0x48, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x53, 0xdf, 0xff, 0xbd, 0x26, 0x03, 0x76, 0xf6, 0xf9, 0x88, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, 0xb6, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x85, 0xff, - 0xff, 0x88, 0x00, 0x00, 0x00, 0x00, 0x27, 0xb6, 0xff, 0xf0, 0x70, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x89, 0xe8, 0x59, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0xb6, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x8f, 0xff, 0xff, 0xc6, 0x1a, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x9b, - 0xf6, 0xf9, 0xe9, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xf6, 0xff, - 0xff, 0xec, 0x93, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x9b, - 0xec, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x14, - 0xa6, 0xff, 0xd9, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x52, 0xe5, 0xff, 0xc3, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x96, 0xef, - 0xcd, 0x48, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x06, 0xa1, 0xff, 0xfc, 0x89, 0x08, 0x00, 0x42, - 0xd5, 0xff, 0xca, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, - 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x03, 0x5d, - 0xe1, 0xff, 0xc9, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, - 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, - 0xe3, 0x89, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xcc, 0x1f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xf1, 0xff, 0xe9, - 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x5f, 0xec, 0xff, 0xef, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, - 0xe3, 0xcf, 0xb6, 0x97, 0x5f, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x25, 0x99, 0xf9, 0x9b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x85, 0xff, 0xff, 0xa6, 0x16, 0x00, - 0x00, 0x00, 0x33, 0xcc, 0xff, 0xbb, 0x25, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xde, 0x44, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x21, 0x96, 0xf0, 0xcd, 0x5a, 0x06, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xd6, 0xff, 0xe3, 0x52, - 0x00, 0x00, 0x1c, 0xa7, 0xff, 0xf5, 0x5c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x13, 0x69, 0x65, 0x3b, 0x33, 0x73, 0xe1, 0xf3, + 0x6e, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x15, 0x98, 0xff, 0xfb, 0x83, 0x0c, 0x00, 0x00, 0x00, - 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x2a, 0xc4, 0xb8, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, - 0xcf, 0xff, 0xfb, 0x75, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0x91, 0xfb, 0xce, 0x6d, 0x52, 0x52, - 0x52, 0x52, 0x52, 0x52, 0x3c, 0x1f, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0xe9, 0xfc, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xa4, 0xff, 0xff, - 0x86, 0x04, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xab, 0x19, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xe3, - 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, - 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x9a, 0xf9, 0xd6, 0x4a, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x75, 0xfb, - 0xff, 0xb0, 0x1c, 0x00, 0x00, 0x03, 0x6b, 0xf9, 0xff, 0x99, 0x13, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x70, 0xce, 0xfb, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xea, 0x96, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xb7, 0xfc, 0xff, 0xf0, + 0xc0, 0x96, 0x8f, 0xb7, 0xed, 0xcd, 0xdc, 0xff, 0xe3, 0x52, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xad, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x91, 0xfc, 0xb0, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, 0xb6, 0x1c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x97, 0xff, 0xff, 0x83, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xd3, 0xff, 0xd6, 0x46, - 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x3b, 0x44, 0x12, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x69, - 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x80, - 0xd6, 0xe2, 0x81, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, - 0x70, 0x70, 0x69, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x09, 0x91, 0xff, 0xff, 0xb0, 0x22, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0x66, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x61, 0xad, 0x8f, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, - 0xd5, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x61, 0xef, 0xff, - 0x86, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, - 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x9a, - 0xf5, 0xd6, 0x5a, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x25, 0xb1, 0xff, 0xfb, 0x84, 0x06, 0x00, 0x00, 0x00, 0x39, 0xe0, - 0xff, 0xcd, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, - 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xc4, - 0xff, 0xff, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, - 0xf9, 0xf9, 0x99, 0x15, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7b, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0x6e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xee, 0xff, 0xd9, 0x47, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0xb6, 0xff, 0x52, 0x0a, 0x30, 0x4d, 0x52, 0x44, 0x1c, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x8f, 0xff, 0xf3, 0x7f, 0x0f, 0x00, 0x00, 0x00, - 0x00, 0x0a, 0x79, 0xf3, 0xff, 0xad, 0x1c, 0x00, 0x00, 0x00, 0x00, - 0x80, 0xff, 0xff, 0x86, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x33, 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x09, 0x1b, 0x1f, 0x1b, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x23, 0x9a, 0xf9, 0xd4, 0x65, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x5f, 0xea, 0xff, 0xda, 0x4c, 0x00, 0x00, 0x00, - 0x00, 0x0f, 0xb5, 0xff, 0xf6, 0x76, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x2f, 0x83, 0xbd, 0xda, 0xe0, 0xd1, 0xa1, 0x53, 0x11, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, + 0xa3, 0xea, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xa3, 0x4d, 0xb6, 0xff, + 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, + 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x54, 0xe6, 0xde, 0x4c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, + 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x9f, 0xb6, 0x9f, 0x34, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x2a, 0x44, 0x49, 0x3c, 0x19, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x21, 0x5f, 0x9b, 0xb6, 0xb6, 0x97, 0x5c, 0x21, + 0x17, 0x81, 0xb6, 0xa2, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x34, 0x9f, 0xb6, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xb3, 0xfc, 0x89, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x54, 0xe6, 0xff, 0xe5, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x36, 0xc2, 0xff, 0xde, 0x4c, 0x00, 0x00, 0x1c, 0xad, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3b, 0x7a, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x8d, 0xda, 0xe5, 0x8f, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7a, 0x34, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xc0, - 0xff, 0xf6, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x14, 0xa6, 0xff, 0x91, 0x79, 0xc4, 0xde, 0xe3, 0xd6, - 0xa5, 0x58, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x40, 0x80, 0x80, 0x5b, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xde, 0x74, - 0x21, 0x03, 0x00, 0x15, 0x5e, 0xcf, 0xff, 0xde, 0x5a, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xa6, 0x16, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0xda, 0xff, 0xd6, 0x3c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0xa5, 0xf2, 0xde, 0x69, - 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xa0, 0xff, 0xff, 0xa1, 0x19, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xf0, 0xff, 0xb3, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, 0xc6, 0x2f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x21, 0xa5, 0xfc, 0xfc, 0xa7, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x5c, 0xf0, 0xfc, 0x9a, 0x13, - 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x2b, 0x30, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x34, 0x49, 0x49, 0x29, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x21, 0x3c, 0x49, 0x49, + 0x49, 0x40, 0x21, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x14, 0x33, + 0x49, 0x49, 0x40, 0x22, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xcc, - 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x70, 0xf0, 0xff, 0xc7, 0x30, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x71, 0xf0, 0xf3, 0xf3, 0xfc, - 0xeb, 0xe3, 0xf1, 0xfc, 0xe3, 0x76, 0x15, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, - 0xff, 0xff, 0xec, 0xb3, 0x85, 0x80, 0xa3, 0xe3, 0xfc, 0xe4, 0x74, - 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcf, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xf9, 0xff, - 0xb5, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, - 0xa5, 0xfc, 0xde, 0x5a, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xd9, 0xff, - 0xe5, 0x58, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0xc0, 0xff, - 0xe6, 0x54, 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, 0xf2, 0x96, - 0x27, 0x03, 0x00, 0x00, 0x03, 0x27, 0x96, 0xf2, 0xff, 0xde, 0x55, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0xa1, - 0xf7, 0xde, 0x4c, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x80, 0x5b, 0x0e, 0x00, - 0x00, 0x00, 0x40, 0x80, 0x80, 0x5b, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0xb6, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xac, 0xff, 0xf1, 0x6a, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4b, 0xdc, - 0xff, 0xf0, 0x9a, 0x59, 0x49, 0x6a, 0xc5, 0xfc, 0xea, 0x7d, 0x06, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x8f, 0xff, 0xf1, 0xc4, 0xde, 0xfc, 0xff, 0xff, 0xff, 0xf6, - 0xca, 0x67, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, - 0xff, 0xf7, 0x8f, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, - 0xc3, 0xff, 0xf6, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3a, 0xc5, 0xff, 0xc5, 0x40, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x80, 0xf7, 0xff, 0xa7, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x84, 0xff, 0xfc, 0x95, 0x0e, 0x00, 0x00, 0x00, 0x52, 0xff, - 0xff, 0xfa, 0xed, 0xb6, 0x76, 0x50, 0x49, 0x6e, 0xb6, 0xf2, 0xff, - 0xf2, 0x8b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3c, 0xca, 0xfc, 0x9a, 0x13, 0x1c, 0xad, 0xff, 0xe0, - 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, - 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xea, - 0xff, 0xb3, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x80, 0xf6, 0xf0, 0x8f, 0x15, 0x00, 0x00, 0x03, 0x40, 0xbe, - 0xff, 0xda, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xe3, 0x5c, 0x4c, 0x89, 0xb0, - 0xb6, 0xa4, 0x6e, 0x35, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0xff, 0xff, 0xff, 0xdf, 0x53, 0x0c, 0x00, 0x00, 0x00, - 0x00, 0x0d, 0x76, 0xf6, 0xff, 0xc3, 0x35, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x5d, 0xe4, 0xfc, 0xad, - 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x30, 0xc7, 0xff, 0xf0, 0x55, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3f, 0xe5, 0xff, 0xcc, 0x33, 0x00, 0x00, - 0x00, 0x52, 0xff, 0xff, 0xd1, 0xa4, 0xde, 0xf4, 0xe7, 0xe3, 0xf3, - 0xff, 0xff, 0xf2, 0x96, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x7b, 0xf2, 0xde, 0x4c, 0x1c, - 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, - 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xcc, 0x1f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0f, 0x95, 0xf7, 0xec, 0x6f, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x26, 0xbd, 0xff, 0xc0, 0x2b, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x65, 0xf6, 0xfc, 0x7b, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0x4b, 0x72, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xe3, 0x49, - 0x00, 0x08, 0x19, 0x1c, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7a, 0xfc, 0xff, 0xd4, 0xda, 0xd8, 0x86, - 0x42, 0x21, 0x1c, 0x38, 0x84, 0xda, 0xff, 0xf0, 0x6a, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, - 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, - 0xa0, 0xff, 0xec, 0x72, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xef, 0xff, 0xc6, 0x1f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xb1, 0xff, 0xef, - 0x61, 0x00, 0x00, 0x00, 0x42, 0xcc, 0xcc, 0x91, 0x2b, 0x55, 0x9a, - 0xcf, 0xf9, 0xff, 0xf9, 0xd4, 0x89, 0x25, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0xbd, - 0xfc, 0x91, 0x28, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0xff, 0xe5, 0x91, 0x16, 0x00, 0x00, 0x00, - 0x80, 0xff, 0xe5, 0x91, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, - 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0xc8, 0xff, 0xc3, 0x2c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0xde, 0xff, 0x96, 0x06, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xe4, 0xff, 0xa5, 0x18, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x7b, 0xea, 0x61, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, - 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0xec, 0xff, 0xa6, - 0x72, 0xdb, 0xf5, 0xd5, 0xb2, 0xad, 0xca, 0xf6, 0xff, 0xf5, 0x9a, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x68, 0xf3, 0xff, 0xb8, 0x23, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x52, 0x52, - 0x36, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2e, 0x52, 0x52, 0x29, 0x00, 0x00, 0x00, 0x0a, 0x1f, 0x1f, 0x16, - 0x03, 0x00, 0x09, 0x26, 0x4c, 0x52, 0x4d, 0x2a, 0x09, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x65, 0xea, 0xd5, 0x56, 0xad, 0xff, 0xe0, 0x49, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0xec, 0xb4, 0x29, 0x03, - 0x00, 0x00, 0x00, 0x5b, 0xec, 0xb4, 0x29, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0xb6, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x65, 0xea, - 0xf6, 0x86, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, - 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, - 0xad, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0xdd, - 0x97, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x8f, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, - 0xda, 0xff, 0xb6, 0x25, 0x3e, 0x96, 0xdf, 0xff, 0xff, 0xff, 0xff, - 0xf5, 0x84, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xee, 0x5c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xf3, 0x83, 0xad, 0xff, - 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0xc3, - 0xcf, 0x35, 0x00, 0x00, 0x00, 0x00, 0x2c, 0xc3, 0xcf, 0x35, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xcc, 0x1f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0xa7, 0xfc, 0xd3, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x44, 0xde, 0xff, 0x96, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3b, 0xe4, 0xff, 0xa5, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x25, 0xbf, 0xc4, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xe3, 0x49, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x22, 0xb8, 0xff, 0xcf, 0x3c, 0x00, 0x11, 0x4c, 0x81, - 0xa6, 0xad, 0x9b, 0x6b, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xca, - 0xff, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x5d, 0xe4, - 0xb6, 0xbc, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x89, 0xe8, 0x59, 0x00, 0x00, 0x00, 0x00, 0x08, 0x89, - 0xe8, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xcc, 0x1f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x40, 0xc5, 0xf7, 0x98, 0x1e, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x26, 0xbd, 0xff, 0xc0, 0x2b, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x65, 0xf6, 0xfc, 0x7b, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0e, 0x9b, 0xec, 0x5f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xe3, - 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x89, 0xfc, 0xf1, 0x71, 0x00, - 0x00, 0x00, 0x08, 0x19, 0x1c, 0x14, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, - 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x09, 0x4e, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x29, 0xc3, 0xff, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x13, 0x9a, 0xe5, 0xe5, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0xe3, 0x89, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x54, 0xe3, 0x89, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0xb6, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x1c, 0x1c, 0x1c, - 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1f, 0x76, 0xec, - 0xec, 0x82, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0xf6, 0xf0, - 0x8f, 0x15, 0x00, 0x00, 0x03, 0x40, 0xbe, 0xff, 0xda, 0x36, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x99, 0xf9, 0x9b, - 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x8f, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0xe6, - 0xff, 0xb3, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x06, 0x4d, 0xc7, 0x76, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x44, 0xde, 0xff, 0xf0, 0x5f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x15, 0x42, 0x70, 0x80, 0x80, 0x64, 0x35, 0x09, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x33, 0x64, 0x80, 0x80, 0x80, 0x64, 0x30, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xca, 0xe3, 0xe3, 0xc8, 0x41, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0xaf, 0xa4, - 0x1e, 0x00, 0x00, 0x00, 0x00, 0x26, 0xaf, 0xa4, 0x1e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0xb6, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, - 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, - 0xb6, 0xc3, 0xef, 0xff, 0xea, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0xb2, 0xfc, 0xf0, 0x9a, 0x59, 0x49, 0x6a, 0xc5, 0xfc, 0xff, - 0xdb, 0x85, 0x64, 0x49, 0x49, 0x34, 0x08, 0x00, 0x00, 0x00, 0x72, - 0xeb, 0xfc, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x8f, 0xff, 0xeb, 0x7e, 0x49, 0x49, 0x49, 0x49, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x21, 0xad, 0xfc, 0xf0, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0xa2, 0xfc, 0xb3, 0x21, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x6a, 0xf1, 0xff, 0xcb, - 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x4f, 0xa3, 0xd9, 0xf7, 0xff, 0xff, - 0xf1, 0xcf, 0x86, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0d, 0x49, 0x95, 0xcc, 0xf1, 0xff, 0xff, 0xff, 0xf1, - 0xc7, 0x80, 0x30, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x39, 0x49, - 0x49, 0x40, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x34, 0x3c, 0x10, 0x00, 0x00, 0x00, 0x00, 0x08, 0x34, 0x3c, - 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xcc, 0x1f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x70, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x52, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x32, 0xb2, 0xf3, 0xfc, 0xeb, 0xe3, 0xf1, - 0xfc, 0xe3, 0xda, 0xf3, 0xff, 0xf1, 0xe3, 0xe3, 0x92, 0x11, 0x00, - 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xfc, 0xeb, 0xe3, - 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0x72, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x4f, 0xd8, 0xff, 0xb6, 0x32, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x56, 0x79, 0x54, 0x3c, 0x19, 0x83, 0xff, 0xff, 0x8f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x84, 0xf7, - 0xec, 0x65, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xc0, - 0xff, 0xf7, 0x8f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x5a, 0xda, 0xff, 0xfc, - 0xde, 0xbb, 0xc3, 0xec, 0xff, 0xf9, 0xb7, 0x32, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1e, 0x74, 0xd8, 0xfc, 0xff, 0xf7, 0xe7, - 0xe3, 0xe7, 0xf7, 0xff, 0xf7, 0xba, 0x40, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x1c, 0x1c, + 0x0c, 0x00, 0x00, 0x03, 0x14, 0x1c, 0x19, 0x09, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x18, 0x1c, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0x76, 0xf7, 0xc7, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x0c, + 0x1c, 0x1c, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x49, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x98, 0xab, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, - 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, - 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x79, 0xc4, - 0xde, 0xe3, 0xd6, 0xa5, 0x58, 0x40, 0x68, 0x9e, 0xbb, 0xd6, 0xe3, - 0x78, 0x03, 0x00, 0x00, 0x00, 0x72, 0xe3, 0xe3, 0xa2, 0x19, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x80, 0xf0, - 0xf9, 0xb7, 0x45, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xfc, 0xe9, 0xd6, 0xab, 0xc5, - 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x36, 0xc0, 0xff, 0xc5, 0x40, 0x03, 0x00, 0x00, 0x00, 0x09, - 0x35, 0xa0, 0xf7, 0xff, 0xca, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xce, - 0xff, 0xf9, 0xb6, 0x55, 0x25, 0x2e, 0x72, 0xcf, 0xff, 0xfb, 0x9c, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x8c, 0xea, 0xff, 0xf0, - 0xb3, 0x7e, 0x5a, 0x52, 0x5a, 0x8f, 0xdf, 0xff, 0xfc, 0xb7, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xa2, + 0xe3, 0xe3, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1c, 0x5c, 0x91, 0xbb, + 0xd6, 0xe3, 0xe3, 0xe3, 0xda, 0xbb, 0x97, 0x5c, 0x21, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x25, + 0x65, 0xa6, 0xcc, 0xe3, 0xe3, 0xda, 0xb8, 0x79, 0x35, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x30, 0x36, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x52, 0x52, - 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, - 0x52, 0x52, 0x52, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0a, 0x30, 0x4d, 0x52, 0x44, 0x1c, 0x04, 0x00, 0x00, 0x11, - 0x25, 0x44, 0x52, 0x29, 0x00, 0x00, 0x00, 0x00, 0x29, 0x52, 0x52, - 0x3b, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, - 0x8f, 0x8f, 0x8f, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x25, 0x9a, 0xf9, 0xfb, 0xc9, 0x70, 0x20, 0x00, 0x00, 0x00, - 0x23, 0x47, 0x31, 0x00, 0x00, 0x00, 0x00, 0x16, 0x8a, 0xd2, 0xf5, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x65, 0xea, 0xfc, 0xbe, 0x65, 0x3b, - 0x33, 0x47, 0x84, 0xc3, 0xf6, 0xff, 0xea, 0x70, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0xa7, 0xfb, 0xff, 0xa6, 0x25, 0x00, 0x00, 0x00, 0x03, 0x38, - 0xd3, 0xff, 0xef, 0x73, 0x06, 0x00, 0x00, 0x00, 0x00, 0x5c, 0xee, - 0xf9, 0xb6, 0x55, 0x15, 0x00, 0x00, 0x00, 0x00, 0x09, 0x4d, 0xcd, - 0xff, 0xfc, 0xa2, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x4f, 0xe6, 0xf1, 0x6a, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, 0xb6, 0x1f, + 0x30, 0x70, 0x97, 0xb6, 0xb6, 0x9b, 0x5f, 0x21, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0xb6, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x4f, 0xa7, + 0xea, 0xff, 0xff, 0xf1, 0xe3, 0xe3, 0xe3, 0xef, 0xff, 0xff, 0xea, + 0xad, 0x4f, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x48, 0xb9, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, + 0xca, 0x64, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x1c, 0x1c, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x90, 0xe8, 0xff, 0xf6, 0xca, - 0xad, 0xad, 0xad, 0xcf, 0xea, 0x70, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x15, 0x25, 0x48, 0x64, 0x9a, 0xd4, 0xf9, 0xff, 0x8f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x76, 0xea, - 0xff, 0xf6, 0xe4, 0xe0, 0xea, 0xff, 0xff, 0xff, 0xea, 0x76, 0x0f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0xeb, 0xff, 0xab, 0x1c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, + 0xff, 0xc3, 0x76, 0xc0, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xec, 0xad, + 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xe0, + 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x47, 0xdd, 0xff, 0xdb, 0x48, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x83, 0xf9, 0xff, 0xb0, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x88, 0xef, 0x9a, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x06, 0x79, 0xf6, 0xff, 0xe8, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, - 0x1c, 0x4a, 0x7e, 0x8f, 0x8f, 0x74, 0x3c, 0x15, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x19, 0xb0, 0xff, 0xff, 0x8f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0x5a, 0xd8, 0xfc, 0xf3, 0xc3, 0x8a, 0x64, 0x49, 0x49, 0x49, 0x61, + 0x8a, 0xb9, 0xf3, 0xfc, 0xd8, 0x5a, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x69, - 0xc3, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x62, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x46, 0xa7, 0xf0, - 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x15, 0x7d, 0xda, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xce, - 0x70, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x86, 0xf9, 0xff, 0x88, 0x0a, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xc2, 0xff, 0xe3, 0x52, - 0x00, 0x00, 0x00, 0x00, 0x5b, 0x8e, 0x15, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xca, 0xff, 0xff, 0x83, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x18, 0x63, 0xb9, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xe8, 0xb1, - 0x58, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x20, 0x5f, 0x8e, 0xad, 0xad, 0xad, 0x84, 0x5c, - 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x15, 0x77, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x36, 0x7b, 0xa5, 0xad, 0xad, - 0x99, 0x65, 0x2b, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xb5, 0xff, - 0xf9, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x8f, - 0xff, 0xfc, 0x80, 0x03, 0x00, 0x00, 0x00, 0x23, 0x2b, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x9b, 0xff, - 0xff, 0xad, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x15, 0x89, 0xe3, 0xfc, 0xff, 0xf1, 0xe3, 0xe6, - 0xf6, 0xff, 0xfc, 0xd8, 0x69, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x48, 0x80, 0x80, 0x5b, 0x0e, 0x00, 0x00, 0x10, 0x66, 0x80, 0x80, - 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x25, 0x72, 0x80, 0x72, 0x29, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2b, 0x79, 0x80, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x75, 0x80, 0x80, 0x4f, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x19, 0x3c, 0x49, 0x49, 0x3c, 0x1c, 0x06, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x1c, 0x1c, - 0x1c, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x18, 0x1c, 0x1c, 0x13, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3c, 0xd6, 0xff, 0xda, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x64, 0xff, 0xff, 0xa6, 0x14, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0xff, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x86, 0xf0, 0xff, 0xe4, 0xa0, - 0x64, 0x49, 0x4f, 0x6e, 0xad, 0xea, 0xff, 0xde, 0x64, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x1f, - 0xcc, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, - 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x70, 0xfc, 0xff, 0xff, 0x9b, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x70, 0xf9, - 0xff, 0xff, 0xb5, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x25, 0x6e, 0xab, 0xd6, 0xe3, 0xe3, - 0xd6, 0xb0, 0x79, 0x27, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xc5, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0xf9, 0xff, 0xb6, 0x1c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x33, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x13, 0x3b, 0x5b, 0x80, 0x80, 0x80, 0x70, 0x42, - 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x65, 0xea, 0xff, - 0xe1, 0x6f, 0x13, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x79, 0xe4, 0xff, - 0xca, 0x35, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, - 0x00, 0x00, 0x1f, 0xcc, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, - 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xa1, 0xff, 0xff, 0xff, 0xc3, - 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x19, 0xa1, 0xff, 0xff, 0xff, 0xd9, 0x42, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0xab, 0xf3, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xb2, 0x45, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xf1, 0xff, 0xa0, 0x09, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0xda, 0xff, - 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x9b, 0xff, 0xff, 0xad, - 0x1a, 0x00, 0x00, 0x03, 0x30, 0x76, 0xa4, 0xd5, 0xec, 0xff, 0xff, - 0xff, 0xf7, 0xd9, 0x9a, 0x41, 0x06, 0x00, 0x00, 0x00, 0x00, 0x21, - 0xb3, 0xff, 0xf0, 0x82, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x15, 0x90, 0xf7, 0xf7, 0x80, 0x08, 0x00, 0x00, 0x00, 0x66, 0xb6, - 0xb6, 0x81, 0x14, 0x00, 0x00, 0x16, 0x91, 0xb6, 0xb6, 0x5b, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xd1, 0xff, - 0xe5, 0xe5, 0xe6, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3c, 0xd1, 0xff, 0xe5, 0xe8, 0xf7, 0x70, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, - 0xac, 0xf6, 0xcf, 0x9b, 0x80, 0x80, 0x9b, 0xcf, 0xf9, 0xfc, 0xcf, - 0x55, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x41, + 0x00, 0x00, 0x06, 0x5a, 0xcd, 0xff, 0xf7, 0xcf, 0x9b, 0x80, 0x80, + 0x97, 0xd3, 0xf9, 0xff, 0xde, 0x69, 0x0d, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x2c, 0x68, 0x9b, 0xb6, 0xb6, + 0x9b, 0x5f, 0x25, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x32, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, + 0x49, 0x49, 0x34, 0x08, 0x00, 0x00, 0x00, 0x29, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x3b, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x49, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x91, 0xf6, + 0xf4, 0xd5, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x52, 0xff, 0xff, 0xed, 0xea, 0xe5, 0xad, 0x8f, 0x9b, 0xc6, + 0xf0, 0xff, 0xfc, 0xb7, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, + 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x70, 0x70, 0x50, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x18, 0x41, 0x49, 0x49, 0x34, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x91, 0xff, 0xff, + 0xaa, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x27, 0xb8, 0xff, 0xf5, 0x8e, 0x32, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x06, 0x29, 0x8e, 0xea, 0xff, 0xb8, 0x27, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xce, 0xff, 0xee, 0xa1, 0x3f, + 0x10, 0x00, 0x00, 0x0e, 0x43, 0xb5, 0xf9, 0xff, 0xda, 0x4f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x4a, 0xbc, 0xf1, + 0xff, 0xff, 0xff, 0xff, 0xea, 0xb1, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x98, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, + 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x9f, 0x18, 0x00, 0x00, 0x00, 0x7e, + 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, + 0xe0, 0xe0, 0xe0, 0xe0, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2a, 0xc4, 0xe9, 0xd4, 0xf3, 0x7c, 0x04, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, 0xff, 0xda, 0x69, 0x1a, + 0x00, 0x0a, 0x30, 0x82, 0xe1, 0xff, 0xf9, 0x99, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x49, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, + 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xff, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xf3, 0xf6, 0xa0, 0x18, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x8f, 0xf6, + 0xf3, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xe1, 0xf5, + 0x88, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xb7, 0xfc, + 0xff, 0xa3, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x48, + 0xc7, 0xff, 0xff, 0xf6, 0xe3, 0xe3, 0xf6, 0xff, 0xff, 0xb5, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb6, 0x1c, 0x00, + 0x00, 0x00, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x70, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x6e, 0xf3, 0xca, 0xa9, 0xfc, 0xc6, 0x1f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, 0xea, + 0x66, 0x06, 0x00, 0x00, 0x00, 0x00, 0x06, 0x5d, 0xe1, 0xff, 0xe3, + 0x5c, 0x00, 0x00, 0x00, 0x00, 0x10, 0x66, 0x8f, 0x8f, 0x8f, 0x8f, + 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0xaf, 0xf1, 0xff, 0xf1, 0xaf, 0x8f, + 0x8f, 0x80, 0x29, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0xb6, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x79, 0xfc, 0xff, 0xd2, 0x3b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xe3, + 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x49, 0xe3, 0xff, 0x80, 0x00, 0x00, 0x00, 0x06, 0x34, 0x49, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0a, 0x8e, 0xa9, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x4f, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x36, 0xc8, 0xff, 0xf9, 0xb6, 0x65, 0x3a, 0x3a, 0x65, 0xbe, + 0xfb, 0xff, 0xc7, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x4c, 0x70, + 0x70, 0x70, 0x70, 0xb7, 0xff, 0xff, 0xc0, 0x70, 0x70, 0x70, 0x70, + 0x50, 0x0c, 0x00, 0x00, 0x00, 0x75, 0xf0, 0xff, 0xf6, 0xe3, 0xe0, + 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x62, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xab, 0xff, 0xa6, 0x6d, 0xeb, + 0xf0, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, + 0xff, 0xff, 0xc3, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, + 0x9a, 0xfc, 0xfc, 0xac, 0x15, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x80, 0xff, + 0xf1, 0xa2, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xcc, 0x1f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0xeb, 0xff, 0xf0, 0x5f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0xf7, 0xeb, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x6a, 0xf1, 0xfc, 0x7a, 0x00, 0x00, 0x00, + 0x06, 0x75, 0xd0, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2b, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x26, 0xbd, 0xff, 0xfc, 0x80, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x13, 0x90, 0xf7, 0xf9, 0xa5, 0x32, 0x03, 0x00, + 0x00, 0x03, 0x40, 0xb7, 0xfc, 0xfc, 0x97, 0x1b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x96, 0xf2, + 0xea, 0x89, 0x4c, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, + 0x49, 0x49, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xde, 0xfc, + 0x80, 0x36, 0xcc, 0xff, 0x9a, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x52, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x4c, 0xde, 0xff, 0xf0, 0x44, 0x00, 0x00, 0x00, + 0x19, 0xb0, 0xff, 0xff, 0xd4, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, + 0xbe, 0xe7, 0xff, 0xf6, 0xcb, 0xb6, 0xb6, 0xa2, 0x34, 0x00, 0x00, + 0x00, 0x64, 0xf1, 0xbf, 0x42, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xcc, 0x1f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xd6, + 0xff, 0xff, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x42, 0xd9, 0xfc, 0xac, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x42, 0xbb, 0xff, 0xde, 0x4c, + 0x00, 0x00, 0x00, 0x00, 0x54, 0xe3, 0x89, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x8f, 0xff, 0xff, + 0xa6, 0x16, 0x00, 0x00, 0x00, 0x00, 0x42, 0xd9, 0xff, 0xc9, 0x2b, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x3d, 0xda, 0xff, 0xea, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1f, 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xcf, - 0xff, 0xf9, 0x6b, 0x00, 0x00, 0x00, 0x11, 0x95, 0xf7, 0xff, 0xf9, - 0xe3, 0xbf, 0xb6, 0xb6, 0xcf, 0xf7, 0xfc, 0xcd, 0x54, 0x00, 0x00, - 0x00, 0x00, 0x54, 0xe6, 0xff, 0xcb, 0x34, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x4a, 0xe1, 0xff, 0xbd, 0x26, 0x00, 0x00, - 0x00, 0x10, 0x1c, 0x1c, 0x14, 0x03, 0x00, 0x00, 0x03, 0x16, 0x1c, - 0x1c, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, + 0x00, 0x21, 0x96, 0xef, 0xbf, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, + 0x9a, 0xfc, 0xe6, 0x54, 0x14, 0xa6, 0xff, 0xd4, 0x3f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, 0xb6, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xab, 0xff, 0xff, 0x64, + 0x00, 0x00, 0x00, 0x08, 0x7b, 0xf2, 0xff, 0xb4, 0x3c, 0x1c, 0x1c, + 0x1c, 0x1c, 0x1c, 0x34, 0xb6, 0xff, 0xe3, 0x5d, 0x1c, 0x1c, 0x19, + 0x08, 0x00, 0x00, 0x00, 0x30, 0xc7, 0xcc, 0x33, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, + 0xb6, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1e, 0xb5, 0xff, 0xff, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x8b, 0xf2, 0xf0, 0x9c, + 0x54, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x6e, 0x91, 0xd3, 0xf7, + 0xf2, 0x8b, 0x13, 0x00, 0x00, 0x00, 0x00, 0x29, 0xc3, 0xbd, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x64, 0xef, 0xff, 0xb6, 0xad, 0xfc, 0x80, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xef, 0xff, 0xaa, 0xbe, - 0xff, 0x9b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x4c, 0x86, 0x38, 0x0e, 0x00, 0x00, 0x0e, 0x3b, - 0x8c, 0xea, 0xff, 0xc5, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x41, 0xcb, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, - 0xe3, 0xe3, 0xe3, 0xd5, 0xaf, 0x80, 0x3f, 0x0d, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0xd3, 0xe3, 0xe3, 0xaf, - 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x03, 0x76, 0xf7, + 0xf7, 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x94, + 0xff, 0xff, 0x9b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1f, 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x96, 0xef, 0xbf, 0x48, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x79, 0xf6, 0xff, 0xc2, 0x22, 0x00, 0x00, 0x00, 0x09, 0x91, - 0xf9, 0xd0, 0x8a, 0x58, 0x29, 0x1f, 0x1f, 0x3f, 0x95, 0xea, 0xff, - 0xbc, 0x17, 0x00, 0x00, 0x00, 0x79, 0xfc, 0xff, 0xa3, 0x11, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xc4, 0xff, 0xde, - 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x53, 0xdf, 0xff, 0xbd, 0x26, 0x03, 0x76, 0xf6, 0xf9, + 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, + 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x85, + 0xff, 0xff, 0x88, 0x00, 0x00, 0x00, 0x00, 0x27, 0xb6, 0xff, 0xf0, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x89, 0xe8, 0x59, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1c, 0xb6, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x8f, 0xff, 0xff, 0xc6, 0x1a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, + 0x9b, 0xf6, 0xf9, 0xe9, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xf6, + 0xff, 0xff, 0xec, 0x93, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, + 0x9b, 0xec, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, + 0x14, 0xa6, 0xff, 0xd9, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x52, 0xe5, 0xff, 0xc3, 0x29, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x96, + 0xef, 0xcd, 0x48, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0xa1, 0xff, 0xfc, 0x89, 0x08, 0x00, + 0x42, 0xd5, 0xff, 0xca, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x52, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x03, + 0x5d, 0xe1, 0xff, 0xc9, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, + 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x54, 0xe3, 0x89, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xcc, 0x1f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xf1, 0xff, + 0xe9, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x5f, 0xec, 0xff, 0xef, 0xe3, 0xe3, 0xe3, 0xe3, + 0xe3, 0xe3, 0xcf, 0xb6, 0x97, 0x5f, 0x1b, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x25, 0x99, 0xf9, 0x9b, 0x0e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x85, 0xff, 0xff, 0xa6, 0x16, + 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xbb, 0x25, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xde, 0x44, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x21, 0x96, 0xf0, 0xcd, 0x5a, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xd6, 0xff, 0xe3, + 0x52, 0x00, 0x00, 0x1c, 0xa7, 0xff, 0xf5, 0x5c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x15, 0x98, 0xff, 0xfb, 0x83, 0x0c, 0x00, 0x00, + 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x2a, 0xc4, 0xb8, 0x22, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xcc, + 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x35, 0xcf, 0xff, 0xfb, 0x75, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x91, 0xfb, 0xce, 0x6d, 0x52, + 0x52, 0x52, 0x52, 0x52, 0x52, 0x3c, 0x1f, 0x0e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xe9, 0xfc, 0xb6, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xa4, 0xff, + 0xff, 0x86, 0x04, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xab, 0x19, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, + 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x9a, 0xf9, 0xd6, 0x4a, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x75, + 0xfb, 0xff, 0xb0, 0x1c, 0x00, 0x00, 0x03, 0x6b, 0xf9, 0xff, 0x99, + 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, 0xb6, 0x1c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x97, 0xff, 0xff, + 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xd3, 0xff, 0xd6, + 0x46, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x3b, 0x44, 0x12, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, + 0x69, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, + 0x80, 0xd6, 0xe2, 0x81, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, + 0x70, 0x70, 0x70, 0x69, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x09, 0x91, 0xff, 0xff, 0xb0, 0x22, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, + 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, + 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x61, 0xad, 0x8f, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3b, 0xd5, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x61, 0xef, + 0xff, 0x86, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x33, 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, + 0x9a, 0xf5, 0xd6, 0x5a, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x25, 0xb1, 0xff, 0xfb, 0x84, 0x06, 0x00, 0x00, 0x00, 0x39, + 0xe0, 0xff, 0xcd, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, + 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, + 0xc4, 0xff, 0xff, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x83, 0xf9, 0xf9, 0x99, 0x15, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, + 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7b, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0x6e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xee, 0xff, 0xd9, + 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0xb6, 0xff, 0x52, 0x0a, 0x30, 0x4d, 0x52, 0x44, 0x1c, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xf3, 0x7f, 0x0f, 0x00, 0x00, + 0x00, 0x00, 0x0a, 0x79, 0xf3, 0xff, 0xad, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x80, 0xff, 0xff, 0x86, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x23, 0x9a, 0xf9, 0xd4, 0x65, 0x0f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5f, 0xea, 0xff, 0xda, 0x4c, 0x00, 0x00, + 0x00, 0x00, 0x0f, 0xb5, 0xff, 0xf6, 0x76, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x52, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x54, 0xe6, 0xff, 0xe5, 0x39, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x36, 0xc2, 0xff, 0xde, 0x4c, 0x00, 0x00, 0x1c, + 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x7a, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x8d, 0xda, 0xe5, 0x8f, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7a, 0x34, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, + 0xc0, 0xff, 0xf6, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x14, 0xa6, 0xff, 0x91, 0x79, 0xc4, 0xde, 0xe3, + 0xd6, 0xa5, 0x58, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x40, 0x80, 0x80, 0x5b, 0x0e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xde, + 0x74, 0x21, 0x03, 0x00, 0x15, 0x5e, 0xcf, 0xff, 0xde, 0x5a, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xa6, 0x16, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0xda, 0xff, 0xd6, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, + 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0xa5, 0xf2, 0xde, + 0x69, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xa0, 0xff, 0xff, 0xa1, + 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xf0, 0xff, 0xb3, 0x21, + 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, 0xc6, 0x2f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x21, 0xa5, 0xfc, 0xfc, 0xa7, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x5c, 0xf0, 0xfc, 0x9a, + 0x13, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, + 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x70, 0xf0, 0xff, 0xc7, 0x30, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x71, 0xf0, 0xf3, 0xf3, + 0xfc, 0xeb, 0xe3, 0xf1, 0xfc, 0xe3, 0x76, 0x15, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, + 0xff, 0xff, 0xff, 0xec, 0xb3, 0x85, 0x80, 0xa3, 0xe3, 0xfc, 0xe4, + 0x74, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcf, + 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xf9, + 0xff, 0xb5, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x25, 0xa5, 0xfc, 0xde, 0x5a, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xd9, + 0xff, 0xe5, 0x58, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0xc0, + 0xff, 0xe6, 0x54, 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, 0xf2, + 0x96, 0x27, 0x03, 0x00, 0x00, 0x03, 0x27, 0x96, 0xf2, 0xff, 0xde, + 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, + 0xa1, 0xf7, 0xde, 0x4c, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x80, 0x5b, 0x0e, + 0x00, 0x00, 0x00, 0x40, 0x80, 0x80, 0x5b, 0x0e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0xb6, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xac, 0xff, 0xf1, 0x6a, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4b, + 0xdc, 0xff, 0xf0, 0x9a, 0x59, 0x49, 0x6a, 0xc5, 0xfc, 0xea, 0x7d, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x8f, 0xff, 0xf1, 0xc4, 0xde, 0xfc, 0xff, 0xff, 0xff, + 0xf6, 0xca, 0x67, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0xff, 0xff, 0xf7, 0x8f, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0xc3, 0xff, 0xf6, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3a, 0xc5, 0xff, 0xc5, 0x40, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x80, 0xf7, 0xff, 0xa7, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x06, 0x84, 0xff, 0xfc, 0x95, 0x0e, 0x00, 0x00, 0x00, 0x52, + 0xff, 0xff, 0xfa, 0xed, 0xb6, 0x76, 0x50, 0x49, 0x6e, 0xb6, 0xf2, + 0xff, 0xf2, 0x8b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x3c, 0xca, 0xfc, 0x9a, 0x13, 0x1c, 0xad, 0xff, + 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, + 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xcc, 0x1f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, + 0xea, 0xff, 0xb3, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x80, 0xf6, 0xf0, 0x8f, 0x15, 0x00, 0x00, 0x03, 0x40, + 0xbe, 0xff, 0xda, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xe3, 0x5c, 0x4c, 0x89, + 0xb0, 0xb6, 0xa4, 0x6e, 0x35, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xdf, 0x53, 0x0c, 0x00, 0x00, + 0x00, 0x00, 0x0d, 0x76, 0xf6, 0xff, 0xc3, 0x35, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x5d, 0xe4, 0xfc, + 0xad, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0xc7, 0xff, 0xf0, 0x55, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xe5, 0xff, 0xcc, 0x33, 0x00, + 0x00, 0x00, 0x52, 0xff, 0xff, 0xd1, 0xa4, 0xde, 0xf4, 0xe7, 0xe3, + 0xf3, 0xff, 0xff, 0xf2, 0x96, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x7b, 0xf2, 0xde, 0x4c, + 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x80, 0xff, + 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xcc, 0x1f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0f, 0x95, 0xf7, 0xec, 0x6f, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x26, 0xbd, 0xff, 0xc0, 0x2b, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x65, 0xf6, 0xfc, 0x7b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x07, 0x4b, 0x72, 0x25, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xe3, + 0x49, 0x00, 0x08, 0x19, 0x1c, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0xfc, 0xff, 0xd4, 0xda, 0xd8, + 0x86, 0x42, 0x21, 0x1c, 0x38, 0x84, 0xda, 0xff, 0xf0, 0x6a, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, + 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x13, 0xa0, 0xff, 0xec, 0x72, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xef, 0xff, 0xc6, 0x1f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xb1, 0xff, + 0xef, 0x61, 0x00, 0x00, 0x00, 0x42, 0xcc, 0xcc, 0x91, 0x2b, 0x55, + 0x9a, 0xcf, 0xf9, 0xff, 0xf9, 0xd4, 0x89, 0x25, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, + 0xbd, 0xfc, 0x91, 0x28, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xe5, 0x91, 0x16, 0x00, 0x00, + 0x00, 0x80, 0xff, 0xe5, 0x91, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, + 0xb6, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0xc8, 0xff, 0xc3, 0x2c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0xde, 0xff, 0x96, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xe4, 0xff, 0xa5, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x7b, 0xea, 0x61, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8f, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0xec, 0xff, + 0xa6, 0x72, 0xdb, 0xf5, 0xd5, 0xb2, 0xad, 0xca, 0xf6, 0xff, 0xf5, + 0x9a, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x68, 0xf3, 0xff, 0xb8, 0x23, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x52, + 0x52, 0x36, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x2e, 0x52, 0x52, 0x29, 0x00, 0x00, 0x00, 0x0a, 0x1f, 0x1f, + 0x16, 0x03, 0x00, 0x09, 0x26, 0x4c, 0x52, 0x4d, 0x2a, 0x09, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x65, 0xea, 0xd5, 0x56, 0xad, 0xff, 0xe0, 0x49, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0xec, 0xb4, 0x29, + 0x03, 0x00, 0x00, 0x00, 0x5b, 0xec, 0xb4, 0x29, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1c, 0xb6, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x65, + 0xea, 0xf6, 0x86, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, + 0xe3, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, + 0xff, 0xad, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, + 0xdd, 0x97, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x8f, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0xda, 0xff, 0xb6, 0x25, 0x3e, 0x96, 0xdf, 0xff, 0xff, 0xff, + 0xff, 0xf5, 0x84, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xee, + 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xf3, 0x83, 0xad, + 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, + 0xc3, 0xcf, 0x35, 0x00, 0x00, 0x00, 0x00, 0x2c, 0xc3, 0xcf, 0x35, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xcc, 0x1f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1c, 0xa7, 0xfc, 0xd3, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x44, 0xde, 0xff, 0x96, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3b, 0xe4, 0xff, 0xa5, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x25, 0xbf, 0xc4, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xe3, 0x49, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x22, 0xb8, 0xff, 0xcf, 0x3c, 0x00, 0x11, 0x4c, + 0x81, 0xa6, 0xad, 0x9b, 0x6b, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, + 0xca, 0xff, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x5d, + 0xe4, 0xb6, 0xbc, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x89, 0xe8, 0x59, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x89, 0xe8, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xcc, + 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x40, 0xc5, 0xf7, 0x98, 0x1e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0xbd, 0xff, 0xc0, 0x2b, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x65, 0xf6, 0xfc, 0x7b, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x9b, 0xec, 0x5f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, + 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x89, 0xfc, 0xf1, 0x71, + 0x00, 0x00, 0x00, 0x08, 0x19, 0x1c, 0x14, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x09, 0x4e, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x29, 0xc3, 0xff, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x13, 0x9a, 0xe5, 0xe5, 0xff, 0xe0, 0x49, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0xe3, 0x89, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x54, 0xe3, 0x89, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0xb6, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x1c, 0x1c, + 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1f, 0x76, + 0xec, 0xec, 0x82, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0xf6, + 0xf0, 0x8f, 0x15, 0x00, 0x00, 0x03, 0x40, 0xbe, 0xff, 0xda, 0x36, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x99, 0xf9, + 0x9b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x8f, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, + 0xe6, 0xff, 0xb3, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x06, 0x4d, 0xc7, 0x76, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0xde, 0xff, 0xf0, 0x5f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x15, 0x42, 0x70, 0x80, 0x80, 0x64, 0x35, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0e, 0x33, 0x64, 0x80, 0x80, 0x80, 0x64, 0x30, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xca, 0xe3, 0xe3, 0xc8, + 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0xaf, + 0xa4, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x26, 0xaf, 0xa4, 0x1e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x50, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, + 0xb6, 0xb6, 0xc3, 0xef, 0xff, 0xea, 0x40, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x30, 0xb2, 0xfc, 0xf0, 0x9a, 0x59, 0x49, 0x6a, 0xc5, 0xfc, + 0xff, 0xdb, 0x85, 0x64, 0x49, 0x49, 0x34, 0x08, 0x00, 0x00, 0x00, + 0x72, 0xeb, 0xfc, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xeb, 0x7e, 0x49, 0x49, 0x49, + 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x25, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x21, 0xad, 0xfc, 0xf0, 0x55, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0xa2, 0xfc, 0xb3, 0x21, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x6a, 0xf1, 0xff, + 0xcb, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x4f, 0xa3, 0xd9, 0xf7, 0xff, + 0xff, 0xf1, 0xcf, 0x86, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0d, 0x49, 0x95, 0xcc, 0xf1, 0xff, 0xff, 0xff, + 0xf1, 0xc7, 0x80, 0x30, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x39, + 0x49, 0x49, 0x40, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x34, 0x3c, 0x10, 0x00, 0x00, 0x00, 0x00, 0x08, 0x34, + 0x3c, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xcc, 0x1f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x52, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x32, 0xb2, 0xf3, 0xfc, 0xeb, 0xe3, + 0xf1, 0xfc, 0xe3, 0xda, 0xf3, 0xff, 0xf1, 0xe3, 0xe3, 0x92, 0x11, + 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xfc, 0xeb, + 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0x72, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x4f, 0xd8, 0xff, 0xb6, 0x32, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0e, 0x56, 0x79, 0x54, 0x3c, 0x19, 0x83, 0xff, 0xff, + 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x84, + 0xf7, 0xec, 0x65, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, + 0xc0, 0xff, 0xf7, 0x8f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x5a, 0xda, 0xff, + 0xfc, 0xde, 0xbb, 0xc3, 0xec, 0xff, 0xf9, 0xb7, 0x32, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x74, 0xd8, 0xfc, 0xff, 0xf7, + 0xe7, 0xe3, 0xe7, 0xf7, 0xff, 0xf7, 0xba, 0x40, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x98, + 0xab, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xe3, 0xe3, 0xe3, 0xe3, + 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, + 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x79, + 0xc4, 0xde, 0xe3, 0xd6, 0xa5, 0x58, 0x40, 0x68, 0x9e, 0xbb, 0xd6, + 0xe3, 0x78, 0x03, 0x00, 0x00, 0x00, 0x72, 0xe3, 0xe3, 0xa2, 0x19, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x80, + 0xf0, 0xf9, 0xb7, 0x45, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xfc, 0xe9, 0xd6, 0xab, + 0xc5, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x36, 0xc0, 0xff, 0xc5, 0x40, 0x03, 0x00, 0x00, 0x00, + 0x09, 0x35, 0xa0, 0xf7, 0xff, 0xca, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, + 0xce, 0xff, 0xf9, 0xb6, 0x55, 0x25, 0x2e, 0x72, 0xcf, 0xff, 0xfb, + 0x9c, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x8c, 0xea, 0xff, + 0xf0, 0xb3, 0x7e, 0x5a, 0x52, 0x5a, 0x8f, 0xdf, 0xff, 0xfc, 0xb7, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x30, 0x36, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x52, + 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, + 0x52, 0x52, 0x52, 0x52, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0a, 0x30, 0x4d, 0x52, 0x44, 0x1c, 0x04, 0x00, 0x00, + 0x11, 0x25, 0x44, 0x52, 0x29, 0x00, 0x00, 0x00, 0x00, 0x29, 0x52, + 0x52, 0x3b, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x50, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, + 0x8f, 0x8f, 0x8f, 0x8f, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x25, 0x9a, 0xf9, 0xfb, 0xc9, 0x70, 0x20, 0x00, 0x00, + 0x00, 0x23, 0x47, 0x31, 0x00, 0x00, 0x00, 0x00, 0x16, 0x8a, 0xd2, + 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x65, 0xea, 0xfc, 0xbe, 0x65, + 0x3b, 0x33, 0x47, 0x84, 0xc3, 0xf6, 0xff, 0xea, 0x70, 0x0a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0xa7, 0xfb, 0xff, 0xa6, 0x25, 0x00, 0x00, 0x00, 0x03, + 0x38, 0xd3, 0xff, 0xef, 0x73, 0x06, 0x00, 0x00, 0x00, 0x00, 0x5c, + 0xee, 0xf9, 0xb6, 0x55, 0x15, 0x00, 0x00, 0x00, 0x00, 0x09, 0x4d, + 0xcd, 0xff, 0xfc, 0xa2, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x90, 0xe8, 0xff, 0xf6, + 0xca, 0xad, 0xad, 0xad, 0xcf, 0xea, 0x70, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x15, 0x25, 0x48, 0x64, 0x9a, 0xd4, 0xf9, 0xff, 0x8f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x76, + 0xea, 0xff, 0xf6, 0xe4, 0xe0, 0xea, 0xff, 0xff, 0xff, 0xea, 0x76, + 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x47, 0xdd, 0xff, 0xdb, 0x48, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x83, 0xf9, 0xff, 0xb0, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x88, 0xef, 0x9a, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x79, 0xf6, 0xff, 0xe8, 0x43, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x1c, 0x4a, 0x7e, 0x8f, 0x8f, 0x74, 0x3c, 0x15, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, + 0x69, 0xc3, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x62, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x46, 0xa7, + 0xf0, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x15, 0x7d, 0xda, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xf6, + 0xce, 0x70, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x86, 0xf9, 0xff, 0x88, + 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xc2, 0xff, 0xe3, + 0x52, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x8e, 0x15, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xca, 0xff, 0xff, 0x83, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x63, 0xb9, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xe8, + 0xb1, 0x58, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x5f, 0x8e, 0xad, 0xad, 0xad, 0x84, + 0x5c, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x15, 0x77, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x36, 0x7b, 0xa5, 0xad, + 0xad, 0x99, 0x65, 0x2b, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xb5, + 0xff, 0xf9, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x8f, 0xff, 0xfc, 0x80, 0x03, 0x00, 0x00, 0x00, 0x23, 0x2b, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x9b, + 0xff, 0xff, 0xad, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x15, 0x89, 0xe3, 0xfc, 0xff, 0xf1, 0xe3, + 0xe6, 0xf6, 0xff, 0xfc, 0xd8, 0x69, 0x0d, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x48, 0x80, 0x80, 0x5b, 0x0e, 0x00, 0x00, 0x10, 0x66, 0x80, + 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x72, 0x80, 0x72, 0x29, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x2b, 0x79, 0x80, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x75, 0x80, 0x80, + 0x4f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x19, 0x3c, 0x49, 0x49, 0x3c, 0x1c, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x1c, + 0x1c, 0x1c, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x10, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x18, 0x1c, 0x1c, 0x13, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3c, 0xd6, 0xff, 0xda, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x64, 0xff, 0xff, 0xa6, 0x14, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x86, 0xf0, 0xff, 0xe4, + 0xa0, 0x64, 0x49, 0x4f, 0x6e, 0xad, 0xea, 0xff, 0xde, 0x64, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, + 0x1f, 0xcc, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0c, 0x97, 0xff, 0xff, 0x84, 0x8f, 0xff, 0xa4, 0x13, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x97, 0xff, - 0xff, 0x7a, 0x91, 0xff, 0xca, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x10, 0x8e, 0xf3, 0xfc, 0x9a, 0x15, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xce, 0x76, - 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x94, 0xfc, - 0xff, 0xff, 0xe3, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x70, 0xfc, 0xff, 0xff, 0x9b, 0x0e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x70, + 0xf9, 0xff, 0xff, 0xb5, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x25, 0x6e, 0xab, 0xd6, 0xe3, + 0xe3, 0xd6, 0xb0, 0x79, 0x27, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x09, 0x4d, 0xcd, 0xff, 0xda, 0x59, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x70, 0xae, 0x44, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0xad, 0xff, 0xea, 0x47, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, - 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xc5, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0xf9, 0xff, 0xb6, 0x1c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x33, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x13, 0x3b, 0x5b, 0x80, 0x80, 0x80, 0x70, + 0x42, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x65, 0xea, + 0xff, 0xe1, 0x6f, 0x13, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x79, 0xe4, + 0xff, 0xca, 0x35, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, + 0x1c, 0x00, 0x00, 0x1f, 0xcc, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xbb, 0xff, 0xf9, 0x69, 0x7b, - 0xf6, 0xcf, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x21, 0xbb, 0xff, 0xee, 0x4e, 0x6e, 0xf6, 0xe7, 0x50, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xa1, 0xff, 0xff, 0xff, + 0xc3, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x19, 0xa1, 0xff, 0xff, 0xff, 0xd9, 0x42, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0xab, 0xf3, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xb2, 0x45, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0xb8, 0xff, 0xe3, - 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, - 0x9e, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x8b, 0xbd, 0xea, - 0xfc, 0xff, 0xf0, 0x9c, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3d, 0xd0, 0xff, 0xf9, 0xf9, 0xf9, 0x86, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, - 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, - 0x3b, 0x52, 0x52, 0x52, 0x66, 0x9a, 0xdf, 0xfc, 0xc9, 0x54, 0x06, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x1a, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x70, 0x00, 0x00, 0x00, - 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x11, - 0x1f, 0x1f, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xf1, 0xff, 0xa0, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0xda, + 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x9b, 0xff, 0xff, + 0xad, 0x1a, 0x00, 0x00, 0x03, 0x30, 0x76, 0xa4, 0xd5, 0xec, 0xff, + 0xff, 0xff, 0xf7, 0xd9, 0x9a, 0x41, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x21, 0xb3, 0xff, 0xf0, 0x82, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x15, 0x90, 0xf7, 0xf7, 0x80, 0x08, 0x00, 0x00, 0x00, 0x66, + 0xb6, 0xb6, 0x81, 0x14, 0x00, 0x00, 0x16, 0x91, 0xb6, 0xb6, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xda, 0xff, - 0xd6, 0x40, 0x4c, 0xde, 0xec, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x40, 0xda, 0xff, 0xda, 0x2d, 0x49, 0xe3, 0xf9, - 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xd1, + 0xff, 0xe5, 0xe5, 0xe6, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0xd1, 0xff, 0xe5, 0xe8, 0xf7, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x5c, 0xea, 0xff, 0xa3, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, - 0xe3, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x11, 0x47, 0x97, 0xea, 0xff, 0xf9, 0xa5, 0x29, 0x00, 0x00, + 0x20, 0xac, 0xf6, 0xcf, 0x9b, 0x80, 0x80, 0x9b, 0xcf, 0xf9, 0xfc, + 0xcf, 0x55, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, + 0x41, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, + 0x49, 0x3b, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x84, 0xff, 0xff, 0xcb, 0xc6, 0xff, 0xc4, 0x30, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x41, 0x49, 0x49, 0x34, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x19, 0xa2, 0xe3, 0xe3, 0xe3, 0xec, 0xfc, 0xef, 0xa2, - 0x3f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x8f, 0xff, 0xff, 0x70, - 0x00, 0x00, 0x00, 0x64, 0xf1, 0xff, 0xad, 0x1a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xcc, 0x33, 0x00, - 0x00, 0x00, 0x66, 0xb6, 0xb6, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, + 0xcf, 0xff, 0xf9, 0x6b, 0x00, 0x00, 0x00, 0x11, 0x95, 0xf7, 0xff, + 0xf9, 0xe3, 0xbf, 0xb6, 0xb6, 0xcf, 0xf7, 0xfc, 0xcd, 0x54, 0x00, + 0x00, 0x00, 0x00, 0x54, 0xe6, 0xff, 0xcb, 0x34, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xe1, 0xff, 0xbd, 0x26, 0x00, + 0x00, 0x00, 0x10, 0x1c, 0x1c, 0x14, 0x03, 0x00, 0x00, 0x03, 0x16, + 0x1c, 0x1c, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x64, 0xf1, 0xff, 0xba, 0x25, 0x2e, 0xc3, 0xfc, 0x80, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xf1, 0xff, 0xbb, 0x0f, - 0x33, 0xcc, 0xff, 0x9b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x64, 0xef, 0xff, 0xb6, 0xad, 0xfc, 0x80, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xef, 0xff, 0xaa, + 0xbe, 0xff, 0x9b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4c, 0x86, 0x38, 0x0e, 0x00, 0x00, 0x0e, + 0x3b, 0x8c, 0xea, 0xff, 0xc5, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x41, 0xcb, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, + 0xe3, 0xe3, 0xe3, 0xe3, 0xd5, 0xaf, 0x80, 0x3f, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x26, 0xbd, 0xff, 0xd9, 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x74, 0xde, 0xff, 0xf2, - 0xa5, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xb5, 0xff, 0xfc, 0x8c, 0x7e, - 0xf7, 0xe6, 0x5e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0xd3, 0xe3, 0xe3, + 0xaf, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xa2, 0xe3, 0xef, 0xff, 0xff, - 0xff, 0xec, 0x82, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x4a, 0xcf, - 0xff, 0xef, 0x52, 0x00, 0x00, 0x00, 0x30, 0xc7, 0xff, 0xe5, 0x58, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x6a, 0xf1, 0xfc, - 0x95, 0x0e, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x06, 0x79, 0xf6, 0xff, 0xc2, 0x22, 0x00, 0x00, 0x00, 0x09, + 0x91, 0xf9, 0xd0, 0x8a, 0x58, 0x29, 0x1f, 0x1f, 0x3f, 0x95, 0xea, + 0xff, 0xbc, 0x17, 0x00, 0x00, 0x00, 0x79, 0xfc, 0xff, 0xa3, 0x11, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xc4, 0xff, + 0xde, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0e, 0x9b, 0xff, 0xff, 0x8f, 0x06, 0x10, 0x9b, 0xff, - 0xab, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x9b, 0xff, - 0xff, 0x8e, 0x00, 0x14, 0xa6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x21, - 0x44, 0x49, 0x3c, 0x21, 0x0c, 0x00, 0x08, 0x89, 0xfc, 0xf7, 0x70, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0x52, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, - 0x69, 0xde, 0xff, 0xf9, 0x97, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0xea, 0xff, - 0xe6, 0x54, 0x42, 0xd9, 0xfc, 0xa7, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0c, 0x97, 0xff, 0xff, 0x84, 0x8f, 0xff, 0xa4, + 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x97, + 0xff, 0xff, 0x7a, 0x91, 0xff, 0xca, 0x30, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x8e, 0xf3, 0xfc, 0x9a, 0x15, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xce, + 0x76, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x94, + 0xfc, 0xff, 0xff, 0xe3, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, 0xff, 0xe3, - 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x34, 0x49, - 0x61, 0x80, 0xa3, 0xde, 0xfc, 0xec, 0x90, 0x1b, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x1c, 0x33, 0x4f, - 0x80, 0xcf, 0xfc, 0xff, 0xc0, 0x1a, 0x00, 0x00, 0x00, 0x08, 0x6f, - 0xea, 0xff, 0xbe, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x06, 0x48, - 0xc5, 0xff, 0xcf, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x09, 0x4d, 0xcd, 0xff, 0xda, 0x59, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x70, 0xae, 0x44, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0xad, 0xff, 0xea, 0x47, 0x00, 0x00, 0x00, 0x80, 0xff, + 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xc3, 0xff, 0xff, 0x64, 0x00, - 0x00, 0x7a, 0xfc, 0xd6, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x29, 0xc3, 0xff, 0xf0, 0x5f, 0x00, 0x03, 0x80, 0xfc, 0xeb, 0x59, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xbb, 0xff, 0xf9, 0x69, + 0x7b, 0xf6, 0xcf, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x21, 0xbb, 0xff, 0xee, 0x4e, 0x6e, 0xf6, 0xe7, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0x5a, 0xb3, 0xde, 0xe3, 0xd6, 0xbb, 0x91, 0x42, 0x0d, 0x59, - 0xeb, 0xff, 0x9b, 0x10, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, - 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0d, 0x80, 0xf2, 0xff, 0xea, 0x53, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, - 0x8e, 0xff, 0xff, 0xbd, 0x26, 0x19, 0xab, 0xff, 0xe5, 0x39, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0xb8, 0xff, + 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, + 0xff, 0x9e, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x8b, 0xbd, + 0xea, 0xfc, 0xff, 0xf0, 0x9c, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xf7, 0xff, + 0x00, 0x3d, 0xd0, 0xff, 0xf9, 0xf9, 0xf9, 0x86, 0x0a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, - 0xcc, 0xff, 0xd6, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x52, 0xc5, 0xff, 0xec, 0x6f, - 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x46, 0x86, - 0xb6, 0xcc, 0xe6, 0xf7, 0xff, 0xfc, 0xcd, 0x54, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1b, 0x86, 0xf0, 0xfc, 0xbf, 0x52, 0x1e, 0x08, 0x0e, - 0x25, 0x66, 0xcd, 0xfc, 0xde, 0x64, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x3b, 0x52, 0x52, 0x52, 0x66, 0x9a, 0xdf, 0xfc, 0xc9, 0x54, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x1a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x70, 0x00, 0x00, + 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, + 0x11, 0x1f, 0x1f, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0xe6, 0xff, - 0xe5, 0x39, 0x00, 0x00, 0x59, 0xeb, 0xf1, 0x64, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x4a, 0xe1, 0xff, 0xcb, 0x34, 0x00, 0x00, 0x59, - 0xeb, 0xfc, 0x89, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0f, 0x76, 0xde, 0xff, 0xfc, 0xeb, 0xe3, 0xe9, 0xf6, - 0xd4, 0x80, 0x65, 0xde, 0xff, 0xbb, 0x25, 0x00, 0x00, 0x00, 0x00, - 0x49, 0xe3, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xb6, 0xff, 0xff, - 0xaa, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x33, 0xc6, 0xff, 0xfc, 0x89, 0x08, 0x03, 0x76, 0xf7, - 0xff, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xda, + 0xff, 0xd6, 0x40, 0x4c, 0xde, 0xec, 0x5b, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0xda, 0xff, 0xda, 0x2d, 0x49, 0xe3, + 0xf9, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x4f, 0xe6, 0xff, 0xa0, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x2e, 0xda, 0xff, 0xbb, 0x21, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x5d, - 0xe4, 0xff, 0xca, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, - 0x80, 0xda, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xec, 0xad, 0x48, 0x06, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x73, 0xc4, 0xee, 0xde, - 0xb5, 0x8f, 0x9b, 0xbf, 0xea, 0xef, 0xbd, 0x5a, 0x0d, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x5c, 0xea, 0xff, 0xa3, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x49, 0xe3, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x11, 0x47, 0x97, 0xea, 0xff, 0xf9, 0xa5, 0x29, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x84, 0xff, 0xff, 0xcb, 0xc6, 0xff, 0xc4, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1f, 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x19, 0xa2, 0xe3, 0xe3, 0xe3, 0xec, 0xfc, 0xef, + 0xa2, 0x3f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x8f, 0xff, 0xff, + 0x70, 0x00, 0x00, 0x00, 0x64, 0xf1, 0xff, 0xad, 0x1a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xcc, 0x33, + 0x00, 0x00, 0x00, 0x66, 0xb6, 0xb6, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x80, 0xfc, 0xff, 0xba, 0x16, 0x00, 0x00, 0x33, 0xcc, 0xff, 0x8f, - 0x09, 0x00, 0x00, 0x00, 0x00, 0x03, 0x76, 0xf7, 0xff, 0xa0, 0x0f, - 0x00, 0x00, 0x33, 0xcc, 0xff, 0xb5, 0x21, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x65, 0xea, 0xff, 0xe4, 0x9a, 0x59, - 0x49, 0x54, 0x7b, 0xc8, 0xea, 0xbc, 0xde, 0xff, 0xd6, 0x44, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x64, 0xf1, 0xff, 0xba, 0x25, 0x2e, 0xc3, 0xfc, 0x80, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xf1, 0xff, 0xbb, + 0x0f, 0x33, 0xcc, 0xff, 0x9b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x26, 0xbd, 0xff, 0xd9, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x6a, 0xef, 0xff, 0xe3, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x6a, 0xef, 0xff, 0xe3, 0x54, 0x00, - 0x00, 0x42, 0xd9, 0xff, 0xb3, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x74, 0xde, 0xff, + 0xf2, 0xa5, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xb5, 0xff, 0xfc, 0x8c, + 0x7e, 0xf7, 0xe6, 0x5e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x40, 0xda, 0xff, 0xc4, 0x1b, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0xf9, 0xff, 0xab, 0x16, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x15, 0xa3, 0xff, 0xf6, 0x7b, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x06, 0x73, 0xef, 0xff, 0xff, 0xff, 0xf0, 0xcb, 0xa0, 0x6b, - 0x25, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, - 0x46, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb5, 0x3f, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, 0xff, 0xe3, 0x49, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xa2, 0xe3, 0xef, 0xff, + 0xff, 0xff, 0xec, 0x82, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x4a, + 0xcf, 0xff, 0xef, 0x52, 0x00, 0x00, 0x00, 0x30, 0xc7, 0xff, 0xe5, + 0x58, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x6a, 0xf1, + 0xfc, 0x95, 0x0e, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x13, 0xa4, 0xff, 0xff, 0x96, 0x04, 0x00, 0x00, 0x10, - 0x9e, 0xff, 0xb8, 0x26, 0x00, 0x00, 0x00, 0x00, 0x13, 0xa4, 0xff, - 0xf3, 0x74, 0x00, 0x00, 0x00, 0x16, 0xab, 0xff, 0xd5, 0x42, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xc2, 0xff, 0xf9, - 0x8f, 0x15, 0x00, 0x00, 0x00, 0x04, 0x3d, 0xb6, 0xf9, 0xf9, 0xff, - 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0x52, + 0x00, 0x00, 0x00, 0x0e, 0x9b, 0xff, 0xff, 0x8f, 0x06, 0x10, 0x9b, + 0xff, 0xab, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x9b, + 0xff, 0xff, 0x8e, 0x00, 0x14, 0xa6, 0xff, 0xcc, 0x33, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0x21, 0x44, 0x49, 0x3c, 0x21, 0x0c, 0x00, 0x08, 0x89, 0xfc, 0xf7, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x35, 0xc9, 0xff, 0xfb, 0x84, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xa4, 0xff, 0xff, - 0xbd, 0x2a, 0x00, 0x00, 0x1c, 0xb0, 0xff, 0xee, 0x5c, 0x00, 0x00, + 0x0d, 0x69, 0xde, 0xff, 0xf9, 0x97, 0x0f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0xea, + 0xff, 0xe6, 0x54, 0x42, 0xd9, 0xfc, 0xa7, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xbb, 0xff, 0xe2, 0x36, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0xff, 0xff, - 0x86, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0xf9, 0xff, 0xb8, 0x15, - 0x00, 0x00, 0x00, 0x00, 0x37, 0xce, 0xff, 0xf5, 0xad, 0x5f, 0x44, - 0x21, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0a, 0x62, 0xb1, 0xea, 0xf0, 0xd1, 0xcc, 0xcc, 0xd6, 0xf9, - 0xe7, 0xaa, 0x49, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, 0xff, + 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x34, + 0x49, 0x61, 0x80, 0xa3, 0xde, 0xfc, 0xec, 0x90, 0x1b, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x1c, 0x33, + 0x4f, 0x80, 0xcf, 0xfc, 0xff, 0xc0, 0x1a, 0x00, 0x00, 0x00, 0x08, + 0x6f, 0xea, 0xff, 0xbe, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x48, 0xc5, 0xff, 0xcf, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xd5, 0xff, 0xec, 0x66, 0x00, - 0x00, 0x00, 0x00, 0x75, 0xf9, 0xde, 0x4c, 0x00, 0x00, 0x00, 0x00, - 0x30, 0xca, 0xff, 0xda, 0x48, 0x00, 0x00, 0x00, 0x03, 0x86, 0xff, - 0xf6, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, - 0xf9, 0xff, 0xbd, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, - 0xd8, 0xff, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xc3, 0xff, 0xff, 0x64, + 0x00, 0x00, 0x7a, 0xfc, 0xd6, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x29, 0xc3, 0xff, 0xf0, 0x5f, 0x00, 0x03, 0x80, 0xfc, 0xeb, + 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0f, 0x5a, 0xb3, 0xde, 0xe3, 0xd6, 0xbb, 0x91, 0x42, 0x0d, + 0x59, 0xeb, 0xff, 0x9b, 0x10, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0xa0, 0xff, 0xff, 0xaf, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, - 0xd5, 0xff, 0xff, 0x84, 0x09, 0x00, 0x00, 0x03, 0x7b, 0xf9, 0xff, - 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x97, - 0xff, 0xff, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, - 0x96, 0xff, 0xef, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x34, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0xe9, - 0xff, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x68, 0xf3, 0xff, 0xad, - 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0f, 0x65, 0xe7, 0xfb, 0xc9, 0x70, 0x3a, 0x33, - 0x33, 0x40, 0x83, 0xd3, 0xfc, 0xcd, 0x48, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0d, 0x80, 0xf2, 0xff, 0xea, 0x53, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x8e, 0xff, 0xff, 0xbd, 0x26, 0x19, 0xab, 0xff, 0xe5, 0x39, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xf7, + 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0xcc, 0xff, 0xd6, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x52, 0xc5, 0xff, 0xec, + 0x6f, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x46, + 0x86, 0xb6, 0xcc, 0xe6, 0xf7, 0xff, 0xfc, 0xcd, 0x54, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1b, 0x86, 0xf0, 0xfc, 0xbf, 0x52, 0x1e, 0x08, + 0x0e, 0x25, 0x66, 0xcd, 0xfc, 0xde, 0x64, 0x08, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0xec, 0xff, - 0xd5, 0x42, 0x00, 0x00, 0x00, 0x00, 0x54, 0xe9, 0xf3, 0x74, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xe7, 0xff, 0xb8, 0x26, 0x00, 0x00, 0x00, - 0x00, 0x61, 0xef, 0xff, 0xa3, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1d, 0xc9, 0xff, 0xf5, 0x79, 0x06, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0c, 0x91, 0xfc, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0xe6, + 0xff, 0xe5, 0x39, 0x00, 0x00, 0x59, 0xeb, 0xf1, 0x64, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4a, 0xe1, 0xff, 0xcb, 0x34, 0x00, 0x00, + 0x59, 0xeb, 0xfc, 0x89, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0x76, 0xde, 0xff, 0xfc, 0xeb, 0xe3, 0xe9, + 0xf6, 0xd4, 0x80, 0x65, 0xde, 0xff, 0xbb, 0x25, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x7c, - 0xff, 0xff, 0xc4, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x6e, 0xf3, 0xff, 0xe2, 0x4e, 0x00, 0x00, 0x00, 0x00, - 0x4f, 0xe0, 0xff, 0xcd, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xb6, 0xff, + 0xff, 0xaa, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x33, 0xc6, 0xff, 0xfc, 0x89, 0x08, 0x03, 0x76, + 0xf7, 0xff, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x64, 0xf1, 0xff, 0x8f, 0x0f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x36, 0xc9, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, - 0x09, 0x7d, 0xad, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x64, 0xf1, 0xff, 0xc5, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x80, - 0xff, 0xff, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xd4, 0xff, 0xbe, 0x45, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x4d, 0xc5, 0xfc, 0xad, 0x21, + 0x00, 0x4f, 0xe6, 0xff, 0xa0, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x2e, 0xda, 0xff, 0xbb, 0x21, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0x5d, 0xe4, 0xff, 0xca, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x80, 0xda, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xec, 0xad, 0x48, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x73, 0xc4, 0xee, + 0xde, 0xb5, 0x8f, 0x9b, 0xbf, 0xea, 0xef, 0xbd, 0x5a, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x80, 0xfc, 0xff, 0xab, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x33, 0xcc, - 0xff, 0xa0, 0x09, 0x00, 0x00, 0x00, 0x70, 0xf7, 0xff, 0x8f, 0x09, - 0x00, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xcb, 0x21, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3a, 0xe3, 0xff, 0xd5, 0x42, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0xeb, 0xff, 0xe3, 0x52, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x80, 0xfc, 0xff, 0xba, 0x16, 0x00, 0x00, 0x33, 0xcc, 0xff, + 0x8f, 0x09, 0x00, 0x00, 0x00, 0x00, 0x03, 0x76, 0xf7, 0xff, 0xa0, + 0x0f, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xb5, 0x21, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x65, 0xea, 0xff, 0xe4, 0x9a, + 0x59, 0x49, 0x54, 0x7b, 0xc8, 0xea, 0xbc, 0xde, 0xff, 0xd6, 0x44, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x70, 0xff, 0xff, 0xde, 0x44, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x19, 0xab, 0xff, 0xff, 0xa7, 0x1a, 0x00, - 0x00, 0x00, 0x00, 0x21, 0xaa, 0xff, 0xf6, 0x65, 0x03, 0x00, 0x00, + 0x03, 0x6a, 0xef, 0xff, 0xe3, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x6a, 0xef, 0xff, 0xe3, 0x54, + 0x00, 0x00, 0x42, 0xd9, 0xff, 0xb3, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xc7, 0xff, 0xdf, 0x63, 0x0d, - 0x00, 0x00, 0x00, 0x00, 0x15, 0x9a, 0xf9, 0xfc, 0x95, 0x0e, 0x00, - 0x00, 0x00, 0x00, 0x27, 0xd0, 0xf7, 0x9b, 0x27, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x13, 0xa0, 0xff, 0xfc, 0x9a, 0x09, 0x00, 0x00, - 0x00, 0x00, 0x70, 0xf7, 0xff, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x1c, 0x17, 0x00, 0x00, 0x00, 0x00, 0x13, 0x9a, 0xfc, - 0xdf, 0x53, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x65, - 0xec, 0xec, 0x65, 0x03, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x40, 0xda, 0xff, 0xc4, 0x1b, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0xf9, 0xff, 0xab, 0x16, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x15, 0xa3, 0xff, 0xf6, 0x7b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x73, 0xef, 0xff, 0xff, 0xff, 0xf0, 0xcb, 0xa0, + 0x6b, 0x25, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x46, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb5, 0x3f, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x19, 0xab, 0xff, 0xfc, 0x80, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x14, 0xa6, 0xff, 0xcb, 0x21, 0x00, 0x00, 0x0e, 0x9b, 0xff, - 0xf1, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0xa6, 0xff, 0xf0, - 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0xf6, 0xff, 0xb2, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xd6, + 0x00, 0x00, 0x00, 0x13, 0xa4, 0xff, 0xff, 0x96, 0x04, 0x00, 0x00, + 0x10, 0x9e, 0xff, 0xb8, 0x26, 0x00, 0x00, 0x00, 0x00, 0x13, 0xa4, + 0xff, 0xf3, 0x74, 0x00, 0x00, 0x00, 0x16, 0xab, 0xff, 0xd5, 0x42, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xc2, 0xff, + 0xf9, 0x8f, 0x15, 0x00, 0x00, 0x00, 0x04, 0x3d, 0xb6, 0xf9, 0xf9, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xe3, 0x49, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xd9, 0xff, 0xf9, - 0x5e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x65, 0xf6, 0xff, 0xa1, - 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x6f, 0xea, - 0xff, 0xda, 0x6c, 0x19, 0x03, 0x08, 0x2c, 0x89, 0xf0, 0xff, 0xc9, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x9c, 0xf2, 0xf2, 0xb0, - 0x52, 0x19, 0x03, 0x00, 0x03, 0x21, 0x77, 0xe4, 0xff, 0xd8, 0x52, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xd9, 0xff, 0xb6, 0x37, 0x06, - 0x00, 0x00, 0x08, 0x26, 0x65, 0xad, 0x5b, 0x00, 0x00, 0x00, 0x00, - 0x3c, 0xd6, 0xff, 0xa0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x29, 0xc3, 0xff, 0xa6, 0x14, 0x00, 0x00, 0x00, 0x8f, - 0xff, 0xff, 0x8f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x35, 0xc9, 0xff, 0xfb, 0x84, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xa4, 0xff, + 0xff, 0xbd, 0x2a, 0x00, 0x00, 0x1c, 0xb0, 0xff, 0xee, 0x5c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xbb, 0xff, 0xe2, + 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0xff, + 0xff, 0x86, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0xf9, 0xff, 0xb8, + 0x15, 0x00, 0x00, 0x00, 0x00, 0x37, 0xce, 0xff, 0xf5, 0xad, 0x5f, + 0x44, 0x21, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0a, 0x62, 0xb1, 0xea, 0xf0, 0xd1, 0xcc, 0xcc, 0xd6, + 0xf9, 0xe7, 0xaa, 0x49, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xd6, 0xff, 0xeb, 0x59, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0xfc, 0xf0, 0x44, 0x00, 0x00, - 0x33, 0xcc, 0xff, 0xd6, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x80, 0xfc, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, - 0xff, 0xff, 0xad, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x21, 0xbb, 0xff, 0xd6, 0x44, 0x00, 0x00, 0x00, 0x00, 0x49, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xd5, 0xff, 0xec, 0x66, + 0x00, 0x00, 0x00, 0x00, 0x75, 0xf9, 0xde, 0x4c, 0x00, 0x00, 0x00, + 0x00, 0x30, 0xca, 0xff, 0xda, 0x48, 0x00, 0x00, 0x00, 0x03, 0x86, + 0xff, 0xf6, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x83, 0xf9, 0xff, 0xbd, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x47, 0xd8, 0xff, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, - 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, - 0xf7, 0xff, 0xd4, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, - 0xd5, 0xff, 0xda, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1b, 0x86, 0xf0, 0xff, 0xe4, 0xab, 0x85, 0x8f, 0xc0, 0xf0, - 0xff, 0xda, 0x54, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, - 0x8b, 0xe4, 0xfc, 0xde, 0xab, 0x86, 0x80, 0x86, 0xb3, 0xec, 0xff, - 0xde, 0x69, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x8b, 0xf0, - 0xf9, 0xc9, 0x8a, 0x80, 0x80, 0x8f, 0xbd, 0xec, 0xff, 0x8e, 0x00, - 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xb6, 0x1c, 0x00, - 0x00, 0x00, 0x8f, 0xff, 0xff, 0xbd, 0x26, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0xa0, 0xff, 0xff, + 0xaf, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3b, 0xd5, 0xff, 0xff, 0x84, 0x09, 0x00, 0x00, 0x03, 0x7b, 0xf9, + 0xff, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, + 0x97, 0xff, 0xff, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x96, 0xff, 0xef, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, + 0x34, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, + 0xe9, 0xff, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x68, 0xf3, 0xff, + 0xad, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0f, 0x65, 0xe7, 0xfb, 0xc9, 0x70, 0x3a, + 0x33, 0x33, 0x40, 0x83, 0xd3, 0xfc, 0xcd, 0x48, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xf1, 0xff, - 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0xe6, 0xff, - 0x71, 0x00, 0x00, 0x59, 0xeb, 0xff, 0xab, 0x19, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x54, 0xe6, 0xff, 0xad, 0x1a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x70, 0xff, 0xff, 0xad, 0x1c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x29, 0xc3, 0xff, 0xbb, 0x25, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0xec, + 0xff, 0xd5, 0x42, 0x00, 0x00, 0x00, 0x00, 0x54, 0xe9, 0xf3, 0x74, + 0x00, 0x00, 0x00, 0x00, 0x50, 0xe7, 0xff, 0xb8, 0x26, 0x00, 0x00, + 0x00, 0x00, 0x61, 0xef, 0xff, 0xa3, 0x0a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1d, 0xc9, 0xff, 0xf5, 0x79, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0c, 0x91, 0xfc, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x7c, 0xff, 0xff, 0xc4, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x6e, 0xf3, 0xff, 0xe2, 0x4e, 0x00, 0x00, 0x00, + 0x00, 0x4f, 0xe0, 0xff, 0xcd, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0xff, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x26, 0xbd, 0xff, 0xfc, 0x9a, 0x09, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x06, 0xa1, 0xff, 0xfc, 0x89, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x73, 0xc8, 0xf7, 0xff, 0xff, - 0xff, 0xff, 0xf3, 0xad, 0x4f, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x13, 0x5d, 0xb3, 0xec, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xf1, 0xbd, 0x5a, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x21, 0x89, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xec, - 0xc4, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x44, 0xde, 0xff, 0xa0, 0x0f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xc3, 0xff, - 0xb0, 0x19, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xec, 0x65, 0x03, + 0x00, 0x00, 0x00, 0x64, 0xf1, 0xff, 0x8f, 0x0f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x36, 0xc9, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, + 0x00, 0x09, 0x7d, 0xad, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x64, 0xf1, 0xff, 0xc5, 0x1c, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xff, 0xff, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xd4, 0xff, 0xbe, + 0x45, 0x08, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x4d, 0xc5, 0xfc, 0xad, + 0x21, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, - 0x9b, 0xff, 0xff, 0xa6, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x29, 0xc3, 0xff, 0xa0, 0x0f, 0x03, 0x80, 0xfc, 0xfc, 0x80, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xc3, 0xff, 0xe5, 0x52, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xad, 0x1c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0xde, 0xff, 0xb0, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x77, 0xff, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x54, 0xe6, 0xff, 0xde, 0x55, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0xe5, 0xff, 0xbd, 0x26, + 0x03, 0x80, 0xfc, 0xff, 0xab, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x33, + 0xcc, 0xff, 0xa0, 0x09, 0x00, 0x00, 0x00, 0x70, 0xf7, 0xff, 0x8f, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xcb, 0x21, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0xe3, 0xff, 0xd5, 0x42, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0xeb, 0xff, 0xe3, + 0x52, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x3d, - 0x84, 0xba, 0xcc, 0xcc, 0xad, 0x74, 0x22, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x25, 0x6b, 0xa0, - 0xc4, 0xcc, 0xcc, 0xad, 0x71, 0x30, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x67, 0x96, 0xbf, 0xcc, 0xcc, - 0xc5, 0xa0, 0x6b, 0x30, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xc4, - 0xff, 0xcf, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x4f, 0xe3, 0xff, 0x91, 0x09, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, - 0xff, 0xb8, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xde, 0x44, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xab, 0xff, 0xff, 0xa7, 0x1a, + 0x00, 0x00, 0x00, 0x00, 0x21, 0xaa, 0xff, 0xf6, 0x65, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xc7, 0xff, 0xdf, 0x63, + 0x0d, 0x00, 0x00, 0x00, 0x00, 0x15, 0x9a, 0xf9, 0xfc, 0x95, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0x27, 0xd0, 0xf7, 0x9b, 0x27, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x13, 0xa0, 0xff, 0xfc, 0x9a, 0x09, 0x00, + 0x00, 0x00, 0x00, 0x70, 0xf7, 0xff, 0x64, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x1c, 0x17, 0x00, 0x00, 0x00, 0x00, 0x13, 0x9a, + 0xfc, 0xdf, 0x53, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0x65, 0xec, 0xec, 0x65, 0x03, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x29, 0xbf, 0xff, 0xf9, 0x7b, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x10, 0x9e, 0xff, 0xc4, 0x2d, 0x15, 0xa4, 0xff, - 0xec, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x9e, - 0xff, 0xff, 0x7c, 0x06, 0x00, 0x00, 0x00, 0x00, 0x55, 0xf1, 0xff, - 0xb7, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, - 0xe9, 0xff, 0x91, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, + 0x00, 0x00, 0x00, 0x19, 0xab, 0xff, 0xfc, 0x80, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x14, 0xa6, 0xff, 0xcb, 0x21, 0x00, 0x00, 0x0e, 0x9b, + 0xff, 0xf1, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0xa6, 0xff, + 0xf0, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0xf6, 0xff, + 0xb2, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, + 0xd6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x99, 0xff, 0xff, 0xb6, 0x1c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x91, 0xfc, 0xff, 0xb0, - 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xb1, - 0xff, 0xea, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x16, 0x1f, 0x1f, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x09, 0x1b, 0x1f, 0x1f, 0x10, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, - 0x19, 0x1f, 0x1f, 0x1c, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x09, 0x86, 0xf9, 0xf9, 0x9c, 0x1c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1f, 0xa7, 0xfc, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, - 0x8f, 0xff, 0xff, 0xff, 0xf6, 0xac, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xe3, 0x49, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xd9, 0xff, + 0xf9, 0x5e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x65, 0xf6, 0xff, + 0xa1, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x6f, + 0xea, 0xff, 0xda, 0x6c, 0x19, 0x03, 0x08, 0x2c, 0x89, 0xf0, 0xff, + 0xc9, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x9c, 0xf2, 0xf2, + 0xb0, 0x52, 0x19, 0x03, 0x00, 0x03, 0x21, 0x77, 0xe4, 0xff, 0xd8, + 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xd9, 0xff, 0xb6, 0x37, + 0x06, 0x00, 0x00, 0x08, 0x26, 0x65, 0xad, 0x5b, 0x00, 0x00, 0x00, + 0x00, 0x3c, 0xd6, 0xff, 0xa0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x29, 0xc3, 0xff, 0xa6, 0x14, 0x00, 0x00, 0x00, + 0x8f, 0xff, 0xff, 0x8f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0xde, 0xff, 0xe7, 0x50, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0xf9, 0xee, 0x5c, - 0x29, 0xbf, 0xff, 0xcf, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x75, 0xf9, 0xff, 0xa5, 0x18, 0x00, 0x00, 0x00, 0x00, - 0x29, 0xd6, 0xff, 0xda, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x06, 0x84, 0xfc, 0xf3, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xd6, 0xff, 0xeb, 0x59, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0xfc, 0xf0, 0x44, 0x00, + 0x00, 0x33, 0xcc, 0xff, 0xd6, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x80, 0xfc, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0xff, 0xff, 0xad, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x21, 0xbb, 0xff, 0xd6, 0x44, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xc3, 0xff, - 0xff, 0x91, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xca, - 0xff, 0xf9, 0x7b, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x74, 0xff, 0xff, 0x97, 0x0c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, + 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x80, 0xf7, 0xff, 0xd4, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2b, 0xd5, 0xff, 0xda, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1b, 0x86, 0xf0, 0xff, 0xe4, 0xab, 0x85, 0x8f, 0xc0, + 0xf0, 0xff, 0xda, 0x54, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x25, 0x8b, 0xe4, 0xfc, 0xde, 0xab, 0x86, 0x80, 0x86, 0xb3, 0xec, + 0xff, 0xde, 0x69, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x8b, + 0xf0, 0xf9, 0xc9, 0x8a, 0x80, 0x80, 0x8f, 0xbd, 0xec, 0xff, 0x8e, + 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0x8f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xb6, 0x1c, + 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xbd, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0xc2, 0xff, 0xe7, 0x95, 0x3f, - 0x10, 0x00, 0x03, 0x15, 0x4e, 0x9d, 0xea, 0xfc, 0x9a, 0x15, 0x00, - 0x00, 0x00, 0x00, 0x8f, 0xff, 0xef, 0xca, 0xf0, 0xf9, 0xc2, 0x6d, - 0x36, 0x1c, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0xf3, 0xff, - 0xca, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, - 0xe0, 0xff, 0x84, 0x48, 0xda, 0xff, 0xa4, 0x13, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0xe0, 0xff, 0xc9, 0x35, 0x00, - 0x00, 0x00, 0x00, 0x0a, 0xb0, 0xff, 0xf1, 0x6e, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb0, 0xff, 0xd5, 0x3b, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xf1, + 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0xe6, + 0xff, 0x71, 0x00, 0x00, 0x59, 0xeb, 0xff, 0xab, 0x19, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x54, 0xe6, 0xff, 0xad, 0x1a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xad, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xc3, 0xff, 0xbb, 0x25, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x5b, 0xea, 0xff, 0xee, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x5b, 0xec, 0xff, 0xda, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xee, 0xff, 0xc4, 0x2a, 0x00, + 0x00, 0x70, 0xff, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x26, 0xbd, 0xff, 0xfc, 0x9a, 0x09, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x06, 0xa1, 0xff, 0xfc, 0x89, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x4a, 0xce, - 0xf9, 0xff, 0xe5, 0xad, 0x8f, 0x96, 0xb8, 0xee, 0xff, 0xf6, 0xb2, - 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xe3, 0x5f, 0x89, - 0xf0, 0xff, 0xff, 0xe2, 0xb6, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x73, 0xc8, 0xf7, 0xff, + 0xff, 0xff, 0xff, 0xf3, 0xad, 0x4f, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x13, 0x5d, 0xb3, 0xec, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf1, 0xbd, 0x5a, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x21, 0x89, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xec, 0xc4, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x44, 0xde, 0xff, 0xa0, + 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xc3, + 0xff, 0xb0, 0x19, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xec, 0x65, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, - 0xb1, 0xff, 0xff, 0x97, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x25, 0xb7, 0xff, 0xad, 0x74, 0xf3, 0xfc, 0x79, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0xb7, 0xff, - 0xf1, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0xe7, 0xff, 0xc8, - 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x58, 0xe3, 0xfc, 0x91, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x15, 0xa3, 0xff, 0xff, 0xbc, 0x2c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x11, 0x9e, 0xff, 0xff, 0xa4, 0x13, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0xaa, 0xff, - 0xf3, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x9b, 0xff, 0xff, 0xa6, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x29, 0xc3, 0xff, 0xa0, 0x0f, 0x03, 0x80, 0xfc, 0xfc, 0x80, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xc3, 0xff, 0xe5, + 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xad, 0x1c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0xde, 0xff, + 0xb0, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x1c, 0x1c, 0x18, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x10, 0x1c, 0x1c, 0x19, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x14, 0x1c, 0x1c, 0x1c, 0x0c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x06, 0x42, 0x99, 0xde, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xf9, - 0xda, 0x90, 0x30, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, - 0xe3, 0x49, 0x21, 0x80, 0xce, 0xf3, 0xff, 0xe3, 0x49, 0x00, 0x00, - 0x00, 0x00, 0x06, 0x16, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, - 0x1c, 0x1c, 0x5d, 0xe6, 0xff, 0xe6, 0x65, 0x1c, 0x1c, 0x1c, 0x1c, - 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x45, 0xda, 0xff, 0xf7, 0x70, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x8e, 0xff, 0xca, 0xaf, 0xff, - 0xe6, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0e, 0x8e, 0xff, 0xff, 0x8f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x15, - 0x8f, 0xf9, 0xf7, 0x9b, 0x27, 0x03, 0x00, 0x00, 0x03, 0x3d, 0xb5, - 0xfc, 0xd8, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, - 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x52, 0xde, 0xff, 0xf6, 0x70, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0xcc, 0xff, 0xf7, 0x76, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x71, 0xf1, 0xff, 0x9b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xb6, - 0xb6, 0x9f, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xa3, 0xb6, 0xb0, 0x55, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x27, 0x91, 0xb6, 0xb6, 0xa1, 0x2c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x4c, 0x80, 0xa6, 0xb6, - 0xb6, 0x9e, 0x75, 0x46, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x66, 0xb6, 0xa2, 0x34, 0x00, 0x0d, 0x37, 0x68, 0x9e, 0xa2, - 0x34, 0x00, 0x00, 0x00, 0x00, 0x25, 0x91, 0xb6, 0xb6, 0xb6, 0xb6, - 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xcb, 0xf7, 0xff, 0xf7, 0xcd, 0xb6, - 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0x7b, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xf9, 0xff, 0xe1, 0x4a, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xef, - 0xf6, 0xee, 0xff, 0xc3, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x52, 0xef, 0xff, 0xbd, 0x26, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x25, 0xa5, 0xf2, 0xf2, 0xb6, 0x6a, 0x49, 0x49, - 0x6e, 0xc8, 0xf7, 0xf2, 0x80, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x49, 0xe3, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xb0, 0xfc, 0xff, - 0xc3, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x77, 0xf1, - 0xff, 0xd9, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x35, 0xc7, 0xff, 0xcf, 0x38, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x70, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xa2, - 0xfc, 0xff, 0xc0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x80, 0xf2, 0xff, 0xf0, - 0x8c, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x14, 0x1c, 0x1c, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x1c, 0x19, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x10, 0x19, 0x08, 0x00, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xac, 0xff, 0xff, - 0xbd, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x25, 0xd1, 0xff, 0xff, 0xff, 0x9b, 0x0e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0xd1, 0xff, 0xe1, - 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x8b, 0xe4, 0xff, - 0xf1, 0xe3, 0xe3, 0xf3, 0xff, 0xe4, 0x8b, 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0x52, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x96, - 0xf2, 0xff, 0xd4, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0xc0, 0xff, 0xff, 0xa0, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x89, 0xfc, 0xf7, - 0x76, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3a, 0xc5, 0xff, 0xf7, 0x90, 0x15, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x4f, 0xd8, - 0xff, 0xf2, 0x9c, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x25, 0x91, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, - 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, - 0xb6, 0xb6, 0xb6, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, - 0xb9, 0xe3, 0xe3, 0x81, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x9f, 0xe3, 0xe3, 0xde, 0x68, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x77, 0xff, 0xff, 0xcc, 0x33, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0xe6, 0xff, 0xde, 0x55, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0xe5, 0xff, 0xbd, + 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, - 0x9f, 0xe3, 0xdb, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x13, 0x5d, 0xab, 0xd6, 0xe3, 0xe3, 0xd5, 0xa4, 0x5d, 0x13, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, - 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, - 0x3f, 0xa5, 0xf2, 0xff, 0xde, 0x65, 0x06, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x4a, 0xf0, 0xff, 0xf1, 0x64, 0x00, 0x00, 0x00, + 0x3d, 0x84, 0xba, 0xcc, 0xcc, 0xad, 0x74, 0x22, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x25, 0x6b, + 0xa0, 0xc4, 0xcc, 0xcc, 0xad, 0x71, 0x30, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x67, 0x96, 0xbf, 0xcc, + 0xcc, 0xc5, 0xa0, 0x6b, 0x30, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x2a, + 0xc4, 0xff, 0xcf, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x4f, 0xe3, 0xff, 0x91, 0x09, 0x00, 0x00, 0x00, 0x8f, 0xff, + 0xff, 0xff, 0xb8, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x54, 0xe6, 0xff, 0xab, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xe0, - 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x65, 0xea, 0xff, 0xe1, 0x5c, + 0x00, 0x00, 0x00, 0x29, 0xbf, 0xff, 0xf9, 0x7b, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x9e, 0xff, 0xc4, 0x2d, 0x15, 0xa4, + 0xff, 0xec, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x9e, 0xff, 0xff, 0x7c, 0x06, 0x00, 0x00, 0x00, 0x00, 0x55, 0xf1, + 0xff, 0xb7, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x54, 0xe9, 0xff, 0x91, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, + 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x99, 0xff, 0xff, 0xb6, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x91, 0xfc, 0xff, + 0xb0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, + 0xb1, 0xff, 0xea, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x27, 0xb2, 0xfc, 0xff, 0xbd, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x16, 0x1f, 0x1f, 0x10, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x09, 0x1b, 0x1f, 0x1f, 0x10, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x19, 0x1f, 0x1f, 0x1c, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x09, 0x86, 0xf9, 0xf9, 0x9c, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1f, 0xa7, 0xfc, 0xe3, 0x52, 0x00, 0x00, 0x00, + 0x00, 0x8f, 0xff, 0xff, 0xff, 0xf6, 0xac, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0xde, 0xff, 0xe7, 0x50, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0xf9, 0xee, + 0x5c, 0x29, 0xbf, 0xff, 0xcf, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x75, 0xf9, 0xff, 0xa5, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x29, 0xd6, 0xff, 0xda, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x84, 0xfc, 0xf3, 0x68, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x49, 0xe3, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xc3, + 0xff, 0xff, 0x91, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, + 0xca, 0xff, 0xf9, 0x7b, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x74, 0xff, 0xff, 0x97, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x06, 0x19, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, - 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, - 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x15, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x11, 0x48, 0x52, 0x52, 0x29, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x52, 0x52, - 0x4d, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x52, 0x52, 0x29, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x1c, 0x44, 0x52, 0x52, 0x42, 0x15, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0xc2, 0xff, 0xe7, 0x95, + 0x3f, 0x10, 0x00, 0x03, 0x15, 0x4e, 0x9d, 0xea, 0xfc, 0x9a, 0x15, + 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xef, 0xca, 0xf0, 0xf9, 0xc2, + 0x6d, 0x36, 0x1c, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, + 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0xf3, + 0xff, 0xca, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4f, 0xe0, 0xff, 0x84, 0x48, 0xda, 0xff, 0xa4, 0x13, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0xe0, 0xff, 0xc9, 0x35, + 0x00, 0x00, 0x00, 0x00, 0x0a, 0xb0, 0xff, 0xf1, 0x6e, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb0, 0xff, 0xd5, 0x3b, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0x52, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x5b, 0xea, 0xff, 0xee, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5b, 0xec, 0xff, 0xda, 0x46, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xee, 0xff, 0xc4, 0x2a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x4a, + 0xce, 0xf9, 0xff, 0xe5, 0xad, 0x8f, 0x96, 0xb8, 0xee, 0xff, 0xf6, + 0xb2, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xe3, 0x5f, + 0x89, 0xf0, 0xff, 0xff, 0xe2, 0xb6, 0x3b, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0xb1, 0xff, 0xff, 0x97, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x25, 0xb7, 0xff, 0xad, 0x74, 0xf3, 0xfc, 0x79, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0xb7, + 0xff, 0xf1, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0xe7, 0xff, + 0xc8, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x58, 0xe3, 0xfc, + 0x91, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, + 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x15, 0xa3, 0xff, 0xff, 0xbc, 0x2c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x9e, 0xff, 0xff, 0xa4, 0x13, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0xaa, + 0xff, 0xf3, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x1c, 0x1c, 0x18, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x1c, 0x1c, 0x19, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x14, 0x1c, 0x1c, 0x1c, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x42, 0x99, 0xde, 0xfc, 0xff, 0xff, 0xff, 0xff, + 0xf9, 0xda, 0x90, 0x30, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, + 0xff, 0xe3, 0x49, 0x21, 0x80, 0xce, 0xf3, 0xff, 0xe3, 0x49, 0x00, + 0x00, 0x00, 0x00, 0x06, 0x16, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, + 0x1c, 0x1c, 0x1c, 0x5d, 0xe6, 0xff, 0xe6, 0x65, 0x1c, 0x1c, 0x1c, + 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x13, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x45, 0xda, 0xff, 0xf7, 0x70, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x8e, 0xff, 0xca, 0xaf, + 0xff, 0xe6, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x8e, 0xff, 0xff, 0x8f, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x15, 0x8f, 0xf9, 0xf7, 0x9b, 0x27, 0x03, 0x00, 0x00, 0x03, 0x3d, + 0xb5, 0xfc, 0xd8, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x17, 0x47, 0x84, 0xc9, 0xfc, 0xff, 0xea, 0x76, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x88, 0xff, 0xff, 0xcf, 0x35, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x52, 0xde, 0xff, 0xf6, 0x70, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0xcc, 0xff, 0xf7, + 0x76, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x71, 0xf1, 0xff, 0x9b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x25, 0xb9, 0xff, 0xda, 0x46, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, + 0xb6, 0xb6, 0x9f, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xa3, 0xb6, 0xb0, + 0x55, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x91, 0xb6, 0xb6, 0xa1, 0x2c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x4c, 0x80, 0xa6, + 0xb6, 0xb6, 0x9e, 0x75, 0x46, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x66, 0xb6, 0xa2, 0x34, 0x00, 0x0d, 0x37, 0x68, 0x9e, + 0xa2, 0x34, 0x00, 0x00, 0x00, 0x00, 0x25, 0x91, 0xb6, 0xb6, 0xb6, + 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xcb, 0xf7, 0xff, 0xf7, 0xcd, + 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0x7b, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xf9, 0xff, 0xe1, 0x4a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, + 0xef, 0xf6, 0xee, 0xff, 0xc3, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xef, 0xff, 0xbd, 0x26, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x25, 0xa5, 0xf2, 0xf2, 0xb6, 0x6a, 0x49, + 0x49, 0x6e, 0xc8, 0xf7, 0xf2, 0x80, 0x0d, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xb0, 0xfc, + 0xff, 0xc3, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x77, + 0xf1, 0xff, 0xd9, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0xc7, 0xff, 0xcf, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, - 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x99, - 0xf9, 0xff, 0xcf, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0e, 0x86, 0xf6, 0xff, 0xd8, 0x4d, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1d, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, - 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, - 0x33, 0x33, 0x25, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0xc7, 0xad, 0xad, 0xad, 0xad, - 0xad, 0xad, 0xad, 0xc3, 0xea, 0xff, 0xff, 0xf9, 0xc2, 0x58, 0x0f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0xcf, 0xff, - 0xff, 0x91, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x7b, 0xf9, 0xfc, 0x84, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x42, 0xd4, 0xff, 0xff, 0x88, 0x11, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0xd8, 0xff, 0xf0, 0x80, 0x0c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x91, 0x16, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xda, 0x8d, - 0x36, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x6b, 0xf5, 0xff, 0xef, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, - 0xe3, 0xff, 0xb0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, + 0xa2, 0xfc, 0xff, 0xc0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x80, 0xf2, 0xff, + 0xf0, 0x8c, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x14, 0x1c, 0x1c, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1c, 0x19, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x10, 0x19, 0x08, 0x00, 0x00, 0x00, 0x00, 0x33, 0xcc, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xac, 0xff, + 0xff, 0xbd, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x25, 0xd1, 0xff, 0xff, 0xff, 0x9b, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0xd1, 0xff, + 0xe1, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x8b, 0xe4, + 0xff, 0xf1, 0xe3, 0xe3, 0xf3, 0xff, 0xe4, 0x8b, 0x21, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0x52, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, + 0x96, 0xf2, 0xff, 0xd4, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0xc0, 0xff, 0xff, 0xa0, 0x13, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x89, 0xfc, + 0xf7, 0x76, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x66, 0xea, 0xff, 0xe8, 0x69, - 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xc2, 0xff, 0xfc, - 0xa7, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, - 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb6, 0x1c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x1b, 0x1f, - 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x16, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x3a, 0xc5, 0xff, 0xf7, 0x90, 0x15, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x4f, + 0xd8, 0xff, 0xf2, 0x9c, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x25, 0x91, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, + 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, + 0xb6, 0xb6, 0xb6, 0xb6, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0xb9, 0xe3, 0xe3, 0x81, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x9f, 0xe3, 0xe3, 0xde, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x9f, 0xe3, 0xdb, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x13, 0x5d, 0xab, 0xd6, 0xe3, 0xe3, 0xd5, 0xa4, 0x5d, 0x13, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, + 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x3f, 0xa5, 0xf2, 0xff, 0xde, 0x65, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4a, 0xf0, 0xff, 0xf1, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x9a, 0xad, - 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0x99, - 0x69, 0x36, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0d, 0x69, 0xad, 0xad, 0x8f, 0x27, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x84, 0xad, 0x91, 0x2d, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x54, 0xe6, 0xff, 0xab, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0xa2, - 0xfc, 0xff, 0xc9, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x8f, - 0xf9, 0xff, 0xd8, 0x4f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x65, 0xea, 0xff, 0xe1, + 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x27, 0xb2, 0xfc, 0xff, 0xbd, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x52, 0xd8, 0xff, 0xff, 0xef, 0xc3, 0xb6, 0xb6, 0xb6, - 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, - 0x81, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x25, 0x9f, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, - 0xb6, 0xb6, 0xa6, 0x80, 0x54, 0x21, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x56, 0x80, 0x80, 0x40, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x72, 0x25, 0x00, 0x00, 0x00, 0x36, 0x78, 0x80, 0x46, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x25, 0x72, 0x80, 0x80, 0x45, 0x00, 0x00, 0x00, - 0x08, 0x19, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, - 0x1c, 0x1c, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x13, 0x1c, 0x1c, 0x14, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x14, 0x1c, 0x19, 0x09, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x19, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x15, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x11, 0x48, 0x52, 0x52, 0x29, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x52, + 0x52, 0x4d, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x52, 0x52, 0x29, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1c, 0x44, 0x52, 0x52, 0x42, + 0x15, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x49, 0xe3, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x17, 0x47, 0x84, 0xc9, 0xfc, 0xff, 0xea, 0x76, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x88, 0xff, 0xff, 0xcf, + 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x25, 0xb9, 0xff, 0xda, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, + 0x99, 0xf9, 0xff, 0xcf, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0e, 0x86, 0xf6, 0xff, 0xd8, 0x4d, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3f, 0xc9, 0xff, 0xfc, 0xa2, 0x1b, 0x00, 0x00, 0x00, - 0x06, 0x70, 0xea, 0xff, 0xec, 0x74, 0x0d, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0xf2, 0xff, 0xec, 0x76, - 0x1f, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, - 0x1c, 0x1c, 0x1c, 0x14, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xe6, 0xb3, 0x6e, 0x27, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x4a, 0xd9, 0xff, - 0xb3, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x6a, 0xf1, 0xff, 0xf0, 0x65, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x33, 0x33, 0x33, 0x33, 0x33, + 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, + 0x33, 0x33, 0x33, 0x25, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -5611,3101 +4565,3201 @@ const unsigned char default_font_data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0xc7, 0xad, 0xad, 0xad, + 0xad, 0xad, 0xad, 0xad, 0xc3, 0xea, 0xff, 0xff, 0xf9, 0xc2, 0x58, + 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0xcf, + 0xff, 0xff, 0x91, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x7b, 0xf9, 0xfc, + 0x84, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x54, 0xe1, 0xff, 0xec, 0x6f, - 0x08, 0x00, 0x03, 0x3d, 0xd4, 0xff, 0xf6, 0x98, 0x1b, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xb0, - 0xfc, 0xff, 0xc0, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xef, 0xa4, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x9b, 0xc3, 0xe6, 0xfc, - 0xff, 0xf3, 0xb2, 0x32, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, - 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, - 0x15, 0xa0, 0xff, 0xe6, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xab, 0xff, - 0xff, 0xb3, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x42, 0xd4, 0xff, 0xff, 0x88, 0x11, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0xd8, 0xff, 0xf0, 0x80, + 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x91, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xda, + 0x8d, 0x36, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x6b, 0xf5, 0xff, 0xef, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4f, 0xe3, 0xff, 0xb0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x82, - 0xf0, 0xff, 0xcf, 0x3f, 0x00, 0x30, 0xb2, 0xfc, 0xfc, 0xb2, 0x30, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, - 0x80, 0x80, 0x66, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x4f, 0xd8, 0xff, 0xf7, 0xa1, 0x15, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x66, 0xea, 0xff, 0xe8, + 0x69, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xc2, 0xff, + 0xfc, 0xa7, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, - 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, - 0x29, 0x54, 0x9a, 0xe4, 0xff, 0xfc, 0xb7, 0x40, 0x03, 0x00, 0x00, - 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xff, 0xff, 0xda, 0x8f, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x72, 0x25, - 0x00, 0x00, 0x00, 0x00, 0x64, 0xf1, 0xfc, 0x89, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x42, 0xd9, 0xff, 0xf1, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x18, 0x41, 0x49, 0x41, 0x15, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, - 0x39, 0x49, 0x49, 0x2e, 0x06, 0x00, 0x00, 0x08, 0x34, 0x49, 0x49, - 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x15, 0x41, 0x49, 0x41, 0x18, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x87, 0xff, - 0xff, 0xe9, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x20, 0xa1, 0xf7, 0xfc, 0xa2, 0x2e, 0x90, 0xf6, 0xff, - 0xd4, 0x3d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x80, 0xf2, 0xff, 0xf0, 0x68, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x6c, 0xda, 0xff, 0xfc, 0xad, - 0x21, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xbd, - 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x76, 0xf7, 0xff, 0xcc, 0x39, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xcb, 0xe3, 0xcb, 0x41, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x5a, 0xd0, 0xe3, 0xd1, 0x5b, 0x06, 0x00, 0x00, 0x19, - 0xa2, 0xe3, 0xe3, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xcb, 0xe3, 0xcb, 0x49, + 0x88, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb6, 0x1c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x1b, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0x16, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x42, 0xce, 0xff, 0xff, 0xfb, 0x9a, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0xc8, 0xff, 0xea, 0xae, - 0xe1, 0xff, 0xe8, 0x6f, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x33, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0xbd, - 0xff, 0xff, 0xcf, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x6f, - 0xe8, 0xff, 0xea, 0x5c, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x9a, + 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, + 0x99, 0x69, 0x36, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0d, 0x69, 0xad, 0xad, 0x8f, 0x27, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0x84, 0xad, 0x91, 0x2d, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, + 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, + 0xa2, 0xfc, 0xff, 0xc9, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, + 0x8f, 0xf9, 0xff, 0xd8, 0x4f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x52, 0xd8, 0xff, 0xff, 0xef, 0xc3, 0xb6, 0xb6, + 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, + 0xb6, 0x81, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x25, 0x9f, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, + 0xb6, 0xb6, 0xb6, 0xa6, 0x80, 0x54, 0x21, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x80, 0x80, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x72, 0x25, 0x00, 0x00, 0x00, 0x36, 0x78, 0x80, 0x46, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x25, 0x72, 0x80, 0x80, 0x45, 0x00, 0x00, + 0x00, 0x08, 0x19, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, + 0x1c, 0x1c, 0x1c, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x13, 0x1c, 0x1c, 0x14, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x14, 0x1c, 0x19, 0x09, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x70, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x3f, 0xc9, 0xff, 0xfc, 0xa2, 0x1b, 0x00, 0x00, + 0x00, 0x06, 0x70, 0xea, 0xff, 0xec, 0x74, 0x0d, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0xf2, 0xff, 0xec, + 0x76, 0x1f, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, + 0x1c, 0x1c, 0x1c, 0x1c, 0x14, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xe6, 0xb3, 0x6e, + 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, - 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, - 0x9e, 0xff, 0xe3, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xa4, 0xff, 0xff, 0x9e, 0x11, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xe3, - 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1f, 0xad, 0xff, 0xff, 0xad, 0x1e, 0x00, - 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, - 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x4a, 0xd9, + 0xff, 0xb3, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x6a, 0xf1, 0xff, 0xf0, + 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0f, 0x8c, 0xf9, 0xff, 0xff, 0xff, 0xe3, 0x58, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x66, - 0xea, 0xff, 0xff, 0xff, 0xff, 0x96, 0x17, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xe0, 0xe0, - 0xb3, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x06, 0x66, 0xea, 0xff, 0xff, 0xa3, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, - 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x17, 0xa2, 0xff, 0xff, 0x91, 0x09, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x54, 0xe1, 0xff, 0xec, + 0x6f, 0x08, 0x00, 0x03, 0x3d, 0xd4, 0xff, 0xf6, 0x98, 0x1b, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, + 0xb0, 0xfc, 0xff, 0xc0, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xef, + 0xa4, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x9b, 0xc3, 0xe6, + 0xfc, 0xff, 0xf3, 0xb2, 0x32, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0x49, 0x00, 0x00, + 0x00, 0x15, 0xa0, 0xff, 0xe6, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xab, + 0xff, 0xff, 0xb3, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x6e, 0xf6, 0xf9, 0x7b, 0x04, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0xcf, 0xff, - 0xf6, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x52, 0xe3, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x71, 0xea, 0xff, 0xea, - 0x5c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x58, 0xe3, 0xff, 0xf9, 0xde, 0xf9, - 0xff, 0xbd, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x15, 0x9a, 0xfc, 0xff, 0xfc, 0xc7, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1a, 0x33, 0x33, 0x29, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x9a, 0xfb, 0xff, 0xf1, 0x69, - 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xe0, + 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x82, 0xf0, 0xff, 0xcf, 0x3f, 0x00, 0x30, 0xb2, 0xfc, 0xfc, 0xb2, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x80, 0x80, 0x66, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x4f, 0xd8, 0xff, 0xf7, 0xa1, 0x15, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0xff, 0xff, 0xb6, 0x1c, + 0x0e, 0x29, 0x54, 0x9a, 0xe4, 0xff, 0xfc, 0xb7, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xda, 0x8f, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x72, + 0x25, 0x00, 0x00, 0x00, 0x00, 0x64, 0xf1, 0xfc, 0x89, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xca, 0xff, 0xb9, 0x29, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, - 0x6e, 0xf3, 0xff, 0xca, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, 0xe3, 0x49, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0xdc, - 0xff, 0xfc, 0x9a, 0x15, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, - 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, + 0x00, 0x42, 0xd9, 0xff, 0xf1, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x41, 0x49, 0x41, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xb0, 0xfc, 0xff, - 0xc9, 0x61, 0xc2, 0xfc, 0xf2, 0x80, 0x0d, 0x00, 0x00, 0x00, 0x00, + 0x0d, 0x39, 0x49, 0x49, 0x2e, 0x06, 0x00, 0x00, 0x08, 0x34, 0x49, + 0x49, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x15, 0x41, 0x49, 0x41, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x6e, 0xf3, 0xff, 0xf9, 0x8f, - 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x87, + 0xff, 0xff, 0xe9, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc9, - 0xff, 0xff, 0xc9, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0xa1, 0xf7, 0xfc, 0xa2, 0x2e, 0x90, 0xf6, + 0xff, 0xd4, 0x3d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x80, 0xf2, 0xff, 0xf0, + 0x68, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xff, - 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x6c, 0xda, 0xff, 0xfc, + 0xad, 0x21, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x9b, - 0xff, 0xe6, 0x7e, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x49, 0x49, 0x57, 0xbb, 0xff, 0xff, 0x9b, 0x0e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, 0xe3, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, + 0xbd, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x76, 0xf7, 0xff, 0xcc, 0x39, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xcb, 0xe3, 0xcb, + 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x5a, 0xd0, 0xe3, 0xd1, 0x5b, 0x06, 0x00, 0x00, + 0x19, 0xa2, 0xe3, 0xe3, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xcb, 0xe3, 0xcb, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0xa1, 0xff, 0xff, 0xcf, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0xb6, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, - 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x80, - 0xf2, 0xff, 0xf0, 0x68, 0x09, 0x58, 0xd8, 0xff, 0xd8, 0x4f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xb0, 0xfc, - 0xff, 0xff, 0xd4, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x42, 0xce, 0xff, 0xff, 0xfb, 0x9a, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x5e, 0xea, 0xff, 0xfc, 0xa2, 0x1b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0xc8, 0xff, 0xea, + 0xae, 0xe1, 0xff, 0xe8, 0x6f, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x33, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, + 0xbd, 0xff, 0xff, 0xcf, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0x9a, 0xff, 0xff, 0x9b, 0x0e, 0x00, 0x00, 0x00, 0xad, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, + 0x6f, 0xe8, 0xff, 0xea, 0x5c, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x64, 0xf1, 0xfc, 0xec, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, - 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe7, 0xf7, 0xff, 0xf1, 0x64, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, + 0x10, 0x9e, 0xff, 0xe3, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xa4, 0xff, 0xff, 0x9e, + 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x13, 0x82, 0xf0, 0xff, 0xec, 0x6f, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xad, 0xff, 0xff, 0xad, 0x1e, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x4f, 0xd8, 0xff, 0xf7, 0xa1, 0x15, 0x00, 0x0f, 0x80, 0xf2, - 0xfc, 0xad, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, - 0x8b, 0xf2, 0xff, 0xf9, 0xfc, 0xff, 0xa1, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x97, 0xf9, 0xff, 0xec, 0x65, + 0x00, 0x00, 0x00, 0x0f, 0x8c, 0xf9, 0xff, 0xff, 0xff, 0xe3, 0x58, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x66, 0xea, 0xff, 0xff, 0xff, 0xff, 0x96, 0x17, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xe0, + 0xe0, 0xb3, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x66, 0xea, 0xff, 0xff, 0xa3, 0x11, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0d, 0x63, 0xdf, 0xff, 0xe4, 0x57, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x17, 0xa2, 0xff, 0xff, 0x91, 0x09, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xff, 0xec, 0xe3, - 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe7, 0xf9, 0xff, 0xff, - 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6e, 0xf6, 0xf9, 0x7b, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0xcf, + 0xff, 0xf6, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x52, 0xda, 0xff, 0xfc, 0xa2, 0x1b, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x71, 0xea, 0xff, + 0xea, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x27, 0xb0, 0xfc, 0xff, 0xca, 0x3c, 0x00, 0x00, - 0x00, 0x27, 0xb6, 0xff, 0xec, 0x6f, 0x09, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x58, 0xe3, 0xff, 0xf9, 0xde, + 0xf9, 0xff, 0xbd, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0f, 0x73, 0xe4, 0xff, 0xde, 0x9d, 0xd8, 0xff, 0xf0, 0x8c, - 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x15, 0x9a, 0xfc, 0xff, 0xfc, 0xc7, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0xb6, - 0xff, 0xff, 0xc0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1a, 0x33, 0x33, 0x29, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x9a, 0xfb, 0xff, 0xf1, + 0x69, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x13, 0x6c, 0xda, 0xff, 0xf0, 0x8b, 0x13, - 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0xff, 0xff, 0xb6, + 0x1c, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x95, 0xfc, - 0xff, 0x96, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x65, - 0xe0, 0xff, 0xfc, 0x95, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xca, 0xff, 0xb9, + 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x6e, 0xf3, 0xff, 0xca, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, 0xe3, 0x49, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xb0, 0xfc, 0xff, - 0xc9, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, + 0xdc, 0xff, 0xfc, 0x9a, 0x15, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0xf2, 0xff, 0xec, 0x6f, - 0x09, 0x00, 0x00, 0x00, 0x03, 0x5d, 0xe4, 0xff, 0xcf, 0x47, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xb0, 0xfc, + 0xff, 0xc9, 0x61, 0xc2, 0xfc, 0xf2, 0x80, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x06, 0x63, 0xdf, 0xff, 0xf2, 0x80, 0x1a, 0x80, - 0xf0, 0xff, 0xea, 0x5e, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x6e, 0xf3, 0xff, 0xf9, + 0x8f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x47, 0xdf, 0xff, 0xf7, 0x90, 0x13, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, + 0xc9, 0xff, 0xff, 0xc9, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x19, 0x4c, 0x9a, 0xe4, 0xff, 0xf0, - 0x89, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, + 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x54, 0xe6, 0xff, 0x9a, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x4a, 0xf0, 0xff, 0xe6, 0x54, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, + 0x9b, 0xff, 0xe6, 0x7e, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, + 0x49, 0x49, 0x49, 0x57, 0xbb, 0xff, 0xff, 0x9b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, - 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x80, - 0xf2, 0xff, 0xf0, 0x6a, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0xa1, 0xff, 0xff, 0xcf, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xd4, 0xff, - 0xff, 0xad, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x99, 0xf9, - 0xfc, 0xad, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xce, 0xff, 0xff, 0xbd, - 0x2b, 0x00, 0x2b, 0xb5, 0xff, 0xff, 0xc2, 0x37, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, + 0x80, 0xf2, 0xff, 0xf0, 0x68, 0x09, 0x58, 0xd8, 0xff, 0xd8, 0x4f, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xb0, + 0xfc, 0xff, 0xff, 0xd4, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x88, 0xf3, 0xff, 0xe1, 0x52, + 0x00, 0x00, 0x08, 0x5e, 0xea, 0xff, 0xfc, 0xa2, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe6, 0x6e, - 0x33, 0x33, 0x33, 0x33, 0x33, 0x3b, 0x64, 0x77, 0xa1, 0xda, 0xfc, - 0xf9, 0xd0, 0x81, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0f, 0x9a, 0xff, 0xff, 0x9b, 0x0e, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2a, 0xc4, 0xff, 0xdb, 0x48, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xff, 0xff, 0xc4, 0x2a, 0x00, + 0x00, 0x00, 0x00, 0x64, 0xf1, 0xfc, 0xec, 0xe3, 0xe3, 0xe3, 0xe3, + 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe7, 0xf7, 0xff, 0xf1, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x52, 0xe3, 0xff, 0xef, 0x6c, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x42, 0xd4, 0xff, 0xff, 0xb5, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x52, 0xe3, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x13, 0x82, 0xf0, 0xff, 0xec, 0x6f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, - 0xbb, 0xfc, 0xff, 0xd8, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x36, 0xc8, 0xff, 0xf9, 0x8e, 0x0a, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xa8, 0xfb, - 0xff, 0xd8, 0x4d, 0x03, 0x00, 0x03, 0x38, 0xd3, 0xff, 0xfb, 0x9a, - 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xb9, - 0xff, 0xff, 0xb8, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x4f, 0xd8, 0xff, 0xf7, 0xa1, 0x15, 0x00, 0x0f, 0x80, + 0xf2, 0xfc, 0xad, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x15, 0x8b, 0xf2, 0xff, 0xf9, 0xfc, 0xff, 0xa1, 0x20, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x97, 0xf9, 0xff, 0xec, + 0x65, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, - 0xff, 0xfb, 0xe9, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe4, 0xf9, 0xff, - 0xff, 0xe5, 0xba, 0x72, 0x29, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0d, 0x63, 0xdf, 0xff, 0xe4, 0x57, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xff, 0xff, 0xe7, 0xb7, 0xad, 0xad, 0xad, 0xad, - 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0x56, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x91, 0xff, 0xff, - 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xc2, 0xff, 0xff, - 0x91, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, 0xff, 0xda, 0x5a, 0x06, 0x00, - 0x00, 0x00, 0x00, 0x1c, 0xa7, 0xfc, 0xff, 0xd0, 0x44, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x06, 0x8c, 0xf5, 0xff, 0xf6, 0x86, 0x0c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x73, 0xf0, 0xff, 0xe0, 0x44, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, - 0x7f, 0xf1, 0xff, 0xf5, 0x86, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x77, - 0xee, 0xff, 0xea, 0x65, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x06, 0x66, 0xea, 0xff, 0xf3, 0x79, 0x0a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x33, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xda, 0x83, 0x24, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x61, 0xee, 0xff, 0xbd, 0x11, 0x00, 0x00, 0x00, 0x00, 0x03, 0x6b, - 0xf5, 0xff, 0xef, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, 0xff, 0xff, - 0xcd, 0x51, 0x04, 0x00, 0x00, 0x03, 0x65, 0xea, 0xff, 0xea, 0x73, - 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0xb6, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x49, 0xe1, 0xff, 0xff, 0xc0, 0x30, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xb0, 0xfc, - 0xfc, 0xa7, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x4f, 0xd8, 0xff, 0xf9, 0xb2, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x20, 0xa1, 0xff, 0xff, 0xc0, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0xa2, 0xfc, 0xff, 0xcf, 0x47, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xef, 0xa4, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x86, 0xab, 0xde, 0xf9, 0xe6, 0xa2, 0x52, - 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, - 0xea, 0xbf, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, - 0xb6, 0xb6, 0xb6, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x30, 0xc0, 0xff, 0xe3, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x19, 0xa1, 0xff, 0xff, 0xc7, 0x30, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xe3, - 0xff, 0xff, 0xff, 0xfc, 0xcd, 0x48, 0x06, 0x00, 0x27, 0xb6, 0xff, - 0xfc, 0xa2, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, - 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xad, 0xff, 0xff, 0xe4, - 0x5d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x4f, 0xd4, 0xff, 0xf0, 0x80, 0x0d, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0xba, 0xfc, 0xff, 0xc2, 0x3d, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0xd4, 0xff, 0xf7, 0x90, - 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xcf, - 0xff, 0xfc, 0xb6, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, - 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x19, 0x4c, 0x9a, - 0xe4, 0xfc, 0xe3, 0x89, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0xff, 0xff, 0xbe, 0x37, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, - 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x7b, 0xfc, 0xfc, 0x7b, - 0x08, 0x00, 0x00, 0x00, 0x42, 0xd5, 0xff, 0xfc, 0x89, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x52, 0xe3, 0xff, 0xf7, 0xea, 0xfc, 0xff, 0xcd, 0x54, 0x0f, - 0x80, 0xf2, 0xff, 0xd8, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0xa4, 0x49, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x49, 0x7e, 0xeb, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x80, 0xf0, - 0xff, 0xfc, 0x9a, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0d, 0x70, 0xea, 0xff, 0xd8, 0x4f, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x90, 0xf7, 0xff, 0xea, - 0x58, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x68, - 0xe4, 0xff, 0xe4, 0x67, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x80, 0x80, 0x66, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x6f, 0xec, 0xff, 0xf9, 0x97, 0x0f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, - 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x13, 0x6c, 0xde, 0xff, 0xf0, 0x6a, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7b, 0xb6, 0xb6, 0x5b, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, - 0xe3, 0xff, 0xb5, 0x26, 0x00, 0x00, 0x03, 0x76, 0xf6, 0xff, 0xe3, - 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, 0xe6, 0x89, 0xbf, 0xfc, - 0xff, 0xc9, 0x7d, 0xd8, 0xff, 0xf2, 0x80, 0x0d, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, - 0xff, 0xf1, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, - 0xe3, 0xe3, 0xe3, 0xe3, 0xeb, 0xfc, 0xff, 0xe3, 0x52, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x4f, 0xd8, 0xff, 0xff, 0xc9, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x8f, 0xf9, - 0xfc, 0xb0, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x67, 0xe4, - 0xff, 0xec, 0x82, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x15, 0x8b, 0xf2, 0xff, 0xcf, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0xa2, 0xfc, 0xff, 0xea, 0x5e, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x74, 0xea, 0xff, 0xc3, - 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x1c, 0x1c, 0x0e, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0f, 0xb5, 0xff, 0xe3, 0x54, 0x00, 0x00, 0x19, 0xab, - 0xff, 0xff, 0xb5, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, 0xe3, - 0x4c, 0x40, 0xb7, 0xfc, 0xfc, 0xf2, 0xfc, 0xfc, 0xb0, 0x27, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0xb6, 0xff, 0xff, 0xf1, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, - 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xeb, 0xfc, 0xff, 0xe3, - 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x27, 0xb0, 0xfc, 0xff, 0xdf, 0x5e, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x2b, 0xc2, 0xfc, 0xf2, 0x80, 0x0d, 0x00, 0x00, 0x00, 0x03, - 0x45, 0xcf, 0xff, 0xfc, 0xa2, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xb0, 0xfc, 0xfc, 0xa2, - 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x33, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xcf, - 0xff, 0xff, 0xc9, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, - 0xbb, 0xff, 0xf6, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, - 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xf9, 0xfc, 0x89, 0x08, - 0x00, 0x42, 0xd9, 0xff, 0xfc, 0x7b, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, - 0xe3, 0xff, 0xe3, 0x49, 0x03, 0x32, 0xb7, 0xf9, 0xff, 0xff, 0xde, - 0x52, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0xa4, 0x49, 0x49, 0x49, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x7e, - 0xeb, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0xbd, 0xcc, 0xcc, 0x77, 0x11, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x5d, 0xbf, 0xcc, 0xa0, 0x29, 0x00, - 0x00, 0x00, 0x0f, 0x79, 0xc8, 0xcc, 0xb4, 0x41, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x53, - 0xbf, 0xcc, 0xb7, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0xcc, - 0xcc, 0xa3, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x09, 0x79, 0xf1, 0xff, 0xfb, 0x9a, 0x15, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, - 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0xd0, - 0xff, 0xb8, 0x22, 0x00, 0x6e, 0xf6, 0xff, 0xe0, 0x3d, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x52, 0xe3, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x38, 0xb5, - 0xff, 0xff, 0xd5, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1f, 0x1f, - 0x1f, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x1c, 0x1f, - 0x1c, 0x09, 0x00, 0x00, 0x00, 0x04, 0x16, 0x1f, 0x1f, 0x16, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x09, 0x1c, 0x1f, 0x1f, 0x11, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x10, 0x1f, 0x1f, 0x19, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xa3, 0xff, 0xff, 0xea, 0x66, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xc3, 0xff, 0xf9, 0x75, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x06, 0x8a, 0xff, 0xde, 0x44, 0x13, 0xa4, 0xff, 0xff, 0xa7, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, 0xe3, 0x49, 0x00, - 0x00, 0x00, 0x3d, 0xdc, 0xff, 0xfc, 0xb2, 0x27, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, - 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x16, 0x1f, 0x1f, 0x1f, 0x1f, - 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x5c, 0xdc, - 0xff, 0xff, 0xbd, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x7f, 0xf1, 0xff, - 0xe0, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, - 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0xf9, 0xf3, 0x68, 0x2a, 0xc4, - 0xff, 0xf9, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, - 0xe3, 0x49, 0x00, 0x00, 0x00, 0x06, 0x65, 0xda, 0xff, 0xf3, 0x7f, - 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, - 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x91, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0xe8, 0xff, 0xff, 0xf9, 0x86, 0x09, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x79, - 0xea, 0xff, 0xfb, 0x8e, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0xcf, 0xff, - 0x9e, 0x6a, 0xec, 0xff, 0xcf, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x52, 0xe3, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x06, 0x5a, - 0xda, 0xff, 0xea, 0x76, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x1c, 0x1c, 0x16, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x1c, 0x1c, - 0x14, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x14, 0x1c, 0x1c, 0x10, 0x00, 0x00, 0x00, - 0x08, 0x19, 0x1c, 0x19, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1f, 0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x19, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, - 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x29, - 0x54, 0x9a, 0xe4, 0xff, 0xf9, 0xb7, 0x2b, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1a, 0x70, 0x80, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x09, 0x9a, 0xfc, 0xc6, 0xa8, 0xfc, 0xfc, 0x9a, 0x0f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xff, 0xec, + 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe7, 0xf9, 0xff, + 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0d, 0x69, 0xde, 0xff, 0xde, 0x76, 0x15, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x52, 0xda, 0xff, 0xfc, 0xa2, + 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0xb6, - 0xb6, 0x91, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x5b, 0xb6, 0xb6, 0x81, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x9b, 0xb6, 0xb0, 0x42, - 0x00, 0x00, 0x00, 0x34, 0xa2, 0xb6, 0xa2, 0x3b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x27, 0xb0, 0xfc, 0xff, 0xca, 0x3c, 0x00, + 0x00, 0x00, 0x27, 0xb6, 0xff, 0xec, 0x6f, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x16, 0x81, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, - 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, - 0xb6, 0x81, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x33, 0xe0, 0xff, 0xef, 0xa4, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x9e, 0xc3, 0xe6, 0xfc, 0xff, 0xec, 0xa2, 0x32, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xff, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xda, 0x8f, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x5b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x55, 0xde, 0xf2, 0xea, 0xff, 0xde, 0x55, + 0x00, 0x00, 0x0f, 0x73, 0xe4, 0xff, 0xde, 0x9d, 0xd8, 0xff, 0xf0, + 0x8c, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, + 0xb6, 0xff, 0xff, 0xc0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x6c, 0xda, 0xff, 0xf0, 0x8b, + 0x13, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x95, + 0xfc, 0xff, 0x96, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, + 0x65, 0xe0, 0xff, 0xfc, 0x95, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, 0xe3, 0x49, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x6c, 0xe4, 0xff, 0xea, - 0x89, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xb0, 0xfc, + 0xff, 0xc9, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0xff, 0xff, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0xf2, 0xff, 0xec, + 0x6f, 0x09, 0x00, 0x00, 0x00, 0x03, 0x5d, 0xe4, 0xff, 0xcf, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x90, 0xf7, - 0xfc, 0xb6, 0x1e, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x63, 0xdf, 0xff, 0xf2, 0x80, 0x1a, + 0x80, 0xf0, 0xff, 0xea, 0x5e, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x14, 0x1c, 0x1c, 0x1c, - 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, - 0x1c, 0x1c, 0x1c, 0x1c, 0x14, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xe6, 0xb3, 0x65, 0x1e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x47, 0xdf, 0xff, 0xf7, 0x90, 0x13, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x19, 0x4c, 0x9a, 0xe4, 0xff, + 0xf0, 0x89, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xab, 0xff, 0xff, - 0xff, 0xab, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x54, 0xe6, 0xff, 0x9a, 0x0f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x4a, 0xf0, 0xff, 0xe6, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xe3, - 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, - 0x8b, 0xf2, 0xff, 0xf0, 0x7d, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, + 0x80, 0xf2, 0xff, 0xf0, 0x6a, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x1f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x52, 0xde, 0xff, 0xd8, 0x52, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, - 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xd4, + 0xff, 0xff, 0xad, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x99, + 0xf9, 0xfc, 0xad, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xce, 0xff, 0xff, + 0xbd, 0x2b, 0x00, 0x2b, 0xb5, 0xff, 0xff, 0xc2, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x88, 0xf3, 0xff, 0xe1, + 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe6, + 0x6e, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3b, 0x64, 0x77, 0xa1, 0xda, + 0xfc, 0xf9, 0xd0, 0x81, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x9f, 0xb6, 0xb6, - 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xa6, 0x80, 0x54, - 0x21, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, - 0x9f, 0xb6, 0xb6, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x72, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, - 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xa2, 0x19, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x6e, 0xde, 0xe3, 0xde, 0x6e, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xc4, 0xff, 0xdb, 0x48, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xff, 0xff, 0xc4, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x52, 0xe3, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x21, 0x96, 0xf0, 0xff, 0xe1, 0x6c, 0x0d, 0x00, + 0x00, 0x52, 0xe3, 0xff, 0xef, 0x6c, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x42, 0xd4, 0xff, 0xff, 0xb5, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, - 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, - 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0xa7, 0xfc, 0xf9, 0x8c, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2f, 0xbb, 0xfc, 0xff, 0xd8, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x36, 0xc8, 0xff, 0xf9, 0x8e, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xa8, + 0xfb, 0xff, 0xd8, 0x4d, 0x03, 0x00, 0x03, 0x38, 0xd3, 0xff, 0xfb, + 0x9a, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, - 0x1b, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, - 0x16, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x06, 0x1b, 0x1f, 0x1f, 0x10, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x29, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, - 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x3b, - 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1e, 0x4d, 0x52, 0x4d, 0x1e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, 0xe3, 0x49, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x9a, 0xf5, 0xff, - 0xda, 0x5a, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, + 0xb9, 0xff, 0xff, 0xb8, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, + 0xe0, 0xff, 0xfb, 0xe9, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe4, 0xf9, + 0xff, 0xff, 0xe5, 0xba, 0x72, 0x29, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xe7, 0xb7, 0xad, 0xad, 0xad, + 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0x56, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x91, 0xff, + 0xff, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xc2, 0xff, + 0xff, 0x91, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, 0xff, 0xda, 0x5a, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0xa7, 0xfc, 0xff, 0xd0, 0x44, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x8c, 0xf5, 0xff, 0xf6, 0x86, 0x0c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x73, 0xf0, 0xff, 0xe0, 0x44, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0x7f, 0xf1, 0xff, 0xf5, 0x86, 0x0c, 0x00, 0x00, 0x00, 0x00, + 0x77, 0xee, 0xff, 0xea, 0x65, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x66, 0xea, 0xff, 0xf3, 0x79, 0x0a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x33, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xda, 0x83, 0x24, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x61, 0xee, 0xff, 0xbd, 0x11, 0x00, 0x00, 0x00, 0x00, 0x03, + 0x6b, 0xf5, 0xff, 0xef, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, 0xff, + 0xff, 0xcd, 0x51, 0x04, 0x00, 0x00, 0x03, 0x65, 0xea, 0xff, 0xea, + 0x73, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0xb6, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, + 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x49, 0xe1, 0xff, 0xff, 0xc0, 0x30, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xb0, + 0xfc, 0xfc, 0xa7, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x4f, 0xd8, 0xff, 0xf9, 0xb2, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0xa1, 0xff, 0xff, 0xc0, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0xa2, 0xfc, 0xff, 0xcf, + 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xef, 0xa4, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x86, 0xab, 0xde, 0xf9, 0xe6, 0xa2, + 0x52, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, + 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, + 0xff, 0xea, 0xbf, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, + 0xb6, 0xb6, 0xb6, 0xb6, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0xc0, 0xff, 0xe3, 0x3f, 0x00, 0x00, + 0x00, 0x00, 0x19, 0xa1, 0xff, 0xff, 0xc7, 0x30, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, + 0xe3, 0xff, 0xff, 0xff, 0xfc, 0xcd, 0x48, 0x06, 0x00, 0x27, 0xb6, + 0xff, 0xfc, 0xa2, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, + 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xad, 0xff, 0xff, + 0xe4, 0x5d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x4f, 0xd4, 0xff, 0xf0, 0x80, 0x0d, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xba, 0xfc, 0xff, 0xc2, 0x3d, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0xd4, 0xff, 0xf7, + 0x90, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, + 0xcf, 0xff, 0xfc, 0xb6, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, + 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x19, 0x4c, + 0x9a, 0xe4, 0xfc, 0xe3, 0x89, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0xff, 0xff, 0xbe, 0x37, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, + 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x0e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x7b, 0xfc, 0xfc, + 0x7b, 0x08, 0x00, 0x00, 0x00, 0x42, 0xd5, 0xff, 0xfc, 0x89, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x52, 0xe3, 0xff, 0xf7, 0xea, 0xfc, 0xff, 0xcd, 0x54, + 0x0f, 0x80, 0xf2, 0xff, 0xd8, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0xa4, + 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, + 0x49, 0x49, 0x7e, 0xeb, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x80, + 0xf0, 0xff, 0xfc, 0x9a, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x70, 0xea, 0xff, 0xd8, 0x4f, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x90, 0xf7, 0xff, + 0xea, 0x58, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0x68, 0xe4, 0xff, 0xe4, 0x67, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x80, 0x80, 0x66, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x6f, 0xec, 0xff, 0xf9, 0x97, 0x0f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x13, 0x6c, 0xde, 0xff, 0xf0, 0x6a, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7b, 0xb6, 0xb6, 0x5b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0xe3, 0xff, 0xb5, 0x26, 0x00, 0x00, 0x03, 0x76, 0xf6, 0xff, + 0xe3, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, 0xe6, 0x89, 0xbf, + 0xfc, 0xff, 0xc9, 0x7d, 0xd8, 0xff, 0xf2, 0x80, 0x0d, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, + 0xff, 0xff, 0xf1, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, + 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xeb, 0xfc, 0xff, 0xe3, 0x52, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x4f, 0xd8, 0xff, 0xff, 0xc9, 0x3f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x8f, + 0xf9, 0xfc, 0xb0, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x67, + 0xe4, 0xff, 0xec, 0x82, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x15, 0x8b, 0xf2, 0xff, 0xcf, 0x3f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x33, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0xa2, 0xfc, 0xff, 0xea, + 0x5e, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x74, 0xea, 0xff, + 0xc3, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x1c, 0x1c, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, + 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xb5, 0xff, 0xe3, 0x54, 0x00, 0x00, 0x19, + 0xab, 0xff, 0xff, 0xb5, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, + 0xe3, 0x4c, 0x40, 0xb7, 0xfc, 0xfc, 0xf2, 0xfc, 0xfc, 0xb0, 0x27, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0xb6, 0xff, 0xff, 0xf1, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, + 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xeb, 0xfc, 0xff, + 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x27, 0xb0, 0xfc, 0xff, 0xdf, 0x5e, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x2b, 0xc2, 0xfc, 0xf2, 0x80, 0x0d, 0x00, 0x00, 0x00, + 0x03, 0x45, 0xcf, 0xff, 0xfc, 0xa2, 0x1e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xb0, 0xfc, 0xfc, + 0xa2, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, + 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, + 0xcf, 0xff, 0xff, 0xc9, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x29, 0xbb, 0xff, 0xf6, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0xff, 0xff, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0xea, 0xff, 0xc8, 0x36, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xf9, 0xfc, 0x89, + 0x08, 0x00, 0x42, 0xd9, 0xff, 0xfc, 0x7b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x52, 0xe3, 0xff, 0xe3, 0x49, 0x03, 0x32, 0xb7, 0xf9, 0xff, 0xff, + 0xde, 0x52, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0xa4, 0x49, 0x49, + 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, + 0x7e, 0xeb, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0xbd, 0xcc, 0xcc, 0x77, + 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x5d, 0xbf, 0xcc, 0xa0, 0x29, + 0x00, 0x00, 0x00, 0x0f, 0x79, 0xc8, 0xcc, 0xb4, 0x41, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0x53, 0xbf, 0xcc, 0xb7, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, + 0xcc, 0xcc, 0xa3, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x09, 0x79, 0xf1, 0xff, 0xfb, 0x9a, 0x15, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, + 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, + 0xd0, 0xff, 0xb8, 0x22, 0x00, 0x6e, 0xf6, 0xff, 0xe0, 0x3d, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x38, + 0xb5, 0xff, 0xff, 0xd5, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1f, + 0x1f, 0x1f, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x1c, + 0x1f, 0x1c, 0x09, 0x00, 0x00, 0x00, 0x04, 0x16, 0x1f, 0x1f, 0x16, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x09, 0x1c, 0x1f, 0x1f, 0x11, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x10, 0x1f, 0x1f, 0x19, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xa3, 0xff, 0xff, 0xea, + 0x66, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xc3, 0xff, 0xf9, 0x75, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x8a, 0xff, 0xde, 0x44, 0x13, 0xa4, 0xff, 0xff, + 0xa7, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, 0xe3, 0x49, + 0x00, 0x00, 0x00, 0x3d, 0xdc, 0xff, 0xfc, 0xb2, 0x27, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, + 0xb6, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x16, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x5c, + 0xdc, 0xff, 0xff, 0xbd, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x7f, 0xf1, + 0xff, 0xe0, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, + 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0xf9, 0xf3, 0x68, 0x2a, + 0xc4, 0xff, 0xf9, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xe3, + 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x06, 0x65, 0xda, 0xff, 0xf3, + 0x7f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, + 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x91, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0xe8, 0xff, 0xff, 0xf9, 0x86, 0x09, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, + 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, + 0x79, 0xea, 0xff, 0xfb, 0x8e, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0xcf, + 0xff, 0x9e, 0x6a, 0xec, 0xff, 0xcf, 0x39, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x52, 0xe3, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x5a, 0xda, 0xff, 0xea, 0x76, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x1c, 0x1c, 0x16, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x1c, + 0x1c, 0x14, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x14, 0x1c, 0x1c, 0x10, 0x00, 0x00, + 0x00, 0x08, 0x19, 0x1c, 0x19, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1f, 0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0, + 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, + 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x29, 0x54, 0x9a, 0xe4, 0xff, 0xf9, 0xb7, 0x2b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1a, 0x70, 0x80, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x09, 0x9a, 0xfc, 0xc6, 0xa8, 0xfc, 0xfc, 0x9a, 0x0f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, 0xe3, 0x49, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0d, 0x69, 0xde, 0xff, 0xde, 0x76, 0x15, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, + 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, + 0xb6, 0xb6, 0x91, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1d, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, - 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x23, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x5b, 0xb6, 0xb6, 0x81, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x9b, 0xb6, 0xb0, + 0x42, 0x00, 0x00, 0x00, 0x34, 0xa2, 0xb6, 0xa2, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x16, 0x81, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, + 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, + 0xb6, 0xb6, 0x81, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x33, 0xe0, 0xff, 0xef, 0xa4, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x9e, 0xc3, 0xe6, 0xfc, 0xff, 0xec, 0xa2, 0x32, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xff, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xda, 0x8f, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x5b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xde, 0xf2, 0xea, 0xff, 0xde, + 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, 0xe3, - 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x84, 0xf5, 0xff, 0xda, 0x5a, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x6c, 0xe4, 0xff, + 0xea, 0x89, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xad, 0xff, 0xf6, - 0x79, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x90, + 0xf7, 0xfc, 0xb6, 0x1e, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, - 0xcc, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x8f, - 0x8f, 0x66, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x14, 0x1c, 0x1c, + 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, + 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x14, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xe6, 0xb3, 0x65, + 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, + 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xab, 0xff, + 0xff, 0xff, 0xab, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0xa0, 0xf6, 0xff, 0xcd, 0x48, 0x03, + 0x13, 0x8b, 0xf2, 0xff, 0xf0, 0x7d, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, - 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x7c, - 0xf3, 0xff, 0xb8, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, + 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x52, 0xde, 0xff, 0xd8, 0x52, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xad, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x16, 0x1f, - 0x1c, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x16, 0x1f, 0x1f, 0x1f, 0x1c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x9f, 0xb6, + 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xa6, 0x80, + 0x54, 0x21, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x25, 0x9f, 0xb6, 0xb6, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x72, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, + 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xa2, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x6e, 0xde, 0xe3, 0xde, 0x6e, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x38, 0x9a, 0xad, 0x9a, 0x32, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x8f, 0xad, - 0xad, 0x7b, 0x18, 0x00, 0x00, 0x00, 0x13, 0x7b, 0xad, 0xad, 0x56, + 0x00, 0x00, 0x52, 0xe3, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x21, 0x96, 0xf0, 0xff, 0xe1, 0x6c, 0x0d, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x32, 0x9a, 0xad, 0x9a, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x49, 0xd4, 0xff, 0xec, 0x65, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0xa7, 0xfc, 0xf9, 0x8c, 0x10, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x8f, 0xff, 0xff, 0xea, 0xbe, 0xb6, 0xb6, 0xb6, 0xb6, - 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0x7b, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x16, 0x81, 0xb6, 0xa2, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x8e, 0xb6, 0xb6, 0xb6, 0xa2, - 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x80, - 0x70, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x4f, - 0x80, 0x7c, 0x45, 0x07, 0x00, 0x00, 0x0e, 0x5b, 0x80, 0x72, 0x25, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x14, 0x1c, 0x1c, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, - 0x80, 0x40, 0x00, 0x00, 0x00, 0x09, 0x19, 0x1c, 0x19, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x14, 0x1c, 0x1c, 0x19, 0x08, 0x00, 0x00, 0x00, 0x03, 0x14, - 0x1c, 0x1c, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x19, 0x1c, 0x19, 0x09, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x1b, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x16, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x06, 0x1b, 0x1f, 0x1f, 0x10, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x29, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, + 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, + 0x3b, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1e, 0x4d, 0x52, 0x4d, 0x1e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, 0xe3, 0x49, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x9a, 0xf5, + 0xff, 0xda, 0x5a, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x15, 0xad, 0xff, 0xfc, 0xa2, 0x1b, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0xea, 0xff, 0xc8, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xbe, 0x34, 0x1c, - 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x13, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0xb6, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x72, 0xec, 0xff, - 0xff, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3f, 0xcf, 0xff, 0xd8, 0x4f, 0x03, 0x00, 0x00, 0x1c, 0xb6, - 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, - 0x98, 0xb6, 0xb6, 0x6e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x33, 0x33, 0x33, 0x33, 0x33, + 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, + 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x18, 0x84, 0xf5, 0xff, 0xda, 0x5a, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, + 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x6a, 0xf0, 0xff, 0xd8, 0x49, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xad, 0xff, + 0xf6, 0x79, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, - 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, - 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, - 0xc9, 0xff, 0xfa, 0xfa, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1e, 0xa2, 0xfc, 0xf2, 0x80, 0x0d, 0x00, 0x00, - 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x64, 0xf1, 0xff, 0xff, 0xc6, 0x33, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, + 0x8f, 0x8f, 0x66, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x52, 0xe3, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xa0, 0xf6, 0xff, 0xcd, 0x48, + 0x03, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, - 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0xc3, 0xff, - 0xf6, 0x84, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x7c, 0xf3, 0xff, 0xb8, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xad, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x16, + 0x1f, 0x1c, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x16, 0x1f, 0x1f, 0x1f, 0x1c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xad, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x0b, 0x61, - 0x70, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xb6, - 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x06, 0x8d, 0xf9, 0xff, 0xc3, 0xd1, 0xff, 0xe3, 0x52, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xe0, 0x49, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x7d, 0xec, 0xfc, 0xb0, 0x27, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x13, 0xa0, 0xff, 0xf8, 0xf9, 0xef, 0x6a, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x34, 0x49, 0x49, 0x29, 0x00, - 0x00, 0x00, 0x15, 0x41, 0x49, 0x34, 0x08, 0x00, 0x00, 0x09, 0x34, - 0x49, 0x41, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x34, - 0x49, 0x49, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x38, 0x9a, 0xad, 0x9a, 0x32, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x8f, + 0xad, 0xad, 0x7b, 0x18, 0x00, 0x00, 0x00, 0x13, 0x7b, 0xad, 0xad, + 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x32, 0x9a, 0xad, 0x9a, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, - 0xff, 0xd1, 0x37, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x10, + 0xff, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, - 0x90, 0xf6, 0xff, 0xb8, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x49, 0xd4, 0xff, 0xec, 0x65, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xea, 0xbe, 0xb6, 0xb6, 0xb6, + 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0xb6, 0x1c, 0x00, - 0x00, 0x06, 0xa1, 0xef, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x36, 0xda, 0xff, 0xec, 0x7b, 0xb6, 0xff, - 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, - 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0xdf, 0xff, - 0xd8, 0x4f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, - 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xd9, 0xf7, 0xb4, - 0xc9, 0xff, 0xab, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xa2, 0xe3, - 0xe3, 0x80, 0x00, 0x00, 0x00, 0x41, 0xcb, 0xe3, 0xa2, 0x19, 0x00, - 0x00, 0x1c, 0xa2, 0xe3, 0xcb, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x19, 0xa2, 0xe3, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x03, 0x14, - 0x1c, 0x1c, 0x09, 0x00, 0x09, 0x1e, 0x3c, 0x49, 0x3c, 0x19, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0xff, 0xff, 0xee, 0xb7, 0xad, 0xad, 0xad, 0xad, 0xad, - 0xad, 0xad, 0x92, 0x69, 0x39, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x16, 0x81, 0xb6, 0xa2, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x8e, 0xb6, 0xb6, 0xb6, + 0xa2, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, + 0x80, 0x70, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x4f, 0x80, 0x7c, 0x45, 0x07, 0x00, 0x00, 0x0e, 0x5b, 0x80, 0x72, + 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x14, 0x1c, + 0x1c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, + 0x80, 0x80, 0x40, 0x00, 0x00, 0x00, 0x09, 0x19, 0x1c, 0x19, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x14, 0x1c, 0x1c, 0x19, 0x08, 0x00, 0x00, 0x00, 0x03, + 0x14, 0x1c, 0x1c, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x19, 0x1c, 0x19, 0x09, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0xff, 0xff, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x46, 0xda, 0xff, 0xe8, 0x5d, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x15, 0xad, 0xff, 0xfc, 0xa2, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, - 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x6b, 0xf5, 0x8b, 0x0c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xbe, 0x34, + 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, + 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, + 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x83, 0xfb, 0xff, 0xb9, - 0x41, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x23, - 0xad, 0xff, 0xf9, 0x8c, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, - 0xf6, 0xe7, 0x60, 0x96, 0xff, 0xd5, 0x3b, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0xb6, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, - 0xb6, 0x1c, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, - 0x00, 0x13, 0x7b, 0xad, 0xad, 0x38, 0x18, 0x77, 0xac, 0xd1, 0xe0, - 0xd1, 0xa1, 0x5d, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xcf, 0x89, 0x2b, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xdf, 0x9d, - 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0xbc, 0xf9, 0xff, 0xc3, 0x3c, 0x09, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, - 0xff, 0xf3, 0xb3, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, - 0x8f, 0x8f, 0x8f, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, - 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xad, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x40, 0xd6, 0xbd, - 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, - 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xcd, - 0xff, 0xf5, 0x79, 0x21, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xf1, 0x7f, 0x0f, 0x00, - 0x00, 0x0f, 0x7e, 0xf5, 0xff, 0xc9, 0x37, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x15, 0xa3, 0xff, 0xca, 0x36, 0x6d, 0xff, 0xf3, 0x6e, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, - 0x49, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, - 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, - 0x52, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x8a, 0x9d, 0xf5, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xe8, 0x90, 0x18, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xee, - 0xb7, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xc3, 0xe6, 0xf9, 0xff, - 0xf9, 0xc2, 0x48, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xf5, 0xcf, 0x8f, 0x3c, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x49, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, - 0x17, 0xaa, 0xf1, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x72, 0xec, + 0xff, 0xff, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3f, 0xcf, 0xff, 0xd8, 0x4f, 0x03, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x09, 0x86, 0xf9, 0xff, 0xbc, 0x2c, 0x1c, 0xb6, 0xff, 0xe3, 0x52, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, - 0xea, 0x76, 0x0f, 0x03, 0x58, 0xe0, 0xff, 0xe7, 0x66, 0x06, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x47, 0xdd, 0xff, 0x97, 0x0e, 0x36, 0xe2, - 0xff, 0xb0, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x8f, - 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x1f, - 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, - 0xf3, 0xef, 0xb0, 0x81, 0x70, 0x8e, 0xca, 0xf6, 0xff, 0xf9, 0x9a, - 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0xff, 0xff, 0xd1, 0x37, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x30, - 0x54, 0x7b, 0xc8, 0xf7, 0xfc, 0xbf, 0x40, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x80, 0xff, 0xff, 0xea, 0xbf, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, - 0xb6, 0xc3, 0xde, 0xf6, 0xff, 0xf7, 0xca, 0x67, 0x13, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xf7, 0xcd, 0xb6, 0xb6, - 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0x5b, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0xb6, 0x1c, - 0x00, 0x00, 0x00, 0x32, 0xa2, 0xff, 0x9b, 0x0e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x35, 0xca, 0xff, 0xf0, 0x70, 0x08, 0x1c, 0xb6, - 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xad, 0xff, 0xff, 0xff, 0xde, 0x69, 0x34, 0xb0, 0xfc, 0xfc, 0x97, - 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, - 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x03, 0x76, 0xf7, 0xf1, 0x64, - 0x00, 0x10, 0xad, 0xff, 0xd9, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, - 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1c, - 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x1c, - 0xb6, 0xff, 0xff, 0xea, 0x89, 0x22, 0x08, 0x00, 0x0e, 0x38, 0x9b, - 0xf0, 0xff, 0xf0, 0x7b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x36, 0x9b, 0xf2, 0xfc, 0xba, 0x30, - 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xbe, 0x37, 0x1c, 0x1c, - 0x1c, 0x1c, 0x1c, 0x1c, 0x29, 0x44, 0x6e, 0xa3, 0xe4, 0xff, 0xe4, - 0x80, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe6, - 0x65, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, - 0x1c, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, - 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x9a, 0xec, 0xff, 0xb6, 0x1c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0xf7, 0xff, 0xac, 0x20, - 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0xff, 0xff, 0xd8, 0xb4, 0xf2, - 0xff, 0xbe, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x21, 0xb3, - 0xff, 0xcc, 0x33, 0x00, 0x00, 0x71, 0xf1, 0xf7, 0x80, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x49, 0xe3, - 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, - 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x95, 0x15, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0x8f, 0xf0, 0xff, 0xca, 0x35, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x1f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xb6, - 0xff, 0xf7, 0x80, 0x09, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, - 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, - 0x6c, 0xde, 0xff, 0xe4, 0x5d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x49, - 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, - 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xad, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0xad, 0xff, - 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, - 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0xca, 0xff, - 0xf0, 0x55, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0xea, 0xf2, - 0xfc, 0xf9, 0xff, 0xd4, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, - 0x00, 0x54, 0xe6, 0xff, 0x9b, 0x0e, 0x00, 0x00, 0x39, 0xcc, 0xff, - 0xbd, 0x26, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x8f, 0x00, 0x00, - 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x1f, 0xb6, 0xff, - 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, - 0xff, 0x52, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x59, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xac, 0xff, 0xf7, 0x80, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, - 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x6a, 0xf1, 0xff, 0xbd, 0x2a, 0x00, 0x00, 0x00, 0x80, - 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0d, 0x74, 0xec, 0xff, 0xbd, 0x30, 0x00, 0x00, - 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, - 0x00, 0x9a, 0xe3, 0xe3, 0xa2, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x80, 0xf7, 0xfc, 0xac, 0x15, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, - 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, - 0xff, 0xa0, 0x96, 0xf2, 0xff, 0xf9, 0x8f, 0x0b, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, - 0x00, 0x00, 0x00, 0x09, 0x89, 0xfc, 0xec, 0x5f, 0x00, 0x00, 0x00, - 0x10, 0x95, 0xfc, 0xe6, 0x54, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, - 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, - 0x8f, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, - 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, - 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, - 0xff, 0xff, 0xb0, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0xff, 0xff, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xde, 0x4d, 0x00, - 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0xbd, 0xff, 0xf1, - 0x71, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0xb6, - 0x1c, 0x00, 0x00, 0x00, 0x32, 0x49, 0x49, 0x34, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x35, 0xca, 0xff, 0xde, 0x55, 0x00, 0x00, 0x00, 0x1c, - 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xad, 0xff, 0xff, 0x80, 0x21, 0x96, 0xf2, 0xfc, 0xcd, 0x5a, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, - 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x2a, 0xbd, 0xff, 0xbd, 0x26, - 0x00, 0x00, 0x00, 0x00, 0x54, 0xe6, 0xfc, 0x89, 0x08, 0x00, 0x00, - 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0xb6, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, - 0x1c, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, - 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x39, 0xe5, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x1f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, - 0xe3, 0x52, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, - 0x91, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, - 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, - 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, - 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x79, 0xf6, 0xff, 0xa3, 0x18, 0x00, - 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x25, 0xa5, - 0xf9, 0xff, 0xd6, 0x4a, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x67, 0xea, - 0xff, 0x91, 0x09, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xc4, 0xff, 0xc3, - 0x2c, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x49, - 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, - 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, 0xff, 0xe3, 0x49, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x1f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0xca, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, - 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x06, 0x8a, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, - 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xad, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xb6, - 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x2c, 0xc3, 0xff, 0xe3, - 0x52, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, - 0x00, 0x00, 0x25, 0xa5, 0xf9, 0xff, 0xd6, 0x5a, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, - 0x0e, 0xaa, 0xff, 0xec, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, - 0x91, 0xff, 0xef, 0x61, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x91, 0xff, 0xec, 0x66, 0x00, - 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x1f, 0xb6, - 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, - 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, 0xff, - 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, - 0xff, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x5b, 0xec, 0xff, 0xca, 0x36, 0x00, 0x00, 0x00, - 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb0, 0xff, 0xf6, 0x7b, 0x00, - 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0xb6, 0x1c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x04, 0x6e, - 0xf3, 0xff, 0xad, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, - 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, - 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x32, 0xae, 0xf9, 0xff, 0xcd, - 0x48, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, - 0x49, 0x00, 0x00, 0x30, 0xdc, 0xff, 0xc3, 0x2c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x5c, 0xea, 0xff, 0x91, 0x0a, 0x00, 0x00, 0x80, - 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, - 0xe3, 0x52, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1c, 0x00, - 0x00, 0x1f, 0xb6, 0xff, 0xe7, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x1c, 0xb6, - 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1f, 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0xff, 0xff, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x9a, 0xfc, 0xfc, 0x95, 0x10, - 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x52, 0xde, 0xff, - 0xd3, 0x47, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, - 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, - 0x00, 0x25, 0xb3, 0xff, 0xec, 0x65, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x03, 0x32, - 0xa5, 0xf9, 0xfc, 0xbf, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x5e, 0xf9, 0xfc, 0x89, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0xbd, 0xff, 0xbd, 0x2a, + 0x2b, 0x98, 0xb6, 0xb6, 0x6e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, - 0xb6, 0x1c, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xf7, 0x70, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, - 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x39, 0xe5, 0xff, 0xd6, 0x3c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x1f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x6f, 0xe4, 0xff, - 0xd8, 0x49, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x40, - 0xbf, 0xfc, 0xf2, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x6a, 0xf0, 0xff, 0xd8, + 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, - 0x49, 0x00, 0x00, 0x03, 0x72, 0xec, 0xff, 0xb3, 0x21, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x25, 0xb6, 0xfc, 0xfc, 0xbf, 0x40, 0x03, 0x00, - 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x1a, 0xa7, 0xff, - 0xe6, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x89, - 0xfc, 0xec, 0x6b, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, - 0x49, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xff, - 0xa0, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xc3, 0xff, 0xff, - 0x52, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xff, 0xff, 0xb5, 0x1e, + 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x36, 0xc9, 0xff, 0xfa, 0xfa, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1e, 0xa2, 0xfc, 0xf2, 0x80, 0x0d, 0x00, + 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x64, 0xf1, 0xff, 0xff, 0xc6, 0x33, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, - 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x25, 0x47, 0x99, - 0xe4, 0xff, 0xde, 0x69, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, - 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x18, - 0x3b, 0x6e, 0xc5, 0xfc, 0xf7, 0xab, 0x27, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x49, 0xe3, 0xff, 0xe6, 0x65, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, - 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x19, 0x08, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, + 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0xc3, + 0xff, 0xf6, 0x84, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, - 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x25, 0xc9, 0xff, 0xec, 0x65, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xa0, 0xb6, 0xb3, - 0x76, 0x15, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, - 0x52, 0xe5, 0xff, 0xbd, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x54, 0xe6, 0xff, 0xad, 0x1a, 0x00, 0x80, 0xff, 0xff, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xe3, 0x52, - 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x1f, - 0xb6, 0xff, 0xff, 0xde, 0x52, 0x03, 0x00, 0x00, 0x00, 0x03, 0x5a, - 0xe6, 0xff, 0xe5, 0x39, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, - 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x9f, 0xff, - 0xfc, 0x89, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0xff, 0xff, 0xe5, 0x8f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x97, - 0xbf, 0xdd, 0xf9, 0xfc, 0xd8, 0x69, 0x0d, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0xff, 0xff, 0xda, 0x8f, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x8f, 0xaf, 0xd5, 0xf3, 0xff, 0xec, 0x98, 0x30, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xf7, 0xcd, 0xb6, 0xb6, - 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xa2, - 0x34, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x0b, + 0x61, 0x70, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, + 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x8d, 0xf9, 0xff, 0xc3, 0xd1, 0xff, 0xe3, 0x52, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xe0, + 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x7d, 0xec, 0xfc, 0xb0, + 0x27, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xa0, 0xff, 0xf8, 0xf9, 0xef, + 0x6a, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x34, 0x49, 0x49, 0x29, + 0x00, 0x00, 0x00, 0x15, 0x41, 0x49, 0x34, 0x08, 0x00, 0x00, 0x09, + 0x34, 0x49, 0x41, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x34, 0x49, 0x49, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0xff, 0xff, 0xd1, 0x37, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x13, 0x90, 0xf6, 0xff, 0xb8, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0xb6, 0x1c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x06, 0x72, 0xf9, - 0xff, 0xb3, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, + 0x00, 0x00, 0x06, 0xa1, 0xef, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0xda, 0xff, 0xec, 0x7b, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x14, 0x1c, 0x1c, 0x19, 0x08, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, - 0xe3, 0x49, 0x00, 0x8e, 0xff, 0xf6, 0x80, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xb3, 0xff, 0xe5, 0x52, 0x00, - 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1c, - 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xfc, 0xf6, 0xbf, 0x61, 0x30, 0x1c, - 0x29, 0x5a, 0xbf, 0xfc, 0xfc, 0xa7, 0x10, 0x00, 0x00, 0x00, 0x1c, - 0xb6, 0xff, 0xff, 0x88, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, - 0x70, 0xea, 0xff, 0xde, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xfc, 0xe3, 0xad, 0x4f, 0x0d, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xe3, 0xb3, 0x65, 0x1b, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, + 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0xdf, + 0xff, 0xd8, 0x4f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, + 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xd9, 0xf7, + 0xb4, 0xc9, 0xff, 0xab, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xa2, + 0xe3, 0xe3, 0x80, 0x00, 0x00, 0x00, 0x41, 0xcb, 0xe3, 0xa2, 0x19, + 0x00, 0x00, 0x1c, 0xa2, 0xe3, 0xcb, 0x41, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x19, 0xa2, 0xe3, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x03, + 0x14, 0x1c, 0x1c, 0x09, 0x00, 0x09, 0x1e, 0x3c, 0x49, 0x3c, 0x19, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xff, 0xff, 0xee, 0xb7, 0xad, 0xad, 0xad, 0xad, + 0xad, 0xad, 0xad, 0x92, 0x69, 0x39, 0x0f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x46, 0xda, 0xff, 0xe8, 0x5d, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, + 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, - 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x6b, 0xf5, 0x8b, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, - 0x36, 0xc9, 0xff, 0xec, 0x65, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x1a, 0xc6, 0xff, 0xd5, 0x42, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x76, 0xf7, - 0xff, 0x8e, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x49, 0xe3, - 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xeb, 0xad, 0xd5, - 0xe9, 0xca, 0xb6, 0xc3, 0xe6, 0xfc, 0xff, 0xd8, 0x52, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0xea, 0x8f, 0x30, 0x0e, 0x00, - 0x08, 0x26, 0x74, 0xda, 0xff, 0xfc, 0x9a, 0x13, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xb1, 0x88, 0x58, 0x25, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xb1, 0x83, 0x58, - 0x25, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, - 0xb6, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xb6, 0x3b, 0x00, 0x00, 0x00, 0x8f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x83, 0xfb, 0xff, + 0xb9, 0x41, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, + 0x23, 0xad, 0xff, 0xf9, 0x8c, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6e, 0xf6, 0xe7, 0x60, 0x96, 0xff, 0xd5, 0x3b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x49, 0xe3, + 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, + 0x00, 0x00, 0x13, 0x7b, 0xad, 0xad, 0x38, 0x18, 0x77, 0xac, 0xd1, + 0xe0, 0xd1, 0xa1, 0x5d, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xcf, 0x89, 0x2b, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xdf, + 0x9d, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0xbc, 0xf9, 0xff, 0xc3, 0x3c, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, + 0xe3, 0xff, 0xf3, 0xb3, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, + 0x8f, 0x8f, 0x8f, 0x8f, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xad, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, - 0xe3, 0x49, 0x0c, 0x83, 0xf9, 0xff, 0xb9, 0x25, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x4e, 0xee, 0xff, - 0xa7, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x47, 0xdd, 0xff, 0xc3, 0x17, 0x80, 0xff, 0xff, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xe3, 0x52, 0x00, 0x00, + 0x00, 0xad, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x40, 0xd6, + 0xbd, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, + 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, + 0xcd, 0xff, 0xf5, 0x79, 0x21, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xf1, 0x7f, 0x0f, + 0x00, 0x00, 0x0f, 0x7e, 0xf5, 0xff, 0xc9, 0x37, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x15, 0xa3, 0xff, 0xca, 0x36, 0x6d, 0xff, 0xf3, 0x6e, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x1f, 0xb6, 0xff, - 0xe3, 0x58, 0x58, 0xbb, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x70, - 0x10, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0xf3, 0xf5, - 0xc3, 0x8e, 0x70, 0x81, 0xb5, 0xea, 0xff, 0xff, 0xc7, 0x41, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1f, 0x1f, - 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x11, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, - 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, - 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x09, 0x1c, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, - 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1c, 0x09, 0x00, + 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, + 0xff, 0x52, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x8a, 0x9d, + 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe8, 0x90, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, + 0xee, 0xb7, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xc3, 0xe6, 0xf9, + 0xff, 0xf9, 0xc2, 0x48, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf5, 0xcf, 0x8f, 0x3c, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x46, 0xd6, 0xff, 0xf1, 0x6e, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, + 0x00, 0x17, 0xaa, 0xf1, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x09, 0x86, 0xf9, 0xff, 0xbc, 0x2c, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, - 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x56, - 0x8b, 0xff, 0xf1, 0x5d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x15, 0xa3, 0xff, 0xee, 0x4e, 0x80, 0xff, - 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xe3, - 0x52, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, - 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x03, 0x1f, 0x48, 0x74, 0x8f, 0x8f, - 0x71, 0x35, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, - 0xff, 0x8a, 0x96, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, - 0x38, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xea, 0x76, 0x0f, 0x03, 0x58, 0xe0, 0xff, 0xe7, 0x66, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0xdd, 0xff, 0x97, 0x0e, 0x36, + 0xe2, 0xff, 0xb0, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, + 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, + 0x8f, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, + 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, + 0xff, 0xf3, 0xef, 0xb0, 0x81, 0x70, 0x8e, 0xca, 0xf6, 0xff, 0xf9, + 0x9a, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xff, 0xff, 0xd1, 0x37, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, + 0x30, 0x54, 0x7b, 0xc8, 0xf7, 0xfc, 0xbf, 0x40, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xff, 0xff, 0xea, 0xbf, 0xb6, 0xb6, 0xb6, 0xb6, + 0xb6, 0xb6, 0xc3, 0xde, 0xf6, 0xff, 0xf7, 0xca, 0x67, 0x13, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xf7, 0xcd, 0xb6, + 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0xb6, - 0x1c, 0x00, 0x00, 0x00, 0x38, 0x52, 0x52, 0x3b, 0x09, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x52, 0x86, 0xf9, 0xff, - 0xbc, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, + 0x1c, 0x00, 0x00, 0x00, 0x32, 0xa2, 0xff, 0x9b, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x35, 0xca, 0xff, 0xf0, 0x70, 0x08, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, - 0xff, 0xe3, 0x6b, 0xb3, 0xff, 0xcf, 0x23, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0xf5, 0xff, - 0x77, 0x83, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, + 0x00, 0xad, 0xff, 0xff, 0xff, 0xde, 0x69, 0x34, 0xb0, 0xfc, 0xfc, + 0x97, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, + 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x03, 0x76, 0xf7, 0xf1, + 0x64, 0x00, 0x10, 0xad, 0xff, 0xd9, 0x42, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, + 0xb6, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x11, 0x55, 0x8e, 0xc6, 0xe0, 0xe0, - 0xc6, 0x92, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, + 0x1c, 0xb6, 0xff, 0xff, 0xea, 0x89, 0x22, 0x08, 0x00, 0x0e, 0x38, + 0x9b, 0xf0, 0xff, 0xf0, 0x7b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x1f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x36, 0x9b, 0xf2, 0xfc, 0xba, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xbe, 0x37, 0x1c, + 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x29, 0x44, 0x6e, 0xa3, 0xe4, 0xff, + 0xe4, 0x80, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, + 0xe6, 0x65, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, + 0x1c, 0x1c, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, - 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0xb6, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x7f, - 0xcf, 0xff, 0xf5, 0x69, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x90, 0xd9, 0xff, 0x99, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3b, 0xcf, 0xff, 0xa7, 0x9b, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x70, 0xe0, 0xc8, 0x48, 0x00, 0x00, 0x00, 0x49, + 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x9a, 0xec, 0xff, 0xb6, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0xf7, 0xff, 0xac, + 0x20, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0xff, 0xff, 0xd8, 0xb4, + 0xf2, 0xff, 0xbe, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x21, + 0xb3, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x71, 0xf1, 0xf7, 0x80, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, - 0x1a, 0x33, 0x33, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x14, 0x1c, 0x19, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x19, 0x1c, 0x1c, 0x1c, 0x10, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, + 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x95, 0x15, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x21, 0x8f, 0xf0, 0xff, 0xca, 0x35, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x1f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, + 0xb6, 0xff, 0xf7, 0x80, 0x09, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, + 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x15, 0x6c, 0xde, 0xff, 0xe4, 0x5d, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xb6, - 0xff, 0xeb, 0xbd, 0xf1, 0xff, 0xc3, 0x20, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0xca, + 0xff, 0xf0, 0x55, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0xea, + 0xf2, 0xfc, 0xf9, 0xff, 0xd4, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, + 0x00, 0x00, 0x54, 0xe6, 0xff, 0x9b, 0x0e, 0x00, 0x00, 0x39, 0xcc, + 0xff, 0xbd, 0x26, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x8f, 0x00, + 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x1f, 0xb6, + 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, + 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x59, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xac, 0xff, 0xf7, + 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, + 0xff, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x6a, 0xf1, 0xff, 0xbd, 0x2a, 0x00, 0x00, 0x00, + 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0d, 0x74, 0xec, 0xff, 0xbd, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0xb6, 0x1c, 0x00, + 0x00, 0x00, 0x9a, 0xe3, 0xe3, 0xa2, 0x19, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x80, 0xf7, 0xfc, 0xac, 0x15, 0x00, 0x00, 0x1c, 0xb6, 0xff, + 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, + 0xff, 0xff, 0xa0, 0x96, 0xf2, 0xff, 0xf9, 0x8f, 0x0b, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, + 0x49, 0x00, 0x00, 0x00, 0x09, 0x89, 0xfc, 0xec, 0x5f, 0x00, 0x00, + 0x00, 0x10, 0x95, 0xfc, 0xe6, 0x54, 0x00, 0x00, 0x00, 0x00, 0x80, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, + 0xff, 0x8f, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1c, 0x00, + 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x1c, 0xb6, + 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x64, 0xff, 0xff, 0xb0, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0xff, 0xff, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xde, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0xbd, 0xff, + 0xf1, 0x71, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, + 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x32, 0x49, 0x49, 0x34, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x35, 0xca, 0xff, 0xde, 0x55, 0x00, 0x00, 0x00, + 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x21, 0x96, 0xf2, 0xfc, 0xcd, + 0x5a, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, + 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x2a, 0xbd, 0xff, 0xbd, + 0x26, 0x00, 0x00, 0x00, 0x00, 0x54, 0xe6, 0xfc, 0x89, 0x08, 0x00, + 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0xb6, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, + 0xb6, 0x1c, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, + 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x39, 0xe5, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x1f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, + 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x91, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, + 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, + 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xad, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, + 0x49, 0x00, 0x00, 0x00, 0x00, 0x06, 0x79, 0xf6, 0xff, 0xa3, 0x18, + 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x25, + 0xa5, 0xf9, 0xff, 0xd6, 0x4a, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x67, + 0xea, 0xff, 0x91, 0x09, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xc4, 0xff, + 0xc3, 0x2c, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, + 0x49, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, + 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, + 0x52, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, 0xff, 0xe3, 0x49, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, + 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x30, 0xca, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x80, 0xff, + 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x06, 0x8a, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, + 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, + 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x2c, 0xc3, 0xff, + 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, + 0x80, 0x00, 0x00, 0x25, 0xa5, 0xf9, 0xff, 0xd6, 0x5a, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, + 0x00, 0x0e, 0xaa, 0xff, 0xec, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x91, 0xff, 0xef, 0x61, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x91, 0xff, 0xec, 0x66, + 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x1f, + 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, + 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, + 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, + 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0xff, 0xff, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5b, 0xec, 0xff, 0xca, 0x36, 0x00, 0x00, + 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb0, 0xff, 0xf6, 0x7b, + 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0xb6, 0x1c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x04, + 0x6e, 0xf3, 0xff, 0xad, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, + 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x32, 0xae, 0xf9, 0xff, + 0xcd, 0x48, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, + 0xe3, 0x49, 0x00, 0x00, 0x30, 0xdc, 0xff, 0xc3, 0x2c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5c, 0xea, 0xff, 0x91, 0x0a, 0x00, 0x00, + 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1c, + 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe7, 0x50, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x1c, + 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1f, 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x9a, 0xfc, 0xfc, 0x95, + 0x10, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x52, 0xde, + 0xff, 0xd3, 0x47, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe3, + 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, + 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, + 0x00, 0x00, 0x25, 0xb3, 0xff, 0xec, 0x65, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x03, + 0x32, 0xa5, 0xf9, 0xfc, 0xbf, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x5e, 0xf9, 0xfc, 0x89, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0xbd, 0xff, 0xbd, + 0x2a, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x49, 0xe3, + 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xf7, 0x70, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, + 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x39, 0xe5, 0xff, 0xd6, 0x3c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x1f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x6f, 0xe4, + 0xff, 0xd8, 0x49, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xb6, + 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0x40, 0xbf, 0xfc, 0xf2, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x49, + 0xe3, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, + 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xad, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, + 0xe3, 0x49, 0x00, 0x00, 0x03, 0x72, 0xec, 0xff, 0xb3, 0x21, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x25, 0xb6, 0xfc, 0xfc, 0xbf, 0x40, 0x03, + 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x1a, 0xa7, + 0xff, 0xe6, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x89, 0xfc, 0xec, 0x6b, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xe3, 0x52, 0x00, 0x00, + 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x1f, 0xb6, 0xff, + 0xff, 0xa0, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xc3, 0xff, + 0xff, 0x52, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xff, 0xff, 0xb5, + 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, + 0xcc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x25, 0x47, + 0x99, 0xe4, 0xff, 0xde, 0x69, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x80, + 0xff, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x18, 0x3b, 0x6e, 0xc5, 0xfc, 0xf7, 0xab, 0x27, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x49, 0xe3, 0xff, 0xe6, 0x65, 0x1c, 0x1c, 0x1c, 0x1c, + 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x19, 0x08, 0x00, + 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x25, 0xc9, 0xff, 0xec, + 0x65, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, + 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, + 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xa0, 0xb6, + 0xb3, 0x76, 0x15, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, + 0x00, 0x52, 0xe5, 0xff, 0xbd, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x54, 0xe6, 0xff, 0xad, 0x1a, 0x00, 0x80, 0xff, + 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xe3, + 0x52, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, + 0x1f, 0xb6, 0xff, 0xff, 0xde, 0x52, 0x03, 0x00, 0x00, 0x00, 0x03, + 0x5a, 0xe6, 0xff, 0xe5, 0x39, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, + 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x9f, + 0xff, 0xfc, 0x89, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xff, 0xff, 0xe5, 0x8f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x97, 0xbf, 0xdd, 0xf9, 0xfc, 0xd8, 0x69, 0x0d, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xff, 0xff, 0xda, 0x8f, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x8f, 0xaf, 0xd5, 0xf3, 0xff, 0xec, 0x98, 0x30, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xf7, 0xcd, 0xb6, + 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, + 0xa2, 0x34, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0xb6, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x06, 0x72, + 0xf9, 0xff, 0xb3, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, + 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x14, 0x1c, 0x1c, 0x19, 0x08, 0x00, 0x00, 0x00, 0x1c, 0xb6, + 0xff, 0xe3, 0x49, 0x00, 0x8e, 0xff, 0xf6, 0x80, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xb3, 0xff, 0xe5, 0x52, + 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, + 0x1c, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xfc, 0xf6, 0xbf, 0x61, 0x30, + 0x1c, 0x29, 0x5a, 0xbf, 0xfc, 0xfc, 0xa7, 0x10, 0x00, 0x00, 0x00, + 0x1c, 0xb6, 0xff, 0xff, 0x88, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0d, 0x70, 0xea, 0xff, 0xde, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xe3, 0xad, 0x4f, 0x0d, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xe3, 0xb3, 0x65, + 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, + 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, + 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, + 0x00, 0x36, 0xc9, 0xff, 0xec, 0x65, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x1a, 0xc6, 0xff, 0xd5, 0x42, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x76, + 0xf7, 0xff, 0x8e, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x49, + 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xeb, 0xad, + 0xd5, 0xe9, 0xca, 0xb6, 0xc3, 0xe6, 0xfc, 0xff, 0xd8, 0x52, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0xea, 0x8f, 0x30, 0x0e, + 0x00, 0x08, 0x26, 0x74, 0xda, 0xff, 0xfc, 0x9a, 0x13, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xb1, 0x88, 0x58, 0x25, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xb1, 0x83, + 0x58, 0x25, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3b, 0xb6, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xb6, 0x3b, 0x00, 0x00, 0x00, + 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xad, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xb6, + 0xff, 0xe3, 0x49, 0x0c, 0x83, 0xf9, 0xff, 0xb9, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe6, 0xbf, 0xf6, 0xe5, - 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x13, 0x94, 0xff, 0xd5, 0xc2, 0xff, 0xff, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x49, 0x41, 0x18, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x4e, 0xee, + 0xff, 0xa7, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x47, 0xdd, 0xff, 0xc3, 0x17, 0x80, 0xff, 0xff, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x1f, 0xb6, - 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, + 0xff, 0xe3, 0x58, 0x58, 0xbb, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xdf, + 0x70, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0xf3, + 0xf5, 0xc3, 0x8e, 0x70, 0x81, 0xb5, 0xea, 0xff, 0xff, 0xc7, 0x41, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x09, 0x1c, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1c, 0x09, + 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x27, 0x6e, 0xa6, 0xb6, 0xb0, 0x89, 0x54, 0x1e, 0x00, - 0x48, 0x80, 0x80, 0x40, 0x00, 0x00, 0x00, 0x38, 0x80, 0x80, 0x72, - 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0c, 0x30, 0x68, 0x8f, 0xb0, 0xb6, 0xb6, 0xb6, 0x9e, 0x75, - 0x4f, 0x1c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, - 0x5b, 0x80, 0x72, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x66, 0xb6, 0xb6, 0x81, 0x14, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0xe3, 0xe3, 0xa2, 0x19, 0x00, - 0x00, 0x00, 0x9a, 0xe3, 0xe3, 0xa2, 0x19, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1f, 0xb6, 0xff, 0xfc, 0xf9, 0xff, 0xf0, 0x70, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, + 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x46, 0xd6, 0xff, 0xf1, 0x6e, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xf7, - 0xef, 0xff, 0xad, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xe5, 0xf6, 0xef, - 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1c, 0x00, - 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, - 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, + 0x56, 0x8b, 0xff, 0xf1, 0x5d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0xa3, 0xff, 0xee, 0x4e, 0x80, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, + 0xe3, 0x52, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1c, 0x00, + 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x03, 0x1f, 0x48, 0x74, 0x8f, + 0x8f, 0x71, 0x35, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, + 0xff, 0xff, 0x8a, 0x96, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xc7, 0x38, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0d, 0x4f, 0xb8, 0xf3, 0xff, 0xff, 0xff, 0xfc, - 0xe6, 0xad, 0x41, 0x95, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x70, - 0xff, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x30, 0x86, 0xca, 0xf3, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xf9, 0xe3, 0xad, 0x5d, 0x13, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1c, 0x1c, 0x14, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x49, 0x49, - 0x34, 0x08, 0x00, 0x00, 0x00, 0x32, 0x49, 0x49, 0x34, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xff, 0xff, 0xfc, 0xac, - 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, + 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x38, 0x52, 0x52, 0x3b, 0x09, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x52, 0x86, 0xf9, + 0xff, 0xbc, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0xb6, 0xff, 0xff, 0xff, 0xf9, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, - 0xa7, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, + 0xb6, 0xff, 0xe3, 0x6b, 0xb3, 0xff, 0xcf, 0x23, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0xf5, + 0xff, 0x77, 0x83, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x5a, 0xda, 0xff, 0xff, 0xe4, - 0xab, 0x85, 0x85, 0xab, 0xe1, 0xcd, 0xd2, 0xff, 0xff, 0x80, 0x00, - 0x00, 0x00, 0x70, 0xff, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0d, 0x5a, 0xc0, 0xf6, 0xff, 0xfc, 0xe6, - 0xc3, 0xb6, 0xb6, 0xb6, 0xca, 0xef, 0xff, 0xff, 0xe4, 0x7b, 0x0e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, + 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x11, 0x55, 0x8e, 0xc6, 0xe0, + 0xe0, 0xc6, 0x92, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x81, 0xb6, 0xb6, - 0xb6, 0xaa, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x14, 0x81, 0xb6, 0xa2, 0x3b, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0xe3, 0xe3, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x19, 0xa2, 0xe3, 0xe3, 0xe3, 0xc4, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x5b, 0xe3, 0xe3, 0xe3, 0xe3, 0x72, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x14, 0x1c, 0x1c, 0x10, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, + 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xad, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, + 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, + 0x7f, 0xcf, 0xff, 0xf5, 0x69, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x90, 0xd9, 0xff, 0x99, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3b, 0xcf, 0xff, 0xa7, 0x9b, 0xff, 0xff, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x70, 0xe0, 0xc8, 0x48, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, + 0x00, 0x1a, 0x33, 0x33, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xc0, 0xff, - 0xf9, 0xbe, 0x5d, 0x19, 0x03, 0x03, 0x19, 0x5d, 0xda, 0xff, 0xff, - 0xff, 0x80, 0x00, 0x00, 0x00, 0x50, 0xb6, 0xb6, 0xa2, 0x34, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x69, 0xde, 0xff, 0xff, - 0xd8, 0x91, 0x54, 0x29, 0x1c, 0x1c, 0x1c, 0x30, 0x61, 0x91, 0xd8, - 0xfc, 0xa6, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, - 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x14, 0x1c, 0x19, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x19, 0x1c, 0x1c, 0x1c, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x14, 0x1c, 0x1c, 0x1c, 0x19, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x14, 0x1c, 0x19, 0x09, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x49, 0x49, - 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x34, 0x49, 0x49, 0x49, 0x3b, - 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x49, 0x49, 0x49, 0x49, - 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x81, 0xb6, 0xb6, 0x66, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, + 0xad, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, + 0xb6, 0xff, 0xeb, 0xbd, 0xf1, 0xff, 0xc3, 0x20, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe6, 0xbf, 0xf6, + 0xe5, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x13, 0x94, 0xff, 0xd5, 0xc2, 0xff, 0xff, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x49, 0x41, 0x18, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, - 0x79, 0xf6, 0xff, 0xd0, 0x44, 0x03, 0x00, 0x00, 0x00, 0x00, 0x06, - 0x6f, 0xe8, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x0e, 0x1f, 0x1f, - 0x1c, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x5a, 0xda, - 0xff, 0xf9, 0xc2, 0x4f, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0a, 0x57, 0xc2, 0x81, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1d, 0x33, 0x33, 0x2e, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x27, 0x6e, 0xa6, 0xb6, 0xb0, 0x89, 0x54, 0x1e, + 0x00, 0x48, 0x80, 0x80, 0x40, 0x00, 0x00, 0x00, 0x38, 0x80, 0x80, + 0x72, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0c, 0x30, 0x68, 0x8f, 0xb0, 0xb6, 0xb6, 0xb6, 0x9e, + 0x75, 0x4f, 0x1c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x5b, 0x80, 0x72, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x66, 0xb6, 0xb6, 0x81, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0xe3, 0xe3, 0xa2, 0x19, + 0x00, 0x00, 0x00, 0x9a, 0xe3, 0xe3, 0xa2, 0x19, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xfc, 0xf9, 0xff, 0xf0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, - 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1c, + 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, + 0xf7, 0xef, 0xff, 0xad, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xe5, 0xf6, + 0xef, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0xb0, 0xff, 0xff, 0x79, 0x0a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x17, 0xaa, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2b, 0xbd, 0xff, 0xfc, 0xb7, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x3d, 0x3e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0d, 0x4f, 0xb8, 0xf3, 0xff, 0xff, 0xff, + 0xfc, 0xe6, 0xad, 0x41, 0x95, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0x70, 0xff, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x30, 0x86, 0xca, 0xf3, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf9, 0xe3, 0xad, 0x5d, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1c, 0x1c, 0x14, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x49, + 0x49, 0x34, 0x08, 0x00, 0x00, 0x00, 0x32, 0x49, 0x49, 0x34, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xff, 0xff, 0xfc, + 0xac, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x15, 0x42, 0x7b, 0xb1, 0xcc, 0xcc, 0xc5, 0xa0, 0x6b, 0x25, - 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x25, 0x53, 0x7e, 0x8f, 0x8f, 0x8f, 0x6d, 0x4c, 0x2a, 0x09, + 0x1c, 0xb6, 0xff, 0xff, 0xff, 0xf9, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x49, 0xe3, + 0x1a, 0xa7, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xda, 0xff, 0xe2, 0x36, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x10, 0x8c, 0xf9, 0xff, 0xc9, 0x37, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x36, 0xa1, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xf9, 0xc9, 0x71, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x10, 0x58, 0xc2, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xf9, 0xd4, 0x8f, 0x4a, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0a, 0x1c, 0x1f, 0x1f, 0x1c, 0x09, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x5a, 0xda, 0xff, 0xff, + 0xe4, 0xab, 0x85, 0x85, 0xab, 0xe1, 0xcd, 0xd2, 0xff, 0xff, 0x80, + 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x5a, 0xc0, 0xf6, 0xff, 0xfc, + 0xe6, 0xc3, 0xb6, 0xb6, 0xb6, 0xca, 0xef, 0xff, 0xff, 0xe4, 0x7b, + 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x81, 0xb6, + 0xb6, 0xb6, 0xaa, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x14, 0x81, 0xb6, 0xa2, 0x3b, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0xe3, 0xe3, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x13, 0x7b, 0xad, 0xad, 0x61, 0x00, 0x00, - 0x00, 0x32, 0x9a, 0xad, 0x7b, 0x13, 0x00, 0x00, 0x15, 0x7b, 0xad, - 0x9a, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x19, 0xa2, 0xe3, 0xe3, 0xe3, 0xc4, 0x2a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5b, 0xe3, 0xe3, 0xe3, 0xe3, 0x72, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x14, 0x1c, 0x1c, 0x10, 0x00, 0x00, + 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x1f, 0xb6, 0xff, + 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xf1, 0xff, - 0xba, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, - 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x06, 0x16, 0x1c, 0x14, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xd8, 0xff, 0xec, 0x6f, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xc0, + 0xff, 0xf9, 0xbe, 0x5d, 0x19, 0x03, 0x03, 0x19, 0x5d, 0xda, 0xff, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x50, 0xb6, 0xb6, 0xa2, 0x34, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x69, 0xde, 0xff, + 0xff, 0xd8, 0x91, 0x54, 0x29, 0x1c, 0x1c, 0x1c, 0x30, 0x61, 0x91, + 0xd8, 0xfc, 0xa6, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x40, 0xba, 0xf7, 0xff, 0xe3, 0xb8, - 0x8a, 0x80, 0x8f, 0xbd, 0xec, 0xff, 0xea, 0x9a, 0x2b, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x58, 0xd2, 0xfc, 0xf7, 0xcf, 0xb6, - 0xb6, 0xbf, 0xda, 0xf3, 0xff, 0xf7, 0xd9, 0x75, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0e, 0x30, 0x6e, 0x91, 0xb0, 0xb6, 0xb6, 0xb0, 0x8f, - 0x75, 0x47, 0x22, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1c, 0x47, 0x75, 0x80, 0x80, - 0x70, 0x4f, 0x33, 0x10, 0x00, 0x00, 0x00, 0x00, 0x03, 0x19, 0x42, - 0x6e, 0x80, 0x80, 0x80, 0x70, 0x4f, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x14, 0x1c, 0x1c, - 0x10, 0x00, 0x00, 0x00, 0x08, 0x19, 0x1c, 0x14, 0x03, 0x00, 0x00, - 0x03, 0x14, 0x1c, 0x19, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xa2, 0xe3, - 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0xff, 0xff, 0x96, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x25, 0x91, - 0xb6, 0x81, 0x14, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x9a, 0xfc, 0xff, - 0xb3, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x14, 0x1c, 0x1c, 0x1c, 0x19, 0x09, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x14, 0x1c, 0x19, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x49, + 0x49, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x34, 0x49, 0x49, 0x49, + 0x3b, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x49, 0x49, 0x49, + 0x49, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x81, 0xb6, 0xb6, + 0x66, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, + 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, + 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x79, 0xf6, 0xff, 0xd0, 0x44, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x6f, 0xe8, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x0e, 0x1f, + 0x1f, 0x1c, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x5a, + 0xda, 0xff, 0xf9, 0xc2, 0x4f, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0a, 0x57, 0xc2, 0x81, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x40, 0xbf, 0xfc, 0xf2, - 0xb0, 0x52, 0x22, 0x06, 0x00, 0x08, 0x26, 0x65, 0xc5, 0xfc, 0xfc, - 0x9a, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0xc2, 0xfc, 0xec, - 0x90, 0x38, 0x1c, 0x1c, 0x25, 0x40, 0x68, 0xa0, 0xde, 0xf9, 0x89, - 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x35, 0x8b, 0xca, 0xf6, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xf9, 0xdd, 0xb8, 0x84, 0x49, 0x0d, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x65, 0xad, 0xdd, - 0xf9, 0xff, 0xff, 0xf7, 0xe6, 0xcc, 0x9e, 0x68, 0x2c, 0x08, 0x13, - 0x5d, 0xab, 0xd9, 0xf6, 0xff, 0xff, 0xff, 0xf7, 0xe6, 0xb9, 0x34, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x5b, 0x80, 0x80, - 0x56, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1d, 0x33, 0x33, 0x2e, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x34, 0x49, 0x49, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, - 0x00, 0x33, 0xcc, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x4c, - 0xdf, 0xff, 0xf7, 0x76, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, + 0xb6, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xb6, + 0x1c, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0xb0, 0xff, 0xff, 0x79, 0x0a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x17, 0xaa, 0xff, 0xff, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x2b, 0xbd, 0xff, 0xfc, 0xb7, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x3d, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xb0, - 0xfc, 0xf7, 0x9b, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x40, 0xbe, 0xff, 0xf0, 0x80, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x7b, - 0xf9, 0xff, 0xb3, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, - 0x4c, 0x89, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x64, 0xca, 0xf7, 0xff, 0xf9, - 0xe3, 0xc3, 0xb6, 0xb6, 0xc3, 0xde, 0xef, 0xff, 0xff, 0xfc, 0xca, - 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x90, - 0xec, 0xff, 0xff, 0xef, 0xe3, 0xe3, 0xeb, 0xfc, 0xff, 0xff, 0xf3, - 0xc3, 0x7a, 0x90, 0xe4, 0xff, 0xff, 0xf9, 0xe7, 0xe3, 0xe7, 0xf7, - 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0xb6, 0xff, 0xff, 0xad, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x15, 0x42, 0x7b, 0xb1, 0xcc, 0xcc, 0xc5, 0xa0, 0x6b, + 0x25, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x25, 0x53, 0x7e, 0x8f, 0x8f, 0x8f, 0x6d, 0x4c, 0x2a, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x49, + 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xe3, 0x49, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xda, 0xff, 0xe2, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, - 0x80, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xb6, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x81, 0xff, 0xff, 0xd9, 0x42, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x10, 0x8c, 0xf9, 0xff, 0xc9, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x71, 0xf2, 0xff, 0xca, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x53, 0xdf, 0xff, 0xd8, 0x49, 0x00, 0x00, - 0x00, 0x00, 0xa6, 0xff, 0xff, 0x85, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x69, 0xde, 0xff, - 0xfc, 0xd8, 0x86, 0x4f, 0x29, 0x1c, 0x1c, 0x29, 0x44, 0x61, 0xa6, - 0xf0, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x6f, 0xec, 0xff, 0xf9, 0xbe, 0x61, 0x49, 0x49, 0x59, 0x80, - 0xab, 0xda, 0xfc, 0xff, 0xf4, 0xf7, 0xff, 0xec, 0xb3, 0x7b, 0x50, - 0x49, 0x50, 0x70, 0x8f, 0xae, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0xad, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x36, 0xa1, 0xee, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf9, 0xc9, 0x71, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x10, 0x58, 0xc2, 0xf9, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf9, 0xd4, 0x8f, 0x4a, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x16, 0x33, - 0x49, 0x49, 0x44, 0x29, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0a, 0x1c, 0x1f, 0x1f, 0x1c, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xf7, - 0xff, 0xad, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xb6, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0xa6, 0xff, 0xff, 0xbb, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x7b, 0xad, 0xad, 0x61, 0x00, + 0x00, 0x00, 0x32, 0x9a, 0xad, 0x7b, 0x13, 0x00, 0x00, 0x15, 0x7b, + 0xad, 0x9a, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x52, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xf1, + 0xff, 0xba, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x06, 0x16, 0x1c, 0x14, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xd8, 0xff, 0xec, 0x6f, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x25, 0xb3, 0xff, 0xf7, 0x80, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x8f, 0xff, 0xfc, - 0x89, 0x08, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x40, 0xba, 0xf7, 0xff, 0xe3, + 0xb8, 0x8a, 0x80, 0x8f, 0xbd, 0xec, 0xff, 0xea, 0x9a, 0x2b, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x58, 0xd2, 0xfc, 0xf7, 0xcf, + 0xb6, 0xb6, 0xbf, 0xda, 0xf3, 0xff, 0xf7, 0xd9, 0x75, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x64, - 0xde, 0xff, 0xf2, 0xa5, 0x47, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3a, 0xd1, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x30, 0xc7, 0xff, 0xf2, 0xa5, 0x32, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x19, 0x4b, 0xc8, 0xff, 0xff, 0xff, 0xf9, 0x9a, - 0x24, 0x03, 0x00, 0x00, 0x00, 0x00, 0x08, 0x28, 0x15, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x81, 0xb6, 0xb6, 0x7b, 0x14, + 0x00, 0x00, 0x00, 0x0e, 0x30, 0x6e, 0x91, 0xb0, 0xb6, 0xb6, 0xb0, + 0x8f, 0x75, 0x47, 0x22, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1c, 0x47, 0x75, 0x80, + 0x80, 0x70, 0x4f, 0x33, 0x10, 0x00, 0x00, 0x00, 0x00, 0x03, 0x19, + 0x42, 0x6e, 0x80, 0x80, 0x80, 0x70, 0x4f, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x46, - 0x7b, 0xab, 0xcc, 0xe3, 0xe3, 0xde, 0xc3, 0x9e, 0x6e, 0x2c, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x14, 0x1c, + 0x1c, 0x10, 0x00, 0x00, 0x00, 0x08, 0x19, 0x1c, 0x14, 0x03, 0x00, + 0x00, 0x03, 0x14, 0x1c, 0x19, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xa2, + 0xe3, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x16, 0x1c, 0x1c, 0x14, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xe7, 0xff, 0xd6, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x33, - 0xcc, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x17, 0xc3, 0xff, 0xff, - 0x9e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0xff, 0xff, 0x96, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x25, + 0x91, 0xb6, 0x81, 0x14, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x9a, 0xfc, + 0xff, 0xb3, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0xde, 0xff, 0xe7, 0x50, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x40, 0xbf, 0xfc, + 0xf2, 0xb0, 0x52, 0x22, 0x06, 0x00, 0x08, 0x26, 0x65, 0xc5, 0xfc, + 0xfc, 0x9a, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0xc2, 0xfc, + 0xec, 0x90, 0x38, 0x1c, 0x1c, 0x25, 0x40, 0x68, 0xa0, 0xde, 0xf9, + 0x89, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x35, 0x8b, 0xca, 0xf6, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf9, 0xdd, 0xb8, 0x84, 0x49, 0x0d, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x65, 0xad, + 0xdd, 0xf9, 0xff, 0xff, 0xf7, 0xe6, 0xcc, 0x9e, 0x68, 0x2c, 0x08, + 0x13, 0x5d, 0xab, 0xd9, 0xf6, 0xff, 0xff, 0xff, 0xf7, 0xe6, 0xb9, + 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x5b, 0x80, + 0x80, 0x56, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x5a, 0xff, 0xff, 0xaf, 0x18, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, - 0x8a, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3e, 0xc9, 0xff, 0xf9, 0xa5, 0x25, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xe3, 0x49, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xef, 0xff, 0xc8, 0x37, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0xd6, 0xff, 0xff, - 0xff, 0xfc, 0xb7, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x16, 0x1f, - 0x1f, 0x15, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x82, 0xd6, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xf5, 0xbc, 0x5e, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x06, 0x23, 0x5c, 0x77, 0xa0, 0xad, 0xad, 0x9b, - 0x70, 0x36, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0xca, 0xff, 0xf5, 0x5c, 0x00, 0x00, + 0x00, 0x08, 0x34, 0x49, 0x49, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, - 0x00, 0x00, 0x33, 0xcc, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x33, - 0xe0, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x33, 0xcc, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, + 0x4c, 0xdf, 0xff, 0xf7, 0x76, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0xf3, - 0xff, 0xca, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x36, 0xe2, 0xff, 0xcf, 0x35, 0x00, 0x00, 0x00, - 0x8b, 0xff, 0xff, 0xb0, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x10, 0x9d, 0xf9, 0xff, 0xc9, 0x37, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, - 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, - 0xff, 0x97, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0xa6, - 0xff, 0xff, 0xf0, 0xe1, 0xfc, 0xf9, 0xa5, 0x29, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, + 0xb0, 0xfc, 0xf7, 0x9b, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x40, 0xbe, 0xff, 0xf0, 0x80, 0x0d, 0x00, 0x00, 0x00, 0x00, + 0x7b, 0xf9, 0xff, 0xb3, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x13, 0x4c, 0x89, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x64, 0xca, 0xf7, 0xff, + 0xf9, 0xe3, 0xc3, 0xb6, 0xb6, 0xc3, 0xde, 0xef, 0xff, 0xff, 0xfc, + 0xca, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, + 0x90, 0xec, 0xff, 0xff, 0xef, 0xe3, 0xe3, 0xeb, 0xfc, 0xff, 0xff, + 0xf3, 0xc3, 0x7a, 0x90, 0xe4, 0xff, 0xff, 0xf9, 0xe7, 0xe3, 0xe7, + 0xf7, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0xb6, 0xff, 0xff, 0xad, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x25, 0x9c, 0xf0, 0xff, 0xfb, 0xd6, 0xa1, 0x77, 0x70, - 0x81, 0xb5, 0xe7, 0xff, 0xff, 0xdf, 0x70, 0x0f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x77, 0xb8, 0xee, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xf9, 0xc2, 0x63, 0x18, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x91, 0xfc, 0xff, - 0xc2, 0x38, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xa9, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xb6, 0x1c, 0x00, - 0x00, 0x00, 0x33, 0xe0, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x81, 0xff, 0xff, 0xd9, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, 0xff, 0xe3, 0x49, - 0x00, 0x00, 0x00, 0x48, 0xdb, 0xff, 0xea, 0x76, 0x0f, 0x00, 0x00, + 0x00, 0x03, 0x71, 0xf2, 0xff, 0xca, 0x35, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x53, 0xdf, 0xff, 0xd8, 0x49, 0x00, + 0x00, 0x00, 0x00, 0xa6, 0xff, 0xff, 0x85, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x69, 0xde, + 0xff, 0xfc, 0xd8, 0x86, 0x4f, 0x29, 0x1c, 0x1c, 0x29, 0x44, 0x61, + 0xa6, 0xf0, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x6f, 0xec, 0xff, 0xf9, 0xbe, 0x61, 0x49, 0x49, 0x59, + 0x80, 0xab, 0xda, 0xfc, 0xff, 0xf4, 0xf7, 0xff, 0xec, 0xb3, 0x7b, + 0x50, 0x49, 0x50, 0x70, 0x8f, 0xae, 0x41, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0xad, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0xf5, 0xff, 0xea, 0x66, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x33, 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x15, 0x99, 0xf9, 0xff, 0xef, 0x89, 0x47, 0xb7, 0xfc, 0xf9, 0xab, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x16, + 0x33, 0x49, 0x49, 0x44, 0x29, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x25, 0xa5, 0xf9, 0xff, 0xe7, 0x8e, 0x2f, - 0x06, 0x00, 0x00, 0x00, 0x0f, 0x48, 0xa6, 0xf9, 0xff, 0xea, 0x76, - 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xa4, 0xff, 0xff, - 0xff, 0xf5, 0xe0, 0xe3, 0xf6, 0xff, 0xff, 0xff, 0xf5, 0x8c, 0x06, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3f, 0xcf, 0xff, 0xf9, 0xb7, 0x45, 0x08, 0x00, 0x00, 0x00, 0x15, - 0x7d, 0xea, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, - 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xff, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, + 0xf7, 0xff, 0xad, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, + 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0xa6, 0xff, 0xff, 0xbb, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, - 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x0f, 0x7d, 0xec, 0xff, 0xd8, - 0x4f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0xa7, 0xff, - 0xff, 0xb3, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0xf7, 0xff, 0x8f, 0x09, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x67, 0xe4, 0xff, 0xf9, 0x9a, 0x21, 0x03, 0x40, - 0xbf, 0xfc, 0xf0, 0x68, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x1c, 0x1c, 0x0c, + 0x00, 0x00, 0x00, 0x00, 0x25, 0xb3, 0xff, 0xf7, 0x80, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x8f, 0xff, + 0xfc, 0x89, 0x08, 0x00, 0x00, 0x00, 0xad, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x96, 0xf2, 0xff, 0xcb, - 0x65, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x8f, - 0xe4, 0xff, 0xde, 0x69, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x8f, 0xfc, 0xd8, 0x91, 0x6e, 0x49, 0x4f, 0x70, 0xa0, 0xe4, 0xff, - 0xff, 0xe1, 0x49, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x64, 0xda, 0xff, 0xfc, 0xcf, 0x89, 0x59, - 0x49, 0x64, 0xa0, 0xea, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, - 0x33, 0xcc, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x2e, 0xda, 0xff, - 0xff, 0x85, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, + 0x64, 0xde, 0xff, 0xf2, 0xa5, 0x47, 0x09, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x3a, 0xd1, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0xc7, 0xff, 0xf2, 0xa5, 0x32, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x19, 0x4b, 0xc8, 0xff, 0xff, 0xff, 0xf9, + 0x9a, 0x24, 0x03, 0x00, 0x00, 0x00, 0x00, 0x08, 0x28, 0x15, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x81, 0xb6, 0xb6, 0x7b, + 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, + 0x46, 0x7b, 0xab, 0xcc, 0xe3, 0xe3, 0xde, 0xc3, 0x9e, 0x6e, 0x2c, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x16, 0x1c, 0x1c, 0x14, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1a, 0x66, 0x80, 0x8d, 0xda, 0xff, 0xf1, 0xa4, 0x80, 0x80, 0x80, - 0x5b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1f, 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x1e, - 0x93, 0xf2, 0xfc, 0xb0, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x50, 0xe7, 0xff, 0xd6, 0x29, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0x33, 0xcc, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x17, 0xc3, 0xff, + 0xff, 0x9e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x52, 0xe5, 0xff, 0xf7, 0x76, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0xde, 0xff, 0xe7, + 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x5a, 0xff, 0xff, 0xaf, 0x18, 0x00, 0x00, 0x00, 0xad, 0xff, + 0xff, 0x8a, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3e, 0xc9, 0xff, 0xf9, 0xa5, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xe3, 0x49, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xd9, 0xff, 0xc0, - 0x31, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xcf, 0xff, 0xff, 0xab, 0x2b, - 0x00, 0x00, 0x03, 0x4f, 0xd8, 0xff, 0xd4, 0x49, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, - 0xb6, 0xb6, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x7b, 0xf2, - 0xff, 0xde, 0x5a, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x15, 0x8b, 0xf2, 0xff, 0xd8, 0x49, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x6d, 0xa2, 0x47, 0x09, 0x00, 0x00, 0x00, 0x00, - 0x13, 0x6f, 0xe4, 0xff, 0xff, 0xa1, 0x19, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x5a, 0xda, 0xff, - 0xff, 0xfc, 0xeb, 0xe3, 0xf1, 0xf3, 0xad, 0xc7, 0xff, 0xff, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xef, 0xff, 0xc8, + 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0xd6, 0xff, + 0xff, 0xff, 0xfc, 0xb7, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x16, + 0x1f, 0x1f, 0x15, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x82, 0xd6, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf5, 0xbc, 0x5e, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x23, 0x5c, 0x77, 0xa0, 0xad, 0xad, + 0x9b, 0x70, 0x36, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xca, 0xff, 0xf5, 0x5c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, - 0x0f, 0xbb, 0xff, 0xff, 0xa6, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x33, 0xe0, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, - 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x21, 0x9b, 0xf7, 0xf2, 0x7b, 0x09, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, + 0xf3, 0xff, 0xca, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x36, 0xe2, 0xff, 0xcf, 0x35, 0x00, 0x00, + 0x00, 0x8b, 0xff, 0xff, 0xb0, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0e, 0x8e, 0xff, 0xff, 0xd9, 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x15, 0x41, 0x49, 0x49, 0x49, 0x6e, 0xda, - 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, - 0x90, 0xf7, 0xf2, 0x8f, 0x15, 0x00, 0x00, 0x1b, 0xa2, 0xfc, 0xff, - 0xd4, 0x36, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x84, 0xf6, 0xff, 0xaa, - 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xff, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x9d, 0xf9, 0xff, 0xc9, 0x37, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xcc, + 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0xff, 0xff, 0x97, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, + 0xa6, 0xff, 0xff, 0xf0, 0xe1, 0xfc, 0xf9, 0xa5, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x47, 0xcf, 0xff, 0xf2, 0x80, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xb0, 0xfc, 0xfc, 0xa2, - 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1b, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x19, 0xab, 0xff, 0xff, 0xd1, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x4f, 0x9e, 0xcc, 0xe3, 0xe3, 0xcc, 0x9b, 0x68, 0x1e, 0x8f, - 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x45, 0xda, 0xff, 0xc3, 0x29, - 0x00, 0x00, 0x00, 0x00, 0x9b, 0xff, 0xff, 0xc3, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x91, 0xb6, 0xbe, 0xea, - 0xff, 0xf7, 0xcb, 0xb6, 0xb6, 0xb6, 0x81, 0x14, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x25, 0x9c, 0xf0, 0xff, 0xfb, 0xd6, 0xa1, 0x77, + 0x70, 0x81, 0xb5, 0xe7, 0xff, 0xff, 0xdf, 0x70, 0x0f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x77, 0xb8, 0xee, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf9, 0xc2, 0x63, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x91, 0xfc, + 0xff, 0xc2, 0x38, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xa9, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xb6, 0x1c, + 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, + 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, 0xff, 0xe3, - 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0xca, 0xff, 0xc7, - 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xb2, 0xff, 0xff, 0xbb, 0x21, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xcb, 0xe3, 0xe3, - 0xe3, 0xe9, 0xf9, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x30, 0xba, 0xfc, 0xea, 0x9a, 0x32, 0x06, 0x65, - 0xec, 0xff, 0xde, 0x65, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, - 0xb8, 0xff, 0xea, 0x53, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x70, 0x00, 0x00, + 0x49, 0x00, 0x00, 0x00, 0x48, 0xdb, 0xff, 0xea, 0x76, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x10, 0xa7, 0xfc, 0xff, 0xb6, 0x27, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x52, - 0xde, 0xff, 0xec, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x85, 0xff, 0xff, - 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x33, 0x49, 0x49, 0x33, 0x0e, - 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x69, 0xf9, - 0xff, 0xde, 0x44, 0x00, 0x00, 0x00, 0x00, 0x70, 0xf9, 0xff, 0xe6, - 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x16, - 0x1c, 0x34, 0xbe, 0xff, 0xe6, 0x5d, 0x1c, 0x1c, 0x1c, 0x14, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0xf5, 0xff, 0xea, + 0x66, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x33, 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x15, 0x99, 0xf9, 0xff, 0xef, 0x89, 0x47, 0xb7, 0xfc, 0xf9, + 0xab, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0xa5, 0xf9, 0xff, 0xe7, 0x8e, + 0x2f, 0x06, 0x00, 0x00, 0x00, 0x0f, 0x48, 0xa6, 0xf9, 0xff, 0xea, + 0x76, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xa4, 0xff, + 0xff, 0xff, 0xf5, 0xe0, 0xe3, 0xf6, 0xff, 0xff, 0xff, 0xf5, 0x8c, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3f, 0xcf, 0xff, 0xf9, 0xb7, 0x45, 0x08, 0x00, 0x00, 0x00, + 0x15, 0x7d, 0xea, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x33, 0xcc, + 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xff, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, - 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x80, 0xf7, 0xf1, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xd1, 0xff, - 0xff, 0x9b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, - 0xcb, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xcb, 0x41, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x40, 0xb0, 0xf0, 0xfc, - 0xb7, 0x6b, 0xc0, 0xff, 0xf7, 0x84, 0x0f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x58, 0xef, 0xff, 0xaa, 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0xfc, 0xff, - 0x77, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xe5, 0xff, 0xf7, 0x76, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x19, 0xab, 0xff, 0xff, 0xb3, 0x15, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, - 0x00, 0x70, 0xff, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x3d, - 0xd0, 0xff, 0xfc, 0x84, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, - 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1f, 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x47, 0xdd, 0xff, 0xaa, 0x0e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x49, 0xe0, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x18, 0x49, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x49, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x2b, 0x9a, 0xf5, 0xfb, 0xe7, 0xf6, 0xff, 0xd3, 0x3c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xc9, 0xff, 0xe7, 0x5c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x5b, 0xea, 0xff, 0x99, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xff, 0xff, - 0xd3, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x6e, 0xf3, 0xff, 0xee, 0x42, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, - 0x80, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xe3, 0x49, 0x00, 0x00, - 0x00, 0x00, 0x06, 0x8a, 0xf9, 0xff, 0xc3, 0x2c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, - 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, 0xff, 0xe3, 0x49, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xbb, 0xff, 0xcc, 0x1f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x84, 0xf5, 0xff, 0xff, 0xf3, 0x79, - 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, - 0xf5, 0xff, 0x97, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x40, 0xd6, 0xff, 0xcf, 0x3b, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, - 0xaa, 0xff, 0xff, 0xab, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xda, - 0xff, 0xff, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xe0, 0x49, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xe3, - 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xd4, 0xff, 0xf3, 0x79, - 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, 0xff, - 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x97, - 0xff, 0xe8, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xff, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xa8, 0xf9, - 0xff, 0xec, 0x61, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x39, 0xcf, 0xff, 0xcf, 0x35, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xb0, 0xff, 0xf1, 0x6e, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x33, 0xcc, 0xff, 0xff, 0x8a, 0x06, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x25, 0xbf, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, - 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x70, - 0xff, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, - 0xf2, 0xff, 0xcf, 0x45, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1f, 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, + 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x0f, 0x7d, 0xec, 0xff, + 0xd8, 0x4f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0xa7, + 0xff, 0xff, 0xb3, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xf7, 0xff, 0x8f, 0x09, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x67, 0xe4, 0xff, 0xf9, 0x9a, 0x21, 0x03, + 0x40, 0xbf, 0xfc, 0xf0, 0x68, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x1c, 0x1c, + 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x96, 0xf2, 0xff, + 0xcb, 0x65, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, + 0x8f, 0xe4, 0xff, 0xde, 0x69, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x8f, 0xfc, 0xd8, 0x91, 0x6e, 0x49, 0x4f, 0x70, 0xa0, 0xe4, + 0xff, 0xff, 0xe1, 0x49, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x64, 0xda, 0xff, 0xfc, 0xcf, 0x89, + 0x59, 0x49, 0x64, 0xa0, 0xea, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, + 0x00, 0x33, 0xcc, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x2e, 0xda, 0xff, 0xff, 0x85, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1a, 0x66, 0x80, 0x8d, 0xda, 0xff, 0xf1, 0xa4, 0x80, 0x80, + 0x80, 0x5b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, + 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1f, 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, + 0x1e, 0x93, 0xf2, 0xfc, 0xb0, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x8b, 0xfa, 0xff, 0xfc, 0xbf, 0x40, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xa0, 0xff, 0xeb, 0x59, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x70, - 0xf0, 0xff, 0xb6, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xe5, 0xff, 0xf7, 0x70, 0x00, + 0x00, 0x52, 0xe5, 0xff, 0xf7, 0x76, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xe3, + 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xd9, 0xff, + 0xc0, 0x31, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xcf, 0xff, 0xff, 0xab, + 0x2b, 0x00, 0x00, 0x03, 0x4f, 0xd8, 0xff, 0xd4, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x14, 0xa6, 0xff, 0xff, 0xad, 0x1a, 0x00, + 0x5b, 0xb6, 0xb6, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x7b, + 0xf2, 0xff, 0xde, 0x5a, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x15, 0x8b, 0xf2, 0xff, 0xd8, 0x49, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6d, 0xa2, 0x47, 0x09, 0x00, 0x00, 0x00, + 0x00, 0x13, 0x6f, 0xe4, 0xff, 0xff, 0xa1, 0x19, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x5a, 0xda, + 0xff, 0xff, 0xfc, 0xeb, 0xe3, 0xf1, 0xf3, 0xad, 0xc7, 0xff, 0xff, + 0x80, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xb6, 0x1c, 0x00, 0x00, + 0x00, 0x0f, 0xbb, 0xff, 0xff, 0xa6, 0x14, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, 0xff, 0xe3, 0x49, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x21, 0x9b, 0xf7, 0xf2, 0x7b, 0x09, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0e, 0x8e, 0xff, 0xff, 0xd9, 0x42, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x41, 0x49, 0x49, 0x49, 0x6e, + 0xda, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x13, 0x90, 0xf7, 0xf2, 0x8f, 0x15, 0x00, 0x00, 0x1b, 0xa2, 0xfc, + 0xff, 0xd4, 0x36, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x84, 0xf6, 0xff, + 0xaa, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x47, 0xcf, 0xff, 0xf2, 0x80, 0x0d, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xb0, 0xfc, 0xfc, + 0xa2, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1b, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xab, 0xff, 0xff, 0xd1, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x06, 0x4f, 0x9e, 0xcc, 0xe3, 0xe3, 0xcc, 0x9b, 0x68, 0x1e, + 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x45, 0xda, 0xff, 0xc3, + 0x29, 0x00, 0x00, 0x00, 0x00, 0x9b, 0xff, 0xff, 0xc3, 0x29, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x91, 0xb6, 0xbe, + 0xea, 0xff, 0xf7, 0xcb, 0xb6, 0xb6, 0xb6, 0x81, 0x14, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, 0xff, + 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0xca, 0xff, + 0xc7, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xb2, 0xff, 0xff, 0xbb, + 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xcb, 0xe3, + 0xe3, 0xe3, 0xe9, 0xf9, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0xba, 0xfc, 0xea, 0x9a, 0x32, 0x06, + 0x65, 0xec, 0xff, 0xde, 0x65, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0xb8, 0xff, 0xea, 0x53, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x70, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x10, 0xa7, 0xfc, 0xff, 0xb6, 0x27, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0x52, 0xde, 0xff, 0xec, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x85, 0xff, + 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x33, 0x49, 0x49, 0x33, + 0x0e, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x69, + 0xf9, 0xff, 0xde, 0x44, 0x00, 0x00, 0x00, 0x00, 0x70, 0xf9, 0xff, + 0xe6, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x16, 0x1c, 0x34, 0xbe, 0xff, 0xe6, 0x5d, 0x1c, 0x1c, 0x1c, 0x14, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x80, 0xf7, 0xf1, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xd1, + 0xff, 0xff, 0x9b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x41, 0xcb, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xcb, 0x41, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x40, 0xb0, 0xf0, + 0xfc, 0xb7, 0x6b, 0xc0, 0xff, 0xf7, 0x84, 0x0f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x58, 0xef, 0xff, 0xaa, 0x21, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0xfc, + 0xff, 0x77, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xe5, 0xff, 0xf7, 0x76, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x19, 0xab, 0xff, 0xff, 0xb3, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x27, 0xb0, 0xfc, 0xfc, 0xbf, 0x4d, 0x09, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x29, 0x0d, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x9b, 0xff, 0xe6, 0x4f, 0x00, + 0x3d, 0xd0, 0xff, 0xfc, 0x84, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x52, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x47, 0xdd, 0xff, 0xaa, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x33, 0xc6, 0xff, 0xff, 0xa6, 0x14, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1c, 0xc0, 0xff, 0xf7, 0xf4, 0xfc, 0xbf, 0x48, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xca, - 0xa3, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x20, 0xac, 0xff, 0xf2, 0x80, 0x0d, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, - 0xe6, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x85, 0xff, 0xff, - 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x49, 0xe0, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x18, 0x49, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, + 0x49, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x2b, 0x9a, 0xf5, 0xfb, 0xe7, 0xf6, 0xff, 0xd3, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xc9, 0xff, 0xe7, + 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x5b, 0xea, 0xff, 0x99, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xff, + 0xff, 0xd3, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x6e, 0xf3, 0xff, 0xee, + 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xe3, 0x49, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x40, 0xbf, 0xfc, 0xfc, 0xd8, - 0x79, 0x2c, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x3c, 0x8c, - 0xaf, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0xec, - 0xf7, 0x84, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x06, 0x8a, 0xf9, 0xff, 0xc3, 0x2c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, + 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, 0xff, 0xe3, 0x49, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, - 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x19, 0xa6, 0xff, 0xff, 0xc3, 0x29, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xbb, 0xff, 0xcc, + 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0xf0, 0xff, 0xcb, 0x8d, - 0xde, 0xfc, 0xcd, 0x48, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x18, 0x30, 0x14, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0xdf, 0xff, 0xde, 0x69, - 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0xff, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x84, 0xf5, 0xff, 0xff, 0xf3, + 0x79, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x77, 0xf5, 0xff, 0x97, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0xd6, 0xff, 0xcf, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0xff, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x17, 0xaa, 0xff, 0xff, 0xab, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, + 0xda, 0xff, 0xff, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, - 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x40, - 0xba, 0xf7, 0xff, 0xf3, 0xc3, 0x89, 0x59, 0x49, 0x49, 0x59, 0x79, - 0xa4, 0xd3, 0xf9, 0xe6, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x21, 0xad, 0xfc, 0xde, 0x7f, 0x2a, 0x1c, 0x1c, 0x33, 0x57, - 0x25, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, + 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xd4, 0xff, 0xf3, + 0x79, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, - 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x5b, 0xb6, 0xb6, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x7b, 0xf9, 0xff, - 0xe6, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, + 0x97, 0xff, 0xe8, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xff, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0xff, - 0xff, 0x9b, 0x1b, 0x69, 0xde, 0xff, 0xc2, 0x3d, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xa8, + 0xf9, 0xff, 0xec, 0x61, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x39, 0xcf, 0xff, 0xcf, 0x35, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xb0, 0xff, 0xf1, + 0x6e, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xff, 0x8a, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x70, - 0xde, 0xff, 0xde, 0x74, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x25, 0xbf, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, - 0x70, 0xff, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x30, 0x90, 0xe1, 0xff, 0xff, 0xfc, 0xeb, 0xe3, - 0xe3, 0xeb, 0xfc, 0xff, 0xff, 0xff, 0xef, 0x65, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x40, 0xbf, 0xfc, 0xf3, 0xc4, 0xb6, - 0xb6, 0xcc, 0xd5, 0x49, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, + 0x70, 0xff, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, + 0x80, 0xf2, 0xff, 0xcf, 0x45, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0e, 0x1c, 0x1c, 0x09, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3f, 0xd4, 0xff, 0xfc, 0x89, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, + 0xe0, 0xff, 0xff, 0x85, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7e, 0xff, 0xfc, 0x7a, 0x00, 0x0d, 0x80, 0xf0, 0xf9, 0xa7, - 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x8b, 0xfa, 0xff, 0xfc, 0xbf, 0x40, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xa0, 0xff, 0xeb, 0x59, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x70, 0xf0, 0xff, 0xb6, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xe5, 0xff, 0xf7, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0f, 0x69, 0xde, 0xff, 0xec, 0x7c, 0x0f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xe3, 0x49, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x33, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0xa6, 0xff, 0xff, 0xad, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x5c, 0xaa, 0xe8, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xee, 0xb8, 0x84, 0x30, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x41, 0xac, - 0xee, 0xff, 0xff, 0xff, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x8f, + 0x00, 0x00, 0x00, 0x27, 0xb0, 0xfc, 0xfc, 0xbf, 0x4d, 0x09, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x29, 0x0d, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x9b, 0xff, 0xe6, 0x4f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x52, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x33, 0xc6, 0xff, 0xff, 0xa6, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x11, 0x96, 0xff, 0xff, 0xc3, 0x2c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xec, 0x5b, 0x00, 0x00, 0x25, - 0xa6, 0xff, 0xef, 0x73, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x76, 0xea, 0xff, 0xd4, - 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xe8, - 0xff, 0xe9, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x8a, 0xff, - 0xff, 0xb1, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0xc0, 0xff, 0xf7, 0xf4, 0xfc, 0xbf, + 0x48, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, + 0xca, 0xa3, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0xac, 0xff, 0xf2, 0x80, 0x0d, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, + 0xff, 0xe6, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x85, 0xff, + 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, - 0x52, 0x52, 0x29, 0x00, 0x00, 0x00, 0x24, 0x52, 0x52, 0x49, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x3c, 0x64, 0x88, 0x8f, 0x8f, 0x8f, 0x74, 0x52, 0x42, - 0x15, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x15, 0x42, 0x7b, 0x8f, 0x8f, 0x88, 0x5b, 0x18, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xe3, 0x49, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x40, 0xbf, 0xfc, 0xfc, + 0xd8, 0x79, 0x2c, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x3c, + 0x8c, 0xaf, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, + 0xec, 0xf7, 0x84, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, 0xff, 0xe3, - 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, + 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xa6, 0xff, 0xff, 0xc3, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0xdc, 0xff, 0xf6, - 0x86, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xe3, 0x49, - 0x00, 0x00, 0x00, 0x47, 0xea, 0xff, 0xb8, 0x22, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0xf0, 0xff, 0xcb, + 0x8d, 0xde, 0xfc, 0xcd, 0x48, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x30, 0x14, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0xdf, 0xff, 0xde, + 0x69, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x70, 0xff, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, - 0x97, 0xff, 0xfc, 0x94, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x33, 0xcc, 0xff, 0xfc, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0xaf, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0xff, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, + 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x70, 0xff, + 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0x40, 0xba, 0xf7, 0xff, 0xf3, 0xc3, 0x89, 0x59, 0x49, 0x49, 0x59, + 0x79, 0xa4, 0xd3, 0xf9, 0xe6, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x21, 0xad, 0xfc, 0xde, 0x7f, 0x2a, 0x1c, 0x1c, 0x33, + 0x57, 0x25, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x16, 0x1f, 0x1f, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, - 0x81, 0xf0, 0xff, 0xd8, 0x4d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, - 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x17, 0xc3, 0xff, 0xda, 0x40, + 0x00, 0x5b, 0xb6, 0xb6, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x7b, 0xf9, + 0xff, 0xe6, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, + 0xff, 0xff, 0x9b, 0x1b, 0x69, 0xde, 0xff, 0xc2, 0x3d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x61, 0xef, 0xff, 0xbf, 0x19, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x17, 0xaa, 0xff, 0xff, 0x91, 0x09, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, + 0x70, 0xde, 0xff, 0xde, 0x74, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x2a, 0xc4, 0xff, 0xff, 0x6d, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, + 0x00, 0x70, 0xff, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x30, 0x90, 0xe1, 0xff, 0xff, 0xfc, 0xeb, + 0xe3, 0xe3, 0xeb, 0xfc, 0xff, 0xff, 0xff, 0xef, 0x65, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x40, 0xbf, 0xfc, 0xf3, 0xc4, + 0xb6, 0xb6, 0xcc, 0xd5, 0x49, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x16, 0x91, 0xcc, 0xcc, 0x72, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0e, 0x1c, 0x1c, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1f, 0xa7, 0xfc, 0xff, 0xcd, 0x4d, 0x0a, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x8f, 0x52, + 0x00, 0x3f, 0xd4, 0xff, 0xfc, 0x89, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7b, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0xad, - 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xcc, 0x1f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0xff, 0xff, - 0xc4, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0xec, 0xff, 0xe2, 0x36, + 0x00, 0x00, 0x7e, 0xff, 0xfc, 0x7a, 0x00, 0x0d, 0x80, 0xf0, 0xf9, + 0xa7, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0x69, 0xde, 0xff, 0xec, 0x7c, 0x0f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xe3, + 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xcc, + 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, + 0x80, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xe3, 0x49, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x5c, 0xaa, + 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xee, 0xb8, 0x84, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x41, + 0xac, 0xee, 0xff, 0xff, 0xff, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, 0xff, 0xe3, 0x49, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x40, 0xbf, 0xfc, 0xfc, - 0xcf, 0x79, 0x25, 0x06, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1c, 0x5c, - 0xb0, 0xf9, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0xf9, 0xeb, 0x59, 0x00, 0x00, - 0x00, 0x0f, 0xbb, 0xff, 0xd6, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0c, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0xeb, - 0xff, 0xba, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x35, 0xdf, 0xff, 0xe6, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x89, 0xfc, - 0xfc, 0xa7, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x96, 0xff, 0xff, 0xc3, 0x2c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xec, 0x5b, 0x00, 0x00, + 0x25, 0xa6, 0xff, 0xef, 0x73, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x76, 0xea, 0xff, + 0xd4, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, + 0xe8, 0xff, 0xe9, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x8a, + 0xff, 0xff, 0xb1, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xe0, 0x49, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x73, - 0x6b, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x5f, 0x7c, - 0x45, 0x06, 0x00, 0x00, 0x06, 0x37, 0x27, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x34, 0x49, 0x49, 0x49, 0x49, 0x49, 0x40, 0x15, - 0x00, 0x00, 0x08, 0x34, 0x49, 0x49, 0x49, 0x49, 0x49, 0x41, 0x15, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2e, 0x52, 0x52, 0x29, 0x00, 0x00, 0x00, 0x24, 0x52, 0x52, 0x49, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0e, 0x3c, 0x64, 0x88, 0x8f, 0x8f, 0x8f, 0x74, 0x52, + 0x42, 0x15, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x15, 0x42, 0x7b, 0x8f, 0x8f, 0x88, 0x5b, 0x18, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, 0xff, - 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, - 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x40, 0xbf, 0xfc, 0xff, 0xf3, 0xb9, 0x84, 0x59, 0x49, 0x49, 0x59, - 0x80, 0xad, 0xea, 0xff, 0xff, 0x9b, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xd4, 0xfc, - 0x8e, 0x0d, 0x00, 0x00, 0x3f, 0xe3, 0xff, 0xb5, 0x1e, 0x00, 0x00, + 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x25, 0x79, 0x52, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x13, 0x9a, 0xfc, 0xf7, 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x09, 0x8f, 0xf7, 0xfc, 0x9a, 0x13, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0xdc, 0xff, + 0xf6, 0x86, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x35, 0xca, 0xff, 0xde, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xe3, + 0x49, 0x00, 0x00, 0x00, 0x47, 0xea, 0xff, 0xb8, 0x22, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0x97, 0xff, 0xfc, 0x94, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x33, 0xcc, 0xff, 0xfc, 0x79, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x18, 0xaf, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x21, 0x9b, 0xea, 0xa5, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, - 0x76, 0xea, 0xc5, 0x40, 0x03, 0x00, 0x00, 0x1f, 0xb9, 0x9e, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xa2, 0xe3, 0xe3, 0xe3, 0xe3, - 0xe3, 0xc8, 0x41, 0x00, 0x00, 0x19, 0xa2, 0xe3, 0xe3, 0xe3, 0xe3, - 0xe3, 0xcb, 0x41, 0x00, 0x00, 0x00, 0x48, 0x80, 0x80, 0x5b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x66, 0x80, 0x72, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x5b, 0x80, 0x80, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x3a, 0x9a, 0xe4, 0xff, 0xff, 0xfc, 0xeb, - 0xe3, 0xe3, 0xeb, 0xfc, 0xff, 0xff, 0xfc, 0xda, 0x7b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x09, 0x89, 0xf2, 0xde, 0x74, 0x29, 0x38, 0x9f, 0xfc, 0xf6, 0x80, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x5e, 0xe3, 0xde, 0x9a, 0x54, 0x29, 0x1c, - 0x1c, 0x21, 0x42, 0x87, 0xe4, 0xff, 0xca, 0x3c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xca, 0xff, 0xe4, - 0x5d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x13, 0x90, 0xf7, 0xfc, 0x9a, 0x15, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x16, 0x1f, 0x1f, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x81, 0xf0, 0xff, 0xd8, 0x4d, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x8f, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x17, 0xc3, 0xff, 0xda, + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x61, 0xef, 0xff, 0xbf, 0x19, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0xaa, 0xff, 0xff, 0x91, 0x09, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2a, 0xc4, 0xff, 0xff, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xba, 0xf6, 0xa5, 0x2b, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1b, 0x86, 0xea, 0xda, 0x5a, 0x03, 0x00, 0x00, 0x00, 0x0f, - 0xb5, 0xe3, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xa2, 0xe3, - 0xe3, 0xe6, 0xf6, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, - 0xf9, 0xe9, 0xe3, 0xe3, 0xcb, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x57, 0x97, - 0xd5, 0xec, 0xfc, 0xff, 0xff, 0xfc, 0xeb, 0xda, 0xb0, 0x84, 0x46, - 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2b, 0xb0, 0xfc, 0xec, 0xc3, 0xcf, 0xf6, - 0xf9, 0xb2, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xc7, 0xf7, 0xfc, - 0xe6, 0xc3, 0xb6, 0xb6, 0xbb, 0xd9, 0xf7, 0xfc, 0xd8, 0x64, 0x09, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, - 0x6f, 0xec, 0xff, 0xc5, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0x6c, 0xe4, 0xff, 0xcf, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0xff, + 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1f, 0xcc, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x16, 0x91, 0xcc, 0xcc, 0x72, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1f, 0xa7, 0xfc, 0xff, 0xcd, 0x4d, 0x0a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x8f, + 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x7b, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, + 0xad, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xcc, + 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0xff, + 0xff, 0xc4, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0xec, 0xff, 0xe2, + 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x4f, 0xd4, - 0xf9, 0x97, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x6f, 0xea, 0xf0, 0x70, 0x0d, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7b, 0xf6, 0x89, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x34, 0x49, 0x49, 0x5d, 0xc4, 0xff, 0xe0, 0x49, 0x00, 0x00, - 0x1c, 0xb6, 0xff, 0xda, 0x6e, 0x49, 0x49, 0x41, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0c, 0x3b, 0x5b, 0x7a, 0x80, 0x80, 0x7a, 0x59, 0x40, - 0x1c, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x40, 0xad, 0xe6, - 0xfc, 0xfc, 0xe3, 0x99, 0x32, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, - 0x35, 0x80, 0xc7, 0xeb, 0xfc, 0xff, 0xff, 0xff, 0xf1, 0xd6, 0x9a, - 0x49, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1b, 0x93, 0xf2, 0xfc, 0xbf, 0x4d, 0x0c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x76, 0xde, 0xff, 0xde, - 0x64, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, 0xff, 0xe3, 0x49, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, + 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x40, 0xbf, 0xfc, + 0xfc, 0xcf, 0x79, 0x25, 0x06, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1c, + 0x5c, 0xb0, 0xf9, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0xf9, 0xeb, 0x59, 0x00, + 0x00, 0x00, 0x0f, 0xbb, 0xff, 0xd6, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, + 0xeb, 0xff, 0xba, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x35, 0xdf, 0xff, 0xe6, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x89, + 0xfc, 0xfc, 0xa7, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xe0, - 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0f, 0x7e, 0xf9, 0xe7, 0x66, 0x06, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0xc9, 0xff, 0xb5, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0xdc, 0xb8, 0x22, 0x00, + 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, + 0x73, 0x6b, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x5f, + 0x7c, 0x45, 0x06, 0x00, 0x00, 0x06, 0x37, 0x27, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, - 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x34, 0x49, 0x49, 0x49, 0x49, 0x49, 0x40, + 0x15, 0x00, 0x00, 0x08, 0x34, 0x49, 0x49, 0x49, 0x49, 0x49, 0x41, + 0x15, 0x00, 0x00, 0x00, 0x8f, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xcc, + 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, + 0xb6, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x40, 0xbf, 0xfc, 0xff, 0xf3, 0xb9, 0x84, 0x59, 0x49, 0x49, + 0x59, 0x80, 0xad, 0xea, 0xff, 0xff, 0x9b, 0x0e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xd4, + 0xfc, 0x8e, 0x0d, 0x00, 0x00, 0x3f, 0xe3, 0xff, 0xb5, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x25, 0x79, 0x52, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x13, 0x9a, 0xfc, 0xf7, 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x09, 0x8f, 0xf7, 0xfc, 0x9a, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x25, 0x5e, 0x88, 0x88, 0x5c, 0x18, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x09, 0x35, 0x64, 0x88, 0x8f, 0x8f, 0x8f, - 0x71, 0x44, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0xa5, 0xf9, 0xfc, - 0xd3, 0x77, 0x23, 0x06, 0x00, 0x00, 0x00, 0x0f, 0x39, 0x8c, 0xe7, - 0xff, 0xea, 0x76, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x35, 0xca, 0xff, 0xde, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xd6, 0xff, 0xb9, 0x25, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x86, 0xf9, - 0xee, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0xaa, - 0xdd, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x39, - 0x52, 0x4d, 0x30, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0f, 0x3b, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x30, 0x30, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x21, 0x9b, 0xea, 0xa5, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x15, 0x76, 0xea, 0xc5, 0x40, 0x03, 0x00, 0x00, 0x1f, 0xb9, 0x9e, + 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xa2, 0xe3, 0xe3, 0xe3, + 0xe3, 0xe3, 0xc8, 0x41, 0x00, 0x00, 0x19, 0xa2, 0xe3, 0xe3, 0xe3, + 0xe3, 0xe3, 0xcb, 0x41, 0x00, 0x00, 0x00, 0x48, 0x80, 0x80, 0x5b, + 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x66, 0x80, 0x72, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0e, 0x5b, 0x80, 0x80, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x3a, 0x9a, 0xe4, 0xff, 0xff, 0xfc, + 0xeb, 0xe3, 0xe3, 0xeb, 0xfc, 0xff, 0xff, 0xfc, 0xda, 0x7b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x32, 0xb2, 0xf6, 0xff, 0xee, 0xb8, 0x84, 0x59, 0x52, 0x64, 0x9a, - 0xcf, 0xf5, 0xff, 0xea, 0x86, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x09, 0x89, 0xf2, 0xde, 0x74, 0x29, 0x38, 0x9f, 0xfc, 0xf6, + 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0xe3, 0xde, 0x9a, 0x54, 0x29, + 0x1c, 0x1c, 0x21, 0x42, 0x87, 0xe4, 0xff, 0xca, 0x3c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xca, 0xff, + 0xe4, 0x5d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x13, 0x90, 0xf7, 0xfc, 0x9a, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0xf9, - 0xf3, 0x6e, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3c, 0xd3, 0xfc, 0xa2, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x67, 0xe4, 0x86, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xba, 0xf6, 0xa5, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, - 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, - 0x6b, 0xad, 0xe5, 0xff, 0xf9, 0xdc, 0x7e, 0x18, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xd5, 0x7b, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x16, 0xab, 0xb0, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1b, 0x86, 0xea, 0xda, 0x5a, 0x03, 0x00, 0x00, 0x00, + 0x0f, 0xb5, 0xe3, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xa2, + 0xe3, 0xe3, 0xe6, 0xf6, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, + 0xff, 0xf9, 0xe9, 0xe3, 0xe3, 0xcb, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0xd6, 0xf9, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xf5, 0xbc, 0x5e, 0x0f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x57, + 0x97, 0xd5, 0xec, 0xfc, 0xff, 0xff, 0xfc, 0xeb, 0xda, 0xb0, 0x84, + 0x46, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0xb0, 0xfc, 0xec, 0xc3, 0xcf, + 0xf6, 0xf9, 0xb2, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xc7, 0xf7, + 0xfc, 0xe6, 0xc3, 0xb6, 0xb6, 0xbb, 0xd9, 0xf7, 0xfc, 0xd8, 0x64, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x6f, 0xec, 0xff, 0xc5, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x6c, 0xe4, 0xff, 0xcf, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xe0, 0x49, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x4f, + 0xd4, 0xf9, 0x97, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x6f, 0xea, 0xf0, 0x70, 0x0d, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7b, 0xf6, 0x89, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x36, 0xc9, 0xff, 0xb3, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x80, 0xf7, 0xde, 0x55, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xbd, 0xbd, 0x26, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, - 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x6e, 0xe9, 0xff, 0xf1, 0xf1, 0xff, 0xff, 0xea, 0x89, - 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xcc, - 0xa6, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x9b, 0xd6, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1e, 0x44, 0x49, 0x49, 0x2e, 0x06, 0x00, 0x00, + 0x00, 0x08, 0x34, 0x49, 0x49, 0x5d, 0xc4, 0xff, 0xe0, 0x49, 0x00, + 0x00, 0x1c, 0xb6, 0xff, 0xda, 0x6e, 0x49, 0x49, 0x41, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x46, 0x7b, - 0xab, 0xcc, 0xe3, 0xe3, 0xde, 0xc3, 0x9e, 0x6e, 0x2c, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x0c, 0x3b, 0x5b, 0x7a, 0x80, 0x80, 0x7a, 0x59, + 0x40, 0x1c, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x40, 0xad, + 0xe6, 0xfc, 0xfc, 0xe3, 0x99, 0x32, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x35, 0x80, 0xc7, 0xeb, 0xfc, 0xff, 0xff, 0xff, 0xf1, 0xd6, + 0x9a, 0x49, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1b, 0x93, 0xf2, 0xfc, 0xbf, 0x4d, 0x0c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x76, 0xde, 0xff, + 0xde, 0x64, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x84, 0xf7, 0xec, 0x5f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xc7, 0xff, 0xab, 0x1c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x89, 0xe3, - 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0f, 0x7e, 0xf9, 0xe7, 0x66, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0xc9, 0xff, 0xb5, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0xdc, 0xb8, 0x22, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xca, 0xa0, 0x64, 0x64, 0xa0, - 0xe1, 0xff, 0xf0, 0x6a, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x14, 0xa6, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0xe9, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x99, 0xde, 0xe3, 0xc8, 0x53, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, - 0x37, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x40, 0x49, 0x30, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x25, 0x49, 0x34, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x16, 0x33, 0x49, 0x49, 0x44, 0x29, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x5b, 0xb6, 0xb6, 0x9f, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xd9, 0xff, - 0x9b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xf1, 0xf7, - 0x76, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x54, 0xe3, 0x89, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x25, 0x5e, 0x88, 0x88, 0x5c, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x35, 0x64, 0x88, 0x8f, 0x8f, + 0x8f, 0x71, 0x44, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0xa5, 0xf9, + 0xfc, 0xd3, 0x77, 0x23, 0x06, 0x00, 0x00, 0x00, 0x0f, 0x39, 0x8c, + 0xe7, 0xff, 0xea, 0x76, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xd6, 0xff, 0xb9, 0x25, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x86, + 0xf9, 0xee, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, + 0xaa, 0xdd, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, - 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3e, 0x13, - 0x00, 0x00, 0x13, 0x79, 0xf6, 0xff, 0xb5, 0x26, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x76, 0xe9, 0x64, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x42, 0xd9, 0x9b, 0x10, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x68, 0xf0, 0xff, - 0xf7, 0x90, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x6e, 0xc7, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x42, 0x99, 0xda, 0xe3, - 0xc7, 0x7b, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0xe3, 0xa2, 0x19, 0x00, 0x00, + 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x39, 0x52, 0x4d, 0x30, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0f, 0x3b, 0x1e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x30, 0x30, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0e, 0x1c, 0x1c, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x21, 0xb5, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, - 0x9b, 0xff, 0xe1, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x26, 0xbd, 0xbd, 0x26, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x32, 0xb2, 0xf6, 0xff, 0xee, 0xb8, 0x84, 0x59, 0x52, 0x64, + 0x9a, 0xcf, 0xf5, 0xff, 0xea, 0x86, 0x15, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, + 0xf9, 0xf3, 0x6e, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3c, 0xd3, 0xfc, 0xa2, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x67, 0xe4, 0x86, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0xe3, 0xff, 0xda, 0x44, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xe1, 0x8f, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xb5, 0xc3, 0x2e, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, - 0xd4, 0xff, 0xfc, 0xba, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xed, 0xa2, 0x1b, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x49, 0xd4, - 0xf9, 0xf6, 0xe9, 0xf7, 0xf2, 0x93, 0x1b, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x1c, 0x33, 0xa4, 0xff, 0xc6, - 0x3a, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x22, 0x6b, 0xad, 0xe5, 0xff, 0xf9, 0xdc, 0x7e, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xd5, 0x7b, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0xab, 0xb0, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x09, 0x8f, 0xff, 0xf1, 0x64, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x33, 0xcc, 0xff, 0xc3, 0x29, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0xe4, 0x5f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0xd6, 0xf9, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xbc, 0x5e, 0x0f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xe0, 0x49, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x36, 0xc9, 0xff, 0xb3, 0x21, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x80, 0xf7, 0xde, 0x55, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xbd, 0xbd, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, + 0x00, 0x00, 0x00, 0x6e, 0xe9, 0xff, 0xf1, 0xf1, 0xff, 0xff, 0xea, + 0x89, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, + 0xcc, 0xa6, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x9b, 0xd6, + 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1e, 0x44, 0x49, 0x49, 0x2e, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x46, + 0x7b, 0xab, 0xcc, 0xe3, 0xe3, 0xde, 0xc3, 0x9e, 0x6e, 0x2c, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x29, 0xc3, 0xb5, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x8f, - 0xe1, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x19, 0x1c, 0x1c, 0x0e, - 0x00, 0x20, 0xb8, 0xff, 0xff, 0xd8, 0x4f, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0xa1, 0xe4, - 0x65, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0xb8, 0xff, 0xe1, 0x79, 0x55, 0x9b, 0xf2, 0xec, 0x6f, 0x09, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x21, 0x5c, 0x91, 0xb6, 0xcc, - 0xf1, 0xff, 0xf2, 0xc0, 0x86, 0x36, 0x06, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x1c, - 0x1c, 0x1c, 0x14, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xf3, 0xff, 0x8a, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x54, 0xe9, 0xff, 0x9e, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x47, 0xdd, 0x97, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x84, 0xf7, 0xec, 0x5f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xc7, 0xff, 0xab, 0x1c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x89, + 0xe3, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xca, 0xa0, 0x64, 0x64, + 0xa0, 0xe1, 0xff, 0xf0, 0x6a, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x14, 0xa6, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x70, 0xe9, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x10, 0x9e, 0xd5, 0x3b, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x68, 0xea, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x23, 0x5c, 0x84, 0xa6, - 0xad, 0xad, 0x8e, 0x65, 0x8f, 0xf5, 0xff, 0xf9, 0x8c, 0x0f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x99, 0xde, 0xe3, 0xc8, + 0x53, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1e, 0x37, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x40, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x43, 0xd3, 0xad, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x06, 0x79, 0xf5, 0xff, 0x98, 0x06, 0x00, 0x2b, 0xbd, - 0xff, 0xc3, 0x32, 0x00, 0x00, 0x00, 0x00, 0x06, 0x49, 0xaa, 0xe7, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xc1, 0x4a, 0x06, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x3f, - 0x69, 0x8e, 0xad, 0xad, 0xad, 0x9b, 0x70, 0x36, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x25, 0x49, 0x34, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x33, 0x33, 0x33, 0x25, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, - 0xe3, 0xff, 0xab, 0x16, 0x00, 0x00, 0x00, 0x00, 0x75, 0xf9, 0xff, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x22, 0xb8, 0xc4, 0x2a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x16, 0x33, 0x49, 0x49, 0x44, 0x29, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x5b, 0xb6, 0xb6, 0x9f, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xd9, + 0xff, 0x9b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xf1, + 0xf7, 0x76, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x54, 0xe3, 0x89, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, - 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0xe9, 0x5b, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0xde, 0xa3, 0x0a, 0x00, 0x00, + 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3e, + 0x13, 0x00, 0x00, 0x13, 0x79, 0xf6, 0xff, 0xb5, 0x26, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x76, 0xe9, 0x64, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x42, 0xd9, 0x9b, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x72, 0xb8, - 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xf5, 0xff, 0xff, 0xb6, - 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0e, 0x91, 0xe6, 0x65, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0xb9, 0xff, 0xe2, 0x4e, 0x00, - 0x00, 0x06, 0x79, 0xf6, 0xec, 0x66, 0x00, 0x00, 0x00, 0x09, 0x60, - 0xd4, 0xff, 0xff, 0xfb, 0xe6, 0xc6, 0xd6, 0xff, 0xf6, 0xf3, 0xff, - 0xff, 0xc7, 0x48, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, - 0x55, 0x9a, 0xd4, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xc9, - 0x72, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x42, 0x7b, 0xa3, 0xcc, - 0xcc, 0xcc, 0xba, 0x96, 0x6b, 0x30, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x30, 0xca, 0xff, 0xc4, 0x2a, 0x00, 0x00, 0x00, 0x0a, - 0x91, 0xff, 0xef, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x84, 0xe9, 0x5b, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x68, 0xf0, + 0xff, 0xf7, 0x90, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x6e, 0xc7, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x42, 0x99, 0xda, + 0xe3, 0xc7, 0x7b, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0xe3, 0xa2, 0x19, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0e, 0x1c, 0x1c, 0x18, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x21, 0xb5, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x9b, 0xff, 0xe1, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0xbd, 0xbd, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, - 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, - 0xe9, 0x86, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0xbf, 0xd2, - 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x41, - 0xb6, 0xf9, 0xff, 0xf9, 0xe0, 0xbb, 0xad, 0xb2, 0xda, 0xfc, 0xff, - 0xff, 0xff, 0x8a, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0xc9, 0xb9, - 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xe7, 0xff, - 0xb8, 0x23, 0x00, 0x00, 0x00, 0x44, 0xde, 0xff, 0x96, 0x06, 0x00, - 0x00, 0x13, 0xa4, 0xff, 0xf0, 0xc1, 0x83, 0x40, 0x1a, 0x80, 0xff, - 0xc4, 0x6e, 0xb6, 0xfb, 0xff, 0xc8, 0x36, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x5c, 0xb7, 0xf0, 0xff, 0xff, 0xff, 0xf6, 0xe4, 0xe0, 0xe0, - 0xef, 0xff, 0xff, 0xf9, 0xa5, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x55, 0xac, 0xee, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xdc, 0xa2, 0x4a, - 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xde, 0x44, 0x00, - 0x00, 0x00, 0x1c, 0xb0, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, - 0xe3, 0x89, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0xe3, 0xff, 0xda, + 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xe1, + 0x8f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xb5, 0xc3, 0x2e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x49, 0xd4, 0xff, 0xfc, 0xba, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xed, 0xa2, 0x1b, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x49, + 0xd4, 0xf9, 0xf6, 0xe9, 0xf7, 0xf2, 0x93, 0x1b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x1c, 0x33, 0xa4, 0xff, + 0xc6, 0x3a, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x09, 0x8f, 0xff, 0xf1, 0x64, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xc3, 0x29, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0xe4, + 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x33, 0xcc, 0xab, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0e, 0x9b, 0xf0, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x29, 0xc3, 0xb5, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x8f, 0xe1, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x40, 0xbf, 0xfc, 0xf7, 0xd3, 0x86, 0x4f, 0x29, 0x1c, 0x2e, - 0xa0, 0xf9, 0xff, 0xff, 0xff, 0xda, 0x69, 0x0d, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x19, 0x1c, 0x1c, + 0x0e, 0x00, 0x20, 0xb8, 0xff, 0xff, 0xd8, 0x4f, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0xa1, + 0xe4, 0x65, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x30, 0xb8, 0xff, 0xe1, 0x79, 0x55, 0x9b, 0xf2, 0xec, 0x6f, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x21, 0x5c, 0x91, 0xb6, + 0xcc, 0xf1, 0xff, 0xf2, 0xc0, 0x86, 0x36, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, + 0x1c, 0x1c, 0x1c, 0x14, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x80, 0xe4, 0x6f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0xf7, 0xff, 0x96, 0x06, 0x00, 0x00, 0x00, 0x29, 0xc3, 0xff, - 0xba, 0x25, 0x00, 0x00, 0x03, 0x82, 0xd8, 0x80, 0x31, 0x0c, 0x00, - 0x00, 0x80, 0xff, 0xb6, 0x1f, 0x32, 0xbe, 0xff, 0xf7, 0x8b, 0x0e, - 0x00, 0x00, 0x00, 0x52, 0xdd, 0xff, 0xff, 0xf7, 0xcf, 0x9b, 0x70, - 0x50, 0x49, 0x49, 0x64, 0xa0, 0xde, 0xfc, 0xf2, 0xa5, 0x32, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x8b, - 0xde, 0xfc, 0xf9, 0xd3, 0xaf, 0x8a, 0x80, 0x80, 0x85, 0xa6, 0xcc, - 0xe9, 0xf6, 0xd4, 0x80, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xb0, 0xff, - 0xe3, 0x49, 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xde, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0xb3, 0xc7, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xf3, 0xff, + 0x8a, 0x06, 0x00, 0x00, 0x00, 0x00, 0x54, 0xe9, 0xff, 0x9e, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x47, 0xdd, 0x97, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x9b, 0xd6, 0x44, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x64, 0xef, 0x7e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x9e, 0xd5, 0x3b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x68, 0xea, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x40, 0xbf, 0xfc, 0xf2, 0x9b, 0x3c, 0x09, 0x00, - 0x00, 0x03, 0x4f, 0xd8, 0xff, 0xf9, 0xd1, 0xea, 0xff, 0xde, 0x69, - 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0xc0, 0xca, 0x35, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x3a, 0x49, 0x0d, - 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xb6, 0x1c, 0x00, 0x58, 0xe5, - 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x45, 0xda, 0xfc, 0xcf, 0x80, - 0x38, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x52, 0xbf, 0xfc, - 0xf9, 0xb2, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x21, 0x96, 0xf2, 0xfc, 0xcf, 0x86, 0x3c, 0x18, 0x06, 0x00, 0x00, - 0x03, 0x14, 0x33, 0x54, 0x86, 0xb6, 0xa9, 0x52, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x23, 0x5c, 0x84, + 0xa6, 0xad, 0xad, 0x8e, 0x65, 0x8f, 0xf5, 0xff, 0xf9, 0x8c, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x8f, 0xff, 0xf1, 0x64, 0x00, 0x00, 0x00, 0x39, 0xcc, 0xff, - 0xc3, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x76, 0xe9, 0x71, 0x00, 0x00, + 0x00, 0x00, 0x43, 0xd3, 0xad, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x06, 0x79, 0xf5, 0xff, 0x98, 0x06, 0x00, 0x2b, + 0xbd, 0xff, 0xc3, 0x32, 0x00, 0x00, 0x00, 0x00, 0x06, 0x49, 0xaa, + 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xc1, 0x4a, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, + 0x3f, 0x69, 0x8e, 0xad, 0xad, 0xad, 0x9b, 0x70, 0x36, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x33, 0x33, 0x33, + 0x25, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x49, 0xe3, 0xff, 0xab, 0x16, 0x00, 0x00, 0x00, 0x00, 0x75, 0xf9, + 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x22, 0xb8, 0xc4, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xe9, - 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xd1, 0xad, 0x1a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0xe9, 0x5b, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0xde, 0xa3, 0x0a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x72, + 0xb8, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xf5, 0xff, 0xff, + 0xb6, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x91, 0xe6, 0x65, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0xb9, 0xff, 0xe2, 0x4e, + 0x00, 0x00, 0x06, 0x79, 0xf6, 0xec, 0x66, 0x00, 0x00, 0x00, 0x09, + 0x60, 0xd4, 0xff, 0xff, 0xfb, 0xe6, 0xc6, 0xd6, 0xff, 0xf6, 0xf3, + 0xff, 0xff, 0xc7, 0x48, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x55, 0x9a, 0xd4, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, + 0xc9, 0x72, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x42, 0x7b, 0xa3, + 0xcc, 0xcc, 0xcc, 0xba, 0x96, 0x6b, 0x30, 0x0e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0xca, 0xff, 0xc4, 0x2a, 0x00, 0x00, 0x00, + 0x0a, 0x91, 0xff, 0xef, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x84, 0xe9, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0xba, 0xfc, 0xf7, 0x9b, 0x21, - 0x00, 0x00, 0x00, 0x00, 0x27, 0xb0, 0xfc, 0xfc, 0xb6, 0x3a, 0x79, - 0xf0, 0xff, 0xde, 0x5a, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x65, 0xe4, 0x80, - 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, - 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xb6, 0x1c, - 0x00, 0x1a, 0xad, 0xff, 0xf1, 0x64, 0x00, 0x00, 0x00, 0x2e, 0xb7, - 0xa7, 0x45, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x45, 0xcf, 0xff, 0xf6, 0x65, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x25, 0x96, 0xf2, 0xf2, 0xb0, 0x45, 0x09, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x1c, 0x1c, 0x14, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, - 0x52, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xd9, - 0xad, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, - 0xe0, 0x49, 0x00, 0x00, 0x03, 0x2b, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x49, 0x84, 0xee, 0xaf, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x62, - 0xca, 0xda, 0x6e, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x49, 0x2b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x95, 0xf7, 0xff, - 0xc0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x80, 0xf2, 0xff, 0xcf, - 0x47, 0x00, 0x15, 0xa1, 0xf7, 0xff, 0xb6, 0x27, 0x00, 0x00, 0x00, + 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x54, 0xe9, 0x86, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0xbf, + 0xd2, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0x41, 0xb6, 0xf9, 0xff, 0xf9, 0xe0, 0xbb, 0xad, 0xb2, 0xda, 0xfc, + 0xff, 0xff, 0xff, 0x8a, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0xc9, + 0xb9, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xe7, + 0xff, 0xb8, 0x23, 0x00, 0x00, 0x00, 0x44, 0xde, 0xff, 0x96, 0x06, + 0x00, 0x00, 0x13, 0xa4, 0xff, 0xf0, 0xc1, 0x83, 0x40, 0x1a, 0x80, + 0xff, 0xc4, 0x6e, 0xb6, 0xfb, 0xff, 0xc8, 0x36, 0x00, 0x00, 0x00, + 0x00, 0x18, 0x5c, 0xb7, 0xf0, 0xff, 0xff, 0xff, 0xf6, 0xe4, 0xe0, + 0xe0, 0xef, 0xff, 0xff, 0xf9, 0xa5, 0x29, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x55, 0xac, + 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xdc, 0xa2, + 0x4a, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xde, 0x44, + 0x00, 0x00, 0x00, 0x1c, 0xb0, 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x21, 0xb3, 0xcf, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, - 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, 0x00, - 0x00, 0x0f, 0x42, 0x1c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x89, 0xfc, 0xff, 0xa1, 0x19, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x9c, 0xf2, 0xfc, 0xa5, 0x27, 0x03, - 0x00, 0x00, 0x00, 0x15, 0x4c, 0x7a, 0x80, 0x70, 0x35, 0x09, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, - 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x19, 0xab, 0xe5, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, - 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x11, 0x92, 0xe3, 0xe3, - 0xe3, 0xe3, 0xe3, 0xe3, 0xeb, 0xfc, 0xf3, 0xe3, 0xe3, 0xe3, 0xe3, - 0xe3, 0xe3, 0xe6, 0xf6, 0xf9, 0xe9, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, - 0xe3, 0xe3, 0xe3, 0xe3, 0x92, 0x11, 0x00, 0x00, 0x00, 0x00, 0x52, - 0xea, 0xff, 0xec, 0x65, 0x03, 0x00, 0x00, 0x00, 0x03, 0x4f, 0xd8, - 0xff, 0xe4, 0x67, 0x09, 0x00, 0x00, 0x3c, 0xca, 0xff, 0xf2, 0x7b, - 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x5d, 0xe1, 0xac, 0x15, 0x00, 0x00, 0x00, - 0x00, 0x64, 0xf1, 0xff, 0xa0, 0x0f, 0x00, 0x00, 0x00, 0x33, 0xcc, - 0xff, 0xad, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xff, 0xb6, 0x1c, 0x00, 0x06, 0x96, 0xff, 0xff, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0xe9, 0xff, - 0xd1, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x06, 0x82, 0xf0, 0xff, 0xc5, - 0x3a, 0x00, 0x00, 0x00, 0x06, 0x41, 0xa3, 0xde, 0xfc, 0xff, 0xf7, - 0xca, 0x86, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, 0xb6, 0x1c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x7b, 0xf9, 0x6d, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, - 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x09, - 0x59, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0xaf, 0xf1, 0xce, - 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0xdb, 0xf1, 0xa6, 0x8f, - 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x59, 0x09, 0x00, 0x00, - 0x00, 0x0a, 0x94, 0xff, 0xff, 0xb9, 0x25, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0x79, 0xc8, 0xcc, 0x8a, 0x15, 0x00, 0x00, 0x00, 0x0a, 0x86, - 0xf9, 0xff, 0xb8, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0xa3, 0xee, 0x4e, - 0x00, 0x00, 0x00, 0x00, 0x40, 0xda, 0xff, 0xc4, 0x2d, 0x00, 0x00, - 0x00, 0x54, 0xe9, 0xf9, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xb6, 0x1c, 0x00, 0x23, - 0xb8, 0xff, 0xf9, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x49, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xd6, - 0xff, 0xf3, 0x6e, 0x03, 0x00, 0x00, 0x00, 0x4a, 0xc7, 0xff, 0xff, - 0xe5, 0xd1, 0xf0, 0xff, 0xf9, 0xae, 0x23, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x52, 0xe3, - 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0xd9, 0xaa, - 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, - 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x49, 0xe0, 0x9b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, - 0xe6, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x48, 0xdb, 0xff, 0xf3, 0x6e, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x04, 0x16, 0x1f, 0x1f, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3c, 0xd3, 0xff, 0xea, 0x67, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x52, 0xe0, 0xbb, 0x2f, 0x00, 0x00, 0x00, 0x15, 0xa3, 0xff, 0xee, - 0x69, 0x00, 0x00, 0x0c, 0x91, 0xfc, 0xdd, 0x4f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xb6, - 0x1c, 0x00, 0x69, 0xee, 0xff, 0xe7, 0x50, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x54, 0xe6, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, - 0x0c, 0x83, 0xfb, 0xff, 0xb9, 0x25, 0x00, 0x00, 0x06, 0x4a, 0xd6, - 0xff, 0xe7, 0x95, 0x3f, 0x25, 0x55, 0xb6, 0xf9, 0xfb, 0xae, 0x32, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, - 0x00, 0x52, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0xa3, 0xe8, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, - 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, - 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x30, 0xc3, 0xbf, 0x29, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x8b, 0xf9, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x77, 0xff, 0xff, 0xde, - 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xaf, 0xff, 0xff, 0x96, 0x04, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x15, 0x8e, 0xf1, 0x77, 0x09, 0x00, 0x00, 0x00, - 0x5c, 0xe7, 0xff, 0xb5, 0x1f, 0x07, 0x4d, 0xd8, 0xfc, 0xa7, 0x1f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0xff, 0xb6, 0x1c, 0x18, 0xb5, 0xff, 0xff, 0xc3, 0x2c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x86, 0xf9, 0xff, 0xc3, 0x30, - 0x00, 0x00, 0x00, 0x2a, 0xbd, 0xff, 0xf5, 0x79, 0x06, 0x00, 0x00, - 0x25, 0xb1, 0xff, 0xfb, 0x8e, 0x15, 0x00, 0x00, 0x00, 0x37, 0xc2, - 0xff, 0xf9, 0x86, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, - 0x80, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x65, 0xf6, 0x8e, 0x0e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, - 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xa6, 0xda, 0x45, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0xf9, 0x81, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x9b, - 0xff, 0xff, 0xc3, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x8f, 0xff, - 0xff, 0xba, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0xda, 0xc9, 0x3f, - 0x00, 0x00, 0x00, 0x1b, 0x97, 0xfc, 0xf0, 0xad, 0x8b, 0xc5, 0xfc, - 0xd8, 0x4f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0xff, 0xc3, 0x64, 0x9a, 0xf0, 0xff, 0xf7, - 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xcf, 0xff, - 0xff, 0x9b, 0x14, 0x00, 0x00, 0x00, 0x54, 0xe3, 0xff, 0xd5, 0x42, - 0x00, 0x00, 0x00, 0x5f, 0xea, 0xff, 0xda, 0x36, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x70, 0xf0, 0xff, 0xc7, 0x30, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, 0xb6, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0xd5, 0xc6, 0x33, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, - 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x81, - 0xf9, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0xda, 0xa6, - 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x29, 0xbb, 0xff, 0xff, 0xa6, 0x14, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x70, 0xf7, 0xff, 0xda, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, - 0x82, 0xed, 0x9a, 0x13, 0x00, 0x00, 0x00, 0x2b, 0xa7, 0xea, 0xff, - 0xff, 0xfc, 0xd8, 0x69, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x33, 0xa4, 0xff, 0xef, 0xe6, 0xfc, - 0xff, 0xfc, 0xba, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x3f, - 0xb4, 0xfc, 0xff, 0xea, 0x53, 0x03, 0x00, 0x00, 0x00, 0x7a, 0xfc, - 0xff, 0xb2, 0x21, 0x00, 0x00, 0x0e, 0x9b, 0xff, 0xff, 0x94, 0x06, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xb3, 0xff, 0xf1, 0x64, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x8f, 0xff, 0xf1, 0x64, 0x00, 0x00, 0x00, 0x39, - 0xcc, 0xff, 0xc3, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, - 0xa1, 0xef, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, - 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, - 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x5f, 0xf6, 0x8e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x25, 0xba, 0xc6, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x44, 0xda, 0xff, 0xff, 0x85, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x4f, 0xe6, 0xff, 0xf9, 0x4d, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0d, 0x42, 0x75, 0x80, 0x5f, 0x21, 0x03, - 0x00, 0x00, 0x00, 0x20, 0xac, 0xdb, 0x4c, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x65, 0xab, 0xb6, 0x95, 0x49, 0x0d, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x52, 0x9e, 0xcc, 0xf1, 0xff, - 0xff, 0xff, 0xff, 0xf9, 0xb7, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x2a, - 0x4a, 0x80, 0xcf, 0xfc, 0xff, 0xf9, 0x97, 0x0f, 0x00, 0x00, 0x00, - 0x0e, 0x9b, 0xff, 0xff, 0x8e, 0x0e, 0x00, 0x00, 0x29, 0xc3, 0xff, - 0xf0, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xff, - 0xff, 0x8f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xb0, 0xff, 0xe3, 0x49, 0x00, - 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xde, 0x44, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x65, 0xf0, 0xa0, 0x13, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, - 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, - 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x0e, 0x1c, 0x1c, 0x1c, - 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x50, 0xe7, 0xb6, 0x34, 0x1c, 0x1c, - 0x1c, 0x1c, 0x1c, 0x21, 0xa2, 0xe3, 0x5d, 0x1c, 0x1c, 0x1c, 0x1c, - 0x1c, 0x1c, 0x1c, 0x0e, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xff, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, - 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x80, 0xd4, 0xf9, 0xff, - 0xec, 0xad, 0x40, 0x03, 0x00, 0x00, 0x00, 0x55, 0xdb, 0xa2, 0x1b, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x16, 0x1c, 0x0e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x89, 0xe3, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xf7, 0xd3, 0x86, 0x32, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x26, 0x54, - 0x79, 0x9e, 0xc4, 0xe1, 0xf7, 0xff, 0xff, 0xf2, 0xa5, 0x2b, 0x00, - 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x70, 0x00, 0x00, 0x00, - 0x44, 0xde, 0xff, 0xd1, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x59, 0xff, 0xff, 0xb0, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, - 0xde, 0x44, 0x00, 0x00, 0x00, 0x1c, 0xb0, 0xff, 0xe3, 0x49, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xb3, 0xd9, 0x42, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x0e, 0x76, - 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xc4, 0xf6, 0xe7, - 0xbe, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xdf, 0xf6, 0xcb, 0xb6, - 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0x76, 0x0e, 0x00, 0x00, 0x49, - 0xe0, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, - 0xe3, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x80, 0xf2, - 0xf9, 0xda, 0xbb, 0xe4, 0xfc, 0xba, 0x30, 0x00, 0x00, 0x00, 0x15, - 0x90, 0xe4, 0x65, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x93, - 0xf0, 0xff, 0xff, 0xf7, 0xf4, 0xff, 0xda, 0x7e, 0x3c, 0x09, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x27, - 0x7b, 0xbd, 0xe6, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xd8, 0x80, - 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x70, - 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0xca, 0xff, 0xc4, 0x2a, 0x00, 0x00, 0x00, 0x0a, 0x91, 0xff, - 0xef, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, - 0xea, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, - 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, - 0x00, 0x10, 0x84, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, - 0xcc, 0xd6, 0xf5, 0xf0, 0xd1, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, - 0xe8, 0xf9, 0xda, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x84, 0x10, - 0x00, 0x00, 0x49, 0xe0, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, - 0x42, 0xd4, 0xff, 0xc2, 0x4e, 0x25, 0x79, 0xea, 0xf6, 0x86, 0x0c, - 0x00, 0x00, 0x00, 0x3c, 0xd3, 0xad, 0x1c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x66, 0xea, 0xff, 0xff, 0xdb, 0x8f, 0xaf, 0xff, 0xb6, 0x1c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x32, 0xa7, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe5, - 0xa7, 0x52, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, - 0xff, 0xff, 0x70, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xcc, 0x33, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, 0xb6, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xab, 0x16, 0x00, 0x00, 0x00, - 0x00, 0x75, 0xf9, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3c, 0xcf, 0xa4, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, - 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, - 0xe0, 0x49, 0x00, 0x00, 0x00, 0x10, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, - 0x1f, 0x1f, 0x1f, 0x1f, 0x4c, 0xd2, 0xc8, 0x41, 0x1f, 0x1f, 0x1f, - 0x1f, 0x1f, 0x1f, 0x9d, 0xec, 0x6a, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, - 0x1f, 0x10, 0x00, 0x00, 0x00, 0x40, 0xd6, 0xff, 0xff, 0x8a, 0x06, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0xe9, 0xff, 0xf5, 0x48, 0x00, - 0x00, 0x00, 0x0c, 0x91, 0xfc, 0xe3, 0x5c, 0x00, 0x00, 0x15, 0xa3, - 0xff, 0xd5, 0x3b, 0x00, 0x00, 0x00, 0x09, 0x86, 0xeb, 0x73, 0x06, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x2c, 0xc3, 0xff, 0xff, 0xc7, 0x3e, 0x09, 0x80, - 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x38, 0xb7, 0xfc, 0xff, 0xff, 0xf9, 0xdc, 0xb8, - 0x88, 0x64, 0x39, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x16, 0xab, 0xff, 0xff, 0x7c, 0x06, 0x00, 0x00, 0x35, 0xcf, - 0xff, 0xe2, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, - 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xf3, 0xff, 0x8a, 0x06, - 0x00, 0x00, 0x00, 0x00, 0x54, 0xe9, 0xff, 0x9e, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0xa4, 0xcf, 0x35, 0x00, 0x00, + 0x54, 0xe3, 0x89, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0xaa, 0xda, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0xea, 0x75, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0xb7, 0xff, - 0xff, 0xab, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0xf9, 0xff, - 0xd6, 0x29, 0x00, 0x00, 0x00, 0x35, 0xcf, 0xff, 0xbf, 0x29, 0x00, - 0x00, 0x00, 0x61, 0xef, 0xf3, 0x68, 0x00, 0x00, 0x00, 0x00, 0x37, - 0xc9, 0xb9, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xe7, 0xff, 0xee, 0x69, - 0x00, 0x00, 0x80, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x9d, 0xf9, 0xff, 0xfc, 0xc9, - 0x7b, 0x47, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x8a, 0xff, 0xff, 0xa0, 0x16, 0x00, - 0x00, 0x18, 0xaf, 0xff, 0xff, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x06, 0x96, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x91, 0xff, - 0xef, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xca, 0xff, 0xc4, - 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0xea, - 0x6e, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x33, 0xcc, 0xab, 0x1c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x9b, 0xf0, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x40, 0xbf, 0xfc, 0xf7, 0xd3, 0x86, 0x4f, 0x29, 0x1c, + 0x2e, 0xa0, 0xf9, 0xff, 0xff, 0xff, 0xda, 0x69, 0x0d, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x80, 0xe4, 0x6f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x70, 0xf7, 0xff, 0x96, 0x06, 0x00, 0x00, 0x00, 0x29, 0xc3, + 0xff, 0xba, 0x25, 0x00, 0x00, 0x03, 0x82, 0xd8, 0x80, 0x31, 0x0c, + 0x00, 0x00, 0x80, 0xff, 0xb6, 0x1f, 0x32, 0xbe, 0xff, 0xf7, 0x8b, + 0x0e, 0x00, 0x00, 0x00, 0x52, 0xdd, 0xff, 0xff, 0xf7, 0xcf, 0x9b, + 0x70, 0x50, 0x49, 0x49, 0x64, 0xa0, 0xde, 0xfc, 0xf2, 0xa5, 0x32, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, + 0x8b, 0xde, 0xfc, 0xf9, 0xd3, 0xaf, 0x8a, 0x80, 0x80, 0x85, 0xa6, + 0xcc, 0xe9, 0xf6, 0xd4, 0x80, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xb0, + 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xde, 0x44, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x21, 0xb3, 0xc7, 0x35, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x9b, 0xd6, 0x44, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xef, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7b, 0xea, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xd5, - 0x9e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x13, 0x99, 0xff, 0xff, 0xc4, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, - 0x91, 0xff, 0xff, 0xb8, 0x15, 0x00, 0x00, 0x00, 0x5b, 0xec, 0xff, - 0x97, 0x0e, 0x00, 0x00, 0x00, 0x3b, 0xd5, 0xff, 0x91, 0x0a, 0x00, - 0x00, 0x00, 0x06, 0x79, 0xea, 0x79, 0x0a, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0xf9, - 0xff, 0xb8, 0x23, 0x00, 0x00, 0x80, 0xff, 0xb6, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0xf5, 0xff, - 0xf6, 0x9f, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0xf5, 0xff, - 0xbd, 0x2a, 0x00, 0x00, 0x06, 0x84, 0xfb, 0xff, 0xb1, 0x11, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3d, 0xd0, 0xff, 0xff, 0xb6, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x40, 0xbf, 0xfc, 0xf2, 0x9b, 0x3c, 0x09, + 0x00, 0x00, 0x03, 0x4f, 0xd8, 0xff, 0xf9, 0xd1, 0xea, 0xff, 0xde, + 0x69, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xc0, 0xca, 0x35, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x3a, 0x49, + 0x0d, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xb6, 0x1c, 0x00, 0x58, + 0xe5, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x45, 0xda, 0xfc, 0xcf, + 0x80, 0x38, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x52, 0xbf, + 0xfc, 0xf9, 0xb2, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x21, 0x96, 0xf2, 0xfc, 0xcf, 0x86, 0x3c, 0x18, 0x06, 0x00, + 0x00, 0x03, 0x14, 0x33, 0x54, 0x86, 0xb6, 0xa9, 0x52, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x21, 0xb5, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, - 0x9b, 0xff, 0xe1, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x8f, 0xff, 0xf1, 0x64, 0x00, 0x00, 0x00, 0x39, 0xcc, + 0xff, 0xc3, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x76, 0xe9, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x38, 0xcf, 0xab, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x70, 0x80, 0x70, 0x25, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x53, 0xe1, 0x8f, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x21, 0xb5, 0xc3, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x65, 0xf0, 0xff, 0xe6, 0x54, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x26, 0xbd, 0xff, 0xf7, 0x84, 0x03, 0x00, 0x00, 0x00, - 0x7a, 0xfc, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x21, 0xbb, 0xff, - 0xb0, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x30, 0xc0, 0xca, 0x3c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0xff, 0xff, 0x96, 0x06, 0x00, 0x00, 0x80, 0xff, 0xb6, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, - 0x8f, 0xff, 0xff, 0xc0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x42, 0xd5, 0xff, 0xe3, 0x54, 0x00, 0x00, 0x00, 0x4c, 0xda, 0xff, - 0xea, 0x53, 0x03, 0x00, 0x00, 0x00, 0x13, 0x8d, 0xf9, 0xff, 0xff, - 0x9b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x4a, 0xd9, 0xff, 0x9b, 0x0e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x64, 0xf1, 0xf7, 0x76, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0e, 0x9b, 0xd9, 0x42, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, + 0xe9, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xd1, 0xad, + 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0xba, 0xfc, 0xf7, 0x9b, + 0x21, 0x00, 0x00, 0x00, 0x00, 0x27, 0xb0, 0xfc, 0xfc, 0xb6, 0x3a, + 0x79, 0xf0, 0xff, 0xde, 0x5a, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x65, 0xe4, + 0x80, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x8f, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xb6, + 0x1c, 0x00, 0x1a, 0xad, 0xff, 0xf1, 0x64, 0x00, 0x00, 0x00, 0x2e, + 0xb7, 0xa7, 0x45, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x45, 0xcf, 0xff, 0xf6, 0x65, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x25, 0x96, 0xf2, 0xf2, 0xb0, 0x45, 0x09, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x1c, 0x1c, + 0x14, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, + 0x00, 0x52, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, + 0xd9, 0xad, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, + 0xff, 0xe0, 0x49, 0x00, 0x00, 0x03, 0x2b, 0x49, 0x49, 0x49, 0x49, + 0x49, 0x49, 0x84, 0xee, 0xaf, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, + 0x62, 0xca, 0xda, 0x6e, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, + 0x49, 0x49, 0x2b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x95, 0xf7, + 0xff, 0xc0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x80, 0xf2, 0xff, + 0xcf, 0x47, 0x00, 0x15, 0xa1, 0xf7, 0xff, 0xb6, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x21, 0xb3, 0xcf, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0xff, 0xff, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, + 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x8f, 0xff, 0xff, 0x80, 0x00, + 0x00, 0x00, 0x0f, 0x42, 0x1c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x89, 0xfc, 0xff, 0xa1, 0x19, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x9c, 0xf2, 0xfc, 0xa5, 0x27, + 0x03, 0x00, 0x00, 0x00, 0x15, 0x4c, 0x7a, 0x80, 0x70, 0x35, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0xc3, 0xb5, 0x1e, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x09, 0x8f, 0xe1, 0x4a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0xc0, 0xff, 0xfc, - 0x89, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0xe6, 0xff, 0xd9, 0x4a, 0x00, - 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0xb6, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x03, 0x65, - 0xe4, 0x8f, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7a, 0xfc, 0xff, 0x96, 0x06, 0x00, 0x00, - 0x80, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x25, 0xba, 0xff, 0xf7, 0x76, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, + 0x80, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x19, 0xa1, 0xff, 0xfc, 0x9a, 0x13, 0x00, 0x00, - 0x13, 0x7d, 0xf0, 0xff, 0xbe, 0x52, 0x13, 0x03, 0x21, 0x77, 0xe1, - 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x84, 0xf7, 0xec, 0x5f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xc7, 0xff, 0xab, 0x1c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xe9, 0x76, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, + 0x00, 0x00, 0x19, 0xab, 0xe5, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x11, 0x92, 0xe3, + 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xeb, 0xfc, 0xf3, 0xe3, 0xe3, 0xe3, + 0xe3, 0xe3, 0xe3, 0xe6, 0xf6, 0xf9, 0xe9, 0xe3, 0xe3, 0xe3, 0xe3, + 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0x92, 0x11, 0x00, 0x00, 0x00, 0x00, + 0x52, 0xea, 0xff, 0xec, 0x65, 0x03, 0x00, 0x00, 0x00, 0x03, 0x4f, + 0xd8, 0xff, 0xe4, 0x67, 0x09, 0x00, 0x00, 0x3c, 0xca, 0xff, 0xf2, + 0x7b, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x5d, 0xe1, 0xac, 0x15, 0x00, 0x00, + 0x00, 0x00, 0x64, 0xf1, 0xff, 0xa0, 0x0f, 0x00, 0x00, 0x00, 0x33, + 0xcc, 0xff, 0xad, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0xff, 0xb6, 0x1c, 0x00, 0x06, 0x96, 0xff, + 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0xe9, + 0xff, 0xd1, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x06, 0x82, 0xf0, 0xff, + 0xc5, 0x3a, 0x00, 0x00, 0x00, 0x06, 0x41, 0xa3, 0xde, 0xfc, 0xff, + 0xf7, 0xca, 0x86, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x9b, - 0xd9, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xe9, 0x76, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, - 0x72, 0xf9, 0xff, 0xca, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x9a, 0xfc, 0xfc, - 0x9a, 0x15, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0xb3, 0xdf, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0xe6, 0xff, 0xc0, - 0x2b, 0x00, 0x00, 0x80, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x08, - 0x0b, 0x00, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xe6, 0x4f, 0x00, + 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, 0xb6, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x7b, 0xf9, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x53, 0xea, 0xff, 0xde, - 0x4c, 0x00, 0x00, 0x00, 0x15, 0x89, 0xea, 0xfc, 0xde, 0xa0, 0x85, - 0xb3, 0xec, 0xff, 0xff, 0xff, 0xf1, 0x64, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0xc9, 0xff, - 0xb3, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, - 0xf7, 0xde, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x33, 0xcc, 0xab, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, + 0x09, 0x59, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0xaf, 0xf1, + 0xce, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0xdb, 0xf1, 0xa6, + 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x59, 0x09, 0x00, + 0x00, 0x00, 0x0a, 0x94, 0xff, 0xff, 0xb9, 0x25, 0x00, 0x00, 0x00, + 0x00, 0x0f, 0x79, 0xc8, 0xcc, 0x8a, 0x15, 0x00, 0x00, 0x00, 0x0a, + 0x86, 0xf9, 0xff, 0xb8, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0xa3, 0xee, + 0x4e, 0x00, 0x00, 0x00, 0x00, 0x40, 0xda, 0xff, 0xc4, 0x2d, 0x00, + 0x00, 0x00, 0x54, 0xe9, 0xf9, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xb6, 0x1c, 0x00, + 0x23, 0xb8, 0xff, 0xf9, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x49, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x2f, + 0xd6, 0xff, 0xf3, 0x6e, 0x03, 0x00, 0x00, 0x00, 0x4a, 0xc7, 0xff, + 0xff, 0xe5, 0xd1, 0xf0, 0xff, 0xf9, 0xae, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x64, 0xe9, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x33, 0xcc, 0xa6, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x25, 0xc9, 0xff, 0xf7, 0x84, 0x0d, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x5c, - 0xde, 0xff, 0xde, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0xfc, - 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x21, 0xbb, 0xff, 0xb0, 0x1c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x5d, 0xe1, 0xac, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, - 0xbd, 0xff, 0xf0, 0x82, 0x06, 0x00, 0x80, 0xff, 0xb6, 0x1c, 0x00, - 0x00, 0x1e, 0x6f, 0x55, 0x00, 0x00, 0x00, 0x00, 0x25, 0xba, 0xff, - 0xeb, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, - 0xa3, 0xf9, 0xfc, 0xa5, 0x21, 0x00, 0x00, 0x00, 0x15, 0x70, 0xd3, - 0xf7, 0xff, 0xff, 0xff, 0xec, 0xe5, 0xff, 0xff, 0xd6, 0x3c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, - 0x8d, 0xf9, 0xec, 0x65, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x35, 0xca, 0xfc, 0xac, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0e, 0x95, 0xdb, 0x4c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x52, + 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0xd9, + 0xaa, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, + 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x49, 0xe0, 0x9b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xad, 0xe6, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0xdb, 0xff, 0xf3, 0x6e, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x16, 0x1f, 0x1f, 0x10, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x3c, 0xd3, 0xff, 0xea, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x52, 0xe0, 0xbb, 0x2f, 0x00, 0x00, 0x00, 0x15, 0xa3, 0xff, + 0xee, 0x69, 0x00, 0x00, 0x0c, 0x91, 0xfc, 0xdd, 0x4f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, + 0xb6, 0x1c, 0x00, 0x69, 0xee, 0xff, 0xe7, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xd6, 0x9b, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x14, 0xa6, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x68, 0xe4, 0xff, 0xd8, - 0x4f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x2b, 0xc2, 0xfc, 0xf7, 0x90, 0x13, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x59, 0xeb, 0xff, 0x9b, 0x10, 0x00, 0x00, 0x00, 0x3c, 0xd6, - 0xff, 0x8f, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x8d, - 0xed, 0x76, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x6f, 0xec, 0xff, 0xe1, 0x73, 0x2c, 0x87, 0xff, - 0xb6, 0x2a, 0x25, 0x5c, 0xad, 0xec, 0x8f, 0x08, 0x00, 0x00, 0x00, - 0x06, 0x8f, 0xff, 0xfc, 0x8e, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x1e, 0x15, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3d, 0xc2, 0xfc, 0xf2, 0x80, 0x0d, 0x00, 0x00, - 0x00, 0x09, 0x3c, 0x80, 0xb0, 0xb6, 0xa6, 0x78, 0xb2, 0xff, 0xff, - 0xab, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x2f, 0xd6, 0xff, 0xb9, 0x25, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x86, 0xf9, 0xee, 0x69, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x54, 0xe6, 0xff, 0xe0, 0x49, 0x00, 0x00, + 0x00, 0x0c, 0x83, 0xfb, 0xff, 0xb9, 0x25, 0x00, 0x00, 0x06, 0x4a, + 0xd6, 0xff, 0xe7, 0x95, 0x3f, 0x25, 0x55, 0xb6, 0xf9, 0xfb, 0xae, + 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, + 0x00, 0x00, 0x52, 0xe3, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0xe9, 0x84, 0x06, + 0x00, 0x1c, 0xa3, 0xe8, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, + 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, + 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0xc3, 0xbf, 0x29, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x8b, 0xf9, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x77, 0xff, 0xff, + 0xde, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xaf, 0xff, 0xff, 0x96, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x15, 0x8e, 0xf1, 0x77, 0x09, 0x00, 0x00, + 0x00, 0x5c, 0xe7, 0xff, 0xb5, 0x1f, 0x07, 0x4d, 0xd8, 0xfc, 0xa7, + 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0xff, 0xb6, 0x1c, 0x18, 0xb5, 0xff, 0xff, 0xc3, 0x2c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x86, 0xf9, 0xff, 0xc3, + 0x30, 0x00, 0x00, 0x00, 0x2a, 0xbd, 0xff, 0xf5, 0x79, 0x06, 0x00, + 0x00, 0x25, 0xb1, 0xff, 0xfb, 0x8e, 0x15, 0x00, 0x00, 0x00, 0x37, + 0xc2, 0xff, 0xf9, 0x86, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, + 0xff, 0x80, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, 0xb6, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x65, 0xf6, 0x8e, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, + 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xa6, 0xda, 0x45, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0xf9, 0x81, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, + 0x9b, 0xff, 0xff, 0xc3, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x8f, + 0xff, 0xff, 0xba, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0xda, 0xc9, + 0x3f, 0x00, 0x00, 0x00, 0x1b, 0x97, 0xfc, 0xf0, 0xad, 0x8b, 0xc5, + 0xfc, 0xd8, 0x4f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xc3, 0x64, 0x9a, 0xf0, 0xff, + 0xf7, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xcf, + 0xff, 0xff, 0x9b, 0x14, 0x00, 0x00, 0x00, 0x54, 0xe3, 0xff, 0xd5, + 0x42, 0x00, 0x00, 0x00, 0x5f, 0xea, 0xff, 0xda, 0x36, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x70, 0xf0, 0xff, 0xc7, 0x30, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x52, 0xe3, 0xff, + 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0xd5, 0xc6, + 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, + 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x81, 0xf9, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0xda, + 0xa6, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x29, 0xbb, 0xff, 0xff, 0xa6, 0x14, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x70, 0xf7, 0xff, 0xda, 0x2e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x82, 0xed, 0x9a, 0x13, 0x00, 0x00, 0x00, 0x2b, 0xa7, 0xea, + 0xff, 0xff, 0xfc, 0xd8, 0x69, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x33, 0xa4, 0xff, 0xef, 0xe6, + 0xfc, 0xff, 0xfc, 0xba, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x3f, 0xb4, 0xfc, 0xff, 0xea, 0x53, 0x03, 0x00, 0x00, 0x00, 0x7a, + 0xfc, 0xff, 0xb2, 0x21, 0x00, 0x00, 0x0e, 0x9b, 0xff, 0xff, 0x94, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xb3, 0xff, 0xf1, 0x64, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x8f, 0xff, 0xf1, 0x64, 0x00, 0x00, 0x00, + 0x39, 0xcc, 0xff, 0xc3, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0xa1, 0xef, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, + 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, + 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x5f, 0xf6, 0x8e, 0x0e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x25, 0xba, 0xc6, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0xda, 0xff, 0xff, 0x85, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0xe6, 0xff, 0xf9, 0x4d, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x42, 0x75, 0x80, 0x5f, 0x21, + 0x03, 0x00, 0x00, 0x00, 0x20, 0xac, 0xdb, 0x4c, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x65, 0xab, 0xb6, 0x95, 0x49, 0x0d, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x52, 0x9e, 0xcc, 0xf1, + 0xff, 0xff, 0xff, 0xff, 0xf9, 0xb7, 0x40, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x2a, 0x4a, 0x80, 0xcf, 0xfc, 0xff, 0xf9, 0x97, 0x0f, 0x00, 0x00, + 0x00, 0x0e, 0x9b, 0xff, 0xff, 0x8e, 0x0e, 0x00, 0x00, 0x29, 0xc3, + 0xff, 0xf0, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, + 0xff, 0xff, 0x8f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xb0, 0xff, 0xe3, 0x49, + 0x00, 0x00, 0x00, 0x1f, 0xb6, 0xff, 0xde, 0x44, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x65, 0xf0, 0xa0, 0x13, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, + 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x0e, 0x1c, 0x1c, + 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x50, 0xe7, 0xb6, 0x34, 0x1c, + 0x1c, 0x1c, 0x1c, 0x1c, 0x21, 0xa2, 0xe3, 0x5d, 0x1c, 0x1c, 0x1c, + 0x1c, 0x1c, 0x1c, 0x1c, 0x0e, 0x00, 0x00, 0x00, 0x49, 0xe0, 0xff, + 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, + 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x80, 0xd4, 0xf9, + 0xff, 0xec, 0xad, 0x40, 0x03, 0x00, 0x00, 0x00, 0x55, 0xdb, 0xa2, + 0x1b, 0x00, 0x00, 0x00, 0x00, 0x03, 0x16, 0x1c, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x89, 0xe3, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xd3, 0x86, 0x32, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x26, + 0x54, 0x79, 0x9e, 0xc4, 0xe1, 0xf7, 0xff, 0xff, 0xf2, 0xa5, 0x2b, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0x70, 0x00, 0x00, + 0x00, 0x44, 0xde, 0xff, 0xd1, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x59, 0xff, 0xff, 0xb0, 0x19, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, + 0xff, 0xde, 0x44, 0x00, 0x00, 0x00, 0x1c, 0xb0, 0xff, 0xe3, 0x49, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xb3, 0xd9, 0x42, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, + 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x0e, + 0x76, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xc4, 0xf6, + 0xe7, 0xbe, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xdf, 0xf6, 0xcb, + 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0x76, 0x0e, 0x00, 0x00, + 0x49, 0xe0, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x49, 0xe3, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x80, + 0xf2, 0xf9, 0xda, 0xbb, 0xe4, 0xfc, 0xba, 0x30, 0x00, 0x00, 0x00, + 0x15, 0x90, 0xe4, 0x65, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, + 0x93, 0xf0, 0xff, 0xff, 0xf7, 0xf4, 0xff, 0xda, 0x7e, 0x3c, 0x09, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0x27, 0x7b, 0xbd, 0xe6, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xd8, + 0x80, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, + 0x70, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xcc, 0x33, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, 0xb6, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x30, 0xca, 0xff, 0xc4, 0x2a, 0x00, 0x00, 0x00, 0x0a, 0x91, + 0xff, 0xef, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x74, 0xea, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, + 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, + 0x00, 0x00, 0x10, 0x84, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xd6, 0xf5, 0xf0, 0xd1, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, + 0xcc, 0xe8, 0xf9, 0xda, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x84, + 0x10, 0x00, 0x00, 0x49, 0xe0, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xff, 0x52, 0x00, 0x00, 0x00, + 0x00, 0x42, 0xd4, 0xff, 0xc2, 0x4e, 0x25, 0x79, 0xea, 0xf6, 0x86, + 0x0c, 0x00, 0x00, 0x00, 0x3c, 0xd3, 0xad, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x06, 0x66, 0xea, 0xff, 0xff, 0xdb, 0x8f, 0xaf, 0xff, 0xb6, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x32, 0xa7, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xe5, 0xa7, 0x52, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, + 0xb6, 0xff, 0xff, 0x70, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xcc, + 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, + 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x49, 0xe3, 0xff, 0xab, 0x16, 0x00, 0x00, + 0x00, 0x00, 0x75, 0xf9, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x3c, 0xcf, 0xa4, 0x13, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, + 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, + 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x10, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x4c, 0xd2, 0xc8, 0x41, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x9d, 0xec, 0x6a, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x10, 0x00, 0x00, 0x00, 0x40, 0xd6, 0xff, 0xff, 0x8a, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0xe9, 0xff, 0xf5, 0x48, + 0x00, 0x00, 0x00, 0x0c, 0x91, 0xfc, 0xe3, 0x5c, 0x00, 0x00, 0x15, + 0xa3, 0xff, 0xd5, 0x3b, 0x00, 0x00, 0x00, 0x09, 0x86, 0xeb, 0x73, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2c, 0xc3, 0xff, 0xff, 0xc7, 0x3e, 0x09, + 0x80, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0xb7, 0xfc, 0xff, 0xff, 0xf9, 0xdc, + 0xb8, 0x88, 0x64, 0x39, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x16, 0xab, 0xff, 0xff, 0x7c, 0x06, 0x00, 0x00, 0x35, + 0xcf, 0xff, 0xe2, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6d, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xf3, 0xff, 0x8a, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x54, 0xe9, 0xff, 0x9e, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0xa4, 0xcf, 0x35, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, + 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0xaa, 0xda, + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0xea, 0x75, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0xb7, + 0xff, 0xff, 0xab, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0xf9, + 0xff, 0xd6, 0x29, 0x00, 0x00, 0x00, 0x35, 0xcf, 0xff, 0xbf, 0x29, + 0x00, 0x00, 0x00, 0x61, 0xef, 0xf3, 0x68, 0x00, 0x00, 0x00, 0x00, + 0x37, 0xc9, 0xb9, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xe7, 0xff, 0xee, + 0x69, 0x00, 0x00, 0x80, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x9d, 0xf9, 0xff, 0xfc, + 0xc9, 0x7b, 0x47, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x8a, 0xff, 0xff, 0xa0, 0x16, + 0x00, 0x00, 0x18, 0xaf, 0xff, 0xff, 0x77, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x96, 0xff, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x91, + 0xff, 0xef, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xca, 0xff, + 0xc4, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, + 0xea, 0x6e, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, + 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x33, 0xe0, 0xff, 0xe0, 0x49, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x7b, 0xea, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, + 0xd5, 0x9e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x13, 0x99, 0xff, 0xff, 0xc4, 0x2a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x91, 0xff, 0xff, 0xb8, 0x15, 0x00, 0x00, 0x00, 0x5b, 0xec, + 0xff, 0x97, 0x0e, 0x00, 0x00, 0x00, 0x3b, 0xd5, 0xff, 0x91, 0x0a, + 0x00, 0x00, 0x00, 0x06, 0x79, 0xea, 0x79, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, + 0xf9, 0xff, 0xb8, 0x23, 0x00, 0x00, 0x80, 0xff, 0xb6, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0xf5, + 0xff, 0xf6, 0x9f, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0xf5, + 0xff, 0xbd, 0x2a, 0x00, 0x00, 0x06, 0x84, 0xfb, 0xff, 0xb1, 0x11, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0xd0, 0xff, 0xff, 0xb6, 0x1c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x21, 0xb5, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x9b, 0xff, 0xe1, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x38, 0xcf, 0xab, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, + 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x70, 0x80, 0x70, + 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x53, 0xe1, 0x8f, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x21, 0xb5, 0xc3, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x65, 0xf0, 0xff, 0xe6, 0x54, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x26, 0xbd, 0xff, 0xf7, 0x84, 0x03, 0x00, 0x00, + 0x00, 0x7a, 0xfc, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x21, 0xbb, + 0xff, 0xb0, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x30, 0xc0, 0xca, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xff, 0xff, 0x96, 0x06, 0x00, 0x00, 0x80, 0xff, + 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x8f, 0xff, 0xff, 0xc0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x42, 0xd5, 0xff, 0xe3, 0x54, 0x00, 0x00, 0x00, 0x4c, 0xda, + 0xff, 0xea, 0x53, 0x03, 0x00, 0x00, 0x00, 0x13, 0x8d, 0xf9, 0xff, + 0xff, 0x9b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4a, 0xd9, 0xff, 0x9b, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x64, 0xf1, 0xf7, 0x76, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x9b, 0xd9, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xbb, 0xbf, - 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x86, 0xe9, 0x54, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, - 0x99, 0xf9, 0xfc, 0xb7, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x23, 0x9a, 0xf9, 0xff, 0xc8, 0x36, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x35, 0xcf, 0xff, 0xbf, 0x29, 0x00, 0x00, - 0x00, 0x61, 0xef, 0xf3, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3d, 0xe0, 0xce, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xa2, 0xf9, 0xff, 0xef, - 0xb8, 0xc9, 0xff, 0xd6, 0x9e, 0xb7, 0xe7, 0xff, 0xff, 0xa4, 0x13, - 0x00, 0x00, 0x00, 0x00, 0x5c, 0xf5, 0xff, 0xd4, 0x42, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x49, 0xa5, 0x56, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x51, 0xcd, 0xff, 0xda, - 0x70, 0x15, 0x00, 0x00, 0x00, 0x00, 0x09, 0x1c, 0x1f, 0x16, 0x49, - 0xd6, 0xff, 0xf1, 0x6e, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0x7e, 0xf9, 0xe7, 0x66, 0x06, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0xc9, - 0xff, 0xb5, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, - 0xca, 0xb0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0xc3, 0xb5, 0x1e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x8f, 0xe1, 0x4a, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0xc0, 0xff, + 0xfc, 0x89, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0xe6, 0xff, 0xd9, 0x4a, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0xb6, 0xff, 0xb6, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x03, + 0x65, 0xe4, 0x8f, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0xfc, 0xff, 0x96, 0x06, 0x00, + 0x00, 0x80, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x25, 0xba, 0xff, 0xf7, 0x76, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x19, 0xa1, 0xff, 0xfc, 0x9a, 0x13, 0x00, + 0x00, 0x13, 0x7d, 0xf0, 0xff, 0xbe, 0x52, 0x13, 0x03, 0x21, 0x77, + 0xe1, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x84, 0xf7, 0xec, 0x5f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xc7, 0xff, 0xab, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xe9, + 0x76, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0e, 0x1f, 0x1f, 0x1b, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x97, 0xda, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, - 0xea, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x32, 0xb7, 0xfc, 0xf9, 0xb6, 0x4f, 0x0a, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x09, 0x3e, 0xad, 0xf5, 0xff, 0xda, 0x5a, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x91, 0xfc, 0xe3, - 0x5c, 0x00, 0x00, 0x15, 0xa3, 0xff, 0xd5, 0x3b, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x8e, 0xf3, 0x77, 0x09, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, - 0xa8, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, - 0xb8, 0x49, 0x06, 0x00, 0x00, 0x00, 0x00, 0x18, 0xad, 0xfc, 0xf9, - 0xb6, 0x47, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x5c, 0xcd, - 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, - 0x5a, 0xda, 0xff, 0xea, 0x82, 0x29, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x25, 0xa5, 0xf9, 0xff, 0xbc, 0x2c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x58, 0xe0, 0xf9, 0x8e, - 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x06, 0x66, 0xe7, 0xf9, 0x7e, 0x0f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x9b, 0xd9, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xe9, + 0x76, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x72, 0xf9, 0xff, 0xca, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x9a, 0xfc, + 0xfc, 0x9a, 0x15, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xb6, 0x1f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x21, 0xb3, 0xdf, 0x47, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0xe6, 0xff, + 0xc0, 0x2b, 0x00, 0x00, 0x80, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, + 0x08, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x33, 0xcc, 0xff, 0xe6, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0c, 0x97, 0xdd, 0x4f, 0x00, 0x00, 0x00, 0x03, 0x16, - 0x1f, 0x1f, 0x37, 0xb7, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, - 0xff, 0xd2, 0x4c, 0x1f, 0x1f, 0x1c, 0x09, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0xcc, 0xcc, 0xb3, 0x3b, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x53, 0xea, 0xff, + 0xde, 0x4c, 0x00, 0x00, 0x00, 0x15, 0x89, 0xea, 0xfc, 0xde, 0xa0, + 0x85, 0xb3, 0xec, 0xff, 0xff, 0xff, 0xf1, 0x64, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0xc9, + 0xff, 0xb3, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x80, 0xf7, 0xde, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6e, 0xea, 0x68, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3b, 0xd5, 0x9e, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0xb7, 0xfc, 0xff, - 0xe8, 0x96, 0x58, 0x2e, 0x1f, 0x25, 0x4a, 0x8f, 0xdb, 0xff, 0xff, - 0xd6, 0x5a, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x42, 0xd4, 0xff, 0xc2, 0x4e, 0x25, 0x79, 0xea, 0xf6, 0x86, 0x0c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xc2, - 0xd3, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x17, 0x5d, 0xb1, 0xe3, 0xfc, 0xff, 0xff, 0xef, - 0xe0, 0xb1, 0x69, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0xb7, 0xfc, 0xff, 0xdf, 0x9a, 0x66, 0x52, 0x52, 0x59, 0x7e, - 0xb3, 0xf0, 0xff, 0xff, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x06, 0x5a, 0xda, 0xff, 0xf9, 0xd0, 0x7c, 0x4c, - 0x29, 0x1f, 0x25, 0x55, 0xb6, 0xf9, 0xff, 0xd6, 0x4a, 0x06, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xba, - 0xf6, 0xa5, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x86, 0xea, 0xda, 0x5a, 0x03, + 0x00, 0x33, 0xcc, 0xab, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, + 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xe9, 0x84, 0x03, 0x00, - 0x00, 0x14, 0x81, 0xb6, 0xb6, 0xbe, 0xe7, 0xff, 0xe0, 0x49, 0x00, - 0x00, 0x1c, 0xb6, 0xff, 0xf0, 0xc4, 0xb6, 0xb6, 0xa2, 0x34, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, - 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xe1, 0x8f, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xb5, 0xc3, 0x2e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x64, 0xe9, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x33, 0xcc, 0xa6, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x25, 0xc9, 0xff, 0xf7, 0x84, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x3a, 0xa2, 0xec, 0xff, 0xf9, 0xe3, 0xc3, 0xb6, 0xbb, 0xd9, 0xf7, - 0xff, 0xf3, 0xb8, 0x4f, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0d, 0x80, 0xf2, 0xf9, 0xda, 0xbb, 0xe4, 0xfc, - 0xba, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x06, 0x68, 0xed, 0x9a, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x25, 0x54, 0xb9, - 0xff, 0xda, 0x72, 0x49, 0x25, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x40, 0xb0, 0xf2, 0xff, 0xfc, 0xec, 0xe3, - 0xe3, 0xe6, 0xf7, 0xff, 0xff, 0xf7, 0xd3, 0x6e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x5a, 0xb3, 0xec, - 0xff, 0xf3, 0xde, 0xbf, 0xb6, 0xbb, 0xde, 0xfc, 0xfc, 0xcd, 0x5a, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x21, 0x9b, 0xea, 0xa5, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x76, - 0xea, 0xc5, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xc7, - 0xb4, 0x13, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, - 0xbd, 0xaa, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x89, 0xd6, - 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1b, 0x65, 0xa4, 0xd5, 0xec, 0xfc, 0xff, - 0xff, 0xf1, 0xd6, 0xb0, 0x6e, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x80, 0xd4, 0xf9, - 0xff, 0xec, 0xad, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0xac, 0xce, 0x37, 0x00, 0x00, + 0x5c, 0xde, 0xff, 0xde, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, + 0xfc, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x21, 0xbb, 0xff, 0xb0, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x5d, 0xe1, 0xac, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x26, 0xbd, 0xff, 0xf0, 0x82, 0x06, 0x00, 0x80, 0xff, 0xb6, 0x1c, + 0x00, 0x00, 0x1e, 0x6f, 0x55, 0x00, 0x00, 0x00, 0x00, 0x25, 0xba, + 0xff, 0xeb, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0xa3, 0xf9, 0xfc, 0xa5, 0x21, 0x00, 0x00, 0x00, 0x15, 0x70, + 0xd3, 0xf7, 0xff, 0xff, 0xff, 0xec, 0xe5, 0xff, 0xff, 0xd6, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x8d, 0xf9, 0xec, 0x65, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x35, 0xca, 0xfc, 0xac, 0x20, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0e, 0x95, 0xdb, 0x4c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, + 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xd6, 0x9b, 0x0e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x14, 0xa6, 0xcc, 0x33, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x68, 0xe4, 0xff, + 0xd8, 0x4f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x2b, 0xc2, 0xfc, 0xf7, 0x90, 0x13, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x59, 0xeb, 0xff, 0x9b, 0x10, 0x00, 0x00, 0x00, 0x3c, + 0xd6, 0xff, 0x8f, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, + 0x8d, 0xed, 0x76, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x6f, 0xec, 0xff, 0xe1, 0x73, 0x2c, 0x87, + 0xff, 0xb6, 0x2a, 0x25, 0x5c, 0xad, 0xec, 0x8f, 0x08, 0x00, 0x00, + 0x00, 0x06, 0x8f, 0xff, 0xfc, 0x8e, 0x0d, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1e, 0x15, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3d, 0xc2, 0xfc, 0xf2, 0x80, 0x0d, 0x00, + 0x00, 0x00, 0x09, 0x3c, 0x80, 0xb0, 0xb6, 0xa6, 0x78, 0xb2, 0xff, + 0xff, 0xab, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x2f, 0xd6, 0xff, 0xb9, 0x25, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x86, 0xf9, 0xee, 0x69, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0xe9, 0x84, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xad, 0xff, + 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, 0x33, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xbb, + 0xbf, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x86, 0xe9, 0x54, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x99, 0xf9, 0xfc, 0xb7, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x23, 0x9a, 0xf9, 0xff, 0xc8, 0x36, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0xcf, 0xff, 0xbf, 0x29, 0x00, + 0x00, 0x00, 0x61, 0xef, 0xf3, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x3d, 0xe0, 0xce, 0x2f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xa2, 0xf9, 0xff, + 0xef, 0xb8, 0xc9, 0xff, 0xd6, 0x9e, 0xb7, 0xe7, 0xff, 0xff, 0xa4, + 0x13, 0x00, 0x00, 0x00, 0x00, 0x5c, 0xf5, 0xff, 0xd4, 0x42, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x49, 0xa5, 0x56, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x51, 0xcd, 0xff, + 0xda, 0x70, 0x15, 0x00, 0x00, 0x00, 0x00, 0x09, 0x1c, 0x1f, 0x16, + 0x49, 0xd6, 0xff, 0xf1, 0x6e, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x7e, 0xf9, 0xe7, 0x66, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, + 0xc9, 0xff, 0xb5, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0xca, 0xb0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0xad, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xcc, + 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0e, 0x1f, 0x1f, 0x1b, 0x09, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0c, 0x97, 0xda, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x61, 0xea, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x32, 0xb7, 0xfc, 0xf9, 0xb6, 0x4f, 0x0a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x3e, 0xad, 0xf5, 0xff, 0xda, + 0x5a, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x91, 0xfc, + 0xe3, 0x5c, 0x00, 0x00, 0x15, 0xa3, 0xff, 0xd5, 0x3b, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x8e, 0xf3, 0x77, 0x09, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x32, 0xa8, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf5, 0xb8, 0x49, 0x06, 0x00, 0x00, 0x00, 0x00, 0x18, 0xad, 0xfc, + 0xf9, 0xb6, 0x47, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x5c, + 0xcd, 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x5a, 0xda, 0xff, 0xea, 0x82, 0x29, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x25, 0xa5, 0xf9, 0xff, 0xbc, 0x2c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x58, 0xe0, 0xf9, + 0x8e, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x66, 0xe7, 0xf9, 0x7e, 0x0f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0c, 0x97, 0xdd, 0x4f, 0x00, 0x00, 0x00, 0x03, + 0x16, 0x1f, 0x1f, 0x37, 0xb7, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, + 0xb6, 0xff, 0xd2, 0x4c, 0x1f, 0x1f, 0x1c, 0x09, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0xcc, 0xcc, 0xb3, 0x3b, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0xea, 0x68, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x3b, 0xd5, 0x9e, 0x11, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0xb7, 0xfc, + 0xff, 0xe8, 0x96, 0x58, 0x2e, 0x1f, 0x25, 0x4a, 0x8f, 0xdb, 0xff, + 0xff, 0xd6, 0x5a, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x42, 0xd4, 0xff, 0xc2, 0x4e, 0x25, 0x79, 0xea, 0xf6, 0x86, + 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, + 0xc2, 0xd3, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x17, 0x5d, 0xb1, 0xe3, 0xfc, 0xff, 0xff, + 0xef, 0xe0, 0xb1, 0x69, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x38, 0xb7, 0xfc, 0xff, 0xdf, 0x9a, 0x66, 0x52, 0x52, 0x59, + 0x7e, 0xb3, 0xf0, 0xff, 0xff, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x5a, 0xda, 0xff, 0xf9, 0xd0, 0x7c, + 0x4c, 0x29, 0x1f, 0x25, 0x55, 0xb6, 0xf9, 0xff, 0xd6, 0x4a, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, + 0xba, 0xf6, 0xa5, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x86, 0xea, 0xda, 0x5a, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xe9, 0x84, 0x03, + 0x00, 0x00, 0x14, 0x81, 0xb6, 0xb6, 0xbe, 0xe7, 0xff, 0xe0, 0x49, + 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xf0, 0xc4, 0xb6, 0xb6, 0xa2, 0x34, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xff, + 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xe1, 0x8f, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xb5, 0xc3, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x27, 0x7b, 0xbd, - 0xe1, 0xf6, 0xff, 0xff, 0xff, 0xf1, 0xde, 0xbd, 0x80, 0x3c, 0x0c, + 0x03, 0x3a, 0xa2, 0xec, 0xff, 0xf9, 0xe3, 0xc3, 0xb6, 0xbb, 0xd9, + 0xf7, 0xff, 0xf3, 0xb8, 0x4f, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0d, 0x80, 0xf2, 0xf9, 0xda, 0xbb, 0xe4, + 0xfc, 0xba, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x68, 0xed, 0x9a, 0x13, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x25, 0x54, + 0xb9, 0xff, 0xda, 0x72, 0x49, 0x25, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x40, 0xb0, 0xf2, 0xff, 0xfc, 0xec, + 0xe3, 0xe3, 0xe6, 0xf7, 0xff, 0xff, 0xf7, 0xd3, 0x6e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x5a, 0xb3, + 0xec, 0xff, 0xf3, 0xde, 0xbf, 0xb6, 0xbb, 0xde, 0xfc, 0xfc, 0xcd, + 0x5a, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x21, 0x9b, 0xea, 0xa5, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, + 0x76, 0xea, 0xc5, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, + 0xc7, 0xb4, 0x13, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xe0, 0x49, 0x00, 0x00, 0x1c, 0xb6, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xe3, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x70, 0xff, 0xff, 0xe0, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x21, 0x65, 0xa4, 0xd5, 0xec, 0xff, 0xff, 0xff, 0xf1, 0xd6, - 0x9a, 0x41, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x2b, 0x73, 0x6b, 0x25, 0x00, 0x00, 0x00, 0x00, + 0x26, 0xbd, 0xaa, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x89, + 0xd6, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x65, 0xa4, 0xd5, 0xec, 0xfc, + 0xff, 0xff, 0xf1, 0xd6, 0xb0, 0x6e, 0x27, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x80, 0xd4, + 0xf9, 0xff, 0xec, 0xad, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0xac, 0xce, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0f, 0x5f, 0x7c, 0x45, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0xff, 0xb6, 0x1c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x27, 0x7b, + 0xbd, 0xe1, 0xf6, 0xff, 0xff, 0xff, 0xf1, 0xde, 0xbd, 0x80, 0x3c, + 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x21, 0x65, 0xa4, 0xd5, 0xec, 0xff, 0xff, 0xff, 0xf1, + 0xd6, 0x9a, 0x41, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2b, 0x73, 0x6b, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x4f, 0x59, 0x09, 0x00, 0x00, 0x0e, 0x5b, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x70, 0x25, 0x00, 0x00, 0x0e, 0x5b, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x72, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x80, 0x80, 0x70, 0x25, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0x5f, 0x7c, 0x45, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x4f, 0x4f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x34, 0x62, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x13, 0x3b, - 0x5b, 0x7a, 0x80, 0x80, 0x64, 0x3c, 0x1c, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x4f, 0x59, 0x09, 0x00, 0x00, 0x0e, 0x5b, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x70, 0x25, 0x00, 0x00, 0x0e, 0x5b, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x72, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x80, 0x80, 0x70, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0x42, 0x75, 0x80, 0x5f, 0x21, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x62, - 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x5b, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x4f, 0x4f, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x34, 0x62, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x13, + 0x3b, 0x5b, 0x7a, 0x80, 0x80, 0x64, 0x3c, 0x1c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x26, 0x4a, 0x6e, 0x80, 0x80, 0x80, 0x64, 0x44, 0x26, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x13, 0x3b, 0x5b, 0x80, 0x80, - 0x80, 0x64, 0x3c, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0d, 0x42, 0x75, 0x80, 0x5f, 0x21, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, + 0x62, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x5b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x26, 0x4a, 0x6e, 0x80, 0x80, 0x80, 0x64, 0x44, + 0x26, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x13, 0x3b, 0x5b, 0x80, + 0x80, 0x80, 0x64, 0x3c, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -8798,8 +7852,1317 @@ const unsigned char default_font_data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xb0, + 0x02, 0xcb, 0x03, 0x03, 0x63, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x9b, + 0xad, 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xb1, 0x02, 0xcc, 0x03, 0x03, + 0x64, 0x00, 0x50, 0x00, 0x00, 0x00, 0x90, 0xe7, 0x86, 0x3a, 0x00, + 0x00, 0x00, 0x00, 0xa7, 0xca, 0xe7, 0x3e, 0xb6, 0xbd, 0xbd, 0x3e, + 0x61, 0xc7, 0x7a, 0x3d, 0xb9, 0xc7, 0xaa, 0x3e, 0x00, 0x00, 0x00, + 0x00, 0xa7, 0xca, 0xe7, 0x3e, 0xbc, 0x5b, 0xd9, 0x3e, 0x61, 0xc7, + 0x7a, 0x3d, 0xb9, 0xc7, 0xaa, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x12, + 0xc0, 0x35, 0x3f, 0xbc, 0x5b, 0xd9, 0x3e, 0x8c, 0xd9, 0xd2, 0x3d, + 0x90, 0xe7, 0x86, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, + 0x3f, 0xb6, 0xbd, 0xbd, 0x3e, 0x8c, 0xd9, 0xd2, 0x3d, 0x15, 0x00, + 0x00, 0x00, 0xdb, 0x00, 0xb2, 0x02, 0xcd, 0x03, 0x03, 0x65, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, + 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xb3, 0x02, 0xcb, 0x03, + 0x03, 0x66, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xe4, 0xd9, 0x51, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, + 0x00, 0xdb, 0x00, 0xb4, 0x02, 0xcc, 0x03, 0x03, 0x67, 0x00, 0x50, + 0x00, 0x00, 0x00, 0xe7, 0xff, 0xd5, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0xe7, 0x35, 0x66, 0xbe, 0xcf, 0xd8, 0xaf, 0x3e, 0x4f, 0x03, 0x56, + 0x3f, 0xaf, 0x05, 0x49, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x35, + 0x66, 0xbe, 0xe2, 0xe4, 0xee, 0x3e, 0x4f, 0x03, 0x56, 0x3f, 0xaf, + 0x05, 0x49, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, + 0xe2, 0xe4, 0xee, 0x3e, 0xbb, 0xd4, 0x7c, 0x3f, 0xe7, 0xff, 0xd5, + 0x3c, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0xcf, 0xd8, + 0xaf, 0x3e, 0xbb, 0xd4, 0x7c, 0x3f, 0x15, 0x00, 0x00, 0x00, 0xdb, + 0x00, 0xb5, 0x02, 0xcd, 0x03, 0x03, 0x68, 0x00, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, + 0x00, 0x00, 0xdb, 0x00, 0xb6, 0x02, 0xcb, 0x03, 0x03, 0x69, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x9b, 0xad, 0xfc, 0x3e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, + 0xb7, 0x02, 0xcc, 0x03, 0x03, 0x6a, 0x00, 0x50, 0x00, 0x00, 0x00, + 0x10, 0x7a, 0x91, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x75, 0x54, 0xba, + 0xbd, 0xc7, 0xd5, 0x38, 0x3f, 0xa3, 0x23, 0x59, 0x3f, 0x32, 0x05, + 0xeb, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x75, 0x54, 0xba, 0xbd, 0xd8, + 0x28, 0x4b, 0x3f, 0xa3, 0x23, 0x59, 0x3f, 0x32, 0x05, 0xeb, 0x3e, + 0x00, 0x00, 0x00, 0x00, 0x55, 0xbd, 0x44, 0x3f, 0xd8, 0x28, 0x4b, + 0x3f, 0xbb, 0xd4, 0x7c, 0x3f, 0x10, 0x7a, 0x91, 0x3c, 0x00, 0x00, + 0x00, 0x00, 0x55, 0xbd, 0x44, 0x3f, 0xc7, 0xd5, 0x38, 0x3f, 0xbb, + 0xd4, 0x7c, 0x3f, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xb8, 0x02, + 0xcd, 0x03, 0x03, 0x6b, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, + 0x00, 0xb9, 0x02, 0xcb, 0x03, 0x03, 0x6c, 0x00, 0x0c, 0x00, 0x00, + 0x00, 0xe4, 0xd9, 0x51, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xba, 0x02, 0xcc, + 0x03, 0x03, 0x6d, 0x00, 0x50, 0x00, 0x00, 0x00, 0xe7, 0xff, 0xd5, + 0x3c, 0x00, 0x00, 0x00, 0x00, 0x75, 0x54, 0xba, 0xbd, 0x53, 0x24, + 0x17, 0x3f, 0xa3, 0x23, 0x59, 0x3f, 0xaf, 0x05, 0x49, 0x3f, 0x00, + 0x00, 0x00, 0x00, 0x75, 0x54, 0xba, 0xbd, 0x5c, 0xaa, 0x36, 0x3f, + 0xa3, 0x23, 0x59, 0x3f, 0xaf, 0x05, 0x49, 0x3f, 0x00, 0x00, 0x00, + 0x00, 0x55, 0xbd, 0x44, 0x3f, 0x5c, 0xaa, 0x36, 0x3f, 0xbb, 0xd4, + 0x7c, 0x3f, 0xe7, 0xff, 0xd5, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x55, + 0xbd, 0x44, 0x3f, 0x53, 0x24, 0x17, 0x3f, 0xbb, 0xd4, 0x7c, 0x3f, + 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xbb, 0x02, 0xcd, 0x03, 0x03, + 0x6e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, + 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xbc, 0x02, + 0xcb, 0x03, 0x03, 0x6f, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x46, 0x94, + 0x3e, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, + 0x00, 0x00, 0x00, 0xdb, 0x00, 0xbd, 0x02, 0xcc, 0x03, 0x03, 0x70, + 0x00, 0x50, 0x00, 0x00, 0x00, 0x10, 0x7a, 0x91, 0x3c, 0x00, 0x00, + 0x00, 0x00, 0x52, 0x5a, 0x49, 0xbd, 0x53, 0x24, 0x17, 0x3f, 0x40, + 0xc0, 0x36, 0x3f, 0x12, 0xc0, 0x35, 0x3f, 0x00, 0x00, 0x00, 0x00, + 0x52, 0x5a, 0x49, 0xbd, 0xf8, 0xe2, 0x33, 0x3f, 0x40, 0xc0, 0x36, + 0x3f, 0x12, 0xc0, 0x35, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x08, + 0x3a, 0x3f, 0xf8, 0xe2, 0x33, 0x3f, 0x27, 0xf8, 0x56, 0x3f, 0x10, + 0x7a, 0x91, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x08, 0x3a, 0x3f, + 0x53, 0x24, 0x17, 0x3f, 0x27, 0xf8, 0x56, 0x3f, 0x15, 0x00, 0x00, + 0x00, 0xdb, 0x00, 0xbe, 0x02, 0xcd, 0x03, 0x03, 0x71, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xbf, 0x02, 0xcb, 0x03, 0x03, + 0x72, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x11, 0x54, 0x8d, 0x3e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, + 0xdb, 0x00, 0xc0, 0x02, 0xcc, 0x03, 0x03, 0x73, 0x00, 0x50, 0x00, + 0x00, 0x00, 0xbb, 0x0b, 0x74, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xa7, + 0xca, 0xe7, 0x3e, 0xd7, 0xbd, 0x1d, 0x3f, 0x09, 0x34, 0x68, 0x3e, + 0xa9, 0x83, 0x4c, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xa7, 0xca, 0xe7, + 0x3e, 0x9b, 0x8f, 0x23, 0x3f, 0x09, 0x34, 0x68, 0x3e, 0xa9, 0x83, + 0x4c, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x9b, + 0x8f, 0x23, 0x3f, 0x85, 0x77, 0x89, 0x3e, 0xbb, 0x0b, 0x74, 0x3d, + 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0xd7, 0xbd, 0x1d, + 0x3f, 0x85, 0x77, 0x89, 0x3e, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, + 0xc1, 0x02, 0xcd, 0x03, 0x03, 0x74, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, + 0x00, 0xdb, 0x00, 0xc2, 0x02, 0xcb, 0x03, 0x03, 0x75, 0x00, 0x0c, + 0x00, 0x00, 0x00, 0xd6, 0x00, 0xc5, 0x3e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xc3, + 0x02, 0xcc, 0x03, 0x03, 0x76, 0x00, 0x50, 0x00, 0x00, 0x00, 0xbb, + 0x0b, 0x74, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x5d, 0x95, 0xbe, + 0x9e, 0x48, 0x8b, 0x3d, 0x75, 0xcd, 0x50, 0x3f, 0x6d, 0x58, 0xb3, + 0x3e, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x5d, 0x95, 0xbe, 0xa1, 0xdb, + 0xeb, 0x3d, 0x75, 0xcd, 0x50, 0x3f, 0x6d, 0x58, 0xb3, 0x3e, 0x00, + 0x00, 0x00, 0x00, 0x55, 0xbd, 0x44, 0x3f, 0xa1, 0xdb, 0xeb, 0x3d, + 0xbb, 0xd4, 0x7c, 0x3f, 0xbb, 0x0b, 0x74, 0x3d, 0x00, 0x00, 0x00, + 0x00, 0x55, 0xbd, 0x44, 0x3f, 0x9e, 0x48, 0x8b, 0x3d, 0xbb, 0xd4, + 0x7c, 0x3f, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xc4, 0x02, 0xcd, + 0x03, 0x03, 0x77, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, + 0xc5, 0x02, 0xcb, 0x03, 0x03, 0x78, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0xd6, 0x00, 0xc5, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xc6, 0x02, 0xcc, 0x03, + 0x03, 0x79, 0x00, 0x50, 0x00, 0x00, 0x00, 0xe7, 0xff, 0xd5, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0xe6, 0x5d, 0x95, 0xbe, 0x9d, 0xcf, 0x4a, + 0x3c, 0x75, 0xcd, 0x50, 0x3f, 0x04, 0x37, 0xa2, 0x3e, 0x00, 0x00, + 0x00, 0x00, 0xe6, 0x5d, 0x95, 0xbe, 0x73, 0xda, 0x73, 0x3d, 0x75, + 0xcd, 0x50, 0x3f, 0x04, 0x37, 0xa2, 0x3e, 0x00, 0x00, 0x00, 0x00, + 0x55, 0xbd, 0x44, 0x3f, 0x73, 0xda, 0x73, 0x3d, 0xbb, 0xd4, 0x7c, + 0x3f, 0xe7, 0xff, 0xd5, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x55, 0xbd, + 0x44, 0x3f, 0x9d, 0xcf, 0x4a, 0x3c, 0xbb, 0xd4, 0x7c, 0x3f, 0x15, + 0x00, 0x00, 0x00, 0xdb, 0x00, 0xc7, 0x02, 0xcd, 0x03, 0x03, 0x7a, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, + 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xc8, 0x02, 0xcb, + 0x03, 0x03, 0x7b, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x9b, 0xad, 0xfc, + 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, + 0x00, 0x00, 0xdb, 0x00, 0xc9, 0x02, 0xcc, 0x03, 0x03, 0x7c, 0x00, + 0x50, 0x00, 0x00, 0x00, 0xf9, 0x42, 0x0d, 0x3d, 0x00, 0x00, 0x00, + 0x00, 0xf0, 0xda, 0x8d, 0x3e, 0x90, 0x4c, 0x23, 0x3f, 0xbd, 0x8a, + 0xec, 0x3d, 0xc7, 0xbc, 0xe6, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xf0, + 0xda, 0x8d, 0x3e, 0xd5, 0x94, 0x34, 0x3f, 0xbd, 0x8a, 0xec, 0x3d, + 0xc7, 0xbc, 0xe6, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x55, 0xbd, 0x44, + 0x3f, 0xd5, 0x94, 0x34, 0x3f, 0xc0, 0xe7, 0x47, 0x3e, 0xf9, 0x42, + 0x0d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x55, 0xbd, 0x44, 0x3f, 0x90, + 0x4c, 0x23, 0x3f, 0xc0, 0xe7, 0x47, 0x3e, 0x15, 0x00, 0x00, 0x00, + 0xdb, 0x00, 0xca, 0x02, 0xcd, 0x03, 0x03, 0x7d, 0x00, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, + 0x00, 0x00, 0x00, 0xdb, 0x00, 0xcb, 0x02, 0xcb, 0x03, 0x03, 0x7e, + 0x00, 0x0c, 0x00, 0x00, 0x00, 0xa0, 0xdc, 0x42, 0x3f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, + 0x00, 0xcc, 0x02, 0xcc, 0x03, 0x03, 0x7f, 0x00, 0x50, 0x00, 0x00, + 0x00, 0xe7, 0xff, 0xd5, 0x3c, 0x00, 0x00, 0x00, 0x00, 0xbb, 0xb8, + 0xed, 0xbd, 0xf7, 0x1e, 0xa6, 0x3e, 0x6c, 0x95, 0x50, 0x3e, 0x6c, + 0x08, 0x3a, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xbb, 0xb8, 0xed, 0xbd, + 0x1e, 0x4e, 0xe0, 0x3e, 0x6c, 0x95, 0x50, 0x3e, 0x6c, 0x08, 0x3a, + 0x3f, 0x00, 0x00, 0x00, 0x00, 0x8b, 0xc5, 0x17, 0x3f, 0x1e, 0x4e, + 0xe0, 0x3e, 0xbb, 0x2b, 0xa3, 0x3e, 0xe7, 0xff, 0xd5, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x8b, 0xc5, 0x17, 0x3f, 0xf7, 0x1e, 0xa6, 0x3e, + 0xbb, 0x2b, 0xa3, 0x3e, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xcd, + 0x02, 0xcd, 0x03, 0x03, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xdb, 0x00, 0xce, 0x02, 0xcb, 0x03, 0x03, 0x81, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x11, 0x54, 0x8d, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xcf, 0x02, + 0xcc, 0x03, 0x03, 0x82, 0x00, 0x50, 0x00, 0x00, 0x00, 0xbb, 0x0b, + 0x74, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x03, 0xb0, 0x21, 0xbe, 0xd7, + 0xbd, 0x1d, 0x3f, 0x5b, 0xce, 0x8d, 0x3e, 0xa9, 0x83, 0x4c, 0x3e, + 0x00, 0x00, 0x00, 0x00, 0x03, 0xb0, 0x21, 0xbe, 0x9b, 0x8f, 0x23, + 0x3f, 0x5b, 0xce, 0x8d, 0x3e, 0xa9, 0x83, 0x4c, 0x3e, 0x00, 0x00, + 0x00, 0x00, 0xea, 0x75, 0xcb, 0x3d, 0x9b, 0x8f, 0x23, 0x3f, 0xbb, + 0x2b, 0xa3, 0x3e, 0xbb, 0x0b, 0x74, 0x3d, 0x00, 0x00, 0x00, 0x00, + 0xea, 0x75, 0xcb, 0x3d, 0xd7, 0xbd, 0x1d, 0x3f, 0xbb, 0x2b, 0xa3, + 0x3e, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xd0, 0x02, 0xcd, 0x03, + 0x03, 0x83, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xd1, + 0x02, 0xcb, 0x03, 0x03, 0x84, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x4f, + 0x06, 0xa7, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xd2, 0x02, 0xcc, 0x03, 0x03, + 0x85, 0x00, 0x50, 0x00, 0x00, 0x00, 0x49, 0x9d, 0x80, 0xbc, 0x00, + 0x00, 0x00, 0x00, 0xc5, 0xcb, 0x23, 0x3e, 0x9d, 0xcf, 0x4a, 0x3c, + 0x73, 0xf2, 0x82, 0x3d, 0xe6, 0x5d, 0x95, 0x3e, 0x00, 0x00, 0x00, + 0x00, 0xc5, 0xcb, 0x23, 0x3e, 0xf8, 0xf7, 0x7e, 0x3d, 0x73, 0xf2, + 0x82, 0x3d, 0xe6, 0x5d, 0x95, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xc7, + 0x84, 0x88, 0x3e, 0xf8, 0xf7, 0x7e, 0x3d, 0x5c, 0x63, 0xa6, 0x3d, + 0x49, 0x9d, 0x80, 0xbc, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x84, 0x88, + 0x3e, 0x9d, 0xcf, 0x4a, 0x3c, 0x5c, 0x63, 0xa6, 0x3d, 0x15, 0x00, + 0x00, 0x00, 0xdb, 0x00, 0xd3, 0x02, 0xcd, 0x03, 0x03, 0x86, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, + 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xd4, 0x02, 0xcb, 0x03, + 0x03, 0x87, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x11, 0x54, 0x8d, 0x3e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, + 0x00, 0xdb, 0x00, 0xd5, 0x02, 0xcc, 0x03, 0x03, 0x88, 0x00, 0x50, + 0x00, 0x00, 0x00, 0x53, 0x27, 0x8b, 0x3d, 0x00, 0x00, 0x00, 0x00, + 0x7b, 0xd4, 0x04, 0xbd, 0x77, 0x67, 0xb5, 0x3e, 0x90, 0x82, 0xa7, + 0x3e, 0xa9, 0x83, 0x4c, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, + 0x04, 0xbd, 0x43, 0x59, 0xc0, 0x3e, 0x90, 0x82, 0xa7, 0x3e, 0xa9, + 0x83, 0x4c, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xea, 0x75, 0xcb, 0x3d, + 0x43, 0x59, 0xc0, 0x3e, 0x5c, 0x74, 0xb2, 0x3e, 0x53, 0x27, 0x8b, + 0x3d, 0x00, 0x00, 0x00, 0x00, 0xea, 0x75, 0xcb, 0x3d, 0x77, 0x67, + 0xb5, 0x3e, 0x5c, 0x74, 0xb2, 0x3e, 0x15, 0x00, 0x00, 0x00, 0xdb, + 0x00, 0xd6, 0x02, 0xcd, 0x03, 0x03, 0x89, 0x00, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, + 0x00, 0x00, 0xdb, 0x00, 0xd7, 0x02, 0xcb, 0x03, 0x03, 0x8a, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x9b, 0xad, 0xfc, 0x3e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, + 0xd8, 0x02, 0xcc, 0x03, 0x03, 0x8b, 0x00, 0x50, 0x00, 0x00, 0x00, + 0xe7, 0xff, 0xd5, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x15, 0x91, + 0xbe, 0xf8, 0x36, 0xfd, 0x3d, 0x63, 0x26, 0x51, 0x3f, 0x32, 0x05, + 0xeb, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x15, 0x91, 0xbe, 0x06, + 0x84, 0x46, 0x3e, 0x63, 0x26, 0x51, 0x3f, 0x32, 0x05, 0xeb, 0x3e, + 0x00, 0x00, 0x00, 0x00, 0x55, 0xbd, 0x44, 0x3f, 0x06, 0x84, 0x46, + 0x3e, 0xbb, 0xd4, 0x7c, 0x3f, 0xe7, 0xff, 0xd5, 0x3c, 0x00, 0x00, + 0x00, 0x00, 0x55, 0xbd, 0x44, 0x3f, 0xf8, 0x36, 0xfd, 0x3d, 0xbb, + 0xd4, 0x7c, 0x3f, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xd9, 0x02, + 0xcd, 0x03, 0x03, 0x8c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, + 0x00, 0xda, 0x02, 0xcb, 0x03, 0x03, 0x8d, 0x00, 0x0c, 0x00, 0x00, + 0x00, 0x9b, 0xad, 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xdb, 0x02, 0xcc, + 0x03, 0x03, 0x8e, 0x00, 0x50, 0x00, 0x00, 0x00, 0x10, 0x7a, 0x91, + 0x3c, 0x00, 0x00, 0x00, 0x00, 0x52, 0x5a, 0x49, 0xbd, 0x9d, 0xcf, + 0x4a, 0x3c, 0xaa, 0x9d, 0x99, 0x3e, 0x9c, 0x4d, 0xef, 0x3e, 0x00, + 0x00, 0x00, 0x00, 0x52, 0x5a, 0x49, 0xbd, 0x79, 0xb9, 0xae, 0x3d, + 0xaa, 0x9d, 0x99, 0x3e, 0x9c, 0x4d, 0xef, 0x3e, 0x00, 0x00, 0x00, + 0x00, 0x82, 0x53, 0x2f, 0x3f, 0x79, 0xb9, 0xae, 0x3d, 0x46, 0x94, + 0xd6, 0x3e, 0x10, 0x7a, 0x91, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x82, + 0x53, 0x2f, 0x3f, 0x9d, 0xcf, 0x4a, 0x3c, 0x46, 0x94, 0xd6, 0x3e, + 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xdc, 0x02, 0xcd, 0x03, 0x03, + 0x8f, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, + 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xdd, 0x02, + 0xcb, 0x03, 0x03, 0x90, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x9b, 0xad, + 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, + 0x00, 0x00, 0x00, 0xdb, 0x00, 0xde, 0x02, 0xcc, 0x03, 0x03, 0x91, + 0x00, 0x50, 0x00, 0x00, 0x00, 0x53, 0x27, 0x8b, 0x3d, 0x00, 0x00, + 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x83, 0xf8, 0x54, 0x3f, 0x76, + 0x16, 0x5d, 0x3e, 0x7e, 0x74, 0xe2, 0x3e, 0x00, 0x00, 0x00, 0x00, + 0x7b, 0xd4, 0x04, 0xbd, 0x30, 0x84, 0x64, 0x3f, 0x76, 0x16, 0x5d, + 0x3e, 0x7e, 0x74, 0xe2, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x82, 0x53, + 0x2f, 0x3f, 0x30, 0x84, 0x64, 0x3f, 0x3f, 0x1e, 0xaa, 0x3e, 0x53, + 0x27, 0x8b, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x82, 0x53, 0x2f, 0x3f, + 0x83, 0xf8, 0x54, 0x3f, 0x3f, 0x1e, 0xaa, 0x3e, 0x15, 0x00, 0x00, + 0x00, 0xdb, 0x00, 0xdf, 0x02, 0xcd, 0x03, 0x03, 0x92, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xe0, 0x02, 0xcb, 0x03, 0x03, + 0x93, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x9b, 0xad, 0xfc, 0x3e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, + 0xdb, 0x00, 0xe1, 0x02, 0xcc, 0x03, 0x03, 0x94, 0x00, 0x50, 0x00, + 0x00, 0x00, 0x10, 0x7a, 0x91, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x7b, + 0xd4, 0x04, 0xbd, 0x9b, 0xaf, 0x66, 0x3f, 0x76, 0x16, 0x5d, 0x3e, + 0x32, 0x05, 0xeb, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, + 0xbd, 0x9b, 0x02, 0x79, 0x3f, 0x76, 0x16, 0x5d, 0x3e, 0x32, 0x05, + 0xeb, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x82, 0x53, 0x2f, 0x3f, 0x9b, + 0x02, 0x79, 0x3f, 0x3f, 0x1e, 0xaa, 0x3e, 0x10, 0x7a, 0x91, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0x82, 0x53, 0x2f, 0x3f, 0x9b, 0xaf, 0x66, + 0x3f, 0x3f, 0x1e, 0xaa, 0x3e, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, + 0xe2, 0x02, 0xcd, 0x03, 0x03, 0x95, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, + 0x00, 0xdb, 0x00, 0xe3, 0x02, 0xcb, 0x03, 0x03, 0x96, 0x00, 0x0c, + 0x00, 0x00, 0x00, 0x9b, 0xad, 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xe4, + 0x02, 0xcc, 0x03, 0x03, 0x97, 0x00, 0x50, 0x00, 0x00, 0x00, 0x10, + 0x7a, 0x91, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x52, 0x5a, 0x49, 0xbd, + 0xde, 0x14, 0xc0, 0x3d, 0xaa, 0x9d, 0x99, 0x3e, 0x9c, 0x4d, 0xef, + 0x3e, 0x00, 0x00, 0x00, 0x00, 0x52, 0x5a, 0x49, 0xbd, 0x38, 0xba, + 0x2a, 0x3e, 0xaa, 0x9d, 0x99, 0x3e, 0x9c, 0x4d, 0xef, 0x3e, 0x00, + 0x00, 0x00, 0x00, 0x82, 0x53, 0x2f, 0x3f, 0x38, 0xba, 0x2a, 0x3e, + 0x46, 0x94, 0xd6, 0x3e, 0x10, 0x7a, 0x91, 0x3c, 0x00, 0x00, 0x00, + 0x00, 0x82, 0x53, 0x2f, 0x3f, 0xde, 0x14, 0xc0, 0x3d, 0x46, 0x94, + 0xd6, 0x3e, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xe5, 0x02, 0xcd, + 0x03, 0x03, 0x98, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, + 0xe6, 0x02, 0xcb, 0x03, 0x03, 0x99, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x9b, 0xad, 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xe7, 0x02, 0xcc, 0x03, + 0x03, 0x9a, 0x00, 0x50, 0x00, 0x00, 0x00, 0x90, 0xe7, 0x86, 0x3a, + 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xe4, 0x67, 0x33, + 0x3e, 0x0a, 0xa3, 0x49, 0x3e, 0x51, 0xde, 0xf7, 0x3e, 0x00, 0x00, + 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x24, 0xd3, 0x81, 0x3e, 0x0a, + 0xa3, 0x49, 0x3e, 0x51, 0xde, 0xf7, 0x3e, 0x00, 0x00, 0x00, 0x00, + 0x28, 0x0b, 0x2b, 0x3f, 0x24, 0xd3, 0x81, 0x3e, 0xac, 0x00, 0x9f, + 0x3e, 0x90, 0xe7, 0x86, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x28, 0x0b, + 0x2b, 0x3f, 0xe4, 0x67, 0x33, 0x3e, 0xac, 0x00, 0x9f, 0x3e, 0x15, + 0x00, 0x00, 0x00, 0xdb, 0x00, 0xe8, 0x02, 0xcd, 0x03, 0x03, 0x9b, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, + 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xe9, 0x02, 0xcb, + 0x03, 0x03, 0x9c, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x9b, 0xad, 0xfc, + 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, + 0x00, 0x00, 0xdb, 0x00, 0xea, 0x02, 0xcc, 0x03, 0x03, 0x9d, 0x00, + 0x50, 0x00, 0x00, 0x00, 0x10, 0x7a, 0x91, 0x3c, 0x00, 0x00, 0x00, + 0x00, 0x52, 0x5a, 0x49, 0xbd, 0xcf, 0x49, 0x2b, 0x3f, 0x6c, 0x95, + 0x50, 0x3e, 0x32, 0x05, 0xeb, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x52, + 0x5a, 0x49, 0xbd, 0xd0, 0x9c, 0x3d, 0x3f, 0x6c, 0x95, 0x50, 0x3e, + 0x32, 0x05, 0xeb, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x28, 0x0b, 0x2b, + 0x3f, 0xd0, 0x9c, 0x3d, 0x3f, 0x98, 0xdd, 0xa3, 0x3e, 0x10, 0x7a, + 0x91, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x28, 0x0b, 0x2b, 0x3f, 0xcf, + 0x49, 0x2b, 0x3f, 0x98, 0xdd, 0xa3, 0x3e, 0x15, 0x00, 0x00, 0x00, + 0xdb, 0x00, 0xeb, 0x02, 0xcd, 0x03, 0x03, 0x9e, 0x00, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, + 0x00, 0x00, 0x00, 0xdb, 0x00, 0xec, 0x02, 0xcb, 0x03, 0x03, 0x9f, + 0x00, 0x0c, 0x00, 0x00, 0x00, 0x9b, 0xad, 0xfc, 0x3e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, + 0x00, 0xed, 0x02, 0xcc, 0x03, 0x03, 0xa0, 0x00, 0x50, 0x00, 0x00, + 0x00, 0x10, 0x7a, 0x91, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x52, 0x5a, + 0x49, 0xbd, 0x29, 0x21, 0x40, 0x3f, 0x44, 0x4f, 0x5a, 0x3e, 0x9c, + 0x4d, 0xef, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x52, 0x5a, 0x49, 0xbd, + 0x18, 0xcd, 0x52, 0x3f, 0x44, 0x4f, 0x5a, 0x3e, 0x9c, 0x4d, 0xef, + 0x3e, 0x00, 0x00, 0x00, 0x00, 0x82, 0x53, 0x2f, 0x3f, 0x18, 0xcd, + 0x52, 0x3f, 0x3f, 0x1e, 0xaa, 0x3e, 0x10, 0x7a, 0x91, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x82, 0x53, 0x2f, 0x3f, 0x29, 0x21, 0x40, 0x3f, + 0x3f, 0x1e, 0xaa, 0x3e, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xee, + 0x02, 0xcd, 0x03, 0x03, 0xa1, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xdb, 0x00, 0xef, 0x02, 0xcb, 0x03, 0x03, 0xa2, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x9b, 0xad, 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xf0, 0x02, + 0xcc, 0x03, 0x03, 0xa3, 0x00, 0x50, 0x00, 0x00, 0x00, 0x10, 0x7a, + 0x91, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x66, 0x17, 0x27, 0xbd, 0xf4, + 0xa4, 0xe4, 0x3e, 0x6c, 0x95, 0x50, 0x3e, 0x9c, 0x4d, 0xef, 0x3e, + 0x00, 0x00, 0x00, 0x00, 0x66, 0x17, 0x27, 0xbd, 0x69, 0xfe, 0x04, + 0x3f, 0x6c, 0x95, 0x50, 0x3e, 0x9c, 0x4d, 0xef, 0x3e, 0x00, 0x00, + 0x00, 0x00, 0x28, 0x0b, 0x2b, 0x3f, 0x69, 0xfe, 0x04, 0x3f, 0xbb, + 0x2b, 0xa3, 0x3e, 0x10, 0x7a, 0x91, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x28, 0x0b, 0x2b, 0x3f, 0xf4, 0xa4, 0xe4, 0x3e, 0xbb, 0x2b, 0xa3, + 0x3e, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xf1, 0x02, 0xcd, 0x03, + 0x03, 0xa4, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xf2, + 0x02, 0xcb, 0x03, 0x03, 0xa5, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x9b, + 0xad, 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xf3, 0x02, 0xcc, 0x03, 0x03, + 0xa6, 0x00, 0x50, 0x00, 0x00, 0x00, 0x10, 0x7a, 0x91, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x52, 0x5a, 0x49, 0xbd, 0x44, 0xe0, 0x78, 0x3e, + 0x82, 0x57, 0xa3, 0x3e, 0x9c, 0x4d, 0xef, 0x3e, 0x00, 0x00, 0x00, + 0x00, 0x52, 0x5a, 0x49, 0xbd, 0x21, 0xc8, 0xa1, 0x3e, 0x82, 0x57, + 0xa3, 0x3e, 0x9c, 0x4d, 0xef, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x82, + 0x53, 0x2f, 0x3f, 0x21, 0xc8, 0xa1, 0x3e, 0x1e, 0x4e, 0xe0, 0x3e, + 0x10, 0x7a, 0x91, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x82, 0x53, 0x2f, + 0x3f, 0x44, 0xe0, 0x78, 0x3e, 0x1e, 0x4e, 0xe0, 0x3e, 0x15, 0x00, + 0x00, 0x00, 0xdb, 0x00, 0xf4, 0x02, 0xcd, 0x03, 0x03, 0xa7, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, + 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xf5, 0x02, 0xcb, 0x03, + 0x03, 0xa8, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x9b, 0xad, 0xfc, 0x3e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, + 0x00, 0xdb, 0x00, 0xf6, 0x02, 0xcc, 0x03, 0x03, 0xa9, 0x00, 0x50, + 0x00, 0x00, 0x00, 0x10, 0x7a, 0x91, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x52, 0x5a, 0x49, 0xbd, 0xcf, 0x49, 0x2b, 0x3f, 0x6e, 0x34, 0xa8, + 0x3e, 0x9c, 0x4d, 0xef, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x52, 0x5a, + 0x49, 0xbd, 0xbe, 0xf5, 0x3d, 0x3f, 0x6e, 0x34, 0xa8, 0x3e, 0x9c, + 0x4d, 0xef, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x82, 0x53, 0x2f, 0x3f, + 0xbe, 0xf5, 0x3d, 0x3f, 0x0a, 0x2b, 0xe5, 0x3e, 0x10, 0x7a, 0x91, + 0x3c, 0x00, 0x00, 0x00, 0x00, 0x82, 0x53, 0x2f, 0x3f, 0xcf, 0x49, + 0x2b, 0x3f, 0x0a, 0x2b, 0xe5, 0x3e, 0x15, 0x00, 0x00, 0x00, 0xdb, + 0x00, 0xf7, 0x02, 0xcd, 0x03, 0x03, 0xaa, 0x00, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, + 0x00, 0x00, 0xdb, 0x00, 0xf8, 0x02, 0xcb, 0x03, 0x03, 0xab, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x11, 0x54, 0x8d, 0x3e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, + 0xf9, 0x02, 0xcc, 0x03, 0x03, 0xac, 0x00, 0x50, 0x00, 0x00, 0x00, + 0x53, 0x27, 0x8b, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, + 0xbd, 0x44, 0xe0, 0x78, 0x3e, 0x87, 0xc2, 0xef, 0x3e, 0xa9, 0x83, + 0x4c, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xed, + 0x61, 0x87, 0x3e, 0x87, 0xc2, 0xef, 0x3e, 0xa9, 0x83, 0x4c, 0x3e, + 0x00, 0x00, 0x00, 0x00, 0x32, 0x05, 0xeb, 0x3e, 0xed, 0x61, 0x87, + 0x3e, 0xcb, 0x49, 0x0c, 0x3f, 0x53, 0x27, 0x8b, 0x3d, 0x00, 0x00, + 0x00, 0x00, 0x32, 0x05, 0xeb, 0x3e, 0x44, 0xe0, 0x78, 0x3e, 0xcb, + 0x49, 0x0c, 0x3f, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xfa, 0x02, + 0xcd, 0x03, 0x03, 0xad, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, + 0x00, 0xfb, 0x02, 0xcb, 0x03, 0x03, 0xae, 0x00, 0x0c, 0x00, 0x00, + 0x00, 0x11, 0x54, 0x8d, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xfc, 0x02, 0xcc, + 0x03, 0x03, 0xaf, 0x00, 0x50, 0x00, 0x00, 0x00, 0xbb, 0x0b, 0x74, + 0x3d, 0x00, 0x00, 0x00, 0x00, 0x03, 0xb0, 0x21, 0xbe, 0xdc, 0x46, + 0xd3, 0x3e, 0xeb, 0xe0, 0x18, 0x3f, 0xa9, 0x83, 0x4c, 0x3e, 0x00, + 0x00, 0x00, 0x00, 0x03, 0xb0, 0x21, 0xbe, 0x85, 0xea, 0xde, 0x3e, + 0xeb, 0xe0, 0x18, 0x3f, 0xa9, 0x83, 0x4c, 0x3e, 0x00, 0x00, 0x00, + 0x00, 0x32, 0x05, 0xeb, 0x3e, 0x85, 0xea, 0xde, 0x3e, 0x4e, 0x7f, + 0x32, 0x3f, 0xbb, 0x0b, 0x74, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x32, + 0x05, 0xeb, 0x3e, 0xdc, 0x46, 0xd3, 0x3e, 0x4e, 0x7f, 0x32, 0x3f, + 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xfd, 0x02, 0xcd, 0x03, 0x03, + 0xb0, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, + 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xfe, 0x02, + 0xcb, 0x03, 0x03, 0xb1, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x79, 0x75, + 0x9e, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, + 0x00, 0x00, 0x00, 0xdb, 0x00, 0xff, 0x02, 0xcc, 0x03, 0x03, 0xb2, + 0x00, 0x50, 0x00, 0x00, 0x00, 0x3e, 0x6a, 0xad, 0x3d, 0x00, 0x00, + 0x00, 0x00, 0xe7, 0x35, 0x66, 0xbe, 0x35, 0xd0, 0x48, 0x3f, 0xda, + 0x39, 0x19, 0x3f, 0x12, 0xa5, 0x5d, 0x3e, 0x00, 0x00, 0x00, 0x00, + 0xe7, 0x35, 0x66, 0xbe, 0x1b, 0x49, 0x4e, 0x3f, 0xda, 0x39, 0x19, + 0x3f, 0x12, 0xa5, 0x5d, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x7f, + 0x04, 0x3f, 0x1b, 0x49, 0x4e, 0x3f, 0x17, 0x0e, 0x38, 0x3f, 0x3e, + 0x6a, 0xad, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x7f, 0x04, 0x3f, + 0x35, 0xd0, 0x48, 0x3f, 0x17, 0x0e, 0x38, 0x3f, 0x15, 0x00, 0x00, + 0x00, 0xdb, 0x00, 0x00, 0x03, 0xcd, 0x03, 0x03, 0xb3, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x01, 0x03, 0xcb, 0x03, 0x03, + 0xb4, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xa0, 0xdc, 0x42, 0x3f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, + 0xdb, 0x00, 0x02, 0x03, 0xcc, 0x03, 0x03, 0xb5, 0x00, 0x50, 0x00, + 0x00, 0x00, 0xe7, 0xff, 0xd5, 0x3c, 0x00, 0x00, 0x00, 0x00, 0xb4, + 0x8b, 0xbe, 0x3d, 0x2f, 0x6f, 0x7e, 0x3e, 0x57, 0x8c, 0x64, 0x3d, + 0x6c, 0x08, 0x3a, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xb4, 0x8b, 0xbe, + 0x3d, 0xe0, 0x66, 0xb9, 0x3e, 0x57, 0x8c, 0x64, 0x3d, 0x6c, 0x08, + 0x3a, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x79, 0xc4, 0x3e, 0xe0, + 0x66, 0xb9, 0x3e, 0x8c, 0xd9, 0xd2, 0x3d, 0xe7, 0xff, 0xd5, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0xf6, 0x79, 0xc4, 0x3e, 0x2f, 0x6f, 0x7e, + 0x3e, 0x8c, 0xd9, 0xd2, 0x3d, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, + 0x03, 0x03, 0xcd, 0x03, 0x03, 0xb6, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, + 0x00, 0xdb, 0x00, 0x04, 0x03, 0xcb, 0x03, 0x03, 0xb7, 0x00, 0x0c, + 0x00, 0x00, 0x00, 0x11, 0x8c, 0xeb, 0x3e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x05, + 0x03, 0xcc, 0x03, 0x03, 0xb8, 0x00, 0x50, 0x00, 0x00, 0x00, 0xe7, + 0xff, 0xd5, 0x3c, 0x00, 0x00, 0x00, 0x00, 0xbd, 0xc6, 0x6e, 0xbe, + 0x3b, 0xfe, 0xc3, 0x3e, 0xb9, 0xaa, 0x34, 0x3f, 0xc9, 0xe3, 0xd9, + 0x3e, 0x00, 0x00, 0x00, 0x00, 0xbd, 0xc6, 0x6e, 0xbe, 0x0a, 0x2b, + 0xe5, 0x3e, 0xb9, 0xaa, 0x34, 0x3f, 0xc9, 0xe3, 0xd9, 0x3e, 0x00, + 0x00, 0x00, 0x00, 0xdc, 0x7f, 0x04, 0x3f, 0x0a, 0x2b, 0xe5, 0x3e, + 0xe4, 0xd7, 0x53, 0x3f, 0xe7, 0xff, 0xd5, 0x3c, 0x00, 0x00, 0x00, + 0x00, 0xdc, 0x7f, 0x04, 0x3f, 0x3b, 0xfe, 0xc3, 0x3e, 0xe4, 0xd7, + 0x53, 0x3f, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x06, 0x03, 0xcd, + 0x03, 0x03, 0xb9, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, + 0x07, 0x03, 0xcb, 0x03, 0x03, 0xba, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x11, 0x8c, 0xeb, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x08, 0x03, 0xcc, 0x03, + 0x03, 0xbb, 0x00, 0x50, 0x00, 0x00, 0x00, 0xe7, 0xff, 0xd5, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x63, 0x0e, 0x36, + 0x3f, 0x0c, 0xcb, 0x37, 0x3f, 0xc9, 0xe3, 0xd9, 0x3e, 0x00, 0x00, + 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xca, 0xa4, 0x46, 0x3f, 0x0c, + 0xcb, 0x37, 0x3f, 0xc9, 0xe3, 0xd9, 0x3e, 0x00, 0x00, 0x00, 0x00, + 0x47, 0xe4, 0x37, 0x3f, 0xca, 0xa4, 0x46, 0x3f, 0x27, 0xf8, 0x56, + 0x3f, 0xe7, 0xff, 0xd5, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x47, 0xe4, + 0x37, 0x3f, 0x63, 0x0e, 0x36, 0x3f, 0x27, 0xf8, 0x56, 0x3f, 0x15, + 0x00, 0x00, 0x00, 0xdb, 0x00, 0x09, 0x03, 0xcd, 0x03, 0x03, 0xbc, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, + 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x0a, 0x03, 0xcb, + 0x03, 0x03, 0xbd, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x3e, 0x06, 0x27, + 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, + 0x00, 0x00, 0xdb, 0x00, 0x0b, 0x03, 0xcc, 0x03, 0x03, 0xbe, 0x00, + 0x50, 0x00, 0x00, 0x00, 0xe7, 0xff, 0xd5, 0x3c, 0x00, 0x00, 0x00, + 0x00, 0x66, 0x17, 0x27, 0xbd, 0x36, 0xe8, 0x63, 0x3f, 0xb1, 0x4e, + 0x5d, 0x3f, 0x09, 0x32, 0x1e, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x66, + 0x17, 0x27, 0xbd, 0xdd, 0x7b, 0x7c, 0x3f, 0xb1, 0x4e, 0x5d, 0x3f, + 0x09, 0x32, 0x1e, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x47, 0xe4, 0x37, + 0x3f, 0xdd, 0x7b, 0x7c, 0x3f, 0xbb, 0xd4, 0x7c, 0x3f, 0xe7, 0xff, + 0xd5, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x47, 0xe4, 0x37, 0x3f, 0x36, + 0xe8, 0x63, 0x3f, 0xbb, 0xd4, 0x7c, 0x3f, 0x15, 0x00, 0x00, 0x00, + 0xdb, 0x00, 0x0c, 0x03, 0xcd, 0x03, 0x03, 0xbf, 0x00, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, + 0x00, 0x00, 0x00, 0xdb, 0x00, 0x0d, 0x03, 0xcb, 0x03, 0x03, 0xc0, + 0x00, 0x0c, 0x00, 0x00, 0x00, 0x09, 0xe2, 0x24, 0x3f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, + 0x00, 0x0e, 0x03, 0xcc, 0x03, 0x03, 0xc1, 0x00, 0x50, 0x00, 0x00, + 0x00, 0x90, 0xe7, 0x86, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, + 0x04, 0xbd, 0x39, 0x09, 0x25, 0x3f, 0xe0, 0x81, 0xe9, 0x3e, 0x74, + 0x7a, 0x22, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, + 0x79, 0x59, 0x3f, 0x3f, 0xe0, 0x81, 0xe9, 0x3e, 0x74, 0x7a, 0x22, + 0x3f, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x79, 0x59, + 0x3f, 0x3f, 0x2d, 0x95, 0x13, 0x3f, 0x90, 0xe7, 0x86, 0x3a, 0x00, + 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x39, 0x09, 0x25, 0x3f, + 0x2d, 0x95, 0x13, 0x3f, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x0f, + 0x03, 0xcd, 0x03, 0x03, 0xc2, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xdb, 0x00, 0x10, 0x03, 0xcb, 0x03, 0x03, 0xc3, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x3e, 0x06, 0x27, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x11, 0x03, + 0xcc, 0x03, 0x03, 0xc4, 0x00, 0x50, 0x00, 0x00, 0x00, 0x53, 0x27, + 0x8b, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xdc, + 0x46, 0xd3, 0x3e, 0x03, 0xd0, 0xe8, 0x3e, 0x09, 0x32, 0x1e, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x6c, 0x7a, 0x00, + 0x3f, 0x03, 0xd0, 0xe8, 0x3e, 0x09, 0x32, 0x1e, 0x3f, 0x00, 0x00, + 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x6c, 0x7a, 0x00, 0x3f, 0x3e, + 0x3c, 0x13, 0x3f, 0x53, 0x27, 0x8b, 0x3d, 0x00, 0x00, 0x00, 0x00, + 0x12, 0xc0, 0x35, 0x3f, 0xdc, 0x46, 0xd3, 0x3e, 0x3e, 0x3c, 0x13, + 0x3f, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x12, 0x03, 0xcd, 0x03, + 0x03, 0xc5, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x13, + 0x03, 0xcb, 0x03, 0x03, 0xc6, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xaf, + 0x99, 0x20, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x14, 0x03, 0xcc, 0x03, 0x03, + 0xc7, 0x00, 0x50, 0x00, 0x00, 0x00, 0xe5, 0x85, 0x2f, 0x3d, 0x00, + 0x00, 0x00, 0x00, 0x66, 0x17, 0x27, 0xbd, 0xf8, 0x36, 0xfd, 0x3d, + 0xde, 0x74, 0x2f, 0x3f, 0x8b, 0xc5, 0x17, 0x3f, 0x00, 0x00, 0x00, + 0x00, 0x66, 0x17, 0x27, 0xbd, 0xb6, 0xf7, 0x59, 0x3e, 0xde, 0x74, + 0x2f, 0x3f, 0x8b, 0xc5, 0x17, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x47, + 0xe4, 0x37, 0x3f, 0xb6, 0xf7, 0x59, 0x3e, 0xf8, 0xfa, 0x4e, 0x3f, + 0xe5, 0x85, 0x2f, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x47, 0xe4, 0x37, + 0x3f, 0xf8, 0x36, 0xfd, 0x3d, 0xf8, 0xfa, 0x4e, 0x3f, 0x15, 0x00, + 0x00, 0x00, 0xdb, 0x00, 0x15, 0x03, 0xcd, 0x03, 0x03, 0xc8, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, + 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x16, 0x03, 0xcb, 0x03, + 0x03, 0xc9, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x5d, 0xdf, 0x33, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, + 0x00, 0xdb, 0x00, 0x17, 0x03, 0xcc, 0x03, 0x03, 0xca, 0x00, 0x50, + 0x00, 0x00, 0x00, 0xbb, 0x0b, 0x74, 0x3d, 0x00, 0x00, 0x00, 0x00, + 0x7b, 0xd4, 0x04, 0xbd, 0xe4, 0x84, 0x41, 0x3f, 0x14, 0x75, 0xae, + 0x3e, 0x28, 0x0b, 0x2b, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, + 0x04, 0xbd, 0x58, 0xca, 0x5a, 0x3f, 0x14, 0x75, 0xae, 0x3e, 0x28, + 0x0b, 0x2b, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, + 0x58, 0xca, 0x5a, 0x3f, 0x8f, 0x1d, 0xec, 0x3e, 0xbb, 0x0b, 0x74, + 0x3d, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0xe4, 0x84, + 0x41, 0x3f, 0x8f, 0x1d, 0xec, 0x3e, 0x15, 0x00, 0x00, 0x00, 0xdb, + 0x00, 0x18, 0x03, 0xcd, 0x03, 0x03, 0xcb, 0x00, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, + 0x00, 0x00, 0xdb, 0x00, 0x19, 0x03, 0xcb, 0x03, 0x03, 0xcc, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0xc5, 0xe4, 0x15, 0x3f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, + 0x1a, 0x03, 0xcc, 0x03, 0x03, 0xcd, 0x00, 0x50, 0x00, 0x00, 0x00, + 0xbb, 0x0b, 0x74, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, + 0xbd, 0x47, 0x1c, 0x0e, 0x3f, 0xe0, 0x81, 0xe9, 0x3e, 0xc6, 0x34, + 0x0f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xce, + 0xdd, 0x22, 0x3f, 0xe0, 0x81, 0xe9, 0x3e, 0xc6, 0x34, 0x0f, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0xce, 0xdd, 0x22, + 0x3f, 0x2d, 0x95, 0x13, 0x3f, 0xbb, 0x0b, 0x74, 0x3d, 0x00, 0x00, + 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x47, 0x1c, 0x0e, 0x3f, 0x2d, + 0x95, 0x13, 0x3f, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x1b, 0x03, + 0xcd, 0x03, 0x03, 0xce, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, + 0x00, 0x1c, 0x03, 0xcb, 0x03, 0x03, 0xcf, 0x00, 0x0c, 0x00, 0x00, + 0x00, 0x11, 0x54, 0x0d, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x1d, 0x03, 0xcc, + 0x03, 0x03, 0xd0, 0x00, 0x50, 0x00, 0x00, 0x00, 0xbb, 0x0b, 0x74, + 0x3d, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x27, 0xf9, + 0x51, 0x3e, 0x36, 0x75, 0x0e, 0x3f, 0x12, 0xa4, 0x06, 0x3f, 0x00, + 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x0b, 0xb8, 0x8f, 0x3e, + 0x36, 0x75, 0x0e, 0x3f, 0x12, 0xa4, 0x06, 0x3f, 0x00, 0x00, 0x00, + 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x0b, 0xb8, 0x8f, 0x3e, 0x73, 0x49, + 0x2d, 0x3f, 0xbb, 0x0b, 0x74, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x12, + 0xc0, 0x35, 0x3f, 0x27, 0xf9, 0x51, 0x3e, 0x73, 0x49, 0x2d, 0x3f, + 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x1e, 0x03, 0xcd, 0x03, 0x03, + 0xd1, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, + 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x1f, 0x03, + 0xcb, 0x03, 0x03, 0xd2, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x3e, 0x06, + 0x27, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, + 0x00, 0x00, 0x00, 0xdb, 0x00, 0x20, 0x03, 0xcc, 0x03, 0x03, 0xd3, + 0x00, 0x50, 0x00, 0x00, 0x00, 0xe5, 0x85, 0x2f, 0x3d, 0x00, 0x00, + 0x00, 0x00, 0x66, 0x17, 0x27, 0xbd, 0xb8, 0x3b, 0xf3, 0x3e, 0x51, + 0x67, 0x36, 0x3f, 0xaf, 0xe9, 0x19, 0x3f, 0x00, 0x00, 0x00, 0x00, + 0x66, 0x17, 0x27, 0xbd, 0xc8, 0xcd, 0x10, 0x3f, 0x51, 0x67, 0x36, + 0x3f, 0xaf, 0xe9, 0x19, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x47, 0xe4, + 0x37, 0x3f, 0xc8, 0xcd, 0x10, 0x3f, 0x6c, 0xed, 0x55, 0x3f, 0xe5, + 0x85, 0x2f, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x47, 0xe4, 0x37, 0x3f, + 0xb8, 0x3b, 0xf3, 0x3e, 0x6c, 0xed, 0x55, 0x3f, 0x15, 0x00, 0x00, + 0x00, 0xdb, 0x00, 0x21, 0x03, 0xcd, 0x03, 0x03, 0xd4, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x22, 0x03, 0xcb, 0x03, 0x03, + 0xd5, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xf2, 0x96, 0x2f, 0x3f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, + 0xdb, 0x00, 0x23, 0x03, 0xcc, 0x03, 0x03, 0xd6, 0x00, 0x50, 0x00, + 0x00, 0x00, 0xbb, 0x0b, 0x74, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x7b, + 0xd4, 0x04, 0xbd, 0xe3, 0xc7, 0x60, 0x3f, 0x64, 0x74, 0xf0, 0x3e, + 0x09, 0x32, 0x1e, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, + 0xbd, 0xcf, 0xf7, 0x77, 0x3f, 0x64, 0x74, 0xf0, 0x3e, 0x09, 0x32, + 0x1e, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0xcf, + 0xf7, 0x77, 0x3f, 0x6f, 0x0e, 0x17, 0x3f, 0xbb, 0x0b, 0x74, 0x3d, + 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0xe3, 0xc7, 0x60, + 0x3f, 0x6f, 0x0e, 0x17, 0x3f, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, + 0x24, 0x03, 0xcd, 0x03, 0x03, 0xd7, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, + 0x00, 0xdb, 0x00, 0x25, 0x03, 0xcb, 0x03, 0x03, 0xd8, 0x00, 0x0c, + 0x00, 0x00, 0x00, 0xa6, 0x0b, 0x89, 0x3e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x26, + 0x03, 0xcc, 0x03, 0x03, 0xd9, 0x00, 0x50, 0x00, 0x00, 0x00, 0x53, + 0x27, 0x8b, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, + 0x3b, 0xfe, 0xc3, 0x3e, 0x11, 0xab, 0x13, 0x3f, 0xa9, 0x83, 0x4c, + 0x3e, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x07, 0xf0, + 0xce, 0x3e, 0x11, 0xab, 0x13, 0x3f, 0xa9, 0x83, 0x4c, 0x3e, 0x00, + 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x07, 0xf0, 0xce, 0x3e, + 0x4e, 0x7f, 0x32, 0x3f, 0x53, 0x27, 0x8b, 0x3d, 0x00, 0x00, 0x00, + 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x3b, 0xfe, 0xc3, 0x3e, 0x4e, 0x7f, + 0x32, 0x3f, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x27, 0x03, 0xcd, + 0x03, 0x03, 0xda, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, + 0x28, 0x03, 0xcb, 0x03, 0x03, 0xdb, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x11, 0x8c, 0xeb, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x29, 0x03, 0xcc, 0x03, + 0x03, 0xdc, 0x00, 0x50, 0x00, 0x00, 0x00, 0x10, 0x7a, 0x91, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0x52, 0x5a, 0x49, 0xbd, 0xa9, 0xda, 0x6a, + 0x3f, 0x2c, 0x9d, 0x3b, 0x3f, 0xaa, 0x0a, 0xcd, 0x3e, 0x00, 0x00, + 0x00, 0x00, 0x52, 0x5a, 0x49, 0xbd, 0x34, 0xbf, 0x7a, 0x3f, 0x2c, + 0x9d, 0x3b, 0x3f, 0xaa, 0x0a, 0xcd, 0x3e, 0x00, 0x00, 0x00, 0x00, + 0x12, 0xc0, 0x35, 0x3f, 0x34, 0xbf, 0x7a, 0x3f, 0x46, 0x23, 0x5b, + 0x3f, 0x10, 0x7a, 0x91, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, + 0x35, 0x3f, 0xa9, 0xda, 0x6a, 0x3f, 0x46, 0x23, 0x5b, 0x3f, 0x15, + 0x00, 0x00, 0x00, 0xdb, 0x00, 0x2a, 0x03, 0xcd, 0x03, 0x03, 0xdd, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, + 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x2b, 0x03, 0xcb, + 0x03, 0x03, 0xde, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xcd, 0x72, 0x2d, + 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, + 0x00, 0x00, 0xdb, 0x00, 0x2c, 0x03, 0xcc, 0x03, 0x03, 0xdf, 0x00, + 0x50, 0x00, 0x00, 0x00, 0x53, 0x27, 0x8b, 0x3d, 0x00, 0x00, 0x00, + 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xd0, 0x61, 0x46, 0x3f, 0x64, 0x74, + 0xf0, 0x3e, 0xce, 0xc2, 0x26, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x7b, + 0xd4, 0x04, 0xbd, 0x78, 0x9c, 0x5e, 0x3f, 0x64, 0x74, 0xf0, 0x3e, + 0xce, 0xc2, 0x26, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, + 0x3f, 0x78, 0x9c, 0x5e, 0x3f, 0x6f, 0x0e, 0x17, 0x3f, 0x53, 0x27, + 0x8b, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0xd0, + 0x61, 0x46, 0x3f, 0x6f, 0x0e, 0x17, 0x3f, 0x15, 0x00, 0x00, 0x00, + 0xdb, 0x00, 0x2d, 0x03, 0xcd, 0x03, 0x03, 0xe0, 0x00, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, + 0x00, 0x00, 0x00, 0xdb, 0x00, 0x2e, 0x03, 0xcb, 0x03, 0x03, 0xe1, + 0x00, 0x0c, 0x00, 0x00, 0x00, 0x82, 0xe7, 0x06, 0x3f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, + 0x00, 0x2f, 0x03, 0xcc, 0x03, 0x03, 0xe2, 0x00, 0x50, 0x00, 0x00, + 0x00, 0xbb, 0x0b, 0x74, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, + 0x04, 0xbd, 0xe0, 0x0e, 0x94, 0x3e, 0x22, 0x52, 0x13, 0x3f, 0x82, + 0x37, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, + 0x03, 0xb5, 0xb8, 0x3e, 0x22, 0x52, 0x13, 0x3f, 0x82, 0x37, 0x00, + 0x3f, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x03, 0xb5, + 0xb8, 0x3e, 0x5f, 0x26, 0x32, 0x3f, 0xbb, 0x0b, 0x74, 0x3d, 0x00, + 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0xe0, 0x0e, 0x94, 0x3e, + 0x5f, 0x26, 0x32, 0x3f, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x30, + 0x03, 0xcd, 0x03, 0x03, 0xe3, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xdb, 0x00, 0x31, 0x03, 0xcb, 0x03, 0x03, 0xe4, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0xa9, 0x6a, 0x5a, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x32, 0x03, + 0xcc, 0x03, 0x03, 0xe5, 0x00, 0x50, 0x00, 0x00, 0x00, 0x53, 0x27, + 0x8b, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xd2, + 0xc5, 0x26, 0x3f, 0x98, 0xc0, 0x15, 0x3f, 0x8b, 0xe1, 0x46, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x54, 0x36, 0x44, + 0x3f, 0x98, 0xc0, 0x15, 0x3f, 0x8b, 0xe1, 0x46, 0x3f, 0x00, 0x00, + 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x54, 0x36, 0x44, 0x3f, 0xd5, + 0x94, 0x34, 0x3f, 0x53, 0x27, 0x8b, 0x3d, 0x00, 0x00, 0x00, 0x00, + 0x12, 0xc0, 0x35, 0x3f, 0xd2, 0xc5, 0x26, 0x3f, 0xd5, 0x94, 0x34, + 0x3f, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x33, 0x03, 0xcd, 0x03, + 0x03, 0xe6, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x34, + 0x03, 0xcb, 0x03, 0x03, 0xe7, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xf2, + 0x96, 0x2f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x35, 0x03, 0xcc, 0x03, 0x03, + 0xe8, 0x00, 0x50, 0x00, 0x00, 0x00, 0xbb, 0x0b, 0x74, 0x3d, 0x00, + 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xe0, 0x81, 0xe9, 0x3e, + 0xa9, 0x67, 0x15, 0x3f, 0x09, 0x32, 0x1e, 0x3f, 0x00, 0x00, 0x00, + 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xdc, 0xf0, 0x0b, 0x3f, 0xa9, 0x67, + 0x15, 0x3f, 0x09, 0x32, 0x1e, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x12, + 0xc0, 0x35, 0x3f, 0xdc, 0xf0, 0x0b, 0x3f, 0xe6, 0x3b, 0x34, 0x3f, + 0xbb, 0x0b, 0x74, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, + 0x3f, 0xe0, 0x81, 0xe9, 0x3e, 0xe6, 0x3b, 0x34, 0x3f, 0x15, 0x00, + 0x00, 0x00, 0xdb, 0x00, 0x36, 0x03, 0xcd, 0x03, 0x03, 0xe9, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, + 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x37, 0x03, 0xcb, 0x03, + 0x03, 0xea, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xb7, 0x27, 0x38, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, + 0x00, 0xdb, 0x00, 0x38, 0x03, 0xcc, 0x03, 0x03, 0xeb, 0x00, 0x50, + 0x00, 0x00, 0x00, 0xe7, 0xff, 0xd5, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x52, 0x5a, 0x49, 0xbd, 0x43, 0x54, 0x4d, 0x3f, 0x82, 0x39, 0x3a, + 0x3f, 0x82, 0x53, 0x2f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x52, 0x5a, + 0x49, 0xbd, 0x3e, 0xaf, 0x68, 0x3f, 0x82, 0x39, 0x3a, 0x3f, 0x82, + 0x53, 0x2f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x08, 0x3a, 0x3f, + 0x3e, 0xaf, 0x68, 0x3f, 0x69, 0x71, 0x5a, 0x3f, 0xe7, 0xff, 0xd5, + 0x3c, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x08, 0x3a, 0x3f, 0x43, 0x54, + 0x4d, 0x3f, 0x69, 0x71, 0x5a, 0x3f, 0x15, 0x00, 0x00, 0x00, 0xdb, + 0x00, 0x39, 0x03, 0xcd, 0x03, 0x03, 0xec, 0x00, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, + 0x00, 0x00, 0xdb, 0x00, 0x3a, 0x03, 0xcb, 0x03, 0x03, 0xed, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x8a, 0x75, 0x1e, 0x3f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, + 0x3b, 0x03, 0xcc, 0x03, 0x03, 0xee, 0x00, 0x50, 0x00, 0x00, 0x00, + 0xbb, 0x0b, 0x74, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, + 0xbd, 0x9d, 0xcf, 0x4a, 0x3c, 0x36, 0x75, 0x0e, 0x3f, 0x55, 0xa1, + 0x15, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xec, + 0xbb, 0xc7, 0x3d, 0x36, 0x75, 0x0e, 0x3f, 0x55, 0xa1, 0x15, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0xec, 0xbb, 0xc7, + 0x3d, 0x73, 0x49, 0x2d, 0x3f, 0xbb, 0x0b, 0x74, 0x3d, 0x00, 0x00, + 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x9d, 0xcf, 0x4a, 0x3c, 0x73, + 0x49, 0x2d, 0x3f, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x3c, 0x03, + 0xcd, 0x03, 0x03, 0xef, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, + 0x00, 0x3d, 0x03, 0xcb, 0x03, 0x03, 0xf0, 0x00, 0x0c, 0x00, 0x00, + 0x00, 0xb7, 0x27, 0x38, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x3e, 0x03, 0xcc, + 0x03, 0x03, 0xf1, 0x00, 0x50, 0x00, 0x00, 0x00, 0xe7, 0xff, 0xd5, + 0x3c, 0x00, 0x00, 0x00, 0x00, 0x03, 0xb0, 0x21, 0xbe, 0xb8, 0x3b, + 0xf3, 0x3e, 0xd7, 0x18, 0x58, 0x3f, 0x82, 0x53, 0x2f, 0x3f, 0x00, + 0x00, 0x00, 0x00, 0x03, 0xb0, 0x21, 0xbe, 0xe8, 0xf8, 0x14, 0x3f, + 0xd7, 0x18, 0x58, 0x3f, 0x82, 0x53, 0x2f, 0x3f, 0x00, 0x00, 0x00, + 0x00, 0x6c, 0x08, 0x3a, 0x3f, 0xe8, 0xf8, 0x14, 0x3f, 0xbb, 0xd4, + 0x7c, 0x3f, 0xe7, 0xff, 0xd5, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x6c, + 0x08, 0x3a, 0x3f, 0xb8, 0x3b, 0xf3, 0x3e, 0xbb, 0xd4, 0x7c, 0x3f, + 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x3f, 0x03, 0xcd, 0x03, 0x03, + 0xf2, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, + 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x40, 0x03, + 0xcb, 0x03, 0x03, 0xf3, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xaf, 0x99, + 0x20, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, + 0x00, 0x00, 0x00, 0xdb, 0x00, 0x41, 0x03, 0xcc, 0x03, 0x03, 0xf4, + 0x00, 0x50, 0x00, 0x00, 0x00, 0xbb, 0x0b, 0x74, 0x3d, 0x00, 0x00, + 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x0d, 0x17, 0xd9, 0x3d, 0x36, + 0x75, 0x0e, 0x3f, 0x09, 0x32, 0x1e, 0x3f, 0x00, 0x00, 0x00, 0x00, + 0x7b, 0xd4, 0x04, 0xbd, 0x7b, 0x4b, 0x49, 0x3e, 0x36, 0x75, 0x0e, + 0x3f, 0x09, 0x32, 0x1e, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, + 0x35, 0x3f, 0x7b, 0x4b, 0x49, 0x3e, 0x73, 0x49, 0x2d, 0x3f, 0xbb, + 0x0b, 0x74, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, + 0x0d, 0x17, 0xd9, 0x3d, 0x73, 0x49, 0x2d, 0x3f, 0x15, 0x00, 0x00, + 0x00, 0xdb, 0x00, 0x42, 0x03, 0xcd, 0x03, 0x03, 0xf5, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x43, 0x03, 0xcb, 0x03, 0x03, + 0xf6, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xdc, 0x2f, 0x0b, 0x3f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, + 0xdb, 0x00, 0x44, 0x03, 0xcc, 0x03, 0x03, 0xf7, 0x00, 0x50, 0x00, + 0x00, 0x00, 0x10, 0x7a, 0x91, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x52, + 0x5a, 0x49, 0xbd, 0x43, 0x54, 0x4d, 0x3f, 0xd4, 0x9c, 0x5c, 0x3f, + 0xb8, 0x5b, 0x02, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x52, 0x5a, 0x49, + 0xbd, 0xcb, 0xbc, 0x61, 0x3f, 0xd4, 0x9c, 0x5c, 0x3f, 0xb8, 0x5b, + 0x02, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x08, 0x3a, 0x3f, 0xcb, + 0xbc, 0x61, 0x3f, 0xbb, 0xd4, 0x7c, 0x3f, 0x10, 0x7a, 0x91, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0x6c, 0x08, 0x3a, 0x3f, 0x43, 0x54, 0x4d, + 0x3f, 0xbb, 0xd4, 0x7c, 0x3f, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, + 0x45, 0x03, 0xcd, 0x03, 0x03, 0xf8, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, + 0x00, 0xdb, 0x00, 0x46, 0x03, 0xcb, 0x03, 0x03, 0xf9, 0x00, 0x0c, + 0x00, 0x00, 0x00, 0x98, 0x4e, 0x2b, 0x3f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x47, + 0x03, 0xcc, 0x03, 0x03, 0xfa, 0x00, 0x50, 0x00, 0x00, 0x00, 0x9f, + 0xe8, 0x19, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, + 0xf6, 0x61, 0xc5, 0x3e, 0x90, 0x82, 0xa7, 0x3e, 0xce, 0xc2, 0x26, + 0x3f, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x53, 0xb4, + 0xfa, 0x3e, 0x90, 0x82, 0xa7, 0x3e, 0xce, 0xc2, 0x26, 0x3f, 0x00, + 0x00, 0x00, 0x00, 0xdc, 0x9b, 0x33, 0x3f, 0x53, 0xb4, 0xfa, 0x3e, + 0x2d, 0x79, 0xe4, 0x3e, 0x9f, 0xe8, 0x19, 0x3c, 0x00, 0x00, 0x00, + 0x00, 0xdc, 0x9b, 0x33, 0x3f, 0xf6, 0x61, 0xc5, 0x3e, 0x2d, 0x79, + 0xe4, 0x3e, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x48, 0x03, 0xcd, + 0x03, 0x03, 0xfb, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, + 0x49, 0x03, 0xcb, 0x03, 0x03, 0xfc, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x98, 0x4e, 0x2b, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x4a, 0x03, 0xcc, 0x03, + 0x03, 0xfd, 0x00, 0x50, 0x00, 0x00, 0x00, 0x53, 0x27, 0x8b, 0x3d, + 0x00, 0x00, 0x00, 0x00, 0x52, 0x5a, 0x49, 0xbd, 0xe0, 0x0e, 0x94, + 0x3e, 0xca, 0x51, 0x34, 0x3f, 0x8b, 0xc5, 0x17, 0x3f, 0x00, 0x00, + 0x00, 0x00, 0x52, 0x5a, 0x49, 0xbd, 0x65, 0xa7, 0xbf, 0x3e, 0xca, + 0x51, 0x34, 0x3f, 0x8b, 0xc5, 0x17, 0x3f, 0x00, 0x00, 0x00, 0x00, + 0x12, 0xc0, 0x35, 0x3f, 0x65, 0xa7, 0xbf, 0x3e, 0xe4, 0xd7, 0x53, + 0x3f, 0x53, 0x27, 0x8b, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, + 0x35, 0x3f, 0xe0, 0x0e, 0x94, 0x3e, 0xe4, 0xd7, 0x53, 0x3f, 0x15, + 0x00, 0x00, 0x00, 0xdb, 0x00, 0x4b, 0x03, 0xcd, 0x03, 0x03, 0xfe, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, + 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x4c, 0x03, 0xcb, + 0x03, 0x03, 0xff, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x09, 0xe2, 0x24, + 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, + 0x00, 0x00, 0xdb, 0x00, 0x4d, 0x03, 0xcc, 0x03, 0x03, 0x00, 0x01, + 0x50, 0x00, 0x00, 0x00, 0x8b, 0x5d, 0xf0, 0xbb, 0x00, 0x00, 0x00, + 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xc3, 0xf5, 0x5c, 0x3f, 0x14, 0x75, + 0xae, 0x3e, 0x99, 0x9e, 0x24, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x7b, + 0xd4, 0x04, 0xbd, 0xcf, 0xf7, 0x77, 0x3f, 0x14, 0x75, 0xae, 0x3e, + 0x99, 0x9e, 0x24, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, + 0x3f, 0xcf, 0xf7, 0x77, 0x3f, 0x8f, 0x1d, 0xec, 0x3e, 0x8b, 0x5d, + 0xf0, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0xc3, + 0xf5, 0x5c, 0x3f, 0x8f, 0x1d, 0xec, 0x3e, 0x15, 0x00, 0x00, 0x00, + 0xdb, 0x00, 0x4e, 0x03, 0xcd, 0x03, 0x03, 0x01, 0x01, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, + 0x00, 0x00, 0x00, 0xdb, 0x00, 0x4f, 0x03, 0xcb, 0x03, 0x03, 0x02, + 0x01, 0x0c, 0x00, 0x00, 0x00, 0x11, 0x8c, 0x6b, 0x3f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, + 0x00, 0x50, 0x03, 0xcc, 0x03, 0x03, 0x03, 0x01, 0x50, 0x00, 0x00, + 0x00, 0x8b, 0x5d, 0xf0, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, + 0x04, 0xbd, 0xd7, 0xa5, 0x02, 0x3f, 0x90, 0x82, 0xa7, 0x3e, 0xa1, + 0x48, 0x6b, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, + 0x64, 0x1e, 0x29, 0x3f, 0x90, 0x82, 0xa7, 0x3e, 0xa1, 0x48, 0x6b, + 0x3f, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x64, 0x1e, + 0x29, 0x3f, 0x0a, 0x2b, 0xe5, 0x3e, 0x8b, 0x5d, 0xf0, 0xbb, 0x00, + 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0xd7, 0xa5, 0x02, 0x3f, + 0x0a, 0x2b, 0xe5, 0x3e, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x51, + 0x03, 0xcd, 0x03, 0x03, 0x04, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xdb, 0x00, 0x52, 0x03, 0xcb, 0x03, 0x03, 0x05, 0x01, 0x0c, 0x00, + 0x00, 0x00, 0x09, 0xe2, 0x24, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x53, 0x03, + 0xcc, 0x03, 0x03, 0x06, 0x01, 0x50, 0x00, 0x00, 0x00, 0x8b, 0x5d, + 0xf0, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x67, + 0x2a, 0x04, 0x3e, 0x1c, 0xeb, 0xda, 0x3e, 0x99, 0x9e, 0x24, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x98, 0x32, 0x70, + 0x3e, 0x1c, 0xeb, 0xda, 0x3e, 0x99, 0x9e, 0x24, 0x3f, 0x00, 0x00, + 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x98, 0x32, 0x70, 0x3e, 0xcb, + 0x49, 0x0c, 0x3f, 0x8b, 0x5d, 0xf0, 0xbb, 0x00, 0x00, 0x00, 0x00, + 0x12, 0xc0, 0x35, 0x3f, 0x67, 0x2a, 0x04, 0x3e, 0xcb, 0x49, 0x0c, + 0x3f, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x54, 0x03, 0xcd, 0x03, + 0x03, 0x07, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x55, + 0x03, 0xcb, 0x03, 0x03, 0x08, 0x01, 0x0c, 0x00, 0x00, 0x00, 0x09, + 0xe2, 0x24, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x56, 0x03, 0xcc, 0x03, 0x03, + 0x09, 0x01, 0x50, 0x00, 0x00, 0x00, 0x49, 0x9d, 0x80, 0xbc, 0x00, + 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x9d, 0xcf, 0x4a, 0x3c, + 0x1c, 0xeb, 0xda, 0x3e, 0xce, 0xc2, 0x26, 0x3f, 0x00, 0x00, 0x00, + 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x76, 0xf9, 0xf6, 0x3d, 0x1c, 0xeb, + 0xda, 0x3e, 0xce, 0xc2, 0x26, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x12, + 0xc0, 0x35, 0x3f, 0x76, 0xf9, 0xf6, 0x3d, 0xcb, 0x49, 0x0c, 0x3f, + 0x49, 0x9d, 0x80, 0xbc, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, + 0x3f, 0x9d, 0xcf, 0x4a, 0x3c, 0xcb, 0x49, 0x0c, 0x3f, 0x15, 0x00, + 0x00, 0x00, 0xdb, 0x00, 0x57, 0x03, 0xcd, 0x03, 0x03, 0x0a, 0x01, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, + 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x58, 0x03, 0xcb, 0x03, + 0x03, 0x0b, 0x01, 0x0c, 0x00, 0x00, 0x00, 0x1f, 0x2d, 0x1a, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, + 0x00, 0xdb, 0x00, 0x59, 0x03, 0xcc, 0x03, 0x03, 0x0c, 0x01, 0x50, + 0x00, 0x00, 0x00, 0xe7, 0xff, 0xd5, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x7b, 0xd4, 0x04, 0xbd, 0xe0, 0x0e, 0x94, 0x3e, 0xf4, 0xa4, 0xe4, + 0x3e, 0xfb, 0x58, 0x11, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, + 0x04, 0xbd, 0x20, 0x0b, 0xc1, 0x3e, 0xf4, 0xa4, 0xe4, 0x3e, 0xfb, + 0x58, 0x11, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, + 0x20, 0x0b, 0xc1, 0x3e, 0xb7, 0x26, 0x11, 0x3f, 0xe7, 0xff, 0xd5, + 0x3c, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0xe0, 0x0e, + 0x94, 0x3e, 0xb7, 0x26, 0x11, 0x3f, 0x15, 0x00, 0x00, 0x00, 0xdb, + 0x00, 0x5a, 0x03, 0xcd, 0x03, 0x03, 0x0d, 0x01, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, + 0x00, 0x00, 0xdb, 0x00, 0x5b, 0x03, 0xcb, 0x03, 0x03, 0x0e, 0x01, + 0x0c, 0x00, 0x00, 0x00, 0x7c, 0x9c, 0x91, 0x3e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, + 0x5c, 0x03, 0xcc, 0x03, 0x03, 0x0f, 0x01, 0x50, 0x00, 0x00, 0x00, + 0x53, 0x27, 0x8b, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x15, 0x91, + 0xbe, 0xb9, 0xa7, 0x7b, 0x3e, 0x63, 0x26, 0x51, 0x3f, 0x7b, 0x15, + 0x91, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x15, 0x91, 0xbe, 0x0b, + 0xb8, 0x8f, 0x3e, 0x63, 0x26, 0x51, 0x3f, 0x7b, 0x15, 0x91, 0x3e, + 0x00, 0x00, 0x00, 0x00, 0x55, 0xbd, 0x44, 0x3f, 0x0b, 0xb8, 0x8f, + 0x3e, 0xbb, 0xd4, 0x7c, 0x3f, 0x53, 0x27, 0x8b, 0x3d, 0x00, 0x00, + 0x00, 0x00, 0x55, 0xbd, 0x44, 0x3f, 0xb9, 0xa7, 0x7b, 0x3e, 0xbb, + 0xd4, 0x7c, 0x3f, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x5d, 0x03, + 0xcd, 0x03, 0x03, 0x10, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, + 0x00, 0x5e, 0x03, 0xcb, 0x03, 0x03, 0x11, 0x01, 0x0c, 0x00, 0x00, + 0x00, 0x9b, 0xad, 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x5f, 0x03, 0xcc, + 0x03, 0x03, 0x12, 0x01, 0x50, 0x00, 0x00, 0x00, 0xef, 0x3a, 0x1b, + 0x3e, 0x00, 0x00, 0x00, 0x00, 0xa7, 0xca, 0xe7, 0x3e, 0xfa, 0x29, + 0x86, 0x3e, 0x4d, 0xa3, 0x89, 0x3e, 0x51, 0xde, 0xf7, 0x3e, 0x00, + 0x00, 0x00, 0x00, 0xa7, 0xca, 0xe7, 0x3e, 0x21, 0xc8, 0xa1, 0x3e, + 0x4d, 0xa3, 0x89, 0x3e, 0x51, 0xde, 0xf7, 0x3e, 0x00, 0x00, 0x00, + 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x21, 0xc8, 0xa1, 0x3e, 0xac, 0x00, + 0x9f, 0x3e, 0xef, 0x3a, 0x1b, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x12, + 0xc0, 0x35, 0x3f, 0xfa, 0x29, 0x86, 0x3e, 0xac, 0x00, 0x9f, 0x3e, + 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x60, 0x03, 0xcd, 0x03, 0x03, + 0x13, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, + 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x61, 0x03, + 0xcb, 0x03, 0x03, 0x14, 0x01, 0x0c, 0x00, 0x00, 0x00, 0x7c, 0x9c, + 0x91, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, + 0x00, 0x00, 0x00, 0xdb, 0x00, 0x62, 0x03, 0xcc, 0x03, 0x03, 0x15, + 0x01, 0x50, 0x00, 0x00, 0x00, 0x8b, 0x5d, 0xf0, 0xbb, 0x00, 0x00, + 0x00, 0x00, 0x7b, 0x15, 0x91, 0xbe, 0xb1, 0x31, 0x4f, 0x3e, 0x63, + 0x26, 0x51, 0x3f, 0x7f, 0x14, 0x55, 0x3e, 0x00, 0x00, 0x00, 0x00, + 0x7b, 0x15, 0x91, 0xbe, 0x0d, 0xfa, 0x72, 0x3e, 0x63, 0x26, 0x51, + 0x3f, 0x7f, 0x14, 0x55, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x55, 0xbd, + 0x44, 0x3f, 0x0d, 0xfa, 0x72, 0x3e, 0xbb, 0xd4, 0x7c, 0x3f, 0x8b, + 0x5d, 0xf0, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x55, 0xbd, 0x44, 0x3f, + 0xb1, 0x31, 0x4f, 0x3e, 0xbb, 0xd4, 0x7c, 0x3f, 0x15, 0x00, 0x00, + 0x00, 0xdb, 0x00, 0x63, 0x03, 0xcd, 0x03, 0x03, 0x16, 0x01, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x64, 0x03, 0xcb, 0x03, 0x03, + 0x17, 0x01, 0x0c, 0x00, 0x00, 0x00, 0x9b, 0xad, 0xfc, 0x3e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, + 0xdb, 0x00, 0x65, 0x03, 0xcc, 0x03, 0x03, 0x18, 0x01, 0x50, 0x00, + 0x00, 0x00, 0xd0, 0xc8, 0x51, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x7a, + 0x34, 0xfd, 0x3e, 0x11, 0x1e, 0x69, 0x3f, 0x19, 0x2b, 0x80, 0x3d, + 0x13, 0x2c, 0xde, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x34, 0xfd, + 0x3e, 0x9b, 0x02, 0x79, 0x3f, 0x19, 0x2b, 0x80, 0x3d, 0x13, 0x2c, + 0xde, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x9b, + 0x02, 0x79, 0x3f, 0xec, 0xbb, 0xc7, 0x3d, 0xd0, 0xc8, 0x51, 0x3d, + 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x11, 0x1e, 0x69, + 0x3f, 0xec, 0xbb, 0xc7, 0x3d, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, + 0x66, 0x03, 0xcd, 0x03, 0x03, 0x19, 0x01, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, + 0x00, 0xdb, 0x00, 0x67, 0x03, 0xcb, 0x03, 0x03, 0x1a, 0x01, 0x0c, + 0x00, 0x00, 0x00, 0x11, 0x54, 0x8d, 0x3e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x68, + 0x03, 0xcc, 0x03, 0x03, 0x1b, 0x01, 0x50, 0x00, 0x00, 0x00, 0x53, + 0x27, 0x8b, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xdf, 0x11, 0x3f, + 0xf7, 0x1e, 0xa6, 0x3e, 0x90, 0x82, 0xa7, 0x3e, 0xa9, 0x83, 0x4c, + 0x3e, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xdf, 0x11, 0x3f, 0xa1, 0x10, + 0xb1, 0x3e, 0x90, 0x82, 0xa7, 0x3e, 0xa9, 0x83, 0x4c, 0x3e, 0x00, + 0x00, 0x00, 0x00, 0xdc, 0x9b, 0x33, 0x3f, 0xa1, 0x10, 0xb1, 0x3e, + 0x5c, 0x74, 0xb2, 0x3e, 0x53, 0x27, 0x8b, 0x3d, 0x00, 0x00, 0x00, + 0x00, 0xdc, 0x9b, 0x33, 0x3f, 0xf7, 0x1e, 0xa6, 0x3e, 0x5c, 0x74, + 0xb2, 0x3e, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x69, 0x03, 0xcd, + 0x03, 0x03, 0x1c, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, + 0x6a, 0x03, 0xcb, 0x03, 0x03, 0x1d, 0x01, 0x0c, 0x00, 0x00, 0x00, + 0x11, 0x54, 0x8d, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x6b, 0x03, 0xcc, 0x03, + 0x03, 0x1e, 0x01, 0x50, 0x00, 0x00, 0x00, 0x53, 0x27, 0x8b, 0x3d, + 0x00, 0x00, 0x00, 0x00, 0xa7, 0xca, 0xe7, 0x3e, 0xfa, 0x29, 0x86, + 0x3e, 0xec, 0xdd, 0x5f, 0x3e, 0x7f, 0x14, 0x55, 0x3e, 0x00, 0x00, + 0x00, 0x00, 0xa7, 0xca, 0xe7, 0x3e, 0xa3, 0xcd, 0x91, 0x3e, 0xec, + 0xdd, 0x5f, 0x3e, 0x7f, 0x14, 0x55, 0x3e, 0x00, 0x00, 0x00, 0x00, + 0x12, 0xc0, 0x35, 0x3f, 0xa3, 0xcd, 0x91, 0x3e, 0x77, 0x4c, 0x85, + 0x3e, 0x53, 0x27, 0x8b, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, + 0x35, 0x3f, 0xfa, 0x29, 0x86, 0x3e, 0x77, 0x4c, 0x85, 0x3e, 0x15, + 0x00, 0x00, 0x00, 0xdb, 0x00, 0x6c, 0x03, 0xcd, 0x03, 0x03, 0x1f, + 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, + 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x6d, 0x03, 0xcb, + 0x03, 0x03, 0x20, 0x01, 0x0c, 0x00, 0x00, 0x00, 0x7c, 0xd4, 0xef, + 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, + 0x00, 0x00, 0xdb, 0x00, 0x6e, 0x03, 0xcc, 0x03, 0x03, 0x21, 0x01, + 0x50, 0x00, 0x00, 0x00, 0x10, 0x7a, 0x91, 0x3c, 0x00, 0x00, 0x00, + 0x00, 0x66, 0x17, 0x27, 0xbd, 0x68, 0x3c, 0xb1, 0x3e, 0xe3, 0x34, + 0xe4, 0x3d, 0xf4, 0x52, 0xd1, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x66, + 0x17, 0x27, 0xbd, 0x5a, 0xb7, 0xd1, 0x3e, 0xe3, 0x34, 0xe4, 0x3d, + 0xf4, 0x52, 0xd1, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x95, 0xf3, + 0x3e, 0x5a, 0xb7, 0xd1, 0x3e, 0xc0, 0xe7, 0x47, 0x3e, 0x10, 0x7a, + 0x91, 0x3c, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x95, 0xf3, 0x3e, 0x68, + 0x3c, 0xb1, 0x3e, 0xc0, 0xe7, 0x47, 0x3e, 0x15, 0x00, 0x00, 0x00, + 0xdb, 0x00, 0x6f, 0x03, 0xcd, 0x03, 0x03, 0x22, 0x01, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, + 0x00, 0x00, 0x00, 0xdb, 0x00, 0x70, 0x03, 0xcb, 0x03, 0x03, 0x23, + 0x01, 0x0c, 0x00, 0x00, 0x00, 0xf2, 0x7a, 0x00, 0x3f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, + 0x00, 0x71, 0x03, 0xcc, 0x03, 0x03, 0x24, 0x01, 0x50, 0x00, 0x00, + 0x00, 0xd0, 0xc8, 0x51, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x66, 0x17, + 0x27, 0xbd, 0xa9, 0xda, 0x6a, 0x3f, 0x95, 0x44, 0x1a, 0x3f, 0x51, + 0xde, 0xf7, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x66, 0x17, 0x27, 0xbd, + 0xbb, 0xd4, 0x7c, 0x3f, 0x95, 0x44, 0x1a, 0x3f, 0x51, 0xde, 0xf7, + 0x3e, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0xbb, 0xd4, + 0x7c, 0x3f, 0xc1, 0x71, 0x39, 0x3f, 0xd0, 0xc8, 0x51, 0x3d, 0x00, + 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0xa9, 0xda, 0x6a, 0x3f, + 0xc1, 0x71, 0x39, 0x3f, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x72, + 0x03, 0xcd, 0x03, 0x03, 0x25, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xdb, 0x00, 0x73, 0x03, 0xcb, 0x03, 0x03, 0x26, 0x01, 0x0c, 0x00, + 0x00, 0x00, 0xf2, 0xb2, 0xde, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x74, 0x03, + 0xcc, 0x03, 0x03, 0x27, 0x01, 0x50, 0x00, 0x00, 0x00, 0x9f, 0xe8, + 0x19, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x66, 0x17, 0x27, 0xbd, 0x30, + 0x0e, 0xd6, 0x3e, 0xe3, 0x34, 0xe4, 0x3d, 0xc9, 0xe3, 0xd9, 0x3e, + 0x00, 0x00, 0x00, 0x00, 0x66, 0x17, 0x27, 0xbd, 0xba, 0x9e, 0xf8, + 0x3e, 0xe3, 0x34, 0xe4, 0x3d, 0xc9, 0xe3, 0xd9, 0x3e, 0x00, 0x00, + 0x00, 0x00, 0xe6, 0x95, 0xf3, 0x3e, 0xba, 0x9e, 0xf8, 0x3e, 0xc0, + 0xe7, 0x47, 0x3e, 0x9f, 0xe8, 0x19, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0xe6, 0x95, 0xf3, 0x3e, 0x30, 0x0e, 0xd6, 0x3e, 0xc0, 0xe7, 0x47, + 0x3e, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x75, 0x03, 0xcd, 0x03, + 0x03, 0x28, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x76, + 0x03, 0xcb, 0x03, 0x03, 0x29, 0x01, 0x0c, 0x00, 0x00, 0x00, 0xf2, + 0x7a, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x77, 0x03, 0xcc, 0x03, 0x03, + 0x2a, 0x01, 0x50, 0x00, 0x00, 0x00, 0x9f, 0xe8, 0x19, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x66, 0x17, 0x27, 0xbd, 0x9d, 0xcf, 0x4a, 0x3c, + 0xde, 0x74, 0x2f, 0x3f, 0x7e, 0x74, 0xe2, 0x3e, 0x00, 0x00, 0x00, + 0x00, 0x66, 0x17, 0x27, 0xbd, 0xb7, 0x2a, 0xa9, 0x3d, 0xde, 0x74, + 0x2f, 0x3f, 0x7e, 0x74, 0xe2, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x12, + 0xc0, 0x35, 0x3f, 0xb7, 0x2a, 0xa9, 0x3d, 0x0a, 0xa2, 0x4e, 0x3f, + 0x9f, 0xe8, 0x19, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, + 0x3f, 0x9d, 0xcf, 0x4a, 0x3c, 0x0a, 0xa2, 0x4e, 0x3f, 0x15, 0x00, + 0x00, 0x00, 0xdb, 0x00, 0x78, 0x03, 0xcd, 0x03, 0x03, 0x2b, 0x01, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, + 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x79, 0x03, 0xcb, 0x03, + 0x03, 0x2c, 0x01, 0x0c, 0x00, 0x00, 0x00, 0xf2, 0xb2, 0xde, 0x3e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, + 0x00, 0xdb, 0x00, 0x7a, 0x03, 0xcc, 0x03, 0x03, 0x2d, 0x01, 0x50, + 0x00, 0x00, 0x00, 0x9f, 0xe8, 0x19, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x66, 0x17, 0x27, 0xbd, 0x3b, 0xc8, 0x3f, 0x3f, 0x93, 0xa8, 0xf7, + 0x3d, 0xc9, 0xe3, 0xd9, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x66, 0x17, + 0x27, 0xbd, 0x80, 0x10, 0x51, 0x3f, 0x93, 0xa8, 0xf7, 0x3d, 0xc9, + 0xe3, 0xd9, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x95, 0xf3, 0x3e, + 0x80, 0x10, 0x51, 0x3f, 0x98, 0xa1, 0x51, 0x3e, 0x9f, 0xe8, 0x19, + 0x3c, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x95, 0xf3, 0x3e, 0x3b, 0xc8, + 0x3f, 0x3f, 0x98, 0xa1, 0x51, 0x3e, 0x15, 0x00, 0x00, 0x00, 0xdb, + 0x00, 0x7b, 0x03, 0xcd, 0x03, 0x03, 0x2e, 0x01, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, + 0x00, 0x00, 0xdb, 0x00, 0x7c, 0x03, 0xcb, 0x03, 0x03, 0x2f, 0x01, + 0x0c, 0x00, 0x00, 0x00, 0x30, 0x2d, 0x9a, 0x3e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, + 0x7d, 0x03, 0xcc, 0x03, 0x03, 0x30, 0x01, 0x50, 0x00, 0x00, 0x00, + 0x8b, 0x5d, 0xf0, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, + 0xbd, 0x61, 0xa5, 0x62, 0x3e, 0xcd, 0xcd, 0x2f, 0x3f, 0xd7, 0xa0, + 0xb7, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x0b, + 0xb8, 0x8f, 0x3e, 0xcd, 0xcd, 0x2f, 0x3f, 0xd7, 0xa0, 0xb7, 0x3e, + 0x00, 0x00, 0x00, 0x00, 0x47, 0xe4, 0x37, 0x3f, 0x0b, 0xb8, 0x8f, + 0x3e, 0xf8, 0xfa, 0x4e, 0x3f, 0x8b, 0x5d, 0xf0, 0xbb, 0x00, 0x00, + 0x00, 0x00, 0x47, 0xe4, 0x37, 0x3f, 0x61, 0xa5, 0x62, 0x3e, 0xf8, + 0xfa, 0x4e, 0x3f, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x7e, 0x03, + 0xcd, 0x03, 0x03, 0x31, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, + 0x00, 0x7f, 0x03, 0xcb, 0x03, 0x03, 0x32, 0x01, 0x0c, 0x00, 0x00, + 0x00, 0x9b, 0xad, 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x80, 0x03, 0xcc, + 0x03, 0x03, 0x33, 0x01, 0x50, 0x00, 0x00, 0x00, 0x90, 0xe7, 0x86, + 0x3a, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x57, 0x77, 0xbe, 0xd4, 0x29, + 0x07, 0x3f, 0x6c, 0x95, 0x50, 0x3e, 0x9a, 0x26, 0xfc, 0x3e, 0x00, + 0x00, 0x00, 0x00, 0x4f, 0x57, 0x77, 0xbe, 0x6c, 0x92, 0x1b, 0x3f, + 0x6c, 0x95, 0x50, 0x3e, 0x9a, 0x26, 0xfc, 0x3e, 0x00, 0x00, 0x00, + 0x00, 0x9c, 0x4d, 0xef, 0x3e, 0x6c, 0x92, 0x1b, 0x3f, 0xbb, 0x2b, + 0xa3, 0x3e, 0x90, 0xe7, 0x86, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x9c, + 0x4d, 0xef, 0x3e, 0xd4, 0x29, 0x07, 0x3f, 0xbb, 0x2b, 0xa3, 0x3e, + 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x81, 0x03, 0xcd, 0x03, 0x03, + 0x34, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, + 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x82, 0x03, + 0xcb, 0x03, 0x03, 0x35, 0x01, 0x0c, 0x00, 0x00, 0x00, 0xf2, 0x7a, + 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, + 0x00, 0x00, 0x00, 0xdb, 0x00, 0x83, 0x03, 0xcc, 0x03, 0x03, 0x36, + 0x01, 0x50, 0x00, 0x00, 0x00, 0xd0, 0xc8, 0x51, 0x3d, 0x00, 0x00, + 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xe8, 0xbf, 0x57, 0x3f, 0xda, + 0x39, 0x19, 0x3f, 0x7e, 0x74, 0xe2, 0x3e, 0x00, 0x00, 0x00, 0x00, + 0x7b, 0xd4, 0x04, 0xbd, 0x61, 0xfd, 0x67, 0x3f, 0xda, 0x39, 0x19, + 0x3f, 0x7e, 0x74, 0xe2, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, + 0x35, 0x3f, 0x61, 0xfd, 0x67, 0x3f, 0x17, 0x0e, 0x38, 0x3f, 0xd0, + 0xc8, 0x51, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, + 0xe8, 0xbf, 0x57, 0x3f, 0x17, 0x0e, 0x38, 0x3f, 0x15, 0x00, 0x00, + 0x00, 0xdb, 0x00, 0x84, 0x03, 0xcd, 0x03, 0x03, 0x37, 0x01, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x85, 0x03, 0xcb, 0x03, 0x03, + 0x38, 0x01, 0x0c, 0x00, 0x00, 0x00, 0x7c, 0xd4, 0x6f, 0x3e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, + 0xdb, 0x00, 0x86, 0x03, 0xcc, 0x03, 0x03, 0x39, 0x01, 0x50, 0x00, + 0x00, 0x00, 0xe5, 0x85, 0x2f, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x7b, + 0xd4, 0x04, 0xbd, 0xd7, 0xa5, 0x02, 0x3f, 0xe0, 0x81, 0xe9, 0x3e, + 0x6c, 0xd1, 0x32, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, + 0xbd, 0xbd, 0x1e, 0x08, 0x3f, 0xe0, 0x81, 0xe9, 0x3e, 0x6c, 0xd1, + 0x32, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x9b, 0x33, 0x3f, 0xbd, + 0x1e, 0x08, 0x3f, 0x3e, 0x3c, 0x13, 0x3f, 0xe5, 0x85, 0x2f, 0x3d, + 0x00, 0x00, 0x00, 0x00, 0xdc, 0x9b, 0x33, 0x3f, 0xd7, 0xa5, 0x02, + 0x3f, 0x3e, 0x3c, 0x13, 0x3f, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, + 0x87, 0x03, 0xcd, 0x03, 0x03, 0x3a, 0x01, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, + 0x00, 0xdb, 0x00, 0x88, 0x03, 0xcb, 0x03, 0x03, 0x3b, 0x01, 0x0c, + 0x00, 0x00, 0x00, 0x5d, 0xc3, 0x84, 0x3e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x89, + 0x03, 0xcc, 0x03, 0x03, 0x3c, 0x01, 0x50, 0x00, 0x00, 0x00, 0xff, + 0x32, 0xa9, 0xbd, 0x00, 0x00, 0x00, 0x00, 0xbd, 0xc6, 0x6e, 0xbe, + 0xe0, 0x0e, 0x94, 0x3e, 0x4f, 0x03, 0x56, 0x3f, 0xa9, 0x83, 0x4c, + 0x3e, 0x00, 0x00, 0x00, 0x00, 0xbd, 0xc6, 0x6e, 0xbe, 0xf9, 0x81, + 0xab, 0x3e, 0x4f, 0x03, 0x56, 0x3f, 0xa9, 0x83, 0x4c, 0x3e, 0x00, + 0x00, 0x00, 0x00, 0xdc, 0x9b, 0x33, 0x3f, 0xf9, 0x81, 0xab, 0x3e, + 0xbb, 0xd4, 0x7c, 0x3f, 0xff, 0x32, 0xa9, 0xbd, 0x00, 0x00, 0x00, + 0x00, 0xdc, 0x9b, 0x33, 0x3f, 0xe0, 0x0e, 0x94, 0x3e, 0xbb, 0xd4, + 0x7c, 0x3f, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x8a, 0x03, 0xcd, + 0x03, 0x03, 0x3d, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, + 0x8b, 0x03, 0xcb, 0x03, 0x03, 0x3e, 0x01, 0x0c, 0x00, 0x00, 0x00, + 0xc5, 0x1c, 0xf4, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x8c, 0x03, 0xcc, 0x03, + 0x03, 0x3f, 0x01, 0x50, 0x00, 0x00, 0x00, 0xd0, 0xc8, 0x51, 0x3d, + 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x33, 0xf9, 0x12, + 0x3f, 0x98, 0xc0, 0x15, 0x3f, 0xe6, 0x95, 0xf3, 0x3e, 0x00, 0x00, + 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x67, 0x9a, 0x24, 0x3f, 0x98, + 0xc0, 0x15, 0x3f, 0xe6, 0x95, 0xf3, 0x3e, 0x00, 0x00, 0x00, 0x00, + 0x12, 0xc0, 0x35, 0x3f, 0x67, 0x9a, 0x24, 0x3f, 0xd5, 0x94, 0x34, + 0x3f, 0xd0, 0xc8, 0x51, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, + 0x35, 0x3f, 0x33, 0xf9, 0x12, 0x3f, 0xd5, 0x94, 0x34, 0x3f, 0x15, + 0x00, 0x00, 0x00, 0xdb, 0x00, 0x8d, 0x03, 0xcd, 0x03, 0x03, 0x40, + 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, + 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x8e, 0x03, 0xcb, + 0x03, 0x03, 0x41, 0x01, 0x0c, 0x00, 0x00, 0x00, 0x7c, 0xd4, 0x6f, + 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, + 0x00, 0x00, 0xdb, 0x00, 0x8f, 0x03, 0xcc, 0x03, 0x03, 0x42, 0x01, + 0x50, 0x00, 0x00, 0x00, 0xd0, 0xc8, 0x51, 0x3d, 0x00, 0x00, 0x00, + 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x86, 0x74, 0x50, 0x3f, 0xda, 0x39, + 0x19, 0x3f, 0x6c, 0xd1, 0x32, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x7b, + 0xd4, 0x04, 0xbd, 0x7d, 0x94, 0x55, 0x3f, 0xda, 0x39, 0x19, 0x3f, + 0x6c, 0xd1, 0x32, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, + 0x3f, 0x7d, 0x94, 0x55, 0x3f, 0x17, 0x0e, 0x38, 0x3f, 0xd0, 0xc8, + 0x51, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x12, 0xc0, 0x35, 0x3f, 0x86, + 0x74, 0x50, 0x3f, 0x17, 0x0e, 0x38, 0x3f, 0x15, 0x00, 0x00, 0x00, + 0xdb, 0x00, 0x90, 0x03, 0xcd, 0x03, 0x03, 0x43, 0x01, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, + 0x00, 0x00, 0x00, 0xdb, 0x00, 0x91, 0x03, 0xcb, 0x03, 0x03, 0x44, + 0x01, 0x0c, 0x00, 0x00, 0x00, 0x30, 0x49, 0x49, 0x3f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, + 0x00, 0x92, 0x03, 0xcc, 0x03, 0x03, 0x45, 0x01, 0x50, 0x00, 0x00, + 0x00, 0xd0, 0xc8, 0x51, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, + 0x04, 0xbd, 0x9d, 0xcf, 0x4a, 0x3c, 0xb3, 0xbe, 0xb7, 0x3d, 0x6c, + 0x08, 0x3a, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, + 0xec, 0xc0, 0xf9, 0x3d, 0xb3, 0xbe, 0xb7, 0x3d, 0x6c, 0x08, 0x3a, + 0x3f, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x4d, 0xef, 0x3e, 0xec, 0xc0, + 0xf9, 0x3d, 0x26, 0xe5, 0x2e, 0x3e, 0xd0, 0xc8, 0x51, 0x3d, 0x00, + 0x00, 0x00, 0x00, 0x9c, 0x4d, 0xef, 0x3e, 0x9d, 0xcf, 0x4a, 0x3c, + 0x26, 0xe5, 0x2e, 0x3e, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x93, + 0x03, 0xcd, 0x03, 0x03, 0x46, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xdb, 0x00, 0x94, 0x03, 0xcb, 0x03, 0x03, 0x47, 0x01, 0x0c, 0x00, + 0x00, 0x00, 0xf2, 0x7a, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x95, 0x03, + 0xcc, 0x03, 0x03, 0x48, 0x01, 0x50, 0x00, 0x00, 0x00, 0xd0, 0xc8, + 0x51, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xac, + 0xe3, 0x10, 0x3f, 0xce, 0xc3, 0xe9, 0x3d, 0x7e, 0x74, 0xe2, 0x3e, + 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x25, 0x21, 0x21, + 0x3f, 0xce, 0xc3, 0xe9, 0x3d, 0x7e, 0x74, 0xe2, 0x3e, 0x00, 0x00, + 0x00, 0x00, 0x9c, 0x4d, 0xef, 0x3e, 0x25, 0x21, 0x21, 0x3f, 0xc0, + 0xe7, 0x47, 0x3e, 0xd0, 0xc8, 0x51, 0x3d, 0x00, 0x00, 0x00, 0x00, + 0x9c, 0x4d, 0xef, 0x3e, 0xac, 0xe3, 0x10, 0x3f, 0xc0, 0xe7, 0x47, + 0x3e, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x96, 0x03, 0xcd, 0x03, + 0x03, 0x49, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x97, + 0x03, 0xcb, 0x03, 0x03, 0x4a, 0x01, 0x0c, 0x00, 0x00, 0x00, 0x9b, + 0xad, 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x98, 0x03, 0xcc, 0x03, 0x03, + 0x4b, 0x01, 0x50, 0x00, 0x00, 0x00, 0x9f, 0xe8, 0x19, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x66, 0x17, 0x27, 0xbd, 0xfa, 0x29, 0x86, 0x3e, + 0xe3, 0x34, 0xe4, 0x3d, 0xe6, 0x95, 0xf3, 0x3e, 0x00, 0x00, 0x00, + 0x00, 0x66, 0x17, 0x27, 0xbd, 0x93, 0xe5, 0xac, 0x3e, 0xe3, 0x34, + 0xe4, 0x3d, 0xe6, 0x95, 0xf3, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xe6, + 0x95, 0xf3, 0x3e, 0x93, 0xe5, 0xac, 0x3e, 0xc0, 0xe7, 0x47, 0x3e, + 0x9f, 0xe8, 0x19, 0x3c, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x95, 0xf3, + 0x3e, 0xfa, 0x29, 0x86, 0x3e, 0xc0, 0xe7, 0x47, 0x3e, 0x15, 0x00, + 0x00, 0x00, 0xdb, 0x00, 0x99, 0x03, 0xcd, 0x03, 0x03, 0x4c, 0x01, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, + 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x9a, 0x03, 0xcb, 0x03, + 0x03, 0x4d, 0x01, 0x0c, 0x00, 0x00, 0x00, 0xf2, 0x7a, 0x00, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, + 0x00, 0xdb, 0x00, 0x9b, 0x03, 0xcc, 0x03, 0x03, 0x4e, 0x01, 0x50, + 0x00, 0x00, 0x00, 0xd0, 0xc8, 0x51, 0x3d, 0x00, 0x00, 0x00, 0x00, + 0xe7, 0x35, 0x66, 0xbe, 0x38, 0xdc, 0xc2, 0x3d, 0xd1, 0x92, 0x37, + 0x3e, 0x51, 0xde, 0xf7, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x35, + 0x66, 0xbe, 0x7e, 0x56, 0x29, 0x3e, 0xd1, 0x92, 0x37, 0x3e, 0x51, + 0xde, 0xf7, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x4d, 0xef, 0x3e, + 0x7e, 0x56, 0x29, 0x3e, 0xd4, 0x46, 0x95, 0x3e, 0xd0, 0xc8, 0x51, + 0x3d, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x4d, 0xef, 0x3e, 0x38, 0xdc, + 0xc2, 0x3d, 0xd4, 0x46, 0x95, 0x3e, 0x15, 0x00, 0x00, 0x00, 0xdb, + 0x00, 0x9c, 0x03, 0xcd, 0x03, 0x03, 0x4f, 0x01, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, + 0x00, 0x00, 0xdb, 0x00, 0x9d, 0x03, 0xcb, 0x03, 0x03, 0x50, 0x01, + 0x0c, 0x00, 0x00, 0x00, 0xf2, 0x7a, 0x00, 0x3f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, + 0x9e, 0x03, 0xcc, 0x03, 0x03, 0x51, 0x01, 0x50, 0x00, 0x00, 0x00, + 0x9f, 0xe8, 0x19, 0x3c, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x35, 0x66, + 0xbe, 0x83, 0xf8, 0x54, 0x3f, 0x38, 0xdc, 0xc2, 0x3d, 0x7e, 0x74, + 0xe2, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x35, 0x66, 0xbe, 0xa6, + 0xf2, 0x66, 0x3f, 0x38, 0xdc, 0xc2, 0x3d, 0x7e, 0x74, 0xe2, 0x3e, + 0x00, 0x00, 0x00, 0x00, 0x9c, 0x4d, 0xef, 0x3e, 0xa6, 0xf2, 0x66, + 0x3f, 0xcb, 0x68, 0x54, 0x3e, 0x9f, 0xe8, 0x19, 0x3c, 0x00, 0x00, + 0x00, 0x00, 0x9c, 0x4d, 0xef, 0x3e, 0x83, 0xf8, 0x54, 0x3f, 0xcb, + 0x68, 0x54, 0x3e, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x9f, 0x03, + 0xcd, 0x03, 0x03, 0x52, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, + 0x00, 0xa0, 0x03, 0xcb, 0x03, 0x03, 0x53, 0x01, 0x0c, 0x00, 0x00, + 0x00, 0x98, 0x4e, 0xab, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xa1, 0x03, 0xcc, + 0x03, 0x03, 0x54, 0x01, 0x50, 0x00, 0x00, 0x00, 0xd0, 0xc8, 0x51, + 0x3d, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xf7, 0x1e, + 0xa6, 0x3e, 0x32, 0xcb, 0xb6, 0x3e, 0xb9, 0xc7, 0xaa, 0x3e, 0x00, + 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xef, 0x91, 0xbd, 0x3e, + 0x32, 0xcb, 0xb6, 0x3e, 0xb9, 0xc7, 0xaa, 0x3e, 0x00, 0x00, 0x00, + 0x00, 0x9c, 0x4d, 0xef, 0x3e, 0xef, 0x91, 0xbd, 0x3e, 0x1e, 0x4e, + 0xe0, 0x3e, 0xd0, 0xc8, 0x51, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x9c, + 0x4d, 0xef, 0x3e, 0xf7, 0x1e, 0xa6, 0x3e, 0x1e, 0x4e, 0xe0, 0x3e, + 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xa2, 0x03, 0xcd, 0x03, 0x03, + 0x55, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, + 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xa3, 0x03, + 0xcb, 0x03, 0x03, 0x56, 0x01, 0x0c, 0x00, 0x00, 0x00, 0x6b, 0xb8, + 0xc0, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, + 0x00, 0x00, 0x00, 0xdb, 0x00, 0xa4, 0x03, 0xcc, 0x03, 0x03, 0x57, + 0x01, 0x50, 0x00, 0x00, 0x00, 0x90, 0xe7, 0x86, 0x3a, 0x00, 0x00, + 0x00, 0x00, 0x66, 0x17, 0x27, 0xbd, 0xe4, 0x67, 0x33, 0x3e, 0x9f, + 0xad, 0xab, 0x3e, 0x21, 0xe9, 0xbb, 0x3e, 0x00, 0x00, 0x00, 0x00, + 0x66, 0x17, 0x27, 0xbd, 0x98, 0x32, 0x70, 0x3e, 0x9f, 0xad, 0xab, + 0x3e, 0x21, 0xe9, 0xbb, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x95, + 0xf3, 0x3e, 0x98, 0x32, 0x70, 0x3e, 0x46, 0x94, 0xd6, 0x3e, 0x90, + 0xe7, 0x86, 0x3a, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x95, 0xf3, 0x3e, + 0xe4, 0x67, 0x33, 0x3e, 0x46, 0x94, 0xd6, 0x3e, 0x15, 0x00, 0x00, + 0x00, 0xdb, 0x00, 0xa5, 0x03, 0xcd, 0x03, 0x03, 0x58, 0x01, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xa6, 0x03, 0xcb, 0x03, 0x03, + 0x59, 0x01, 0x0c, 0x00, 0x00, 0x00, 0x4c, 0xdf, 0xb3, 0x3e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, + 0xdb, 0x00, 0xa7, 0x03, 0xcc, 0x03, 0x03, 0x5a, 0x01, 0x50, 0x00, + 0x00, 0x00, 0x8b, 0x5d, 0xf0, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x66, + 0x17, 0x27, 0xbd, 0x11, 0x1e, 0x69, 0x3f, 0x0d, 0x17, 0xd9, 0x3d, + 0x23, 0x10, 0xaf, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x66, 0x17, 0x27, + 0xbd, 0xf1, 0x9e, 0x77, 0x3f, 0x0d, 0x17, 0xd9, 0x3d, 0x23, 0x10, + 0xaf, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x55, 0xa1, 0x15, 0x3f, 0xf1, + 0x9e, 0x77, 0x3f, 0xcb, 0x68, 0x54, 0x3e, 0x8b, 0x5d, 0xf0, 0xbb, + 0x00, 0x00, 0x00, 0x00, 0x55, 0xa1, 0x15, 0x3f, 0x11, 0x1e, 0x69, + 0x3f, 0xcb, 0x68, 0x54, 0x3e, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, + 0xa8, 0x03, 0xcd, 0x03, 0x03, 0x5b, 0x01, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, + 0x00, 0xdb, 0x00, 0xa9, 0x03, 0xcb, 0x03, 0x03, 0x5c, 0x01, 0x0c, + 0x00, 0x00, 0x00, 0xf2, 0x7a, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xaa, + 0x03, 0xcc, 0x03, 0x03, 0x5d, 0x01, 0x50, 0x00, 0x00, 0x00, 0xd0, + 0xc8, 0x51, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x66, 0x17, 0x27, 0xbd, + 0x90, 0xf5, 0xfc, 0x3e, 0xce, 0xc3, 0xe9, 0x3d, 0x7e, 0x74, 0xe2, + 0x3e, 0x00, 0x00, 0x00, 0x00, 0x66, 0x17, 0x27, 0xbd, 0x41, 0xb8, + 0x0e, 0x3f, 0xce, 0xc3, 0xe9, 0x3d, 0x7e, 0x74, 0xe2, 0x3e, 0x00, + 0x00, 0x00, 0x00, 0x32, 0x05, 0xeb, 0x3e, 0x41, 0xb8, 0x0e, 0x3f, + 0xc0, 0xe7, 0x47, 0x3e, 0xd0, 0xc8, 0x51, 0x3d, 0x00, 0x00, 0x00, + 0x00, 0x32, 0x05, 0xeb, 0x3e, 0x90, 0xf5, 0xfc, 0x3e, 0xc0, 0xe7, + 0x47, 0x3e, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xab, 0x03, 0xcd, + 0x03, 0x03, 0x5e, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, + 0xac, 0x03, 0xcb, 0x03, 0x03, 0x5f, 0x01, 0x0c, 0x00, 0x00, 0x00, + 0xc8, 0x43, 0xe7, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xad, 0x03, 0xcc, 0x03, + 0x03, 0x60, 0x01, 0x50, 0x00, 0x00, 0x00, 0x8b, 0x5d, 0xf0, 0xbb, + 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x0b, 0xb3, 0x1c, + 0x3f, 0x03, 0x8f, 0xd4, 0x3c, 0xc7, 0xbc, 0xe6, 0x3e, 0x00, 0x00, + 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0xe9, 0xb7, 0x2f, 0x3f, 0x03, + 0x8f, 0xd4, 0x3c, 0xc7, 0xbc, 0xe6, 0x3e, 0x00, 0x00, 0x00, 0x00, + 0x32, 0x05, 0xeb, 0x3e, 0xe9, 0xb7, 0x2f, 0x3f, 0x77, 0x68, 0xd8, + 0x3d, 0x8b, 0x5d, 0xf0, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x32, 0x05, + 0xeb, 0x3e, 0x0b, 0xb3, 0x1c, 0x3f, 0x77, 0x68, 0xd8, 0x3d, 0x15, + 0x00, 0x00, 0x00, 0xdb, 0x00, 0xae, 0x03, 0xcd, 0x03, 0x03, 0x61, + 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, + 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xaf, 0x03, 0xcb, + 0x03, 0x03, 0x62, 0x01, 0x0c, 0x00, 0x00, 0x00, 0x98, 0x4e, 0x2b, + 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, + 0x00, 0x00, 0xdb, 0x00, 0xb0, 0x03, 0xcc, 0x03, 0x03, 0x63, 0x01, + 0x50, 0x00, 0x00, 0x00, 0x8b, 0x5d, 0xf0, 0xbb, 0x00, 0x00, 0x00, + 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x90, 0xf5, 0xfc, 0x3e, 0x03, 0x8f, + 0xd4, 0x3c, 0x28, 0x0b, 0x2b, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x7b, + 0xd4, 0x04, 0xbd, 0xa0, 0x87, 0x1a, 0x3f, 0x03, 0x8f, 0xd4, 0x3c, + 0x28, 0x0b, 0x2b, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x32, 0x05, 0xeb, + 0x3e, 0xa0, 0x87, 0x1a, 0x3f, 0x77, 0x68, 0xd8, 0x3d, 0x8b, 0x5d, + 0xf0, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x32, 0x05, 0xeb, 0x3e, 0x90, + 0xf5, 0xfc, 0x3e, 0x77, 0x68, 0xd8, 0x3d, 0x15, 0x00, 0x00, 0x00, + 0xdb, 0x00, 0xb1, 0x03, 0xcd, 0x03, 0x03, 0x64, 0x01, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, + 0x00, 0x00, 0x00, 0xdb, 0x00, 0xb2, 0x03, 0xcb, 0x03, 0x03, 0x65, + 0x01, 0x0c, 0x00, 0x00, 0x00, 0xc8, 0x43, 0xe7, 0x3e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, + 0x00, 0xb3, 0x03, 0xcc, 0x03, 0x03, 0x66, 0x01, 0x50, 0x00, 0x00, + 0x00, 0x20, 0x23, 0xc5, 0xbc, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, + 0x04, 0xbd, 0x40, 0xc0, 0x36, 0x3f, 0x5c, 0x11, 0x06, 0x3d, 0x9c, + 0x4d, 0xef, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, + 0xd8, 0x28, 0x4b, 0x3f, 0x5c, 0x11, 0x06, 0x3d, 0x9c, 0x4d, 0xef, + 0x3e, 0x00, 0x00, 0x00, 0x00, 0x32, 0x05, 0xeb, 0x3e, 0xd8, 0x28, + 0x4b, 0x3f, 0x3c, 0x4d, 0xe6, 0x3d, 0x20, 0x23, 0xc5, 0xbc, 0x00, + 0x00, 0x00, 0x00, 0x32, 0x05, 0xeb, 0x3e, 0x40, 0xc0, 0x36, 0x3f, + 0x3c, 0x4d, 0xe6, 0x3d, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xb4, + 0x03, 0xcd, 0x03, 0x03, 0x67, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, + 0xdb, 0x00, 0xb5, 0x03, 0xcb, 0x03, 0x03, 0x68, 0x01, 0x0c, 0x00, + 0x00, 0x00, 0xc8, 0x43, 0xe7, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xb6, 0x03, + 0xcc, 0x03, 0x03, 0x69, 0x01, 0x50, 0x00, 0x00, 0x00, 0x8b, 0x5d, + 0xf0, 0xbb, 0x00, 0x00, 0x00, 0x00, 0xbd, 0xc6, 0x6e, 0xbe, 0x9d, + 0xcf, 0x4a, 0x3c, 0xd1, 0x92, 0x37, 0x3e, 0xc7, 0xbc, 0xe6, 0x3e, + 0x00, 0x00, 0x00, 0x00, 0xbd, 0xc6, 0x6e, 0xbe, 0xe1, 0x80, 0xb1, + 0x3d, 0xd1, 0x92, 0x37, 0x3e, 0xc7, 0xbc, 0xe6, 0x3e, 0x00, 0x00, + 0x00, 0x00, 0x32, 0x05, 0xeb, 0x3e, 0xe1, 0x80, 0xb1, 0x3d, 0xd4, + 0x46, 0x95, 0x3e, 0x8b, 0x5d, 0xf0, 0xbb, 0x00, 0x00, 0x00, 0x00, + 0x32, 0x05, 0xeb, 0x3e, 0x9d, 0xcf, 0x4a, 0x3c, 0xd4, 0x46, 0x95, + 0x3e, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xb7, 0x03, 0xcd, 0x03, + 0x03, 0x6a, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xb8, + 0x03, 0xcb, 0x03, 0x03, 0x6b, 0x01, 0x0c, 0x00, 0x00, 0x00, 0xa9, + 0x6a, 0xda, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xb9, 0x03, 0xcc, 0x03, 0x03, + 0x6c, 0x01, 0x50, 0x00, 0x00, 0x00, 0x90, 0xe7, 0x86, 0x3a, 0x00, + 0x00, 0x00, 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x29, 0x04, 0x32, 0x3e, + 0xf8, 0xa5, 0xde, 0x3d, 0xf4, 0x52, 0xd1, 0x3e, 0x00, 0x00, 0x00, + 0x00, 0x7b, 0xd4, 0x04, 0xbd, 0x83, 0xc1, 0x75, 0x3e, 0xf8, 0xa5, + 0xde, 0x3d, 0xf4, 0x52, 0xd1, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x32, + 0x05, 0xeb, 0x3e, 0x83, 0xc1, 0x75, 0x3e, 0x1b, 0xf5, 0x40, 0x3e, + 0x90, 0xe7, 0x86, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x32, 0x05, 0xeb, + 0x3e, 0x29, 0x04, 0x32, 0x3e, 0x1b, 0xf5, 0x40, 0x3e, 0x15, 0x00, + 0x00, 0x00, 0xdb, 0x00, 0xba, 0x03, 0xcd, 0x03, 0x03, 0x6d, 0x01, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, + 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xbb, 0x03, 0xcb, 0x03, + 0x03, 0x6e, 0x01, 0x0c, 0x00, 0x00, 0x00, 0x9b, 0xad, 0xfc, 0x3e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, + 0x00, 0xdb, 0x00, 0xbc, 0x03, 0xcc, 0x03, 0x03, 0x6f, 0x01, 0x50, + 0x00, 0x00, 0x00, 0x20, 0x23, 0xc5, 0xbc, 0x00, 0x00, 0x00, 0x00, + 0xfd, 0x2f, 0x57, 0x3e, 0x61, 0xd7, 0x90, 0x3d, 0x37, 0xdb, 0x21, + 0x3d, 0xb8, 0x5b, 0x02, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xfd, 0x2f, + 0x57, 0x3e, 0x60, 0x00, 0x21, 0x3e, 0x37, 0xdb, 0x21, 0x3d, 0xb8, + 0x5b, 0x02, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x04, 0x37, 0xa2, 0x3e, + 0x60, 0x00, 0x21, 0x3e, 0xed, 0xbc, 0x68, 0x3d, 0x20, 0x23, 0xc5, + 0xbc, 0x00, 0x00, 0x00, 0x00, 0x04, 0x37, 0xa2, 0x3e, 0x61, 0xd7, + 0x90, 0x3d, 0xed, 0xbc, 0x68, 0x3d, 0x15, 0x00, 0x00, 0x00, 0xdb, + 0x00, 0xbd, 0x03, 0xcd, 0x03, 0x03, 0x70, 0x01, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, + 0x00, 0x00, 0xdb, 0x00, 0xbe, 0x03, 0xcb, 0x03, 0x03, 0x71, 0x01, + 0x0c, 0x00, 0x00, 0x00, 0x65, 0x89, 0x7a, 0x3f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, + 0xbf, 0x03, 0xcc, 0x03, 0x03, 0x72, 0x01, 0x50, 0x00, 0x00, 0x00, + 0x20, 0x23, 0xc5, 0xbc, 0x00, 0x00, 0x00, 0x00, 0xfd, 0x2f, 0x57, + 0x3e, 0x43, 0x54, 0x4d, 0x3f, 0x2c, 0xa0, 0x0b, 0x3d, 0x50, 0x8e, + 0x7e, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xfd, 0x2f, 0x57, 0x3e, 0xf1, + 0x9e, 0x77, 0x3f, 0x2c, 0xa0, 0x0b, 0x3d, 0x50, 0x8e, 0x7e, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x37, 0xa2, 0x3e, 0xf1, 0x9e, 0x77, + 0x3f, 0xe3, 0x81, 0x52, 0x3d, 0x20, 0x23, 0xc5, 0xbc, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x37, 0xa2, 0x3e, 0x43, 0x54, 0x4d, 0x3f, 0xe3, + 0x81, 0x52, 0x3d, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xc0, 0x03, + 0xcd, 0x03, 0x03, 0x73, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, + 0x00, 0xc1, 0x03, 0xcb, 0x03, 0x03, 0x74, 0x01, 0x0c, 0x00, 0x00, + 0x00, 0x9b, 0xad, 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xc2, 0x03, 0xcc, + 0x03, 0x03, 0x75, 0x01, 0x50, 0x00, 0x00, 0x00, 0x3e, 0x6a, 0xad, + 0x3d, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x34, 0xfd, 0x3e, 0x22, 0x8e, + 0x05, 0x3e, 0xdb, 0xb9, 0x85, 0x3d, 0xc9, 0xe3, 0xd9, 0x3e, 0x00, + 0x00, 0x00, 0x00, 0x7a, 0x34, 0xfd, 0x3e, 0xe8, 0x2d, 0x3e, 0x3e, + 0xdb, 0xb9, 0x85, 0x3d, 0xc9, 0xe3, 0xd9, 0x3e, 0x00, 0x00, 0x00, + 0x00, 0x12, 0xc0, 0x35, 0x3f, 0xe8, 0x2d, 0x3e, 0x3e, 0xa1, 0x4a, + 0xcd, 0x3d, 0x3e, 0x6a, 0xad, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x12, + 0xc0, 0x35, 0x3f, 0x22, 0x8e, 0x05, 0x3e, 0xa1, 0x4a, 0xcd, 0x3d, + 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xc3, 0x03, 0xcd, 0x03, 0x03, + 0x76, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, + 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xc4, 0x03, + 0xcb, 0x03, 0x03, 0x77, 0x01, 0x0c, 0x00, 0x00, 0x00, 0x9b, 0xad, + 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, + 0x00, 0x00, 0x00, 0xdb, 0x00, 0xc5, 0x03, 0xcc, 0x03, 0x03, 0x78, + 0x01, 0x50, 0x00, 0x00, 0x00, 0xbb, 0x0b, 0x74, 0x3d, 0x00, 0x00, + 0x00, 0x00, 0xf1, 0x2a, 0x07, 0x3f, 0x43, 0x54, 0x4d, 0x3f, 0x91, + 0x38, 0x75, 0x3d, 0xc9, 0xe3, 0xd9, 0x3e, 0x00, 0x00, 0x00, 0x00, + 0xf1, 0x2a, 0x07, 0x3f, 0xf0, 0x86, 0x5c, 0x3f, 0x91, 0x38, 0x75, + 0x3d, 0xc9, 0xe3, 0xd9, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x77, + 0x31, 0x3f, 0xf0, 0x86, 0x5c, 0x3f, 0xe1, 0x80, 0xb1, 0x3d, 0xbb, + 0x0b, 0x74, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x77, 0x31, 0x3f, + 0x43, 0x54, 0x4d, 0x3f, 0xe1, 0x80, 0xb1, 0x3d, 0x15, 0x00, 0x00, + 0x00, 0xdb, 0x00, 0xc6, 0x03, 0xcd, 0x03, 0x03, 0x79, 0x01, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xdb, 0x00, 0xc7, 0x03, 0xcb, 0x03, 0x03, + 0x7a, 0x01, 0x0c, 0x00, 0x00, 0x00, 0x9b, 0xad, 0xfc, 0x3e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, + 0xdb, 0x00, 0xc8, 0x03, 0xcc, 0x03, 0x03, 0x7b, 0x01, 0x50, 0x00, + 0x00, 0x00, 0x3e, 0x6a, 0xad, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x04, 0x14, 0x3f, 0x92, 0xb2, 0xdd, 0x3e, 0xc6, 0xd9, 0xa9, 0x3d, + 0xaa, 0x0a, 0xcd, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x14, + 0x3f, 0xdd, 0xec, 0xf7, 0x3e, 0xc6, 0xd9, 0xa9, 0x3d, 0xaa, 0x0a, + 0xcd, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x9b, 0x33, 0x3f, 0xdd, + 0xec, 0xf7, 0x3e, 0x8c, 0xd9, 0xd2, 0x3d, 0x3e, 0x6a, 0xad, 0x3d, + 0x00, 0x00, 0x00, 0x00, 0xdc, 0x9b, 0x33, 0x3f, 0x92, 0xb2, 0xdd, + 0x3e, 0x8c, 0xd9, 0xd2, 0x3d, 0x15, 0x00, 0x00, 0x00, 0xdb, 0x00, + 0xc9, 0x03, 0xcd, 0x03, 0x03, 0x7c, 0x01, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x19, 0x00, 0x00, + 0x00, 0xdb, 0x00, 0xca, 0x03, 0xcb, 0x03, 0x03, 0x7d, 0x01, 0x0c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x3f, 0x2c, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x15, + 0x00, 0x47, 0x65, 0x6f, 0x6d, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, + 0x41, 0x72, 0x72, 0x61, 0x79, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x01, 0x27, 0x00, 0xcb, 0x03, 0x0c, 0x00, 0x0c, 0x00, 0x04, 0x01, + 0x00, 0xce, 0x03, 0x03, 0x05, 0x01, 0x00, 0x00, 0x19, 0x00, 0x00, + 0x00, 0xdc, 0x00, 0xcc, 0x03, 0x14, 0x00, 0x14, 0x00, 0x04, 0x02, + 0x00, 0xce, 0x03, 0x03, 0x05, 0x01, 0x00, 0x00, 0xcf, 0x03, 0x02, + 0x05, 0x04, 0x0c, 0x00, 0x12, 0x00, 0x00, 0x00, 0xdc, 0x00, 0xcd, + 0x03, 0x02, 0x00, 0x02, 0x00, 0x02, 0x01, 0x00, 0xd0, 0x03, 0x01, + 0x01, 0x06, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xf3, 0x00, 0x0c, + 0x00, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4e, 0x61, + 0x6d, 0x65, 0x01, 0x27, 0x00, 0xce, 0x03, 0x06, 0x00, 0x76, 0x65, + 0x72, 0x74, 0x65, 0x78, 0x0e, 0x00, 0x00, 0x00, 0xf3, 0x00, 0xcf, + 0x03, 0x08, 0x00, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, + 0x0b, 0x00, 0x00, 0x00, 0xf3, 0x00, 0xd0, 0x03, 0x05, 0x00, 0x69, + 0x6e, 0x64, 0x65, 0x78 }; -const int default_font_data_len = 96715; +const int default_font_data_len = 100709; diff --git a/panda/src/text/cmss12.bam.pz.c b/panda/src/text/cmss12.bam.pz.c index 791d1f1348..c1b264b9a3 100644 --- a/panda/src/text/cmss12.bam.pz.c +++ b/panda/src/text/cmss12.bam.pz.c @@ -6,2412 +6,2667 @@ */ const unsigned char default_font_data[] = { - 0x78, 0x9c, 0xec, 0xbd, 0x0b, 0x5c, 0x55, 0xc5, 0xfa, 0x3f, 0xbc, - 0x68, 0x7b, 0x76, 0x60, 0x0a, 0x1a, 0xa2, 0xa2, 0x24, 0xa2, 0xa1, - 0xa1, 0xa6, 0x24, 0x8a, 0x57, 0x2e, 0x92, 0xa9, 0x78, 0x34, 0x0d, - 0xb5, 0xbc, 0x66, 0x16, 0x98, 0x57, 0xc4, 0xfb, 0x51, 0xca, 0xb3, - 0x4d, 0xf3, 0x78, 0xcb, 0xad, 0xa7, 0xd4, 0x84, 0x32, 0xbc, 0x9f, - 0x54, 0xca, 0x34, 0xb7, 0xb7, 0xbc, 0x24, 0xde, 0xc5, 0xc8, 0x42, - 0x0f, 0x52, 0xa1, 0xb6, 0x51, 0x14, 0x49, 0x36, 0x10, 0xec, 0x76, - 0xae, 0x73, 0xe6, 0x3f, 0xcf, 0xac, 0x35, 0xeb, 0x3a, 0x6b, 0x0b, - 0xb6, 0xcf, 0xf9, 0x7d, 0xde, 0xf7, 0x73, 0xa6, 0x5c, 0xb3, 0x66, - 0x78, 0xf6, 0x5a, 0xf3, 0x7d, 0x66, 0xd6, 0xcc, 0x33, 0xcf, 0x3c, - 0xf3, 0x4c, 0xca, 0xeb, 0x93, 0xb8, 0xda, 0x75, 0x6b, 0x71, 0x1c, - 0x57, 0x8b, 0xf3, 0xe1, 0xd2, 0x70, 0xbc, 0x17, 0xc7, 0x03, 0xa7, - 0x25, 0x26, 0x4d, 0x49, 0x98, 0x36, 0x6d, 0x96, 0xd7, 0x17, 0x34, - 0xf5, 0x22, 0xbe, 0x78, 0xad, 0xc4, 0xa9, 0xc1, 0xe3, 0x92, 0x13, - 0xc7, 0x41, 0xca, 0x14, 0xc2, 0xd5, 0xe5, 0x86, 0xce, 0x4b, 0x49, - 0x4a, 0x7c, 0x65, 0xc6, 0xc4, 0x59, 0xe3, 0x5e, 0x9f, 0x92, 0xe4, - 0xe5, 0xc5, 0x3d, 0x21, 0xe4, 0x0c, 0x7a, 0x7d, 0x52, 0xd2, 0x1b, - 0xb3, 0xb8, 0x59, 0x98, 0x22, 0x6e, 0xda, 0xec, 0xe4, 0x44, 0x29, - 0xc7, 0xc4, 0xf9, 0x72, 0x09, 0x49, 0xe3, 0x93, 0x66, 0x24, 0x25, - 0xbf, 0x91, 0xf4, 0x3c, 0xfe, 0xd3, 0x2c, 0xce, 0x8b, 0xab, 0xcd, - 0xbd, 0x31, 0x75, 0xe6, 0xcc, 0xe7, 0x3a, 0xb6, 0x4f, 0x7a, 0xf3, - 0xcd, 0xc7, 0x30, 0x49, 0x2d, 0x0e, 0xe1, 0xc0, 0xe1, 0xbf, 0xfc, - 0x89, 0x53, 0x84, 0xae, 0xf8, 0xdf, 0x21, 0xfc, 0x86, 0x84, 0x24, - 0xfc, 0xc0, 0x19, 0x43, 0x66, 0x8d, 0x9b, 0x95, 0xe4, 0xd5, 0x82, - 0x6b, 0xaa, 0x2e, 0x83, 0xfa, 0xe1, 0x8f, 0x85, 0xe0, 0xc7, 0x3d, - 0x86, 0x7f, 0xd7, 0x18, 0xff, 0x3b, 0x80, 0x4b, 0x23, 0xfc, 0xf6, - 0x85, 0xf1, 0xe3, 0x71, 0x61, 0x66, 0xe2, 0x5f, 0x9b, 0x70, 0x7e, - 0x20, 0xfe, 0xf7, 0x35, 0x2e, 0xd7, 0xd0, 0x19, 0xe3, 0x92, 0x67, - 0x8e, 0x9f, 0x36, 0x63, 0x2a, 0x7d, 0x74, 0x2d, 0xfc, 0xfe, 0x16, - 0xf8, 0x8f, 0x2b, 0x49, 0x39, 0xe4, 0x92, 0x79, 0x71, 0xf0, 0x9f, - 0x59, 0x51, 0xb4, 0x95, 0xf8, 0x1d, 0x87, 0xb9, 0x3a, 0xdc, 0x90, - 0xa4, 0xe9, 0xb3, 0xe1, 0xe5, 0x84, 0x5b, 0xbb, 0xb9, 0x27, 0x71, - 0xc6, 0x14, 0xfc, 0xa6, 0x89, 0x73, 0x92, 0x9e, 0x9f, 0x30, 0x71, - 0x4a, 0xa2, 0xc8, 0x44, 0xb3, 0xe6, 0x69, 0x7f, 0xe2, 0x5e, 0xe3, - 0x1e, 0x27, 0xcf, 0xf1, 0x26, 0x57, 0x1f, 0x72, 0xad, 0x4d, 0xae, - 0x4f, 0x90, 0x6b, 0x1d, 0x72, 0xad, 0x4b, 0xae, 0xbe, 0xe4, 0xea, - 0x47, 0xae, 0xf5, 0xc8, 0xb5, 0x3e, 0xb9, 0x3e, 0x49, 0xae, 0xfe, - 0xe4, 0xda, 0x80, 0x5c, 0x03, 0xc8, 0xb5, 0x21, 0xb9, 0x36, 0x22, - 0xd7, 0xc6, 0xe4, 0x1a, 0x48, 0xae, 0x4d, 0xc8, 0xb5, 0x29, 0xb9, - 0x06, 0x91, 0xeb, 0x53, 0xe4, 0xda, 0x8c, 0x5c, 0x83, 0xc9, 0xb5, - 0x39, 0xb9, 0x86, 0x90, 0x6b, 0x0b, 0x72, 0x6d, 0x49, 0xae, 0x4f, - 0x93, 0x6b, 0x28, 0xb9, 0xb6, 0x22, 0xd7, 0xd6, 0xe4, 0xfa, 0x0c, - 0xb9, 0x86, 0x91, 0x6b, 0x1b, 0x72, 0x6d, 0x4b, 0xae, 0xed, 0xc8, - 0xf5, 0x59, 0x72, 0x6d, 0x4f, 0xae, 0x1d, 0xc8, 0x35, 0x9c, 0x5c, - 0x9f, 0x23, 0xd7, 0x8e, 0xe4, 0x1a, 0x41, 0xae, 0x9d, 0xc8, 0xb5, - 0x33, 0xb9, 0x46, 0x92, 0x6b, 0x17, 0x72, 0xed, 0x4a, 0xae, 0xdd, - 0xc8, 0xb5, 0x3b, 0xb9, 0xf6, 0x20, 0xd7, 0x9e, 0xe4, 0x1a, 0x45, - 0xae, 0xd1, 0xe4, 0x1a, 0x43, 0xae, 0xb1, 0xe4, 0xda, 0x8b, 0x5c, - 0xe3, 0xc8, 0xf5, 0x79, 0x72, 0xed, 0x4d, 0xae, 0x2f, 0x90, 0x6b, - 0x1f, 0x72, 0xed, 0x4b, 0xae, 0xfd, 0xc8, 0x35, 0x9e, 0x5c, 0xfb, - 0x93, 0xeb, 0x9f, 0xc9, 0x75, 0x00, 0xb9, 0x0e, 0x24, 0xd7, 0x17, - 0xc9, 0x75, 0x10, 0xb9, 0x0e, 0x26, 0xd7, 0x97, 0xc8, 0x35, 0x81, - 0x5c, 0x87, 0x90, 0xeb, 0x50, 0x72, 0x1d, 0x46, 0xae, 0x2f, 0x93, - 0xeb, 0x2b, 0xe4, 0x3a, 0x9c, 0x5c, 0x47, 0x90, 0xeb, 0x48, 0x72, - 0x1d, 0x45, 0xae, 0xa3, 0xc9, 0x75, 0x0c, 0xb9, 0xbe, 0x4a, 0xae, - 0x63, 0xc9, 0xf5, 0x35, 0x72, 0x1d, 0x47, 0xae, 0xaf, 0x93, 0xeb, - 0x1b, 0xe4, 0x9a, 0x48, 0xae, 0x49, 0xe4, 0x3a, 0x9e, 0x53, 0x05, - 0x02, 0x19, 0x38, 0xf7, 0x29, 0x6e, 0x4d, 0x7d, 0x93, 0xa6, 0x4d, - 0x15, 0x1b, 0xdd, 0xe3, 0xb8, 0xc9, 0x45, 0x44, 0x28, 0x9b, 0x9d, - 0xdc, 0x80, 0x1f, 0xe3, 0xde, 0xe4, 0x26, 0x70, 0x13, 0xb9, 0x49, - 0xa4, 0x02, 0xe1, 0x87, 0x98, 0xb6, 0x93, 0x11, 0xed, 0x64, 0x4c, - 0x3b, 0x45, 0xa2, 0xf5, 0x01, 0xda, 0xce, 0x46, 0xb4, 0x53, 0x31, - 0x6d, 0xb2, 0x44, 0x5b, 0x1b, 0x68, 0x23, 0x8d, 0x68, 0xa7, 0x61, - 0xda, 0x14, 0x89, 0xf6, 0x09, 0xa0, 0xed, 0x62, 0x44, 0x3b, 0x1d, - 0xd3, 0xce, 0x90, 0x68, 0xeb, 0x00, 0x6d, 0x57, 0x23, 0xda, 0x99, - 0x98, 0x76, 0x96, 0x44, 0x5b, 0x17, 0x68, 0xbb, 0x19, 0xd1, 0xce, - 0xc6, 0xb4, 0x73, 0x24, 0x5a, 0x5f, 0x9c, 0xd3, 0x29, 0xdc, 0x88, - 0x76, 0x2e, 0xa6, 0xfd, 0x8b, 0x44, 0xeb, 0x07, 0xb4, 0xcf, 0x19, - 0xd1, 0xce, 0xc3, 0xb4, 0xf3, 0x25, 0xda, 0x7a, 0x40, 0xdb, 0xd1, - 0x88, 0x36, 0x15, 0xd3, 0xbe, 0x25, 0xd1, 0xd6, 0x07, 0x5a, 0xc3, - 0x7a, 0x7b, 0x1b, 0xd3, 0x2e, 0x90, 0x68, 0x9f, 0x04, 0x5a, 0xc3, - 0x7a, 0xfb, 0x2b, 0xa6, 0xb5, 0x48, 0xb4, 0xfe, 0x40, 0x6b, 0x58, - 0x6f, 0x0b, 0x31, 0xed, 0x3b, 0x12, 0x6d, 0x03, 0xa0, 0x35, 0xac, - 0xb7, 0x45, 0x98, 0x76, 0xb1, 0x44, 0x1b, 0x00, 0xb4, 0x86, 0xf5, - 0xf6, 0x2e, 0xa6, 0x5d, 0x22, 0xd1, 0x36, 0x04, 0x5a, 0xc3, 0x7a, - 0xfb, 0x1b, 0xa6, 0x5d, 0x2a, 0xd1, 0x36, 0x02, 0x5a, 0xc3, 0x7a, - 0x5b, 0x86, 0x69, 0x97, 0x4b, 0xb4, 0x8d, 0x71, 0x4e, 0x67, 0xc3, - 0x7a, 0x5b, 0x81, 0x69, 0x57, 0x4a, 0xb4, 0x81, 0x40, 0x6b, 0x58, - 0x6f, 0xef, 0x61, 0xda, 0x55, 0x12, 0x6d, 0x13, 0xa0, 0x35, 0xac, - 0x37, 0x2b, 0xa6, 0x5d, 0x2d, 0xd1, 0x36, 0x05, 0x5a, 0xc3, 0x7a, - 0x5b, 0x83, 0x69, 0xff, 0x2e, 0xd1, 0x06, 0x01, 0xad, 0x61, 0xbd, - 0xbd, 0x8f, 0x69, 0x3f, 0x90, 0x68, 0x9f, 0x02, 0x5a, 0xc3, 0x7a, - 0x5b, 0x8b, 0x69, 0xd7, 0x49, 0xb4, 0xcd, 0x80, 0xd6, 0xb0, 0xde, - 0xd6, 0x63, 0xda, 0x0f, 0x25, 0xda, 0x60, 0xa0, 0x35, 0xac, 0xb7, - 0x0d, 0x98, 0x36, 0x4d, 0xa2, 0x6d, 0x0e, 0xb4, 0x86, 0xf5, 0x96, - 0x8e, 0x69, 0x3f, 0x92, 0x68, 0x43, 0x80, 0xd6, 0xb0, 0xde, 0x3e, - 0xc6, 0xb4, 0x1b, 0x25, 0xda, 0x16, 0x38, 0x27, 0xd2, 0xb0, 0xde, - 0x3e, 0xc1, 0xb4, 0x19, 0x12, 0x6d, 0x4b, 0xa0, 0x35, 0xac, 0xb7, - 0x4d, 0x98, 0x76, 0xb3, 0x44, 0xfb, 0x34, 0xd0, 0x1a, 0xd6, 0xdb, - 0x16, 0x4c, 0xbb, 0x55, 0xa2, 0x0d, 0x05, 0x5a, 0xc3, 0x7a, 0xdb, - 0x86, 0x69, 0xb7, 0x4b, 0xb4, 0xad, 0x80, 0xd6, 0xb0, 0xde, 0x76, - 0x60, 0xda, 0x7f, 0x48, 0xb4, 0xad, 0x81, 0xd6, 0xb0, 0xde, 0x3e, - 0xc5, 0xb4, 0x3b, 0x25, 0xda, 0x67, 0x80, 0xd6, 0xb0, 0xde, 0x76, - 0x61, 0xda, 0xdd, 0x12, 0x6d, 0x18, 0xd0, 0x1a, 0xd6, 0x5b, 0x26, - 0xa6, 0xfd, 0x4c, 0xa2, 0x6d, 0x03, 0xb4, 0x86, 0xf5, 0xf6, 0x39, - 0xa6, 0xdd, 0x23, 0xd1, 0xb6, 0x05, 0x5a, 0xc3, 0x7a, 0xfb, 0x02, - 0xd3, 0xee, 0x95, 0x68, 0xdb, 0xe1, 0x9c, 0x2e, 0x86, 0xf5, 0xb6, - 0x0f, 0xd3, 0x7e, 0x29, 0xd1, 0x3e, 0x0b, 0xb4, 0x86, 0xf5, 0xb6, - 0x1f, 0xd3, 0xda, 0x24, 0xda, 0xf6, 0x40, 0x6b, 0x58, 0x6f, 0x07, - 0x30, 0xed, 0x41, 0x89, 0xb6, 0x03, 0xd0, 0x1a, 0xd6, 0xdb, 0x21, - 0x4c, 0x7b, 0x58, 0xa2, 0x0d, 0x07, 0x5a, 0xc3, 0x7a, 0x3b, 0x82, - 0x69, 0xbf, 0x92, 0x68, 0x9f, 0x03, 0x5a, 0xc3, 0x7a, 0x3b, 0x8a, - 0x69, 0x8f, 0x49, 0xb4, 0x1d, 0x81, 0xd6, 0xb0, 0xde, 0x8e, 0x63, - 0xda, 0x13, 0x12, 0x6d, 0x04, 0xd0, 0x1a, 0xd6, 0xdb, 0xd7, 0x98, - 0xf6, 0xa4, 0x44, 0xdb, 0x09, 0x68, 0x0d, 0xeb, 0x2d, 0x0b, 0xd3, - 0x9e, 0x92, 0x68, 0x3b, 0x03, 0xad, 0x61, 0xbd, 0x9d, 0xc6, 0xb4, - 0x67, 0x24, 0xda, 0x48, 0x9c, 0xd3, 0xd5, 0xb0, 0xde, 0xce, 0x62, - 0xda, 0x73, 0x12, 0x6d, 0x17, 0xa0, 0x35, 0xac, 0xb7, 0xf3, 0x98, - 0xf6, 0x82, 0x44, 0xdb, 0x15, 0x68, 0x0d, 0xeb, 0xed, 0x22, 0xa6, - 0xcd, 0x96, 0x68, 0xbb, 0x01, 0xad, 0x61, 0xbd, 0x5d, 0xc2, 0xb4, - 0xdf, 0x48, 0xb4, 0xdd, 0x81, 0xd6, 0xb0, 0xde, 0x72, 0x30, 0xed, - 0xb7, 0x12, 0x6d, 0x0f, 0xa0, 0x35, 0xac, 0xb7, 0xcb, 0x98, 0xf6, - 0x3b, 0x89, 0xb6, 0x27, 0xd0, 0x1a, 0xd6, 0xdb, 0xf7, 0x98, 0x36, - 0x57, 0xa2, 0x8d, 0x02, 0x5a, 0xc3, 0x7a, 0xbb, 0x82, 0x69, 0xaf, - 0x4a, 0xb4, 0xd1, 0x40, 0x6b, 0x58, 0x6f, 0xff, 0xc4, 0xb4, 0x79, - 0x12, 0x6d, 0x0c, 0xd0, 0x1a, 0xd6, 0xdb, 0x35, 0x4c, 0x9b, 0x2f, - 0xd1, 0xc6, 0xe2, 0x9c, 0x6e, 0x86, 0xf5, 0xf6, 0x03, 0xa6, 0xfd, - 0x51, 0xa2, 0xed, 0x05, 0xb4, 0x86, 0xf5, 0xf6, 0x13, 0xa6, 0x2d, - 0x90, 0x68, 0xe3, 0x80, 0xd6, 0xb0, 0xde, 0xae, 0x63, 0xda, 0x1b, - 0x12, 0xed, 0xf3, 0x40, 0x6b, 0x58, 0x6f, 0x37, 0x31, 0xed, 0xcf, - 0x12, 0x6d, 0x6f, 0xa0, 0x35, 0xac, 0x37, 0x3b, 0xa6, 0x2d, 0x94, - 0x68, 0x5f, 0x00, 0x5a, 0xc3, 0x7a, 0xbb, 0x85, 0x69, 0x6f, 0x4b, - 0xb4, 0x7d, 0x80, 0xd6, 0xb0, 0xde, 0x8a, 0x30, 0xed, 0x1d, 0x89, - 0xb6, 0x2f, 0xd0, 0x1a, 0xd6, 0xdb, 0x5d, 0x4c, 0x5b, 0x2c, 0xd1, - 0xf6, 0x03, 0x5a, 0xc3, 0x7a, 0xbb, 0x87, 0x69, 0x4b, 0x24, 0xda, - 0x78, 0xa0, 0x35, 0xac, 0xb7, 0x5f, 0x30, 0xed, 0x7d, 0x4c, 0x1b, - 0x46, 0x68, 0xfb, 0x63, 0xaa, 0xe7, 0xc2, 0x0d, 0x2b, 0xae, 0x14, - 0x13, 0x3b, 0x24, 0xe2, 0x3f, 0x13, 0x62, 0xc3, 0x9a, 0x2b, 0xc3, - 0xc4, 0xe5, 0x12, 0xf1, 0x00, 0x42, 0x6c, 0x58, 0x75, 0x15, 0x98, - 0xf8, 0x57, 0x89, 0x78, 0x20, 0x21, 0x36, 0xac, 0xbb, 0x4a, 0x4c, - 0x5c, 0x25, 0x11, 0xbf, 0x48, 0x88, 0x0d, 0x2b, 0xcf, 0x89, 0x89, - 0x7f, 0x93, 0x88, 0x07, 0x11, 0x62, 0xc3, 0xda, 0x73, 0x61, 0xe2, - 0xdf, 0x25, 0xe2, 0xc1, 0x84, 0xd8, 0xb0, 0xfa, 0x1e, 0x60, 0x62, - 0x5e, 0x22, 0x7e, 0x89, 0x10, 0x1b, 0xd6, 0xdf, 0xbf, 0x30, 0xf1, - 0xbf, 0x25, 0xe2, 0x04, 0x42, 0x6c, 0x58, 0x81, 0x08, 0x13, 0x73, - 0x5e, 0x94, 0x78, 0x08, 0x21, 0x36, 0xac, 0x41, 0x2f, 0xaf, 0x09, - 0xdc, 0x63, 0x12, 0xf1, 0x50, 0x20, 0x7e, 0xce, 0xb0, 0x06, 0x4d, - 0x98, 0xb8, 0x96, 0x44, 0x3c, 0x8c, 0x10, 0x1b, 0xd6, 0xe0, 0x9f, - 0x30, 0xb1, 0x59, 0x22, 0x7e, 0x99, 0x10, 0x1b, 0xd6, 0xe0, 0xe3, - 0x98, 0xd8, 0x5b, 0x22, 0x7e, 0x85, 0x10, 0x1b, 0xd6, 0xa0, 0x0f, - 0x26, 0xae, 0x2d, 0x11, 0x0f, 0x27, 0xc4, 0x86, 0x35, 0xf8, 0x04, - 0x26, 0xae, 0x23, 0x11, 0x8f, 0x20, 0xc4, 0x86, 0x35, 0x58, 0x17, - 0x13, 0xfb, 0x4a, 0xc4, 0x23, 0x09, 0xb1, 0x61, 0x0d, 0xfa, 0x61, - 0xe2, 0x7a, 0x12, 0xf1, 0x28, 0x42, 0x6c, 0x58, 0x83, 0xf5, 0x31, - 0xf1, 0x93, 0x12, 0xf1, 0x68, 0x42, 0x6c, 0x58, 0x83, 0xfe, 0x98, - 0xb8, 0x81, 0x44, 0x3c, 0x86, 0x10, 0x1b, 0xd6, 0x60, 0x00, 0x26, - 0x6e, 0x28, 0x11, 0xbf, 0x0a, 0xc4, 0x1d, 0x0d, 0x6b, 0xb0, 0x11, - 0x26, 0x6e, 0x2c, 0x11, 0x8f, 0x25, 0xc4, 0x86, 0x35, 0x18, 0x88, - 0x89, 0x9b, 0x48, 0xc4, 0xaf, 0x11, 0x62, 0xc3, 0x1a, 0x6c, 0x8a, - 0x89, 0x83, 0x24, 0xe2, 0x71, 0x84, 0xd8, 0xb0, 0x06, 0x9f, 0xc2, - 0xc4, 0xcd, 0x24, 0xe2, 0xd7, 0x09, 0xb1, 0x61, 0x0d, 0x06, 0x63, - 0xe2, 0xe6, 0x12, 0xf1, 0x1b, 0x84, 0xd8, 0xb0, 0x06, 0x43, 0x30, - 0x71, 0x0b, 0x89, 0x38, 0x91, 0x10, 0x1b, 0xd6, 0x60, 0x4b, 0x4c, - 0xfc, 0xb4, 0x44, 0x9c, 0x44, 0x88, 0x0d, 0x6b, 0x30, 0x14, 0x13, - 0xb7, 0xc2, 0xc4, 0x4f, 0x13, 0xe2, 0xf1, 0x38, 0x27, 0x71, 0x26, - 0x9b, 0xd6, 0x8b, 0x6b, 0x8d, 0xe9, 0xee, 0xe2, 0x3b, 0x0b, 0x9e, - 0xbb, 0x83, 0x92, 0x62, 0xe8, 0x8c, 0x89, 0x33, 0x67, 0xcd, 0x98, - 0x98, 0xe2, 0x35, 0x07, 0x93, 0x43, 0x86, 0xd7, 0x6c, 0xce, 0x87, - 0x4b, 0xec, 0x3d, 0x63, 0xdc, 0x5c, 0xd0, 0xea, 0x99, 0x4c, 0x58, - 0xde, 0x6f, 0xc0, 0x51, 0x25, 0xdf, 0xf3, 0xd3, 0x92, 0xc7, 0x4f, - 0x7c, 0x73, 0xf6, 0x0c, 0xa2, 0x74, 0x0c, 0xc1, 0x93, 0xfb, 0x37, - 0xf1, 0x23, 0x41, 0x89, 0x19, 0x3d, 0x29, 0x93, 0x28, 0x81, 0x52, - 0x73, 0x6b, 0x1d, 0x7d, 0x72, 0xdb, 0x98, 0x68, 0x7a, 0x4f, 0xf3, - 0x9f, 0x3c, 0xd1, 0x39, 0x86, 0xe6, 0xc3, 0x3d, 0x2d, 0xba, 0x17, - 0x89, 0x2d, 0x31, 0xca, 0x7f, 0x26, 0xf2, 0x44, 0xdf, 0x25, 0x87, - 0xa3, 0x2e, 0x5d, 0xea, 0x10, 0xd3, 0x73, 0xe0, 0x6d, 0x12, 0x43, - 0xba, 0xf6, 0xe6, 0x17, 0x49, 0x1a, 0x62, 0xce, 0x20, 0x40, 0x79, - 0xe0, 0xa9, 0x44, 0xb5, 0x8a, 0x13, 0xa0, 0x79, 0x03, 0x21, 0xd4, - 0xc4, 0x3d, 0x43, 0x5e, 0x16, 0x46, 0xae, 0x6d, 0xc8, 0x35, 0x19, - 0xff, 0x9b, 0x87, 0xe1, 0x02, 0xee, 0xc1, 0xd3, 0x26, 0x26, 0xcf, - 0xc2, 0x5c, 0x98, 0xc8, 0xfd, 0x89, 0xfc, 0x7e, 0xde, 0xec, 0x8d, - 0xd1, 0xea, 0x27, 0x9b, 0x99, 0xa5, 0x35, 0x2a, 0x07, 0x2d, 0x8d, - 0x10, 0x6a, 0x79, 0x09, 0xbf, 0xac, 0x43, 0x4a, 0x33, 0x09, 0xe7, - 0xb7, 0x25, 0x39, 0x5b, 0x49, 0x55, 0x4c, 0xe6, 0x1e, 0x27, 0xe5, - 0x5d, 0x5d, 0xb4, 0x84, 0x28, 0xd7, 0x76, 0x5c, 0x28, 0x8a, 0x3e, - 0x74, 0x76, 0x67, 0x34, 0xbd, 0xa7, 0xf9, 0xc0, 0x39, 0x9a, 0x2f, - 0x73, 0xd1, 0x9b, 0x59, 0x2e, 0x1f, 0xf2, 0x44, 0xdb, 0xd1, 0xa3, - 0xd1, 0xe3, 0xce, 0xce, 0x8f, 0xfa, 0x6a, 0xd4, 0x35, 0x12, 0x43, - 0x7a, 0xe5, 0xb5, 0xef, 0x48, 0x1a, 0x62, 0xe3, 0x72, 0xd7, 0x56, - 0x71, 0xf1, 0x35, 0xc2, 0xa9, 0x29, 0xdc, 0x13, 0x24, 0x37, 0x3d, - 0x93, 0xd7, 0xf0, 0xa6, 0x8e, 0x07, 0x78, 0x23, 0xf0, 0x62, 0x2a, - 0x57, 0x97, 0xbc, 0xb5, 0x08, 0x5d, 0x21, 0xca, 0xc5, 0xa2, 0xce, - 0xe3, 0x8f, 0x7d, 0xfe, 0xa7, 0xf8, 0x18, 0x7a, 0x4f, 0xf3, 0x01, - 0x3f, 0xcd, 0x97, 0x79, 0xe1, 0xcb, 0x2c, 0x87, 0x1f, 0x79, 0x62, - 0x4e, 0xde, 0xe7, 0xd1, 0x83, 0x4c, 0x2f, 0xc7, 0xfc, 0x5c, 0x78, - 0x9f, 0xc4, 0x90, 0x3e, 0x92, 0xfb, 0x16, 0x49, 0x43, 0x6c, 0x5c, - 0xce, 0x7a, 0x0c, 0x5e, 0x24, 0x73, 0xf5, 0x49, 0x6e, 0xe1, 0xb5, - 0x97, 0x34, 0xbf, 0x7c, 0xd2, 0x63, 0xbc, 0x98, 0xc6, 0xf9, 0x93, - 0xb7, 0xd6, 0x9b, 0xbf, 0x86, 0x60, 0x9e, 0x3d, 0xf4, 0xf0, 0xd1, - 0x8e, 0x7f, 0xba, 0x17, 0x4d, 0xef, 0x69, 0xfe, 0xb0, 0xa3, 0xbd, - 0x63, 0x68, 0x3e, 0xdc, 0x0b, 0xcf, 0x6a, 0xc0, 0x2c, 0x47, 0x00, - 0x79, 0xe2, 0xd9, 0x2b, 0x5d, 0x63, 0xb6, 0xb4, 0x1c, 0x11, 0x93, - 0xf7, 0xcc, 0x9f, 0x49, 0x0c, 0x69, 0xe0, 0x01, 0xa4, 0xdd, 0xf3, - 0xa2, 0x21, 0x83, 0x17, 0x29, 0x5c, 0x23, 0x83, 0x76, 0xd1, 0xd8, - 0x63, 0xbc, 0x98, 0xce, 0x05, 0xaa, 0xda, 0x05, 0xe0, 0xa7, 0xf5, - 0x0f, 0xf7, 0x34, 0x1f, 0xf0, 0xd3, 0x7c, 0x99, 0x17, 0x4d, 0x98, - 0xe5, 0x68, 0x4a, 0x9e, 0x38, 0xe4, 0xe9, 0x46, 0x84, 0x07, 0xa3, - 0x77, 0x46, 0x92, 0x18, 0xd2, 0xc0, 0x03, 0x48, 0xbb, 0xe7, 0x45, - 0x10, 0x83, 0x17, 0x33, 0xb8, 0xa7, 0x0c, 0xda, 0x45, 0x33, 0x8f, - 0xf1, 0x62, 0x26, 0x17, 0xac, 0x6a, 0x17, 0x09, 0x23, 0xe3, 0x8f, - 0xd2, 0x6f, 0x00, 0xee, 0x69, 0xfe, 0x14, 0xef, 0xee, 0x31, 0x34, - 0x1f, 0xee, 0x85, 0x67, 0x35, 0x67, 0x96, 0x23, 0x44, 0xe2, 0x45, - 0xec, 0x89, 0xc8, 0x98, 0xdf, 0x7e, 0x8e, 0x20, 0x31, 0xa4, 0x5b, - 0xff, 0xf6, 0x32, 0x49, 0x43, 0x6c, 0x5c, 0xce, 0x16, 0x0c, 0x5e, - 0xcc, 0xc2, 0x83, 0x07, 0xe4, 0xf6, 0xf9, 0x20, 0x5a, 0xf3, 0xcb, - 0xa7, 0x3d, 0xc6, 0x8b, 0xd9, 0x5c, 0x28, 0x79, 0xeb, 0x91, 0x27, - 0x66, 0x91, 0xde, 0x0c, 0xfa, 0xcb, 0x4f, 0x17, 0x0d, 0x90, 0xfa, - 0x4e, 0x9a, 0x0f, 0x7c, 0xa0, 0xf9, 0x72, 0x7f, 0xd1, 0x8a, 0x59, - 0x8e, 0xd6, 0xe4, 0x89, 0xff, 0x3c, 0xfa, 0x54, 0x8c, 0x4f, 0xa7, - 0x09, 0xd1, 0xe9, 0xd6, 0x96, 0x24, 0x86, 0xf4, 0xbb, 0x73, 0x97, - 0x91, 0x34, 0xc4, 0xc6, 0xe5, 0x7c, 0x86, 0xc1, 0x8b, 0x39, 0x78, - 0x2c, 0x87, 0xdc, 0xfa, 0x43, 0xdf, 0xd3, 0xfc, 0xb2, 0x8d, 0xc7, - 0x78, 0x31, 0x97, 0x6b, 0xab, 0xe2, 0xc5, 0xed, 0x31, 0x6b, 0x8f, - 0x4d, 0x1d, 0xbe, 0x2f, 0x9a, 0xde, 0xd3, 0x7c, 0xf8, 0x2e, 0x68, - 0xbe, 0xfc, 0x8d, 0xb4, 0x63, 0x96, 0xe3, 0x59, 0xf2, 0xc4, 0x8d, - 0xfd, 0x56, 0x44, 0xcd, 0xbe, 0x34, 0x38, 0x66, 0xd3, 0x0f, 0xf7, - 0x48, 0x0c, 0x69, 0xf8, 0x36, 0x20, 0xed, 0xfe, 0x1b, 0x69, 0xcf, - 0xe0, 0xc5, 0x5f, 0xb8, 0x0e, 0x24, 0xf7, 0x2a, 0x77, 0x5a, 0xc3, - 0x8b, 0x70, 0x8f, 0xf1, 0x62, 0x1e, 0xf7, 0x9c, 0xaa, 0xbf, 0x00, - 0xfc, 0xb5, 0xba, 0x6c, 0x96, 0x78, 0xa1, 0xec, 0x2f, 0x68, 0xbe, - 0xcc, 0x8b, 0x8e, 0xcc, 0x72, 0x44, 0x90, 0x27, 0x7e, 0x9c, 0xd3, - 0xbf, 0x27, 0xf0, 0x60, 0x66, 0xfe, 0x4c, 0xc2, 0x0b, 0x48, 0x03, - 0x0f, 0x20, 0xed, 0x9e, 0x17, 0x9d, 0x18, 0xbc, 0x98, 0xcf, 0x75, - 0x36, 0xe0, 0x45, 0xa4, 0xc7, 0x78, 0x91, 0xca, 0x75, 0x21, 0x6f, - 0x75, 0xc5, 0xd5, 0x25, 0xf5, 0xef, 0xc8, 0x7f, 0x2f, 0xfa, 0xec, - 0x57, 0xb7, 0xa3, 0xe9, 0x3d, 0xcd, 0x07, 0xfc, 0x34, 0x5f, 0xe6, - 0x45, 0x57, 0x66, 0x39, 0xba, 0x09, 0x12, 0xcb, 0x80, 0x96, 0x31, - 0x47, 0x97, 0x97, 0x44, 0x5d, 0xf9, 0xa0, 0x13, 0x89, 0x21, 0x7d, - 0xa2, 0xa8, 0x6f, 0x34, 0xa4, 0x21, 0x36, 0x2e, 0x67, 0x77, 0x06, - 0x2f, 0xde, 0xe2, 0x7a, 0x18, 0x8c, 0x23, 0x3d, 0x3d, 0xc6, 0x8b, - 0xb7, 0xb9, 0x28, 0x55, 0xbb, 0x38, 0x72, 0xf0, 0x97, 0xa3, 0xb4, - 0x6f, 0x84, 0x7b, 0x9a, 0xbf, 0xe2, 0x74, 0xa3, 0x18, 0x9a, 0x0f, - 0xf7, 0xc2, 0xb3, 0xa2, 0x99, 0xe5, 0x88, 0x21, 0x4f, 0x74, 0x36, - 0xdb, 0x1e, 0x3d, 0x65, 0xed, 0xe0, 0xe8, 0x66, 0x2f, 0xde, 0x20, - 0x31, 0xa4, 0x8f, 0xb4, 0xdd, 0x42, 0xd2, 0x10, 0x1b, 0x97, 0x33, - 0x96, 0xc1, 0x8b, 0x05, 0x5c, 0x2f, 0x92, 0x9b, 0xf1, 0x63, 0x9c, - 0x06, 0x67, 0x9c, 0xc7, 0x78, 0xf1, 0x57, 0xee, 0x79, 0x55, 0x7f, - 0x61, 0xda, 0x13, 0x72, 0x8c, 0xf6, 0x91, 0x70, 0x4f, 0xf3, 0x8b, - 0x67, 0x5f, 0x8c, 0xa2, 0xf9, 0x70, 0x2f, 0x3c, 0xab, 0x37, 0xb3, - 0x1c, 0x2f, 0x48, 0x7d, 0xe7, 0xa8, 0x6f, 0xde, 0x23, 0x7d, 0x25, - 0xc4, 0x90, 0x06, 0x1e, 0x40, 0xda, 0x3d, 0x2f, 0xfa, 0x30, 0x78, - 0x61, 0xe1, 0xfa, 0x1a, 0xf4, 0x9d, 0xfd, 0x3c, 0xc6, 0x8b, 0x85, - 0x5c, 0x3c, 0x79, 0x6b, 0xfc, 0xc7, 0x96, 0xaf, 0x20, 0xff, 0xf4, - 0xc5, 0x96, 0xd1, 0xb8, 0x9f, 0x88, 0xa6, 0xf7, 0x34, 0xff, 0xec, - 0xe2, 0xa5, 0x52, 0x3e, 0xdc, 0x0b, 0xcf, 0xea, 0xcf, 0x2c, 0xc7, - 0x9f, 0xa5, 0xfe, 0x62, 0x66, 0xf9, 0x3b, 0x51, 0xbf, 0x39, 0x17, - 0x44, 0x41, 0x0c, 0xe9, 0xd1, 0x6f, 0x6c, 0x27, 0x69, 0x88, 0x8d, - 0xcb, 0x39, 0x80, 0xc1, 0x8b, 0x77, 0xb8, 0x81, 0x24, 0x77, 0x90, - 0x79, 0x87, 0x86, 0x17, 0x2f, 0x7a, 0x8c, 0x17, 0x8b, 0xb8, 0x41, - 0x82, 0x34, 0xd0, 0x7a, 0x85, 0x34, 0xab, 0xa3, 0xf5, 0x0f, 0xf7, - 0x34, 0x9f, 0xdd, 0x2e, 0x06, 0x33, 0xcb, 0xf1, 0x12, 0x79, 0xe2, - 0xdc, 0x37, 0xf7, 0x47, 0xaf, 0x7e, 0x67, 0x47, 0xf4, 0xf3, 0x23, - 0x4e, 0x90, 0x18, 0xd2, 0xa3, 0x67, 0xed, 0x25, 0x69, 0x88, 0x8d, - 0xcb, 0x99, 0xc0, 0xe0, 0xc5, 0x62, 0x6e, 0x88, 0x41, 0xbb, 0x18, - 0xea, 0x31, 0x5e, 0xbc, 0xcb, 0x0d, 0x53, 0xf5, 0x17, 0xa9, 0x01, - 0x6b, 0x8e, 0x51, 0x59, 0x1b, 0xee, 0x95, 0xe3, 0x88, 0x5e, 0x06, - 0x7f, 0x99, 0x59, 0x8e, 0x57, 0xc8, 0x13, 0x7f, 0x8b, 0xfc, 0x57, - 0xd4, 0x1b, 0xad, 0x5e, 0x8a, 0x31, 0x2f, 0xee, 0x13, 0x0d, 0x31, - 0xa4, 0x61, 0xfc, 0x80, 0xb4, 0xfb, 0x71, 0x64, 0x38, 0x83, 0x17, - 0x4b, 0xb8, 0x11, 0x06, 0x7d, 0xe7, 0x48, 0x8f, 0xf1, 0xe2, 0x6f, - 0xdc, 0x28, 0x4e, 0x2b, 0x77, 0x7e, 0x34, 0xb0, 0x34, 0x9a, 0xde, - 0xd3, 0xfc, 0x77, 0x86, 0x74, 0x88, 0xa1, 0xf9, 0x70, 0x2f, 0x3c, - 0x6b, 0x34, 0xb3, 0x1c, 0x63, 0xa4, 0x6f, 0x64, 0xe7, 0xc7, 0x1b, - 0xa2, 0xe7, 0x1d, 0xfa, 0x2c, 0x0a, 0x62, 0x48, 0xf7, 0xf9, 0xe0, - 0x2a, 0x49, 0x43, 0x6c, 0x5c, 0xce, 0x57, 0x19, 0xbc, 0x58, 0xca, - 0x8d, 0x35, 0xe0, 0xc5, 0x6b, 0x1e, 0xe3, 0xc5, 0x32, 0x6e, 0x9c, - 0xee, 0x1b, 0x59, 0x30, 0xeb, 0x67, 0xdd, 0x37, 0x02, 0xf8, 0x69, - 0xbe, 0xcc, 0x8b, 0xd7, 0x99, 0xe5, 0x78, 0x83, 0x3c, 0x71, 0xd1, - 0x6f, 0x43, 0x63, 0xe6, 0x34, 0x1c, 0x13, 0x1d, 0xbe, 0x38, 0x91, - 0xc4, 0x90, 0x8e, 0x69, 0xb6, 0x93, 0xa4, 0x21, 0x36, 0x2e, 0x67, - 0x22, 0x83, 0x17, 0xcb, 0xb9, 0x24, 0x03, 0x5e, 0x8c, 0xf7, 0x18, - 0x2f, 0x56, 0x70, 0x6f, 0xaa, 0xda, 0x05, 0xe0, 0x97, 0xbe, 0x11, - 0x7c, 0xaf, 0x6c, 0x17, 0x34, 0x5f, 0xe6, 0xc5, 0x04, 0x66, 0x39, - 0x26, 0x92, 0x27, 0xa6, 0x7f, 0x3e, 0x9e, 0xf0, 0x20, 0xfd, 0xb1, - 0x79, 0x42, 0x8c, 0xd3, 0xc0, 0x03, 0x48, 0xbb, 0xe7, 0xc5, 0x24, - 0x06, 0x2f, 0x56, 0x72, 0x93, 0x0d, 0x78, 0x31, 0xc5, 0x63, 0xbc, - 0x78, 0x8f, 0x9b, 0xfa, 0x07, 0xbe, 0x91, 0x64, 0x66, 0x39, 0xa6, - 0x91, 0x27, 0x16, 0x34, 0x38, 0x41, 0xbe, 0x8d, 0xae, 0x87, 0xdb, - 0x44, 0x43, 0x0c, 0x69, 0xf8, 0x36, 0x20, 0xed, 0xfe, 0x1b, 0x49, - 0x61, 0xf0, 0x62, 0x15, 0x9e, 0x51, 0xb3, 0x79, 0x31, 0xc3, 0x63, - 0xbc, 0xb0, 0xe2, 0x99, 0xaa, 0x52, 0xaf, 0x05, 0x6d, 0xe1, 0xa5, - 0x02, 0xa7, 0xd4, 0x2e, 0x68, 0xfe, 0x33, 0x4f, 0xb4, 0x8d, 0xa1, - 0xf9, 0x70, 0x2f, 0x3c, 0x6b, 0x16, 0xb3, 0x1c, 0xb3, 0xc9, 0x13, - 0x0b, 0xdf, 0x8c, 0x88, 0xae, 0xbd, 0x25, 0x3e, 0xfa, 0xe9, 0xef, - 0x17, 0x92, 0x18, 0xd2, 0xbb, 0xb9, 0x4f, 0x48, 0x1a, 0x62, 0xe3, - 0x72, 0xce, 0x61, 0xf0, 0x62, 0x35, 0x9e, 0x39, 0xb1, 0x79, 0xf1, - 0x17, 0x8f, 0xf1, 0x62, 0x0d, 0x7e, 0x8f, 0xb6, 0x5d, 0xd0, 0x6f, - 0x41, 0xd9, 0x2e, 0x00, 0x3f, 0xcd, 0x97, 0x79, 0x31, 0x9f, 0x59, - 0x8e, 0x54, 0xf2, 0xc4, 0x9c, 0xf8, 0xb6, 0x31, 0x20, 0x6f, 0x7e, - 0xfb, 0x51, 0x14, 0x89, 0x21, 0xfd, 0xe1, 0x4f, 0x5b, 0x48, 0x1a, - 0x62, 0xe3, 0x72, 0xbe, 0xc5, 0xe0, 0xc5, 0xdf, 0xb1, 0x84, 0xcc, - 0xe6, 0xc5, 0x02, 0x8f, 0xf1, 0xe2, 0x7d, 0x2c, 0x79, 0x3e, 0xfa, - 0x37, 0x62, 0x61, 0x96, 0x63, 0x21, 0x79, 0x62, 0x58, 0x48, 0x6c, - 0x4c, 0xef, 0x41, 0x23, 0xa3, 0x1b, 0x5f, 0x4a, 0x20, 0x31, 0xa4, - 0xa1, 0x9f, 0x80, 0xb4, 0xfb, 0xfe, 0xe2, 0x1d, 0x06, 0x2f, 0x3e, - 0xc0, 0x92, 0x10, 0x9b, 0x17, 0x8b, 0x3d, 0xc6, 0x8b, 0xb5, 0x58, - 0xc2, 0x50, 0xf2, 0x62, 0x7c, 0xa3, 0xd6, 0x12, 0x2f, 0xe0, 0x5e, - 0xd9, 0x2e, 0x68, 0xbe, 0xdc, 0x2e, 0x96, 0x30, 0xcb, 0xf1, 0x37, - 0xf2, 0xc4, 0x5f, 0xb7, 0x16, 0x92, 0x79, 0xc8, 0xc4, 0x7f, 0xd7, - 0x22, 0xed, 0x02, 0xd2, 0x20, 0x7b, 0x43, 0xda, 0xbd, 0x0c, 0xbe, - 0x94, 0xc1, 0x8b, 0x75, 0x78, 0xc4, 0x63, 0xf3, 0x62, 0xb9, 0xc7, - 0x78, 0xb1, 0x1e, 0x8f, 0x24, 0x8f, 0xde, 0x2e, 0x56, 0x32, 0xcb, - 0xf1, 0x1e, 0x79, 0x62, 0xef, 0x1b, 0x7f, 0x89, 0x7e, 0xe7, 0x95, - 0x2d, 0xd1, 0x21, 0xe7, 0x36, 0x91, 0x18, 0xd2, 0x30, 0x2f, 0x83, - 0x34, 0xc4, 0xc6, 0xe5, 0x5c, 0xc5, 0xe0, 0xc5, 0x87, 0xb8, 0x67, - 0x63, 0xf3, 0x62, 0xb5, 0xc7, 0x78, 0xb1, 0x01, 0xf7, 0x18, 0x8f, - 0xce, 0x8b, 0xbf, 0x33, 0xcb, 0xf1, 0xbe, 0xd4, 0x5f, 0x24, 0x77, - 0xfa, 0x47, 0xf4, 0xb1, 0xca, 0x28, 0x12, 0x43, 0xba, 0x76, 0xdb, - 0x5b, 0x24, 0x0d, 0xb1, 0x71, 0x39, 0x3f, 0x60, 0xf0, 0x22, 0x0d, - 0xb7, 0x60, 0x36, 0x2f, 0xd6, 0x79, 0x8c, 0x17, 0xe9, 0xb8, 0x65, - 0x54, 0x67, 0x3e, 0x02, 0xfd, 0x26, 0xcd, 0xa7, 0x7d, 0x28, 0x87, - 0x6b, 0x8b, 0x55, 0x8e, 0x0d, 0x52, 0xbb, 0xf8, 0xdb, 0xc9, 0xd2, - 0xe8, 0x5f, 0xc6, 0xfd, 0x8d, 0xc4, 0x90, 0xbe, 0x18, 0x5f, 0x27, - 0x06, 0xd2, 0x10, 0x1b, 0x97, 0x33, 0x8d, 0xc1, 0x8b, 0x8f, 0x70, - 0x49, 0xd9, 0xf3, 0x91, 0x8f, 0x3c, 0xc6, 0x8b, 0x8f, 0xf1, 0x7f, - 0xd5, 0x99, 0xb3, 0xb3, 0x79, 0xb1, 0x91, 0x59, 0x8e, 0x4f, 0xc8, - 0x13, 0x7f, 0xec, 0xf3, 0x7d, 0xf4, 0xbd, 0x1b, 0x8d, 0x63, 0xde, - 0x2d, 0x2e, 0x20, 0x31, 0xa4, 0x5f, 0xfc, 0x6b, 0x47, 0x92, 0x86, - 0xd8, 0xb8, 0x9c, 0x19, 0x0c, 0x5e, 0x6c, 0xe4, 0x36, 0x19, 0xf0, - 0x62, 0xb3, 0xc7, 0x78, 0xf1, 0x09, 0xb7, 0x85, 0xbc, 0x95, 0xae, - 0x32, 0xc2, 0xfa, 0x10, 0x5d, 0x65, 0x84, 0x7b, 0x9a, 0xff, 0xe3, - 0x5f, 0x6b, 0x49, 0xab, 0x8f, 0x70, 0x2f, 0x3c, 0x6b, 0x2b, 0xb3, - 0x1c, 0xdb, 0xc8, 0x13, 0x3b, 0x7f, 0xdb, 0x2f, 0x26, 0xbf, 0x5b, - 0x60, 0x4c, 0xd3, 0xf8, 0x17, 0x49, 0x0c, 0xe9, 0x46, 0xbe, 0x5d, - 0x49, 0x1a, 0x62, 0xe3, 0x72, 0x6e, 0x67, 0xf0, 0x22, 0x83, 0xdb, - 0x41, 0x72, 0xf5, 0x6b, 0x8a, 0xff, 0xf0, 0x18, 0x2f, 0x36, 0x71, - 0x9f, 0x72, 0xca, 0x79, 0xea, 0x97, 0x2b, 0x8e, 0x45, 0x51, 0xfd, - 0x15, 0xdc, 0xd3, 0xfc, 0xaa, 0x79, 0xa7, 0xa2, 0x69, 0x3e, 0xdc, - 0x0b, 0xcf, 0xda, 0xc9, 0x2c, 0xc7, 0x2e, 0xf2, 0xc4, 0x0e, 0xd3, - 0x16, 0x44, 0xbf, 0xb2, 0x32, 0x31, 0xea, 0xc6, 0xf8, 0x43, 0x24, - 0x86, 0x34, 0xac, 0x1d, 0x42, 0xda, 0xfd, 0x1a, 0xe2, 0x6e, 0x06, - 0x2f, 0x36, 0x73, 0x99, 0x06, 0x7a, 0xad, 0xcf, 0x3c, 0xc6, 0x8b, - 0x2d, 0xdc, 0xe7, 0x2a, 0x5e, 0x1c, 0x3d, 0x93, 0x7c, 0xec, 0xbc, - 0xfd, 0x5a, 0x34, 0xbd, 0xa7, 0xf9, 0xd0, 0x16, 0x68, 0xbe, 0xdc, - 0x2e, 0xf6, 0x30, 0xcb, 0xf1, 0x05, 0x79, 0x62, 0x8f, 0x7f, 0x67, - 0x45, 0x1f, 0xda, 0xd9, 0x89, 0xf4, 0x93, 0x10, 0x43, 0xba, 0xf0, - 0x9f, 0x43, 0x48, 0x1a, 0x62, 0xe3, 0x72, 0xee, 0x65, 0xf0, 0x62, - 0x2b, 0xb7, 0x4f, 0xf8, 0x46, 0x56, 0xde, 0xd3, 0xb4, 0x8b, 0x2f, - 0x3d, 0xc6, 0x8b, 0x6d, 0xdc, 0x7e, 0x15, 0x2f, 0xa0, 0xbf, 0xa4, - 0x98, 0xe1, 0x9e, 0xe6, 0xf7, 0x2d, 0xec, 0x22, 0xf1, 0x02, 0xee, - 0x85, 0x67, 0xd9, 0x98, 0xe5, 0x38, 0x40, 0x9e, 0xf8, 0x86, 0x6f, - 0x64, 0x4c, 0x9d, 0x8b, 0x5d, 0x62, 0x2e, 0x6c, 0xed, 0x43, 0x62, - 0x48, 0xc3, 0x1a, 0x11, 0xa4, 0xdd, 0xaf, 0x15, 0x1d, 0x64, 0xf0, - 0x62, 0x3b, 0x77, 0xc8, 0x80, 0x17, 0x87, 0x3d, 0xc6, 0x8b, 0x1d, - 0xdc, 0x11, 0x15, 0x2f, 0x40, 0xbe, 0xf2, 0xe9, 0xd8, 0x2c, 0x86, - 0xde, 0x2b, 0x79, 0x41, 0xf3, 0x65, 0x5e, 0x7c, 0xc5, 0x2c, 0xc7, - 0x51, 0xf2, 0xc4, 0xc8, 0x3b, 0x6f, 0xc4, 0x7c, 0xf1, 0xe2, 0x98, - 0x98, 0x9f, 0x52, 0xdf, 0x22, 0x31, 0xa4, 0x41, 0x87, 0x03, 0x69, - 0xf7, 0xba, 0x9c, 0x63, 0x0c, 0x5e, 0xfc, 0x83, 0x3b, 0x4e, 0x72, - 0xa3, 0xcd, 0xad, 0x35, 0xbf, 0x3c, 0xe1, 0x31, 0x5e, 0x7c, 0xca, - 0x7d, 0xcd, 0x69, 0xe7, 0x66, 0xb3, 0xe6, 0xb7, 0x88, 0xa1, 0xf7, - 0x4a, 0x9b, 0x03, 0x9a, 0x2f, 0xaf, 0x9b, 0x9d, 0x64, 0x96, 0x23, - 0x8b, 0x3c, 0xb1, 0x9b, 0x4f, 0x68, 0xcc, 0x8d, 0x85, 0x77, 0xa3, - 0xe7, 0x8d, 0x88, 0x21, 0x31, 0xa4, 0x9f, 0x5d, 0xeb, 0x1f, 0x03, - 0x69, 0x88, 0x8d, 0xcb, 0x79, 0x8a, 0xc1, 0x8b, 0x9d, 0xdc, 0x69, - 0x92, 0xeb, 0xf3, 0xf3, 0xd3, 0x9a, 0x5f, 0x9e, 0xf1, 0x18, 0x2f, - 0x76, 0x71, 0x67, 0x75, 0xf2, 0x05, 0xad, 0x7f, 0xa5, 0x7c, 0x01, - 0xf8, 0x69, 0xbe, 0xcc, 0x8b, 0x73, 0xcc, 0x72, 0x9c, 0x97, 0xc6, - 0x54, 0xd3, 0xb7, 0x77, 0xa2, 0xa7, 0xcc, 0xe7, 0x62, 0x20, 0x86, - 0x74, 0x74, 0x4f, 0xff, 0x18, 0x48, 0x43, 0x6c, 0x5c, 0xce, 0x0b, - 0x0c, 0x5e, 0xec, 0xe6, 0x2e, 0x1a, 0xb4, 0x8b, 0x6c, 0x8f, 0xf1, - 0x22, 0x93, 0xbb, 0x44, 0xde, 0x7a, 0xeb, 0xdd, 0x0e, 0x04, 0x33, - 0x7c, 0x17, 0x74, 0xfd, 0x03, 0xee, 0x69, 0x3e, 0x7c, 0x17, 0x34, - 0x5f, 0xfe, 0x46, 0xbe, 0x61, 0x96, 0x23, 0x87, 0xa3, 0xfa, 0xce, - 0x82, 0x59, 0x1d, 0x62, 0x6c, 0xce, 0x11, 0xd1, 0x10, 0x43, 0xfa, - 0xb7, 0xdf, 0x5f, 0x24, 0x69, 0x88, 0x8d, 0xcb, 0xf9, 0x2d, 0x83, - 0x17, 0x9f, 0x71, 0x97, 0x49, 0xee, 0xe7, 0x1b, 0x9a, 0x6b, 0x7e, - 0xf9, 0x9d, 0xc7, 0x78, 0xf1, 0x39, 0xf7, 0xbd, 0x4a, 0xd6, 0x82, - 0xb6, 0x40, 0xe7, 0x5e, 0x70, 0xaf, 0x5c, 0x5b, 0xa6, 0xf9, 0x72, - 0xbb, 0xc8, 0x65, 0x96, 0xe3, 0x0a, 0x79, 0x62, 0xe1, 0xe2, 0x5e, - 0x31, 0x0d, 0x66, 0x7f, 0x16, 0x3d, 0xfc, 0xc2, 0x48, 0x12, 0x43, - 0xda, 0xfa, 0x54, 0x09, 0x49, 0x43, 0x6c, 0x5c, 0xce, 0xab, 0x0c, - 0x5e, 0xec, 0xe1, 0xfe, 0x49, 0x72, 0xc7, 0x5c, 0x8f, 0xd0, 0xe0, - 0xcc, 0xf3, 0x18, 0x2f, 0xbe, 0xe0, 0xae, 0xe9, 0x78, 0x71, 0xa6, - 0x93, 0x1f, 0x93, 0x17, 0x34, 0x5f, 0xe6, 0x45, 0x3e, 0xb3, 0x1c, - 0x3f, 0x90, 0x27, 0xf6, 0x0d, 0xf2, 0x25, 0xfd, 0xc4, 0x37, 0x3f, - 0xb5, 0x20, 0x31, 0xa4, 0xa1, 0x9f, 0x80, 0xb4, 0xfb, 0xfe, 0xe2, - 0x47, 0x06, 0x2f, 0xf6, 0x72, 0x3f, 0x91, 0xdc, 0xd3, 0x85, 0x01, - 0x9a, 0x5f, 0x16, 0x78, 0x8c, 0x17, 0xfb, 0xb8, 0xeb, 0x3a, 0x5e, - 0x3c, 0xb9, 0xd5, 0xcc, 0xe4, 0x05, 0xcd, 0x97, 0x79, 0x71, 0x83, - 0x59, 0x8e, 0x9b, 0xe4, 0x89, 0xad, 0x5d, 0x2f, 0x45, 0x47, 0xce, - 0xf6, 0x8d, 0x79, 0xe2, 0xa0, 0x95, 0xc4, 0x90, 0x9e, 0x19, 0xff, - 0x2c, 0x49, 0x43, 0x6c, 0x5c, 0xce, 0x9f, 0x19, 0xbc, 0xf8, 0x92, - 0xb3, 0x8b, 0x32, 0x78, 0x5d, 0xcd, 0x2f, 0x0b, 0x3d, 0xc6, 0x8b, - 0xfd, 0xdc, 0x2d, 0x5d, 0x7f, 0xf1, 0xf9, 0xdd, 0x40, 0x66, 0x7f, - 0x41, 0xf3, 0xe5, 0xfe, 0xe2, 0x36, 0xb3, 0x1c, 0x45, 0xe4, 0x89, - 0x07, 0x7b, 0x54, 0x44, 0xbf, 0xf4, 0x66, 0x64, 0xcc, 0xb9, 0x4b, - 0xf5, 0x62, 0x20, 0x86, 0xf4, 0x94, 0x5f, 0x86, 0x91, 0x34, 0xc4, - 0xc6, 0xe5, 0xbc, 0xc3, 0xe0, 0x85, 0x8d, 0xbb, 0x6b, 0xd0, 0x77, - 0x16, 0x7b, 0x8c, 0x17, 0x07, 0xb8, 0x7b, 0xba, 0x76, 0xa1, 0x1c, - 0x47, 0x94, 0xed, 0x42, 0x3f, 0x8e, 0x94, 0x30, 0xcb, 0xf1, 0x0b, - 0x79, 0xa2, 0xfd, 0xec, 0x6b, 0x31, 0x89, 0xb3, 0x1c, 0xd1, 0x39, - 0xce, 0xb9, 0x24, 0x86, 0xf4, 0x34, 0xdf, 0x46, 0x31, 0x90, 0x86, - 0xd8, 0xb8, 0x9c, 0xf7, 0x19, 0xbc, 0x38, 0xc8, 0x95, 0x92, 0xdc, - 0xf2, 0x75, 0x1d, 0x34, 0xbf, 0x74, 0x78, 0x8c, 0x17, 0x87, 0xb8, - 0x32, 0xdd, 0x98, 0xca, 0x9a, 0xb3, 0xb3, 0xed, 0x72, 0xca, 0x99, - 0xe5, 0xa8, 0xe0, 0xa8, 0x0c, 0x5e, 0x7f, 0x97, 0x7f, 0xcc, 0xe3, - 0x8e, 0x6f, 0x48, 0x0c, 0x69, 0x98, 0x9f, 0x42, 0xda, 0xfd, 0x3c, - 0xf5, 0x57, 0x06, 0x2f, 0x0e, 0x73, 0x95, 0x24, 0x77, 0xfb, 0x13, - 0x5a, 0x8b, 0x9e, 0x2a, 0x8f, 0xf1, 0xe2, 0x08, 0xe7, 0xe4, 0xb4, - 0xba, 0x9c, 0x9d, 0xb5, 0x2f, 0xe9, 0x74, 0x39, 0x80, 0x9f, 0xe6, - 0xcb, 0xbc, 0xf8, 0x8d, 0x59, 0x0e, 0x17, 0x79, 0xe2, 0xa7, 0xf9, - 0x93, 0x62, 0xda, 0x7d, 0xdc, 0x23, 0xa6, 0xd3, 0xf1, 0xf9, 0x24, - 0x86, 0x74, 0x9f, 0x96, 0xa3, 0x48, 0x1a, 0x62, 0xe3, 0x72, 0xfe, - 0xce, 0xe0, 0xc5, 0x57, 0xdc, 0x03, 0x03, 0x19, 0x9c, 0xf7, 0x18, - 0x2f, 0x8e, 0x72, 0xff, 0xd2, 0xb5, 0x8b, 0x6f, 0x4e, 0xb6, 0x62, - 0xca, 0x5a, 0x34, 0x5f, 0xe6, 0xc5, 0xbf, 0x99, 0xe5, 0x40, 0xe4, - 0x89, 0xdf, 0x8e, 0xeb, 0x43, 0xbe, 0x8d, 0xbf, 0x7c, 0xf4, 0x2a, - 0x89, 0x21, 0x0d, 0xdf, 0x06, 0xa4, 0xdd, 0x7f, 0x23, 0x9c, 0x97, - 0x9e, 0x17, 0x58, 0x2e, 0x27, 0xb9, 0x97, 0x66, 0x68, 0x7b, 0xdd, - 0xc7, 0xbc, 0x3c, 0xc5, 0x8b, 0xe3, 0x9c, 0xc9, 0x4b, 0xdb, 0x5f, - 0xbc, 0xd3, 0x85, 0x63, 0xf6, 0x17, 0x34, 0x5f, 0xe6, 0x45, 0x2d, - 0x66, 0x39, 0xfe, 0x44, 0x9e, 0x78, 0xc3, 0xf7, 0x83, 0xe8, 0x16, - 0x09, 0xfe, 0x31, 0xa6, 0xfd, 0x07, 0x49, 0x0c, 0xe9, 0xb1, 0xad, - 0x3a, 0x92, 0x34, 0xc4, 0xc6, 0xe5, 0x34, 0x33, 0x78, 0x71, 0x82, - 0x7b, 0x9c, 0xe4, 0xbe, 0x53, 0x64, 0xd6, 0xfc, 0xd2, 0xdb, 0x63, - 0xbc, 0xf8, 0x9a, 0xf3, 0xf1, 0xd2, 0xb6, 0x8b, 0x15, 0x37, 0xfb, - 0x30, 0xdb, 0x05, 0xcd, 0x97, 0x79, 0x51, 0x9b, 0x59, 0x8e, 0x27, - 0xc8, 0x13, 0xbf, 0x3b, 0xdd, 0x2a, 0xe6, 0xc3, 0x13, 0x01, 0x31, - 0x43, 0x23, 0x7b, 0x93, 0x18, 0xd2, 0x60, 0x9f, 0x04, 0x69, 0x88, - 0x8d, 0xcb, 0x59, 0x87, 0xc1, 0x8b, 0x93, 0x5c, 0x5d, 0x92, 0xfb, - 0xe9, 0xa4, 0x91, 0x9a, 0x5f, 0xfa, 0x7a, 0x8c, 0x17, 0x59, 0x9c, - 0x9f, 0xae, 0x5d, 0x54, 0x7f, 0x1c, 0xa9, 0xc7, 0x2c, 0x47, 0x7d, - 0xa1, 0x5d, 0x60, 0xf9, 0xea, 0xd3, 0x37, 0x03, 0x62, 0x7e, 0x74, - 0x3c, 0x11, 0x03, 0x31, 0xa4, 0x6f, 0xf7, 0xe8, 0x44, 0xd2, 0x10, - 0x1b, 0x97, 0xf3, 0x49, 0x06, 0x2f, 0x4e, 0x71, 0xfe, 0x5e, 0xec, - 0x71, 0xa4, 0x81, 0xc7, 0x78, 0x71, 0x9a, 0x0b, 0xf0, 0x52, 0xce, - 0xd9, 0xa1, 0xbf, 0xa4, 0x7a, 0x6e, 0xb8, 0xa7, 0xf9, 0xa0, 0xd3, - 0xa2, 0xf9, 0xb2, 0xad, 0x6b, 0x43, 0x66, 0x39, 0x1a, 0x91, 0x27, - 0x3e, 0x3f, 0x74, 0x60, 0xcc, 0x3b, 0xdd, 0xba, 0xc7, 0x44, 0x7f, - 0x3e, 0x81, 0xc4, 0x90, 0x9e, 0x38, 0x7d, 0x24, 0x49, 0x43, 0x6c, - 0x5c, 0xce, 0xc6, 0x0c, 0x5e, 0x9c, 0xe1, 0x02, 0x49, 0xee, 0x81, - 0xd6, 0x5a, 0xed, 0x60, 0x13, 0x8f, 0xf1, 0xe2, 0x2c, 0xd7, 0x54, - 0xd7, 0x2e, 0x86, 0x6d, 0x0a, 0x60, 0xb6, 0x0b, 0x9a, 0x2f, 0xb7, - 0x8b, 0x20, 0x66, 0x39, 0x9e, 0x22, 0x4f, 0x04, 0x7b, 0x0b, 0x90, - 0x37, 0x4b, 0x8e, 0x9c, 0x8d, 0x82, 0x98, 0xd8, 0x2c, 0x61, 0x79, - 0x13, 0xd2, 0xee, 0xe5, 0xce, 0x66, 0x0c, 0x5e, 0x9c, 0xe3, 0x82, - 0x49, 0xee, 0xf2, 0xd9, 0xcd, 0x34, 0xbf, 0x6c, 0xee, 0x31, 0x5e, - 0x9c, 0xe7, 0x42, 0x54, 0xed, 0x02, 0x74, 0xdf, 0xb4, 0xfe, 0xe1, - 0xde, 0x7d, 0xbb, 0x68, 0xc1, 0x2c, 0x47, 0x4b, 0x2f, 0x2a, 0x77, - 0xfe, 0xb3, 0xf1, 0xf0, 0x98, 0x3b, 0xbf, 0x35, 0x88, 0x81, 0x18, - 0xd2, 0xa0, 0xc3, 0x81, 0xb4, 0x7b, 0x5d, 0xce, 0xd3, 0x0c, 0x5e, - 0x5c, 0xe0, 0x42, 0x0d, 0xda, 0x45, 0x2b, 0x8f, 0xf1, 0xe2, 0x22, - 0xd7, 0xfa, 0x0f, 0xf4, 0x17, 0xcf, 0x30, 0xcb, 0x11, 0x46, 0x9e, - 0x58, 0xb7, 0xd1, 0x35, 0xd2, 0x1e, 0x52, 0xff, 0x1c, 0x4f, 0xe6, - 0x23, 0x90, 0x86, 0xf6, 0x00, 0x69, 0xf7, 0xed, 0xa2, 0x0d, 0x83, - 0x17, 0xd9, 0x5c, 0x5b, 0x2f, 0xf6, 0x9c, 0xbd, 0x9d, 0xc7, 0x78, - 0x71, 0x89, 0x7b, 0xd6, 0x4b, 0x2b, 0x6b, 0x1d, 0x1c, 0xf5, 0x98, - 0xd4, 0x5f, 0x28, 0x6d, 0xe3, 0x69, 0xbe, 0xdc, 0x2e, 0xda, 0x33, - 0xcb, 0xd1, 0x41, 0xea, 0x2f, 0x72, 0x3f, 0x1a, 0x1d, 0x73, 0xf1, - 0xab, 0x71, 0x24, 0x86, 0x34, 0xb4, 0x07, 0x48, 0xbb, 0x6f, 0x17, - 0xe1, 0x0c, 0x5e, 0x7c, 0xc3, 0x3d, 0x47, 0x72, 0x7f, 0xec, 0xf0, - 0x84, 0xe6, 0x97, 0x1d, 0x3d, 0xc6, 0x8b, 0x1c, 0x2e, 0x82, 0x94, - 0xfc, 0x93, 0x3b, 0x81, 0x92, 0xee, 0x57, 0x29, 0x6b, 0xd1, 0xfc, - 0x1f, 0xd3, 0x23, 0x24, 0x59, 0x0b, 0xee, 0x85, 0x67, 0x75, 0x62, - 0x96, 0xa3, 0x33, 0x79, 0x62, 0xd5, 0xb8, 0xd3, 0xc4, 0x7e, 0x6f, - 0xc8, 0x97, 0xbf, 0x93, 0x18, 0xd2, 0xcf, 0xce, 0x2b, 0x24, 0x69, - 0x88, 0x8d, 0xcb, 0x19, 0xc9, 0xe0, 0xc5, 0xb7, 0x5c, 0x17, 0x92, - 0xfb, 0xe1, 0x8b, 0x6d, 0x35, 0x38, 0xbb, 0x7a, 0x8c, 0x17, 0x97, - 0xb9, 0x6e, 0x2a, 0xf9, 0x02, 0xda, 0x02, 0xd5, 0x5f, 0xc1, 0xbd, - 0x4a, 0xbe, 0x10, 0xf3, 0xe5, 0x6f, 0xa4, 0x3b, 0xb3, 0x1c, 0x3d, - 0x24, 0x59, 0xeb, 0xc2, 0x4b, 0x9d, 0x62, 0x92, 0x76, 0x1c, 0x27, - 0x31, 0xa4, 0x61, 0x2d, 0x00, 0xd2, 0xee, 0xd7, 0x04, 0x7a, 0x32, - 0x78, 0xf1, 0x1d, 0x17, 0x65, 0xc0, 0x8b, 0x68, 0x8f, 0xf1, 0xe2, - 0x7b, 0x2e, 0x86, 0x94, 0x7c, 0xc5, 0x18, 0xc7, 0x11, 0xc8, 0x87, - 0xb6, 0xb0, 0x61, 0xe3, 0xd3, 0x52, 0xbb, 0xa0, 0xf9, 0x80, 0x9f, - 0xe6, 0xcb, 0xbc, 0x88, 0x65, 0x96, 0xa3, 0x17, 0x79, 0x62, 0x56, - 0xe5, 0x68, 0xa2, 0xcf, 0x82, 0x79, 0x29, 0xc4, 0x90, 0x06, 0x7d, - 0x16, 0xa4, 0xdd, 0xeb, 0xb5, 0xe2, 0x18, 0xbc, 0xc8, 0xe5, 0x9e, - 0xf7, 0x62, 0xeb, 0x7e, 0x7b, 0x7b, 0x8c, 0x17, 0x57, 0xb8, 0x17, - 0x74, 0xbc, 0xd8, 0xd4, 0x6f, 0x32, 0x93, 0x17, 0x34, 0x5f, 0xe6, - 0x45, 0x1f, 0x66, 0x39, 0xfa, 0x92, 0x27, 0xfe, 0x73, 0xdb, 0x63, - 0x31, 0xf0, 0x6d, 0x24, 0x36, 0x0b, 0x23, 0x31, 0xa4, 0x61, 0x9d, - 0x08, 0xd2, 0xee, 0xd7, 0xd9, 0xfb, 0x31, 0x78, 0x71, 0x95, 0x8b, - 0xf7, 0x12, 0xe6, 0x66, 0x93, 0x35, 0x38, 0xfb, 0x7b, 0x8c, 0x17, - 0xff, 0xe4, 0xfe, 0xfc, 0x07, 0xda, 0xc5, 0x00, 0x66, 0x39, 0x06, - 0x92, 0x27, 0xbe, 0xd9, 0xa6, 0x56, 0x74, 0xd0, 0xbd, 0xfc, 0xe8, - 0x0f, 0x3b, 0xa6, 0x90, 0x18, 0xd2, 0xb0, 0xbe, 0x0e, 0x69, 0xf7, - 0xeb, 0xec, 0x2f, 0x32, 0x78, 0x91, 0xc7, 0x0d, 0x32, 0x68, 0x17, - 0x83, 0x3d, 0xc6, 0x8b, 0x6b, 0xdc, 0x4b, 0xa4, 0xe4, 0xd4, 0xee, - 0x5b, 0xdb, 0x77, 0xd2, 0x7c, 0xf6, 0x3c, 0x35, 0x81, 0x59, 0x8e, - 0x21, 0x92, 0xac, 0x05, 0x3c, 0x98, 0xe3, 0xaa, 0x8a, 0x82, 0x18, - 0xd2, 0xc0, 0x03, 0x48, 0xbb, 0xe7, 0xc5, 0x50, 0x06, 0x2f, 0xf2, - 0xb9, 0x61, 0x06, 0xbc, 0x78, 0xd9, 0x63, 0xbc, 0xf8, 0x81, 0x7b, - 0x45, 0x25, 0x6b, 0x01, 0xfe, 0x07, 0xc3, 0xeb, 0x4b, 0xbc, 0x50, - 0xee, 0xc9, 0xa4, 0xf9, 0x32, 0x2f, 0x86, 0x33, 0xcb, 0x31, 0x42, - 0xea, 0x3b, 0xc1, 0x2e, 0xa9, 0xf9, 0x13, 0x5f, 0x93, 0x18, 0xd2, - 0x07, 0x5a, 0xd5, 0x8f, 0x81, 0x34, 0xc4, 0xc6, 0xe5, 0x1c, 0xc9, - 0xe0, 0xc5, 0x8f, 0xdc, 0x28, 0x92, 0x1b, 0xfc, 0x6c, 0x13, 0xcd, - 0x2f, 0x47, 0x7b, 0x8c, 0x17, 0x3f, 0x71, 0x63, 0xd4, 0xf3, 0xd4, - 0x80, 0x35, 0xc7, 0xf0, 0x3f, 0xc9, 0x1e, 0x9c, 0xe6, 0x83, 0x0d, - 0x38, 0xcd, 0x97, 0xed, 0xc1, 0x5f, 0x65, 0x96, 0x63, 0x2c, 0x79, - 0xe2, 0xa1, 0x1d, 0xa9, 0xc4, 0x0e, 0x1c, 0x74, 0xbd, 0x10, 0x43, - 0x1a, 0xe4, 0x0a, 0x48, 0xbb, 0x97, 0x2f, 0x5e, 0x63, 0xf0, 0xa2, - 0x80, 0x1b, 0x47, 0x72, 0xdf, 0xfa, 0x68, 0x8d, 0xa6, 0xa7, 0x79, - 0xdd, 0x63, 0xbc, 0xb8, 0xce, 0xbd, 0x41, 0x4a, 0x5e, 0xda, 0xbd, - 0xa9, 0xb4, 0xdf, 0x8e, 0xda, 0x71, 0xc2, 0x3d, 0xcd, 0x87, 0xb6, - 0x40, 0xf3, 0xe5, 0x76, 0x91, 0xc8, 0x2c, 0x47, 0x12, 0x79, 0xe2, - 0xef, 0x61, 0x4b, 0xa2, 0x07, 0x6e, 0x59, 0x46, 0xec, 0xb3, 0x20, - 0x86, 0x34, 0xd8, 0x75, 0x42, 0xda, 0xbd, 0x7d, 0xe7, 0x78, 0x06, - 0x2f, 0x6e, 0x70, 0x6f, 0x92, 0x5c, 0xbd, 0x8d, 0xd2, 0x04, 0x8f, - 0xf1, 0xe2, 0x26, 0x37, 0x51, 0xdd, 0x77, 0xe2, 0xb6, 0xf0, 0xd7, - 0x06, 0xc3, 0xa4, 0x76, 0x41, 0xf3, 0xa1, 0x2d, 0xd0, 0x7c, 0xb9, - 0x5d, 0x4c, 0x62, 0x96, 0x63, 0x32, 0x79, 0xe2, 0x17, 0xcf, 0x0d, - 0x22, 0xed, 0xa1, 0xee, 0xef, 0x33, 0x48, 0x0c, 0x69, 0x68, 0x0f, - 0x90, 0x76, 0xdf, 0x2e, 0xa6, 0x30, 0x78, 0xf1, 0x33, 0x37, 0xd5, - 0xa0, 0x5d, 0x24, 0x7b, 0x8c, 0x17, 0x76, 0x6e, 0x1a, 0x29, 0xf9, - 0xb7, 0xe7, 0x5e, 0x22, 0xdf, 0xc2, 0xfc, 0x4e, 0xff, 0x8a, 0xf6, - 0x6f, 0x57, 0x10, 0x4d, 0xef, 0x69, 0x3e, 0xb4, 0x05, 0x9a, 0x2f, - 0xb7, 0x8b, 0x14, 0x66, 0x39, 0xa6, 0x93, 0x27, 0xd6, 0x6f, 0x36, - 0x31, 0x26, 0xb0, 0xad, 0x25, 0x0a, 0xec, 0xbf, 0x21, 0x86, 0x34, - 0xcc, 0x51, 0x21, 0x0d, 0xb1, 0x71, 0x39, 0x67, 0x30, 0x78, 0x51, - 0xc8, 0xcd, 0x34, 0x68, 0x17, 0xb3, 0x3c, 0xc6, 0x8b, 0x5b, 0xdc, - 0x6c, 0x55, 0x7f, 0xf1, 0xc3, 0xf5, 0xfa, 0x92, 0xbe, 0x1b, 0xee, - 0x69, 0x3e, 0xc8, 0xdd, 0x34, 0x5f, 0x96, 0xc1, 0xe7, 0x30, 0xcb, - 0x31, 0x97, 0x3c, 0x11, 0xf6, 0x97, 0x81, 0x5c, 0xb1, 0xa9, 0xde, - 0x17, 0x24, 0x86, 0x34, 0xec, 0xa1, 0x81, 0xb4, 0xfb, 0xbd, 0x34, - 0x7f, 0x61, 0xf0, 0xe2, 0x36, 0x37, 0x4f, 0x90, 0x2f, 0x74, 0xf6, - 0x5a, 0xf3, 0x3d, 0xc6, 0x8b, 0x22, 0x2e, 0x55, 0xc5, 0x0b, 0xe8, - 0x23, 0xe8, 0xb7, 0x00, 0xf7, 0x4a, 0x19, 0x9c, 0xe6, 0xcb, 0xed, - 0xe2, 0x2d, 0x66, 0x39, 0xde, 0x96, 0xfa, 0x8b, 0x92, 0x9f, 0xc6, - 0x46, 0x6f, 0xb9, 0xb4, 0x86, 0xc4, 0x90, 0x9e, 0x3b, 0xe0, 0x5d, - 0x92, 0x86, 0xd8, 0xb8, 0x9c, 0x0b, 0x18, 0xbc, 0xb8, 0xc3, 0xfd, - 0xd5, 0x80, 0x17, 0x16, 0x8f, 0xf1, 0xe2, 0x2e, 0xb7, 0x50, 0x35, - 0x4f, 0x85, 0xb5, 0xb2, 0x5f, 0x13, 0x2e, 0xeb, 0xec, 0x7e, 0x6f, - 0xaf, 0xad, 0x88, 0xa6, 0xf9, 0x70, 0x2f, 0x3c, 0xeb, 0x1d, 0x66, - 0x39, 0x16, 0x91, 0x27, 0x4e, 0xe8, 0xf9, 0x45, 0xb4, 0xbd, 0x53, - 0x61, 0xd4, 0xc8, 0x03, 0x97, 0x49, 0x0c, 0x69, 0xd8, 0x8b, 0x09, - 0x69, 0xf7, 0x7b, 0x32, 0x17, 0x33, 0x78, 0x51, 0xcc, 0xbd, 0x2b, - 0xf4, 0x17, 0xb9, 0xa5, 0x9a, 0x5f, 0x2e, 0xf1, 0x18, 0x2f, 0xee, - 0x71, 0x7f, 0x53, 0xf5, 0x17, 0x80, 0x9f, 0x8e, 0x17, 0x70, 0xaf, - 0xec, 0x2f, 0xf4, 0xe3, 0xc8, 0x52, 0x66, 0x39, 0x96, 0x79, 0xd1, - 0xf5, 0x91, 0xb5, 0xbd, 0x9b, 0x90, 0xf9, 0x39, 0xc4, 0x90, 0xfe, - 0x7a, 0x7a, 0x37, 0x92, 0x86, 0xd8, 0xb8, 0x9c, 0xcb, 0x19, 0xbc, - 0x28, 0xe1, 0x56, 0x08, 0xfa, 0xce, 0xf9, 0x9c, 0xe6, 0x97, 0x2b, - 0x3d, 0xc6, 0x8b, 0x5f, 0xb8, 0xf7, 0x54, 0x73, 0x76, 0xc0, 0x4f, - 0xed, 0xb2, 0xe0, 0x9e, 0xe6, 0x43, 0x5b, 0xa0, 0xf9, 0x72, 0xbb, - 0x58, 0xc5, 0x2c, 0x87, 0x95, 0x3c, 0x31, 0xdc, 0xf7, 0x2a, 0x69, - 0x0f, 0x87, 0x37, 0xfe, 0x46, 0x62, 0x48, 0x43, 0x7b, 0x80, 0xb4, - 0xfb, 0x76, 0xb1, 0x9a, 0xc1, 0x8b, 0xfb, 0xdc, 0x1a, 0x81, 0x17, - 0x7b, 0x0b, 0x34, 0xbf, 0xfc, 0xbb, 0xc7, 0x78, 0x51, 0xca, 0xbd, - 0xaf, 0xe3, 0x05, 0xdd, 0x4b, 0xa5, 0xe4, 0x05, 0xb4, 0x05, 0x9a, - 0x2f, 0xb7, 0x8b, 0x0f, 0x98, 0xe5, 0x58, 0x2b, 0xc9, 0xe0, 0x60, - 0x83, 0x72, 0xa0, 0xcd, 0xa7, 0xc4, 0x26, 0x05, 0xd2, 0xe0, 0x55, - 0x06, 0xd2, 0xee, 0xbd, 0xcb, 0xac, 0x63, 0xf0, 0xc2, 0xc1, 0xad, - 0x37, 0x68, 0x17, 0x1f, 0x7a, 0x8c, 0x17, 0x65, 0xdc, 0x86, 0x3f, - 0xd0, 0x2e, 0xd2, 0x98, 0xe5, 0x48, 0x27, 0x4f, 0xec, 0x71, 0x2e, - 0x26, 0xe6, 0xfd, 0x7f, 0x38, 0xa3, 0x2c, 0xf5, 0x5e, 0x22, 0x31, - 0xa4, 0x3f, 0xdc, 0xf4, 0x52, 0x34, 0xa4, 0x21, 0x36, 0x2e, 0xe7, - 0x47, 0x0c, 0x5e, 0x94, 0x73, 0x1f, 0x1b, 0xb4, 0x8b, 0x8d, 0x1e, - 0xe3, 0x45, 0x05, 0xf7, 0x89, 0x6e, 0x9e, 0xfa, 0xcf, 0x8c, 0x03, - 0xd2, 0xda, 0x32, 0xcd, 0x07, 0x3b, 0x03, 0x9a, 0x2f, 0xdb, 0x1c, - 0x64, 0x30, 0xcb, 0xb1, 0x89, 0x3c, 0x71, 0xdc, 0xb6, 0xd7, 0xa3, - 0xc1, 0xdb, 0x10, 0xc8, 0xdc, 0x10, 0x43, 0x1a, 0x6c, 0x93, 0x20, - 0xed, 0xde, 0x46, 0x69, 0x33, 0x83, 0x17, 0xbf, 0x72, 0x5b, 0x48, - 0x6e, 0xf8, 0xb3, 0x69, 0x1a, 0x5e, 0x6c, 0xf5, 0x18, 0x2f, 0x2a, - 0xb9, 0x6d, 0xa4, 0xe4, 0xd4, 0x5e, 0x6f, 0xd0, 0x2b, 0x73, 0x8f, - 0xa5, 0xb5, 0x12, 0xe4, 0x19, 0xb8, 0xa7, 0xf9, 0xb0, 0x47, 0x80, - 0xe6, 0xd3, 0xfd, 0x02, 0x1c, 0xb7, 0x9d, 0x59, 0x8e, 0x1d, 0xe4, - 0x89, 0xb9, 0x61, 0x8f, 0x93, 0x7d, 0x23, 0x53, 0xfe, 0xde, 0x94, - 0xc4, 0x90, 0x86, 0x7d, 0x23, 0x90, 0x76, 0xbf, 0x7f, 0xe4, 0x1f, - 0x0c, 0x5e, 0x54, 0x71, 0x9f, 0x1a, 0xc8, 0x5a, 0x3b, 0x3d, 0xc6, - 0x0b, 0x27, 0xb7, 0x4b, 0x35, 0x8e, 0x68, 0xf7, 0x64, 0x2a, 0xc7, - 0x11, 0x7d, 0x7f, 0xb1, 0x9b, 0x59, 0x8e, 0x4c, 0xf2, 0xc4, 0x3b, - 0xc7, 0x5f, 0x21, 0x76, 0xe0, 0xe3, 0xfe, 0xf5, 0x26, 0x89, 0x21, - 0x0d, 0x76, 0xe0, 0x90, 0x76, 0x6f, 0x0f, 0xfe, 0x19, 0x83, 0x17, - 0xbf, 0x71, 0x9f, 0x1b, 0xf4, 0x17, 0x7b, 0x3c, 0xc6, 0x0b, 0x17, - 0xf7, 0x05, 0x29, 0x39, 0xb5, 0xbf, 0x01, 0xfc, 0x53, 0x2e, 0x77, - 0x94, 0x78, 0x41, 0xf3, 0x41, 0xd6, 0xa4, 0xf9, 0xb2, 0xdc, 0xb9, - 0x97, 0x59, 0x8e, 0x7d, 0x92, 0x5e, 0x0b, 0xd6, 0x0d, 0x8f, 0x36, - 0xf3, 0x26, 0x31, 0xa4, 0xc1, 0x96, 0x11, 0xd2, 0xee, 0x6d, 0x1a, - 0xbf, 0x64, 0xf0, 0xe2, 0x77, 0x6e, 0xbf, 0x28, 0x5f, 0x4c, 0xd3, - 0xb4, 0x0b, 0x9b, 0xc7, 0x78, 0xf1, 0x80, 0x3b, 0x40, 0x4a, 0x8e, - 0x3a, 0x7e, 0x7a, 0x14, 0xf2, 0xc1, 0x06, 0x9c, 0xca, 0xda, 0x70, - 0x4f, 0xf3, 0xd9, 0x32, 0xf8, 0x41, 0x66, 0x39, 0x0e, 0x49, 0xfa, - 0x0b, 0xf0, 0x25, 0xe5, 0x5a, 0xb8, 0x8b, 0xc4, 0x90, 0x06, 0xd9, - 0x02, 0xd2, 0xee, 0xe7, 0x66, 0x87, 0x19, 0xbc, 0xe0, 0xb9, 0x23, - 0x24, 0x77, 0x4c, 0xd6, 0x62, 0x0d, 0x2f, 0xbe, 0xf2, 0x18, 0x2f, - 0xfe, 0xc5, 0x1d, 0xd5, 0x7d, 0x23, 0x74, 0x9c, 0xd0, 0x7e, 0x23, - 0x34, 0x5f, 0xfe, 0x46, 0x8e, 0x31, 0xcb, 0x71, 0x9c, 0x3c, 0x31, - 0xc2, 0xf5, 0x24, 0x59, 0x5f, 0x7f, 0x33, 0xed, 0x69, 0x12, 0x43, - 0x1a, 0xd6, 0xd7, 0x21, 0xed, 0x7e, 0x9d, 0xfd, 0x04, 0x83, 0x17, - 0xff, 0xe6, 0xbe, 0x26, 0xb9, 0xa7, 0x83, 0x7e, 0xd5, 0xf0, 0xe2, - 0xa4, 0xc7, 0x78, 0x81, 0xb8, 0x2c, 0x1d, 0x2f, 0x94, 0xdf, 0x88, - 0x92, 0x17, 0x34, 0x5f, 0xe6, 0xc5, 0x29, 0x66, 0x39, 0x4e, 0x93, - 0x27, 0x2e, 0x99, 0x35, 0x98, 0xf4, 0x13, 0x6f, 0x7f, 0x30, 0x8c, - 0xc4, 0x90, 0x86, 0x7e, 0x02, 0xd2, 0xee, 0xfb, 0x8b, 0x33, 0x0c, - 0x5e, 0x70, 0x5e, 0x67, 0x0d, 0xbe, 0x91, 0x73, 0x1e, 0xe3, 0x85, - 0x97, 0xd7, 0x79, 0x3d, 0x2f, 0xc4, 0x75, 0x31, 0x25, 0x2f, 0x60, - 0xec, 0xa0, 0xf9, 0xf2, 0x38, 0x72, 0x81, 0x59, 0x8e, 0x8b, 0x92, - 0xac, 0xb5, 0xef, 0xd8, 0x81, 0xa8, 0x92, 0x13, 0xae, 0x28, 0x88, - 0x21, 0xdd, 0xea, 0x56, 0xfb, 0x68, 0x48, 0x43, 0x6c, 0x5c, 0xce, - 0x6c, 0x06, 0x2f, 0x1e, 0xf3, 0xba, 0x24, 0x8c, 0xa9, 0xf1, 0xf1, - 0x1a, 0x9c, 0xdf, 0x78, 0x8c, 0x17, 0x26, 0xaf, 0x9c, 0x6a, 0x8d, - 0x23, 0x80, 0x9f, 0xe6, 0xcb, 0xbc, 0xf8, 0x96, 0x59, 0x8e, 0xcb, - 0xe4, 0x89, 0xbb, 0xed, 0xf5, 0x62, 0xbe, 0xc9, 0xba, 0x1b, 0x15, - 0x1a, 0x12, 0x42, 0x62, 0x48, 0x83, 0xec, 0x0d, 0x69, 0xf7, 0x32, - 0xf8, 0x77, 0x0c, 0x5e, 0xd4, 0xf2, 0xfa, 0xde, 0x60, 0x1c, 0xc9, - 0xf5, 0x18, 0x2f, 0xfe, 0xe4, 0x75, 0x45, 0x27, 0x77, 0xd2, 0x7e, - 0x41, 0x2b, 0x77, 0xd2, 0x7c, 0x59, 0xee, 0xbc, 0xca, 0x2c, 0xc7, - 0x3f, 0xa5, 0x39, 0x3b, 0xcc, 0x43, 0xde, 0xbf, 0xb5, 0x9b, 0xc4, - 0x90, 0x06, 0x1e, 0x40, 0xda, 0x3d, 0x2f, 0xf2, 0x18, 0xbc, 0x30, - 0x7b, 0x5d, 0x33, 0x90, 0x2f, 0xf2, 0x3d, 0xc6, 0x8b, 0xc7, 0xbd, - 0x7e, 0x50, 0xb5, 0x0b, 0xd8, 0x63, 0x46, 0xe7, 0xa3, 0x70, 0xaf, - 0x6c, 0x17, 0x34, 0x5f, 0x6e, 0x17, 0x3f, 0x32, 0xcb, 0xf1, 0x13, - 0x79, 0x62, 0xd7, 0x1f, 0x4f, 0x46, 0x5d, 0xfe, 0x7b, 0x97, 0xe8, - 0x05, 0x2f, 0x87, 0x45, 0x43, 0x0c, 0xe9, 0xdc, 0x3e, 0x6b, 0x49, - 0x1a, 0x62, 0xe3, 0x72, 0x16, 0x30, 0x78, 0xe1, 0xed, 0x75, 0xdd, - 0xa0, 0x5d, 0xdc, 0xf0, 0x18, 0x2f, 0x7c, 0xbc, 0x6e, 0xaa, 0xda, - 0x05, 0xe0, 0xa7, 0xdf, 0x02, 0xdc, 0xd3, 0x7c, 0xf6, 0x37, 0xf2, - 0x33, 0xb3, 0x1c, 0x76, 0xf2, 0x44, 0xf0, 0x77, 0x01, 0xf8, 0xb7, - 0x97, 0x8f, 0x27, 0x31, 0xa4, 0x2f, 0x4e, 0x18, 0x1a, 0x0d, 0x69, - 0x88, 0x8d, 0xcb, 0x59, 0xc8, 0xe0, 0x45, 0x6d, 0xaf, 0x5b, 0x06, - 0xbc, 0xb8, 0xed, 0x31, 0x5e, 0x3c, 0xe1, 0x55, 0xa4, 0xeb, 0x2f, - 0xa8, 0x9f, 0x4e, 0x6d, 0x7f, 0x41, 0xf3, 0x65, 0x5e, 0xdc, 0x61, - 0x96, 0xe3, 0xae, 0xa4, 0xe3, 0xeb, 0x78, 0xd1, 0x16, 0x5d, 0xba, - 0xe6, 0x28, 0x89, 0x21, 0x0d, 0xfb, 0x95, 0x21, 0xed, 0x7e, 0xdf, - 0x72, 0x31, 0x83, 0x17, 0x75, 0xbc, 0xee, 0x89, 0x6b, 0xcb, 0xbb, - 0x34, 0xbf, 0x2c, 0xf1, 0x18, 0x2f, 0xea, 0x7a, 0xfd, 0xa2, 0x9a, - 0x8f, 0x40, 0x1f, 0x11, 0x72, 0xf7, 0x88, 0xd4, 0x5f, 0xd0, 0x7c, - 0xe8, 0x23, 0x68, 0xbe, 0xdc, 0x5f, 0xdc, 0x67, 0x96, 0xa3, 0x94, - 0x3c, 0x11, 0x7c, 0x3c, 0x7c, 0x92, 0xb9, 0x8b, 0xac, 0x21, 0x42, - 0x0c, 0x69, 0xf0, 0x7b, 0x01, 0x69, 0xf7, 0xfe, 0x2f, 0x1c, 0x0c, - 0x5e, 0xf8, 0x7a, 0x95, 0x91, 0xdc, 0xc9, 0x07, 0x4f, 0x68, 0x7e, - 0x59, 0xee, 0x31, 0x5e, 0xf8, 0x79, 0x55, 0xa8, 0xe6, 0xa9, 0x80, - 0xbf, 0x65, 0xbd, 0xcf, 0x25, 0x5e, 0x48, 0x6b, 0x02, 0x9b, 0x02, - 0x62, 0x68, 0x3e, 0xb5, 0xdb, 0xe2, 0xb8, 0x5f, 0x99, 0xe5, 0xa8, - 0x94, 0xf4, 0xe0, 0x60, 0x8b, 0x53, 0xb6, 0x71, 0x2e, 0x89, 0x21, - 0x0d, 0xdf, 0x06, 0xa4, 0xdd, 0x7f, 0x23, 0x55, 0x0c, 0x5e, 0xd4, - 0xf3, 0x72, 0x92, 0xdc, 0x01, 0xd7, 0xf7, 0x69, 0x7e, 0xf9, 0x9b, - 0xc7, 0x78, 0x51, 0xdf, 0xcb, 0xa5, 0xd3, 0xf1, 0x29, 0x75, 0x39, - 0x34, 0x1f, 0xf6, 0x2a, 0xd3, 0x7c, 0x79, 0xdf, 0xf2, 0xef, 0xcc, - 0x72, 0x3c, 0x10, 0x5a, 0x5a, 0x25, 0x1f, 0x0d, 0x63, 0x69, 0xaf, - 0x83, 0xbe, 0x64, 0x4c, 0x85, 0x34, 0x8c, 0x1f, 0x90, 0x76, 0x3f, - 0x8e, 0xf0, 0x0c, 0x5e, 0x3c, 0xe9, 0xf5, 0x2f, 0x83, 0xfe, 0xe2, - 0xdf, 0x1e, 0xe3, 0x85, 0xbf, 0x17, 0xd2, 0xe9, 0x2f, 0xa8, 0xdf, - 0x3d, 0xa5, 0xfe, 0x02, 0xf0, 0xd3, 0x7c, 0x99, 0x17, 0x58, 0x04, - 0x62, 0x94, 0xc3, 0xeb, 0x31, 0x78, 0xe2, 0x13, 0xfb, 0x82, 0x62, - 0x4c, 0xd6, 0xdc, 0x9e, 0x77, 0x0f, 0x74, 0x20, 0x31, 0xa4, 0xe7, - 0x4e, 0xc8, 0x8b, 0x82, 0x34, 0xc4, 0xc6, 0xe5, 0x7c, 0xec, 0x31, - 0x3d, 0x2f, 0x1a, 0x78, 0x99, 0x48, 0xee, 0xb9, 0xe7, 0x8b, 0x34, - 0x5c, 0xac, 0xc5, 0x2c, 0xc3, 0xa3, 0xf0, 0x22, 0xc0, 0xeb, 0x4f, - 0x8f, 0x69, 0x79, 0xa1, 0xdc, 0x63, 0xa5, 0xe4, 0x05, 0xcd, 0x97, - 0x79, 0x61, 0x66, 0x96, 0xe3, 0xf1, 0xc7, 0x68, 0xbb, 0x00, 0x1e, - 0x64, 0xfc, 0xad, 0x09, 0xe1, 0x05, 0xa4, 0x81, 0x07, 0x90, 0x76, - 0xcf, 0x0b, 0x6f, 0x06, 0x2f, 0x1a, 0x7a, 0xf9, 0x3c, 0x26, 0xf4, - 0x9d, 0x5a, 0xbb, 0x9c, 0xda, 0x1e, 0xe3, 0x45, 0x23, 0xaf, 0x27, - 0x48, 0xc9, 0x9b, 0xb7, 0x3c, 0x2d, 0xd9, 0x1c, 0xd0, 0x71, 0x02, - 0xee, 0x69, 0x3e, 0xe0, 0xa7, 0xf9, 0x32, 0x2f, 0xea, 0x30, 0xcb, - 0x51, 0x97, 0x3c, 0x11, 0x7c, 0xb9, 0x8e, 0xae, 0x6f, 0x8e, 0x02, - 0xff, 0xbe, 0x10, 0x43, 0x1a, 0x3c, 0x69, 0x43, 0x1a, 0x62, 0xe3, - 0x72, 0xfa, 0x32, 0x78, 0xd1, 0xd8, 0xcb, 0xcf, 0xa0, 0x5d, 0xd4, - 0xf3, 0x18, 0x2f, 0x02, 0xbd, 0xea, 0xab, 0xda, 0x05, 0xcc, 0xd3, - 0xe9, 0xb7, 0x00, 0xf7, 0xee, 0xbf, 0x91, 0x27, 0x99, 0xe5, 0xf0, - 0x7f, 0x8c, 0xce, 0x47, 0x40, 0xc6, 0xba, 0x69, 0xf9, 0x82, 0xc8, - 0x5c, 0x90, 0x06, 0x19, 0x0b, 0xd2, 0xee, 0x65, 0xad, 0x06, 0x0c, - 0x5e, 0x34, 0xf1, 0x0a, 0x30, 0xe0, 0x45, 0x43, 0x8f, 0xf1, 0xa2, - 0xa9, 0x57, 0xa3, 0xc7, 0x94, 0x63, 0x2a, 0xb4, 0x05, 0xba, 0x26, - 0xa4, 0xdc, 0xab, 0x0b, 0xf8, 0x69, 0xbe, 0xcc, 0x8b, 0xc6, 0xcc, - 0x72, 0x04, 0x92, 0x27, 0x86, 0xd5, 0xea, 0x18, 0xfd, 0xdb, 0xb6, - 0x82, 0xa8, 0x45, 0x5f, 0xcf, 0x26, 0x31, 0xa4, 0x9b, 0x56, 0xc6, - 0x46, 0x43, 0x1a, 0x62, 0xe3, 0x72, 0x36, 0x61, 0xf0, 0x22, 0xc8, - 0xab, 0x29, 0xc9, 0xfd, 0x74, 0x52, 0xbe, 0xe6, 0x97, 0x41, 0x1e, - 0xe3, 0xc5, 0x53, 0x5e, 0x4f, 0xa9, 0xbe, 0x91, 0x7f, 0x75, 0x78, - 0x25, 0x9a, 0xda, 0x71, 0xc2, 0x3d, 0xcd, 0x07, 0x9f, 0xae, 0x34, - 0x9f, 0xfa, 0x77, 0xe5, 0xb8, 0x66, 0xcc, 0x72, 0x04, 0x93, 0x27, - 0x8e, 0xfb, 0xe7, 0xea, 0xa8, 0x2e, 0x3f, 0x84, 0x44, 0xbd, 0xc6, - 0x85, 0x44, 0x43, 0x0c, 0xe9, 0x5f, 0xbe, 0x9a, 0x40, 0xd2, 0x10, - 0x1b, 0x97, 0xb3, 0x39, 0x83, 0x17, 0xcd, 0xbc, 0x42, 0x1e, 0x63, - 0xcf, 0x47, 0x5a, 0x78, 0x8c, 0x17, 0xc1, 0x5e, 0x2d, 0x75, 0xbc, - 0x18, 0xbc, 0x6a, 0x01, 0x93, 0x17, 0x34, 0x5f, 0xe6, 0xc5, 0xd3, - 0xcc, 0x72, 0x84, 0x92, 0x27, 0x82, 0x6d, 0x6b, 0xbb, 0x8c, 0x27, - 0x88, 0x7c, 0x01, 0x31, 0xa4, 0xed, 0x0b, 0x13, 0x48, 0x1a, 0x62, - 0xe3, 0x72, 0xb6, 0x62, 0xf0, 0xa2, 0xb9, 0x57, 0x6b, 0x92, 0x9b, - 0xb4, 0x6c, 0xbe, 0x06, 0xe7, 0x33, 0x1e, 0xe3, 0x45, 0x88, 0x57, - 0x18, 0x29, 0x39, 0xf5, 0xf9, 0x01, 0x76, 0x06, 0x74, 0x1d, 0x04, - 0xee, 0x95, 0x27, 0x11, 0xd0, 0x7c, 0x59, 0x97, 0xd3, 0x86, 0x59, - 0x8e, 0xb6, 0xe4, 0x89, 0x2d, 0x56, 0xfd, 0x29, 0xfa, 0x87, 0x43, - 0xef, 0x46, 0xdd, 0x79, 0x36, 0x9a, 0xc4, 0x90, 0xde, 0xd4, 0xff, - 0x12, 0x49, 0x43, 0x6c, 0x5c, 0xce, 0x76, 0x0c, 0x5e, 0xb4, 0xf0, - 0x7a, 0xd6, 0xa0, 0x5d, 0xb4, 0xf7, 0x18, 0x2f, 0x5a, 0x7a, 0x75, - 0x20, 0x25, 0xa7, 0x76, 0xdf, 0x65, 0x6d, 0x1e, 0x97, 0x30, 0xc3, - 0x3d, 0xcd, 0x3f, 0x38, 0xf7, 0x39, 0x29, 0x1f, 0xee, 0x85, 0x67, - 0x85, 0x33, 0xcb, 0xf1, 0x9c, 0xd4, 0x2e, 0xd6, 0x74, 0x9d, 0x1d, - 0xe5, 0x58, 0x32, 0x9a, 0xc4, 0x90, 0x86, 0x7e, 0x13, 0xd2, 0x10, - 0x1b, 0x97, 0xb3, 0x23, 0x83, 0x17, 0x4f, 0x7b, 0x45, 0x18, 0xf0, - 0xa2, 0x93, 0xc7, 0x78, 0x11, 0xea, 0xd5, 0x59, 0xd5, 0x2e, 0xea, - 0xd5, 0x6a, 0x20, 0xed, 0xb1, 0x83, 0x7b, 0xc9, 0x47, 0x4c, 0x7a, - 0x84, 0x94, 0x2f, 0xeb, 0x7e, 0x23, 0x99, 0xe5, 0xe8, 0x42, 0x9e, - 0xf8, 0xf7, 0xbd, 0x3f, 0x45, 0x9f, 0xb9, 0xf6, 0x69, 0xd4, 0x4f, - 0x25, 0x4e, 0x12, 0x43, 0x1a, 0xfc, 0xa1, 0x40, 0xda, 0xbd, 0x5f, - 0x94, 0xae, 0x0c, 0x5e, 0xb4, 0xf2, 0xea, 0x66, 0xc0, 0x8b, 0xee, - 0x1e, 0xe0, 0x85, 0xf0, 0x8e, 0xd6, 0x5e, 0x3d, 0x1e, 0xf3, 0x52, - 0xd1, 0xd1, 0xe7, 0xf4, 0xf4, 0xc0, 0x3b, 0xe0, 0x94, 0xd9, 0xe3, - 0xdc, 0x93, 0xdc, 0xd0, 0xa4, 0xbf, 0xcc, 0x9a, 0x3d, 0x23, 0xa9, - 0x57, 0x4a, 0xca, 0x94, 0x79, 0xbd, 0x66, 0xcd, 0x9a, 0x31, 0xf1, - 0x75, 0xaf, 0x65, 0x5c, 0x1d, 0xf1, 0x04, 0x60, 0x31, 0xa3, 0x05, - 0x9c, 0xc6, 0x01, 0x47, 0x73, 0x9c, 0x80, 0xb3, 0x8c, 0xc5, 0x1f, - 0x50, 0xda, 0x30, 0xaf, 0x76, 0x5e, 0x70, 0x30, 0xee, 0x49, 0x78, - 0x18, 0x9c, 0x0d, 0x9c, 0x32, 0x0e, 0x4e, 0x16, 0x96, 0x1f, 0xd6, - 0xc6, 0xcb, 0xcb, 0x4c, 0x7e, 0x0b, 0x87, 0x68, 0x80, 0xbb, 0xba, - 0xa5, 0xdc, 0xe3, 0xf4, 0x29, 0x5e, 0x0b, 0xb9, 0x27, 0xb8, 0xf8, - 0xa9, 0xe3, 0xde, 0x4c, 0x8a, 0x9b, 0x3d, 0x7e, 0x7c, 0xd2, 0x0c, - 0x72, 0x82, 0x49, 0x73, 0xfc, 0xf7, 0x17, 0xc7, 0x4d, 0x85, 0x63, - 0x4b, 0xb8, 0x76, 0xf8, 0xb7, 0xc2, 0xb1, 0xc7, 0xc1, 0x5c, 0xfb, - 0xf6, 0x1d, 0x84, 0xff, 0xa7, 0xc2, 0x51, 0xcb, 0x33, 0x3b, 0x4c, - 0x1d, 0x97, 0x32, 0xb3, 0x83, 0x78, 0x26, 0xf2, 0x8c, 0x37, 0x5f, - 0x07, 0x8c, 0x5e, 0x24, 0x70, 0x5e, 0x66, 0x2f, 0x02, 0x58, 0xc5, - 0x3e, 0x98, 0x10, 0xa8, 0xf9, 0xf9, 0xbf, 0xf0, 0xbf, 0xf0, 0xbf, - 0xf0, 0xbf, 0xf0, 0xbf, 0xf0, 0xbf, 0xf0, 0xbf, 0xf0, 0xdf, 0x0b, - 0x2d, 0x97, 0x67, 0x66, 0xbe, 0x2c, 0xde, 0x77, 0x4c, 0xcb, 0xcc, - 0x1c, 0xa7, 0xfe, 0xb3, 0x79, 0x78, 0x26, 0xce, 0x33, 0xeb, 0x7e, - 0xf6, 0xff, 0x9b, 0x30, 0xec, 0x0e, 0x42, 0x6b, 0x7c, 0x84, 0xfb, - 0x09, 0x15, 0x08, 0x7d, 0xf1, 0x94, 0xea, 0xcf, 0x41, 0x3b, 0x10, - 0x42, 0x7b, 0x82, 0x54, 0x79, 0xb5, 0x1a, 0x06, 0x07, 0xd7, 0x93, - 0x93, 0xe6, 0x40, 0x55, 0xf2, 0xff, 0x63, 0x61, 0x15, 0xba, 0x73, - 0xe7, 0x68, 0x2b, 0x72, 0xeb, 0x9b, 0x8e, 0x0a, 0x4b, 0x6f, 0x25, - 0xa8, 0xfe, 0x3c, 0x20, 0x1f, 0xdd, 0x2c, 0x2b, 0x18, 0xa0, 0xca, - 0x7b, 0x3c, 0xe1, 0x53, 0xdb, 0x92, 0x10, 0x9a, 0x32, 0x8f, 0xdc, - 0x65, 0x5b, 0x1b, 0x8e, 0x6f, 0xba, 0x5a, 0xaa, 0x17, 0x46, 0xb9, - 0x63, 0x56, 0x68, 0xbc, 0x3e, 0x84, 0x7a, 0x0c, 0xac, 0x3e, 0x34, - 0x39, 0x83, 0xce, 0x9f, 0xbc, 0xd9, 0x9f, 0xdc, 0x47, 0x64, 0x97, - 0x7d, 0x76, 0x03, 0xad, 0x52, 0xfe, 0xd9, 0x7b, 0x19, 0xef, 0x58, - 0x9f, 0xcd, 0x2f, 0xf3, 0x56, 0xfd, 0x28, 0x64, 0x1b, 0x5f, 0x6e, - 0xf1, 0x13, 0xee, 0x4d, 0x51, 0xb9, 0xa8, 0x70, 0x4a, 0x5d, 0x7c, - 0x97, 0x82, 0xaa, 0x17, 0x6c, 0xc1, 0x6e, 0xca, 0x33, 0xc3, 0xae, - 0x0f, 0x33, 0x3c, 0x09, 0x58, 0x13, 0x5e, 0xb8, 0x8b, 0x36, 0xbe, - 0xef, 0x9c, 0x63, 0x82, 0xfb, 0x11, 0xf7, 0x0a, 0xe6, 0x9e, 0x41, - 0x47, 0xfc, 0x14, 0x7f, 0x6e, 0x75, 0x14, 0x5d, 0xec, 0xbf, 0x1d, - 0x89, 0x0d, 0x44, 0x0a, 0xdd, 0x8f, 0xf3, 0x79, 0xc3, 0x85, 0x4e, - 0xa1, 0xfb, 0x01, 0xde, 0xb1, 0xc2, 0x1f, 0xee, 0x06, 0xdb, 0xaa, - 0x17, 0x16, 0x36, 0x74, 0x53, 0x9e, 0xff, 0x32, 0x7e, 0xef, 0x54, - 0x9e, 0x9f, 0x9f, 0xe2, 0xdc, 0xde, 0x00, 0xdf, 0xfb, 0x2c, 0xe3, - 0xb3, 0xe2, 0xb6, 0x23, 0xbb, 0x72, 0xf2, 0x36, 0xb6, 0x04, 0xa5, - 0x3d, 0x39, 0xc7, 0x59, 0x32, 0x56, 0xfd, 0x33, 0xd3, 0x0b, 0x39, - 0xfc, 0xa5, 0x78, 0xb8, 0xc3, 0x4d, 0xc1, 0x61, 0x15, 0xbe, 0x85, - 0x3a, 0x41, 0xd5, 0x0b, 0x0d, 0x4c, 0x6e, 0x0a, 0xf4, 0x5f, 0x6e, - 0xff, 0xcd, 0x76, 0xa3, 0xbb, 0x23, 0xfa, 0xdf, 0xcc, 0x8e, 0x00, - 0x28, 0xfb, 0x51, 0x7a, 0xc3, 0x85, 0x88, 0x4f, 0x91, 0xcb, 0x87, - 0x7b, 0x04, 0xd7, 0xab, 0x5c, 0xdc, 0x35, 0x94, 0xee, 0xab, 0xfe, - 0x9d, 0x77, 0x62, 0x01, 0x3a, 0xd6, 0x96, 0xe3, 0xea, 0x5a, 0xca, - 0x5d, 0x1f, 0x35, 0xff, 0xcf, 0x95, 0xcf, 0x7d, 0x30, 0xb7, 0x8c, - 0x30, 0x0a, 0x2d, 0xab, 0xf7, 0x84, 0x1e, 0x39, 0xe8, 0x6a, 0x6c, - 0x9b, 0x53, 0xa5, 0x30, 0xea, 0xc5, 0x5d, 0x71, 0xcd, 0xe6, 0x86, - 0x95, 0xa1, 0x0d, 0xfe, 0xd2, 0x9f, 0xc3, 0x2f, 0xa0, 0x1f, 0xc3, - 0xb9, 0x90, 0x23, 0xe8, 0x42, 0xb8, 0xe6, 0x87, 0x7e, 0x2b, 0x5d, - 0x0f, 0x56, 0x05, 0x70, 0x83, 0xf2, 0x5d, 0xfb, 0xc3, 0x3c, 0x86, - 0xa7, 0xa6, 0xa1, 0xcb, 0xe1, 0x1b, 0x46, 0xe1, 0x70, 0xf5, 0x18, - 0x90, 0x5c, 0x89, 0xf6, 0x85, 0xd4, 0xdb, 0x88, 0x96, 0xe3, 0x8f, - 0x39, 0xb5, 0xaa, 0x68, 0x30, 0x17, 0x76, 0x15, 0xe5, 0xf4, 0x90, - 0xff, 0x5c, 0x85, 0xb6, 0xd4, 0xe6, 0x7c, 0xd6, 0xa0, 0xaa, 0x64, - 0xed, 0x2f, 0x43, 0xd3, 0x2a, 0x4b, 0x67, 0x76, 0x39, 0x86, 0xce, - 0x49, 0xda, 0x9a, 0x46, 0x11, 0xcf, 0x92, 0xae, 0xa3, 0x76, 0xd8, - 0xb3, 0x7e, 0x5a, 0x6a, 0xe3, 0x50, 0x2f, 0x98, 0x86, 0xa0, 0xda, - 0xd5, 0xff, 0x95, 0x10, 0x5a, 0xaf, 0xc8, 0x34, 0x0a, 0x2b, 0x1a, - 0xe1, 0x71, 0x6a, 0xa8, 0xa5, 0x3d, 0x90, 0xd1, 0x98, 0xf1, 0xf2, - 0x8d, 0x08, 0xad, 0xa8, 0xc3, 0xcd, 0xe3, 0xf7, 0x04, 0x73, 0xb5, - 0xb7, 0x40, 0x2d, 0xd7, 0xde, 0x83, 0xca, 0x26, 0x28, 0xfe, 0x5c, - 0x3a, 0x15, 0xc7, 0xa3, 0x8b, 0xd1, 0xc6, 0xfa, 0xda, 0xdf, 0x76, - 0x38, 0x82, 0x2e, 0xd9, 0x5c, 0xf9, 0x23, 0x25, 0xd9, 0x68, 0x44, - 0xf6, 0x3e, 0xcc, 0x39, 0x53, 0xe4, 0xd2, 0xe3, 0xa7, 0x96, 0x69, - 0x3f, 0xd9, 0x96, 0x83, 0x62, 0x29, 0x4f, 0x9a, 0x0d, 0x1c, 0xa0, - 0x14, 0x31, 0xc6, 0x67, 0xd3, 0x60, 0x8b, 0xd3, 0x17, 0xf0, 0x99, - 0xf9, 0x8b, 0xa0, 0xe5, 0x8d, 0xb0, 0x4e, 0x0e, 0xa8, 0x16, 0x47, - 0xd4, 0x21, 0xb9, 0x78, 0x96, 0x2a, 0xd6, 0x85, 0x36, 0xa7, 0xd0, - 0xcf, 0x2f, 0x72, 0xdc, 0xd0, 0xbb, 0xf9, 0xfd, 0xb8, 0xd0, 0xef, - 0xd0, 0x56, 0xdc, 0xf2, 0xdf, 0x92, 0xc5, 0x21, 0xae, 0x73, 0x0e, - 0xba, 0x10, 0x89, 0xe3, 0x16, 0x07, 0x51, 0x4e, 0x4f, 0xdd, 0x8f, - 0xbb, 0x9e, 0xe5, 0x91, 0x63, 0xa6, 0x2c, 0x1a, 0xbe, 0xf8, 0x73, - 0x59, 0xb2, 0x29, 0x60, 0x42, 0x2e, 0x1e, 0xe2, 0x5c, 0x9b, 0x9b, - 0xa9, 0x69, 0x3b, 0x1e, 0x2b, 0x9e, 0x23, 0x0c, 0xfb, 0xa1, 0xdb, - 0x1c, 0x19, 0xca, 0xb6, 0x69, 0x91, 0xc6, 0x45, 0xbb, 0x5a, 0xf2, - 0x10, 0x0a, 0x78, 0xd4, 0x69, 0xc1, 0x63, 0x6f, 0xaa, 0x4b, 0x23, - 0x82, 0x54, 0x2f, 0xc4, 0x5d, 0xcb, 0xac, 0xa7, 0x8c, 0x75, 0x61, - 0xe8, 0x6d, 0x74, 0x38, 0x94, 0x0c, 0xfc, 0xd3, 0xb9, 0xde, 0x0e, - 0x32, 0x0c, 0x26, 0xdc, 0x92, 0x46, 0x3b, 0xd3, 0xa4, 0x32, 0x94, - 0x0e, 0x3f, 0xc4, 0x52, 0x40, 0xd9, 0x5c, 0x5d, 0xaf, 0xfd, 0xf8, - 0x3b, 0x15, 0xe8, 0xb8, 0xa2, 0x61, 0x35, 0xd9, 0x81, 0x2e, 0xbe, - 0x9b, 0x51, 0x58, 0x7e, 0x74, 0x79, 0x5a, 0xa1, 0x6e, 0xc0, 0x18, - 0x59, 0x50, 0x90, 0x02, 0x6c, 0x6d, 0xfa, 0x7e, 0xe9, 0xe1, 0x48, - 0xe5, 0x5f, 0x62, 0x25, 0xb9, 0x68, 0x06, 0xa3, 0x23, 0xf1, 0xb1, - 0x38, 0x2f, 0x74, 0xe6, 0xb8, 0xc8, 0xf3, 0x7c, 0x9a, 0xbf, 0xfe, - 0xaf, 0x0f, 0x0b, 0xcd, 0xf6, 0xdf, 0x8a, 0x51, 0xc6, 0xda, 0x80, - 0x71, 0x21, 0xab, 0x99, 0x74, 0xf3, 0x19, 0x3e, 0xd3, 0x11, 0x11, - 0x83, 0x42, 0x0f, 0xa3, 0xdb, 0x43, 0x85, 0x3f, 0x07, 0xee, 0x42, - 0x65, 0x89, 0xe4, 0x0e, 0xf3, 0xe9, 0x44, 0x90, 0xf6, 0xd7, 0x91, - 0x97, 0x78, 0x54, 0x90, 0xa8, 0x90, 0x8c, 0x7a, 0xe1, 0x0c, 0x3e, - 0xcf, 0xd2, 0xd6, 0x1c, 0x90, 0xa1, 0x1b, 0x30, 0xea, 0x4e, 0x29, - 0xbc, 0x3e, 0xd0, 0xcc, 0xd5, 0x9d, 0x55, 0x72, 0x3a, 0xd6, 0xdd, - 0xf8, 0xa7, 0x0d, 0x71, 0xd7, 0xa0, 0x01, 0x98, 0x17, 0x3b, 0x1f, - 0xa5, 0x01, 0x60, 0x7c, 0x8b, 0xcd, 0x8a, 0x58, 0x1b, 0x9a, 0xed, - 0x87, 0xe1, 0x0d, 0x87, 0x14, 0xe7, 0xe9, 0x36, 0x19, 0x42, 0xbd, - 0x9b, 0x17, 0x23, 0xde, 0x62, 0x12, 0xdf, 0x8d, 0xce, 0x0a, 0xfd, - 0x3e, 0x16, 0x83, 0x1c, 0xfd, 0xd5, 0xbf, 0x35, 0x75, 0xdc, 0x85, - 0xca, 0x6f, 0xf1, 0x39, 0x2f, 0xc8, 0x68, 0x4c, 0xbd, 0xd6, 0xda, - 0xd6, 0xc6, 0x83, 0x28, 0x38, 0xca, 0xb6, 0xb0, 0x81, 0xe6, 0x5d, - 0xfe, 0x2b, 0x1c, 0x97, 0x46, 0x36, 0x98, 0x58, 0x50, 0x30, 0xb2, - 0x26, 0xf0, 0xa1, 0x0e, 0xa0, 0x01, 0xf4, 0xbf, 0xf6, 0x28, 0x0d, - 0x20, 0xf6, 0xcb, 0xdf, 0xa0, 0x79, 0xd3, 0xd8, 0xbb, 0x53, 0x7c, - 0x3c, 0x68, 0x8e, 0x71, 0xdc, 0x0b, 0x62, 0x00, 0x98, 0xdf, 0x5e, - 0xb8, 0xb9, 0x35, 0xfe, 0x34, 0xb2, 0x92, 0xba, 0x1c, 0xe2, 0x42, - 0xbb, 0x02, 0xe1, 0x06, 0xb7, 0x3d, 0x2a, 0xf8, 0x7a, 0x5b, 0x9c, - 0xc8, 0xaa, 0xee, 0xd4, 0xc3, 0xf7, 0xba, 0x1c, 0xeb, 0x26, 0xe5, - 0xf1, 0xaa, 0xd6, 0xec, 0x1b, 0xe4, 0x2b, 0xc6, 0x7a, 0x21, 0x27, - 0xc4, 0x5a, 0x95, 0xbf, 0xa9, 0x40, 0x10, 0x95, 0xab, 0x1f, 0xf0, - 0x37, 0xe8, 0xb4, 0xf8, 0x70, 0xb8, 0x45, 0x31, 0x1a, 0x80, 0xc9, - 0xdf, 0x50, 0xc8, 0x22, 0xcc, 0xc2, 0x7d, 0x0b, 0x91, 0x6c, 0xc4, - 0x38, 0x70, 0xb3, 0xdd, 0x0e, 0x42, 0x1b, 0x8e, 0x2f, 0x12, 0xe1, - 0x2d, 0xc5, 0x89, 0x84, 0x8e, 0x01, 0x37, 0x84, 0xad, 0xb7, 0x4a, - 0x85, 0xb6, 0xde, 0x26, 0x17, 0x5d, 0x25, 0x9d, 0x5d, 0x9b, 0xa3, - 0xd2, 0x97, 0x00, 0x9c, 0xca, 0x55, 0x7d, 0x42, 0x21, 0xe9, 0x55, - 0xfc, 0x8e, 0xd6, 0xb8, 0x39, 0x3b, 0x77, 0x55, 0x57, 0x3c, 0x6b, - 0xbe, 0xd7, 0x85, 0xca, 0x57, 0x68, 0x6b, 0xb1, 0x6b, 0x4a, 0x0a, - 0x7d, 0x70, 0xa3, 0xd7, 0x53, 0x5e, 0x6f, 0x2e, 0x67, 0x77, 0x25, - 0x37, 0xb8, 0x0f, 0xce, 0xea, 0x08, 0x53, 0x53, 0x7e, 0x4d, 0x1d, - 0xed, 0x13, 0x1f, 0x32, 0xfe, 0x69, 0xf1, 0x07, 0xd9, 0x10, 0x82, - 0x3e, 0x16, 0xc7, 0xa4, 0xaf, 0xad, 0xb3, 0x1e, 0x55, 0x08, 0x03, - 0x03, 0x1e, 0xe1, 0x7f, 0x42, 0xe7, 0x3b, 0x93, 0x7b, 0x3c, 0x0e, - 0x12, 0x71, 0x88, 0x1b, 0x6e, 0x47, 0xa7, 0xda, 0x88, 0x6f, 0x0a, - 0xda, 0x83, 0xb0, 0x70, 0x24, 0x87, 0x3a, 0x16, 0x07, 0x3a, 0xdb, - 0xd5, 0xc4, 0x35, 0xdb, 0xec, 0x72, 0xad, 0x6e, 0x54, 0x4d, 0x06, - 0x74, 0x5d, 0x64, 0xfd, 0x8b, 0x8e, 0x59, 0xb8, 0x6c, 0x56, 0xf1, - 0x36, 0xe2, 0x06, 0xba, 0x11, 0x2f, 0x67, 0x5b, 0x84, 0x37, 0x0d, - 0x4e, 0x49, 0x7c, 0x1a, 0x33, 0x2f, 0x31, 0x65, 0xb0, 0x0e, 0xff, - 0xc3, 0xe4, 0x9f, 0x94, 0x1b, 0x37, 0xf6, 0x3d, 0x2b, 0xc7, 0x8d, - 0x3f, 0xb9, 0x71, 0xa3, 0x1f, 0x47, 0xe2, 0x73, 0x10, 0xe3, 0xd1, - 0xef, 0x8a, 0x38, 0xe6, 0x8e, 0xbb, 0x8f, 0xd0, 0xb6, 0xc6, 0xc2, - 0xfd, 0xd4, 0x52, 0x32, 0x02, 0xd6, 0x5a, 0xee, 0x92, 0x59, 0x6e, - 0x5e, 0xfc, 0x00, 0xed, 0x90, 0xbb, 0x10, 0xd3, 0xc0, 0x3c, 0x54, - 0xf4, 0x3a, 0x29, 0xc2, 0x79, 0x74, 0x67, 0x9a, 0xb1, 0xb8, 0x63, - 0x6a, 0xf8, 0x30, 0xb1, 0xe6, 0x61, 0xf8, 0xdd, 0x85, 0x87, 0xc9, - 0xbf, 0x4d, 0x22, 0x22, 0xc2, 0x6a, 0xcb, 0xb1, 0x39, 0x34, 0x22, - 0x02, 0xc4, 0x18, 0x1c, 0xb7, 0x87, 0xb8, 0x63, 0x5a, 0x66, 0xaa, - 0x28, 0x56, 0x74, 0xfc, 0x30, 0x33, 0x53, 0x9c, 0xd0, 0x71, 0x5d, - 0x71, 0x36, 0x6e, 0xa5, 0x7e, 0x0b, 0x32, 0x3f, 0x91, 0x57, 0xe2, - 0xa2, 0x36, 0x66, 0xbe, 0xd7, 0x58, 0x4a, 0xf5, 0xba, 0x84, 0x6e, - 0x4e, 0x24, 0xb8, 0xcc, 0x63, 0x7e, 0x42, 0x45, 0x49, 0x86, 0x5d, - 0x5a, 0xc3, 0x35, 0x4c, 0xb1, 0xc6, 0x43, 0xf8, 0xff, 0x60, 0xf0, - 0x0e, 0x94, 0xba, 0x29, 0xef, 0xc6, 0x41, 0x41, 0xb4, 0xae, 0x7d, - 0x84, 0x6c, 0x53, 0xc3, 0xa0, 0x40, 0x79, 0x70, 0xc3, 0x04, 0x8d, - 0xa5, 0xfa, 0x87, 0xf9, 0xff, 0x0a, 0x91, 0x73, 0xfe, 0x6f, 0x3b, - 0x90, 0xf1, 0x90, 0x46, 0x3f, 0x35, 0xe3, 0xf0, 0x7f, 0x88, 0xff, - 0x91, 0x43, 0xdb, 0x99, 0x96, 0xc9, 0x92, 0xfe, 0x27, 0x60, 0x82, - 0xe5, 0xad, 0x17, 0x8c, 0x14, 0x84, 0x2a, 0xfc, 0x01, 0xb1, 0xf1, - 0xbd, 0xc3, 0x34, 0x72, 0x41, 0xf5, 0xf1, 0x87, 0xce, 0x50, 0x6b, - 0x91, 0xd4, 0x0f, 0xaa, 0xa7, 0x9d, 0x57, 0x9b, 0x1a, 0x04, 0x05, - 0x69, 0xdf, 0x85, 0x03, 0x1e, 0x31, 0x02, 0xbd, 0xf5, 0xd9, 0xff, - 0xa9, 0xa0, 0xc4, 0x1f, 0xb0, 0x2c, 0xdf, 0x5e, 0x90, 0x95, 0x3e, - 0x36, 0x44, 0x55, 0xce, 0x6a, 0xe3, 0xef, 0x5d, 0xa0, 0xd6, 0x22, - 0x29, 0xe4, 0x31, 0xef, 0x76, 0xc9, 0x1b, 0x6d, 0xb6, 0xed, 0x73, - 0x3a, 0xfb, 0x48, 0x59, 0x7e, 0x49, 0xdb, 0x6d, 0xb6, 0xf4, 0xf9, - 0xa3, 0x42, 0x03, 0x46, 0x59, 0x66, 0xd0, 0x4e, 0xd7, 0xbb, 0x73, - 0xf2, 0x56, 0x9b, 0x6d, 0x8f, 0x55, 0x2a, 0x82, 0x77, 0xab, 0xde, - 0xf1, 0xf1, 0x11, 0x98, 0x71, 0x62, 0xf3, 0x06, 0x09, 0xa1, 0xb9, - 0x48, 0x1c, 0xa6, 0x52, 0x3c, 0xf8, 0x36, 0xac, 0x91, 0xd8, 0xc2, - 0xc0, 0xef, 0x3d, 0xc9, 0x81, 0xaa, 0x6e, 0xdf, 0xe3, 0x4b, 0xfe, - 0xaa, 0x92, 0x00, 0xaa, 0x8d, 0x3f, 0x24, 0x93, 0x47, 0x55, 0x17, - 0x65, 0x2d, 0x92, 0x2c, 0x60, 0x85, 0xa4, 0x66, 0x55, 0x01, 0x4b, - 0x9c, 0x17, 0x96, 0xd0, 0x12, 0x07, 0xcc, 0x29, 0x86, 0x1c, 0xbe, - 0xe4, 0x90, 0xf5, 0x32, 0xb2, 0xc7, 0x53, 0xba, 0x0b, 0x84, 0x0e, - 0x95, 0xec, 0x4b, 0x22, 0xf3, 0x93, 0xba, 0x89, 0x47, 0x0b, 0xec, - 0xf6, 0x6c, 0xcc, 0xb8, 0x9e, 0x9f, 0xd8, 0x3e, 0x09, 0x15, 0x24, - 0x84, 0x44, 0x5a, 0x02, 0xa5, 0xe2, 0xa9, 0xe9, 0xa2, 0x5d, 0xbd, - 0xfe, 0x20, 0xfe, 0x56, 0xfb, 0x51, 0xd5, 0xda, 0x41, 0x23, 0x96, - 0x9d, 0x9d, 0xf9, 0x68, 0xf5, 0x0f, 0x63, 0x4e, 0x65, 0x5a, 0x18, - 0x9d, 0x2d, 0xcb, 0xf5, 0x11, 0xb0, 0xcc, 0x81, 0x2a, 0x4f, 0xae, - 0xb3, 0xee, 0x73, 0x20, 0x57, 0x9a, 0x30, 0xb5, 0x32, 0xbf, 0x5e, - 0x84, 0x5c, 0xb9, 0x19, 0xd6, 0x8c, 0x53, 0xf7, 0x5d, 0x2e, 0x8a, - 0x9f, 0xd0, 0x1d, 0xb0, 0x5a, 0x33, 0x2e, 0x3a, 0x50, 0xf1, 0x74, - 0xa0, 0x1a, 0x99, 0x8f, 0xd0, 0x9d, 0xec, 0xec, 0x7c, 0x47, 0xd6, - 0xc6, 0xdb, 0xe8, 0x86, 0x28, 0x21, 0xa4, 0x88, 0x8f, 0xb5, 0x2a, - 0x4b, 0x80, 0x1b, 0xdf, 0x52, 0x23, 0x8c, 0xb5, 0xc3, 0xc7, 0xa6, - 0xa4, 0x24, 0x84, 0x32, 0xbb, 0x00, 0x05, 0xfe, 0xde, 0xf9, 0xe8, - 0x12, 0x1e, 0xc8, 0x7d, 0x7a, 0xa8, 0xa7, 0x39, 0xd5, 0xef, 0xff, - 0x7c, 0x52, 0x8a, 0x50, 0xd1, 0x50, 0xdd, 0x6b, 0x40, 0x14, 0xf9, - 0xf1, 0x8d, 0x60, 0x13, 0x17, 0x30, 0xfa, 0x12, 0x72, 0xfd, 0x83, - 0x08, 0x23, 0x2d, 0xb0, 0xb8, 0xb2, 0xed, 0x39, 0x1f, 0xce, 0xa7, - 0xe9, 0xe8, 0x93, 0x14, 0xbf, 0xaf, 0xc5, 0xe1, 0x3a, 0xf9, 0x06, - 0x1e, 0xc3, 0x7c, 0x42, 0x86, 0xd9, 0x7e, 0x01, 0xb9, 0x07, 0x4f, - 0x6b, 0x2b, 0x36, 0xf4, 0x0c, 0x0e, 0x6e, 0x3f, 0x23, 0xf7, 0xb7, - 0x07, 0xee, 0xf1, 0xc7, 0xdb, 0xa5, 0x52, 0x6a, 0x82, 0x5f, 0xbf, - 0x2d, 0xd7, 0x70, 0xab, 0x2a, 0xbd, 0xbc, 0x23, 0x41, 0x31, 0xd0, - 0x9b, 0x23, 0x27, 0xa6, 0x24, 0x76, 0xab, 0xad, 0xc4, 0x1f, 0x7f, - 0x03, 0x65, 0x32, 0x7e, 0x5f, 0x83, 0xfe, 0x3f, 0xe8, 0xa3, 0x07, - 0xe8, 0xeb, 0x48, 0x6d, 0x6e, 0xdf, 0x3c, 0x94, 0x9f, 0x44, 0xb8, - 0x62, 0x1e, 0x79, 0x15, 0x95, 0x4d, 0x84, 0x3e, 0x20, 0xf6, 0x2a, - 0x3a, 0x2f, 0x6a, 0x71, 0x5e, 0xcc, 0x17, 0xf1, 0x0f, 0xca, 0x43, - 0xb9, 0x03, 0x45, 0xee, 0xb5, 0x5d, 0x00, 0x83, 0x72, 0x6c, 0xbe, - 0x30, 0xbd, 0xc7, 0x83, 0xf8, 0x4d, 0x64, 0x88, 0xdf, 0x37, 0xc0, - 0x24, 0xe1, 0xf7, 0xf1, 0xd7, 0xf6, 0x02, 0x7e, 0x29, 0x3f, 0x60, - 0xf0, 0x37, 0x6e, 0x94, 0x22, 0xf4, 0xe3, 0x02, 0x49, 0x47, 0x12, - 0x30, 0xe1, 0xbc, 0x0b, 0x55, 0xe6, 0x7c, 0xd0, 0x37, 0xd4, 0x93, - 0xf8, 0x4d, 0x1d, 0xcf, 0xa3, 0xaa, 0x0f, 0x9b, 0xaa, 0x33, 0x7d, - 0xd7, 0xf2, 0xce, 0xc5, 0xa2, 0x00, 0x56, 0x77, 0x4e, 0x15, 0x3a, - 0x11, 0x2e, 0xbe, 0x4b, 0xec, 0x1f, 0x43, 0x8f, 0x08, 0xf8, 0x7d, - 0xd2, 0x30, 0x9d, 0xd4, 0xf3, 0xf8, 0x3f, 0xc9, 0x11, 0x50, 0xa2, - 0x2e, 0xde, 0x3f, 0x8d, 0x37, 0xc2, 0xef, 0xf7, 0xf6, 0xc6, 0x41, - 0x75, 0x45, 0xfc, 0x4d, 0xa7, 0xa5, 0x75, 0x57, 0xbf, 0xbd, 0xee, - 0xc4, 0x02, 0x54, 0x9c, 0x39, 0x29, 0x3e, 0x3e, 0x31, 0x23, 0x9f, - 0xbf, 0xf2, 0x8c, 0x98, 0x1b, 0xba, 0xa2, 0x10, 0xa1, 0x32, 0x7b, - 0x51, 0x55, 0x8e, 0x25, 0xab, 0x1a, 0xf8, 0x33, 0x7c, 0x24, 0xfc, - 0x77, 0x47, 0xb8, 0xc1, 0x8f, 0xe7, 0xe1, 0xb9, 0xa8, 0x64, 0x96, - 0x7a, 0x02, 0x15, 0x91, 0x8d, 0xae, 0x49, 0x12, 0x56, 0xdb, 0x2b, - 0x88, 0xcc, 0x62, 0xc2, 0x4f, 0xa0, 0x9c, 0x7e, 0x42, 0x55, 0x05, - 0xdb, 0x04, 0xfc, 0x9d, 0xaf, 0xa3, 0x9c, 0xae, 0xea, 0xa7, 0xc9, - 0xf8, 0xb9, 0x11, 0x77, 0x8d, 0xf0, 0xf7, 0xb8, 0x89, 0xa7, 0xf4, - 0x21, 0xf8, 0x2d, 0xd3, 0x4d, 0xbd, 0x36, 0x97, 0xf0, 0xef, 0xaa, - 0xbf, 0xbf, 0xf8, 0x3c, 0x74, 0x7d, 0x72, 0x10, 0xbc, 0xc9, 0xbf, - 0x4f, 0xda, 0x76, 0xb1, 0x1a, 0xfc, 0xac, 0xe5, 0xa8, 0xdc, 0x36, - 0x29, 0x7e, 0x70, 0xea, 0xe9, 0xbb, 0xa5, 0xd5, 0xc0, 0x7f, 0x31, - 0x44, 0xc2, 0x4f, 0xa7, 0xde, 0x06, 0xf8, 0xcd, 0x49, 0xc5, 0x28, - 0x6f, 0x90, 0xaa, 0x0d, 0x8e, 0xb8, 0x27, 0x4e, 0x57, 0xc9, 0xdf, - 0x37, 0x21, 0x32, 0x8b, 0xf5, 0x9e, 0x54, 0xcc, 0x9f, 0x4e, 0x22, - 0xb2, 0x06, 0xc5, 0x9f, 0x88, 0xd0, 0x76, 0xcd, 0x9c, 0x5c, 0x81, - 0x1f, 0x17, 0xce, 0x00, 0x7f, 0xf3, 0x4d, 0xc5, 0xa8, 0x7c, 0xdb, - 0xa8, 0x63, 0x28, 0x39, 0xe9, 0x12, 0xcf, 0xe7, 0x0c, 0x53, 0xbd, - 0x1c, 0xb7, 0x9b, 0xc2, 0x99, 0x74, 0xd0, 0x0d, 0xe8, 0x2c, 0xde, - 0x24, 0xe0, 0x5f, 0xac, 0x6b, 0x0d, 0x22, 0x64, 0xec, 0x71, 0xbe, - 0x1a, 0xf8, 0x1d, 0xa3, 0x05, 0xa6, 0x26, 0xe0, 0x8f, 0xc8, 0xd6, - 0x9a, 0xdc, 0xd6, 0x4b, 0x47, 0xfc, 0x7c, 0x06, 0x35, 0x66, 0x2d, - 0x7f, 0x58, 0xa5, 0x8b, 0x9e, 0xcf, 0xa3, 0x77, 0xe5, 0x32, 0xcd, - 0x45, 0x68, 0x0f, 0x70, 0x23, 0x20, 0x25, 0x8f, 0x2f, 0xc9, 0xc2, - 0xe3, 0x7f, 0xfc, 0x6b, 0x17, 0x05, 0xfc, 0x4b, 0x91, 0x92, 0xae, - 0xfa, 0xf8, 0xb9, 0xa0, 0xa4, 0x7d, 0x25, 0xfc, 0x8f, 0xc5, 0xe8, - 0x6a, 0x31, 0x5f, 0x90, 0x16, 0xa3, 0x96, 0x9d, 0x06, 0x14, 0xa0, - 0x0c, 0x9d, 0x62, 0xb2, 0xc9, 0x0e, 0xc4, 0x6f, 0x13, 0xaa, 0xd4, - 0x94, 0x50, 0x50, 0x0d, 0xfc, 0xe8, 0x64, 0x1c, 0x3c, 0x36, 0x24, - 0x03, 0xa1, 0xdf, 0x4a, 0x17, 0xc1, 0x04, 0xd9, 0xf4, 0x52, 0xae, - 0x3c, 0xf7, 0x56, 0x85, 0xd0, 0x6d, 0xbc, 0x53, 0xd5, 0x05, 0xa8, - 0x1b, 0x4a, 0x0a, 0x15, 0x8c, 0x7c, 0xfa, 0xae, 0xcd, 0x2e, 0xc3, - 0xe3, 0xbf, 0xbd, 0xc8, 0x29, 0xe0, 0xb7, 0xea, 0x1b, 0x54, 0xf5, - 0xf0, 0x73, 0xa6, 0x90, 0x69, 0x17, 0x9c, 0xb8, 0x94, 0xc5, 0x3b, - 0x12, 0x34, 0x93, 0x77, 0x93, 0x85, 0x2f, 0x4b, 0xe4, 0xb4, 0x21, - 0xe1, 0x96, 0x5c, 0xf6, 0x90, 0x23, 0x0f, 0xc7, 0x5f, 0x91, 0x57, - 0x71, 0x32, 0xa5, 0x7b, 0x44, 0x42, 0x46, 0x29, 0x72, 0x65, 0x5e, - 0xba, 0xf9, 0xde, 0x0b, 0x11, 0xb1, 0x93, 0xcf, 0xf2, 0xe8, 0x10, - 0x5b, 0xaf, 0x80, 0xa7, 0x5e, 0xc5, 0xe3, 0xcd, 0xca, 0xdf, 0x33, - 0xf1, 0xe3, 0x26, 0xd4, 0x6d, 0xfa, 0xba, 0xc3, 0xd9, 0xd9, 0xdf, - 0x39, 0xfe, 0x28, 0x7e, 0x3c, 0x61, 0x5e, 0x8a, 0xa7, 0xc7, 0x28, - 0xe7, 0x45, 0x1f, 0xcd, 0x03, 0xfc, 0xb7, 0xa2, 0xfc, 0x58, 0x6d, - 0x01, 0xcd, 0x6f, 0x21, 0x85, 0xde, 0xa0, 0x1a, 0xfd, 0xbf, 0x7d, - 0xd2, 0xea, 0x3b, 0x55, 0x76, 0x18, 0x41, 0xd0, 0xd7, 0xcf, 0xf4, - 0x3b, 0x59, 0x75, 0xf7, 0xc6, 0x6d, 0x17, 0xe6, 0xb6, 0xc1, 0xa4, - 0xd2, 0x84, 0xbb, 0x80, 0x5c, 0x85, 0x2e, 0x6e, 0x42, 0x05, 0x59, - 0xbc, 0x10, 0x03, 0x7e, 0xf7, 0x46, 0x59, 0xd5, 0x8b, 0x67, 0xdf, - 0xc1, 0xdd, 0x8f, 0x0b, 0xf8, 0x67, 0x21, 0xb4, 0x5e, 0xa3, 0x40, - 0xa8, 0x26, 0x7e, 0x73, 0xe4, 0x7a, 0x22, 0x4c, 0x3e, 0xf8, 0x66, - 0x4e, 0x73, 0xf5, 0x03, 0x30, 0xf9, 0x91, 0x10, 0x4e, 0x13, 0x1a, - 0x6f, 0x53, 0x68, 0xd0, 0xab, 0x85, 0x3f, 0xa1, 0xd1, 0x98, 0x9d, - 0x76, 0x1e, 0xf1, 0xc5, 0x5b, 0xa2, 0xf0, 0xcb, 0xde, 0xbb, 0x82, - 0xc5, 0x89, 0xca, 0x6f, 0x52, 0x8c, 0x14, 0xfe, 0x01, 0x69, 0xbc, - 0x6b, 0xbf, 0xdc, 0x05, 0x60, 0xc9, 0x6c, 0x97, 0xbc, 0xa0, 0x9a, - 0x81, 0x1e, 0xcc, 0x53, 0x93, 0xd3, 0xfe, 0x6f, 0x80, 0x4b, 0x57, - 0x56, 0x36, 0xfe, 0xb9, 0x1a, 0xfc, 0xc1, 0xd3, 0xcf, 0xbb, 0xf8, - 0xbc, 0x22, 0xf4, 0x5d, 0x11, 0x72, 0xec, 0xee, 0xab, 0x6a, 0x02, - 0x98, 0xfc, 0x7a, 0xba, 0x55, 0x0e, 0x44, 0x91, 0x15, 0x94, 0xa9, - 0x68, 0x69, 0x0f, 0xc7, 0x1f, 0x0b, 0x7a, 0x6f, 0x53, 0xc8, 0xd0, - 0xf9, 0x96, 0xf9, 0xa3, 0x88, 0x50, 0xee, 0x1f, 0x97, 0x62, 0xb1, - 0x24, 0xc7, 0x18, 0xab, 0x09, 0xbb, 0x9f, 0xc6, 0x72, 0xae, 0xc4, - 0x9d, 0x56, 0x47, 0x15, 0xe3, 0x5a, 0xf3, 0x0b, 0xc8, 0xae, 0xe9, - 0x36, 0x28, 0xfe, 0x36, 0xb9, 0x8a, 0x71, 0xd2, 0x1d, 0xfe, 0x74, - 0x35, 0x7e, 0x77, 0xfd, 0x3f, 0x90, 0x2b, 0x43, 0xca, 0x23, 0xe0, - 0xaf, 0x79, 0x30, 0x8d, 0x2c, 0x40, 0x8e, 0x14, 0xca, 0x1f, 0x6f, - 0x8b, 0x53, 0x25, 0xff, 0xec, 0x14, 0x17, 0xa3, 0xe9, 0x37, 0x11, - 0x93, 0x23, 0xe8, 0x00, 0x7d, 0xac, 0x4e, 0x85, 0xfc, 0x63, 0x36, - 0x19, 0xe2, 0xbf, 0xd0, 0x9c, 0xe4, 0xf8, 0x65, 0x3c, 0x7c, 0xfc, - 0xf7, 0x4d, 0x47, 0x4e, 0x69, 0x46, 0x76, 0xaa, 0x8a, 0x9f, 0x08, - 0x99, 0x81, 0xdb, 0x15, 0x23, 0x0d, 0xc5, 0xef, 0x1b, 0x14, 0x34, - 0x06, 0xbf, 0x0d, 0x34, 0xb3, 0x8f, 0x3c, 0xfd, 0x96, 0x56, 0x4a, - 0x56, 0xe6, 0x22, 0x94, 0x2f, 0xa9, 0xd1, 0xb1, 0xac, 0x93, 0x37, - 0x91, 0x30, 0xa0, 0xee, 0x98, 0x5c, 0x74, 0x33, 0x5e, 0xc8, 0x1f, - 0x3b, 0x46, 0xe8, 0xab, 0x03, 0xd6, 0x3a, 0xf9, 0xb5, 0x44, 0x0f, - 0x10, 0x79, 0x02, 0x15, 0x08, 0x74, 0x9c, 0x77, 0xcc, 0x6b, 0x0d, - 0x0d, 0xf1, 0x57, 0xcd, 0x01, 0x2e, 0x99, 0xfa, 0xe4, 0x0a, 0x8b, - 0x1f, 0x6e, 0xe5, 0xbf, 0x14, 0xe7, 0xaf, 0x0b, 0x82, 0x45, 0x8d, - 0xf3, 0x84, 0x8a, 0xbb, 0x2f, 0x90, 0x87, 0x2f, 0x44, 0xb2, 0x44, - 0x42, 0xf1, 0x8f, 0xb2, 0xd9, 0x2e, 0x56, 0xa1, 0x22, 0xe0, 0xd3, - 0xe6, 0x4e, 0x8f, 0x88, 0xdf, 0xa2, 0x6a, 0x6b, 0x92, 0x30, 0x83, - 0x9b, 0x03, 0x6f, 0x5f, 0xd9, 0x27, 0x24, 0xa8, 0xeb, 0xe2, 0x3c, - 0xbe, 0xf8, 0x6d, 0xa1, 0x7e, 0x9a, 0x64, 0xde, 0x4c, 0x1b, 0x11, - 0x11, 0x14, 0x14, 0x6e, 0xc5, 0x02, 0x53, 0x3c, 0xa5, 0x43, 0x05, - 0x2b, 0x7b, 0x06, 0x05, 0x85, 0xc4, 0x59, 0x72, 0x4e, 0xb4, 0x37, - 0xc2, 0xef, 0x28, 0xca, 0x9f, 0x17, 0x11, 0x14, 0x36, 0xf2, 0x80, - 0x4b, 0x5c, 0xfc, 0xa8, 0xe3, 0x2f, 0xcb, 0xff, 0xde, 0xf5, 0xd5, - 0x9d, 0x72, 0xdc, 0x35, 0xb4, 0x4f, 0x1c, 0xa6, 0xfc, 0x3f, 0x40, - 0x67, 0x9a, 0x90, 0x3b, 0x3c, 0xfe, 0x49, 0xba, 0x7a, 0x3a, 0xfe, - 0x29, 0xca, 0x4e, 0x67, 0xe3, 0x34, 0x84, 0x26, 0xe2, 0xcf, 0x3d, - 0x5c, 0xfd, 0xdc, 0x30, 0x9d, 0x7e, 0x87, 0x23, 0x3c, 0x54, 0x5a, - 0x91, 0x48, 0xc2, 0x5c, 0xdd, 0xc4, 0x1c, 0xde, 0x95, 0x7f, 0xc4, - 0x96, 0xe3, 0xe4, 0xf3, 0x68, 0xaf, 0x19, 0xfa, 0x99, 0x8b, 0xbf, - 0x97, 0x6d, 0xb3, 0xe1, 0x09, 0x7f, 0xc1, 0xc4, 0xba, 0x0a, 0xba, - 0xef, 0x6d, 0xb6, 0x23, 0xd7, 0x9c, 0xfc, 0xe9, 0x1e, 0x46, 0xf8, - 0x2f, 0xa7, 0x9e, 0xbb, 0x9b, 0x6d, 0xcb, 0xba, 0xcd, 0x23, 0x47, - 0xaa, 0xdc, 0x52, 0x0d, 0xe6, 0x7f, 0x58, 0xfe, 0x2b, 0x79, 0x87, - 0xb4, 0x29, 0x53, 0x42, 0xbe, 0x4b, 0x9c, 0x21, 0x83, 0xfc, 0x43, - 0x17, 0x6b, 0x06, 0x88, 0xf2, 0x0f, 0x6e, 0xbb, 0x5b, 0x4b, 0xd1, - 0x55, 0xb2, 0xcc, 0xa7, 0x1e, 0xd7, 0xeb, 0x2c, 0xc5, 0x03, 0x5f, - 0xe5, 0xde, 0x8e, 0xaa, 0xcc, 0x04, 0xb5, 0x7e, 0x47, 0x08, 0xf2, - 0x4a, 0xb9, 0x7a, 0xfe, 0x8f, 0x65, 0x9d, 0xcd, 0x30, 0x3e, 0xe3, - 0xee, 0x79, 0x10, 0x9d, 0x82, 0x9a, 0xa3, 0x96, 0xe3, 0x19, 0x18, - 0x0e, 0x95, 0x27, 0x93, 0xfc, 0x64, 0xba, 0xdd, 0x84, 0x0e, 0x13, - 0x26, 0xd4, 0x33, 0xc2, 0x9f, 0xdd, 0x25, 0x6a, 0x93, 0x03, 0x88, - 0xee, 0xaf, 0x56, 0x14, 0x14, 0x4f, 0x15, 0x17, 0x31, 0xf0, 0x83, - 0x34, 0x52, 0x34, 0xad, 0x11, 0xbc, 0xef, 0xc0, 0x83, 0x6f, 0xa9, - 0xb6, 0x78, 0x74, 0x25, 0xba, 0x39, 0x86, 0xb4, 0xc3, 0x3a, 0x6b, - 0x1e, 0x2a, 0xff, 0x06, 0xd9, 0x1c, 0xdf, 0x65, 0xdf, 0xe1, 0xf7, - 0xb6, 0x7e, 0x28, 0x7e, 0x37, 0xc1, 0x37, 0x6e, 0x96, 0xd5, 0xba, - 0xa0, 0xbf, 0x72, 0xc8, 0xac, 0x15, 0x3a, 0x64, 0x81, 0xd5, 0xba, - 0x68, 0x50, 0xb0, 0xb2, 0x65, 0x05, 0xc4, 0xa5, 0xe2, 0x61, 0x6a, - 0x7a, 0x6f, 0x81, 0x30, 0xcc, 0x62, 0x1d, 0x2f, 0x4e, 0x59, 0xc3, - 0x16, 0x58, 0x17, 0x3c, 0x85, 0x59, 0x3c, 0xde, 0x3a, 0xe3, 0x29, - 0x2e, 0xa0, 0xf7, 0x74, 0xab, 0x75, 0x56, 0x9c, 0xb2, 0x01, 0xfa, - 0x8d, 0x5d, 0xc4, 0x34, 0xf3, 0x00, 0x69, 0xa4, 0xec, 0xab, 0x85, - 0x29, 0x1f, 0xe4, 0xf3, 0x95, 0xd3, 0x69, 0xd7, 0xd8, 0x78, 0x97, - 0x0b, 0xdd, 0x7c, 0xa7, 0xad, 0x99, 0x7b, 0x7a, 0xde, 0x4d, 0xf4, - 0x30, 0xfc, 0xfe, 0x13, 0x93, 0x7a, 0x44, 0xcc, 0xbc, 0x59, 0x91, - 0xac, 0x2c, 0x67, 0x4d, 0xf1, 0xff, 0xdf, 0x85, 0x80, 0x94, 0x6f, - 0x1e, 0x90, 0x36, 0x55, 0xbc, 0x4e, 0x5e, 0x1e, 0xe8, 0x7a, 0x00, - 0x7f, 0x3d, 0x27, 0xd6, 0x59, 0x0f, 0xfc, 0x72, 0xe9, 0xc7, 0x6a, - 0x8d, 0x7f, 0xbe, 0x6b, 0x78, 0x95, 0x8d, 0xe5, 0x43, 0xf0, 0xfb, - 0x34, 0x0d, 0x6e, 0xaa, 0x95, 0x45, 0xff, 0xaf, 0x82, 0xb9, 0xc3, - 0xa2, 0xa3, 0xf9, 0x37, 0x2e, 0x6f, 0x1a, 0xa2, 0x34, 0x10, 0xe9, - 0xb8, 0x85, 0x48, 0x8c, 0x45, 0x5b, 0x06, 0x56, 0x73, 0xfc, 0x1f, - 0x7a, 0x5b, 0xb5, 0xbc, 0xf9, 0x10, 0xfc, 0x9d, 0x3e, 0xb1, 0x7d, - 0xf2, 0xa8, 0xa3, 0x88, 0xe7, 0x43, 0x9d, 0x36, 0xbd, 0xe3, 0x7b, - 0x06, 0xaa, 0x95, 0xef, 0x21, 0x63, 0xd3, 0x6d, 0xb6, 0xf5, 0xa3, - 0x43, 0x1a, 0x2d, 0xb4, 0x6d, 0x16, 0x15, 0x51, 0xb8, 0xd0, 0xa9, - 0x86, 0xcf, 0x08, 0xd9, 0xa7, 0xb2, 0xb1, 0x7c, 0x08, 0xfe, 0x78, - 0x85, 0xa2, 0xc8, 0x5d, 0x30, 0xb5, 0x0d, 0x67, 0x4d, 0x22, 0x40, - 0xcb, 0xad, 0xff, 0x9a, 0x7d, 0x42, 0x7a, 0xc6, 0xc7, 0xc7, 0xc7, - 0x86, 0xe8, 0x56, 0x19, 0x15, 0xcf, 0x6b, 0x10, 0x81, 0x29, 0x5a, - 0x54, 0xcb, 0x1a, 0xda, 0x97, 0x2c, 0x28, 0x99, 0x1a, 0x04, 0x05, - 0x8a, 0x2d, 0xd5, 0xbb, 0x71, 0x90, 0xf1, 0x0a, 0xbe, 0x69, 0x8e, - 0xf3, 0xac, 0x62, 0x5a, 0x2f, 0xe2, 0xaf, 0xc3, 0x5c, 0xc2, 0xa8, - 0x3e, 0xfe, 0x06, 0x1f, 0xee, 0x62, 0xd9, 0x5a, 0x82, 0x96, 0xdb, - 0xa2, 0x79, 0x7f, 0xd0, 0xe8, 0x35, 0x47, 0xae, 0xda, 0xed, 0xf6, - 0xfc, 0x23, 0xb8, 0xd6, 0x0c, 0x66, 0x5e, 0xa1, 0x49, 0xdb, 0xb3, - 0x31, 0xc5, 0xc1, 0x79, 0x9d, 0x3d, 0xbf, 0x82, 0x32, 0xe8, 0x76, - 0xd9, 0x24, 0xf9, 0xb5, 0x80, 0x3f, 0x38, 0x3c, 0x65, 0xbd, 0xcd, - 0xa6, 0x5d, 0x2e, 0x21, 0xa1, 0xba, 0xf8, 0x83, 0x6c, 0xd9, 0x2c, - 0x5b, 0x5b, 0x90, 0xf2, 0xd4, 0xa3, 0x79, 0xdd, 0x41, 0x3b, 0x8a, - 0x41, 0x63, 0x67, 0xb7, 0xe3, 0xc1, 0xb8, 0x38, 0x73, 0x10, 0x6b, - 0xf2, 0x61, 0xee, 0x77, 0xa8, 0x44, 0x90, 0x60, 0xaa, 0x2e, 0x24, - 0xaa, 0x09, 0x7c, 0x0d, 0xea, 0xa9, 0x06, 0x01, 0xd4, 0x58, 0x72, - 0x8b, 0xc7, 0xf8, 0xb3, 0xe6, 0x9c, 0x70, 0x92, 0xb5, 0x8a, 0x4c, - 0xfd, 0xe2, 0xe2, 0x1f, 0xc4, 0x1f, 0xb8, 0x47, 0x83, 0xdf, 0x34, - 0x32, 0x8f, 0xaf, 0xc8, 0x5a, 0x9e, 0x88, 0xdb, 0xff, 0xb8, 0xe5, - 0x87, 0x2a, 0xf8, 0x3c, 0x86, 0x8d, 0x8a, 0x79, 0xe4, 0x25, 0xe4, - 0xcc, 0x49, 0xb7, 0x58, 0xd6, 0x7f, 0xef, 0x92, 0x65, 0x2a, 0xf8, - 0x43, 0xbb, 0x09, 0xe9, 0x50, 0x4f, 0xa1, 0x74, 0x4d, 0xa9, 0xa3, - 0xd2, 0x76, 0xb5, 0x13, 0x34, 0x95, 0x30, 0x8d, 0x41, 0x6b, 0x73, - 0xdd, 0xd3, 0xeb, 0xac, 0xa9, 0xfa, 0xf5, 0x8a, 0x3c, 0x3d, 0xc3, - 0xf8, 0x7f, 0x29, 0xbe, 0x95, 0x69, 0x4d, 0x3f, 0xe3, 0x40, 0xfc, - 0x81, 0x8e, 0x5a, 0x6a, 0x25, 0xfe, 0xae, 0x29, 0x0c, 0xc3, 0x00, - 0xf7, 0xf8, 0x7d, 0xd6, 0x20, 0xb4, 0x53, 0x69, 0xb4, 0xd0, 0xfa, - 0x20, 0xaa, 0x5c, 0xd5, 0x51, 0xf8, 0xac, 0xcd, 0x61, 0xab, 0x8a, - 0xd1, 0xc1, 0xd6, 0xba, 0x1f, 0x75, 0xf8, 0x06, 0xdd, 0xdf, 0x14, - 0x83, 0xc5, 0x26, 0xdf, 0xe7, 0xf7, 0xbb, 0x50, 0xfe, 0x20, 0x09, - 0x7e, 0xff, 0xaf, 0xca, 0xc8, 0xf8, 0xf7, 0x85, 0x38, 0x0b, 0x6d, - 0xfc, 0xa1, 0xd2, 0x0e, 0xe1, 0x13, 0x18, 0x15, 0x17, 0x68, 0x8c, - 0x13, 0x5e, 0xd7, 0x3d, 0xbd, 0xcd, 0xa9, 0xbb, 0xb9, 0x15, 0x6f, - 0xd5, 0x52, 0xe0, 0x47, 0xf9, 0x13, 0x9b, 0x70, 0xb5, 0xc3, 0xdf, - 0xb9, 0x89, 0x5c, 0x1b, 0x1a, 0x6b, 0xa8, 0xe3, 0xd5, 0x8a, 0x72, - 0xc3, 0xae, 0xd2, 0x00, 0xbf, 0x64, 0x17, 0x42, 0xc3, 0x84, 0x8a, - 0xaa, 0x0c, 0xf9, 0x1d, 0x8d, 0xad, 0x55, 0x15, 0x13, 0x74, 0xbf, - 0xe9, 0x79, 0xb3, 0x72, 0x69, 0x73, 0xe1, 0x16, 0x86, 0xf7, 0x2d, - 0xa2, 0xac, 0x65, 0xea, 0x77, 0x16, 0x7f, 0x10, 0x76, 0x7b, 0x15, - 0x42, 0xfb, 0x05, 0x06, 0xc0, 0xfc, 0x57, 0xb3, 0x4c, 0x69, 0xd5, - 0x58, 0xc0, 0xa7, 0x68, 0x1f, 0x5e, 0x2b, 0xb9, 0xe2, 0xc2, 0xa7, - 0xfc, 0x19, 0xa9, 0xb0, 0x18, 0xbf, 0xa8, 0xe4, 0x82, 0xa5, 0x09, - 0xfb, 0x68, 0xb8, 0xc3, 0xb2, 0x19, 0x0d, 0x9f, 0x97, 0xa1, 0xb2, - 0xcf, 0xad, 0x56, 0x4b, 0xd8, 0x23, 0xe2, 0x9f, 0xc7, 0xa3, 0xef, - 0x7a, 0x28, 0xd2, 0x16, 0xf5, 0x22, 0x3d, 0x96, 0x8b, 0x2d, 0xf0, - 0xea, 0x4e, 0xf1, 0x0a, 0xc6, 0xd7, 0x5e, 0xf5, 0xa9, 0xd4, 0x64, - 0x06, 0xd9, 0xa5, 0x1f, 0x44, 0x9e, 0x43, 0x2e, 0x5b, 0x52, 0xf7, - 0xee, 0x49, 0xc7, 0x1e, 0xd0, 0xf9, 0xd2, 0x80, 0x14, 0x1c, 0x0e, - 0x20, 0x74, 0x02, 0x62, 0xd2, 0x36, 0x67, 0x3b, 0x30, 0x8b, 0xdc, - 0xd5, 0x7f, 0xd0, 0x2e, 0xb4, 0x7d, 0xea, 0x3d, 0xc7, 0x30, 0x05, - 0xfe, 0x2c, 0x71, 0x84, 0xc2, 0x53, 0x0c, 0x7e, 0x77, 0x00, 0xa7, - 0x57, 0x36, 0x88, 0x33, 0x29, 0x0b, 0x2a, 0xdb, 0x1c, 0xa8, 0x7d, - 0xde, 0x43, 0xf0, 0xe3, 0xce, 0xc6, 0xa1, 0x34, 0x50, 0x4c, 0x71, - 0xde, 0x53, 0xa8, 0x31, 0x4d, 0x93, 0xca, 0x88, 0xee, 0xd9, 0x3c, - 0xfb, 0xdb, 0x97, 0x14, 0x44, 0x6d, 0x65, 0x89, 0xa3, 0xd5, 0x51, - 0xaa, 0xa8, 0xf7, 0x5f, 0xed, 0x74, 0x6d, 0xeb, 0x48, 0x54, 0xdd, - 0x07, 0x78, 0x7e, 0xbd, 0xac, 0x98, 0xb5, 0x28, 0xbb, 0x98, 0xd0, - 0x75, 0xe5, 0xc5, 0xcb, 0x06, 0xb8, 0xf9, 0xfe, 0x87, 0x15, 0xf0, - 0x96, 0xc8, 0x6c, 0x94, 0x46, 0xa7, 0x2a, 0xca, 0xf1, 0x1f, 0x4f, - 0xa1, 0x1c, 0xbd, 0x39, 0xa1, 0xd7, 0xca, 0x15, 0xe6, 0x7e, 0xc7, - 0x8a, 0xc8, 0x4a, 0x30, 0x99, 0x49, 0x27, 0x96, 0x1d, 0x8f, 0x33, - 0x1a, 0x8e, 0x8c, 0xf0, 0xf7, 0xbc, 0x2a, 0xab, 0xb9, 0x20, 0xc4, - 0x5d, 0xe3, 0x77, 0x4b, 0x6d, 0xc8, 0x27, 0xee, 0x88, 0x38, 0x7f, - 0x1d, 0x6a, 0x5f, 0xc6, 0x7e, 0xb2, 0x37, 0x6e, 0xd0, 0xdb, 0x1b, - 0x0a, 0xbf, 0x44, 0xe7, 0xdb, 0x92, 0x3c, 0x53, 0x54, 0x3e, 0x2a, - 0x96, 0x99, 0xaa, 0xc2, 0xcf, 0x85, 0xac, 0x2b, 0x3d, 0xee, 0xc6, - 0xec, 0xd1, 0x2f, 0x8d, 0xbf, 0x3d, 0xb4, 0xc1, 0x76, 0xd9, 0xc4, - 0x4c, 0x89, 0x3f, 0x70, 0x17, 0x42, 0x50, 0x3b, 0xde, 0xa9, 0xe5, - 0xe8, 0xcb, 0x9e, 0x44, 0xd5, 0xd0, 0x09, 0x4b, 0x95, 0x63, 0x44, - 0x4d, 0x4a, 0xf8, 0x59, 0xd5, 0xa7, 0xac, 0x0a, 0x46, 0xf8, 0x9b, - 0xed, 0x97, 0xd5, 0x5c, 0x10, 0xfc, 0x57, 0x94, 0x3b, 0x3e, 0x1a, - 0x2a, 0xd4, 0x4d, 0xf2, 0x9a, 0xef, 0x9d, 0xa2, 0x95, 0x5a, 0x58, - 0x96, 0x76, 0xdf, 0x87, 0x02, 0x1d, 0x99, 0x39, 0x62, 0xb1, 0xc5, - 0xb9, 0x58, 0xc4, 0x65, 0xfe, 0x00, 0x29, 0xac, 0x3e, 0xd5, 0xf8, - 0x09, 0x03, 0xfa, 0x19, 0x32, 0x60, 0xc8, 0x75, 0x74, 0xb4, 0x95, - 0x69, 0x4e, 0x15, 0x9d, 0x41, 0xab, 0xf0, 0x9b, 0xde, 0x45, 0xc2, - 0xda, 0x73, 0x6b, 0x1b, 0x72, 0x08, 0x3d, 0x07, 0xee, 0x62, 0xa4, - 0xfe, 0xcf, 0x7b, 0xd9, 0x9d, 0x11, 0x9c, 0x41, 0x30, 0xc2, 0x0f, - 0xf5, 0x27, 0x2a, 0x2b, 0xc4, 0xe2, 0xa5, 0x57, 0xb9, 0xee, 0x0a, - 0x9b, 0x4d, 0x70, 0x47, 0x56, 0xf2, 0xbe, 0xa0, 0x43, 0xf3, 0x4d, - 0xd7, 0x9a, 0xf1, 0x2a, 0xd0, 0x11, 0xfc, 0xb8, 0xce, 0xae, 0x49, - 0xba, 0xe8, 0x84, 0x5b, 0xd2, 0x47, 0xab, 0xc3, 0x0f, 0x0c, 0xb8, - 0xd4, 0xcf, 0x40, 0x70, 0x34, 0x6f, 0x42, 0x20, 0xfd, 0xc6, 0x5d, - 0xa1, 0xba, 0x37, 0xb5, 0xfc, 0x4b, 0x1f, 0x65, 0xc2, 0x5d, 0xa1, - 0xd0, 0xd8, 0x94, 0xf8, 0x8d, 0x5b, 0xa9, 0x31, 0x7e, 0xfc, 0xd1, - 0x20, 0x41, 0x59, 0x45, 0xc3, 0xd8, 0x12, 0x54, 0x2a, 0xe0, 0xcf, - 0xb1, 0xad, 0x1f, 0x2b, 0x7e, 0xc6, 0xa1, 0x1b, 0x5c, 0x5a, 0x33, - 0x5e, 0x21, 0x40, 0x95, 0x90, 0xf6, 0x1f, 0x91, 0x8d, 0x8e, 0x48, - 0x5a, 0x02, 0x9c, 0x28, 0xe8, 0xad, 0x2d, 0xb4, 0x14, 0x42, 0xd6, - 0x39, 0x2e, 0x8d, 0x64, 0x33, 0xa0, 0xc3, 0x55, 0xd2, 0x9d, 0x06, - 0xed, 0x40, 0x95, 0xa3, 0x85, 0x1c, 0x26, 0x7e, 0x2e, 0xe0, 0x43, - 0xf4, 0x60, 0x11, 0xf4, 0xa7, 0x2a, 0xfc, 0x6d, 0x4e, 0x1d, 0x6c, - 0xc1, 0x7c, 0xac, 0x1b, 0xfc, 0x9d, 0x73, 0xd0, 0x83, 0xd9, 0x8a, - 0xc2, 0xd4, 0x59, 0xf3, 0xe0, 0x9b, 0xa9, 0x09, 0x24, 0xf4, 0x0c, - 0x96, 0x20, 0xa7, 0xdc, 0xe5, 0xd9, 0x43, 0x8b, 0xff, 0x56, 0x84, - 0x96, 0xc0, 0x60, 0x8d, 0x47, 0x0a, 0x79, 0xf1, 0x11, 0xe3, 0x97, - 0x75, 0x5b, 0x3a, 0xfc, 0x5c, 0x68, 0x9a, 0xeb, 0x6a, 0x7f, 0x16, - 0x03, 0xcc, 0xb3, 0x1f, 0x90, 0x1d, 0x86, 0xa6, 0xc9, 0x2e, 0xba, - 0xf7, 0x44, 0x89, 0xbf, 0xce, 0x7a, 0x44, 0x75, 0x2f, 0xe1, 0xdf, - 0xa3, 0xab, 0x7d, 0x38, 0x0d, 0x7e, 0x9f, 0x1e, 0xbd, 0x9f, 0x54, - 0x3c, 0x2d, 0x7c, 0x62, 0x8a, 0x14, 0x2c, 0x57, 0x7f, 0x5e, 0x28, - 0xa7, 0x26, 0xb6, 0x95, 0x88, 0x40, 0x02, 0xda, 0xa3, 0xe0, 0x1a, - 0x1e, 0x5b, 0xc6, 0xeb, 0x0b, 0xa6, 0x19, 0x5a, 0xc7, 0x65, 0x5a, - 0x45, 0xb1, 0xa8, 0xc7, 0x15, 0x71, 0xfc, 0x1b, 0x57, 0x2a, 0xf0, - 0xa1, 0x3a, 0xf8, 0xb9, 0xc6, 0x69, 0x95, 0x57, 0x59, 0x2d, 0x20, - 0xf4, 0x0b, 0xf4, 0x80, 0x98, 0x67, 0x77, 0xbb, 0x81, 0x2e, 0xf5, - 0xd4, 0xe1, 0x6f, 0x73, 0x0a, 0x21, 0xfa, 0x19, 0x2e, 0x72, 0xb9, - 0x36, 0x04, 0x68, 0xf0, 0x6b, 0x42, 0x6a, 0x95, 0x76, 0x98, 0xa4, - 0x41, 0xb9, 0x87, 0x65, 0xdc, 0x7d, 0x74, 0xad, 0xaf, 0x0a, 0x7f, - 0x42, 0xed, 0xf0, 0x81, 0x09, 0xbd, 0x83, 0x6a, 0x29, 0x1e, 0xa5, - 0xc1, 0x6f, 0x45, 0x15, 0x7f, 0x15, 0x36, 0xb8, 0xcc, 0xab, 0x10, - 0xcd, 0x0b, 0x2c, 0xa8, 0x06, 0xf8, 0xb9, 0x96, 0x69, 0xae, 0x5c, - 0x59, 0x1b, 0x27, 0x85, 0xb1, 0xc5, 0x28, 0x9f, 0x8c, 0x37, 0x7e, - 0xfb, 0x51, 0x95, 0xb0, 0x13, 0x4f, 0x89, 0x7f, 0xe8, 0x6d, 0x74, - 0xab, 0x9b, 0x78, 0x1f, 0x79, 0x92, 0x0c, 0x4d, 0xee, 0xf0, 0xf7, - 0x98, 0x2f, 0xdb, 0xc8, 0xbd, 0x97, 0x7f, 0xcb, 0x2a, 0xa7, 0xe6, - 0x2b, 0x54, 0x06, 0xe1, 0x27, 0x50, 0x95, 0x45, 0xee, 0x36, 0x70, - 0x3f, 0xb6, 0x66, 0xde, 0xa9, 0x02, 0xfb, 0xd5, 0x6d, 0xc3, 0x15, - 0xe5, 0x8b, 0x55, 0x6b, 0x61, 0x71, 0xa7, 0x59, 0x30, 0x0b, 0xcf, - 0xc6, 0x02, 0x5e, 0xcd, 0x41, 0xa2, 0x15, 0xbb, 0x85, 0x8e, 0x83, - 0x10, 0x5e, 0xc8, 0x17, 0x0d, 0xa7, 0x8d, 0xf0, 0x73, 0xa1, 0xdb, - 0xca, 0x95, 0x33, 0x07, 0x21, 0xf8, 0x67, 0x20, 0xb4, 0x49, 0xf8, - 0x88, 0x52, 0x1c, 0x68, 0x5f, 0x88, 0x88, 0xff, 0x4c, 0x07, 0xe1, - 0xcf, 0x21, 0xdb, 0x78, 0x7e, 0x07, 0x5d, 0xd2, 0x33, 0x8f, 0x76, - 0x80, 0x6a, 0xd5, 0x1d, 0x7e, 0x65, 0x30, 0xfc, 0xfe, 0x39, 0x6f, - 0xfc, 0x2a, 0xc5, 0x84, 0xdb, 0x34, 0xdd, 0x51, 0x51, 0xc1, 0xdf, - 0xb3, 0x97, 0xf1, 0xf6, 0x39, 0x86, 0x1b, 0x6d, 0xac, 0xc4, 0x72, - 0xec, 0x5d, 0xcb, 0x16, 0x3b, 0x5f, 0x28, 0x1a, 0x61, 0x60, 0x94, - 0x39, 0x92, 0x59, 0x78, 0xaa, 0x0b, 0xed, 0x97, 0xb6, 0xbd, 0x30, - 0xf1, 0xc3, 0xea, 0xb5, 0xce, 0xfe, 0x1f, 0x8b, 0x10, 0xb7, 0x86, - 0x0b, 0x79, 0x6d, 0x4f, 0x88, 0x2b, 0xc7, 0x18, 0xbf, 0x68, 0x41, - 0xd0, 0x7a, 0x5d, 0x39, 0x2a, 0x90, 0xe4, 0x42, 0x2e, 0x60, 0x13, - 0x6c, 0x84, 0x50, 0xe2, 0xa7, 0x95, 0x14, 0xcb, 0x50, 0x99, 0x1b, - 0xe3, 0xe7, 0x9a, 0xef, 0x46, 0xca, 0x09, 0xf7, 0x9f, 0x7f, 0x44, - 0x8e, 0xb4, 0x11, 0xf1, 0x93, 0x4e, 0x4b, 0x2b, 0x08, 0x2c, 0xfc, - 0x65, 0xa7, 0x0a, 0x78, 0x32, 0xff, 0x7d, 0xd3, 0x5f, 0x42, 0xe9, - 0xb4, 0x8a, 0xfa, 0x8d, 0xe6, 0x59, 0xca, 0x26, 0xc5, 0xc6, 0x0f, - 0x6b, 0x77, 0x1a, 0x63, 0x59, 0xd8, 0x5a, 0xb0, 0x43, 0x1c, 0x8b, - 0x61, 0xef, 0x05, 0x59, 0xac, 0xc1, 0xf8, 0x7f, 0xff, 0xc5, 0x36, - 0x67, 0x70, 0x7c, 0xb2, 0xad, 0x1c, 0x49, 0xa6, 0xb6, 0x10, 0x7a, - 0x5e, 0xc0, 0x0d, 0x40, 0x89, 0x9f, 0x7e, 0xa4, 0xac, 0x79, 0x80, - 0x1b, 0xfc, 0x60, 0xa4, 0xb1, 0x4f, 0x5a, 0x0f, 0xf5, 0xb6, 0x54, - 0x39, 0xac, 0x01, 0x20, 0xc5, 0x1e, 0x43, 0xf9, 0x3a, 0x0b, 0x2b, - 0x09, 0xbf, 0x7d, 0xf4, 0x80, 0x65, 0x7b, 0x6c, 0x5b, 0x93, 0x25, - 0xfd, 0x07, 0x2c, 0x6b, 0x5c, 0x1f, 0x42, 0xa6, 0x9f, 0xb0, 0xf6, - 0x96, 0xd5, 0x59, 0x22, 0x36, 0xc0, 0x6f, 0x1a, 0x53, 0xc8, 0x67, - 0xaa, 0x16, 0x00, 0xc2, 0xcf, 0x22, 0x59, 0xee, 0x8f, 0xb9, 0x25, - 0x4c, 0xcc, 0x30, 0xfe, 0xcb, 0x5b, 0x0b, 0x7e, 0x2d, 0xb2, 0x57, - 0x40, 0x43, 0x50, 0x2e, 0xdb, 0xfa, 0xa4, 0x96, 0x17, 0x0c, 0xf0, - 0x04, 0x7e, 0xbf, 0xb5, 0xce, 0x92, 0x69, 0x14, 0x07, 0x16, 0xe8, - 0x4f, 0x90, 0xd1, 0xc1, 0x94, 0x54, 0xc5, 0xd3, 0x65, 0x8f, 0xc7, - 0xff, 0xac, 0x5e, 0xaa, 0xb0, 0x42, 0xf7, 0xe6, 0x1d, 0xa8, 0xd4, - 0x62, 0xcd, 0xe7, 0x51, 0x6e, 0x7e, 0xde, 0x92, 0x38, 0x58, 0x7c, - 0xca, 0x47, 0x8e, 0x49, 0x72, 0x8f, 0x62, 0x80, 0x1f, 0xbe, 0xf6, - 0x92, 0x19, 0xca, 0x16, 0x86, 0x87, 0x10, 0x79, 0xde, 0x57, 0xff, - 0x0b, 0x61, 0xef, 0x41, 0x5c, 0x76, 0xf6, 0x9a, 0xb6, 0xc3, 0xd2, - 0x72, 0x5c, 0xc8, 0x95, 0xab, 0xd9, 0x4b, 0xd7, 0xf6, 0x28, 0xbf, - 0xe6, 0x19, 0x15, 0xfe, 0x5b, 0x6b, 0x1a, 0x2a, 0xe2, 0xea, 0xe2, - 0xe7, 0xa2, 0xce, 0xa1, 0xac, 0x76, 0xe2, 0x7d, 0xef, 0x02, 0xb4, - 0x4e, 0x28, 0x54, 0x8f, 0x42, 0x69, 0x1f, 0x40, 0xad, 0xd4, 0x62, - 0x95, 0x33, 0x04, 0xab, 0x6e, 0xe9, 0x8a, 0x1b, 0x55, 0x82, 0xb6, - 0xcf, 0xf8, 0xa1, 0xf2, 0xca, 0xde, 0xcc, 0x0b, 0x55, 0xa8, 0x32, - 0x4d, 0x31, 0x5d, 0x34, 0xc2, 0x0f, 0xf6, 0x0a, 0x07, 0x95, 0xfb, - 0xdf, 0xc2, 0x12, 0x12, 0x22, 0xe5, 0x41, 0xa7, 0x7d, 0x42, 0x02, - 0x88, 0x90, 0xb5, 0xc9, 0xfa, 0x8e, 0x4f, 0xab, 0x01, 0x09, 0x03, - 0xdb, 0x68, 0x14, 0xdd, 0xa6, 0xa4, 0xe2, 0x2b, 0x2f, 0x2b, 0xf0, - 0x8f, 0x2a, 0xf9, 0x32, 0xcc, 0xa4, 0x88, 0x95, 0xc1, 0x2d, 0xfe, - 0x5a, 0x49, 0xc5, 0x55, 0x4b, 0x44, 0xcd, 0x89, 0xbc, 0xbc, 0x15, - 0x21, 0x5b, 0xce, 0x71, 0x7d, 0x7f, 0x52, 0x59, 0x4c, 0x30, 0xf0, - 0xc7, 0xe6, 0x23, 0x5b, 0x68, 0xf4, 0xba, 0xeb, 0x64, 0xa5, 0x69, - 0xb1, 0x52, 0x4d, 0x61, 0x88, 0x1f, 0xbf, 0xea, 0xfe, 0x68, 0xc3, - 0x42, 0x55, 0x23, 0x04, 0x65, 0x56, 0x2c, 0x52, 0xe0, 0x6f, 0x97, - 0x95, 0xd3, 0x59, 0x19, 0xab, 0x48, 0xdd, 0xe1, 0xc7, 0xf2, 0x26, - 0xff, 0xbd, 0x38, 0x5e, 0x31, 0xeb, 0x9f, 0x0b, 0x3d, 0x2e, 0xd9, - 0xb1, 0x40, 0x60, 0xe0, 0x17, 0x36, 0x46, 0xd6, 0x1f, 0xb0, 0x70, - 0x7b, 0x66, 0xfa, 0x64, 0x95, 0x96, 0x46, 0x8d, 0xdf, 0x2c, 0xb7, - 0xf8, 0xf0, 0x0b, 0x0c, 0xfd, 0x47, 0x4d, 0x02, 0xee, 0x42, 0x6c, - 0x5f, 0xe9, 0xe7, 0x3f, 0xac, 0x79, 0x90, 0x7b, 0xfc, 0xa6, 0xd8, - 0xd3, 0xce, 0x0f, 0x85, 0x01, 0x8b, 0xf9, 0xfd, 0x6b, 0xe7, 0x3f, - 0x0c, 0xfc, 0xb0, 0x31, 0x12, 0x2c, 0x89, 0x15, 0x3b, 0x29, 0xc4, - 0xa0, 0xc2, 0xef, 0xf3, 0xa2, 0x2c, 0x7a, 0x84, 0x65, 0xfd, 0x41, - 0xfc, 0x9c, 0x7f, 0xda, 0xad, 0x5b, 0x8c, 0xf9, 0x0f, 0x63, 0x1e, - 0xc4, 0xc0, 0xaf, 0xdc, 0xa4, 0x1f, 0x3c, 0xa7, 0x44, 0x5c, 0xbd, - 0x65, 0xf7, 0xff, 0x9a, 0xf9, 0x0f, 0x03, 0x3f, 0x08, 0x67, 0xfb, - 0x98, 0x02, 0x83, 0x12, 0xbf, 0x79, 0xe0, 0xd9, 0x39, 0x12, 0x77, - 0x70, 0x53, 0x73, 0xe8, 0x66, 0x95, 0x01, 0x60, 0xf3, 0x92, 0xd8, - 0x59, 0xf5, 0xa9, 0xfb, 0x46, 0x24, 0x62, 0xa1, 0x2d, 0x31, 0x5c, - 0x3f, 0xb9, 0x8b, 0xbf, 0x60, 0xb7, 0x9f, 0x93, 0xcc, 0xd1, 0x5b, - 0x7d, 0xbe, 0xb5, 0x99, 0x32, 0x56, 0x04, 0x06, 0x7e, 0x95, 0x93, - 0x86, 0xac, 0x52, 0x54, 0x1c, 0x4b, 0xb2, 0xc3, 0xf7, 0xf2, 0xe2, - 0xf8, 0x8f, 0x7e, 0x78, 0x37, 0x51, 0x54, 0xdb, 0xce, 0xb8, 0xc7, - 0xab, 0xe5, 0xdf, 0x7b, 0x0b, 0xb4, 0x3e, 0x09, 0x42, 0x32, 0x79, - 0x79, 0xf4, 0x32, 0xc2, 0xdf, 0x70, 0x33, 0x2f, 0x0d, 0xb5, 0xb0, - 0xa7, 0xf6, 0xa2, 0x66, 0xed, 0xca, 0x3c, 0x68, 0xcb, 0x35, 0x27, - 0x42, 0x65, 0x39, 0x4b, 0x64, 0x4d, 0x6f, 0xdd, 0x78, 0xb0, 0xdf, - 0xc3, 0x99, 0x67, 0x2d, 0xba, 0x35, 0x9c, 0xba, 0xdd, 0xe2, 0xe3, - 0x63, 0x25, 0xae, 0x7b, 0x77, 0xea, 0x59, 0x4f, 0x19, 0xbb, 0xc7, - 0xaf, 0x73, 0xd2, 0x21, 0xe8, 0xf1, 0x4c, 0x1d, 0xf7, 0x8a, 0xf2, - 0x5f, 0x7e, 0x05, 0xac, 0x03, 0xfc, 0xbd, 0x3e, 0xc7, 0x90, 0xff, - 0x31, 0x85, 0xc6, 0x27, 0x85, 0x69, 0x50, 0x1e, 0xb2, 0x75, 0x54, - 0x15, 0xd0, 0xf7, 0xe5, 0x79, 0x43, 0x7b, 0x06, 0x2e, 0x52, 0xd6, - 0xff, 0x62, 0x67, 0x09, 0xb5, 0x66, 0xc3, 0x82, 0xb7, 0x53, 0xb3, - 0x93, 0xb2, 0xee, 0xc8, 0x7c, 0xc4, 0x17, 0x1c, 0xc9, 0x2a, 0x41, - 0xae, 0x03, 0xf4, 0x51, 0xcd, 0x66, 0xe5, 0xf1, 0xc8, 0x59, 0x04, - 0xd6, 0x8b, 0xce, 0xc3, 0x35, 0xda, 0x30, 0xab, 0x0c, 0x8c, 0xf5, - 0x9f, 0x44, 0xad, 0x73, 0x0d, 0xda, 0xa4, 0x5b, 0x8b, 0xf2, 0x7f, - 0xec, 0x84, 0x8d, 0x47, 0xae, 0xda, 0xff, 0x02, 0xaf, 0x9c, 0x61, - 0xb7, 0x2b, 0x55, 0x8b, 0x2a, 0x2d, 0xae, 0x85, 0x16, 0xde, 0xe2, - 0x70, 0x1d, 0x78, 0x41, 0xd9, 0x46, 0x83, 0x32, 0xf9, 0xbb, 0x57, - 0x77, 0x9d, 0x56, 0x7e, 0xff, 0x91, 0x27, 0x44, 0xa9, 0xcf, 0xa7, - 0x73, 0x86, 0x13, 0x5d, 0xd0, 0x6c, 0x25, 0x8f, 0xfb, 0x06, 0xb9, - 0x6c, 0xc3, 0x42, 0xdb, 0xcf, 0xc0, 0x93, 0xf2, 0x8f, 0x04, 0x7e, - 0xfb, 0xae, 0x2c, 0x46, 0x8e, 0x7d, 0x0b, 0x46, 0x26, 0x8c, 0xb4, - 0x5e, 0x47, 0xfc, 0x01, 0x8d, 0xdd, 0x72, 0xb5, 0x83, 0x29, 0x3c, - 0xb2, 0x96, 0x26, 0xeb, 0xe9, 0x04, 0x4d, 0x90, 0x54, 0x96, 0xd2, - 0xfc, 0xaf, 0x7e, 0x68, 0x6f, 0x32, 0x08, 0xc3, 0xd0, 0xdc, 0x43, - 0xf1, 0x49, 0x0e, 0x56, 0x58, 0xba, 0x59, 0xfb, 0xd1, 0x5c, 0x3c, - 0xad, 0x7f, 0x70, 0x3e, 0xa5, 0x39, 0xbe, 0x6b, 0xd9, 0xf7, 0x39, - 0xc8, 0x68, 0xb8, 0xfc, 0xbb, 0x4a, 0xc2, 0x22, 0x19, 0x3f, 0x1e, - 0x6a, 0xf9, 0x63, 0x49, 0x3d, 0x22, 0xfa, 0x2e, 0xce, 0xaa, 0x42, - 0xc5, 0x29, 0xea, 0x0d, 0x81, 0x41, 0x3b, 0x1e, 0xa0, 0xed, 0xf0, - 0x39, 0x99, 0xba, 0x7e, 0x8f, 0x4a, 0x85, 0xfd, 0xf4, 0xa3, 0xef, - 0x63, 0x8e, 0x90, 0x16, 0xee, 0x33, 0xf0, 0x12, 0xe2, 0x37, 0xff, - 0xd1, 0xd5, 0xa5, 0xff, 0x64, 0x68, 0xbc, 0xfa, 0x0e, 0x9e, 0x11, - 0x64, 0x66, 0x66, 0xe6, 0x14, 0x93, 0x7e, 0xdd, 0x14, 0x10, 0xda, - 0x2f, 0x31, 0x2d, 0xd7, 0xa5, 0x1c, 0xff, 0xfc, 0xe6, 0x14, 0xa3, - 0xaa, 0xc2, 0x1b, 0xb0, 0x28, 0x5e, 0x3c, 0x47, 0x33, 0x03, 0xee, - 0xfb, 0x13, 0xfa, 0x41, 0xe4, 0xe6, 0x22, 0x97, 0xe8, 0x6a, 0x69, - 0x69, 0x69, 0x1a, 0x55, 0x56, 0x98, 0xe7, 0x55, 0xa1, 0x3b, 0xcf, - 0x1b, 0xbe, 0xbd, 0x56, 0x50, 0xff, 0x05, 0x56, 0xeb, 0xac, 0x9e, - 0x01, 0x8f, 0xfa, 0x8d, 0xfc, 0xf1, 0xd0, 0x68, 0xa2, 0xb0, 0xfd, - 0x08, 0x55, 0xca, 0x7a, 0x7d, 0xbf, 0x3e, 0x3b, 0x1c, 0x4a, 0xf9, - 0x27, 0xe0, 0xed, 0x7c, 0x9e, 0xe8, 0x20, 0x74, 0x76, 0x9d, 0x3e, - 0x4b, 0x5c, 0x68, 0xa9, 0xd8, 0x22, 0x3a, 0x9c, 0x14, 0xf5, 0x2a, - 0xa3, 0x56, 0xc9, 0x54, 0x20, 0x30, 0x30, 0x6d, 0x6f, 0x20, 0x34, - 0x7e, 0xe3, 0x10, 0x31, 0xd6, 0xb9, 0xf3, 0xc5, 0x70, 0xbd, 0x62, - 0xe1, 0xbf, 0x16, 0x9a, 0x8f, 0x5d, 0x85, 0xeb, 0x7f, 0xf1, 0x68, - 0xe5, 0x9a, 0x5a, 0xc0, 0x5c, 0x95, 0xf0, 0x6c, 0x8e, 0x4c, 0xdd, - 0x96, 0x99, 0xb9, 0x21, 0xa9, 0xad, 0x76, 0x76, 0x09, 0x7b, 0xf0, - 0x87, 0x50, 0x22, 0xab, 0xb8, 0xae, 0xd0, 0x52, 0x56, 0x55, 0x81, - 0x91, 0x21, 0xca, 0x6c, 0xc2, 0x31, 0x43, 0xc0, 0x32, 0x3b, 0x8f, - 0xbb, 0xeb, 0xdb, 0x55, 0x88, 0xcf, 0x13, 0x15, 0x0b, 0xfd, 0x84, - 0x79, 0x70, 0xbd, 0xf1, 0x16, 0x4b, 0xac, 0x9a, 0x38, 0x74, 0x06, - 0xd3, 0xc5, 0x82, 0x10, 0xda, 0xce, 0xd3, 0xd0, 0xb7, 0x9d, 0x6d, - 0xb1, 0x0c, 0x52, 0x8f, 0xbd, 0xa6, 0xc0, 0x9e, 0xf1, 0xf1, 0x3d, - 0x83, 0x58, 0xf3, 0x63, 0x5f, 0x2c, 0x4e, 0x68, 0x04, 0x75, 0x5f, - 0xcd, 0x68, 0x04, 0x5b, 0x4c, 0x75, 0xdb, 0x67, 0xc8, 0x5a, 0x44, - 0xbe, 0xe4, 0x44, 0x82, 0xb1, 0x49, 0x41, 0xbf, 0x5a, 0x27, 0x87, - 0xa6, 0x4b, 0x1c, 0xa8, 0x30, 0x23, 0x31, 0x7e, 0x50, 0x72, 0x66, - 0x31, 0x75, 0xc5, 0x60, 0x15, 0x06, 0xad, 0xe0, 0x6c, 0x9d, 0xbd, - 0x77, 0xbc, 0xdd, 0x78, 0x2f, 0xaa, 0x29, 0x85, 0x47, 0x2a, 0x9f, - 0x0d, 0xa6, 0x14, 0x17, 0x52, 0xa8, 0x33, 0x38, 0xd8, 0x35, 0x9c, - 0xbc, 0xeb, 0xaa, 0xdd, 0x7e, 0x75, 0xcf, 0xbc, 0xd6, 0x9e, 0xfc, - 0xd6, 0x70, 0xa9, 0x4e, 0x4b, 0x83, 0xec, 0x40, 0x17, 0x63, 0x31, - 0x4f, 0xc2, 0x6f, 0xf2, 0xef, 0x31, 0x0a, 0x8b, 0x44, 0x29, 0x71, - 0xe2, 0x0c, 0x14, 0x8c, 0xaf, 0x6e, 0x4e, 0x23, 0x89, 0xa0, 0x79, - 0x85, 0xc4, 0x4f, 0xc2, 0xa3, 0xe2, 0x0f, 0xdc, 0x84, 0x90, 0x42, - 0x7b, 0x2f, 0x66, 0xa8, 0x0c, 0x86, 0x9f, 0xdb, 0x55, 0x21, 0xea, - 0x11, 0xf7, 0xbe, 0xe0, 0x41, 0xfb, 0x87, 0xc4, 0x32, 0x69, 0xff, - 0x0f, 0x9e, 0xfe, 0xe5, 0xeb, 0xab, 0x9a, 0xb6, 0x7f, 0x53, 0xf8, - 0x9c, 0xad, 0x57, 0xc0, 0x02, 0xc1, 0x79, 0x2d, 0xad, 0x17, 0x69, - 0x83, 0x21, 0xfb, 0x90, 0xe3, 0x1d, 0x91, 0x17, 0x01, 0xab, 0x9d, - 0xc4, 0x53, 0x0a, 0x37, 0x5e, 0x30, 0x8d, 0x6c, 0xb8, 0xc6, 0x66, - 0x1b, 0xa5, 0x7e, 0x90, 0x3b, 0xfc, 0x3d, 0x2f, 0xa3, 0x5b, 0xb7, - 0x94, 0x3b, 0x2e, 0x20, 0xe3, 0x8e, 0x53, 0x29, 0xa8, 0x37, 0xdf, - 0x5d, 0x05, 0xcb, 0xff, 0xe9, 0x39, 0x2e, 0x85, 0x15, 0x74, 0x40, - 0x2f, 0xc5, 0xb2, 0x7e, 0x8f, 0xc6, 0x06, 0x7c, 0x69, 0xdc, 0x4b, - 0x94, 0x28, 0x19, 0x41, 0x35, 0x51, 0x08, 0xce, 0xd6, 0xcb, 0xd8, - 0x5d, 0x73, 0x90, 0x6b, 0x32, 0x8e, 0xeb, 0xaf, 0x75, 0x22, 0x97, - 0xfd, 0xb8, 0x0d, 0xec, 0x3c, 0x2f, 0x91, 0x92, 0x62, 0xe1, 0x5b, - 0x16, 0x25, 0xfb, 0xdf, 0x14, 0xfc, 0x77, 0x88, 0x1b, 0x81, 0x4d, - 0x0d, 0x75, 0x36, 0x19, 0xee, 0xf0, 0x27, 0x96, 0x22, 0x5b, 0xa6, - 0xb4, 0xf9, 0x48, 0xc8, 0xd8, 0x79, 0x4c, 0xed, 0xc5, 0x64, 0xc0, - 0x92, 0xae, 0x38, 0xe9, 0xdb, 0x03, 0xcb, 0x26, 0xa7, 0xa9, 0x19, - 0x70, 0xaf, 0x8b, 0x0a, 0x51, 0xea, 0xca, 0xe7, 0x16, 0xb6, 0xd9, - 0xfa, 0xa8, 0xef, 0xed, 0xf6, 0xcf, 0x8d, 0x97, 0xd2, 0xdc, 0xe2, - 0x87, 0xf1, 0xef, 0x24, 0xa8, 0xea, 0x7d, 0xd6, 0xb8, 0xbe, 0x5d, - 0x3e, 0x3c, 0x2c, 0x38, 0x38, 0x66, 0x6d, 0x31, 0xfa, 0x0a, 0xba, - 0xda, 0x79, 0x3c, 0xda, 0x22, 0x59, 0x9d, 0xb5, 0x39, 0xa5, 0x58, - 0x7d, 0x61, 0x06, 0x37, 0xf8, 0x61, 0x8d, 0x61, 0xb1, 0x95, 0xf8, - 0xff, 0x91, 0x33, 0xe6, 0xaf, 0x51, 0xbb, 0xbd, 0xaa, 0x2d, 0x32, - 0xa3, 0xde, 0xaa, 0x0a, 0x9e, 0xda, 0xdf, 0xe3, 0x67, 0xaa, 0x54, - 0xec, 0xba, 0x2d, 0x12, 0xe4, 0x87, 0x1f, 0xe0, 0xce, 0xc5, 0x3e, - 0x48, 0xff, 0x07, 0x08, 0x0f, 0xc1, 0x0f, 0xf2, 0x4f, 0xbe, 0x30, - 0xb1, 0x4d, 0xf9, 0xac, 0xb7, 0xd0, 0xf5, 0x06, 0x65, 0xa2, 0xe2, - 0xbe, 0xda, 0x9f, 0x06, 0xd9, 0x18, 0xd3, 0x33, 0x55, 0x70, 0x83, - 0x3f, 0xe4, 0x08, 0x72, 0x4d, 0x4c, 0xad, 0x92, 0x35, 0x08, 0x38, - 0xe3, 0xfe, 0x8b, 0xc9, 0xe0, 0x10, 0x8b, 0x11, 0xda, 0x1d, 0x94, - 0x8d, 0xfa, 0x30, 0xfe, 0x8d, 0xe2, 0xfa, 0xca, 0x8a, 0xa3, 0xc5, - 0x3c, 0x72, 0x7c, 0xa4, 0xdf, 0xb6, 0x13, 0xf5, 0x2d, 0x72, 0xb9, - 0x5c, 0x4b, 0xd8, 0x7e, 0x20, 0x0c, 0xf1, 0xfb, 0xf4, 0xc0, 0xd2, - 0xe9, 0xf8, 0xb4, 0xeb, 0xfc, 0x79, 0x71, 0xcf, 0x6b, 0x93, 0x26, - 0x8a, 0xdf, 0xa4, 0x68, 0x7f, 0x4a, 0xf1, 0xd7, 0x37, 0x74, 0x46, - 0xe9, 0x06, 0x7f, 0x6c, 0x3e, 0xba, 0x1a, 0x3b, 0xa0, 0xa0, 0x64, - 0x94, 0x22, 0x23, 0xff, 0xd9, 0x78, 0xbb, 0xca, 0xe7, 0x87, 0x1c, - 0x46, 0x17, 0x53, 0xfb, 0x0f, 0xc0, 0x2f, 0x3d, 0xb3, 0x7e, 0xdf, - 0xf5, 0xc5, 0xc8, 0xb5, 0x4d, 0x37, 0xc6, 0x2e, 0x46, 0xe8, 0xe2, - 0x19, 0x74, 0x4a, 0xeb, 0x42, 0x4d, 0xc2, 0xc2, 0xc6, 0x0f, 0x56, - 0x6a, 0xf6, 0x12, 0xbe, 0x74, 0x73, 0x8c, 0xb6, 0xe7, 0x80, 0xe5, - 0x5b, 0xc0, 0x8f, 0xbb, 0x4e, 0x59, 0x30, 0x88, 0xc8, 0x16, 0xba, - 0xce, 0xf1, 0xba, 0x7e, 0x8f, 0x06, 0x37, 0xf8, 0xf1, 0x93, 0x0e, - 0x87, 0xb6, 0xcf, 0x92, 0x3b, 0x00, 0x9c, 0x71, 0xc4, 0x0f, 0x3f, - 0x92, 0xbd, 0xfe, 0xd9, 0xea, 0x28, 0x1d, 0x1a, 0x54, 0xf8, 0xf1, - 0x80, 0x3c, 0xab, 0x00, 0x95, 0x6f, 0x6b, 0xab, 0xa6, 0xf6, 0xdb, - 0x8f, 0xf8, 0x95, 0x0b, 0x9c, 0xb7, 0x5f, 0x65, 0xbe, 0xda, 0x1d, - 0x7e, 0xd8, 0x12, 0x55, 0xf2, 0x8e, 0x66, 0xc3, 0x2b, 0xe7, 0xdd, - 0x3f, 0x07, 0x95, 0xc2, 0x4b, 0xc3, 0xcf, 0x4a, 0x2b, 0x07, 0xc4, - 0x68, 0x83, 0xa8, 0xce, 0x19, 0xfb, 0xbc, 0xc4, 0x60, 0x8c, 0x1f, - 0x86, 0x18, 0xab, 0xb9, 0x5e, 0xba, 0xb4, 0x98, 0x09, 0x19, 0xab, - 0x60, 0x55, 0x48, 0x3d, 0x1a, 0x99, 0x42, 0x7a, 0xc7, 0xf7, 0x0c, - 0xa9, 0x03, 0x6a, 0x1f, 0x71, 0x68, 0xd0, 0xe0, 0x27, 0xfb, 0x61, - 0x5d, 0xeb, 0xd5, 0xa2, 0xe8, 0x80, 0x62, 0x74, 0x7b, 0x68, 0xdc, - 0x35, 0x79, 0x15, 0xa7, 0x7a, 0xf8, 0xbd, 0x3b, 0xc5, 0x8f, 0xb3, - 0x6c, 0x29, 0xe0, 0x4b, 0x56, 0x2b, 0x18, 0xe0, 0x13, 0x14, 0x31, - 0xc8, 0x92, 0xc3, 0xa3, 0x13, 0x50, 0xef, 0xde, 0xd3, 0x8a, 0xd1, - 0x31, 0x61, 0x72, 0x6c, 0xee, 0x77, 0x5a, 0x5c, 0x89, 0x79, 0x14, - 0xfc, 0xa0, 0x93, 0x4a, 0x04, 0x6d, 0x36, 0x5d, 0xbf, 0xc2, 0x19, - 0x8e, 0xb1, 0xb0, 0xbd, 0xef, 0x9e, 0x52, 0xa7, 0xe6, 0x37, 0x72, - 0x1f, 0x9e, 0x22, 0x1f, 0x59, 0x13, 0x57, 0x77, 0xc4, 0x3d, 0xc1, - 0x31, 0x98, 0x0e, 0x3f, 0x38, 0x44, 0x44, 0xc5, 0x43, 0x94, 0x02, - 0x92, 0xef, 0x2a, 0x84, 0x47, 0xa6, 0xc0, 0x5d, 0xf2, 0x2a, 0x9e, - 0x2a, 0xa4, 0x38, 0xd5, 0xf8, 0xaf, 0xaa, 0x66, 0xc7, 0x01, 0x09, - 0xa7, 0x51, 0xc9, 0x34, 0x2a, 0x1f, 0xd4, 0xe9, 0xb3, 0xc4, 0x96, - 0x7d, 0xdb, 0x89, 0xc4, 0xf1, 0x0f, 0xe4, 0x3f, 0xfe, 0x78, 0x42, - 0x33, 0x6f, 0xdf, 0xd0, 0xf1, 0x97, 0x78, 0x59, 0xfe, 0xab, 0x31, - 0x7e, 0x71, 0x89, 0x71, 0xc4, 0x3d, 0xba, 0x9b, 0x11, 0x0f, 0xa6, - 0x30, 0xb2, 0x8e, 0xb8, 0xc7, 0x2f, 0x53, 0xb8, 0x94, 0x98, 0x53, - 0x00, 0x1a, 0x90, 0xbb, 0x55, 0xb9, 0x96, 0xa4, 0x02, 0x71, 0xdd, - 0x5f, 0x87, 0x1f, 0xac, 0x34, 0xe8, 0x1e, 0x24, 0x21, 0x44, 0x9c, - 0x01, 0xeb, 0x06, 0xd3, 0x1c, 0x27, 0x9a, 0xce, 0x7a, 0xf7, 0xa0, - 0xdb, 0x6a, 0xf9, 0x47, 0xb3, 0x49, 0xcd, 0x34, 0xa6, 0x50, 0x52, - 0x18, 0x84, 0x58, 0xf2, 0x5d, 0x82, 0x49, 0x24, 0xb5, 0xa4, 0x08, - 0x98, 0x79, 0xea, 0x7e, 0xc1, 0x7e, 0x6b, 0xfa, 0xf1, 0xe2, 0xd2, - 0xa3, 0x23, 0x85, 0xa1, 0xf7, 0x11, 0xf0, 0xe3, 0x7a, 0x46, 0x87, - 0x1b, 0x92, 0x2e, 0x44, 0x58, 0xcc, 0x82, 0xc2, 0x66, 0xf8, 0x91, - 0x8c, 0xfd, 0xb2, 0x9f, 0x5b, 0x2c, 0x6d, 0x16, 0xa6, 0x8d, 0x88, - 0x1f, 0x9a, 0x7a, 0xae, 0xf8, 0xab, 0x02, 0x74, 0xb5, 0x37, 0x1b, - 0xbf, 0x69, 0x52, 0xa9, 0x6a, 0x0f, 0x1a, 0x4d, 0xc3, 0x56, 0x99, - 0xe6, 0x8c, 0x97, 0xe3, 0x9e, 0xf6, 0x94, 0xd4, 0xc0, 0x07, 0xb8, - 0x90, 0x56, 0x63, 0x13, 0xb0, 0x05, 0x55, 0x09, 0x76, 0xd3, 0xe6, - 0x99, 0xd0, 0x1f, 0x38, 0x2e, 0x66, 0x4c, 0x0e, 0x95, 0xb4, 0x1a, - 0xe6, 0x3e, 0x47, 0x85, 0x91, 0x77, 0x7f, 0x8c, 0xd8, 0xe6, 0x1e, - 0x01, 0x3f, 0x98, 0x33, 0xac, 0xab, 0x45, 0xdc, 0x1d, 0x1e, 0x6c, - 0x25, 0x66, 0x10, 0xc7, 0x50, 0x0d, 0x77, 0x21, 0xd9, 0x28, 0x13, - 0x4f, 0x4e, 0x5d, 0xa0, 0x23, 0xe5, 0x6a, 0x45, 0xd9, 0xc0, 0xa9, - 0x44, 0x02, 0x1b, 0x3f, 0xd7, 0xf9, 0xbc, 0xb8, 0x9c, 0x2f, 0x3f, - 0xfc, 0x68, 0x1b, 0xe2, 0x41, 0x8a, 0xa9, 0xf7, 0xc7, 0x23, 0xed, - 0xcf, 0x92, 0xc6, 0x75, 0x2a, 0x42, 0x4b, 0xb4, 0x93, 0x8b, 0xd9, - 0x2e, 0x74, 0x90, 0x0c, 0x36, 0x5d, 0xbe, 0x41, 0x95, 0x99, 0x63, - 0x7b, 0x87, 0x28, 0xe6, 0x59, 0xb5, 0x5f, 0xff, 0xa2, 0xd8, 0x71, - 0x39, 0x3b, 0xfb, 0xaa, 0xab, 0x68, 0x67, 0xbc, 0xf9, 0x51, 0xf1, - 0xf7, 0xb8, 0x82, 0x4a, 0xc6, 0x0b, 0xaf, 0x12, 0x0c, 0xbf, 0xf0, - 0x94, 0x3b, 0x1f, 0x54, 0x12, 0xa6, 0x25, 0x94, 0xf7, 0x1c, 0x51, - 0x4e, 0x1c, 0x15, 0x7b, 0xf6, 0xbe, 0x79, 0xc8, 0x18, 0x7f, 0xc3, - 0x0c, 0x84, 0x3e, 0x97, 0xd7, 0x02, 0xf0, 0xc3, 0xd1, 0x62, 0x5c, - 0x64, 0x53, 0xaa, 0x0b, 0x6d, 0x60, 0xbc, 0x1c, 0x24, 0xad, 0x91, - 0xe2, 0xbd, 0x79, 0x9d, 0xe8, 0x7a, 0x8b, 0x6b, 0xd1, 0x49, 0x62, - 0xc3, 0xd0, 0xbb, 0x48, 0xd0, 0x62, 0x4e, 0xa8, 0x40, 0x99, 0x6a, - 0xaf, 0x9e, 0x7e, 0x49, 0x45, 0x0f, 0xce, 0xa7, 0x74, 0x8f, 0x88, - 0x88, 0x5d, 0xf4, 0x3d, 0x7f, 0x49, 0xb0, 0xaf, 0x7a, 0x04, 0xfc, - 0xa3, 0x4a, 0xc4, 0x6a, 0x1e, 0x7a, 0x57, 0xf0, 0x07, 0x36, 0xb8, - 0x48, 0x6c, 0x08, 0xe3, 0x4a, 0xc1, 0xff, 0x27, 0x09, 0x4f, 0x9d, - 0x47, 0x95, 0xf3, 0xc4, 0x6a, 0x95, 0xb7, 0xf5, 0x30, 0xf0, 0xab, - 0xf6, 0xff, 0x72, 0xa6, 0xe4, 0x0a, 0xe2, 0x62, 0x12, 0x7f, 0xe8, - 0x37, 0x88, 0xff, 0x0f, 0x5d, 0xc0, 0x43, 0x2d, 0x55, 0x88, 0x46, - 0x9e, 0x17, 0x07, 0x1c, 0x9f, 0xb7, 0x33, 0xc3, 0x15, 0x7f, 0x3f, - 0x4d, 0x8d, 0x2d, 0x34, 0x9b, 0xad, 0xe3, 0x73, 0xd1, 0x31, 0x61, - 0x2e, 0x56, 0x67, 0xe0, 0x69, 0x3e, 0x33, 0xe4, 0xd1, 0xf0, 0xc3, - 0xe7, 0x2f, 0xd8, 0x5e, 0xe3, 0xef, 0x9d, 0xf4, 0x45, 0xd0, 0x27, - 0xfb, 0x88, 0x19, 0xd4, 0x39, 0x41, 0x77, 0xbb, 0xe2, 0x5b, 0xc0, - 0xfd, 0xbf, 0x21, 0x7e, 0x50, 0x31, 0xcb, 0x92, 0x38, 0x58, 0xef, - 0x09, 0xcb, 0xdb, 0x21, 0x3b, 0x51, 0x15, 0x6b, 0x4f, 0x33, 0x1e, - 0xc5, 0xaf, 0xbf, 0x41, 0xfa, 0xae, 0x80, 0x34, 0x97, 0xb8, 0x57, - 0xb1, 0xf5, 0xb7, 0xce, 0x74, 0x71, 0x96, 0xed, 0x9f, 0x81, 0xf8, - 0x34, 0x52, 0x18, 0x5c, 0x2a, 0x11, 0xbf, 0x29, 0x88, 0x68, 0x5a, - 0xfc, 0xd3, 0xf8, 0xeb, 0x74, 0xa8, 0x31, 0x25, 0x95, 0x08, 0x3a, - 0xe6, 0x9a, 0xe3, 0xc7, 0x45, 0x14, 0x05, 0x1f, 0x3c, 0xe0, 0x03, - 0x5c, 0x3c, 0xfa, 0x8b, 0x03, 0x01, 0xce, 0xa0, 0x7e, 0x0f, 0xc7, - 0x56, 0xa1, 0xbd, 0x52, 0x5f, 0xd8, 0xf3, 0xaa, 0x7b, 0xfc, 0xb2, - 0x24, 0x8e, 0xbb, 0x3d, 0xc1, 0xc5, 0x22, 0x2c, 0x2d, 0x51, 0x3b, - 0x0f, 0x55, 0x80, 0x51, 0x3c, 0x7f, 0x4a, 0xa0, 0xc9, 0xbb, 0xdd, - 0x32, 0x07, 0x3a, 0x2f, 0x58, 0x53, 0x04, 0x7c, 0x54, 0x5e, 0xbe, - 0x27, 0x21, 0xd0, 0x84, 0x25, 0x8e, 0xb9, 0x85, 0x28, 0x2f, 0x81, - 0x3e, 0xca, 0xd6, 0x05, 0x9c, 0x14, 0xb5, 0x4a, 0xca, 0x1c, 0x25, - 0x96, 0x22, 0x43, 0x12, 0x35, 0xf0, 0x90, 0x4d, 0x54, 0x27, 0x56, - 0x24, 0xfa, 0x31, 0xac, 0x36, 0x7e, 0xfc, 0x18, 0x71, 0x98, 0xc7, - 0x2d, 0x01, 0x4c, 0x4d, 0x23, 0xa4, 0x51, 0x18, 0x9a, 0xc6, 0x02, - 0x09, 0x95, 0xb4, 0x30, 0x0a, 0x9d, 0x96, 0x51, 0xff, 0xaf, 0xc6, - 0x0f, 0xd6, 0x0d, 0xb9, 0xe2, 0xc7, 0xd0, 0xf6, 0x8a, 0x68, 0xe7, - 0xa3, 0x09, 0x44, 0x8b, 0xb3, 0xeb, 0x5d, 0xeb, 0x09, 0x07, 0xca, - 0x1f, 0x2a, 0x16, 0x3d, 0x74, 0x45, 0x21, 0x5f, 0xb0, 0x6b, 0x89, - 0x65, 0xc9, 0xbe, 0x12, 0x69, 0xd7, 0xaa, 0xff, 0x0a, 0x87, 0xeb, - 0xfc, 0x72, 0x8b, 0xc5, 0x7a, 0xb4, 0x44, 0x70, 0x52, 0xae, 0xda, - 0x94, 0x88, 0xe5, 0x7f, 0x6a, 0x6b, 0x6d, 0x60, 0xb5, 0x69, 0x84, - 0x1f, 0x7f, 0x60, 0x54, 0xcc, 0xc3, 0x82, 0xc0, 0x74, 0x95, 0x4b, - 0x0d, 0x9c, 0x21, 0x8a, 0xd8, 0x2a, 0xfc, 0x98, 0xd9, 0x46, 0xe3, - 0xbf, 0x1a, 0x3f, 0x58, 0x0a, 0xa7, 0x89, 0x1d, 0xb6, 0x68, 0xe6, - 0xa8, 0x0f, 0x01, 0x33, 0xcf, 0x91, 0xad, 0x0e, 0x15, 0x99, 0x83, - 0xa4, 0x71, 0xc3, 0x7f, 0xcc, 0x3e, 0x61, 0xb7, 0x45, 0x19, 0x1d, - 0xd8, 0x31, 0xd7, 0x97, 0x15, 0x0b, 0x83, 0x5d, 0xc9, 0x29, 0x62, - 0xca, 0xd5, 0xbb, 0x40, 0x5d, 0xff, 0xc4, 0xf3, 0x05, 0xc6, 0x5f, - 0xc2, 0x76, 0x1d, 0x60, 0x80, 0x1f, 0x8b, 0xbd, 0x92, 0xd2, 0x0d, - 0x3f, 0x24, 0xc3, 0x0f, 0x57, 0xba, 0x34, 0x11, 0xc0, 0x19, 0xa2, - 0x43, 0x7c, 0x15, 0x7e, 0xfc, 0x66, 0x41, 0x51, 0xcd, 0xc0, 0x6f, - 0x9a, 0xab, 0xd0, 0xd7, 0x61, 0xfe, 0xc9, 0xd6, 0x3b, 0xc3, 0x6f, - 0x19, 0x54, 0x8d, 0x39, 0x6a, 0xf1, 0xe1, 0xec, 0xec, 0xcc, 0x59, - 0x4a, 0x3b, 0x46, 0x53, 0xe8, 0xe4, 0x8c, 0x53, 0x38, 0x73, 0xba, - 0x62, 0xf9, 0xab, 0xf1, 0x9b, 0xeb, 0x8e, 0x67, 0x67, 0x9f, 0xce, - 0x98, 0x1c, 0x4e, 0x7a, 0x09, 0x3c, 0xe5, 0xcf, 0x91, 0x64, 0xca, - 0x41, 0x76, 0xc1, 0xeb, 0x00, 0xac, 0xd2, 0x30, 0xb6, 0x2f, 0x18, - 0xe3, 0x0f, 0x3b, 0x8e, 0x5c, 0xa9, 0xe2, 0x3b, 0xb0, 0x04, 0x70, - 0xea, 0xd9, 0x80, 0xad, 0x48, 0x9a, 0x08, 0x82, 0x83, 0xe4, 0xb7, - 0x48, 0xa5, 0x0c, 0x2b, 0x43, 0x07, 0xa4, 0xa9, 0x2d, 0x1e, 0x93, - 0xd6, 0xd4, 0x36, 0xc0, 0xef, 0xbf, 0x41, 0x5e, 0x36, 0x83, 0x81, - 0x62, 0x8f, 0xb4, 0x04, 0xf7, 0xd4, 0x17, 0xa8, 0xd8, 0x60, 0xe9, - 0xdf, 0xd4, 0x90, 0x31, 0x6d, 0xf5, 0x69, 0xaa, 0xcb, 0xac, 0x15, - 0x18, 0x1c, 0x2c, 0x29, 0x5a, 0x7d, 0x96, 0xb8, 0x5c, 0xe2, 0x82, - 0x11, 0x17, 0xbc, 0x83, 0x17, 0xc0, 0x01, 0xfe, 0xaa, 0xdd, 0xac, - 0x15, 0x23, 0x03, 0xfc, 0x03, 0x0a, 0x90, 0x3c, 0xcd, 0x9f, 0xed, - 0xba, 0x3f, 0x1a, 0x33, 0x44, 0x56, 0x04, 0x60, 0xe9, 0x43, 0xb0, - 0x07, 0x08, 0xbb, 0x8a, 0xf2, 0x69, 0xaf, 0x6e, 0x5e, 0xcc, 0x8b, - 0x3b, 0x24, 0x18, 0xf8, 0xc3, 0xb3, 0x64, 0xff, 0x0f, 0x58, 0x90, - 0x70, 0xa5, 0xca, 0x4b, 0x50, 0x0c, 0x1f, 0x14, 0x7f, 0x28, 0x74, - 0x39, 0x89, 0x8a, 0xd6, 0xc6, 0xd4, 0xe3, 0x4c, 0x01, 0x2f, 0x7e, - 0x5c, 0x2c, 0xea, 0x64, 0xac, 0xa8, 0xf4, 0x82, 0xc3, 0x75, 0x72, - 0x6a, 0xa4, 0x56, 0x1f, 0x6d, 0x84, 0x7f, 0x56, 0x85, 0x42, 0xcd, - 0x83, 0x07, 0xe9, 0xc5, 0xfd, 0xf2, 0x15, 0x8a, 0x20, 0x9c, 0x21, - 0xf8, 0x05, 0x05, 0xc7, 0xd8, 0x74, 0x8f, 0x2a, 0x96, 0xe5, 0xae, - 0xf4, 0xa0, 0xcf, 0xd4, 0xe2, 0x1f, 0x55, 0x8c, 0xee, 0x53, 0xd5, - 0x3f, 0x96, 0x2c, 0xf2, 0xfb, 0xc8, 0x7f, 0x8a, 0xbb, 0x8f, 0x54, - 0x16, 0x15, 0x7f, 0x34, 0x98, 0xfb, 0x7f, 0xe3, 0x42, 0xb7, 0x32, - 0xad, 0xeb, 0x0e, 0xde, 0x47, 0x55, 0xe2, 0x16, 0x6a, 0x2b, 0xb2, - 0x8f, 0xc5, 0x03, 0x09, 0xfa, 0xd9, 0xd6, 0x43, 0x43, 0xcd, 0xc6, - 0x8f, 0x1b, 0xa5, 0xa2, 0x52, 0x42, 0x0f, 0xa0, 0xcc, 0x59, 0x15, - 0xbc, 0xec, 0x43, 0x03, 0x67, 0x88, 0xfe, 0xc0, 0x5f, 0x2f, 0x42, - 0xe7, 0x04, 0x41, 0xb5, 0xd6, 0x70, 0x3b, 0xf5, 0x0c, 0xaa, 0xc7, - 0x8f, 0xe5, 0x75, 0xf4, 0x95, 0x68, 0x57, 0x54, 0x1f, 0x7f, 0x3d, - 0x5b, 0x15, 0xe6, 0x52, 0xbe, 0x3b, 0x11, 0x63, 0x67, 0x8d, 0x14, - 0xea, 0x04, 0x05, 0x69, 0x35, 0xa8, 0xf5, 0x18, 0xfe, 0x12, 0xc0, - 0xb3, 0xa1, 0xe8, 0xac, 0xd2, 0x1c, 0xb7, 0x81, 0x58, 0xe4, 0x21, - 0x57, 0xfe, 0x6a, 0xb1, 0x9f, 0x00, 0x2b, 0x85, 0x10, 0xcb, 0x37, - 0x15, 0x62, 0x1f, 0x6c, 0x6e, 0x28, 0x99, 0x3b, 0x8c, 0xb9, 0x8d, - 0x6e, 0x27, 0xa9, 0x1d, 0xe4, 0x72, 0xc4, 0x6a, 0x53, 0xa1, 0xe6, - 0xc5, 0x93, 0xd5, 0x0b, 0x9f, 0x2b, 0x5d, 0xef, 0xc0, 0xec, 0x55, - 0x18, 0x4f, 0x03, 0xac, 0x2e, 0x41, 0x28, 0x31, 0x45, 0xed, 0xe7, - 0x45, 0x9f, 0x02, 0x7a, 0xfc, 0xe0, 0xf1, 0xa7, 0x2a, 0x45, 0x2c, - 0x72, 0xb7, 0x6c, 0xe4, 0x9c, 0xa3, 0xec, 0x8b, 0xa7, 0x97, 0x19, - 0x68, 0x54, 0x48, 0x18, 0x6c, 0xd3, 0x6d, 0x6b, 0x8d, 0xdb, 0x62, - 0xdb, 0x33, 0x4c, 0xd3, 0x9b, 0xb7, 0x5e, 0x63, 0xb3, 0x6d, 0xa2, - 0x96, 0x5b, 0x01, 0x03, 0x2c, 0xdb, 0x6d, 0xb6, 0x8d, 0xb3, 0xfb, - 0x50, 0x3c, 0xe3, 0x61, 0x5b, 0x48, 0xdd, 0x2e, 0x13, 0x36, 0x0a, - 0x7e, 0x16, 0x42, 0xd7, 0x48, 0xd6, 0x0e, 0x17, 0x9d, 0xc8, 0x79, - 0x49, 0x4a, 0x51, 0xb9, 0x1e, 0x8b, 0xe5, 0x37, 0x15, 0xee, 0x64, - 0x12, 0x4a, 0xab, 0xee, 0xab, 0x16, 0x02, 0x12, 0x4a, 0x69, 0xa7, - 0x1d, 0xba, 0xad, 0x1c, 0xbc, 0x5a, 0xc5, 0x27, 0x9f, 0x73, 0x96, - 0x5b, 0xea, 0x1a, 0xe0, 0x6f, 0xbd, 0x87, 0x47, 0x59, 0xcd, 0x45, - 0x5e, 0xcc, 0x2d, 0xd3, 0xf8, 0x1c, 0xe9, 0x7c, 0x56, 0xe7, 0x84, - 0x4b, 0x11, 0xf0, 0x10, 0xa3, 0x35, 0x6b, 0x6d, 0xb6, 0x99, 0x17, - 0x3c, 0x9a, 0xc9, 0x01, 0x34, 0x0c, 0x8e, 0x95, 0xb2, 0x8a, 0x05, - 0x9a, 0x83, 0xa2, 0x97, 0xac, 0x27, 0x36, 0x98, 0x7a, 0x42, 0x84, - 0x65, 0x19, 0x76, 0x10, 0xf7, 0x22, 0x9b, 0x77, 0xab, 0xe5, 0x85, - 0xd0, 0xcb, 0x48, 0xbd, 0x10, 0x84, 0x33, 0x28, 0x7f, 0xc0, 0xad, - 0x59, 0x99, 0xdd, 0x5e, 0x81, 0x0a, 0x57, 0x50, 0x49, 0x50, 0x8b, - 0x3f, 0x64, 0x5d, 0x39, 0xca, 0xa5, 0xad, 0x27, 0xe8, 0x04, 0x42, - 0x19, 0xaa, 0x3d, 0xaf, 0x3e, 0xcb, 0x78, 0x75, 0x83, 0x78, 0x18, - 0x7e, 0x30, 0x18, 0x75, 0xae, 0x56, 0x2e, 0x99, 0x82, 0xc5, 0x45, - 0x79, 0xf5, 0x8f, 0x9c, 0x50, 0xd4, 0xbf, 0x3a, 0x88, 0xf5, 0x1f, - 0x7c, 0xc8, 0x6e, 0x5f, 0xa8, 0xf8, 0xc2, 0xcc, 0x9f, 0xd8, 0xed, - 0x05, 0xca, 0x6f, 0x14, 0x67, 0xfc, 0x40, 0xd7, 0x75, 0xfd, 0xc7, - 0xc0, 0x0a, 0xd8, 0x95, 0xad, 0x63, 0x24, 0x50, 0x6a, 0xfc, 0x3e, - 0x31, 0xdb, 0xca, 0x51, 0x41, 0x12, 0x15, 0x62, 0xfa, 0x3b, 0x90, - 0xd6, 0x3d, 0x14, 0x96, 0x07, 0x76, 0x19, 0xed, 0xd6, 0x62, 0xe2, - 0x27, 0x6b, 0x5c, 0xca, 0x41, 0xb3, 0xf5, 0x5e, 0x1e, 0x1d, 0x7d, - 0xce, 0x3d, 0x68, 0x65, 0xf1, 0x03, 0x83, 0xd9, 0x41, 0xe4, 0x69, - 0xfd, 0x7e, 0x82, 0xc5, 0xa1, 0x14, 0xba, 0x26, 0x24, 0x0c, 0x6c, - 0xa6, 0xc9, 0x90, 0x08, 0x4c, 0x41, 0xbd, 0x13, 0x12, 0xe2, 0x14, - 0x6b, 0xed, 0x4a, 0xfc, 0x8d, 0xfa, 0x2e, 0x3e, 0xcf, 0x23, 0xea, - 0xe7, 0x1f, 0x8f, 0x18, 0x4b, 0x11, 0xd2, 0xda, 0xe4, 0x85, 0x1e, - 0x52, 0x0d, 0x08, 0xea, 0xc0, 0xc2, 0xcf, 0x05, 0x6c, 0x70, 0xa1, - 0x9c, 0x76, 0x52, 0xd2, 0x77, 0x49, 0x15, 0xca, 0x1b, 0xa8, 0xb5, - 0xea, 0xc0, 0xdd, 0x38, 0xc3, 0x07, 0x32, 0xdb, 0x25, 0xa5, 0x47, - 0x03, 0xe0, 0x3f, 0x2b, 0xba, 0xdc, 0xce, 0xc2, 0xd2, 0xa9, 0xeb, - 0xa4, 0xbc, 0x0e, 0xdf, 0x2d, 0x47, 0xe1, 0x08, 0x4a, 0x0c, 0xa6, - 0x54, 0x17, 0xdb, 0x15, 0x3d, 0x04, 0x26, 0x7e, 0x2e, 0x2e, 0x17, - 0xa1, 0xa5, 0xd2, 0x32, 0x0f, 0x6e, 0xfd, 0x0e, 0x0b, 0x43, 0x86, - 0x98, 0x91, 0xad, 0x0f, 0x3a, 0x7b, 0x58, 0xcf, 0x07, 0xf5, 0xfa, - 0xcf, 0x83, 0xfc, 0xf7, 0x22, 0x25, 0x70, 0xa6, 0xc9, 0x95, 0x54, - 0x9b, 0xa1, 0x08, 0x58, 0x4c, 0xdd, 0x63, 0x64, 0x93, 0xc8, 0xc6, - 0x6f, 0x1e, 0x5f, 0x8c, 0xee, 0x4c, 0x14, 0xf9, 0x18, 0x76, 0x12, - 0xf1, 0x3b, 0x58, 0x7b, 0x72, 0x96, 0xf2, 0xfa, 0x2e, 0x4e, 0xb1, - 0x94, 0x6c, 0x6e, 0xca, 0x76, 0x9d, 0xf2, 0x47, 0x03, 0x9c, 0x98, - 0x26, 0x85, 0x0d, 0x13, 0x23, 0x15, 0x55, 0x5b, 0x77, 0x62, 0xa6, - 0xb4, 0x61, 0x46, 0x0e, 0x41, 0x8b, 0x33, 0xd7, 0x3c, 0x6b, 0xf0, - 0x30, 0x36, 0x7e, 0xae, 0x29, 0x1e, 0x03, 0xe8, 0xbc, 0xd8, 0xea, - 0xd2, 0xfa, 0x3f, 0x14, 0x43, 0x42, 0x1e, 0x42, 0xa5, 0x59, 0x9a, - 0x83, 0x96, 0x64, 0x53, 0x82, 0xd0, 0x4f, 0x14, 0xf9, 0xdb, 0x2d, - 0x43, 0xe5, 0x4d, 0xf5, 0x2f, 0xcb, 0x76, 0x0f, 0xf2, 0x51, 0x14, - 0xd2, 0x91, 0x14, 0x20, 0xf1, 0x47, 0xfe, 0xc5, 0xd2, 0x47, 0xfb, - 0x4a, 0x70, 0xc6, 0x0c, 0x1b, 0xc8, 0xbc, 0x03, 0xb5, 0x3e, 0xf7, - 0xa5, 0x00, 0xce, 0xf9, 0xf5, 0xa7, 0x00, 0x28, 0x1c, 0x22, 0x54, - 0x17, 0x3f, 0x17, 0x73, 0x1e, 0xf1, 0x9b, 0x41, 0x47, 0x6a, 0x4e, - 0x29, 0xd6, 0xf9, 0xbf, 0x14, 0x83, 0x1f, 0x1e, 0x15, 0x4b, 0xe6, - 0x04, 0x07, 0x29, 0x83, 0xe2, 0xed, 0x11, 0x37, 0x94, 0x0d, 0x83, - 0xbf, 0xbd, 0x2f, 0x99, 0xd6, 0x8c, 0xc2, 0x5b, 0x97, 0x45, 0xd7, - 0x82, 0x88, 0x0c, 0xd5, 0xff, 0x9a, 0x62, 0xa7, 0x80, 0x88, 0x62, - 0x52, 0x19, 0x72, 0x24, 0x19, 0xc0, 0x78, 0xe4, 0x60, 0x84, 0xdf, - 0x7b, 0xe8, 0x4d, 0x04, 0xb6, 0xfa, 0x70, 0xd4, 0x98, 0xce, 0xff, - 0x29, 0x0d, 0x20, 0x78, 0x9c, 0x30, 0xda, 0xba, 0x00, 0xf8, 0x4b, - 0xb7, 0x8a, 0x95, 0x9a, 0x0e, 0xce, 0x8d, 0x2a, 0xf6, 0x8a, 0xa6, - 0x86, 0x0f, 0xc7, 0x1f, 0x90, 0xa1, 0xf3, 0xc5, 0x08, 0x5a, 0x2d, - 0xa6, 0x36, 0xfb, 0x0f, 0x05, 0x23, 0xfc, 0x9c, 0xf9, 0x1d, 0x07, - 0xac, 0xee, 0x84, 0xef, 0xe5, 0xf9, 0xbd, 0x0a, 0x61, 0x08, 0xb7, - 0xd7, 0xf1, 0xd2, 0xfa, 0x1f, 0xc8, 0x05, 0xce, 0x4d, 0x46, 0x9b, - 0x77, 0x94, 0xae, 0x65, 0x7d, 0xc3, 0x86, 0xa6, 0x15, 0x22, 0xfe, - 0x80, 0xb0, 0x72, 0xa4, 0xc6, 0x9f, 0x6f, 0xd5, 0xb7, 0x7f, 0x2e, - 0xb1, 0x4c, 0xab, 0xb7, 0x88, 0xbb, 0x86, 0xca, 0xe4, 0xd5, 0x8c, - 0xc6, 0xbd, 0xe2, 0x7b, 0xa9, 0x5f, 0x0c, 0x16, 0xaa, 0xed, 0x45, - 0x7f, 0xda, 0xea, 0xf5, 0xe0, 0x80, 0x5e, 0xe2, 0xd9, 0x1b, 0xfa, - 0x50, 0xf7, 0x6f, 0x48, 0xf6, 0xff, 0xaa, 0x0e, 0xcd, 0x37, 0x39, - 0xf9, 0xcd, 0xed, 0x57, 0x57, 0xa1, 0xdc, 0x28, 0xc5, 0x17, 0xa5, - 0x36, 0x0c, 0x22, 0x72, 0xe1, 0x04, 0x83, 0xb1, 0x25, 0x42, 0xed, - 0x31, 0xc2, 0x7f, 0x4a, 0x3e, 0x12, 0xf5, 0xa5, 0x6a, 0xfc, 0xcc, - 0xb3, 0xe9, 0xb0, 0x0c, 0xa9, 0xd6, 0x5b, 0xc0, 0xfa, 0x48, 0xb6, - 0xbc, 0x9a, 0x15, 0x7f, 0xd1, 0x7e, 0x51, 0xe5, 0x1d, 0xdb, 0x34, - 0xf2, 0x5b, 0xfb, 0xe5, 0x51, 0x66, 0x61, 0x0d, 0x57, 0x7d, 0x7a, - 0x5b, 0xaf, 0x8b, 0xe2, 0xd9, 0x1b, 0xfa, 0x10, 0xf7, 0x0d, 0x1e, - 0x41, 0xd2, 0xd8, 0x35, 0x18, 0x75, 0x0e, 0x15, 0x7f, 0x76, 0x13, - 0xdd, 0x99, 0xa6, 0xc4, 0xa7, 0x31, 0x8c, 0x6a, 0x7b, 0x14, 0xcb, - 0x1b, 0x06, 0x67, 0x87, 0x6b, 0xf0, 0x73, 0x7e, 0xd3, 0xee, 0x88, - 0xba, 0x88, 0x6a, 0xe0, 0xaf, 0xb7, 0x51, 0x63, 0xbd, 0x00, 0x6b, - 0x1a, 0x8a, 0x03, 0xa1, 0x12, 0xec, 0x1a, 0xd3, 0x83, 0x60, 0xfc, - 0xd0, 0x4c, 0x10, 0xa2, 0x60, 0xcf, 0xbe, 0x45, 0xf9, 0x17, 0x37, - 0x8b, 0x70, 0x7e, 0x2b, 0x61, 0x71, 0xcb, 0x3e, 0x9c, 0x39, 0x38, - 0xc1, 0x20, 0x88, 0xc3, 0x3a, 0xd5, 0x51, 0x1b, 0xf4, 0x78, 0x0b, - 0x25, 0xcd, 0x16, 0xdd, 0x39, 0x55, 0x24, 0x68, 0xf1, 0x73, 0x8d, - 0x36, 0x8b, 0xc2, 0x49, 0x35, 0xf0, 0x73, 0xc9, 0x55, 0x4a, 0x2d, - 0x06, 0xd9, 0x3e, 0xab, 0xdc, 0x4c, 0xa9, 0xc5, 0x5f, 0x6b, 0x7a, - 0xb1, 0xc8, 0xdc, 0x1a, 0xe0, 0x37, 0x0d, 0xb7, 0x23, 0x57, 0x81, - 0xbc, 0xc6, 0xa2, 0x09, 0x01, 0x69, 0x3c, 0xe2, 0xcf, 0xb6, 0x53, - 0xe5, 0xd1, 0xe3, 0x2d, 0x64, 0x9a, 0x07, 0xa2, 0xff, 0x6b, 0x5d, - 0xd0, 0xe1, 0xe7, 0xc6, 0x8a, 0xf2, 0x41, 0x75, 0xf0, 0x87, 0x5f, - 0x40, 0x87, 0x14, 0x42, 0x72, 0xad, 0xe4, 0x0a, 0x95, 0x65, 0x8c, - 0x16, 0x7f, 0xd4, 0x8f, 0x48, 0x54, 0xc6, 0xd4, 0x00, 0x3f, 0xf4, - 0xdf, 0xe7, 0xc7, 0x9d, 0xe4, 0xa5, 0xa9, 0xa5, 0x3a, 0xc0, 0x3a, - 0x8a, 0xcb, 0xfa, 0x38, 0xeb, 0x4f, 0x72, 0xc0, 0x03, 0x25, 0x95, - 0x14, 0x34, 0x41, 0x8f, 0x3f, 0xb1, 0x06, 0xf8, 0x7d, 0xd3, 0xd1, - 0x6d, 0xd9, 0xf4, 0x3f, 0xfe, 0x95, 0x23, 0xea, 0x29, 0xa2, 0x06, - 0x7f, 0xf3, 0x4d, 0xd2, 0xae, 0xc8, 0xea, 0xe3, 0x17, 0x7a, 0x2f, - 0x9f, 0xe1, 0x79, 0x06, 0xf2, 0x0d, 0xb0, 0x07, 0xe5, 0x1a, 0x8e, - 0x6f, 0x42, 0xf0, 0x7e, 0xb5, 0x58, 0x94, 0x14, 0xb4, 0x41, 0x87, - 0xdf, 0x2f, 0x4d, 0xc4, 0x50, 0x1d, 0xfc, 0x30, 0x02, 0x94, 0xc8, - 0x76, 0x5e, 0x45, 0x4e, 0xf5, 0xbc, 0x4e, 0x8d, 0xdf, 0x1f, 0x0f, - 0x56, 0x74, 0x67, 0x5d, 0xb5, 0xf1, 0xd3, 0xd1, 0x0b, 0x8b, 0x31, - 0x62, 0xbf, 0xac, 0x0e, 0x01, 0x2b, 0xca, 0x91, 0x8b, 0x47, 0x9b, - 0x9a, 0x33, 0x8b, 0x27, 0xa3, 0x5a, 0xef, 0x62, 0x6b, 0xbf, 0xb5, - 0xf8, 0xeb, 0xbe, 0x71, 0x1d, 0x15, 0xbe, 0x02, 0x77, 0xd5, 0xc2, - 0x0f, 0x5a, 0x04, 0x89, 0x01, 0x45, 0x2e, 0x8d, 0x41, 0xaa, 0x0a, - 0xbf, 0x29, 0x21, 0x5f, 0xae, 0x83, 0x6a, 0xe3, 0x87, 0xea, 0x25, - 0xcb, 0xfc, 0xad, 0x6d, 0x0a, 0x7b, 0x07, 0x19, 0xd7, 0xcc, 0x42, - 0x54, 0xf0, 0x71, 0x9e, 0x4a, 0xef, 0xc1, 0x0c, 0x6d, 0xf1, 0x0b, - 0x4f, 0x30, 0x0c, 0x8d, 0x18, 0xe3, 0x9f, 0x78, 0x6a, 0x69, 0xb5, - 0xf0, 0xfb, 0xae, 0xe5, 0xd1, 0x3a, 0xda, 0xfc, 0x93, 0x6e, 0x88, - 0xbb, 0x54, 0x69, 0x50, 0xe1, 0x27, 0xdf, 0x31, 0xfd, 0x06, 0xab, - 0x8b, 0x9f, 0x48, 0xaf, 0x04, 0x36, 0xd8, 0x3b, 0xe4, 0xf4, 0xd5, - 0xfc, 0xd9, 0x8c, 0x6b, 0xab, 0xdc, 0xd2, 0xc4, 0xe2, 0x40, 0xc5, - 0xaf, 0x3e, 0xc4, 0xf4, 0xb4, 0xef, 0x75, 0xe4, 0x5c, 0xad, 0xf7, - 0x33, 0xa6, 0xc4, 0x6f, 0x0a, 0x1c, 0x80, 0xe5, 0x1f, 0xc7, 0x32, - 0xa1, 0x99, 0x55, 0x0b, 0x3f, 0xe8, 0x2d, 0x24, 0xe7, 0x2c, 0xfd, - 0x1d, 0x1a, 0x79, 0x50, 0x89, 0x9f, 0x7c, 0xc7, 0xd2, 0x3e, 0xd0, - 0xea, 0xe2, 0xef, 0x9f, 0x2b, 0x0e, 0x98, 0x64, 0xbe, 0xcf, 0x6b, - 0x96, 0xb9, 0xc1, 0xf7, 0x12, 0x8c, 0x0b, 0x6d, 0xf7, 0x23, 0x74, - 0xb2, 0x0b, 0xbb, 0x80, 0x34, 0xd4, 0x5e, 0x5a, 0x81, 0x6e, 0xea, - 0x5f, 0x80, 0xf1, 0xdf, 0x4e, 0x26, 0x4a, 0x81, 0x1e, 0x89, 0x73, - 0x37, 0xe5, 0xf3, 0xae, 0x6f, 0x17, 0x8a, 0x52, 0x58, 0xf5, 0xf0, - 0xb7, 0x39, 0x25, 0x6d, 0x52, 0xe0, 0x52, 0x91, 0x46, 0x8b, 0x8d, - 0xf1, 0x97, 0x4e, 0x11, 0x05, 0x13, 0x98, 0xad, 0xef, 0x97, 0x04, - 0xbc, 0x6a, 0xe2, 0xef, 0x70, 0x84, 0x47, 0x79, 0xb4, 0xd2, 0xc1, - 0xa3, 0xd0, 0x2a, 0x95, 0xad, 0x60, 0xeb, 0x7f, 0x3c, 0x40, 0x79, - 0x03, 0x4d, 0x64, 0x83, 0x88, 0x91, 0x80, 0x24, 0x85, 0xb0, 0x43, - 0xac, 0xf5, 0x1f, 0x8c, 0xff, 0xc1, 0x5d, 0xe2, 0x7b, 0xa8, 0x10, - 0x7f, 0xbd, 0xb7, 0x0e, 0xcf, 0x08, 0xa3, 0x82, 0x94, 0x1a, 0x7f, - 0xd1, 0x01, 0xe5, 0x21, 0x62, 0x2f, 0x4b, 0xbf, 0x07, 0x87, 0x11, - 0x2b, 0xc4, 0xc2, 0x9e, 0xd4, 0xaa, 0x35, 0x30, 0x7e, 0x24, 0x9e, - 0x83, 0x19, 0xb4, 0x83, 0x47, 0xdf, 0xca, 0x66, 0xa8, 0xd5, 0xc3, - 0x6f, 0x5e, 0x59, 0x89, 0xa4, 0xad, 0xa8, 0x9c, 0x79, 0xa6, 0x03, - 0xdd, 0xe8, 0xad, 0xe8, 0xc3, 0xfc, 0xfe, 0x5a, 0x86, 0x2a, 0x85, - 0x3f, 0xcf, 0xbd, 0x6f, 0xe8, 0x17, 0x5c, 0x7a, 0x18, 0x96, 0x82, - 0x2a, 0xe6, 0x69, 0x6d, 0x2d, 0xd5, 0xf3, 0xbf, 0xfc, 0x45, 0xb2, - 0x21, 0x82, 0xbb, 0xf9, 0x8f, 0xa2, 0xe8, 0xe3, 0xee, 0xa3, 0xa3, - 0x44, 0xb4, 0x62, 0xa8, 0x35, 0x00, 0x3f, 0xba, 0xf4, 0x52, 0x2d, - 0x41, 0x5b, 0x57, 0x3c, 0x53, 0x7e, 0x79, 0xb5, 0xf0, 0x9b, 0xe2, - 0x6f, 0xaa, 0x3a, 0x2d, 0xdc, 0x83, 0xf0, 0x3b, 0xe4, 0x1a, 0x84, - 0xa1, 0xc1, 0x25, 0x4e, 0x7b, 0x60, 0x68, 0x65, 0x75, 0x6f, 0xca, - 0x00, 0xea, 0x02, 0x5d, 0x0f, 0xa2, 0x98, 0xff, 0x2d, 0xd9, 0x55, - 0xe0, 0xba, 0xbd, 0x39, 0x81, 0x36, 0x23, 0x35, 0xfe, 0xe2, 0xe3, - 0x4a, 0x05, 0x82, 0xc2, 0x90, 0x32, 0xfc, 0x84, 0x78, 0x30, 0x32, - 0x18, 0xc6, 0x9f, 0x55, 0x17, 0x81, 0xe0, 0xe7, 0xc1, 0xbd, 0x0d, - 0xee, 0xbd, 0x79, 0xe5, 0xd1, 0x9f, 0xd5, 0xc2, 0xdf, 0x1a, 0x17, - 0xa1, 0x70, 0x8c, 0xe2, 0x18, 0xc5, 0x41, 0xb9, 0xc8, 0x21, 0x4b, - 0x41, 0xe1, 0x87, 0x79, 0x74, 0x92, 0x4e, 0x7b, 0x22, 0x73, 0x99, - 0xdd, 0x9b, 0x2a, 0xc4, 0xe4, 0x20, 0xde, 0xa6, 0x91, 0x22, 0x15, - 0xfd, 0x1f, 0xe9, 0xfe, 0x78, 0xfb, 0xb2, 0x00, 0x16, 0xfe, 0x63, - 0x5d, 0x94, 0x0a, 0x04, 0x45, 0x27, 0x0f, 0x07, 0x45, 0x93, 0x8d, - 0xb1, 0x71, 0x57, 0x74, 0xab, 0xd8, 0x18, 0xbf, 0xb3, 0x98, 0x47, - 0x97, 0x86, 0x42, 0x37, 0x9e, 0xa7, 0x1c, 0x66, 0x01, 0xff, 0x56, - 0x95, 0xeb, 0xbb, 0x05, 0xf7, 0xb4, 0xf8, 0xeb, 0xe2, 0x6e, 0x5d, - 0x7d, 0xb8, 0x63, 0xdd, 0x14, 0xc5, 0x29, 0x17, 0xfe, 0xab, 0x9d, - 0xa8, 0x98, 0x1e, 0xcd, 0xc6, 0x99, 0x26, 0x14, 0xa2, 0xc2, 0x37, - 0xc5, 0xd7, 0xab, 0xe6, 0xbf, 0x8a, 0xa2, 0x4e, 0x2b, 0xd1, 0xd9, - 0x60, 0xaa, 0xc7, 0x3f, 0xff, 0x29, 0x05, 0x52, 0x27, 0x9d, 0x2a, - 0x57, 0xb3, 0x9b, 0xfe, 0x0f, 0x73, 0xd5, 0x8e, 0xf6, 0xb7, 0x82, - 0xa9, 0x5f, 0x95, 0xce, 0xc5, 0x3a, 0xc6, 0x7f, 0x7b, 0xd9, 0x71, - 0x3c, 0xec, 0xbd, 0x9d, 0x87, 0xd4, 0xe2, 0x2b, 0xe0, 0x2f, 0x53, - 0x6d, 0x37, 0xbc, 0xc7, 0x6b, 0xf0, 0x43, 0xf3, 0xd6, 0x0a, 0xad, - 0x01, 0x56, 0x17, 0xbf, 0x47, 0xf8, 0x02, 0xbc, 0xdf, 0x2c, 0x44, - 0xe2, 0x26, 0x5d, 0xe1, 0x4f, 0x58, 0x10, 0xa2, 0x2e, 0x37, 0x8c, - 0x36, 0xc6, 0xc0, 0x17, 0xa0, 0x19, 0x28, 0x35, 0xe3, 0x7f, 0xdd, - 0x59, 0xc5, 0xd4, 0x59, 0x83, 0xbf, 0x5c, 0xcd, 0x6e, 0xf1, 0xfb, - 0xed, 0x27, 0xb8, 0x41, 0xf3, 0xb1, 0x5f, 0xb3, 0x88, 0x0f, 0xe3, - 0xdf, 0x00, 0xf0, 0x7f, 0x56, 0xce, 0xd3, 0x62, 0x57, 0x1f, 0x3f, - 0xc8, 0x0b, 0xd7, 0xb5, 0xa3, 0x7a, 0x5b, 0x3a, 0x0f, 0x30, 0xbd, - 0x90, 0xa3, 0xfe, 0xa2, 0x48, 0xef, 0x20, 0x66, 0x18, 0x6e, 0x0c, - 0xc2, 0x5f, 0x80, 0x86, 0xa5, 0x5a, 0xf9, 0x2f, 0xec, 0x08, 0xaa, - 0xd2, 0xed, 0xc2, 0x76, 0x8b, 0x9f, 0x4b, 0x75, 0x11, 0x27, 0x55, - 0xd7, 0x10, 0x9f, 0xaa, 0x29, 0x2d, 0x19, 0xff, 0x4d, 0x1d, 0x0f, - 0xe0, 0x91, 0xa5, 0x20, 0x41, 0xd5, 0x3b, 0x57, 0xa3, 0xfd, 0x0f, - 0x3a, 0x9a, 0x9d, 0x3d, 0x57, 0x3b, 0x69, 0xad, 0x35, 0xe6, 0x78, - 0x76, 0x06, 0xcc, 0xb8, 0xfc, 0xe6, 0x9d, 0xcb, 0xfe, 0x52, 0xad, - 0x5b, 0x18, 0x72, 0x3c, 0xfb, 0x80, 0xb0, 0x20, 0x35, 0x3e, 0x3b, - 0x7b, 0x0b, 0x73, 0x43, 0x97, 0xcf, 0xbc, 0x32, 0xcd, 0x40, 0xa9, - 0xc5, 0xaf, 0x72, 0xd2, 0x4f, 0x83, 0x7b, 0xfc, 0x51, 0xdf, 0xa2, - 0x83, 0x2d, 0xe0, 0x44, 0xec, 0x1b, 0x5a, 0x1d, 0x83, 0x28, 0xff, - 0x74, 0xc5, 0xe2, 0xc9, 0x95, 0x58, 0xd5, 0x5f, 0xaa, 0xd1, 0xff, - 0x81, 0x57, 0x6f, 0xfd, 0xce, 0x80, 0xda, 0x41, 0x82, 0x99, 0x43, - 0xad, 0x86, 0x3a, 0x75, 0xb5, 0x4f, 0x50, 0x70, 0x70, 0x7d, 0xfa, - 0xd3, 0x40, 0xb6, 0xbe, 0xa7, 0xd9, 0x16, 0xa4, 0x3e, 0x25, 0x44, - 0x8b, 0x3f, 0x3c, 0x0b, 0xe9, 0x6d, 0xfb, 0xdd, 0xe3, 0x37, 0x2f, - 0x47, 0x05, 0xbd, 0x41, 0xf3, 0xb1, 0x43, 0xfb, 0x4e, 0x2a, 0xff, - 0xc1, 0xbc, 0x77, 0xaf, 0xae, 0xfd, 0x5b, 0x54, 0xb4, 0xee, 0x36, - 0xe1, 0xfc, 0x91, 0x00, 0x8c, 0x52, 0x84, 0xd1, 0x3f, 0x22, 0x95, - 0x26, 0x41, 0x83, 0x1f, 0x44, 0x8a, 0x1b, 0xba, 0x0d, 0x29, 0xee, - 0xf1, 0x73, 0xc3, 0x5d, 0x15, 0x13, 0xb0, 0x1c, 0xa8, 0xe7, 0x1b, - 0xc5, 0x6f, 0x4e, 0xca, 0xa7, 0x2e, 0xa2, 0xc4, 0xf0, 0xdf, 0xc3, - 0x1f, 0xb8, 0x46, 0xbd, 0xf6, 0x73, 0x07, 0x21, 0xd7, 0x12, 0x59, - 0x4a, 0x53, 0xe3, 0x0f, 0x98, 0x57, 0x8c, 0x1e, 0xac, 0xd2, 0x09, - 0x92, 0x0f, 0xc1, 0xdf, 0x2a, 0x07, 0x6d, 0x9c, 0x54, 0xa2, 0x30, - 0x39, 0xa2, 0x41, 0x92, 0xff, 0xe1, 0x40, 0x39, 0x79, 0xfd, 0x8f, - 0xab, 0x16, 0x7e, 0xdf, 0xa0, 0x20, 0xe6, 0x7a, 0x8c, 0x2f, 0xeb, - 0x40, 0x47, 0x72, 0x18, 0x77, 0x20, 0x6b, 0x05, 0x21, 0x58, 0xe7, - 0x1d, 0x53, 0x3c, 0x09, 0x49, 0x08, 0x0a, 0xfc, 0xf5, 0x88, 0xfa, - 0xd7, 0x75, 0x40, 0x68, 0x1d, 0x4d, 0x52, 0xe4, 0xf5, 0x8f, 0x87, - 0xe0, 0xf7, 0x49, 0xe3, 0xcf, 0xfc, 0x83, 0xe7, 0xd3, 0x74, 0x53, - 0x50, 0x79, 0xfe, 0x03, 0xdb, 0x1f, 0x0a, 0x14, 0x1e, 0xa4, 0xaa, - 0x81, 0x7f, 0x94, 0xcd, 0xc6, 0x5c, 0xa7, 0xc3, 0xf9, 0x0b, 0x55, - 0xf9, 0xe1, 0xe9, 0xb6, 0x3d, 0x60, 0x4c, 0xd0, 0x69, 0xb3, 0xe4, - 0x52, 0x5b, 0x11, 0x1a, 0x2e, 0xd4, 0x2f, 0x71, 0x2b, 0xd6, 0x7f, - 0x14, 0xf2, 0xdf, 0x46, 0x50, 0xff, 0x97, 0x6c, 0xee, 0x28, 0xfd, - 0xc1, 0x8d, 0xfe, 0x5b, 0xed, 0x51, 0x6a, 0x58, 0x41, 0x79, 0xb1, - 0xd2, 0x19, 0x95, 0x1e, 0x3f, 0x1c, 0xf3, 0x8d, 0x8a, 0x97, 0x49, - 0x0c, 0xa8, 0x06, 0x7e, 0x18, 0xc4, 0x58, 0x4c, 0xd7, 0x56, 0x06, - 0x96, 0x83, 0x78, 0x5b, 0x33, 0xd6, 0x13, 0x48, 0x20, 0x46, 0x31, - 0x9a, 0x60, 0xb4, 0xfe, 0xc3, 0xdf, 0x16, 0xcf, 0x7f, 0xd4, 0xe3, - 0x37, 0x5e, 0x41, 0xe4, 0x88, 0x97, 0x56, 0xa4, 0xf4, 0xd2, 0xcc, - 0xc0, 0x0f, 0xae, 0x34, 0x91, 0xe3, 0x6d, 0x2a, 0xcd, 0x79, 0x0e, - 0x3f, 0xd8, 0xd5, 0xe4, 0x51, 0x93, 0xdb, 0x9a, 0xf7, 0x20, 0xca, - 0xf5, 0x3f, 0xd5, 0xf2, 0x1f, 0xfc, 0x81, 0xca, 0x7f, 0x33, 0xb4, - 0xbe, 0x21, 0xec, 0x6a, 0xcf, 0xb2, 0xa6, 0xe4, 0x02, 0x7b, 0x41, - 0xb2, 0xfe, 0x63, 0x55, 0xe9, 0x3f, 0x42, 0xd6, 0x39, 0xd0, 0x4d, - 0x7a, 0xc8, 0xb7, 0xe7, 0xf0, 0xe3, 0x89, 0xa5, 0x6b, 0x25, 0xdd, - 0x72, 0x53, 0x73, 0xfc, 0xca, 0xf5, 0x5f, 0x55, 0x77, 0x63, 0x56, - 0xd8, 0x18, 0x86, 0x69, 0x7d, 0x43, 0xa8, 0xdc, 0x3f, 0xe0, 0xd0, - 0x6c, 0xa0, 0xc6, 0x36, 0x42, 0x08, 0x6a, 0xfd, 0x5f, 0x68, 0x5a, - 0x25, 0x9d, 0x0d, 0x7b, 0x10, 0xff, 0xe8, 0x62, 0x6a, 0x7d, 0x66, - 0x60, 0xc6, 0xc6, 0x3a, 0xff, 0xf9, 0xbf, 0x14, 0x34, 0xfa, 0xdf, - 0xc6, 0x8b, 0x25, 0x06, 0x78, 0x0c, 0x7f, 0x8b, 0x4c, 0x54, 0x25, - 0xee, 0x3e, 0x60, 0xe3, 0xd7, 0xda, 0x3f, 0x2c, 0x17, 0xf3, 0xc7, - 0x59, 0xad, 0xe3, 0x0d, 0xf6, 0x43, 0x7a, 0x2c, 0x68, 0xf5, 0xff, - 0x8d, 0x33, 0xaa, 0x90, 0xb0, 0x1b, 0xc3, 0x53, 0xf8, 0xcd, 0x6f, - 0x55, 0x48, 0x4a, 0x1d, 0x36, 0x7e, 0xad, 0x8b, 0x6d, 0x7a, 0xd4, - 0x44, 0xa6, 0xce, 0x2d, 0x1c, 0x96, 0x94, 0x54, 0xa6, 0xa1, 0x44, - 0x72, 0x7a, 0xc8, 0x21, 0xe5, 0xee, 0x43, 0xd7, 0xb4, 0xcc, 0x34, - 0x95, 0x8f, 0xf6, 0x76, 0xd6, 0xcc, 0xcc, 0x54, 0x50, 0x82, 0xf9, - 0xa7, 0x2a, 0x95, 0x48, 0x10, 0x3a, 0x62, 0x5a, 0x95, 0x05, 0x5c, - 0xb5, 0xf0, 0xc7, 0xe7, 0xca, 0x6a, 0x6d, 0x43, 0xfc, 0xc5, 0xc7, - 0xf4, 0xe6, 0x5d, 0x0c, 0xfc, 0x78, 0xa4, 0x54, 0x1d, 0xc1, 0x14, - 0xba, 0x0a, 0x0e, 0x65, 0x92, 0x46, 0xd4, 0x97, 0x2d, 0x29, 0xd2, - 0x71, 0xc9, 0x83, 0x2c, 0x6f, 0xbd, 0xf0, 0x38, 0x16, 0x45, 0x14, - 0x47, 0x28, 0xc3, 0x38, 0x23, 0x99, 0xdf, 0xc4, 0x0a, 0xb2, 0x83, - 0x4f, 0xa0, 0xc6, 0x48, 0x13, 0x88, 0x48, 0x8e, 0xfe, 0x10, 0x6a, - 0x9d, 0xf4, 0x52, 0x1d, 0xfc, 0x01, 0x99, 0x8a, 0x65, 0x0d, 0x43, - 0xfc, 0xc7, 0x3a, 0x31, 0x6c, 0x31, 0xf4, 0xf8, 0x83, 0xd5, 0x1b, - 0xa5, 0xcd, 0x33, 0xc0, 0xce, 0x5e, 0x7e, 0xa2, 0xc2, 0xb5, 0x1a, - 0x9e, 0x46, 0x12, 0x35, 0x84, 0x72, 0x6b, 0x75, 0xdb, 0x0f, 0x6d, - 0xb6, 0x64, 0xc5, 0x84, 0xd9, 0xc2, 0x28, 0x7a, 0x8d, 0x42, 0x35, - 0xf0, 0xc3, 0xc9, 0xd1, 0xb2, 0x5a, 0xc5, 0x10, 0x3f, 0xd3, 0x57, - 0xef, 0x43, 0xf1, 0x47, 0x9e, 0x47, 0xbf, 0xff, 0xce, 0xc4, 0xdf, - 0x6c, 0xb3, 0x38, 0x09, 0x57, 0xe2, 0x4f, 0x2c, 0x43, 0xe8, 0x0c, - 0x9d, 0x74, 0xff, 0x97, 0xf0, 0x77, 0xce, 0x42, 0x55, 0xf2, 0xd1, - 0x6d, 0x8f, 0x84, 0xff, 0x89, 0x71, 0x29, 0x54, 0x53, 0xa4, 0xc6, - 0x6f, 0x7e, 0xcf, 0x85, 0xb2, 0x2e, 0xb3, 0xf0, 0xfb, 0xbc, 0x5d, - 0x22, 0x6a, 0x33, 0x14, 0xf8, 0xfd, 0x33, 0xd0, 0x6f, 0xae, 0x52, - 0xea, 0x38, 0x54, 0xc2, 0x4f, 0x4f, 0x54, 0x09, 0xe8, 0x45, 0xfc, - 0x3c, 0xf8, 0x74, 0x92, 0x0c, 0x22, 0xe0, 0x2f, 0x06, 0xf6, 0x0e, - 0xd2, 0x33, 0x2e, 0x53, 0xa5, 0x5b, 0x3d, 0x75, 0x3e, 0x3d, 0x9c, - 0x77, 0x75, 0x15, 0x3a, 0x28, 0x6b, 0x1c, 0x1f, 0x09, 0xbf, 0x79, - 0x53, 0x29, 0xfd, 0x8d, 0x1a, 0x7f, 0x64, 0x3e, 0x2a, 0x49, 0xb5, - 0xb1, 0xf0, 0xf7, 0xbd, 0x4e, 0x95, 0x70, 0x0a, 0xfc, 0x71, 0xd7, - 0x9c, 0x5f, 0x9e, 0x97, 0x4c, 0x38, 0x25, 0xfc, 0xf4, 0x44, 0x95, - 0x5e, 0x17, 0x89, 0xc8, 0x14, 0xb4, 0x59, 0x32, 0x88, 0x80, 0xbf, - 0xc0, 0x6f, 0xa1, 0x27, 0xf0, 0xe1, 0x7c, 0x9a, 0xf5, 0xd4, 0x1e, - 0x95, 0x83, 0x9f, 0x71, 0x9f, 0x2a, 0xdd, 0xff, 0x3e, 0xb1, 0x9b, - 0x9f, 0x22, 0x5f, 0xc4, 0xdf, 0x27, 0x1f, 0xdd, 0x51, 0xa8, 0x47, - 0x1f, 0xad, 0xfd, 0x4f, 0xae, 0x5c, 0x51, 0x87, 0x81, 0xbf, 0xce, - 0xa2, 0x07, 0xe8, 0x50, 0x2f, 0x16, 0xfe, 0x96, 0x99, 0xc8, 0x25, - 0xae, 0xb6, 0x29, 0xf0, 0x27, 0x57, 0x15, 0xbd, 0xb6, 0x8e, 0x1a, - 0xff, 0xcb, 0xf8, 0xe9, 0x89, 0x2a, 0x70, 0xa2, 0x58, 0x90, 0xea, - 0x15, 0xf0, 0x17, 0x78, 0x36, 0x8c, 0x04, 0x5d, 0x1b, 0xcf, 0xdd, - 0x7d, 0xf9, 0xc6, 0xe5, 0x4d, 0x63, 0x94, 0x56, 0x0c, 0x2a, 0xa1, - 0xdb, 0x95, 0xb3, 0xac, 0xad, 0xdc, 0xb6, 0xae, 0x7f, 0x4c, 0x5c, - 0x6d, 0x7d, 0x85, 0x5b, 0x68, 0x4f, 0xb9, 0xcf, 0xc4, 0xef, 0xa8, - 0xd8, 0xa7, 0xf3, 0xc4, 0xf5, 0x30, 0xfc, 0xb1, 0x57, 0x8f, 0xb6, - 0x61, 0xe0, 0xef, 0x79, 0x09, 0x55, 0xce, 0x0b, 0x51, 0xe3, 0x2f, - 0x83, 0x29, 0xbc, 0xdf, 0x82, 0x4a, 0x74, 0xbe, 0x8b, 0x84, 0x81, - 0x1e, 0xa1, 0xbe, 0x05, 0x5d, 0x88, 0x9c, 0x8a, 0xe8, 0x61, 0x5d, - 0x35, 0xc0, 0x0f, 0xf1, 0xf2, 0x8f, 0x05, 0xc7, 0x60, 0x77, 0x56, - 0xab, 0x1d, 0x85, 0xd2, 0xfa, 0xcf, 0xba, 0xed, 0x42, 0xae, 0x93, - 0xfd, 0xa4, 0x67, 0xcb, 0xa1, 0x32, 0xc7, 0x2a, 0x71, 0x40, 0xe3, - 0x72, 0x43, 0x2c, 0xc1, 0xc3, 0xf0, 0x37, 0xda, 0x29, 0x6e, 0x63, - 0x50, 0xe1, 0x07, 0xe7, 0x53, 0x5f, 0xb5, 0x0b, 0x52, 0xe3, 0x07, - 0x17, 0x5d, 0xa6, 0xe1, 0x37, 0x50, 0x11, 0x55, 0x20, 0xc9, 0xf8, - 0xfb, 0xfe, 0x84, 0xd6, 0xfb, 0x46, 0xfe, 0x2c, 0x6e, 0x7e, 0xaa, - 0x29, 0xfe, 0x8a, 0xd2, 0x3d, 0x0b, 0x53, 0x56, 0x5d, 0xa8, 0x42, - 0xae, 0x34, 0xd9, 0x28, 0x4a, 0xf1, 0xfd, 0x87, 0x0f, 0x4d, 0x3d, - 0xe7, 0xe4, 0xc5, 0x83, 0x12, 0x14, 0x8b, 0x11, 0x59, 0x05, 0x55, - 0xc8, 0x29, 0xf9, 0x1c, 0xc6, 0xef, 0x50, 0x98, 0xf1, 0xd3, 0xd9, - 0xcb, 0xc3, 0xf0, 0x77, 0xdc, 0x4c, 0x4d, 0x16, 0x94, 0xf8, 0x3b, - 0x5f, 0x40, 0x8e, 0x14, 0x6f, 0x2d, 0x7e, 0x54, 0x30, 0xb1, 0xd3, - 0x1e, 0xc5, 0x69, 0x16, 0x12, 0x7e, 0xd3, 0x1c, 0x67, 0x59, 0x22, - 0x57, 0x2f, 0x93, 0x5a, 0xf5, 0xd7, 0x10, 0x7f, 0xf1, 0xb2, 0x16, - 0xde, 0x9c, 0x6f, 0xd7, 0x74, 0x87, 0xf2, 0x68, 0x41, 0x55, 0xff, - 0x6f, 0x8a, 0x4c, 0xa7, 0xe7, 0x3b, 0x2b, 0x16, 0x23, 0xc2, 0x7a, - 0x27, 0x6f, 0x29, 0x44, 0x85, 0x16, 0x7f, 0x8a, 0x5f, 0xb1, 0x8d, - 0x83, 0xca, 0x17, 0x0f, 0xc3, 0x9f, 0x56, 0x42, 0xff, 0xae, 0x28, - 0x1c, 0xec, 0x4e, 0xdc, 0xdd, 0x9c, 0xd3, 0xe1, 0x47, 0x79, 0x5f, - 0x96, 0xa3, 0x63, 0x92, 0xfa, 0x4c, 0xc2, 0x1f, 0xb2, 0x8f, 0x28, - 0x9c, 0xa7, 0x97, 0x09, 0xae, 0x86, 0x6a, 0x8a, 0x7f, 0xad, 0x30, - 0x26, 0x84, 0x58, 0x1d, 0xa2, 0xaf, 0x26, 0x1d, 0x7e, 0xb2, 0xfe, - 0xef, 0xb4, 0xf8, 0x70, 0x5a, 0xf9, 0x3f, 0x60, 0x4a, 0x01, 0x5d, - 0x23, 0x7a, 0xb4, 0xfe, 0x4f, 0x96, 0x03, 0x14, 0x85, 0x83, 0xea, - 0x1f, 0xc6, 0xe9, 0xf0, 0x17, 0x97, 0xf3, 0x2e, 0x94, 0x2b, 0x8f, - 0x11, 0x12, 0xfe, 0xa1, 0xb7, 0x49, 0x23, 0xea, 0x46, 0xed, 0xe1, - 0x6a, 0x88, 0x9f, 0xda, 0xf6, 0x35, 0xdf, 0x8d, 0x9c, 0x92, 0xa7, - 0x6c, 0x0d, 0x7e, 0xb0, 0x2c, 0x25, 0x3d, 0x95, 0x66, 0xfe, 0x57, - 0x77, 0x56, 0x09, 0x3a, 0x1a, 0xfe, 0xe8, 0xf8, 0xd3, 0xa4, 0xc9, - 0xbc, 0x5c, 0x38, 0x5c, 0xfd, 0xe4, 0x68, 0x19, 0x2d, 0xfe, 0x8c, - 0x75, 0xe5, 0xc8, 0x65, 0x7d, 0x42, 0x87, 0xdf, 0x67, 0x19, 0x4f, - 0x1c, 0xc2, 0xd6, 0x5b, 0xcb, 0x0b, 0x06, 0x00, 0x35, 0xc4, 0x2f, - 0xbd, 0x23, 0x51, 0xa1, 0x9b, 0xd3, 0xca, 0x3f, 0x70, 0x8a, 0xc4, - 0x40, 0x3d, 0x7e, 0xd8, 0x49, 0x2a, 0x98, 0x5c, 0x3e, 0x1a, 0xfe, - 0x8e, 0x92, 0x07, 0x2a, 0xb9, 0x70, 0xb8, 0xfa, 0x89, 0x36, 0x4b, - 0x8b, 0xdf, 0x12, 0xb2, 0xae, 0x9c, 0x57, 0x1c, 0x56, 0x41, 0xf1, - 0xb7, 0x39, 0x2a, 0xd6, 0xfb, 0xd0, 0xdb, 0xc2, 0x12, 0xe0, 0xa3, - 0xe2, 0xef, 0x76, 0x4b, 0x5e, 0xb8, 0xd1, 0xe2, 0xa7, 0x85, 0xd1, - 0xe2, 0x87, 0x15, 0x78, 0xeb, 0xa3, 0xe3, 0x97, 0x83, 0x54, 0x38, - 0xf0, 0x2c, 0xb5, 0xa5, 0x31, 0x0b, 0x3f, 0x17, 0xba, 0xcd, 0x85, - 0xe4, 0xc3, 0x2a, 0x28, 0xfe, 0x37, 0x8b, 0xc5, 0x85, 0xff, 0x36, - 0xa7, 0x04, 0xd7, 0xd9, 0x8f, 0x8a, 0x5f, 0xe9, 0xe6, 0x45, 0x8b, - 0x3f, 0xfc, 0x02, 0x1b, 0xbf, 0x79, 0xb9, 0xa7, 0xf1, 0xb7, 0xcb, - 0x12, 0x1f, 0xa4, 0xc7, 0x2f, 0x30, 0x60, 0xa4, 0x7a, 0xfc, 0xf3, - 0xdd, 0x49, 0xf7, 0xc5, 0xe2, 0xba, 0x20, 0x26, 0x00, 0x12, 0x7e, - 0x9c, 0x41, 0x3c, 0x48, 0x78, 0x00, 0xff, 0xa8, 0x12, 0x2c, 0x62, - 0x30, 0xf0, 0x07, 0xed, 0x11, 0x7d, 0x51, 0x78, 0x0a, 0x3f, 0x58, - 0x31, 0x0a, 0x3b, 0x9a, 0x19, 0xf8, 0xb9, 0x8e, 0x9f, 0xb9, 0x44, - 0x1d, 0x86, 0x84, 0x3f, 0xfc, 0x47, 0xc9, 0x61, 0xfa, 0xe8, 0x62, - 0xb2, 0xff, 0x57, 0x9e, 0xff, 0x88, 0x27, 0x68, 0xc9, 0xf8, 0xe9, - 0x96, 0xda, 0x9a, 0xe2, 0x87, 0xe3, 0xae, 0xd6, 0xd6, 0xd3, 0xe3, - 0x07, 0xfd, 0xe7, 0xf7, 0x7d, 0x3d, 0x89, 0x3f, 0x74, 0x1f, 0xd5, - 0x29, 0xb0, 0xf0, 0x9b, 0x3a, 0x6e, 0x73, 0x51, 0x51, 0x44, 0xc4, - 0xff, 0xaa, 0x4b, 0x5a, 0xf8, 0xc7, 0x9d, 0x11, 0x74, 0xd2, 0x6e, - 0xf0, 0xd3, 0x3d, 0x95, 0x46, 0xdf, 0xbf, 0xe4, 0xe6, 0x47, 0x8d, - 0x3f, 0x60, 0x5a, 0xa1, 0x38, 0xd5, 0x55, 0xe3, 0x37, 0xc5, 0x1e, - 0xc7, 0x93, 0x51, 0x3f, 0x0f, 0xe2, 0x37, 0xe1, 0x79, 0xbf, 0xb8, - 0xad, 0x81, 0x85, 0x1f, 0xf3, 0xc7, 0xc6, 0x8b, 0x0c, 0x10, 0xf0, - 0x37, 0xd9, 0x21, 0x9b, 0x7d, 0x79, 0xe3, 0x91, 0x60, 0xb2, 0x5b, - 0xfc, 0x74, 0xe3, 0x1f, 0xb8, 0x56, 0x62, 0xf5, 0xff, 0x92, 0x6b, - 0x49, 0x05, 0xfe, 0x3a, 0xa1, 0x7d, 0x37, 0x14, 0xd2, 0xb3, 0x05, - 0x95, 0xf3, 0xff, 0xc6, 0x3d, 0x92, 0x4f, 0xf3, 0xce, 0x5d, 0x82, - 0x02, 0x4c, 0x2b, 0xff, 0x08, 0x9a, 0x96, 0x1a, 0xe3, 0x0f, 0x3d, - 0x2f, 0xa9, 0x94, 0xd8, 0xf8, 0xb9, 0x5e, 0x19, 0xb6, 0x7d, 0x73, - 0x02, 0x24, 0xfc, 0x09, 0xca, 0xdd, 0xfb, 0x82, 0x5f, 0x04, 0x77, - 0xf8, 0x85, 0x95, 0x70, 0xd3, 0x48, 0xf1, 0xf4, 0x16, 0x25, 0xfe, - 0x80, 0x4f, 0x14, 0x26, 0x24, 0xf8, 0x19, 0xf4, 0x90, 0x96, 0xf5, - 0xc7, 0x7f, 0x72, 0x49, 0x7e, 0x4c, 0x15, 0x8b, 0x31, 0xd6, 0xcf, - 0xaf, 0x54, 0xa0, 0x92, 0x0f, 0xc5, 0x0d, 0xbe, 0x5a, 0xf9, 0x57, - 0xd0, 0x66, 0xd5, 0x14, 0xbf, 0x79, 0x86, 0x4b, 0xda, 0xd5, 0x62, - 0x80, 0x5f, 0xd2, 0x62, 0x09, 0xf8, 0x57, 0x29, 0x8f, 0xf7, 0xc0, - 0x92, 0xe0, 0xad, 0x04, 0x77, 0xf8, 0xf9, 0xaa, 0xe3, 0xe3, 0xc2, - 0x83, 0xc2, 0x46, 0x1e, 0x17, 0x4f, 0x6f, 0x01, 0xfc, 0x4b, 0x05, - 0xf9, 0x0f, 0xcc, 0x5b, 0xe4, 0xd3, 0x6e, 0x55, 0xf3, 0x1c, 0xde, - 0x2e, 0x9d, 0xbd, 0xa9, 0x9e, 0x17, 0xda, 0xf7, 0x25, 0x29, 0xf4, - 0x5f, 0xea, 0x40, 0xbe, 0xe6, 0x9a, 0xe2, 0x8f, 0x94, 0xab, 0xdf, - 0x08, 0xbf, 0x14, 0x08, 0xfe, 0x26, 0x67, 0x14, 0xfe, 0x5f, 0xc8, - 0x0e, 0x88, 0x55, 0xee, 0xf0, 0xdf, 0xcb, 0xbc, 0x72, 0xf7, 0x02, - 0x39, 0x46, 0x3c, 0x8f, 0x8e, 0x31, 0xa8, 0xd8, 0x1a, 0xee, 0xcb, - 0x79, 0xb7, 0x9a, 0x95, 0xaf, 0xb4, 0xf7, 0x19, 0xaf, 0x50, 0x5a, - 0x7f, 0xb1, 0x74, 0x38, 0x3d, 0x45, 0x53, 0x9d, 0xbf, 0x48, 0xce, - 0xe7, 0x7a, 0xd8, 0x34, 0xaa, 0x6e, 0xb2, 0xd1, 0xbd, 0x86, 0xf8, - 0xeb, 0x2c, 0x72, 0xa1, 0x43, 0x74, 0x12, 0x56, 0x2d, 0xfc, 0x2f, - 0xde, 0x47, 0xca, 0x8d, 0x77, 0x78, 0x26, 0x98, 0xd5, 0xc8, 0x0d, - 0x7e, 0xfb, 0xf0, 0xe1, 0x47, 0xc8, 0x6c, 0xf7, 0x7a, 0x4a, 0x3d, - 0x8a, 0xbf, 0xa2, 0x32, 0x6b, 0x55, 0xca, 0xc2, 0xfd, 0xc5, 0x08, - 0x9d, 0x95, 0x4d, 0x3a, 0x94, 0xa7, 0x9a, 0x2b, 0xcd, 0x40, 0x8c, - 0xf2, 0x89, 0xfd, 0x83, 0x2a, 0x10, 0x6d, 0x76, 0x0d, 0xf1, 0xf7, - 0xb9, 0x2a, 0x7b, 0x33, 0xa8, 0x16, 0xfe, 0x97, 0x57, 0xa0, 0x32, - 0x85, 0x12, 0x06, 0x34, 0x01, 0xf7, 0x5f, 0x74, 0x87, 0x3f, 0xde, - 0x14, 0xdc, 0x6f, 0x96, 0xd5, 0x3a, 0x5d, 0x74, 0xea, 0x4f, 0xe6, - 0xff, 0xeb, 0xee, 0x08, 0x2d, 0xf6, 0x6c, 0x57, 0x8f, 0x7b, 0xab, - 0x7e, 0x18, 0xfe, 0xae, 0xd2, 0x62, 0x16, 0x14, 0x2e, 0x81, 0xcc, - 0xfb, 0x95, 0xf8, 0x1e, 0x86, 0x7f, 0xf2, 0x3e, 0x94, 0xa3, 0x5a, - 0x53, 0x4a, 0xae, 0x44, 0x73, 0x17, 0xb9, 0xc3, 0xaf, 0x7b, 0x06, - 0x4a, 0xa8, 0x3f, 0x6c, 0xd5, 0x99, 0x1b, 0x37, 0xce, 0xfc, 0xdd, - 0x60, 0x93, 0xce, 0x1f, 0x09, 0x35, 0x9b, 0xff, 0xfd, 0x35, 0x07, - 0x55, 0x4e, 0x54, 0xc9, 0xf7, 0x0f, 0xc3, 0xbf, 0xfa, 0x9a, 0xc6, - 0x7b, 0x57, 0x8f, 0x1c, 0xb4, 0x23, 0x5d, 0xa2, 0x4d, 0xb9, 0x71, - 0x0e, 0xf4, 0x50, 0x0f, 0xc1, 0xcf, 0x91, 0x3d, 0x2b, 0x0c, 0x93, - 0x3d, 0xd8, 0x15, 0xe9, 0xde, 0xb0, 0x9b, 0x6c, 0xb4, 0x74, 0xb3, - 0x90, 0x55, 0x23, 0xfc, 0xf7, 0x8e, 0x96, 0x49, 0x4e, 0x0a, 0xb8, - 0x6a, 0xe1, 0xbf, 0x7d, 0xbc, 0xea, 0xd6, 0x70, 0x55, 0xa6, 0xff, - 0x07, 0xe8, 0xca, 0x49, 0x89, 0x36, 0x54, 0xd8, 0xd5, 0xf6, 0x70, - 0xfc, 0xcc, 0xd0, 0x3a, 0x79, 0xbb, 0x6d, 0xcf, 0xb2, 0xa1, 0xcd, - 0xc0, 0x79, 0x77, 0x2c, 0x4e, 0x77, 0xb5, 0x58, 0x54, 0x47, 0x0f, - 0xd5, 0x09, 0x9f, 0x60, 0xdd, 0x63, 0x03, 0x37, 0x0f, 0x83, 0x82, - 0xe8, 0x97, 0xa3, 0x5c, 0x94, 0xe1, 0x24, 0xb7, 0xc7, 0xba, 0x40, - 0xe7, 0xbd, 0xaa, 0xf9, 0x2f, 0x9e, 0xde, 0x3b, 0x14, 0xd6, 0x6f, - 0xd5, 0xc0, 0xef, 0x2c, 0xd5, 0xf9, 0x20, 0x4f, 0xb8, 0x55, 0x55, - 0xca, 0x58, 0xdd, 0xab, 0x39, 0xfe, 0xba, 0x83, 0x0e, 0x56, 0x10, - 0xab, 0x84, 0xcc, 0x5e, 0x6b, 0x85, 0x07, 0xaa, 0x3c, 0x68, 0x71, - 0xa6, 0xf0, 0x25, 0x17, 0x2a, 0xe8, 0x38, 0x98, 0x49, 0x7d, 0x0f, - 0x68, 0xfc, 0xdd, 0xd6, 0x63, 0x6d, 0xb6, 0xe5, 0xe4, 0x79, 0xaf, - 0x6a, 0xfe, 0x8b, 0x5f, 0xb6, 0xbb, 0x79, 0x8d, 0xf0, 0x23, 0xc1, - 0x07, 0xb3, 0x32, 0x60, 0x79, 0x10, 0x79, 0x02, 0xbf, 0x69, 0x64, - 0x3e, 0x02, 0xff, 0x57, 0xef, 0xee, 0xba, 0x79, 0xe9, 0x3b, 0x06, - 0xfe, 0xba, 0x23, 0x4f, 0x54, 0x61, 0xe6, 0xc0, 0xde, 0xe6, 0x0b, - 0x98, 0xe1, 0x85, 0xa9, 0xbe, 0x2c, 0xfc, 0xd5, 0x0f, 0xc4, 0x52, - 0x66, 0xa7, 0xd2, 0x11, 0x57, 0x83, 0x85, 0x8a, 0xf5, 0xbf, 0x34, - 0xed, 0x8e, 0x45, 0xd1, 0x13, 0xad, 0xde, 0x71, 0xcd, 0x28, 0xf9, - 0x1c, 0x10, 0x6a, 0x9b, 0xf4, 0x28, 0xf8, 0xc3, 0x4f, 0x20, 0xd7, - 0xb1, 0x31, 0x81, 0x26, 0x53, 0xe0, 0x98, 0x7c, 0x91, 0xa1, 0x83, - 0x6d, 0xf2, 0x12, 0x25, 0x98, 0x14, 0xa1, 0xbc, 0x35, 0x43, 0xc3, - 0x40, 0x41, 0x3a, 0x6e, 0x4d, 0x1e, 0x2f, 0xfa, 0xaa, 0x7a, 0x64, - 0xfc, 0xc4, 0x52, 0x46, 0xb5, 0x06, 0xa9, 0xda, 0x93, 0xdd, 0x51, - 0xbb, 0x63, 0x55, 0x58, 0xc3, 0x89, 0xd7, 0x98, 0x42, 0xe0, 0xd0, - 0x58, 0x3e, 0x07, 0x06, 0x73, 0xd0, 0xc6, 0x9e, 0xff, 0xd2, 0x60, - 0x88, 0x1f, 0xb4, 0x10, 0xdf, 0x0a, 0xe6, 0xfe, 0xe6, 0x69, 0x77, - 0x04, 0xfc, 0xbe, 0xb2, 0x93, 0x27, 0x30, 0x29, 0x73, 0x9d, 0x1c, - 0x44, 0x57, 0x1c, 0x6b, 0xbf, 0x72, 0x72, 0xa1, 0x6a, 0x52, 0xaa, - 0x0d, 0x4f, 0x45, 0x44, 0xb4, 0xff, 0xef, 0x9f, 0x84, 0x60, 0xac, - 0xff, 0x50, 0x52, 0x30, 0xf1, 0xe3, 0x79, 0x3d, 0xa2, 0xdb, 0x15, - 0x1a, 0xed, 0xd4, 0x7d, 0x7c, 0x6d, 0x8f, 0xaa, 0xcf, 0x3f, 0x31, - 0x47, 0x45, 0x4b, 0x0f, 0xd4, 0xe1, 0x0f, 0x88, 0x4b, 0xfd, 0x82, - 0xf8, 0x07, 0x0b, 0x55, 0xec, 0xd6, 0x34, 0x85, 0x0e, 0x59, 0x60, - 0xb5, 0x5a, 0xa7, 0x0e, 0xd0, 0x9e, 0x24, 0xe6, 0xc1, 0xf0, 0x07, - 0xf0, 0xc7, 0xe6, 0x2b, 0xfc, 0x7f, 0xea, 0x9c, 0x17, 0xd6, 0x5b, - 0xe9, 0x92, 0x96, 0x61, 0x74, 0x0f, 0xd4, 0xbc, 0xc3, 0x14, 0xb9, - 0xe9, 0xbe, 0xd8, 0x4d, 0x9e, 0x9f, 0x2e, 0xad, 0xb0, 0xd4, 0x1b, - 0x7e, 0xd2, 0x25, 0x64, 0xe6, 0x5a, 0xfb, 0xb3, 0xf6, 0xce, 0xd4, - 0x0e, 0x0a, 0x0e, 0xd6, 0xf9, 0xca, 0xaa, 0x61, 0x80, 0xd5, 0x2d, - 0x50, 0x08, 0x75, 0x4c, 0xcb, 0x4c, 0xc5, 0xfd, 0x73, 0x40, 0xaa, - 0xc6, 0x20, 0xc2, 0x0d, 0x7e, 0x70, 0x3d, 0x2d, 0xd9, 0xf9, 0x89, - 0xf8, 0xcd, 0x0d, 0x69, 0x67, 0x9e, 0x90, 0x87, 0xe4, 0x53, 0xfa, - 0xb4, 0x0f, 0x54, 0xe3, 0x37, 0xc5, 0x1e, 0x76, 0x22, 0xfb, 0xc1, - 0xe5, 0xc4, 0x3f, 0x60, 0x31, 0x3d, 0x3f, 0xc5, 0x3c, 0xfc, 0x3b, - 0xde, 0x99, 0x63, 0xb3, 0x1d, 0xcf, 0xaf, 0x40, 0xce, 0x6b, 0xb3, - 0xb5, 0x9e, 0x43, 0x7c, 0xc3, 0x93, 0xd7, 0xe0, 0x91, 0x75, 0x8f, - 0x75, 0x76, 0xdf, 0x16, 0x2a, 0xb3, 0x5e, 0x53, 0x50, 0xdf, 0xd9, - 0x16, 0x4b, 0xca, 0xa0, 0x08, 0x22, 0x73, 0x98, 0x02, 0xe3, 0x92, - 0xe1, 0xe4, 0x85, 0x41, 0x8c, 0xd3, 0xa8, 0xc8, 0xdf, 0x65, 0xdb, - 0x4c, 0xe2, 0x7c, 0x5f, 0x2f, 0xce, 0xd0, 0x75, 0x50, 0x5d, 0xc0, - 0x32, 0xf4, 0x3a, 0x69, 0xe0, 0x12, 0xf1, 0x87, 0xae, 0x11, 0x07, - 0x73, 0xbf, 0x34, 0x5e, 0xe7, 0x7b, 0xc1, 0x00, 0x3f, 0xd1, 0x90, - 0xec, 0x49, 0xc0, 0x28, 0xbc, 0x5b, 0x25, 0x9d, 0xe6, 0xf9, 0x34, - 0xe1, 0x67, 0x91, 0x27, 0xf9, 0x92, 0xd5, 0x5d, 0x83, 0x82, 0x42, - 0x63, 0x27, 0x64, 0x14, 0xb8, 0x96, 0xa9, 0xeb, 0xd9, 0xbb, 0xf3, - 0x8a, 0x0b, 0xe2, 0x71, 0xb1, 0xae, 0x9f, 0x0e, 0x2e, 0x8e, 0x97, - 0xb7, 0x2e, 0x34, 0x4d, 0xca, 0xfc, 0x09, 0x37, 0x1b, 0xe7, 0xed, - 0xec, 0x8d, 0x13, 0xda, 0x79, 0xfb, 0x8f, 0xd9, 0x75, 0x0d, 0xe8, - 0x9c, 0xb7, 0x0f, 0xd1, 0x6e, 0x19, 0x8b, 0x1f, 0x96, 0x97, 0x6b, - 0x70, 0x2c, 0x8f, 0xe1, 0x3a, 0xb8, 0xca, 0xff, 0xb5, 0x88, 0x3f, - 0x22, 0x5b, 0x14, 0xd6, 0x06, 0x5c, 0x47, 0x46, 0xfe, 0x92, 0xb4, - 0xf8, 0x5b, 0xef, 0xe1, 0x9d, 0xe9, 0xa1, 0x94, 0x17, 0xc7, 0xe8, - 0x0e, 0x9a, 0x54, 0x79, 0x9a, 0xef, 0x3f, 0x60, 0x99, 0xfa, 0x80, - 0x80, 0xba, 0x89, 0x17, 0xe0, 0x48, 0x85, 0x2c, 0x58, 0x61, 0xc3, - 0x23, 0x2b, 0x7f, 0x41, 0xb2, 0xec, 0x6d, 0xba, 0xba, 0x04, 0xc1, - 0x81, 0xd0, 0xf7, 0x78, 0x3c, 0x6b, 0xcb, 0x9a, 0xbf, 0xba, 0x10, - 0x33, 0x88, 0x1c, 0x46, 0x25, 0xbd, 0x12, 0xda, 0x73, 0x26, 0x4b, - 0xe0, 0xac, 0x69, 0x70, 0x8b, 0x7f, 0xa1, 0xe6, 0x0c, 0x0e, 0x45, - 0xd0, 0xe0, 0x37, 0x4d, 0x2f, 0x57, 0x2c, 0x2a, 0x99, 0x86, 0x5c, - 0x17, 0xd5, 0x68, 0xdb, 0x11, 0x7a, 0x57, 0x62, 0xe0, 0x13, 0xaa, - 0x46, 0x09, 0x23, 0x2b, 0x9f, 0xb7, 0x64, 0x50, 0x18, 0xac, 0xb0, - 0x8d, 0xdb, 0xee, 0x50, 0x78, 0xed, 0x84, 0x1d, 0x34, 0xc7, 0xc6, - 0xc5, 0xc7, 0x8f, 0xb0, 0xec, 0xca, 0xe7, 0xd1, 0xaf, 0x4e, 0x54, - 0xb2, 0x2f, 0x75, 0x70, 0xfc, 0xe0, 0x14, 0xeb, 0x67, 0x74, 0xe2, - 0xea, 0x0e, 0xbf, 0xa9, 0x61, 0x44, 0x7c, 0x7c, 0xef, 0xb0, 0xea, - 0x99, 0x9d, 0xa5, 0x38, 0x51, 0xa6, 0x44, 0xa9, 0xc5, 0x8f, 0x4b, - 0x7f, 0x84, 0xdd, 0xfc, 0xb5, 0xf8, 0x43, 0xf7, 0x29, 0xd6, 0x94, - 0xf0, 0x87, 0x63, 0x15, 0x55, 0x4c, 0xac, 0x7d, 0x0e, 0x42, 0xf0, - 0x49, 0x04, 0x5f, 0xf5, 0x7d, 0xe9, 0x17, 0xd1, 0xfd, 0xb2, 0xfc, - 0xbc, 0xf0, 0xb3, 0xf8, 0x2f, 0xa4, 0x03, 0x33, 0x05, 0xfe, 0xf9, - 0x1c, 0x7c, 0x1d, 0x69, 0x4f, 0x13, 0x26, 0x7a, 0x3f, 0x43, 0x7b, - 0x50, 0x18, 0xf1, 0x53, 0x59, 0x02, 0x37, 0xe7, 0xdf, 0x27, 0x75, - 0x57, 0xb6, 0xdd, 0x5e, 0x90, 0xb5, 0x31, 0xb9, 0x9d, 0xa6, 0x13, - 0x80, 0x43, 0x39, 0xb4, 0x52, 0xea, 0xe0, 0x22, 0x74, 0x55, 0xda, - 0xc4, 0xa1, 0xc1, 0xdf, 0x28, 0x0b, 0xa1, 0x8d, 0x06, 0x6c, 0xd4, - 0xe0, 0x57, 0x79, 0x71, 0xc4, 0x61, 0xa4, 0xe8, 0x84, 0x19, 0xe3, - 0x5f, 0xce, 0xde, 0x23, 0x11, 0x7d, 0x1e, 0xb9, 0xb6, 0xc9, 0xa2, - 0x8e, 0xf2, 0xf4, 0xe6, 0x71, 0xa5, 0xe8, 0x1c, 0x1d, 0x74, 0xa2, - 0xae, 0x82, 0xb8, 0x7c, 0x40, 0xd3, 0x9d, 0x13, 0x87, 0x95, 0xcc, - 0x33, 0xa7, 0x9a, 0xbf, 0x73, 0xd5, 0x45, 0x57, 0xed, 0xbf, 0x7a, - 0x55, 0x21, 0x8a, 0x98, 0x5b, 0x8e, 0x9e, 0x9b, 0x91, 0x99, 0x99, - 0x9e, 0x12, 0xa9, 0x2a, 0x4f, 0xf8, 0x05, 0xe9, 0xd4, 0x73, 0x1d, - 0x7e, 0xa5, 0x71, 0xb2, 0x36, 0x68, 0xf0, 0xcf, 0x52, 0xbb, 0x24, - 0xe0, 0x22, 0x7f, 0x16, 0x7c, 0x6f, 0xad, 0x40, 0x74, 0xb1, 0x5e, - 0x13, 0xea, 0x7d, 0xac, 0x1e, 0x59, 0x23, 0xd4, 0x3a, 0xf9, 0xf5, - 0x62, 0xdf, 0x16, 0x8a, 0x9b, 0xa0, 0xe3, 0x26, 0xcf, 0x38, 0xd5, - 0x81, 0x1d, 0x42, 0x3f, 0x72, 0xa0, 0x07, 0x57, 0x37, 0xcd, 0x4d, - 0x59, 0xb8, 0xbf, 0x08, 0x94, 0x3f, 0x94, 0x01, 0xa6, 0xf0, 0xb9, - 0x07, 0x85, 0xd1, 0xd9, 0x75, 0xf2, 0x0d, 0x65, 0x47, 0x08, 0x2e, - 0x42, 0x4f, 0x8a, 0xfa, 0x90, 0xc6, 0x9f, 0x3e, 0x32, 0x7e, 0xed, - 0xfc, 0x97, 0x2e, 0x31, 0xf4, 0xfb, 0x41, 0x7f, 0xe2, 0x18, 0x09, - 0xa3, 0x2b, 0x35, 0x3b, 0x64, 0xd4, 0xf8, 0xc5, 0xd7, 0x82, 0xf7, - 0xb1, 0xd2, 0x65, 0x7d, 0x0f, 0xf0, 0xae, 0x5d, 0x6e, 0xad, 0x98, - 0x68, 0x80, 0x75, 0xa3, 0xa2, 0x55, 0x1d, 0xe0, 0xb9, 0x7e, 0xfd, - 0xb6, 0xbb, 0xe4, 0x77, 0xc3, 0xc6, 0x19, 0x54, 0x79, 0xc3, 0x0e, - 0xc3, 0x48, 0xe5, 0x4a, 0x65, 0x0b, 0x88, 0xc9, 0x41, 0xe2, 0x09, - 0x7a, 0x01, 0x6f, 0x17, 0x7b, 0x1c, 0xbf, 0xdf, 0xdb, 0x25, 0x4c, - 0x8f, 0x0a, 0x30, 0x7b, 0x53, 0x8d, 0xac, 0x4a, 0xfc, 0x92, 0xff, - 0x6b, 0xd8, 0x7d, 0xe7, 0x4a, 0x0b, 0x81, 0xb1, 0x55, 0xeb, 0x5a, - 0xc6, 0x57, 0x61, 0x07, 0x29, 0x05, 0x70, 0xff, 0x77, 0x31, 0x89, - 0xf6, 0x11, 0xa1, 0x56, 0x49, 0x9b, 0xcf, 0x79, 0x5b, 0xf9, 0xbc, - 0x35, 0xc9, 0xf1, 0x83, 0x52, 0x32, 0xf0, 0x58, 0x72, 0x33, 0x5e, - 0x51, 0x20, 0xef, 0xc4, 0x7c, 0xc4, 0xe7, 0x2c, 0x1b, 0x11, 0x9f, - 0x98, 0x51, 0x8c, 0xd4, 0xf8, 0xdb, 0xe7, 0x2b, 0x7b, 0x6f, 0x65, - 0xe9, 0xc7, 0x5b, 0xde, 0xcb, 0x47, 0x65, 0x5b, 0xe5, 0x2d, 0x0a, - 0x46, 0xf8, 0xb9, 0x66, 0xef, 0x97, 0x6b, 0x36, 0xe5, 0x91, 0x90, - 0x70, 0x4b, 0x33, 0xb2, 0x2a, 0xf1, 0xc7, 0x5d, 0x43, 0x27, 0x88, - 0x8b, 0x3d, 0xd8, 0x48, 0xb7, 0xab, 0xad, 0xb0, 0x49, 0x31, 0x57, - 0x2d, 0xbe, 0x8c, 0xb2, 0xd9, 0x74, 0x87, 0xc3, 0xf8, 0xa4, 0x96, - 0x23, 0xe5, 0xf9, 0xde, 0xb0, 0x59, 0x91, 0x1a, 0x2e, 0x4e, 0xdd, - 0x2c, 0x74, 0xb5, 0xfe, 0xd3, 0x0a, 0x91, 0xda, 0x0f, 0x36, 0x9c, - 0xff, 0x08, 0x07, 0x2b, 0x94, 0x55, 0x64, 0x9e, 0x55, 0xe3, 0xf7, - 0x3b, 0xc2, 0x3a, 0x0f, 0x8c, 0x53, 0x79, 0x75, 0x14, 0x51, 0x1b, - 0xe2, 0xe7, 0x42, 0xd2, 0x9d, 0xe5, 0xa9, 0x5a, 0xf9, 0x16, 0xdc, - 0x7a, 0x4a, 0x23, 0x2b, 0x39, 0xc4, 0x29, 0x39, 0x5f, 0xb1, 0x89, - 0x61, 0xb5, 0xb3, 0x1c, 0x5c, 0xfd, 0xc3, 0x46, 0x4a, 0xc1, 0xe7, - 0x46, 0xdd, 0xc5, 0x55, 0x68, 0xa7, 0xea, 0x33, 0xb2, 0x30, 0x8e, - 0x71, 0xed, 0x9b, 0xa3, 0xd9, 0xff, 0xa9, 0xd8, 0xac, 0xd8, 0x9c, - 0xea, 0xef, 0x61, 0x07, 0xe5, 0x65, 0xd5, 0x21, 0x17, 0xe6, 0x41, - 0x1b, 0xf1, 0x80, 0x91, 0x9d, 0x3e, 0xa1, 0x99, 0xd8, 0xff, 0xbd, - 0x90, 0x2f, 0xba, 0xe0, 0x4c, 0x57, 0x1f, 0xca, 0x25, 0x05, 0x2c, - 0x20, 0x1e, 0x2b, 0x46, 0xce, 0x8b, 0xf2, 0x26, 0x17, 0x63, 0xfc, - 0xb0, 0xcc, 0x7f, 0x56, 0x7b, 0x34, 0x70, 0xc8, 0x5e, 0xc5, 0xc8, - 0x4a, 0x0e, 0x71, 0xba, 0xeb, 0x52, 0x7c, 0x4f, 0xe1, 0x87, 0xf9, - 0xe2, 0xb4, 0x8e, 0xe6, 0xa4, 0x12, 0x54, 0x20, 0x2e, 0x12, 0x84, - 0x1f, 0xd4, 0x1c, 0xeb, 0xc1, 0xc0, 0x5f, 0x6f, 0x07, 0x8f, 0x6c, - 0xaa, 0xa6, 0x06, 0xab, 0x96, 0x25, 0x1a, 0xc5, 0x89, 0xe9, 0x5d, - 0xbd, 0x9b, 0xab, 0x7a, 0x58, 0x60, 0x88, 0xf0, 0x95, 0xfa, 0xff, - 0x89, 0x2e, 0xd1, 0x83, 0x7c, 0x8a, 0x4b, 0xe7, 0x7a, 0x8b, 0x04, - 0x3c, 0x41, 0xe8, 0x74, 0x0c, 0xdd, 0x1e, 0x23, 0x6f, 0x72, 0x71, - 0x83, 0xdf, 0xdb, 0xe2, 0x2c, 0xd3, 0x1e, 0xbd, 0xd1, 0xf3, 0xb2, - 0xc2, 0x85, 0x0b, 0x3d, 0xc4, 0x4a, 0x76, 0xe2, 0x64, 0x8a, 0xdd, - 0xe3, 0xe0, 0x0f, 0x4c, 0x3e, 0x81, 0x9c, 0x8b, 0xc5, 0x4a, 0x37, - 0x0d, 0x2f, 0x55, 0x1f, 0xeb, 0x31, 0x9f, 0x47, 0x73, 0x35, 0x9f, - 0x66, 0x8c, 0xf6, 0x9b, 0x12, 0x1d, 0x85, 0x69, 0x66, 0x5d, 0x16, - 0x23, 0x37, 0x5f, 0x12, 0x7e, 0x49, 0xff, 0x13, 0xf5, 0x2d, 0x32, - 0x72, 0x97, 0x58, 0xcd, 0xfe, 0x0f, 0x42, 0xdf, 0x9f, 0xd0, 0x4e, - 0xed, 0x59, 0x60, 0xca, 0x9e, 0xb5, 0x71, 0xbc, 0xb0, 0xdb, 0x43, - 0x21, 0xa0, 0x9b, 0xda, 0xa6, 0x55, 0x3e, 0x28, 0xaa, 0x42, 0xdf, - 0x4b, 0x0d, 0xf5, 0xa9, 0xf3, 0xa8, 0x48, 0xe9, 0x87, 0x73, 0x54, - 0x31, 0xda, 0xa0, 0xd9, 0x88, 0x9e, 0x8a, 0x14, 0xf4, 0xe2, 0x73, - 0x92, 0x2b, 0xd0, 0x7d, 0x8d, 0x04, 0x5b, 0x03, 0xfc, 0xe6, 0xe5, - 0x2e, 0xf9, 0x90, 0x72, 0x75, 0xa8, 0x01, 0xfe, 0x90, 0x23, 0x3a, - 0x13, 0xe3, 0x78, 0x37, 0x23, 0x8b, 0x10, 0x60, 0x17, 0x07, 0xaa, - 0x98, 0x27, 0x77, 0x1c, 0x73, 0x2b, 0x55, 0xce, 0xab, 0x63, 0xaf, - 0xa2, 0x1c, 0xf5, 0x36, 0x34, 0xd0, 0x5e, 0xe8, 0xce, 0x9b, 0xc5, - 0xd3, 0x7b, 0x34, 0x55, 0x9d, 0x55, 0x03, 0xfc, 0xe0, 0x18, 0x44, - 0x59, 0x06, 0x45, 0xa8, 0x01, 0xfe, 0x3a, 0xeb, 0xd1, 0x1d, 0x4d, - 0xbd, 0x3c, 0x1c, 0x3f, 0xd7, 0xf8, 0x1f, 0x2e, 0x54, 0x32, 0x4e, - 0x6e, 0xce, 0xdd, 0x72, 0x54, 0xde, 0x4c, 0x5b, 0x28, 0xfc, 0x61, - 0x0b, 0x01, 0x3a, 0x65, 0x9d, 0xac, 0x19, 0x7a, 0x5c, 0x77, 0x10, - 0x7a, 0x4d, 0xf0, 0x83, 0x47, 0x81, 0x9c, 0x17, 0x58, 0x43, 0x60, - 0x0d, 0xf0, 0xc3, 0x1b, 0x35, 0xba, 0x07, 0xc0, 0xcf, 0x1c, 0x59, - 0xe5, 0x60, 0x5a, 0xf1, 0x3b, 0xa2, 0x16, 0x10, 0xa4, 0x28, 0x19, - 0x48, 0x79, 0x1a, 0x92, 0x77, 0x8a, 0x43, 0xd3, 0xd9, 0xc1, 0x90, - 0xaa, 0x1b, 0x12, 0x1a, 0x6c, 0xd7, 0x9d, 0xde, 0x59, 0x13, 0xfc, - 0x64, 0x04, 0x39, 0x3e, 0x50, 0x6e, 0x01, 0x7e, 0x61, 0xe2, 0xf8, - 0x02, 0x3e, 0xa9, 0x06, 0xa9, 0x7e, 0x59, 0x13, 0xfc, 0x11, 0x67, - 0x0c, 0x46, 0x56, 0x39, 0x04, 0xe1, 0xde, 0xef, 0x57, 0xfe, 0x78, - 0x3f, 0x89, 0x01, 0x13, 0x2e, 0x6c, 0x89, 0x55, 0xfc, 0xbd, 0xf9, - 0x6e, 0xcd, 0x60, 0x87, 0x4b, 0x7d, 0x5b, 0xb7, 0xa7, 0x18, 0x7a, - 0x7b, 0xcd, 0x26, 0xfd, 0x1a, 0xe1, 0x07, 0xd1, 0x8b, 0xcf, 0x9b, - 0x27, 0xce, 0xa4, 0xfc, 0x7b, 0xae, 0xfc, 0x9c, 0x4e, 0xd2, 0xc7, - 0x96, 0x48, 0x9d, 0x33, 0x57, 0x63, 0xfc, 0x81, 0xdb, 0x0d, 0x46, - 0x56, 0x39, 0xf4, 0x76, 0xa0, 0x8b, 0xef, 0x15, 0x10, 0xb7, 0x1e, - 0x42, 0x68, 0x1c, 0xae, 0x9e, 0xbb, 0xf5, 0xbd, 0x2e, 0x49, 0x77, - 0x24, 0xa8, 0x57, 0x2d, 0x14, 0xef, 0xfe, 0x23, 0xf8, 0x05, 0xb5, - 0x56, 0x45, 0x16, 0x96, 0x0f, 0xe3, 0x47, 0xcc, 0xdb, 0xfa, 0xbd, - 0x4b, 0x62, 0x71, 0x48, 0x26, 0x5f, 0xf0, 0xd7, 0x36, 0x41, 0x41, - 0x11, 0xaf, 0x84, 0x72, 0x0f, 0xc1, 0x8f, 0x65, 0x35, 0xcd, 0x8e, - 0x59, 0xef, 0x54, 0x83, 0x91, 0x55, 0x0e, 0x23, 0xf0, 0x08, 0xd9, - 0x74, 0x62, 0x81, 0xec, 0x7b, 0x44, 0x1b, 0x7c, 0x52, 0x0a, 0x50, - 0xc1, 0xac, 0xa6, 0x52, 0xfa, 0x3f, 0x83, 0x1f, 0xcf, 0x9c, 0x56, - 0xdf, 0x24, 0xf2, 0x21, 0xd1, 0xc6, 0xa0, 0x52, 0xea, 0x76, 0x14, - 0x5a, 0x46, 0xc5, 0x29, 0x9b, 0x2d, 0xfb, 0x0a, 0xcb, 0xfe, 0x41, - 0x85, 0xdf, 0x57, 0x77, 0x38, 0x2d, 0x17, 0x93, 0x6b, 0x70, 0x18, - 0x87, 0x14, 0x16, 0x20, 0x7e, 0x3e, 0x39, 0xde, 0x7b, 0x07, 0xf3, - 0x34, 0x09, 0x1c, 0xfc, 0x30, 0x77, 0x4a, 0xde, 0x92, 0xda, 0xe0, - 0x7f, 0x08, 0x3f, 0x96, 0x4f, 0x47, 0xef, 0x14, 0x17, 0xce, 0xd1, - 0xfd, 0x83, 0x8b, 0xa5, 0x59, 0xae, 0xa9, 0xd7, 0xee, 0xfb, 0x86, - 0xf6, 0x1f, 0xac, 0x93, 0x44, 0x95, 0xa1, 0xfe, 0x3a, 0x64, 0x34, - 0xb2, 0x4a, 0x65, 0x01, 0x6b, 0x3f, 0x3c, 0xff, 0x15, 0xcf, 0xe4, - 0x66, 0x04, 0x38, 0xd6, 0x3a, 0x57, 0x72, 0x1e, 0x3f, 0xec, 0x0e, - 0xba, 0xab, 0x6b, 0x52, 0x60, 0xb6, 0xf8, 0xc5, 0x53, 0xaa, 0x2c, - 0x37, 0xf8, 0xdb, 0x0b, 0xbe, 0xb6, 0x9f, 0x56, 0xc9, 0x22, 0x38, - 0xf8, 0xf6, 0x4c, 0x5c, 0x6a, 0xb5, 0x5a, 0x67, 0xa9, 0x7c, 0x6f, - 0x13, 0x7d, 0xbf, 0xd5, 0xba, 0x74, 0x54, 0x63, 0xae, 0xe6, 0xf8, - 0xc1, 0x59, 0x83, 0xec, 0x73, 0x89, 0x15, 0xac, 0xc2, 0x03, 0xfa, - 0x16, 0x83, 0xdb, 0x0b, 0x83, 0xe0, 0xb7, 0x1e, 0xf1, 0x1f, 0x50, - 0xee, 0xe0, 0xf1, 0x4f, 0x71, 0x70, 0x82, 0x18, 0x1a, 0x7f, 0x5e, - 0x93, 0xf1, 0xef, 0xd1, 0x83, 0x3b, 0xfc, 0xa0, 0xab, 0xd1, 0xb9, - 0xc5, 0x34, 0x2f, 0x74, 0x10, 0xa7, 0x5a, 0x8a, 0x1c, 0x75, 0x35, - 0x8b, 0xf8, 0x1b, 0x65, 0xa1, 0xfc, 0x58, 0xc3, 0xd7, 0x8e, 0x2b, - 0x45, 0xc7, 0xe9, 0x5c, 0x0e, 0xe4, 0x1f, 0xad, 0xbf, 0x6f, 0x30, - 0x95, 0xad, 0x81, 0xfc, 0xf3, 0xe8, 0xc1, 0x1d, 0xfe, 0x86, 0x6b, - 0xb2, 0xb3, 0xb5, 0x6b, 0x9a, 0xe4, 0xc4, 0x14, 0x74, 0x69, 0xa0, - 0xbc, 0xef, 0x33, 0xcc, 0xaa, 0x1e, 0x23, 0x52, 0xc5, 0x07, 0x64, - 0xba, 0x6b, 0x48, 0xf1, 0x76, 0x85, 0x68, 0x39, 0x55, 0xeb, 0x18, - 0x8d, 0x23, 0xe6, 0xac, 0x3f, 0x6b, 0xbc, 0x36, 0xfe, 0xd7, 0xf1, - 0xd3, 0xd5, 0x29, 0x75, 0x20, 0x23, 0x6b, 0xce, 0x3c, 0xc1, 0x49, - 0xbc, 0x29, 0x68, 0xf4, 0x1e, 0x97, 0x45, 0xf5, 0xf7, 0x21, 0x2e, - 0x22, 0xee, 0xe0, 0x39, 0xf8, 0x55, 0xad, 0x50, 0x5f, 0x47, 0x6a, - 0x36, 0x23, 0xee, 0x29, 0x56, 0x6f, 0x3a, 0x5f, 0xd7, 0x8d, 0x29, - 0xde, 0xcb, 0x78, 0xdd, 0xb9, 0x97, 0x6a, 0xfc, 0x6d, 0x67, 0x4e, - 0xd6, 0x9f, 0x18, 0xeb, 0x37, 0xf6, 0xad, 0x17, 0x70, 0xb9, 0xcc, - 0x5d, 0xf4, 0x47, 0x6d, 0x93, 0xc5, 0xd8, 0xf8, 0xf8, 0xd8, 0x00, - 0xe9, 0x96, 0x6c, 0xb5, 0xab, 0x39, 0x7e, 0xc2, 0x00, 0x54, 0x71, - 0x68, 0x31, 0x8c, 0xac, 0x96, 0xcc, 0x62, 0xa4, 0x39, 0x9a, 0xa3, - 0x4d, 0x2e, 0xbf, 0xaa, 0xae, 0xe0, 0xf7, 0x49, 0xb3, 0xe7, 0x3d, - 0x74, 0x5e, 0x82, 0x38, 0xf3, 0xf1, 0x4f, 0xe3, 0x9d, 0x8b, 0xa5, - 0x22, 0xfa, 0x58, 0x9d, 0x6a, 0x47, 0x56, 0xb2, 0x89, 0xbd, 0x31, - 0xfe, 0x90, 0xf4, 0xe2, 0x6d, 0x5a, 0x06, 0x04, 0xcc, 0x29, 0x3e, - 0x0d, 0x82, 0x67, 0xf0, 0xa1, 0x8d, 0x3a, 0xed, 0x37, 0x59, 0x8c, - 0xb7, 0xdb, 0xcf, 0xf5, 0x92, 0x6e, 0xc9, 0xb4, 0xb5, 0x9f, 0xc6, - 0x59, 0x45, 0xbd, 0xf1, 0xb2, 0x79, 0x08, 0xac, 0xd5, 0xf4, 0xd3, - 0x3e, 0x07, 0x18, 0xd0, 0x3d, 0xad, 0x50, 0x1e, 0x59, 0xf9, 0xfc, - 0x54, 0x15, 0x7e, 0x9f, 0x65, 0xe5, 0x05, 0xb3, 0xc2, 0xba, 0x7e, - 0xc2, 0x2b, 0xcc, 0x1e, 0x85, 0xf0, 0xaa, 0xbd, 0x20, 0x0d, 0xd6, - 0xe3, 0x43, 0xe2, 0xfe, 0x26, 0x1f, 0x4e, 0x09, 0xa1, 0xe7, 0x05, - 0x95, 0x23, 0x33, 0xc1, 0x69, 0x85, 0xce, 0x61, 0x9f, 0xa6, 0xfd, - 0x87, 0x1f, 0xae, 0xd2, 0x9c, 0x18, 0xdb, 0x74, 0x49, 0x71, 0x3e, - 0xd1, 0x22, 0xf9, 0xed, 0xd7, 0xba, 0xda, 0x12, 0x40, 0xdf, 0xae, - 0x22, 0x4f, 0xc0, 0xf5, 0xea, 0xba, 0x6b, 0xd7, 0xf8, 0x5e, 0xae, - 0x51, 0xf0, 0x7f, 0x65, 0xfd, 0x95, 0x12, 0xc0, 0x7e, 0x2f, 0x7f, - 0xcf, 0xe2, 0x3e, 0x9a, 0xe9, 0x6c, 0xdb, 0x3d, 0x7c, 0x49, 0x56, - 0x4e, 0x95, 0x6b, 0x6f, 0xb8, 0xe6, 0x57, 0x09, 0x67, 0x9d, 0xc4, - 0x1e, 0xe3, 0xc8, 0x35, 0x27, 0x9f, 0x97, 0xa8, 0xe8, 0xf1, 0x7c, - 0xa6, 0x95, 0xa0, 0xd3, 0xf2, 0x8c, 0x81, 0xf3, 0x9b, 0x52, 0x28, - 0x39, 0xeb, 0x92, 0x83, 0x06, 0xbf, 0x69, 0x50, 0xae, 0x6b, 0x7d, - 0x53, 0xc5, 0xdf, 0xbd, 0xa7, 0x15, 0x3b, 0x52, 0x04, 0xb9, 0x32, - 0xb5, 0x4a, 0x27, 0xa3, 0x40, 0xa3, 0x1f, 0x73, 0x8a, 0xe2, 0xcf, - 0x4f, 0x8e, 0xd7, 0xfa, 0xde, 0xae, 0x59, 0xa8, 0xd3, 0x63, 0xd4, - 0x7c, 0x8b, 0x65, 0xfe, 0x88, 0xd8, 0x20, 0xdd, 0x20, 0x6f, 0x8a, - 0xcd, 0xbc, 0xcd, 0xf3, 0xf6, 0x0d, 0x1d, 0xb5, 0xdf, 0xa0, 0x4f, - 0x67, 0xcb, 0x59, 0x22, 0x8b, 0x95, 0x5d, 0x4d, 0x8b, 0x57, 0x79, - 0xeb, 0x6d, 0xfa, 0x7e, 0x39, 0x9e, 0xad, 0xd0, 0x51, 0x35, 0x60, - 0x0e, 0x16, 0x10, 0x13, 0x75, 0x42, 0x96, 0xb6, 0xff, 0xf3, 0x5b, - 0xe0, 0x2a, 0x52, 0x6a, 0xa2, 0xbb, 0x9c, 0x97, 0x3c, 0x48, 0xf6, - 0xfd, 0x91, 0x39, 0xf6, 0x06, 0x65, 0x52, 0xfc, 0x6c, 0xff, 0x5f, - 0x1e, 0x0a, 0xa6, 0xd0, 0x57, 0x97, 0x2e, 0x1d, 0xcd, 0xd2, 0x7b, - 0xfb, 0x74, 0x26, 0xf2, 0xc8, 0xf4, 0xde, 0x5a, 0xd6, 0x87, 0x6e, - 0x73, 0xf1, 0xdf, 0xcf, 0x6d, 0x49, 0xf4, 0xdf, 0xdd, 0x56, 0x16, - 0x31, 0x75, 0xef, 0xba, 0xfe, 0xbf, 0xc3, 0x55, 0xd9, 0x16, 0x95, - 0xec, 0x49, 0xbc, 0x3f, 0x51, 0xbc, 0x6f, 0xb4, 0xf3, 0x27, 0xad, - 0x27, 0x43, 0x08, 0x4c, 0xfc, 0xf5, 0xba, 0x25, 0x0c, 0x0c, 0x57, - 0xb8, 0x31, 0xf0, 0xeb, 0x21, 0x76, 0x5b, 0xa6, 0xf0, 0x70, 0xf7, - 0x33, 0x5d, 0x4f, 0x86, 0x8e, 0x7b, 0xab, 0x40, 0x48, 0x1d, 0x91, - 0x90, 0x98, 0x96, 0x53, 0x89, 0x8a, 0x97, 0x30, 0xda, 0xa6, 0x7e, - 0xfc, 0x5b, 0xe4, 0xaa, 0x90, 0x55, 0x09, 0x3d, 0xbf, 0xe7, 0x37, - 0x4b, 0x1b, 0x64, 0xdf, 0x2c, 0x5c, 0xa2, 0x95, 0x28, 0x38, 0x26, - 0xfe, 0x16, 0x93, 0x33, 0x6f, 0x21, 0xd7, 0x8f, 0x0b, 0xe4, 0xda, - 0x8a, 0xbd, 0x22, 0x9e, 0xea, 0xd6, 0x70, 0x17, 0x7b, 0x05, 0xe8, - 0x3f, 0x13, 0x0c, 0xd7, 0xbf, 0xa4, 0xa0, 0xc7, 0x1f, 0x79, 0x5e, - 0x5e, 0x8b, 0xf0, 0xb6, 0x38, 0x15, 0x23, 0x46, 0x9b, 0xa3, 0xac, - 0x13, 0xf3, 0x18, 0xf8, 0x93, 0xef, 0xa2, 0xb2, 0x32, 0xa4, 0xf4, - 0x3d, 0x14, 0x91, 0x2d, 0x4e, 0xf0, 0x7d, 0xd3, 0xb5, 0x03, 0x38, - 0x3b, 0x34, 0xeb, 0x2d, 0x38, 0xed, 0xff, 0x83, 0xc1, 0xcd, 0xfa, - 0xa7, 0x10, 0xf4, 0xf8, 0xcd, 0x8b, 0x9d, 0x64, 0x63, 0x1d, 0x84, - 0xf0, 0xb3, 0x4a, 0x17, 0x43, 0x3e, 0xcb, 0xf4, 0x23, 0x00, 0x13, - 0xff, 0x6b, 0x17, 0x32, 0x12, 0x13, 0x33, 0x6e, 0x2a, 0x7c, 0xef, - 0x36, 0xd8, 0x4e, 0xff, 0x98, 0x72, 0x37, 0x51, 0xff, 0x0c, 0x5d, - 0x08, 0xd8, 0x50, 0x60, 0x3f, 0x37, 0x44, 0xc6, 0xdf, 0xac, 0x8b, - 0xc6, 0x11, 0x79, 0x40, 0x6c, 0xbc, 0xd6, 0xfc, 0x23, 0x94, 0x1a, - 0x15, 0xaa, 0xc2, 0x43, 0xd6, 0xbf, 0x47, 0xe9, 0x8f, 0xf9, 0xea, - 0x7f, 0x4d, 0x12, 0x3e, 0x12, 0xcb, 0x54, 0x3a, 0xe4, 0xa1, 0x76, - 0xc6, 0x2c, 0x95, 0x81, 0xbf, 0x65, 0x34, 0x1e, 0xbd, 0xfc, 0xe7, - 0x55, 0xc9, 0xce, 0x19, 0x4d, 0x73, 0x28, 0xec, 0xb8, 0x6b, 0xe9, - 0x0f, 0x5f, 0x8b, 0x37, 0x4f, 0x70, 0xa8, 0x5d, 0x8b, 0x26, 0x9f, - 0x55, 0x55, 0x92, 0x39, 0x6e, 0x43, 0xbe, 0xfd, 0x6c, 0xaa, 0x5a, - 0x1e, 0x99, 0xa1, 0xf1, 0x90, 0x54, 0xad, 0xe0, 0xab, 0x3f, 0xe6, - 0x2d, 0x64, 0x3f, 0x45, 0xe2, 0x9b, 0xae, 0x3a, 0x8e, 0x8c, 0x6b, - 0xc5, 0xfa, 0x00, 0x0c, 0xfb, 0xff, 0xee, 0x76, 0xf9, 0x90, 0x42, - 0xae, 0xff, 0x4d, 0xf1, 0x20, 0xd4, 0x66, 0xfb, 0xb3, 0xda, 0x3f, - 0xb4, 0x54, 0xf1, 0xb9, 0x48, 0xdc, 0x79, 0x2c, 0x86, 0x61, 0xbf, - 0x28, 0x3d, 0xa9, 0x9b, 0xe2, 0x73, 0x5d, 0x55, 0x77, 0x9d, 0xe5, - 0xef, 0xcb, 0x79, 0x3e, 0x41, 0x11, 0x5b, 0xd1, 0x99, 0xee, 0x9e, - 0xb0, 0x2a, 0xf3, 0xb1, 0x52, 0x8f, 0xea, 0x78, 0x12, 0xa9, 0xd2, - 0x4b, 0x79, 0x5b, 0x0a, 0xc7, 0xea, 0xc8, 0x0d, 0xf1, 0xab, 0xdc, - 0xdc, 0x85, 0x65, 0x89, 0x82, 0xab, 0xb7, 0xf5, 0xe6, 0x10, 0x37, - 0xef, 0x0e, 0x84, 0x3d, 0xd4, 0xcd, 0x0f, 0x22, 0xcd, 0x3a, 0x69, - 0xc0, 0xa6, 0x42, 0x85, 0xab, 0xe1, 0xf0, 0x83, 0xe8, 0xe6, 0xbc, - 0x61, 0xe9, 0xe5, 0xd4, 0x39, 0xb9, 0x29, 0x64, 0xf4, 0x1a, 0x5b, - 0x76, 0x19, 0x2a, 0x3f, 0xb1, 0x24, 0x52, 0xb7, 0x30, 0xca, 0x36, - 0xc5, 0x75, 0x17, 0x26, 0x54, 0x88, 0xaa, 0xe3, 0xa1, 0x77, 0x35, - 0x16, 0x0f, 0x7d, 0x7f, 0xd2, 0x1f, 0x19, 0x59, 0x3d, 0xfc, 0xf5, - 0x36, 0x52, 0x3f, 0x0d, 0x13, 0x8a, 0x53, 0x39, 0x76, 0x30, 0xb7, - 0x1c, 0xbd, 0x78, 0x7b, 0x66, 0xe6, 0xaa, 0x24, 0x6b, 0xa5, 0xe4, - 0xee, 0x81, 0x86, 0xe7, 0xbf, 0x97, 0x0d, 0x5c, 0xcc, 0xf3, 0x2a, - 0xd1, 0x87, 0x66, 0xb0, 0x46, 0xcc, 0x22, 0x96, 0x10, 0xe6, 0xf8, - 0x9d, 0x45, 0x74, 0x6f, 0xce, 0xd7, 0xfd, 0x65, 0x06, 0xf8, 0xc5, - 0x4c, 0x5c, 0x95, 0xa9, 0x37, 0x72, 0x10, 0x43, 0x7d, 0xc3, 0x43, - 0xb9, 0xf0, 0x3c, 0x52, 0x58, 0x3a, 0x98, 0xed, 0xd2, 0xe8, 0xe5, - 0x5b, 0x1c, 0xd4, 0x5b, 0xde, 0x56, 0x0f, 0x3f, 0x37, 0xef, 0xae, - 0xe8, 0xd9, 0xac, 0x77, 0xc1, 0x16, 0xb6, 0x7f, 0xa3, 0x66, 0x33, - 0x44, 0xa3, 0x84, 0xaa, 0x4a, 0x3c, 0x7f, 0xd2, 0xd8, 0x78, 0xf8, - 0xae, 0xb9, 0x2d, 0x35, 0x80, 0xd0, 0x43, 0xe4, 0x14, 0x6b, 0xf3, - 0xbc, 0x2a, 0xb2, 0xcf, 0xd3, 0xe7, 0xb5, 0x5c, 0x84, 0x1e, 0xdc, - 0x3e, 0x73, 0x15, 0x55, 0x55, 0x20, 0x74, 0x96, 0xea, 0x88, 0x1b, - 0x0f, 0x4b, 0xcb, 0x15, 0x8d, 0x0d, 0xcf, 0xcf, 0xd0, 0x3a, 0x0a, - 0x0b, 0x88, 0x4b, 0xdd, 0x92, 0x9d, 0x9d, 0x7d, 0x78, 0x9d, 0x78, - 0x7a, 0xab, 0x2a, 0x84, 0x5f, 0x10, 0xa6, 0xce, 0xb5, 0xd7, 0x68, - 0x9d, 0x4b, 0x9b, 0x17, 0x53, 0x14, 0x35, 0xc6, 0x3f, 0xf4, 0xee, - 0x12, 0xc1, 0x0e, 0x34, 0xf4, 0xf8, 0x77, 0xfa, 0x39, 0x26, 0x28, - 0xd0, 0x6c, 0x2e, 0xe4, 0xba, 0x71, 0x24, 0x73, 0x6f, 0x3e, 0x48, - 0xb3, 0xcb, 0xb5, 0x83, 0x75, 0x97, 0xf3, 0x92, 0x58, 0x06, 0x27, - 0x82, 0xc3, 0xf6, 0x8f, 0xde, 0x05, 0x68, 0x9d, 0x99, 0x58, 0x33, - 0x38, 0xbe, 0x5e, 0x14, 0xdb, 0xc4, 0x82, 0x4e, 0x25, 0xdb, 0x1e, - 0x88, 0x9e, 0xc9, 0x1a, 0x8f, 0x3e, 0xe0, 0x00, 0x56, 0x16, 0xde, - 0xb8, 0x51, 0x8a, 0x39, 0xa0, 0xb6, 0x18, 0x09, 0x18, 0xb6, 0xfb, - 0x3e, 0x6d, 0x30, 0x3f, 0x6e, 0xee, 0xaf, 0x7d, 0x15, 0x86, 0x42, - 0x56, 0x3c, 0x83, 0xf6, 0xe8, 0xb4, 0x0d, 0x78, 0x04, 0xd0, 0x76, - 0x31, 0xd5, 0xc4, 0x1f, 0x91, 0x2d, 0x8e, 0xa4, 0xbe, 0xe9, 0x8e, - 0xfe, 0x9c, 0x2e, 0xc0, 0xfc, 0xd7, 0xf9, 0x3d, 0xd8, 0x7f, 0xb5, - 0xcf, 0x80, 0x5a, 0xcb, 0x9f, 0xa8, 0x19, 0xf0, 0x70, 0xdf, 0x43, - 0x6d, 0x2f, 0x53, 0x9c, 0x04, 0x37, 0x6c, 0x67, 0x3c, 0x8c, 0x79, - 0x62, 0x7a, 0x27, 0xcf, 0xf2, 0x5c, 0x1d, 0x18, 0xca, 0x6d, 0xc1, - 0x1d, 0x8f, 0x21, 0xe7, 0x0a, 0xa8, 0xd1, 0x84, 0x9f, 0x10, 0x72, - 0xe6, 0xa4, 0xa7, 0x0c, 0x8e, 0x8f, 0x4f, 0xcc, 0x28, 0xe0, 0x45, - 0x0b, 0x2a, 0x21, 0x84, 0xac, 0x28, 0xe0, 0x5d, 0xdf, 0x7f, 0xbe, - 0xdc, 0x62, 0x79, 0x77, 0x7b, 0xf6, 0xdd, 0xaa, 0x5c, 0x8b, 0x66, - 0x5e, 0x1b, 0x28, 0xe2, 0x0e, 0xb6, 0x29, 0xce, 0x0e, 0x17, 0x7f, - 0xba, 0x4f, 0xb7, 0x7a, 0x5d, 0x4d, 0xfc, 0x58, 0xf0, 0x11, 0x9f, - 0x95, 0x58, 0xba, 0x80, 0x09, 0xbf, 0x3c, 0x1d, 0xdc, 0x8a, 0x10, - 0x0f, 0xe3, 0x97, 0x8b, 0xd5, 0xda, 0x7c, 0x08, 0xe1, 0x27, 0xa8, - 0x49, 0x1d, 0xb5, 0xd2, 0xa3, 0xaf, 0xec, 0x1e, 0x2f, 0x6e, 0xd2, - 0xb4, 0x05, 0xc1, 0xb1, 0xc6, 0x24, 0xef, 0x85, 0x7c, 0x3e, 0xc7, - 0xd2, 0x55, 0x68, 0xdb, 0xfe, 0x09, 0xc7, 0x79, 0xd7, 0xde, 0xe6, - 0x12, 0x86, 0x75, 0xe5, 0x7c, 0xce, 0x92, 0x9e, 0x8d, 0xcd, 0x60, - 0x1b, 0x1a, 0x31, 0x74, 0x89, 0xed, 0xd3, 0x04, 0x75, 0x37, 0xe0, - 0x2d, 0x0e, 0x00, 0xdd, 0xb2, 0x75, 0xcb, 0x12, 0x78, 0x1c, 0xd7, - 0xae, 0x5e, 0x57, 0x13, 0x3f, 0x16, 0x7c, 0xc4, 0x5f, 0xf6, 0xbc, - 0xac, 0xdd, 0xbd, 0x81, 0x85, 0xce, 0xc3, 0xbc, 0x33, 0x9d, 0x54, - 0x03, 0xac, 0x31, 0xd9, 0xba, 0xcf, 0x73, 0xa8, 0x6c, 0x37, 0xc8, - 0xab, 0x93, 0x0a, 0x2d, 0x3e, 0x4c, 0xfc, 0x1c, 0x65, 0x0b, 0xc6, - 0xdf, 0x24, 0x53, 0x28, 0x7b, 0xfb, 0x03, 0x3b, 0x5e, 0x90, 0xc6, - 0x75, 0x70, 0xdc, 0x2c, 0x1d, 0xf7, 0x1e, 0xba, 0xae, 0xbc, 0x7c, - 0xcf, 0x0b, 0x72, 0x2b, 0xf6, 0xd1, 0x8f, 0x10, 0xa2, 0xc9, 0x51, - 0x82, 0x5d, 0xbf, 0x8d, 0x27, 0xee, 0xff, 0xb5, 0x77, 0xad, 0x31, - 0x51, 0x5c, 0x51, 0x78, 0x93, 0x6d, 0xb6, 0x60, 0x14, 0x69, 0xe8, - 0xa2, 0x16, 0x22, 0x6c, 0x9a, 0xb5, 0x51, 0x8c, 0x12, 0x5b, 0xab, - 0xd5, 0xd5, 0x22, 0xd1, 0x58, 0x09, 0x8a, 0xa5, 0x98, 0x94, 0x8a, - 0x31, 0x1a, 0x50, 0x69, 0x22, 0x25, 0x7d, 0x68, 0x15, 0x6b, 0xb6, - 0xd6, 0xda, 0x5a, 0xa3, 0x34, 0xb6, 0x6a, 0xc4, 0x96, 0x5a, 0x11, - 0x6d, 0x44, 0x14, 0x44, 0x17, 0x2a, 0x41, 0x0d, 0x60, 0xad, 0x54, - 0x45, 0x45, 0x36, 0xba, 0xa4, 0x28, 0xe5, 0x25, 0x2b, 0xca, 0x22, - 0x05, 0x32, 0x71, 0x92, 0xdb, 0xfb, 0xdc, 0xb9, 0xf7, 0xee, 0x0b, - 0x7e, 0xd7, 0xf3, 0xc7, 0xc9, 0xb2, 0x3b, 0x33, 0xdf, 0x38, 0x33, - 0xf7, 0x3c, 0xbe, 0xf3, 0x9d, 0x7b, 0xc5, 0x92, 0xfb, 0x12, 0x08, - 0xbf, 0x3e, 0x86, 0x88, 0x2d, 0x6f, 0x7f, 0x72, 0x9a, 0x6c, 0xac, - 0xae, 0x43, 0x81, 0x32, 0x35, 0xa2, 0xb0, 0x33, 0x7a, 0xdf, 0x20, - 0x95, 0x92, 0x47, 0x23, 0x1b, 0xea, 0x17, 0xc2, 0xf5, 0x6e, 0x50, - 0x2a, 0xe8, 0xa1, 0x7b, 0x8f, 0x2a, 0xc9, 0xfb, 0xc3, 0xcf, 0xb2, - 0xf6, 0xa3, 0xe3, 0x23, 0x39, 0x50, 0x41, 0x3b, 0x55, 0x46, 0x73, - 0x89, 0xfe, 0xe9, 0xa9, 0x5a, 0x88, 0x33, 0x59, 0xc6, 0xc4, 0xcd, - 0xd6, 0xec, 0xe9, 0xde, 0x3c, 0x06, 0x3f, 0xf8, 0xc7, 0x15, 0xb5, - 0x4b, 0x92, 0xb3, 0x81, 0xf0, 0xbf, 0xb4, 0x97, 0x89, 0x6d, 0xf7, - 0x91, 0x8d, 0x8e, 0x01, 0x94, 0x28, 0xa1, 0xb6, 0x17, 0xe7, 0x82, - 0x93, 0x9d, 0xb4, 0x01, 0x14, 0xdd, 0xfd, 0x6d, 0x6b, 0x83, 0x71, - 0xf6, 0x46, 0x26, 0xca, 0xe8, 0x57, 0xb4, 0x9c, 0xc4, 0x01, 0x45, - 0x7a, 0x2f, 0x19, 0x35, 0x0e, 0xdd, 0x13, 0xfe, 0x4e, 0xc2, 0xf8, - 0x0d, 0xfb, 0xbd, 0xd6, 0x92, 0x53, 0xbb, 0x28, 0xcd, 0x05, 0x4d, - 0x2f, 0xbb, 0x3c, 0x0b, 0x6d, 0xcc, 0x2b, 0x68, 0x56, 0xc1, 0x60, - 0xdd, 0x0e, 0x99, 0x4c, 0xe8, 0x1f, 0xbf, 0x3e, 0x47, 0x91, 0x32, - 0xc8, 0x81, 0xf0, 0x07, 0xa7, 0x52, 0x6d, 0xa4, 0xd3, 0xbd, 0x37, - 0xe8, 0x56, 0x53, 0xef, 0x31, 0x26, 0x98, 0x94, 0x8a, 0x30, 0x8e, - 0xf8, 0x11, 0xd0, 0xa0, 0x1b, 0x49, 0x6c, 0x7f, 0x87, 0x40, 0x8e, - 0xd8, 0xa1, 0x80, 0x0a, 0xc9, 0xd9, 0x34, 0x16, 0x3c, 0x59, 0x82, - 0xfe, 0x8d, 0x73, 0x80, 0x5a, 0x34, 0x6a, 0x2a, 0xa5, 0x4b, 0xf9, - 0x4a, 0x38, 0x6b, 0x78, 0xb6, 0xaf, 0x56, 0x78, 0xd1, 0x44, 0xc6, - 0x25, 0x66, 0xf2, 0x2c, 0xc2, 0xf0, 0x9e, 0x84, 0xb7, 0x09, 0x57, - 0x00, 0x68, 0xbf, 0xe5, 0x02, 0xca, 0x29, 0x4f, 0x75, 0x4a, 0x3f, - 0xf8, 0x75, 0x0b, 0xef, 0x9d, 0x10, 0xe6, 0x5e, 0x0d, 0xf9, 0xf9, - 0x87, 0xe7, 0x70, 0x88, 0x2e, 0xfc, 0xc5, 0x1d, 0x71, 0xc2, 0x37, - 0xdf, 0x69, 0x62, 0x2a, 0x4e, 0x2f, 0xb8, 0x47, 0x8f, 0x5b, 0x1a, - 0x80, 0x73, 0xad, 0x74, 0xec, 0xe4, 0x07, 0x95, 0x53, 0x75, 0xa4, - 0xdd, 0x33, 0x13, 0x93, 0x15, 0xff, 0xe6, 0x4b, 0xbc, 0x18, 0x7f, - 0xe6, 0x13, 0x91, 0x7a, 0x4a, 0x2d, 0xa5, 0x83, 0x9c, 0x0b, 0x96, - 0xd8, 0x32, 0xa3, 0x61, 0xd5, 0x76, 0x34, 0xad, 0xdb, 0xbc, 0xcc, - 0xa6, 0x3c, 0x3b, 0xe5, 0x71, 0x07, 0xf8, 0xc3, 0x1f, 0x59, 0xf0, - 0x50, 0xcc, 0xa1, 0x0e, 0x19, 0x7f, 0x6c, 0xcd, 0x45, 0xfa, 0x36, - 0xdd, 0xa5, 0x08, 0x31, 0x20, 0x1a, 0x52, 0x2f, 0x2f, 0x34, 0xb8, - 0x56, 0xb3, 0x5f, 0x1a, 0xad, 0x6a, 0xdc, 0xd3, 0xbb, 0x11, 0xdd, - 0x2f, 0x69, 0x9d, 0xe0, 0x5c, 0xd4, 0x8b, 0x8b, 0xef, 0xaa, 0xc7, - 0x79, 0x26, 0x09, 0xc2, 0x3f, 0xf6, 0x9c, 0xd7, 0x4a, 0x1a, 0x92, - 0x96, 0xaa, 0x41, 0xef, 0x97, 0x49, 0x55, 0xa0, 0x1f, 0x49, 0x77, - 0x9a, 0x4b, 0xa9, 0xe6, 0xf4, 0x8c, 0x6a, 0x41, 0x9a, 0x3a, 0x30, - 0x7e, 0x7d, 0xc6, 0xc0, 0x1e, 0xc1, 0x65, 0x1a, 0x32, 0xfe, 0x71, - 0xc7, 0x1c, 0x0b, 0xc8, 0x56, 0xa6, 0xc2, 0x4f, 0xf9, 0xd5, 0xbd, - 0xec, 0x8d, 0x59, 0x06, 0x17, 0x21, 0x2e, 0x9b, 0x4f, 0xed, 0x4d, - 0x07, 0x56, 0xd2, 0x8f, 0x38, 0xa0, 0xba, 0x8a, 0x77, 0x5d, 0x56, - 0xc5, 0x18, 0xc1, 0x0a, 0x6a, 0xd2, 0xf3, 0x5c, 0x02, 0xf3, 0x9a, - 0x19, 0xa2, 0x0e, 0x1e, 0x42, 0x09, 0x88, 0x94, 0x56, 0xd2, 0x38, - 0xbe, 0xd2, 0x09, 0x1c, 0xd8, 0x4f, 0x42, 0xcc, 0x89, 0x2b, 0x72, - 0x4e, 0xd5, 0x1f, 0x7e, 0x5d, 0x4c, 0xe3, 0x1f, 0x02, 0xce, 0x21, - 0xe3, 0x0f, 0xfa, 0x52, 0xa1, 0xa9, 0xb4, 0x05, 0x8e, 0x63, 0x7c, - 0xa4, 0x3a, 0xd1, 0x2b, 0xb3, 0x10, 0x7a, 0x39, 0x0e, 0x39, 0x52, - 0x34, 0x6c, 0x7b, 0x8c, 0x73, 0xfa, 0x31, 0xc7, 0x9d, 0x00, 0xb8, - 0xd5, 0x09, 0xb0, 0x85, 0xc2, 0xf8, 0xaf, 0xa7, 0x43, 0x95, 0xe2, - 0x46, 0x72, 0xe0, 0xb7, 0xcf, 0xaa, 0x94, 0x30, 0xb7, 0x59, 0x05, - 0x67, 0x4c, 0x38, 0xb0, 0x05, 0xb4, 0x54, 0x18, 0x5d, 0xe6, 0x31, - 0x17, 0xd9, 0xcf, 0xfa, 0xaf, 0xc3, 0xea, 0x7d, 0xc2, 0xf7, 0x87, - 0x8c, 0x5f, 0xb7, 0x92, 0xdd, 0x39, 0xe6, 0xf3, 0xc2, 0x25, 0x9c, - 0xef, 0x95, 0x59, 0x9a, 0xd4, 0x01, 0x94, 0xc5, 0x64, 0x73, 0x54, - 0xfc, 0x67, 0xd6, 0x95, 0x58, 0x26, 0x39, 0xfa, 0x64, 0x13, 0x6e, - 0x16, 0x8c, 0xcc, 0x28, 0xb2, 0xed, 0xe3, 0xd2, 0xbd, 0xc6, 0xe4, - 0x7c, 0x18, 0xff, 0x21, 0x7f, 0xb6, 0x3c, 0x4e, 0xdc, 0x53, 0xe8, - 0xa4, 0x04, 0x6b, 0xbd, 0x4a, 0x67, 0x70, 0x20, 0xdc, 0xe8, 0x1c, - 0xa0, 0xe7, 0xe8, 0x62, 0x91, 0xec, 0x56, 0x36, 0x53, 0xdd, 0x6d, - 0x7e, 0xfc, 0x3f, 0x64, 0x19, 0x2e, 0x61, 0x8e, 0x76, 0x40, 0xfc, - 0x21, 0x4c, 0x1b, 0x63, 0x69, 0xa7, 0x8d, 0xa8, 0x82, 0x9a, 0x8e, - 0xb4, 0xae, 0xe0, 0x04, 0xc3, 0xbc, 0xf3, 0x9f, 0xb4, 0x69, 0xce, - 0x26, 0x2b, 0x0c, 0x64, 0xba, 0x8b, 0x31, 0xb0, 0x65, 0x4d, 0x24, - 0x11, 0xa0, 0x0f, 0xe7, 0xb5, 0x4c, 0x4d, 0x3b, 0x89, 0x0e, 0x03, - 0xf4, 0xa0, 0xf9, 0x04, 0x79, 0xd0, 0x84, 0x94, 0x4d, 0xf9, 0xb5, - 0x2d, 0x83, 0x00, 0x3c, 0x25, 0x55, 0x0d, 0x54, 0x7c, 0x42, 0xac, - 0x20, 0x18, 0x39, 0xdc, 0x9a, 0x45, 0xbf, 0x94, 0x2a, 0x68, 0xb3, - 0xd3, 0x6f, 0xf9, 0xf2, 0xff, 0x91, 0x45, 0x97, 0x09, 0x6d, 0x20, - 0x81, 0xf0, 0x87, 0x6c, 0x60, 0xda, 0x18, 0xb5, 0x03, 0x9d, 0x54, - 0x15, 0xf6, 0xfe, 0xc0, 0x5f, 0xf4, 0xb3, 0x0d, 0x21, 0x01, 0xf1, - 0x43, 0x97, 0x48, 0x71, 0x54, 0xb6, 0x91, 0x1b, 0xdb, 0xf8, 0x7d, - 0x9b, 0xe7, 0xcc, 0xa1, 0x88, 0x1f, 0x60, 0xac, 0x33, 0xf8, 0x2f, - 0x70, 0x6c, 0xe5, 0xa4, 0x09, 0x75, 0xfa, 0xd7, 0x72, 0xaa, 0x3a, - 0xf0, 0x24, 0x62, 0xf5, 0xae, 0xd5, 0xcc, 0x90, 0x61, 0xfc, 0xa8, - 0x52, 0xca, 0x4e, 0x36, 0xd9, 0xa3, 0x59, 0xdb, 0x77, 0xfc, 0x47, - 0xec, 0x53, 0x27, 0x37, 0x6f, 0x31, 0x20, 0xfe, 0xd0, 0xed, 0x6e, - 0x71, 0x08, 0x7b, 0xbf, 0xeb, 0x16, 0x9d, 0x08, 0xa0, 0x38, 0xc8, - 0xc6, 0xf6, 0xd0, 0x80, 0xf8, 0xe3, 0xef, 0x80, 0xea, 0x25, 0xe6, - 0x4d, 0x4e, 0xc2, 0x10, 0xb0, 0x34, 0x78, 0x74, 0xba, 0xe0, 0x59, - 0x93, 0x4d, 0xb9, 0xa7, 0x25, 0x1c, 0xd3, 0x8e, 0xbb, 0x48, 0x8c, - 0xd7, 0x7e, 0x3c, 0x99, 0x86, 0x78, 0x43, 0xc3, 0xef, 0x3b, 0xfe, - 0x27, 0x66, 0xa9, 0x3f, 0xca, 0x3d, 0x00, 0x01, 0xef, 0x7f, 0x4d, - 0x3c, 0x22, 0xf1, 0xf6, 0x9f, 0xf3, 0xc8, 0xd6, 0xcf, 0xdd, 0x1f, - 0x92, 0x0d, 0xb4, 0xd8, 0xc7, 0xd9, 0xbd, 0xf5, 0x85, 0xa4, 0x74, - 0x81, 0x7e, 0x54, 0x28, 0x84, 0xcb, 0x7c, 0x6b, 0x1a, 0x5e, 0xf4, - 0x71, 0x06, 0x25, 0x78, 0xc7, 0x23, 0x99, 0x02, 0x32, 0xb9, 0x06, - 0x86, 0xfd, 0x73, 0x83, 0xad, 0x22, 0x8e, 0x99, 0xe5, 0x2a, 0x0a, - 0x6f, 0x2b, 0xbe, 0x4d, 0x7f, 0xcb, 0xed, 0xb1, 0x87, 0x17, 0x01, - 0xb0, 0xc5, 0x80, 0x67, 0x66, 0xfe, 0xb3, 0x84, 0x7e, 0xb6, 0xde, - 0x03, 0xbf, 0xef, 0xfc, 0x0f, 0x31, 0xe3, 0x51, 0x9e, 0x7b, 0x38, - 0xf4, 0xf7, 0x9f, 0x6e, 0xcc, 0x09, 0xc6, 0x5e, 0x58, 0xef, 0xe4, - 0x9c, 0x34, 0x73, 0xb9, 0x17, 0xae, 0x26, 0xba, 0xf8, 0xb8, 0x17, - 0x07, 0x9e, 0x2b, 0xf6, 0x1b, 0x56, 0xf5, 0xf4, 0x61, 0xd1, 0x48, - 0x2e, 0x11, 0x40, 0x6d, 0x69, 0x27, 0xf6, 0x87, 0x44, 0xfc, 0xa8, - 0xa5, 0x44, 0xbd, 0x9a, 0xb3, 0x50, 0xf0, 0xee, 0x10, 0x01, 0xe6, - 0x70, 0x38, 0x71, 0x2e, 0x36, 0xd2, 0x8f, 0xf6, 0xcb, 0xf8, 0xb5, - 0xdb, 0x9e, 0x3d, 0x08, 0xb2, 0x65, 0x39, 0x39, 0xb2, 0xe5, 0x30, - 0xf0, 0xeb, 0x72, 0x9c, 0x54, 0xf7, 0x32, 0xbe, 0x91, 0xbb, 0xb0, - 0x61, 0x07, 0xbd, 0x70, 0x15, 0x90, 0xc4, 0x5a, 0x05, 0xf2, 0x50, - 0x96, 0x77, 0x93, 0xfe, 0x97, 0xd9, 0x8d, 0x58, 0xe6, 0x4a, 0x67, - 0xd8, 0xe4, 0x94, 0x26, 0x8a, 0xc1, 0x2b, 0x85, 0xf2, 0x21, 0x22, - 0xfe, 0xb4, 0x7e, 0x30, 0xf0, 0x8b, 0xc7, 0xf8, 0xd2, 0xac, 0x7e, - 0xac, 0x15, 0x65, 0xd8, 0xfe, 0x0c, 0x94, 0x12, 0x16, 0xca, 0x9c, - 0x9b, 0x32, 0x7e, 0xdf, 0xf9, 0x5f, 0x66, 0x33, 0xeb, 0x8b, 0xb4, - 0x37, 0xa6, 0x4f, 0xfc, 0xaf, 0x64, 0x6b, 0xea, 0xd5, 0xd4, 0xde, - 0x63, 0x59, 0x60, 0xd3, 0x39, 0x6e, 0x65, 0xd5, 0x67, 0xc8, 0x43, - 0xfc, 0x74, 0x58, 0xd5, 0x8a, 0x54, 0xf3, 0xe1, 0x92, 0x6d, 0xc5, - 0x3f, 0xa9, 0xa4, 0xcd, 0x43, 0xb1, 0x97, 0xea, 0xc4, 0x12, 0x0a, - 0xea, 0xda, 0x34, 0x48, 0xf8, 0x0d, 0xb9, 0x5e, 0x87, 0x93, 0xc5, - 0x37, 0x92, 0x81, 0x51, 0x89, 0x0e, 0xea, 0x10, 0x84, 0xed, 0x56, - 0x64, 0xae, 0x81, 0xef, 0xfc, 0x3f, 0xb3, 0x90, 0x43, 0xdc, 0x0a, - 0x30, 0x9c, 0xfa, 0xe7, 0x14, 0x96, 0x05, 0x0e, 0xce, 0xe5, 0x2f, - 0x6c, 0xcc, 0x25, 0x4f, 0xfe, 0x1b, 0xf4, 0xd8, 0xef, 0x25, 0x50, - 0x74, 0x56, 0x7c, 0x1c, 0x1b, 0xd5, 0xa0, 0xd2, 0x67, 0xb4, 0xe5, - 0x0a, 0x1e, 0x2b, 0xbc, 0x42, 0x1e, 0xf8, 0xcd, 0xe7, 0xbd, 0x36, - 0x6b, 0x8e, 0xfb, 0x95, 0xc8, 0xfd, 0x84, 0x7d, 0xe1, 0x02, 0x17, - 0x92, 0xc3, 0xf4, 0xa6, 0x8d, 0x2d, 0xb2, 0x6e, 0x82, 0xef, 0xfa, - 0x8f, 0x66, 0xe9, 0x5d, 0xda, 0xbe, 0x87, 0x83, 0x3f, 0xd4, 0x7d, - 0xe1, 0xf8, 0x3d, 0x60, 0xfd, 0xa7, 0x3a, 0x31, 0xaf, 0x64, 0xcc, - 0x53, 0x29, 0x59, 0xc1, 0x03, 0xbf, 0xce, 0x54, 0x76, 0x5f, 0x28, - 0xc4, 0xc2, 0x4b, 0x75, 0x29, 0xc6, 0x8d, 0x3f, 0x08, 0x6b, 0x45, - 0xc2, 0xd8, 0xd8, 0x93, 0xff, 0x8a, 0x7a, 0x31, 0xa9, 0xdc, 0x93, - 0x71, 0xa7, 0x53, 0x6d, 0x3e, 0xfc, 0x75, 0x19, 0xd2, 0x1b, 0x17, - 0xfd, 0x3f, 0xdf, 0xf5, 0x3f, 0xcd, 0x5e, 0xbf, 0xa6, 0x3d, 0x00, - 0xc3, 0xaa, 0x7f, 0xa7, 0x77, 0x65, 0xb3, 0x3d, 0xf0, 0x1e, 0xaf, - 0xf9, 0x2a, 0xbc, 0xd9, 0xf9, 0x7c, 0x97, 0x3e, 0xad, 0x99, 0xc9, - 0x52, 0x79, 0xdc, 0xff, 0x38, 0x11, 0x10, 0xcd, 0x7d, 0x19, 0x3e, - 0x2a, 0xae, 0x6d, 0x06, 0x8a, 0x7f, 0xfc, 0x47, 0xf8, 0x84, 0xe1, - 0xff, 0xff, 0x23, 0x6f, 0xe3, 0xbb, 0x47, 0x17, 0x28, 0x6a, 0x21, - 0x82, 0x67, 0xcc, 0x6e, 0x80, 0x7e, 0x11, 0xe8, 0x6e, 0x07, 0x22, - 0xa5, 0xc8, 0xb0, 0x5b, 0xe1, 0x86, 0xb6, 0x4e, 0xaf, 0x13, 0xc4, - 0x39, 0x98, 0x85, 0xec, 0x6b, 0x72, 0x6b, 0x56, 0x0c, 0x0b, 0xbf, - 0xc5, 0x4e, 0x1f, 0x2d, 0xad, 0x20, 0x88, 0x11, 0xad, 0x6b, 0x13, - 0x0b, 0x1e, 0x31, 0xd5, 0x2a, 0xab, 0x7f, 0xa5, 0x3e, 0x02, 0xb8, - 0x62, 0x66, 0xb1, 0x03, 0x76, 0xdb, 0x87, 0xed, 0x7e, 0xbc, 0x81, - 0x5b, 0x03, 0x51, 0x87, 0x6c, 0xcb, 0x27, 0x93, 0xbf, 0x01, 0xb6, - 0x49, 0xe6, 0xb4, 0xe2, 0x6e, 0xfc, 0x8a, 0x81, 0xcf, 0x3f, 0x66, - 0x0c, 0xb1, 0x03, 0x8c, 0x67, 0xa5, 0xd8, 0x39, 0x6c, 0x9a, 0x59, - 0xb0, 0xc5, 0x5a, 0x62, 0x3b, 0xf6, 0xf9, 0x19, 0x00, 0x8a, 0x78, - 0xf7, 0xcf, 0x77, 0xfd, 0x9f, 0xb7, 0xe5, 0x5d, 0xee, 0x4e, 0x90, - 0x61, 0xe1, 0x37, 0x55, 0x5e, 0x24, 0x3b, 0xd7, 0xef, 0x10, 0xe8, - 0x99, 0x63, 0x0f, 0x2a, 0x7c, 0x5b, 0xe7, 0xab, 0x79, 0x0a, 0x9b, - 0xb0, 0xe1, 0xb1, 0xfe, 0x61, 0x10, 0x0f, 0x6e, 0x4c, 0xe5, 0x7e, - 0x3d, 0xfe, 0x88, 0x02, 0x7a, 0x2a, 0xae, 0x02, 0x7b, 0x7e, 0x79, - 0x27, 0x00, 0xc4, 0x39, 0x81, 0xef, 0xff, 0x3b, 0xee, 0x97, 0x94, - 0x61, 0x51, 0x21, 0x9b, 0x7c, 0x60, 0x78, 0xf7, 0x3a, 0x70, 0x64, - 0xe3, 0xab, 0x11, 0x1c, 0x19, 0x15, 0xbe, 0xc8, 0x2e, 0x76, 0x0e, - 0xf8, 0xe1, 0x7f, 0xf0, 0x16, 0x5b, 0x57, 0xc2, 0x42, 0x6f, 0x9f, - 0xf8, 0x43, 0xa2, 0xa2, 0x22, 0xe4, 0xc8, 0x7a, 0xe4, 0x01, 0xe6, - 0x01, 0xac, 0x72, 0x0a, 0x69, 0x9a, 0x69, 0xe5, 0xaa, 0x62, 0x4b, - 0x22, 0xeb, 0x5a, 0xf0, 0xdc, 0x62, 0x6d, 0x6a, 0x89, 0xec, 0xff, - 0x60, 0x1b, 0xb1, 0xa7, 0x6f, 0x23, 0xbf, 0xeb, 0x69, 0xbf, 0xf5, - 0xb2, 0x16, 0xb4, 0xfe, 0x8a, 0x45, 0xf8, 0x87, 0x63, 0x8b, 0xe1, - 0x0e, 0x69, 0x43, 0xb1, 0x31, 0xed, 0xba, 0xd6, 0x1f, 0x85, 0xe7, - 0x42, 0x6d, 0x9b, 0x48, 0x8b, 0x11, 0x85, 0xbc, 0xf6, 0x14, 0xea, - 0x2c, 0x7a, 0xa0, 0x08, 0xb3, 0xa8, 0x0c, 0x6b, 0x3a, 0x95, 0xad, - 0x9e, 0xc4, 0x81, 0x91, 0x07, 0x70, 0xea, 0x05, 0x91, 0x39, 0x67, - 0x94, 0x33, 0xfc, 0xb7, 0x13, 0x05, 0xf1, 0x86, 0xd4, 0x6b, 0xd7, - 0xca, 0x66, 0xcb, 0x3f, 0xcc, 0x62, 0x1e, 0xc0, 0xec, 0xc6, 0x7c, - 0x81, 0x06, 0x0a, 0x2f, 0x00, 0x78, 0xb8, 0xff, 0xfd, 0x29, 0x51, - 0xe6, 0x84, 0xdc, 0x26, 0xa0, 0xe9, 0x7d, 0xca, 0xfe, 0x2f, 0xb1, - 0xa9, 0xd5, 0x0d, 0xc2, 0x2b, 0x70, 0xcc, 0x8a, 0xd2, 0x56, 0xe8, - 0xee, 0xf5, 0x3c, 0x28, 0xcd, 0x8c, 0xa6, 0x1f, 0x21, 0xff, 0xef, - 0x7e, 0xde, 0x9a, 0xe4, 0xe4, 0xd4, 0xad, 0x65, 0xd0, 0x11, 0xde, - 0xab, 0x41, 0x42, 0x2a, 0x26, 0x37, 0xb7, 0x24, 0x4e, 0x8c, 0x42, - 0xe9, 0x1f, 0x4e, 0x5a, 0x55, 0xe7, 0x97, 0xff, 0x25, 0x5a, 0x7a, - 0x17, 0x5a, 0x9c, 0x51, 0xe3, 0xf5, 0x85, 0x4e, 0x86, 0xdf, 0x55, - 0x6b, 0xe3, 0xa7, 0x59, 0x64, 0x7b, 0xa3, 0x56, 0xfa, 0xac, 0x03, - 0xeb, 0x67, 0x1d, 0xe9, 0xc6, 0xfd, 0xff, 0x95, 0xf7, 0x06, 0x41, - 0x5f, 0x45, 0x92, 0xf6, 0xec, 0x0a, 0xf1, 0x0f, 0xc3, 0xb0, 0xee, - 0xb1, 0x48, 0xee, 0xd3, 0x9b, 0x53, 0x7e, 0x07, 0x8e, 0x8f, 0x17, - 0x69, 0x15, 0x3d, 0x7d, 0x5c, 0xc9, 0x53, 0x80, 0x26, 0x65, 0x77, - 0x0c, 0xa2, 0xc0, 0x90, 0x0b, 0x59, 0x46, 0x7d, 0x00, 0x5f, 0xfb, - 0x7d, 0xcd, 0x17, 0x6d, 0x95, 0xcd, 0x2a, 0x2f, 0xad, 0xeb, 0x9f, - 0xff, 0x27, 0x5a, 0xec, 0x95, 0xb3, 0x61, 0x54, 0x8c, 0x08, 0x30, - 0xfc, 0x6e, 0xfe, 0xb7, 0x1f, 0xfc, 0x13, 0xaa, 0x4e, 0x10, 0x4f, - 0x37, 0x68, 0xa7, 0x5d, 0x62, 0x13, 0x45, 0x64, 0x1c, 0xc5, 0xfc, - 0xb7, 0x5e, 0x7b, 0x49, 0x96, 0x90, 0xfa, 0xe6, 0xe3, 0x5f, 0xf7, - 0x59, 0x9d, 0xbc, 0x21, 0x2b, 0x91, 0x48, 0xfe, 0x3f, 0x8e, 0xff, - 0x5a, 0x50, 0x8b, 0x6f, 0x6f, 0x73, 0x95, 0xd5, 0xc2, 0xd7, 0x6d, - 0xf5, 0x26, 0x74, 0x28, 0xc2, 0x19, 0x9b, 0xc7, 0x07, 0x13, 0xfe, - 0xf8, 0x9f, 0xa2, 0x05, 0x25, 0xa1, 0xcc, 0x2d, 0x22, 0x33, 0x22, - 0x29, 0x0e, 0xb3, 0x7b, 0x93, 0x93, 0xc1, 0x9a, 0x69, 0xf5, 0xf0, - 0xff, 0xd0, 0xef, 0x92, 0xa8, 0xa3, 0xf3, 0xc6, 0x6a, 0xb9, 0x28, - 0xa9, 0x0f, 0xc3, 0xfc, 0xb7, 0x74, 0x4b, 0xa4, 0x74, 0xb9, 0xb5, - 0xfc, 0x87, 0x66, 0xb3, 0x57, 0x47, 0x88, 0x5f, 0xd2, 0xc5, 0x49, - 0x13, 0xc2, 0x50, 0xfc, 0x9f, 0x80, 0x94, 0x42, 0xd2, 0xe7, 0x4f, - 0x90, 0x53, 0x62, 0xe8, 0x50, 0xe8, 0x2f, 0x96, 0x00, 0xe3, 0x5b, - 0x9f, 0xdb, 0x73, 0x7b, 0x6e, 0xff, 0x0b, 0xfb, 0x0f, 0x7a, 0xa9, - 0x15, 0xf2 + 0x78, 0x9c, 0xec, 0xbd, 0x0b, 0x5c, 0x55, 0xc5, 0xda, 0x3f, 0xbe, + 0x60, 0x79, 0x76, 0x60, 0x0a, 0x18, 0xa1, 0xa2, 0x24, 0x52, 0xa1, + 0x79, 0x49, 0x49, 0xbc, 0x5f, 0x12, 0xc9, 0x1b, 0x1e, 0x0d, 0x0f, + 0x62, 0x79, 0xcd, 0x2c, 0x30, 0x2f, 0x89, 0x78, 0x0f, 0x29, 0xdb, + 0xa6, 0x79, 0xbc, 0x94, 0x5b, 0x2b, 0x35, 0xa1, 0x0c, 0xef, 0x27, + 0x75, 0x97, 0x69, 0x6e, 0x4d, 0xf3, 0x72, 0xc4, 0x2b, 0x62, 0x64, + 0x22, 0x2f, 0xee, 0x0a, 0xb5, 0x8d, 0xa0, 0x5b, 0x92, 0x0d, 0x1c, + 0xd8, 0x67, 0x1f, 0xd7, 0xfb, 0xce, 0x6f, 0x66, 0xd6, 0x6d, 0x66, + 0xd6, 0x5a, 0x1b, 0x30, 0xdf, 0xf3, 0x7e, 0xfe, 0xff, 0xcf, 0x79, + 0xce, 0x69, 0xe1, 0x9a, 0xfd, 0xcc, 0xfa, 0xae, 0xef, 0x9a, 0xb5, + 0x66, 0x9e, 0x99, 0x79, 0xe6, 0x99, 0xd4, 0xd7, 0xa6, 0x73, 0x0d, + 0x1b, 0x37, 0xe0, 0x38, 0xee, 0x4f, 0xf0, 0xbf, 0xcd, 0xf0, 0xbf, + 0x44, 0xce, 0x9f, 0x1b, 0x31, 0x2b, 0x29, 0xf9, 0xcd, 0x84, 0x59, + 0xb3, 0xe6, 0xf9, 0x8c, 0x92, 0xcf, 0x5e, 0x84, 0x07, 0x9f, 0x56, + 0xf0, 0x6c, 0xe4, 0xe4, 0x94, 0xa4, 0xc9, 0xe8, 0x8c, 0x0f, 0xe3, + 0x1a, 0x73, 0x89, 0x69, 0xa9, 0xc9, 0x49, 0x2f, 0xcf, 0x99, 0x36, + 0x6f, 0xf2, 0x6b, 0x6f, 0x26, 0xfb, 0xf8, 0x70, 0x8f, 0x8a, 0x29, + 0xf1, 0xaf, 0x4d, 0x4f, 0x7e, 0x7d, 0x1e, 0xf7, 0x04, 0xd4, 0x88, + 0x9d, 0x35, 0x3f, 0x25, 0x49, 0x49, 0xf1, 0xe5, 0x02, 0xb8, 0x84, + 0xe4, 0x29, 0xc9, 0x73, 0x92, 0x53, 0x5e, 0x4f, 0x7e, 0x01, 0xfe, + 0x34, 0x8f, 0xf3, 0xe1, 0x1a, 0x72, 0xaf, 0xcf, 0x9c, 0x3b, 0xf7, + 0xb9, 0x2e, 0x9d, 0x92, 0xdf, 0x78, 0xc3, 0x97, 0xe3, 0xb9, 0x06, + 0x1c, 0x80, 0xc2, 0x61, 0xf1, 0xc1, 0x37, 0xa6, 0x48, 0x3a, 0xfc, + 0x6f, 0x32, 0x44, 0x49, 0x48, 0x86, 0x17, 0x9d, 0x33, 0x6a, 0xde, + 0xe4, 0x79, 0xc9, 0x3e, 0xaf, 0x72, 0xcd, 0x39, 0x74, 0x43, 0x2f, + 0x4c, 0x7e, 0x7d, 0x6a, 0x72, 0x12, 0x7d, 0x75, 0x9f, 0x49, 0x5c, + 0x04, 0x27, 0xfe, 0x40, 0xdd, 0x2a, 0xa3, 0xd5, 0x96, 0x6b, 0xc9, + 0x79, 0xf9, 0xdd, 0x37, 0x0c, 0xde, 0xb8, 0x2f, 0x84, 0x6e, 0x0e, + 0xff, 0x9b, 0x08, 0x49, 0x89, 0xf0, 0x83, 0xa6, 0x4c, 0x81, 0x9c, + 0xe6, 0xc2, 0xdc, 0x3c, 0x4c, 0x0f, 0x85, 0xff, 0xcd, 0x82, 0xf4, + 0x12, 0xe7, 0x4c, 0x4e, 0x99, 0x3b, 0x65, 0xd6, 0x9c, 0x99, 0xf2, + 0xdd, 0x35, 0x80, 0x14, 0xda, 0xc0, 0x1f, 0x5b, 0x61, 0x2a, 0x34, + 0x41, 0x1f, 0xfc, 0x3f, 0x13, 0xc1, 0x70, 0x2d, 0xc4, 0x49, 0xe2, + 0x1a, 0x71, 0xa3, 0x92, 0x67, 0xcf, 0x47, 0x37, 0x80, 0x1f, 0xfc, + 0xeb, 0xdc, 0x63, 0x30, 0xe1, 0x4d, 0x88, 0x36, 0x6d, 0x41, 0xf2, + 0x0b, 0x53, 0xa7, 0xbd, 0x99, 0x24, 0x95, 0x87, 0x49, 0xe7, 0x8a, + 0x7f, 0xe2, 0x5e, 0xe5, 0x1e, 0xc1, 0xd7, 0xf2, 0xc3, 0x47, 0x7f, + 0x7c, 0x6c, 0x88, 0x8f, 0x8f, 0xe2, 0x63, 0x23, 0x7c, 0x6c, 0x8c, + 0x8f, 0x01, 0xf8, 0x18, 0x88, 0x8f, 0x41, 0xf8, 0xd8, 0x04, 0x1f, + 0x1f, 0xc3, 0xc7, 0x60, 0x7c, 0x7c, 0x1c, 0x1f, 0x43, 0xf0, 0xb1, + 0x29, 0x3e, 0x36, 0xc3, 0xc7, 0xe6, 0xf8, 0x18, 0x8a, 0x8f, 0x2d, + 0xf0, 0xb1, 0x25, 0x3e, 0x86, 0xe1, 0xe3, 0x13, 0xf8, 0xd8, 0x0a, + 0x1f, 0xc3, 0xf1, 0xb1, 0x35, 0x3e, 0x46, 0xe0, 0xe3, 0x93, 0xf8, + 0xf8, 0x14, 0x3e, 0x3e, 0x8d, 0x8f, 0x91, 0xf8, 0xd8, 0x06, 0x1f, + 0xdb, 0xe2, 0xe3, 0x33, 0xf8, 0xd8, 0x0e, 0x1f, 0xdb, 0xe3, 0x63, + 0x07, 0x7c, 0xec, 0x88, 0x8f, 0xcf, 0xe2, 0x63, 0x27, 0x7c, 0xec, + 0x8c, 0x8f, 0x51, 0xf8, 0xf8, 0x1c, 0x3e, 0x76, 0xc1, 0xc7, 0x68, + 0x7c, 0xec, 0x8a, 0x8f, 0xdd, 0xf0, 0xb1, 0x3b, 0x3e, 0xf6, 0xc0, + 0xc7, 0x9e, 0xf8, 0xd8, 0x0b, 0x1f, 0x7b, 0xe3, 0x63, 0x1f, 0x7c, + 0xec, 0x8b, 0x8f, 0xfd, 0xf0, 0xf1, 0x79, 0x7c, 0xec, 0x8f, 0x8f, + 0x31, 0xf8, 0x38, 0x00, 0x1f, 0x63, 0xf1, 0xf1, 0x05, 0x7c, 0x1c, + 0x88, 0x8f, 0x83, 0xf0, 0x71, 0x30, 0x3e, 0x0e, 0xc1, 0xc7, 0xa1, + 0xf8, 0x18, 0x87, 0x8f, 0xc3, 0xf0, 0xf1, 0xcf, 0xf8, 0x38, 0x1c, + 0x1f, 0x47, 0xe0, 0xe3, 0x8b, 0xf8, 0x18, 0x8f, 0x8f, 0x23, 0xf1, + 0xf1, 0x2f, 0xf8, 0x98, 0x80, 0x8f, 0xa3, 0xf0, 0x31, 0x11, 0x1f, + 0x47, 0xe3, 0xe3, 0x4b, 0xf8, 0xf8, 0x32, 0x3e, 0x8e, 0xc1, 0xc7, + 0xb1, 0xf8, 0x38, 0x0e, 0x1f, 0xc7, 0xe3, 0xe3, 0x04, 0x7c, 0x9c, + 0x88, 0x8f, 0xaf, 0xe0, 0xe3, 0x24, 0x7c, 0x7c, 0x15, 0x1f, 0x27, + 0xe3, 0xe3, 0x6b, 0xf8, 0xf8, 0x3a, 0x3e, 0x26, 0xe1, 0x63, 0x32, + 0x3e, 0x4e, 0xe1, 0x28, 0xc1, 0x94, 0x7b, 0xe1, 0xbb, 0xf5, 0xe3, + 0x86, 0x24, 0xcf, 0x9a, 0x29, 0xbd, 0x78, 0x8f, 0xc0, 0xd7, 0x2e, + 0x3a, 0x9a, 0x7c, 0xf5, 0x82, 0xa8, 0x17, 0xd9, 0x97, 0x7b, 0x83, + 0x9b, 0xca, 0x4d, 0xe3, 0xa6, 0xe3, 0xc2, 0x42, 0x99, 0xa1, 0x7e, + 0x57, 0x6f, 0xfa, 0x33, 0xa0, 0xfe, 0x9b, 0x8a, 0xbe, 0x3f, 0xd2, + 0xef, 0xe6, 0x4d, 0x7f, 0x26, 0xd4, 0x4f, 0x51, 0xf4, 0x1b, 0x22, + 0xfd, 0xee, 0xde, 0xf4, 0x67, 0x41, 0xfd, 0x54, 0x45, 0xff, 0x51, + 0xa4, 0xdf, 0xc3, 0x9b, 0xfe, 0x6c, 0xa8, 0x3f, 0x47, 0xd1, 0x6f, + 0x84, 0xf4, 0x7b, 0x7a, 0xd3, 0x9f, 0x0b, 0xf5, 0xe7, 0x29, 0xfa, + 0x8d, 0x91, 0x7e, 0x2f, 0x6f, 0xfa, 0xf3, 0xa1, 0xfe, 0x02, 0x45, + 0x3f, 0x00, 0xa6, 0x74, 0x8d, 0xf2, 0xa6, 0xbf, 0x10, 0xea, 0xbf, + 0xa5, 0xe8, 0x07, 0x22, 0xfd, 0xe7, 0xbc, 0xe9, 0xa7, 0x41, 0xfd, + 0x45, 0x8a, 0x7e, 0x10, 0xd2, 0xef, 0xe2, 0x4d, 0x3f, 0x1d, 0xea, + 0xbf, 0xad, 0xe8, 0x37, 0x41, 0xfa, 0x5e, 0xcb, 0xf7, 0x1d, 0xa8, + 0xbf, 0x58, 0xd1, 0x7f, 0x0c, 0xe9, 0x7b, 0x2d, 0xdf, 0x77, 0xa1, + 0xbe, 0x59, 0xd1, 0x0f, 0x46, 0xfa, 0x5e, 0xcb, 0x77, 0x09, 0xd4, + 0x7f, 0x4f, 0xd1, 0x7f, 0x1c, 0xe9, 0x7b, 0x2d, 0xdf, 0xa5, 0x50, + 0x7f, 0x99, 0xa2, 0x1f, 0x82, 0xf4, 0xbd, 0x96, 0xef, 0xfb, 0x50, + 0x7f, 0xb9, 0xa2, 0xdf, 0x14, 0xe9, 0x7b, 0x2d, 0xdf, 0xbf, 0x42, + 0xfd, 0x15, 0x8a, 0x7e, 0x33, 0xa4, 0xef, 0xb5, 0x7c, 0x57, 0x42, + 0xfd, 0x55, 0x8a, 0x7e, 0x73, 0x98, 0xd2, 0xcd, 0x6b, 0xf9, 0xae, + 0x86, 0xfa, 0x1f, 0x28, 0xfa, 0xa1, 0x48, 0xdf, 0x6b, 0xf9, 0x7e, + 0x08, 0xf5, 0xd7, 0x28, 0xfa, 0x2d, 0x90, 0xbe, 0xd7, 0xf2, 0xb5, + 0x40, 0xfd, 0xb5, 0x8a, 0x7e, 0x4b, 0xa4, 0xef, 0xb5, 0x7c, 0xd7, + 0x41, 0xfd, 0x8f, 0x14, 0x7d, 0xd4, 0x02, 0x76, 0xf3, 0x5a, 0xbe, + 0x1f, 0x43, 0xfd, 0x4f, 0x14, 0xfd, 0x27, 0x90, 0xbe, 0xd7, 0xf2, + 0x5d, 0x0f, 0xf5, 0x37, 0x28, 0xfa, 0xad, 0x90, 0xbe, 0xd7, 0xf2, + 0xdd, 0x08, 0xf5, 0x3f, 0x55, 0xf4, 0xc3, 0x91, 0xbe, 0xd7, 0xf2, + 0xdd, 0x04, 0xf5, 0x33, 0x14, 0xfd, 0xd6, 0x48, 0xdf, 0x6b, 0xf9, + 0x66, 0x42, 0xfd, 0xcf, 0x14, 0xfd, 0x08, 0xa4, 0xef, 0xb5, 0x7c, + 0x3f, 0x87, 0xfa, 0x9b, 0x15, 0xfd, 0x27, 0x61, 0x4a, 0x77, 0xaf, + 0xe5, 0xfb, 0x05, 0xd4, 0xcf, 0x52, 0xf4, 0x9f, 0x42, 0xfa, 0x5e, + 0xcb, 0x77, 0x0b, 0xd4, 0xdf, 0xaa, 0xe8, 0x3f, 0x8d, 0xf4, 0xbd, + 0x96, 0xef, 0x36, 0xa8, 0xbf, 0x5d, 0xd1, 0x8f, 0x44, 0xfa, 0x5e, + 0xcb, 0x77, 0x07, 0xd4, 0xdf, 0xa9, 0xe8, 0xb7, 0x41, 0xfa, 0x5e, + 0xcb, 0x77, 0x17, 0xd4, 0xff, 0x9b, 0xa2, 0xdf, 0x16, 0xe9, 0x7b, + 0x2d, 0xdf, 0x2f, 0xa1, 0xfe, 0x6e, 0x45, 0xff, 0x19, 0xa4, 0xef, + 0xb5, 0x7c, 0xf7, 0x40, 0xfd, 0xbd, 0x8a, 0x7e, 0x3b, 0xa4, 0xef, + 0xb5, 0x7c, 0xad, 0x50, 0xff, 0x2b, 0x45, 0xbf, 0x3d, 0xd2, 0xf7, + 0x5a, 0xbe, 0x5f, 0x43, 0xfd, 0x7d, 0x8a, 0x7e, 0x07, 0xa4, 0xef, + 0xb5, 0x7c, 0xbf, 0x81, 0xfa, 0xfb, 0x15, 0xfd, 0x8e, 0x30, 0xa5, + 0x87, 0xd7, 0xf2, 0x3d, 0x00, 0xf5, 0xbf, 0x55, 0xf4, 0x9f, 0x45, + 0xfa, 0x5e, 0xcb, 0xf7, 0x20, 0xd4, 0xb7, 0x29, 0xfa, 0x9d, 0x90, + 0xbe, 0xd7, 0xf2, 0x3d, 0x04, 0xf5, 0x0f, 0x2b, 0xfa, 0x9d, 0x91, + 0xbe, 0xd7, 0xf2, 0xfd, 0x0e, 0xea, 0x1f, 0x51, 0xf4, 0xa3, 0x90, + 0xbe, 0xd7, 0xf2, 0x3d, 0x0a, 0xf5, 0xbf, 0x57, 0xf4, 0x9f, 0x43, + 0xfa, 0x5e, 0xcb, 0xf7, 0x18, 0xd4, 0x3f, 0xae, 0xe8, 0x77, 0x41, + 0xfa, 0x5e, 0xcb, 0xf7, 0x04, 0xd4, 0x3f, 0xa9, 0xe8, 0x47, 0x23, + 0x7d, 0xaf, 0xe5, 0xfb, 0x77, 0xa8, 0x7f, 0x4a, 0xd1, 0xef, 0x8a, + 0xf4, 0xbd, 0x96, 0x6f, 0x36, 0xd4, 0x3f, 0xad, 0xe8, 0x77, 0x43, + 0xfa, 0x5e, 0xcb, 0xf7, 0x0c, 0xd4, 0x3f, 0xab, 0xe8, 0x77, 0x87, + 0x29, 0x3d, 0xbd, 0x96, 0xef, 0x39, 0xa8, 0x7f, 0x5e, 0xd1, 0xef, + 0x81, 0xf4, 0xbd, 0x96, 0xef, 0x05, 0xa8, 0x9f, 0xa3, 0xe8, 0xf7, + 0x44, 0xfa, 0x5e, 0xcb, 0xf7, 0x22, 0xd4, 0xcf, 0x55, 0xf4, 0x7b, + 0x21, 0x7d, 0xaf, 0xe5, 0x7b, 0x09, 0xea, 0xff, 0xa0, 0xe8, 0xf7, + 0x46, 0xfa, 0x5e, 0xcb, 0x37, 0x0f, 0xea, 0xff, 0xa8, 0xe8, 0xf7, + 0x41, 0xfa, 0x5e, 0xcb, 0xf7, 0x32, 0xd4, 0xff, 0x49, 0xd1, 0xef, + 0x8b, 0xf4, 0xbd, 0x96, 0xef, 0x15, 0xa8, 0x9f, 0xaf, 0xe8, 0xf7, + 0x43, 0xfa, 0x5e, 0xcb, 0xf7, 0x2a, 0xd4, 0x2f, 0x50, 0xf4, 0x9f, + 0x47, 0xfa, 0x5e, 0xcb, 0xf7, 0xbf, 0xa0, 0x7e, 0xa1, 0xa2, 0xdf, + 0x1f, 0xe9, 0x7b, 0x2d, 0xdf, 0x6b, 0x50, 0xdf, 0xae, 0xe8, 0xc7, + 0xc0, 0x94, 0x5e, 0x5e, 0xcb, 0xf7, 0x67, 0xa8, 0xff, 0x8b, 0xa2, + 0x3f, 0x00, 0xe9, 0x7b, 0x2d, 0xdf, 0x5f, 0xa1, 0x7e, 0x91, 0xa2, + 0x1f, 0x8b, 0xf4, 0xbd, 0x96, 0xef, 0x75, 0xa8, 0x7f, 0x43, 0xd1, + 0x7f, 0x01, 0xe9, 0x7b, 0x2d, 0xdf, 0x9b, 0x50, 0xff, 0x37, 0x45, + 0x7f, 0x20, 0xd2, 0xf7, 0x5a, 0xbe, 0x0e, 0xa8, 0x5f, 0xac, 0xe8, + 0x0f, 0x42, 0xfa, 0x5e, 0xcb, 0xf7, 0x16, 0xd4, 0x2f, 0x51, 0xf4, + 0x07, 0x23, 0x7d, 0xaf, 0xe5, 0x5b, 0x0a, 0xf5, 0x6f, 0x2b, 0xfa, + 0x43, 0x90, 0xbe, 0xd7, 0xf2, 0xbd, 0x03, 0xf5, 0x9d, 0x8a, 0xfe, + 0x50, 0xa4, 0xef, 0xb5, 0x7c, 0xef, 0x42, 0xfd, 0x32, 0x45, 0x3f, + 0x0e, 0xe9, 0x7b, 0x2d, 0xdf, 0xdf, 0xa1, 0xfe, 0x3d, 0xa8, 0xff, + 0x2c, 0xd6, 0x1f, 0x06, 0x35, 0x9f, 0x8b, 0xf2, 0x5a, 0xc0, 0xe5, + 0x30, 0x83, 0x4b, 0xc9, 0xf0, 0x67, 0x9c, 0xc1, 0x6b, 0x09, 0x57, + 0xc0, 0x0c, 0x95, 0x4a, 0x86, 0xe1, 0x38, 0x83, 0xd7, 0x22, 0xae, + 0x82, 0x19, 0xfe, 0xa1, 0x64, 0x18, 0x81, 0x33, 0x78, 0x2d, 0xe3, + 0x6a, 0x98, 0xa1, 0x46, 0xc9, 0xf0, 0x22, 0xce, 0xe0, 0xb5, 0x90, + 0xdd, 0x30, 0xc3, 0x3f, 0x95, 0x0c, 0xf1, 0x38, 0x83, 0xd7, 0x52, + 0xf6, 0xc0, 0x0c, 0xff, 0x52, 0x32, 0x8c, 0xc4, 0x19, 0xbc, 0x16, + 0xf3, 0x7d, 0x98, 0x41, 0x50, 0x32, 0xfc, 0x05, 0x67, 0xf0, 0x5a, + 0xce, 0xff, 0x0d, 0x33, 0xfc, 0x8f, 0x92, 0x21, 0x01, 0x67, 0xf0, + 0x5a, 0xd0, 0x00, 0x66, 0xe0, 0x7c, 0xe4, 0x0c, 0xa3, 0x70, 0x06, + 0xaf, 0x25, 0xed, 0xe3, 0x33, 0x95, 0xf3, 0x55, 0x32, 0x24, 0xa2, + 0x0c, 0xcf, 0x79, 0x2d, 0x69, 0x1e, 0x66, 0x68, 0xa0, 0x64, 0x18, + 0x8d, 0x33, 0x78, 0x2d, 0xe9, 0x3f, 0xc1, 0x0c, 0x26, 0x25, 0xc3, + 0x4b, 0x38, 0x83, 0xd7, 0x92, 0x7e, 0x04, 0x66, 0xf0, 0x53, 0x32, + 0xbc, 0x8c, 0x33, 0x78, 0x2d, 0x69, 0x7f, 0x98, 0xa1, 0xa1, 0x92, + 0x61, 0x0c, 0xce, 0xe0, 0xb5, 0xa4, 0x1f, 0x85, 0x19, 0x1a, 0x29, + 0x19, 0xc6, 0xe2, 0x0c, 0x5e, 0x4b, 0xba, 0x31, 0xcc, 0x10, 0xa0, + 0x64, 0x18, 0x87, 0x33, 0x78, 0x2d, 0xe9, 0x40, 0x98, 0x21, 0x48, + 0xc9, 0x30, 0x1e, 0x67, 0xf0, 0x5a, 0xd2, 0x4d, 0x60, 0x86, 0xc7, + 0x94, 0x0c, 0x13, 0x70, 0x06, 0xaf, 0x25, 0x1d, 0x0c, 0x33, 0x3c, + 0xae, 0x64, 0x98, 0x88, 0x33, 0x78, 0x2d, 0xe9, 0x10, 0x98, 0xa1, + 0xa9, 0x92, 0xe1, 0x15, 0x94, 0xa1, 0x8b, 0xd7, 0x92, 0x6e, 0x06, + 0x33, 0x34, 0x57, 0x32, 0x4c, 0xc2, 0x19, 0xbc, 0x96, 0x74, 0x28, + 0xcc, 0xd0, 0x42, 0xc9, 0xf0, 0x2a, 0xce, 0xe0, 0xb5, 0xa4, 0x5b, + 0xc2, 0x0c, 0x61, 0x4a, 0x86, 0xc9, 0x38, 0x83, 0xd7, 0x92, 0x7e, + 0x02, 0x66, 0x68, 0xa5, 0x64, 0x78, 0x0d, 0x67, 0xf0, 0x5a, 0xd2, + 0xe1, 0x30, 0x43, 0x6b, 0x25, 0xc3, 0xeb, 0x38, 0x83, 0xd7, 0x92, + 0x8e, 0x80, 0x19, 0x9e, 0x54, 0x32, 0x24, 0xe1, 0x0c, 0x5e, 0x4b, + 0xfa, 0x29, 0x98, 0xe1, 0x69, 0x25, 0x43, 0x32, 0xce, 0xe0, 0xb5, + 0xa4, 0x23, 0x61, 0x86, 0x36, 0x30, 0xc3, 0x33, 0x38, 0xc3, 0x14, + 0x98, 0x92, 0x34, 0xd7, 0x58, 0xdf, 0x87, 0x6b, 0x0b, 0xf5, 0xd1, + 0x30, 0xe0, 0x15, 0xa8, 0x81, 0x06, 0x89, 0x7c, 0xdb, 0xc2, 0x0e, + 0xe0, 0x1b, 0xdc, 0x33, 0x3e, 0x3e, 0x5c, 0x3b, 0x1f, 0x1e, 0x66, + 0x47, 0x23, 0x8e, 0x93, 0xe1, 0x77, 0xef, 0xc3, 0xb5, 0xf7, 0x41, + 0x59, 0x02, 0xb0, 0xf2, 0x34, 0xae, 0x03, 0xd4, 0xe8, 0x08, 0xff, + 0xe3, 0x1a, 0x3c, 0x86, 0x35, 0xa6, 0x43, 0xdd, 0x67, 0xb1, 0x46, + 0x27, 0x42, 0x6f, 0x06, 0xd7, 0x19, 0xea, 0x44, 0xe1, 0x2b, 0x89, + 0x29, 0x6f, 0x72, 0xcf, 0xc1, 0x94, 0x2e, 0x38, 0xa7, 0x98, 0x32, + 0x93, 0x8b, 0x86, 0x67, 0x5d, 0x09, 0x9d, 0x14, 0xae, 0x1b, 0x4c, + 0xe9, 0x4e, 0xe8, 0xcc, 0xe2, 0x7a, 0xc0, 0xb3, 0x9e, 0x84, 0x4e, + 0x2a, 0xd7, 0x0b, 0xa6, 0xf4, 0x26, 0x74, 0x66, 0x73, 0x7d, 0xe0, + 0x59, 0x5f, 0x42, 0x67, 0x0e, 0xd7, 0x0f, 0xa6, 0x3c, 0x4f, 0xe8, + 0xcc, 0xe5, 0xfa, 0xc3, 0xb3, 0x18, 0x42, 0x67, 0x1e, 0x37, 0x00, + 0xa6, 0xc4, 0x12, 0x3a, 0xf3, 0xb9, 0x17, 0xe0, 0xd9, 0x40, 0x42, + 0x67, 0x01, 0x37, 0x08, 0xa6, 0x0c, 0x26, 0x74, 0x16, 0x72, 0x43, + 0xe0, 0xd9, 0x50, 0x42, 0xe7, 0x2d, 0x2e, 0x0e, 0xa6, 0x0c, 0x23, + 0x74, 0xd2, 0xb8, 0x3f, 0xc3, 0xb3, 0xe1, 0x84, 0xce, 0x22, 0x6e, + 0x04, 0x4c, 0x79, 0x91, 0xd0, 0x49, 0xe7, 0xe2, 0xe1, 0xd9, 0x48, + 0x42, 0xe7, 0x6d, 0xee, 0x2f, 0x30, 0x25, 0x81, 0xd0, 0x79, 0x87, + 0x1b, 0x05, 0xcf, 0x12, 0x09, 0x9d, 0xc5, 0xdc, 0x68, 0x98, 0xf2, + 0x12, 0xa1, 0xf3, 0x2e, 0xf7, 0x32, 0x3c, 0x1b, 0x43, 0xe8, 0x98, + 0xb9, 0xb1, 0x30, 0x65, 0x1c, 0xa1, 0xb3, 0x84, 0x1b, 0x0f, 0xcf, + 0x26, 0x10, 0x3a, 0xef, 0x71, 0x13, 0x61, 0xca, 0x2b, 0x84, 0xce, + 0x52, 0x6e, 0x12, 0x3c, 0x7b, 0x95, 0xd0, 0x59, 0xc6, 0x4d, 0x86, + 0x29, 0xaf, 0x11, 0x3a, 0xef, 0x73, 0xaf, 0xc3, 0xb3, 0x24, 0x42, + 0x67, 0x39, 0x87, 0x66, 0x10, 0xa6, 0x10, 0x3a, 0x7f, 0xe5, 0xde, + 0x80, 0x67, 0x53, 0x09, 0x9d, 0x15, 0xdc, 0x34, 0x98, 0x32, 0x9d, + 0xd0, 0x59, 0xc9, 0xcd, 0x80, 0x67, 0x6f, 0x12, 0x3a, 0xab, 0xb8, + 0x99, 0x30, 0x25, 0x85, 0xd0, 0x59, 0xcd, 0xcd, 0x82, 0x67, 0xa9, + 0x84, 0xce, 0x07, 0xdc, 0x6c, 0x98, 0x32, 0x87, 0xd0, 0xf9, 0x90, + 0x9b, 0x0b, 0xcf, 0xe6, 0x11, 0x3a, 0x6b, 0xb8, 0xf9, 0x30, 0x65, + 0x01, 0xa1, 0x63, 0xe1, 0x16, 0xc2, 0xb3, 0xb7, 0x08, 0x9d, 0xb5, + 0x5c, 0x1a, 0x4c, 0x59, 0x44, 0xe8, 0xac, 0xe3, 0xd2, 0xe1, 0xd9, + 0xdb, 0x84, 0xce, 0x47, 0xdc, 0x3b, 0x30, 0x65, 0x31, 0xa1, 0xf3, + 0x31, 0xf7, 0x2e, 0x3c, 0x33, 0x13, 0x3a, 0x9f, 0x70, 0x4b, 0x60, + 0xca, 0x7b, 0x84, 0xce, 0x7a, 0x6e, 0x29, 0x3c, 0x5b, 0x46, 0xe8, + 0x6c, 0xe0, 0xde, 0x87, 0x29, 0xcb, 0x09, 0x9d, 0x8d, 0xdc, 0x5f, + 0xe1, 0xd9, 0x0a, 0x42, 0xe7, 0x53, 0x6e, 0x25, 0x4c, 0x59, 0x45, + 0xe8, 0x6c, 0xe2, 0x56, 0xc3, 0xb3, 0x0f, 0x08, 0x9d, 0x0c, 0xee, + 0x43, 0x98, 0xb2, 0x86, 0xd0, 0xc9, 0xe4, 0x2c, 0xf0, 0x6c, 0x2d, + 0xa1, 0xf3, 0x19, 0xb7, 0x0e, 0xa6, 0x7c, 0x44, 0xe8, 0x7c, 0xce, + 0x7d, 0x0c, 0xcf, 0x3e, 0x21, 0x74, 0x36, 0x73, 0xeb, 0x61, 0xca, + 0x06, 0x42, 0xe7, 0x0b, 0x6e, 0x23, 0x3c, 0xfb, 0x94, 0xd0, 0xc9, + 0xe2, 0x36, 0xc1, 0x94, 0x0c, 0x42, 0x67, 0x0b, 0x97, 0x09, 0xcf, + 0x3e, 0x23, 0x74, 0xb6, 0x72, 0x9f, 0xc3, 0x94, 0xcd, 0x84, 0xce, + 0x36, 0xee, 0x0b, 0x78, 0x96, 0x45, 0xe8, 0x6c, 0xe7, 0xb6, 0xc0, + 0x94, 0xad, 0x84, 0xce, 0x0e, 0x6e, 0x1b, 0x3c, 0xdb, 0x4e, 0xe8, + 0xec, 0xe4, 0x76, 0xc0, 0x94, 0x9d, 0x84, 0xce, 0x2e, 0x6e, 0x17, + 0x3c, 0xfb, 0x1b, 0xa1, 0xf3, 0x37, 0xee, 0x4b, 0x98, 0xb2, 0x9b, + 0xd0, 0xf9, 0x92, 0xdb, 0x03, 0xcf, 0xf6, 0x12, 0x3a, 0xbb, 0x39, + 0x2b, 0x4c, 0xf9, 0x8a, 0xd0, 0xd9, 0xc3, 0x7d, 0x0d, 0xcf, 0xf6, + 0x11, 0x3a, 0x7b, 0xb9, 0x6f, 0x60, 0xca, 0x7e, 0x42, 0xc7, 0xca, + 0x1d, 0x80, 0x67, 0xdf, 0x12, 0x3a, 0x5f, 0x71, 0x07, 0x61, 0x8a, + 0x8d, 0xd0, 0xf9, 0x9a, 0x3b, 0x04, 0xcf, 0x0e, 0x13, 0x3a, 0xfb, + 0xb8, 0xef, 0x60, 0xca, 0x11, 0x42, 0xe7, 0x1b, 0xee, 0x28, 0x3c, + 0xfb, 0x9e, 0xd0, 0xd9, 0xcf, 0x1d, 0x83, 0x29, 0xc7, 0x09, 0x9d, + 0x03, 0xdc, 0x09, 0x78, 0x76, 0x92, 0xd0, 0xf9, 0x96, 0xfb, 0x3b, + 0x4c, 0x39, 0x45, 0xe8, 0x1c, 0xe4, 0xb2, 0xe1, 0xd9, 0x69, 0x42, + 0xc7, 0xc6, 0x9d, 0x81, 0x29, 0x67, 0x09, 0x9d, 0x43, 0xdc, 0x39, + 0x78, 0x76, 0x9e, 0xd0, 0x39, 0xcc, 0x5d, 0x80, 0x29, 0x39, 0x84, + 0xce, 0x77, 0xdc, 0x45, 0x78, 0x96, 0x4b, 0xe8, 0x1c, 0xe1, 0x2e, + 0xc1, 0x94, 0x1f, 0x08, 0x9d, 0xa3, 0x5c, 0x1e, 0x3c, 0xfb, 0x91, + 0xd0, 0xf9, 0x9e, 0xbb, 0x0c, 0x53, 0x7e, 0x22, 0x74, 0x8e, 0x71, + 0x57, 0xe0, 0x59, 0x3e, 0xa1, 0x73, 0x9c, 0xbb, 0x0a, 0x53, 0x0a, + 0x08, 0x9d, 0x13, 0xdc, 0x7f, 0xc1, 0xb3, 0x42, 0x42, 0xe7, 0x24, + 0x77, 0x0d, 0xa6, 0xd8, 0x09, 0x9d, 0xbf, 0x73, 0x3f, 0xc3, 0xb3, + 0x5f, 0x08, 0x9d, 0x53, 0xdc, 0xaf, 0x30, 0xa5, 0x88, 0xd0, 0xc9, + 0xe6, 0xae, 0xc3, 0xb3, 0x1b, 0x84, 0xce, 0x69, 0xee, 0x26, 0x4c, + 0xf9, 0x8d, 0xd0, 0x39, 0xc3, 0x39, 0xe0, 0x59, 0x31, 0xa1, 0x73, + 0x96, 0xbb, 0x05, 0x53, 0x4a, 0x08, 0x9d, 0x73, 0x5c, 0x29, 0x3c, + 0xbb, 0x4d, 0xe8, 0x9c, 0xe7, 0xee, 0xc0, 0x14, 0x27, 0xa1, 0x73, + 0x81, 0xbb, 0x0b, 0xcf, 0xca, 0x08, 0x9d, 0x1c, 0xee, 0x77, 0x98, + 0x72, 0x8f, 0xd0, 0xb9, 0xc8, 0x95, 0xc3, 0x33, 0x17, 0xa1, 0x93, + 0xcb, 0x55, 0xc0, 0x94, 0x4a, 0x42, 0xe7, 0x12, 0x57, 0x05, 0xcf, + 0xfe, 0x41, 0xe8, 0xfc, 0xc0, 0x55, 0xc3, 0x94, 0x1a, 0x42, 0x27, + 0x8f, 0x73, 0xc3, 0xb3, 0x7f, 0x12, 0x3a, 0x3f, 0x72, 0x1e, 0x98, + 0xf2, 0x2f, 0x42, 0xe7, 0x32, 0x77, 0x1f, 0x9e, 0x09, 0x84, 0xce, + 0x4f, 0xdc, 0x7f, 0xc3, 0x94, 0xff, 0x21, 0x74, 0xae, 0x70, 0x00, + 0x9d, 0xf9, 0xaa, 0x3a, 0xf9, 0x9c, 0x8f, 0xaf, 0x0f, 0xe7, 0xeb, + 0xab, 0xea, 0x5c, 0xe5, 0x78, 0x78, 0xd6, 0x80, 0xd0, 0x29, 0xe0, + 0xfe, 0x04, 0x53, 0x4c, 0x84, 0xce, 0x7f, 0x71, 0x8f, 0xc0, 0x33, + 0x3f, 0x42, 0xa7, 0x90, 0xf3, 0x87, 0x29, 0x0d, 0x09, 0x9d, 0x6b, + 0xdc, 0xa3, 0xf0, 0xac, 0x11, 0xa1, 0x63, 0xe7, 0x1a, 0xc3, 0x94, + 0x00, 0x42, 0xe7, 0x67, 0x2e, 0x10, 0x9e, 0x05, 0x11, 0x3a, 0xbf, + 0x70, 0x4d, 0x60, 0xca, 0x63, 0x84, 0xce, 0xaf, 0x5c, 0x30, 0x3c, + 0x7b, 0x9c, 0xd0, 0x29, 0xe2, 0x42, 0x60, 0x4a, 0x53, 0x42, 0xe7, + 0x3a, 0xd7, 0x0c, 0x9e, 0x35, 0x27, 0x74, 0x6e, 0x70, 0xa1, 0x30, + 0xa5, 0x05, 0xa1, 0x73, 0x93, 0x6b, 0x09, 0xcf, 0xc2, 0x08, 0x9d, + 0xdf, 0xb8, 0x27, 0x60, 0x4a, 0x2b, 0x42, 0xc7, 0xc1, 0x85, 0xc3, + 0xb3, 0xd6, 0x84, 0x4e, 0x31, 0x17, 0x01, 0x53, 0x9e, 0x24, 0x74, + 0x6e, 0x71, 0x4f, 0xc1, 0xb3, 0xa7, 0x09, 0x9d, 0x12, 0x2e, 0x12, + 0xa6, 0xb4, 0x21, 0x74, 0x4a, 0xb9, 0xb6, 0xf0, 0xec, 0x19, 0x42, + 0xe7, 0x36, 0xd7, 0x0e, 0xa6, 0xb4, 0x27, 0x74, 0xee, 0x70, 0x1d, + 0xe0, 0x59, 0x47, 0x42, 0xc7, 0xc9, 0x3d, 0x0b, 0x53, 0x3a, 0x11, + 0x3a, 0x77, 0xb9, 0xce, 0xf0, 0x2c, 0x8a, 0xd0, 0x29, 0xe3, 0x9e, + 0x83, 0x29, 0x5d, 0x08, 0x9d, 0xdf, 0xb9, 0x68, 0x78, 0xd6, 0x95, + 0xd0, 0xb9, 0xc7, 0x75, 0x83, 0x29, 0xdd, 0x09, 0x9d, 0x72, 0xae, + 0x07, 0x3c, 0xeb, 0x49, 0xe8, 0xb8, 0xb8, 0x5e, 0x30, 0xa5, 0x37, + 0xa1, 0x53, 0xc1, 0xf5, 0x81, 0x67, 0x7d, 0x09, 0x9d, 0x4a, 0xae, + 0x1f, 0x4c, 0x79, 0x9e, 0xd0, 0xa9, 0xe2, 0xfa, 0xc3, 0xb3, 0x18, + 0x42, 0xe7, 0x1f, 0xdc, 0x00, 0x98, 0x12, 0x4b, 0xe8, 0x54, 0x73, + 0x2f, 0xc0, 0xb3, 0x81, 0x84, 0x4e, 0x0d, 0x37, 0x08, 0xa6, 0x0c, + 0x26, 0x74, 0xdc, 0xdc, 0x10, 0x78, 0x36, 0x94, 0xd0, 0xf9, 0x27, + 0x17, 0x07, 0x53, 0x86, 0x11, 0x3a, 0x1e, 0xee, 0xcf, 0xf0, 0x6c, + 0x38, 0xa1, 0xf3, 0x2f, 0x6e, 0x04, 0x4c, 0x79, 0x91, 0xd0, 0xb9, + 0xcf, 0xc5, 0xc3, 0xb3, 0x91, 0x84, 0x8e, 0xc0, 0xfd, 0x05, 0xa6, + 0x24, 0x10, 0x3a, 0xff, 0xcd, 0x8d, 0x82, 0x67, 0x89, 0x84, 0xce, + 0xff, 0x70, 0xa3, 0x61, 0xca, 0x4b, 0x84, 0x0e, 0xe0, 0x5e, 0x86, + 0x67, 0x63, 0x08, 0x1d, 0xce, 0x67, 0x2c, 0x4c, 0x19, 0x47, 0xe8, + 0xf8, 0xf8, 0x8c, 0x87, 0x67, 0x13, 0x08, 0x1d, 0x5f, 0x9f, 0x89, + 0x30, 0xe5, 0x15, 0x42, 0x87, 0xf7, 0x99, 0x04, 0xcf, 0x5e, 0x25, + 0x74, 0x1a, 0xf8, 0x4c, 0x86, 0x29, 0xaf, 0x11, 0x3a, 0x7f, 0xf2, + 0x79, 0x1d, 0x9e, 0x25, 0x11, 0x3a, 0x26, 0x9f, 0x64, 0x98, 0x32, + 0x85, 0xd0, 0x79, 0xc4, 0xe7, 0x0d, 0x78, 0x36, 0x95, 0xd0, 0xf1, + 0xf3, 0x99, 0x06, 0x53, 0xa6, 0x13, 0x3a, 0xfe, 0x3e, 0x33, 0xe0, + 0xd9, 0x9b, 0x84, 0x4e, 0x43, 0x9f, 0x99, 0x30, 0x25, 0x85, 0xd0, + 0x79, 0xd4, 0x67, 0x16, 0x3c, 0x4b, 0x25, 0x74, 0x1a, 0xf9, 0xcc, + 0x86, 0x29, 0x73, 0x08, 0x9d, 0xc6, 0x3e, 0x73, 0xe1, 0xd9, 0x3c, + 0x42, 0x27, 0xc0, 0x67, 0x3e, 0x4c, 0x59, 0x40, 0xe8, 0x04, 0xfa, + 0x2c, 0x84, 0x67, 0x6f, 0x11, 0x3a, 0x41, 0x3e, 0x69, 0x30, 0x65, + 0x11, 0xa1, 0xd3, 0xc4, 0x27, 0x1d, 0x9e, 0xbd, 0x4d, 0xe8, 0x3c, + 0xe6, 0xf3, 0x0e, 0x4c, 0x59, 0x4c, 0xe8, 0x04, 0xfb, 0xbc, 0x0b, + 0xcf, 0xcc, 0x84, 0xce, 0xe3, 0x3e, 0x4b, 0x60, 0xca, 0x7b, 0x84, + 0x4e, 0x88, 0xcf, 0x52, 0x78, 0xb6, 0x8c, 0xd0, 0x69, 0xea, 0xf3, + 0x3e, 0x4c, 0x59, 0x4e, 0xe8, 0x34, 0xf3, 0xf9, 0x2b, 0x3c, 0x5b, + 0x41, 0xe8, 0x34, 0xf7, 0x59, 0x09, 0x53, 0x56, 0x11, 0x3a, 0xa1, + 0x3e, 0xab, 0xe1, 0xd9, 0x07, 0x84, 0x4e, 0x0b, 0x9f, 0x0f, 0x61, + 0xca, 0x1a, 0x42, 0xa7, 0xa5, 0x8f, 0x05, 0x9e, 0xad, 0x25, 0x74, + 0xc2, 0x7c, 0xd6, 0xc1, 0x94, 0x8f, 0x08, 0x9d, 0x27, 0x7c, 0x3e, + 0x86, 0x67, 0x9f, 0x10, 0x3a, 0xad, 0x7c, 0xd6, 0xc3, 0x94, 0x0d, + 0x84, 0x4e, 0xb8, 0xcf, 0x46, 0x78, 0xf6, 0x29, 0xa1, 0xd3, 0xda, + 0x67, 0x13, 0x4c, 0xc9, 0x20, 0x74, 0x22, 0x7c, 0x32, 0xe1, 0xd9, + 0x67, 0x84, 0xce, 0x93, 0x3e, 0x9f, 0xc3, 0x94, 0xcd, 0x84, 0xce, + 0x53, 0x3e, 0x5f, 0xc0, 0xb3, 0x2c, 0x42, 0xe7, 0x69, 0x9f, 0x2d, + 0x30, 0x65, 0x2b, 0xa1, 0x13, 0xe9, 0xb3, 0x0d, 0x9e, 0x6d, 0x27, + 0x74, 0xda, 0xf8, 0xec, 0x80, 0x29, 0x3b, 0x09, 0x9d, 0xb6, 0x3e, + 0xbb, 0xe0, 0xd9, 0xdf, 0xb0, 0x0e, 0x1a, 0x56, 0xfb, 0x15, 0x6a, + 0xa2, 0xee, 0xd9, 0x4b, 0xc9, 0x73, 0xe6, 0x25, 0xbf, 0x35, 0x70, + 0xf2, 0xbc, 0xc9, 0x3e, 0x6d, 0x61, 0x27, 0xcd, 0x24, 0xf9, 0xdf, + 0x7c, 0xe9, 0xcb, 0x43, 0xdb, 0x08, 0xf9, 0xb9, 0x70, 0xa2, 0x6f, + 0x84, 0x9d, 0x6b, 0x88, 0xf5, 0x47, 0xce, 0x9a, 0x96, 0x32, 0x6f, + 0xae, 0x4f, 0x3e, 0xd7, 0x58, 0x3c, 0x9d, 0x33, 0x6d, 0xe6, 0x34, + 0xe4, 0x89, 0x02, 0x73, 0xb7, 0xc3, 0xdd, 0x34, 0x0e, 0x1d, 0x7d, + 0x78, 0x4e, 0x12, 0x84, 0x35, 0x13, 0x79, 0x07, 0x25, 0xbf, 0x35, + 0x6f, 0xfe, 0x9c, 0xe4, 0x01, 0xf3, 0xe6, 0xcd, 0x99, 0xf6, 0x9a, + 0xcf, 0x33, 0xb0, 0x17, 0x28, 0x3a, 0xce, 0x48, 0x09, 0x6d, 0x61, + 0x67, 0x10, 0x67, 0x0f, 0xc5, 0xf7, 0xd6, 0x41, 0xb9, 0x91, 0x3d, + 0xe8, 0x46, 0xf6, 0x4a, 0x37, 0x82, 0x3a, 0xad, 0x05, 0x12, 0x72, + 0xe2, 0x9c, 0x69, 0x73, 0x61, 0xd6, 0x54, 0x74, 0x2f, 0x1d, 0x45, + 0x64, 0x5f, 0x8c, 0x6c, 0xf5, 0xf5, 0xc1, 0xf7, 0x80, 0x3c, 0x99, + 0x1a, 0x63, 0x74, 0xdc, 0x8b, 0x84, 0x66, 0x9c, 0xef, 0xd7, 0xbe, + 0xc8, 0x1d, 0x25, 0x95, 0x7b, 0x4c, 0xf4, 0xcc, 0x49, 0x9d, 0x8c, + 0xfc, 0x7a, 0xd2, 0x94, 0x7b, 0xea, 0xe4, 0xe3, 0x23, 0xc2, 0x77, + 0xa6, 0x9f, 0xc3, 0x3e, 0x09, 0xbe, 0x19, 0x7e, 0x0e, 0x51, 0x7a, + 0x34, 0xc5, 0x7c, 0xcf, 0xd1, 0xb7, 0xfd, 0x8d, 0x94, 0xaf, 0x25, + 0xbe, 0xed, 0x2e, 0xe4, 0x4d, 0xee, 0xf7, 0xf5, 0x55, 0x6e, 0x52, + 0xcc, 0x1b, 0x4d, 0x63, 0x1e, 0xa0, 0x30, 0xbb, 0x1a, 0x63, 0x76, + 0xa3, 0x31, 0xbf, 0xa5, 0x30, 0xbb, 0x93, 0x98, 0x07, 0x61, 0xe1, + 0xd3, 0x98, 0x3d, 0x68, 0x4c, 0x1b, 0x85, 0xd9, 0xd3, 0x18, 0xb3, + 0x17, 0x8d, 0x79, 0x88, 0xc2, 0xec, 0x4d, 0x62, 0x1e, 0xf6, 0x6d, + 0xc0, 0x60, 0xf6, 0xa1, 0x31, 0xbf, 0xa3, 0x30, 0xfb, 0x1a, 0x63, + 0xf6, 0xa3, 0x31, 0x8f, 0x50, 0x98, 0xcf, 0x93, 0x98, 0x47, 0x7d, + 0xff, 0xc4, 0x60, 0xf6, 0xa7, 0x31, 0xbf, 0xa7, 0x30, 0x63, 0x8c, + 0x31, 0x07, 0xd0, 0x98, 0xc7, 0x28, 0xcc, 0x58, 0x12, 0xf3, 0xb8, + 0xaf, 0x89, 0xc1, 0x7c, 0x81, 0xc6, 0x3c, 0x41, 0x61, 0x0e, 0x34, + 0xc6, 0x1c, 0x44, 0x63, 0x9e, 0xa4, 0x30, 0x07, 0x93, 0x98, 0x7f, + 0xf7, 0x7d, 0x84, 0xc1, 0x1c, 0x42, 0x63, 0x9e, 0xa2, 0x30, 0x87, + 0x1a, 0x63, 0xc6, 0xd1, 0x98, 0xd9, 0x14, 0xe6, 0x30, 0x12, 0xf3, + 0xb4, 0xaf, 0x1f, 0x83, 0xf9, 0x67, 0x1a, 0xf3, 0x0c, 0x85, 0x39, + 0xdc, 0x18, 0x73, 0x04, 0x8d, 0x79, 0x96, 0xc2, 0x7c, 0x91, 0xc4, + 0x3c, 0xe7, 0xeb, 0xcf, 0x60, 0xc6, 0xd3, 0x98, 0xe7, 0x29, 0xcc, + 0x91, 0xc6, 0x98, 0x7f, 0xa1, 0x31, 0x2f, 0x50, 0x98, 0x09, 0x24, + 0x66, 0x8e, 0x6f, 0x43, 0x06, 0x73, 0x14, 0x8d, 0x79, 0x91, 0xc2, + 0x4c, 0x34, 0xc6, 0x1c, 0x4d, 0x63, 0xe6, 0x52, 0x98, 0x2f, 0x91, + 0x98, 0x97, 0x7c, 0x1f, 0x65, 0x30, 0x5f, 0xa6, 0x31, 0x7f, 0xa0, + 0x30, 0xc7, 0x18, 0x63, 0x8e, 0xa5, 0x31, 0xf3, 0x28, 0xcc, 0x71, + 0x24, 0xe6, 0x8f, 0xbe, 0x8d, 0x18, 0xcc, 0xf1, 0x34, 0xe6, 0x65, + 0x0a, 0x73, 0x82, 0x31, 0xe6, 0x44, 0x1a, 0xf3, 0x27, 0x0a, 0xf3, + 0x15, 0x12, 0xf3, 0x8a, 0x6f, 0x63, 0x06, 0x73, 0x12, 0x8d, 0x99, + 0x4f, 0x61, 0xbe, 0x6a, 0x8c, 0x39, 0x99, 0xc6, 0xbc, 0x4a, 0x61, + 0xbe, 0x46, 0x62, 0x16, 0xf8, 0x06, 0x30, 0x98, 0xaf, 0xd3, 0x98, + 0xff, 0x45, 0x61, 0x26, 0x19, 0x63, 0x26, 0xd3, 0x98, 0x85, 0x14, + 0xe6, 0x14, 0x12, 0xf3, 0x9a, 0x6f, 0x20, 0x83, 0xf9, 0x06, 0x8d, + 0x69, 0xa7, 0x30, 0xa7, 0x1a, 0x63, 0x4e, 0xa3, 0x31, 0x7f, 0xa6, + 0x30, 0xa7, 0x93, 0x98, 0xbf, 0xf8, 0x06, 0x31, 0x98, 0x33, 0x68, + 0xcc, 0x5f, 0x29, 0xcc, 0x37, 0x8d, 0x31, 0x67, 0xd2, 0x98, 0x45, + 0x14, 0x66, 0x0a, 0x89, 0x79, 0xdd, 0xb7, 0x09, 0x83, 0x39, 0x8b, + 0xc6, 0xbc, 0x41, 0x61, 0xa6, 0x1a, 0x63, 0xce, 0xa6, 0x31, 0x6f, + 0x52, 0x98, 0x73, 0x48, 0xcc, 0xdf, 0x7c, 0x1f, 0x63, 0x30, 0xe7, + 0xd2, 0x98, 0x0e, 0x0a, 0x73, 0x9e, 0x31, 0xe6, 0x7c, 0x1a, 0xb3, + 0x98, 0xc2, 0x5c, 0x40, 0x62, 0xde, 0xf2, 0x0d, 0x66, 0x30, 0x17, + 0xd2, 0x98, 0x25, 0x14, 0xe6, 0x5b, 0xc6, 0x98, 0x69, 0x34, 0x66, + 0x29, 0x85, 0xb9, 0x88, 0xc4, 0xbc, 0xed, 0xfb, 0x38, 0x83, 0x99, + 0x4e, 0x63, 0xde, 0xa1, 0x30, 0xdf, 0x36, 0xc6, 0x7c, 0x87, 0xc6, + 0x74, 0x52, 0x98, 0x8b, 0x49, 0xcc, 0xbb, 0xbe, 0x21, 0x0c, 0xe6, + 0xbb, 0x34, 0x66, 0x19, 0x85, 0x69, 0x36, 0xc6, 0x5c, 0x42, 0x63, + 0xfe, 0x4e, 0x61, 0xbe, 0x47, 0x62, 0xde, 0xf3, 0x6d, 0xca, 0x60, + 0x2e, 0xa5, 0x31, 0xcb, 0x29, 0xcc, 0x65, 0xc6, 0x98, 0xef, 0xd3, + 0x98, 0x2e, 0x0a, 0x73, 0x39, 0x89, 0x59, 0xe1, 0xdb, 0x8c, 0xc1, + 0xfc, 0x2b, 0x8d, 0x59, 0x49, 0x61, 0xae, 0x30, 0xc6, 0x5c, 0x49, + 0x63, 0x56, 0x51, 0x98, 0xab, 0x48, 0xcc, 0x7f, 0xf8, 0x36, 0x67, + 0x30, 0x57, 0xd3, 0x98, 0xd5, 0x14, 0xe6, 0x07, 0xc6, 0x98, 0x1f, + 0xd2, 0x98, 0x35, 0x14, 0xe6, 0x1a, 0x12, 0xd3, 0xed, 0x1b, 0xca, + 0x60, 0x5a, 0x68, 0xcc, 0x7f, 0x52, 0x98, 0x6b, 0x8d, 0x31, 0xd7, + 0xd1, 0x98, 0x1e, 0x0a, 0xf3, 0x23, 0x12, 0xf3, 0x5f, 0xbe, 0x2d, + 0x18, 0xcc, 0x8f, 0x69, 0xcc, 0xfb, 0x14, 0xe6, 0x27, 0xc6, 0x98, + 0xeb, 0x69, 0x4c, 0x81, 0xc2, 0xdc, 0x40, 0x62, 0xfe, 0xb7, 0x6f, + 0x4b, 0x06, 0x73, 0x23, 0x8d, 0xf9, 0x3f, 0x14, 0xe6, 0xa7, 0xc6, + 0x98, 0x9b, 0x68, 0x4c, 0x40, 0x61, 0x66, 0x90, 0x98, 0x1c, 0x1f, + 0xc6, 0x60, 0x66, 0xd2, 0x98, 0xf2, 0xa5, 0x45, 0xcc, 0xcf, 0x8c, + 0x31, 0x3f, 0xa7, 0x31, 0x7d, 0x79, 0x12, 0x73, 0x33, 0x89, 0xc9, + 0xf3, 0x4f, 0x30, 0x98, 0x5f, 0xd0, 0x98, 0x0d, 0x28, 0xcc, 0x2c, + 0x63, 0xcc, 0x2d, 0x34, 0xe6, 0x9f, 0x28, 0xcc, 0xad, 0x24, 0xa6, + 0x89, 0x6f, 0xc5, 0x60, 0x6e, 0xa3, 0x31, 0x1f, 0xa1, 0x30, 0xb7, + 0x1b, 0x63, 0xee, 0xa0, 0x31, 0xfd, 0x28, 0xcc, 0x9d, 0x24, 0xa6, + 0x3f, 0x1f, 0xce, 0x60, 0xee, 0xa2, 0x31, 0x1b, 0x52, 0x98, 0x7f, + 0x33, 0xc6, 0xfc, 0x92, 0xc6, 0x7c, 0x94, 0xc2, 0xdc, 0x4d, 0x62, + 0x36, 0xe2, 0x5b, 0x33, 0x98, 0x7b, 0x68, 0xcc, 0xc6, 0x14, 0xe6, + 0x5e, 0x63, 0x4c, 0x2b, 0x8d, 0x19, 0x40, 0x61, 0x7e, 0x45, 0x62, + 0x06, 0xf2, 0x11, 0x0c, 0xe6, 0xd7, 0x34, 0x66, 0x10, 0x85, 0xb9, + 0xcf, 0x18, 0xf3, 0x1b, 0x1a, 0xb3, 0x09, 0x85, 0xb9, 0x9f, 0xc4, + 0x7c, 0x8c, 0x7f, 0x92, 0xc1, 0x3c, 0x40, 0x63, 0x06, 0x53, 0x98, + 0xdf, 0x1a, 0x63, 0x1e, 0xa4, 0x31, 0x1f, 0xa7, 0x30, 0x6d, 0x24, + 0x66, 0x08, 0xff, 0x14, 0x83, 0x79, 0x88, 0xc6, 0x6c, 0x4a, 0x61, + 0x1e, 0x36, 0xc6, 0xfc, 0x8e, 0xc6, 0x6c, 0x46, 0x61, 0x1e, 0x21, + 0x31, 0x9b, 0xf3, 0x4f, 0x33, 0x98, 0x47, 0x69, 0xcc, 0x50, 0x0a, + 0xf3, 0x7b, 0x63, 0xcc, 0x63, 0x34, 0x66, 0x0b, 0x0a, 0xf3, 0x38, + 0x89, 0xd9, 0x92, 0x8f, 0x64, 0x30, 0x4f, 0xd0, 0x98, 0x61, 0x14, + 0xe6, 0x49, 0x63, 0xcc, 0xbf, 0xd3, 0x98, 0x4f, 0x50, 0x98, 0xa7, + 0x48, 0xcc, 0x56, 0x7c, 0x1b, 0x06, 0x33, 0x9b, 0xc6, 0x0c, 0xa7, + 0x30, 0x4f, 0x1b, 0x63, 0x9e, 0xa1, 0x31, 0x5b, 0x53, 0x98, 0x67, + 0x49, 0xcc, 0x08, 0xbe, 0x2d, 0x83, 0x79, 0x8e, 0xc6, 0x7c, 0x92, + 0xc2, 0x3c, 0x6f, 0x8c, 0x79, 0x81, 0xc6, 0x7c, 0x8a, 0xc2, 0xcc, + 0x21, 0x31, 0x9f, 0xe6, 0x9f, 0x61, 0x30, 0x2f, 0xd2, 0x98, 0x91, + 0x14, 0x66, 0xae, 0x31, 0xe6, 0x25, 0x1a, 0xb3, 0x0d, 0x85, 0xf9, + 0x03, 0x89, 0xd9, 0x96, 0x6f, 0xc7, 0x60, 0xe6, 0xd1, 0x98, 0xcf, + 0x50, 0x98, 0x3f, 0x1a, 0x63, 0x5e, 0xa6, 0x31, 0xdb, 0x51, 0x98, + 0x3f, 0x91, 0x98, 0xed, 0xf9, 0xf6, 0x0c, 0xe6, 0x15, 0x1a, 0xb3, + 0x03, 0x85, 0x99, 0x6f, 0x8c, 0x79, 0x95, 0xc6, 0xec, 0x48, 0x61, + 0x16, 0x90, 0x98, 0xcf, 0xf2, 0x1d, 0x18, 0xcc, 0xff, 0xa2, 0x31, + 0x3b, 0x51, 0x98, 0x85, 0xc6, 0x98, 0xd7, 0x68, 0xcc, 0xce, 0x14, + 0xa6, 0x9d, 0xc4, 0x8c, 0xe2, 0x3b, 0x32, 0x98, 0x3f, 0xd3, 0x98, + 0xcf, 0x51, 0x98, 0xbf, 0x18, 0x63, 0xfe, 0x4a, 0x63, 0x76, 0xa1, + 0x30, 0x8b, 0x48, 0xcc, 0x68, 0xfe, 0x59, 0x06, 0xf3, 0x3a, 0x8d, + 0xd9, 0x95, 0xc2, 0xbc, 0x61, 0x8c, 0x79, 0x93, 0xc6, 0xec, 0x46, + 0x61, 0xfe, 0x46, 0x62, 0x76, 0xe7, 0x3b, 0x31, 0x98, 0x0e, 0x1a, + 0xb3, 0x07, 0x85, 0x59, 0x6c, 0x8c, 0x79, 0x8b, 0xc6, 0xec, 0x49, + 0x61, 0x96, 0x90, 0x98, 0xbd, 0xf8, 0xce, 0x0c, 0x66, 0x29, 0x8d, + 0xd9, 0x9b, 0xc2, 0xbc, 0x6d, 0x8c, 0x79, 0x87, 0xc6, 0xec, 0x43, + 0x61, 0x3a, 0x49, 0xcc, 0xbe, 0x7c, 0x14, 0x83, 0x79, 0x97, 0xc6, + 0xec, 0x47, 0x61, 0x96, 0x19, 0x63, 0xfe, 0x4e, 0x63, 0x3e, 0x4f, + 0x61, 0xde, 0x23, 0x31, 0xfb, 0xf3, 0xcf, 0x31, 0x98, 0xe5, 0x34, + 0x66, 0x0c, 0x85, 0xe9, 0x32, 0xc6, 0xac, 0xa0, 0x31, 0x07, 0x50, + 0x98, 0x95, 0x24, 0x66, 0x2c, 0xdf, 0x85, 0xc1, 0xac, 0xa2, 0x31, + 0x5f, 0xa0, 0x30, 0xff, 0x61, 0x8c, 0x59, 0x4d, 0x63, 0x0e, 0xa4, + 0x30, 0x6b, 0x48, 0xcc, 0x41, 0x7c, 0x34, 0x83, 0xe9, 0xa6, 0x31, + 0x07, 0x53, 0x98, 0xff, 0x34, 0xc6, 0xf4, 0xd0, 0x98, 0x43, 0x28, + 0xcc, 0x7f, 0x91, 0x98, 0x43, 0xf9, 0xae, 0x0c, 0xe6, 0x7d, 0x1a, + 0x33, 0x8e, 0xc2, 0x14, 0x8c, 0x31, 0xff, 0x9b, 0xc6, 0x1c, 0x46, + 0x61, 0xfe, 0x0f, 0x89, 0xf9, 0x67, 0xbe, 0x1b, 0x83, 0x09, 0x68, + 0xcc, 0xe1, 0x14, 0x26, 0xe7, 0x6b, 0x88, 0xe9, 0xe3, 0x4b, 0x61, + 0x8e, 0xa0, 0x30, 0x7d, 0x7d, 0x09, 0xcc, 0x17, 0xf9, 0xee, 0x0c, + 0x26, 0xef, 0x4b, 0x61, 0xc6, 0x53, 0x98, 0x0d, 0x8c, 0x31, 0xff, + 0x44, 0x63, 0x8e, 0xa4, 0x30, 0x4d, 0x24, 0xe6, 0x5f, 0xf8, 0x1e, + 0x0c, 0xe6, 0x23, 0x34, 0x66, 0x02, 0x85, 0xe9, 0x67, 0x8c, 0xe9, + 0x4f, 0x63, 0x8e, 0xa2, 0x30, 0x1b, 0x92, 0x98, 0x89, 0x7c, 0x4f, + 0x06, 0xf3, 0x51, 0x1a, 0x73, 0x34, 0x85, 0xd9, 0xc8, 0x18, 0xb3, + 0x31, 0x8d, 0xf9, 0x12, 0x85, 0x19, 0x40, 0x62, 0xbe, 0xcc, 0xf7, + 0x62, 0x30, 0x03, 0x69, 0xcc, 0x31, 0x14, 0x66, 0x90, 0x31, 0x66, + 0x13, 0x1a, 0x73, 0x2c, 0x85, 0xf9, 0x18, 0x89, 0x39, 0x8e, 0xef, + 0xcd, 0x60, 0x06, 0xd3, 0x98, 0xe3, 0x29, 0xcc, 0xc7, 0x8d, 0x31, + 0x43, 0x68, 0xcc, 0x09, 0x14, 0x66, 0x53, 0x12, 0x73, 0x22, 0xdf, + 0x87, 0xc1, 0x6c, 0x46, 0x63, 0xbe, 0x42, 0x61, 0x36, 0x37, 0xc6, + 0x0c, 0xa5, 0x31, 0x27, 0x51, 0x98, 0x2d, 0x48, 0xcc, 0x57, 0xf9, + 0xbe, 0x0c, 0x66, 0x4b, 0x1a, 0x73, 0x32, 0x85, 0x19, 0x66, 0x8c, + 0xf9, 0x04, 0x8d, 0xf9, 0x1a, 0x85, 0xd9, 0x8a, 0xc4, 0x7c, 0x9d, + 0xef, 0xc7, 0x60, 0x86, 0xd3, 0x98, 0x49, 0x14, 0x66, 0x6b, 0x63, + 0xcc, 0x08, 0x1a, 0x33, 0x99, 0xc2, 0x7c, 0x92, 0xc4, 0x9c, 0xc2, + 0x3f, 0xcf, 0x60, 0x3e, 0x45, 0x63, 0xbe, 0x41, 0x61, 0x3e, 0x6d, + 0x8c, 0x19, 0x49, 0x63, 0x4e, 0xa5, 0x30, 0xdb, 0x90, 0x98, 0xd3, + 0xf8, 0xfe, 0x0c, 0x66, 0x5b, 0x1a, 0x73, 0x3a, 0x85, 0xf9, 0x8c, + 0x31, 0x66, 0x3b, 0x1a, 0x73, 0x06, 0x85, 0xd9, 0x9e, 0xc4, 0x7c, + 0x93, 0x8f, 0x61, 0x30, 0x3b, 0xd0, 0x98, 0x33, 0x29, 0xcc, 0x8e, + 0xc6, 0x98, 0xcf, 0xd2, 0x98, 0x29, 0x14, 0x66, 0x27, 0x12, 0x73, + 0x16, 0x3f, 0x80, 0xc1, 0xec, 0x4c, 0x63, 0xa6, 0x52, 0x98, 0x51, + 0xc6, 0x98, 0xcf, 0xd1, 0x98, 0xb3, 0x29, 0xcc, 0x2e, 0x24, 0xe6, + 0x1c, 0x3e, 0x96, 0xc1, 0x8c, 0xa6, 0x31, 0xe7, 0x52, 0x98, 0x5d, + 0x8d, 0x31, 0xbb, 0xd1, 0x98, 0xf3, 0x28, 0xcc, 0xee, 0x24, 0xe6, + 0x7c, 0xfe, 0x05, 0x06, 0xb3, 0x07, 0x8d, 0xb9, 0x80, 0xc2, 0xec, + 0x69, 0x8c, 0xd9, 0x8b, 0xc6, 0x5c, 0x48, 0x61, 0xf6, 0x26, 0x31, + 0xdf, 0xe2, 0x07, 0x32, 0x98, 0x7d, 0x68, 0xcc, 0x34, 0x0a, 0xb3, + 0xaf, 0x31, 0x66, 0x3f, 0x1a, 0x73, 0x11, 0x85, 0xf9, 0x3c, 0x89, + 0x99, 0xce, 0x0f, 0x62, 0x30, 0xfb, 0xd3, 0x98, 0x6f, 0x53, 0x98, + 0x31, 0xc6, 0x98, 0x03, 0x68, 0xcc, 0x77, 0x28, 0xcc, 0x58, 0x12, + 0x73, 0x31, 0x3f, 0x98, 0xc1, 0x7c, 0x81, 0xc6, 0x7c, 0x97, 0xc2, + 0x1c, 0x68, 0x8c, 0x39, 0x88, 0xc6, 0x34, 0x53, 0x98, 0x83, 0x49, + 0xcc, 0x25, 0xfc, 0x10, 0x06, 0x73, 0x08, 0x8d, 0xf9, 0x1e, 0x85, + 0x39, 0xd4, 0x18, 0x33, 0x8e, 0xc6, 0x5c, 0x4a, 0x61, 0x0e, 0x23, + 0x31, 0x97, 0xf1, 0x43, 0x19, 0xcc, 0x3f, 0xd3, 0x98, 0xef, 0x53, + 0x98, 0xc3, 0x8d, 0x31, 0x47, 0xd0, 0x98, 0xcb, 0x29, 0xcc, 0x17, + 0x49, 0xcc, 0xbf, 0xf2, 0x71, 0x0c, 0x66, 0x3c, 0x8d, 0xb9, 0x82, + 0xc2, 0x1c, 0x69, 0x8c, 0xf9, 0x17, 0x1a, 0x73, 0x25, 0x85, 0x99, + 0x40, 0x62, 0xae, 0xe2, 0x87, 0x31, 0x98, 0xa3, 0x68, 0xcc, 0xd5, + 0x14, 0x66, 0xa2, 0x31, 0xe6, 0x68, 0x1a, 0xf3, 0x03, 0x0a, 0xf3, + 0x25, 0x12, 0xf3, 0x43, 0xfe, 0xcf, 0x0c, 0xe6, 0xcb, 0x34, 0xe6, + 0x1a, 0x0a, 0x73, 0x8c, 0x31, 0xe6, 0x58, 0x1a, 0xd3, 0x42, 0x61, + 0x8e, 0x23, 0x31, 0xd7, 0xf2, 0xc3, 0x19, 0xcc, 0xf1, 0x34, 0xe6, + 0x3a, 0x0a, 0x73, 0x82, 0x31, 0xe6, 0x44, 0x1a, 0xf3, 0x23, 0x0a, + 0xf3, 0x15, 0x12, 0xf3, 0x63, 0x7e, 0x04, 0x83, 0x39, 0x89, 0xc6, + 0xfc, 0x84, 0xc2, 0x7c, 0xd5, 0x18, 0x73, 0x32, 0x8d, 0xb9, 0x9e, + 0xc2, 0x7c, 0x8d, 0xc4, 0xdc, 0xc0, 0xbf, 0xc8, 0x60, 0xbe, 0x4e, + 0x63, 0x6e, 0xa4, 0x30, 0x93, 0x8c, 0x31, 0x93, 0x69, 0xcc, 0x4f, + 0x29, 0xcc, 0x29, 0x24, 0xe6, 0x26, 0x3e, 0x9e, 0xc1, 0x7c, 0x83, + 0xc6, 0xcc, 0xa0, 0x30, 0xa7, 0x1a, 0x63, 0x4e, 0xa3, 0x31, 0x33, + 0x29, 0xcc, 0xe9, 0x24, 0xe6, 0x67, 0xfc, 0x48, 0x06, 0x73, 0x06, + 0x8d, 0xf9, 0x39, 0x85, 0xf9, 0xa6, 0x31, 0xe6, 0x4c, 0x1a, 0x73, + 0x33, 0x85, 0x99, 0x42, 0x62, 0x7e, 0xc1, 0xff, 0x85, 0xc1, 0x9c, + 0x45, 0x63, 0x66, 0x51, 0x98, 0xa9, 0xc6, 0x98, 0xb3, 0x69, 0xcc, + 0x2d, 0x14, 0xe6, 0x1c, 0x12, 0x73, 0x2b, 0x9f, 0xc0, 0x60, 0xce, + 0xa5, 0x31, 0xb7, 0x51, 0x98, 0xf3, 0x8c, 0x31, 0xe7, 0xd3, 0x98, + 0xdb, 0x29, 0xcc, 0x05, 0x24, 0xe6, 0x0e, 0x7e, 0x14, 0x83, 0xb9, + 0x90, 0xc6, 0xdc, 0x49, 0x61, 0xbe, 0x65, 0x8c, 0x99, 0x46, 0x63, + 0xee, 0xa2, 0x30, 0x17, 0x91, 0x98, 0x7f, 0xe3, 0x13, 0x19, 0xcc, + 0x74, 0x1a, 0xf3, 0x4b, 0x0a, 0xf3, 0x6d, 0x63, 0xcc, 0x77, 0x68, + 0xcc, 0xdd, 0x14, 0xe6, 0x62, 0x12, 0x73, 0x0f, 0x3f, 0x9a, 0xc1, + 0x7c, 0x97, 0xc6, 0xdc, 0x4b, 0x61, 0x9a, 0x8d, 0x31, 0x97, 0xd0, + 0x98, 0x56, 0x0a, 0xf3, 0x3d, 0x12, 0xf3, 0x2b, 0xfe, 0x25, 0x06, + 0x73, 0x29, 0x8d, 0xf9, 0x35, 0x85, 0xb9, 0xcc, 0x18, 0xf3, 0x7d, + 0x1a, 0x73, 0x1f, 0x85, 0xb9, 0x9c, 0xc4, 0xfc, 0x86, 0x7f, 0x99, + 0xc1, 0xfc, 0x2b, 0x8d, 0xb9, 0x9f, 0xc2, 0x5c, 0x61, 0x8c, 0xb9, + 0x92, 0xc6, 0x3c, 0x40, 0x61, 0xae, 0x22, 0x31, 0xbf, 0xe5, 0xc7, + 0x30, 0x98, 0xab, 0x69, 0xcc, 0x83, 0x14, 0xe6, 0x07, 0xc6, 0x98, + 0x1f, 0xd2, 0x98, 0x36, 0x0a, 0x73, 0x0d, 0x89, 0x79, 0x88, 0x1f, + 0xcb, 0x60, 0x5a, 0x68, 0xcc, 0xc3, 0x14, 0xe6, 0x5a, 0x63, 0xcc, + 0x75, 0x34, 0xe6, 0x77, 0x14, 0xe6, 0x47, 0x24, 0xe6, 0x11, 0x7e, + 0x1c, 0x83, 0xf9, 0x31, 0x8d, 0x79, 0x94, 0xc2, 0xfc, 0xc4, 0x18, + 0x73, 0x3d, 0x8d, 0xf9, 0x3d, 0x85, 0xb9, 0x81, 0xc4, 0x3c, 0xc6, + 0x8f, 0x67, 0x30, 0x37, 0xd2, 0x98, 0xc7, 0x29, 0xcc, 0x4f, 0x8d, + 0x31, 0x37, 0xd1, 0x98, 0x27, 0x28, 0xcc, 0x0c, 0x12, 0xf3, 0x24, + 0x3f, 0x81, 0xc1, 0xcc, 0xa4, 0x31, 0xff, 0x4e, 0x61, 0x7e, 0x66, + 0x8c, 0xf9, 0x39, 0x8d, 0x79, 0x8a, 0xc2, 0xdc, 0x4c, 0x62, 0x66, + 0xf3, 0x13, 0x19, 0xcc, 0x2f, 0x68, 0xcc, 0xd3, 0x14, 0x66, 0x96, + 0x31, 0xe6, 0x16, 0x1a, 0xf3, 0x0c, 0x85, 0xb9, 0x95, 0xc4, 0x3c, + 0xcb, 0xbf, 0xc2, 0x60, 0x6e, 0xa3, 0x31, 0xcf, 0x51, 0x98, 0xdb, + 0x8d, 0x31, 0x77, 0xd0, 0x98, 0xe7, 0x29, 0xcc, 0x9d, 0x24, 0xe6, + 0x05, 0x7e, 0x12, 0x83, 0xb9, 0x8b, 0xc6, 0xcc, 0xa1, 0x30, 0xff, + 0xa6, 0x87, 0x19, 0x01, 0xff, 0x2b, 0xe2, 0x82, 0x08, 0x57, 0xdf, + 0xc1, 0xb3, 0xe6, 0xcc, 0x9c, 0x8c, 0xc2, 0xdc, 0x7d, 0xe9, 0x2b, + 0xaa, 0x5f, 0xe4, 0x51, 0x94, 0xb4, 0x9f, 0xb9, 0x60, 0x42, 0x69, + 0xc0, 0x9c, 0x39, 0x93, 0xd3, 0x24, 0xa7, 0xe0, 0xdd, 0xbe, 0x17, + 0x79, 0xfe, 0x55, 0xbc, 0x6c, 0x33, 0x6d, 0xfe, 0xe6, 0xe7, 0xe5, + 0x2b, 0x37, 0xc2, 0x57, 0xde, 0x23, 0x5d, 0x24, 0x97, 0x9f, 0x88, + 0x2f, 0xb2, 0xd7, 0x37, 0x97, 0xe7, 0x27, 0xe3, 0xe8, 0x65, 0xcf, + 0x4f, 0xb7, 0xe2, 0xb0, 0x69, 0xe9, 0xf9, 0x0d, 0x8e, 0x05, 0x2c, + 0x3f, 0xd2, 0xef, 0xd2, 0xa5, 0xce, 0xfd, 0x1f, 0xdb, 0x31, 0xf1, + 0x79, 0x39, 0xad, 0xef, 0x88, 0x12, 0x2a, 0xed, 0xb1, 0x93, 0xdd, + 0xfa, 0xa3, 0xb4, 0x86, 0x5b, 0x5f, 0xec, 0x2f, 0xe7, 0x45, 0x69, + 0x28, 0x2f, 0x4a, 0x0b, 0xc1, 0x00, 0x56, 0xdf, 0x4b, 0x3c, 0xff, + 0x9a, 0x14, 0xce, 0xce, 0x87, 0x43, 0xee, 0xcc, 0x28, 0x0c, 0xdd, + 0xef, 0xf0, 0x7e, 0x24, 0x17, 0xe3, 0x51, 0xf3, 0x26, 0xbf, 0x81, + 0xdc, 0x91, 0xbf, 0xf2, 0xf5, 0x41, 0xdf, 0xa0, 0x93, 0x7b, 0x44, + 0xfe, 0x05, 0x26, 0x7e, 0xad, 0x3c, 0xc1, 0x70, 0xae, 0x53, 0xa7, + 0xce, 0xe2, 0xff, 0x67, 0xa2, 0xa8, 0x86, 0x73, 0x3b, 0xcf, 0x9c, + 0x9c, 0x3a, 0xb7, 0xb3, 0xf8, 0x63, 0xa7, 0x39, 0x6f, 0xbc, 0x86, + 0x2e, 0xef, 0x23, 0x09, 0x67, 0x12, 0x7d, 0x8a, 0x7d, 0xc4, 0xe7, + 0xab, 0xfc, 0xfd, 0x8f, 0xfc, 0x47, 0xfe, 0x23, 0xff, 0x91, 0xff, + 0xc8, 0x7f, 0xe4, 0x3f, 0xf2, 0x7f, 0x20, 0x4f, 0xad, 0xb2, 0x5a, + 0x5f, 0x92, 0xfe, 0xdd, 0x25, 0xc3, 0x6a, 0x9d, 0x4c, 0xff, 0x6c, + 0x1a, 0x63, 0x85, 0x69, 0x26, 0x4d, 0xb6, 0xff, 0xdf, 0xc8, 0xe8, + 0xdb, 0x00, 0xac, 0x13, 0xa3, 0xfa, 0x72, 0x53, 0xab, 0x00, 0xf8, + 0xe6, 0x09, 0xea, 0xe7, 0xb0, 0x5d, 0x00, 0x80, 0x7d, 0x61, 0x54, + 0x5a, 0x83, 0xa6, 0xe1, 0xe1, 0x41, 0xea, 0xa9, 0x29, 0x94, 0x3a, + 0xfd, 0xff, 0x98, 0xac, 0x01, 0xb7, 0x6f, 0x1f, 0x13, 0xe3, 0x04, + 0x07, 0x64, 0x82, 0xe2, 0xf2, 0x5b, 0x09, 0xd4, 0xcf, 0xc3, 0xed, + 0xe0, 0x66, 0x45, 0xd1, 0x70, 0x2a, 0xed, 0x91, 0x84, 0x2f, 0x6d, + 0xcb, 0x23, 0xe4, 0x33, 0xd3, 0xb8, 0x3d, 0xb6, 0xf5, 0x28, 0x58, + 0x70, 0x4f, 0x73, 0xdd, 0x64, 0xbc, 0xb7, 0x87, 0x15, 0x19, 0xa7, + 0x95, 0xc8, 0x87, 0x46, 0x56, 0x2b, 0x2d, 0xce, 0x82, 0x0b, 0xa7, + 0x6e, 0x8a, 0xf1, 0x84, 0xa3, 0x73, 0x2b, 0xbe, 0xba, 0x01, 0xd6, + 0x90, 0x3f, 0xfb, 0xad, 0x14, 0x5c, 0x1b, 0x73, 0x85, 0x95, 0x7e, + 0x54, 0xa6, 0x88, 0x1d, 0x42, 0xa5, 0x59, 0x8c, 0xf2, 0xcc, 0xf1, + 0xfd, 0xf2, 0x41, 0xf1, 0x9b, 0x68, 0x99, 0x5c, 0x2a, 0xa8, 0x9b, + 0xd8, 0xc2, 0xbd, 0xdc, 0xcf, 0x1c, 0x87, 0x56, 0xe6, 0x3c, 0x4c, + 0xc2, 0x8c, 0x0c, 0xba, 0x03, 0x36, 0x7f, 0xec, 0x16, 0xe7, 0x6d, + 0xc6, 0xde, 0x2d, 0x5a, 0x78, 0x16, 0x1c, 0x0d, 0x24, 0x7e, 0x6e, + 0x73, 0x0c, 0x5c, 0x1c, 0xb6, 0x13, 0x48, 0x2f, 0x88, 0x22, 0xbd, + 0x4f, 0x08, 0x85, 0x63, 0xc4, 0x4a, 0xa1, 0xf7, 0x21, 0xc1, 0xb5, + 0x1a, 0x47, 0xb6, 0x1e, 0x69, 0xab, 0x9b, 0x2c, 0x69, 0xea, 0xe5, + 0x7e, 0xfe, 0xcd, 0xfc, 0xfd, 0xd2, 0x05, 0x61, 0x51, 0xaa, 0x7b, + 0x27, 0x0a, 0xca, 0xed, 0xbf, 0x52, 0xc8, 0x8e, 0xdd, 0x09, 0x1c, + 0xfd, 0x89, 0xdf, 0x27, 0x95, 0x81, 0x8c, 0xc7, 0x16, 0xb8, 0xcb, + 0x26, 0xd1, 0xd9, 0xf8, 0x41, 0x79, 0xc2, 0x25, 0x1c, 0x8a, 0x1a, + 0xbe, 0x0a, 0x2e, 0x8b, 0xf8, 0x2d, 0x34, 0x0a, 0xab, 0x9b, 0x3c, + 0xce, 0x73, 0xc6, 0xf2, 0x6f, 0x7e, 0xff, 0x5b, 0xed, 0x05, 0x77, + 0xc6, 0x0e, 0xbb, 0x99, 0x8b, 0x42, 0x7b, 0x47, 0x1c, 0x04, 0x99, + 0x4d, 0x97, 0x00, 0x21, 0x55, 0xbd, 0x3f, 0x58, 0x23, 0x78, 0x5e, + 0xe1, 0x62, 0xaf, 0x81, 0xcc, 0x00, 0x3a, 0x9f, 0x5f, 0x52, 0x11, + 0x38, 0xde, 0x81, 0xe3, 0x1a, 0x9b, 0x2b, 0x3d, 0x9f, 0xb5, 0xfe, + 0xdf, 0xbb, 0x3f, 0xef, 0x62, 0x7a, 0x2a, 0xda, 0x48, 0x9e, 0xaa, + 0xdb, 0x15, 0xfa, 0xe4, 0x81, 0x82, 0x98, 0xf6, 0xa7, 0xcb, 0x51, + 0xab, 0x17, 0x7b, 0xd5, 0x33, 0x9f, 0x1b, 0x5d, 0x01, 0x36, 0x05, + 0x2b, 0x3f, 0x47, 0xe5, 0x80, 0x5f, 0xa2, 0xb8, 0x88, 0xa3, 0x20, + 0x27, 0x8a, 0xc9, 0x18, 0xf8, 0x81, 0xe7, 0xfe, 0x9a, 0x10, 0x2e, + 0xde, 0xee, 0x39, 0xd8, 0xee, 0xa1, 0xf1, 0xa9, 0xaf, 0xf4, 0x38, + 0x72, 0xc3, 0x48, 0x8e, 0xd4, 0xed, 0x01, 0xa4, 0x54, 0x83, 0x03, + 0x11, 0x41, 0x9b, 0xc1, 0x2a, 0xf8, 0x31, 0xa7, 0xd7, 0x94, 0x8e, + 0xe4, 0xda, 0x15, 0x80, 0xbc, 0x3e, 0xea, 0xcf, 0x35, 0x60, 0x5b, + 0x43, 0xce, 0x7f, 0x1d, 0xa8, 0x49, 0x61, 0x73, 0x46, 0x66, 0x54, + 0x97, 0xcf, 0xed, 0x71, 0x1c, 0x9c, 0xef, 0x27, 0xa7, 0x34, 0x8b, + 0x7e, 0x16, 0x57, 0x1d, 0x0d, 0xdb, 0x3d, 0x1b, 0xc8, 0x6a, 0x1b, + 0x4b, 0x50, 0xb8, 0x2c, 0x61, 0x0d, 0xeb, 0x9e, 0x4b, 0x94, 0xb6, + 0xab, 0xad, 0x46, 0xb2, 0xba, 0x19, 0x6c, 0xa7, 0x12, 0xcd, 0x9d, + 0x90, 0x9a, 0xfc, 0x57, 0x07, 0x7c, 0x33, 0x00, 0xab, 0x1b, 0x71, + 0x69, 0xc2, 0xbe, 0x70, 0xae, 0xe1, 0x36, 0x54, 0xca, 0x0d, 0xf7, + 0x81, 0x8a, 0xa9, 0xc4, 0xcf, 0xe5, 0x33, 0xe1, 0xdf, 0x09, 0x4e, + 0xb0, 0xb9, 0x09, 0x9b, 0xb7, 0xf3, 0x51, 0x70, 0xc9, 0xe6, 0xb1, + 0x8f, 0x53, 0x6c, 0xa3, 0xb1, 0xb9, 0x07, 0xe0, 0x93, 0xe3, 0xbb, + 0xaf, 0x38, 0x71, 0x7a, 0x25, 0xfb, 0xc9, 0x3e, 0x15, 0x1f, 0x23, + 0x3f, 0x93, 0x56, 0x23, 0x86, 0x93, 0x26, 0xc6, 0x94, 0x5c, 0x59, + 0x6c, 0xb1, 0xda, 0x1b, 0x7c, 0x66, 0xd1, 0x52, 0xf4, 0xe6, 0x8d, + 0xb5, 0xcc, 0x08, 0xa9, 0xd3, 0x13, 0xa1, 0x25, 0xc5, 0x39, 0x8f, + 0xfa, 0xab, 0x91, 0xf6, 0xa7, 0xc1, 0x6f, 0x2f, 0x72, 0x5c, 0xe2, + 0x1d, 0xfb, 0x50, 0x2e, 0xf2, 0x27, 0xb0, 0x1d, 0xbe, 0xf9, 0x6f, + 0xab, 0xe6, 0x10, 0xd7, 0x2d, 0x0f, 0xe4, 0xa0, 0x10, 0xff, 0x4f, + 0x1e, 0x06, 0x79, 0x7d, 0x35, 0x99, 0x7b, 0x9e, 0x13, 0x80, 0x6b, + 0xae, 0x6a, 0x1a, 0xbe, 0xf8, 0x5b, 0x45, 0x0a, 0x1f, 0x32, 0x35, + 0x1f, 0x36, 0x71, 0x9e, 0xad, 0xad, 0x68, 0xdd, 0x2e, 0xc7, 0x9d, + 0x0b, 0xc4, 0x66, 0x3f, 0x72, 0x87, 0x2b, 0x8b, 0x7c, 0x37, 0xcd, + 0x4a, 0xbb, 0xe8, 0xa0, 0x2d, 0x0f, 0xf1, 0x06, 0x8f, 0xb9, 0xcd, + 0xb0, 0xed, 0x4d, 0xf7, 0x30, 0x26, 0x48, 0xdd, 0x24, 0xf6, 0x9a, + 0x35, 0x88, 0xfc, 0xab, 0x91, 0xc4, 0x12, 0x70, 0x24, 0x12, 0x37, + 0xfc, 0xb3, 0xb9, 0x81, 0x2e, 0xdc, 0x0c, 0x26, 0xdc, 0x52, 0x5a, + 0x3b, 0x7e, 0x7a, 0x05, 0xc8, 0x44, 0x19, 0xa1, 0x15, 0x50, 0xb1, + 0x50, 0x53, 0x6b, 0x3f, 0xf2, 0x5e, 0x15, 0x38, 0x41, 0xbc, 0x58, + 0x2d, 0x76, 0x81, 0x8b, 0xef, 0x67, 0x15, 0x57, 0x1e, 0x5b, 0x95, + 0x51, 0xac, 0x69, 0x30, 0xc6, 0x15, 0x15, 0xa5, 0xa2, 0xc7, 0xda, + 0xf2, 0xe3, 0xf2, 0x23, 0xdd, 0xc9, 0x5f, 0x62, 0x14, 0xbb, 0x68, + 0x8e, 0x4e, 0x45, 0xe2, 0x6f, 0x76, 0xe7, 0x74, 0xe3, 0xb8, 0xee, + 0x17, 0x84, 0x8c, 0x60, 0xed, 0xaf, 0xb5, 0x49, 0xab, 0x83, 0xb7, + 0xfa, 0x93, 0x7f, 0x59, 0x81, 0xbc, 0x80, 0xc5, 0x84, 0xab, 0xf9, + 0x2c, 0xff, 0xd9, 0x00, 0x9b, 0x41, 0x91, 0x47, 0x40, 0x89, 0xb8, + 0x45, 0x02, 0x17, 0xba, 0x07, 0x54, 0x88, 0xbb, 0x19, 0xc0, 0xe7, + 0x74, 0x32, 0x8c, 0xcd, 0xdd, 0xfd, 0x92, 0x00, 0x8a, 0x92, 0x08, + 0xcb, 0x68, 0x00, 0x4c, 0x10, 0x0a, 0xcd, 0x1d, 0x4c, 0x21, 0x59, + 0x9a, 0x06, 0xa3, 0xf1, 0x9b, 0xc5, 0xd7, 0x47, 0x98, 0xb8, 0xc6, + 0xf3, 0xca, 0xce, 0xc4, 0x78, 0x6b, 0xff, 0x58, 0x89, 0xbd, 0x86, + 0x5e, 0x00, 0xd3, 0x32, 0xf7, 0x83, 0xbc, 0x00, 0x90, 0xdf, 0x32, + 0x13, 0xf1, 0x97, 0x95, 0x56, 0x07, 0x51, 0xf3, 0x06, 0x25, 0xd5, + 0x7d, 0xa6, 0x7d, 0x96, 0x58, 0xee, 0xa6, 0x65, 0x40, 0x90, 0x5c, + 0x26, 0x60, 0xbb, 0x77, 0x4e, 0xac, 0xf7, 0xa1, 0x19, 0xe4, 0x1a, + 0x46, 0xe7, 0xe5, 0xbb, 0xec, 0x01, 0x95, 0xb7, 0x84, 0xbc, 0x41, + 0x2a, 0x1b, 0x7e, 0xc0, 0x7a, 0xdb, 0xfa, 0x38, 0x64, 0x0a, 0x8e, + 0xb7, 0x2d, 0x79, 0x9c, 0xc1, 0x0a, 0x5e, 0xed, 0xba, 0x34, 0xee, + 0xf1, 0x69, 0x45, 0x45, 0xe3, 0xea, 0x43, 0x1f, 0x95, 0x01, 0x7a, + 0x01, 0x86, 0x5d, 0x7b, 0x90, 0x17, 0x20, 0xe6, 0xdb, 0x7f, 0xa2, + 0xd7, 0x5b, 0xfe, 0xeb, 0xd7, 0x35, 0x2e, 0x0e, 0xed, 0x32, 0x02, + 0xff, 0x0e, 0xc0, 0xbb, 0x8d, 0x40, 0x82, 0xf6, 0x4e, 0xe2, 0x3f, + 0x6e, 0x4d, 0x39, 0x03, 0x2c, 0xb8, 0x2c, 0x47, 0x79, 0xc0, 0x1e, + 0x34, 0x58, 0x8e, 0xde, 0x3d, 0xd9, 0xf0, 0xf5, 0x33, 0xbb, 0x81, + 0x85, 0xae, 0xd4, 0xa3, 0xf6, 0x7b, 0x5c, 0x1b, 0xa6, 0x17, 0x0a, + 0xd4, 0xdb, 0x1c, 0x10, 0x16, 0x20, 0xfd, 0xd5, 0x1a, 0x39, 0x11, + 0x96, 0x1a, 0xfb, 0x96, 0x22, 0xd1, 0x54, 0xae, 0xbb, 0xc0, 0x6f, + 0xd0, 0x6d, 0xf6, 0xe7, 0xe0, 0x1b, 0xa5, 0xf3, 0x02, 0xf0, 0xc1, + 0x86, 0x46, 0x16, 0x7e, 0x58, 0xb0, 0x6e, 0xc1, 0x96, 0x8d, 0xf4, + 0x37, 0x74, 0xab, 0xc3, 0x81, 0x8c, 0x36, 0xf8, 0xf7, 0x22, 0x36, + 0xde, 0x52, 0xdd, 0x40, 0xac, 0x18, 0xe0, 0x8b, 0xb0, 0xfd, 0x56, + 0xb9, 0xf8, 0xae, 0xb7, 0xcf, 0x07, 0x05, 0xb8, 0xb2, 0x6b, 0x7f, + 0x4c, 0xf9, 0x12, 0xd0, 0x93, 0xca, 0xa7, 0x3e, 0xa1, 0x88, 0xcc, + 0x1a, 0x61, 0x57, 0x5b, 0xf8, 0x3a, 0xbb, 0xf7, 0xd4, 0xd5, 0x3c, + 0x6b, 0xbd, 0xdf, 0x03, 0x2a, 0x57, 0xb3, 0xa5, 0xd8, 0x33, 0x35, + 0x55, 0xbe, 0x70, 0xb3, 0xd7, 0x52, 0x5f, 0x6b, 0xad, 0x26, 0x8b, + 0x1b, 0xaa, 0xc0, 0x3a, 0x38, 0xbb, 0x0b, 0xea, 0x9a, 0x0a, 0xeb, + 0x1a, 0xb1, 0x57, 0xac, 0xa5, 0xfd, 0x63, 0xf9, 0x87, 0xd9, 0x00, + 0x40, 0x75, 0x2c, 0xfc, 0x8b, 0xeb, 0xda, 0x46, 0x1b, 0x41, 0x95, + 0xd8, 0x30, 0xc0, 0x16, 0xfe, 0x57, 0x70, 0x41, 0xdc, 0xd3, 0x05, + 0xb6, 0x83, 0xd8, 0x1c, 0xe2, 0xc6, 0x38, 0xc0, 0xe9, 0xf6, 0x12, + 0x52, 0xd8, 0x3e, 0x00, 0x8d, 0x23, 0x55, 0x1a, 0x99, 0x5d, 0xe0, + 0x5c, 0x4f, 0x9e, 0x6b, 0xb5, 0xd5, 0xe3, 0x59, 0xdb, 0xac, 0x8e, + 0x0f, 0xa0, 0xe7, 0x52, 0xcb, 0x5b, 0x9a, 0x87, 0x05, 0xef, 0xcd, + 0x22, 0xfd, 0x33, 0xfa, 0x06, 0xb8, 0x11, 0xa7, 0x26, 0x9b, 0x45, + 0xa4, 0x91, 0xa9, 0x49, 0x4f, 0xc3, 0x87, 0x97, 0x94, 0x3a, 0x52, + 0xc3, 0xbf, 0x36, 0xfb, 0x27, 0xf5, 0xc6, 0x8d, 0x03, 0xcf, 0xaa, + 0x7f, 0x9b, 0x7f, 0x71, 0xe3, 0x06, 0xda, 0x45, 0x06, 0xfe, 0x3d, + 0x8f, 0xfe, 0xc2, 0xd6, 0xef, 0xaa, 0xd4, 0xe6, 0x4e, 0xbe, 0x07, + 0xc0, 0x0e, 0x71, 0x07, 0x1e, 0x6e, 0x66, 0x39, 0x6e, 0x01, 0x1b, + 0xac, 0xf2, 0xa8, 0x8f, 0xdc, 0xb4, 0xec, 0x3e, 0xd8, 0xa5, 0x56, + 0x21, 0xfc, 0x88, 0x42, 0x50, 0xfa, 0x1a, 0xbe, 0x85, 0x0b, 0xe0, + 0xf6, 0x2c, 0x63, 0x73, 0x87, 0x6f, 0x5a, 0x9b, 0x59, 0x53, 0x1b, + 0x7f, 0x6f, 0x52, 0x9b, 0xfd, 0xdb, 0x22, 0x3a, 0xba, 0x5d, 0x43, + 0xf5, 0xaf, 0x29, 0x32, 0x3a, 0x1a, 0x99, 0x31, 0xf0, 0x6f, 0x27, + 0xf4, 0xb7, 0x4b, 0x86, 0x35, 0x5d, 0x32, 0x2b, 0xba, 0x7c, 0x6a, + 0xb5, 0x4a, 0x1d, 0x3a, 0xae, 0x27, 0x4c, 0x86, 0x6f, 0x69, 0xe0, + 0x62, 0xeb, 0x17, 0x8a, 0x6d, 0xc7, 0xf5, 0xdb, 0x6c, 0xfd, 0xb0, + 0xb9, 0x72, 0x36, 0xe0, 0x12, 0xb8, 0x39, 0x0d, 0xf3, 0x32, 0x4d, + 0xfc, 0x15, 0x94, 0x26, 0x1b, 0x56, 0x69, 0x4d, 0xd7, 0xe9, 0x9a, + 0x35, 0x0f, 0x89, 0xff, 0x1f, 0x14, 0xbf, 0x50, 0xa5, 0x9a, 0xf2, + 0x6b, 0x1e, 0x16, 0x26, 0x97, 0xb5, 0xbf, 0x98, 0xcc, 0x37, 0x0d, + 0x0b, 0x55, 0x1b, 0x37, 0xa8, 0xd0, 0x5c, 0x29, 0x7f, 0xd4, 0xff, + 0x5f, 0x2d, 0x3d, 0xb9, 0xe0, 0x77, 0x5c, 0xc0, 0xb8, 0x49, 0x93, + 0x3f, 0x35, 0x63, 0xf9, 0x3f, 0xe4, 0xff, 0xc0, 0xd2, 0x61, 0xae, + 0x79, 0x86, 0x32, 0xfe, 0x13, 0x32, 0xd5, 0xfc, 0xf6, 0x20, 0xa3, + 0x01, 0x42, 0x8a, 0x7f, 0x48, 0x4c, 0xdc, 0xc0, 0x76, 0x8c, 0x5d, + 0x50, 0x77, 0xfe, 0x91, 0x73, 0xe8, 0x51, 0x24, 0xfa, 0x42, 0x41, + 0x6c, 0xbf, 0x9a, 0x7f, 0x3c, 0x2c, 0x8c, 0xc5, 0x82, 0x02, 0x5b, + 0x8c, 0x50, 0x3f, 0x6d, 0xf2, 0xff, 0x96, 0x90, 0xfc, 0x43, 0x56, + 0xda, 0x1d, 0x45, 0xd9, 0x99, 0x93, 0x22, 0xa8, 0xfb, 0xac, 0x33, + 0xff, 0x81, 0x45, 0xf4, 0x28, 0x12, 0x61, 0x8f, 0xf9, 0x75, 0x4c, + 0xd9, 0x6c, 0xb3, 0xed, 0x5c, 0xd0, 0xcd, 0x5f, 0x49, 0x0a, 0x4c, + 0xde, 0x69, 0xb3, 0x65, 0x2e, 0x1a, 0x1f, 0x19, 0x32, 0xde, 0x3c, + 0x47, 0xae, 0x74, 0xfd, 0xba, 0xa5, 0x6c, 0xb7, 0xd9, 0xf6, 0x59, + 0x94, 0x5b, 0xf0, 0x6b, 0x33, 0x30, 0x2e, 0x2e, 0x1a, 0x3e, 0x38, + 0xe9, 0xf5, 0x46, 0x16, 0x42, 0x6b, 0x49, 0xb9, 0x1d, 0x35, 0xf0, + 0x10, 0xd0, 0xb4, 0x5e, 0x66, 0x8b, 0x0e, 0x7f, 0xbf, 0xe9, 0x2e, + 0x50, 0x53, 0x72, 0x57, 0x28, 0x7b, 0x97, 0xb2, 0x00, 0xea, 0xcc, + 0x3f, 0xc2, 0x2a, 0x80, 0x9a, 0x8b, 0xea, 0x28, 0x92, 0x6a, 0x60, + 0x45, 0xa4, 0x67, 0xd7, 0xa0, 0x47, 0xe2, 0xce, 0x59, 0x2e, 0xdf, + 0x71, 0xc8, 0x02, 0x27, 0x4a, 0x11, 0xca, 0xbe, 0xb3, 0x5c, 0x06, + 0x8e, 0x38, 0x59, 0x2f, 0x07, 0xeb, 0x81, 0xb2, 0x03, 0xc9, 0xb8, + 0x7f, 0xd2, 0x38, 0xe9, 0x58, 0x91, 0xc3, 0x91, 0x0b, 0x1f, 0x5c, + 0xdf, 0x2f, 0x6c, 0x5f, 0x44, 0x8a, 0x16, 0x42, 0x92, 0x7c, 0x07, + 0xe4, 0xc0, 0x53, 0xcb, 0xa5, 0x7b, 0x06, 0xfc, 0x41, 0xfe, 0x6d, + 0x0e, 0x82, 0x9a, 0xf5, 0xf1, 0x63, 0x57, 0x9e, 0x9b, 0xfb, 0x60, + 0xe5, 0x8f, 0xda, 0x9c, 0xea, 0x8c, 0x76, 0x72, 0x6f, 0x59, 0x2d, + 0x8f, 0x90, 0x95, 0x2e, 0x50, 0x7d, 0x6a, 0x83, 0xe5, 0x80, 0x0b, + 0x78, 0x32, 0xc4, 0xae, 0x95, 0xe9, 0xb5, 0x52, 0xe0, 0xc9, 0xcf, + 0xb2, 0x64, 0x9d, 0xbe, 0xe7, 0xf1, 0xc8, 0xfc, 0xb1, 0xde, 0x21, + 0x8b, 0x25, 0xeb, 0xa2, 0x0b, 0x38, 0x67, 0x23, 0xad, 0x71, 0x76, + 0x00, 0x6e, 0xe7, 0xe6, 0xda, 0x5d, 0xd9, 0x9b, 0x4b, 0xc0, 0x0d, + 0xc9, 0x42, 0x48, 0x95, 0x2e, 0x6b, 0x21, 0xef, 0x00, 0xbe, 0x7c, + 0x2b, 0x8c, 0x38, 0x36, 0x8c, 0x9a, 0x94, 0x9a, 0x9a, 0x10, 0xa9, + 0x5b, 0x05, 0x10, 0xfc, 0x07, 0xda, 0xc1, 0x25, 0xd8, 0x90, 0xfb, + 0xf7, 0xa1, 0xbb, 0x39, 0x75, 0xaf, 0xff, 0xfc, 0x53, 0x4b, 0x41, + 0x69, 0xa2, 0x06, 0x06, 0x99, 0x22, 0xbf, 0xbc, 0x1e, 0xce, 0x73, + 0x21, 0x13, 0x2e, 0x01, 0xcf, 0xdf, 0xb0, 0x31, 0xf2, 0x24, 0x34, + 0x57, 0x76, 0x3c, 0xe7, 0xcf, 0xf9, 0xb7, 0x9c, 0x70, 0x4a, 0xe6, + 0x1f, 0x60, 0x76, 0x79, 0x4e, 0xbd, 0x0e, 0xdb, 0x30, 0xff, 0x88, + 0xd1, 0xb6, 0xdf, 0x91, 0xdd, 0x03, 0xbb, 0xb5, 0x55, 0x9b, 0xfa, + 0x86, 0x87, 0x77, 0x9a, 0x93, 0xff, 0xcf, 0xfb, 0xde, 0xf9, 0xc7, + 0x39, 0x94, 0xbb, 0x64, 0x24, 0x70, 0xe8, 0xb6, 0x6b, 0xf0, 0xad, + 0x2a, 0xbf, 0xbc, 0x2b, 0x81, 0x68, 0xe8, 0x4d, 0xdd, 0xa7, 0xa5, + 0x26, 0xf5, 0x6a, 0x48, 0xf2, 0x8f, 0xbb, 0x01, 0xac, 0x3a, 0xf9, + 0xeb, 0x51, 0xff, 0x87, 0x7d, 0x76, 0x1f, 0xfc, 0xbd, 0x3b, 0x9b, + 0x3a, 0xa4, 0x10, 0xd8, 0x93, 0xf1, 0x53, 0x31, 0x8d, 0x2b, 0x00, + 0x15, 0xd3, 0x50, 0x1d, 0x10, 0x53, 0x00, 0x2e, 0x48, 0xa3, 0x38, + 0x2f, 0xda, 0x25, 0xfe, 0xf1, 0x85, 0x20, 0x7f, 0x84, 0xf4, 0xf4, + 0x3a, 0x2c, 0x46, 0x8d, 0x72, 0x8c, 0x5d, 0xec, 0xde, 0xc3, 0x46, + 0xfc, 0x26, 0x30, 0xe4, 0x1f, 0x10, 0xc2, 0x2b, 0xfc, 0xfd, 0x83, + 0xd9, 0x5a, 0x20, 0x30, 0xf5, 0x67, 0x48, 0xfe, 0xc6, 0x8d, 0x72, + 0x00, 0x7e, 0x59, 0xac, 0x8c, 0x91, 0x84, 0x4c, 0xbd, 0xe0, 0x01, + 0xd5, 0x79, 0x9f, 0x0c, 0x89, 0x7c, 0x98, 0xfc, 0xf9, 0x2e, 0x17, + 0x40, 0xcd, 0xa7, 0x2d, 0xe9, 0xc4, 0x80, 0xf5, 0x82, 0x7b, 0x99, + 0x64, 0x80, 0x35, 0x5e, 0x50, 0x03, 0x4e, 0x46, 0x49, 0x58, 0x52, + 0xfd, 0x18, 0x79, 0x54, 0xe4, 0xef, 0x9f, 0x01, 0xf5, 0x94, 0x9a, + 0x27, 0x18, 0x45, 0x48, 0x87, 0xa4, 0xa4, 0xb1, 0xf8, 0xe0, 0x0c, + 0xc1, 0x88, 0x7f, 0xe0, 0x3b, 0x9b, 0xe3, 0x1b, 0x4b, 0xfc, 0x5b, + 0xce, 0xca, 0xe8, 0x4d, 0xa3, 0x37, 0x9e, 0x56, 0x04, 0x9c, 0xd6, + 0xe9, 0x71, 0x71, 0x49, 0x59, 0x76, 0xe1, 0xea, 0x33, 0x52, 0x6a, + 0xe4, 0xea, 0x62, 0x00, 0x2a, 0x1c, 0xa5, 0x35, 0x79, 0xe6, 0xec, + 0x3a, 0xf0, 0xcf, 0xf2, 0x57, 0xf8, 0xdf, 0x19, 0xeb, 0x85, 0x3f, + 0xec, 0x87, 0xe7, 0x83, 0xb2, 0x79, 0x74, 0x07, 0x2a, 0x3a, 0x17, + 0x5c, 0x53, 0x2c, 0xac, 0x0e, 0x57, 0x01, 0xee, 0xc5, 0x44, 0x9d, + 0x04, 0x79, 0x43, 0xc5, 0xa2, 0x0a, 0xb7, 0x89, 0xfc, 0xbb, 0x5d, + 0x07, 0x79, 0x3d, 0xe9, 0xab, 0xa9, 0xfc, 0xb9, 0xb1, 0x77, 0x8c, + 0xf8, 0xf7, 0xb9, 0x09, 0xbb, 0xf4, 0x11, 0x10, 0x65, 0x36, 0x3f, + 0x60, 0x6b, 0x99, 0xf0, 0x3e, 0xfd, 0xfd, 0xc5, 0x15, 0x82, 0xeb, + 0x33, 0xf0, 0x6a, 0xfc, 0xe0, 0xc1, 0x19, 0x3b, 0xa5, 0x62, 0x08, + 0xb4, 0x54, 0x82, 0x4a, 0xdb, 0xf4, 0xb8, 0x91, 0xe9, 0x67, 0xee, + 0x94, 0xd7, 0x81, 0xff, 0xc5, 0x08, 0x85, 0xbf, 0xdc, 0xf5, 0x36, + 0xe0, 0x6f, 0x4a, 0x76, 0x82, 0xc2, 0x78, 0xea, 0x1d, 0x1c, 0x7b, + 0x57, 0xea, 0xae, 0xe2, 0xdf, 0xb7, 0x00, 0xdc, 0x8b, 0xf5, 0x9b, + 0xee, 0x14, 0xce, 0x24, 0x63, 0x5b, 0x43, 0xe6, 0x9f, 0x04, 0xc0, + 0x4e, 0xa6, 0x4f, 0x4e, 0xf0, 0x87, 0x37, 0x67, 0xc0, 0xbf, 0xf5, + 0x16, 0x27, 0xa8, 0xdc, 0x31, 0xfe, 0x38, 0x48, 0x49, 0xbe, 0x24, + 0x08, 0x79, 0xa3, 0x29, 0x70, 0xf8, 0xde, 0x14, 0xcf, 0x95, 0x1b, + 0xdd, 0x90, 0x6e, 0xd2, 0x3f, 0x12, 0x60, 0x8e, 0x0d, 0x6d, 0x91, + 0x09, 0x19, 0x73, 0x42, 0xa8, 0x03, 0x7f, 0xd7, 0x04, 0xf1, 0xa1, + 0x26, 0xc0, 0x8f, 0xc8, 0x26, 0x6e, 0xd6, 0x19, 0x94, 0x09, 0x84, + 0x45, 0x3a, 0xda, 0xf0, 0xd1, 0x0a, 0x47, 0xa8, 0xb1, 0xe8, 0x45, + 0x02, 0x78, 0x5f, 0xbd, 0xa7, 0x85, 0x00, 0xec, 0x43, 0x4f, 0x23, + 0x24, 0xb5, 0x50, 0x28, 0xcb, 0x86, 0xed, 0x7f, 0xdc, 0xab, 0x17, + 0x45, 0xfe, 0x2b, 0x00, 0xa9, 0x57, 0x77, 0xfe, 0x5c, 0x58, 0xf2, + 0x81, 0x32, 0xe1, 0x17, 0x27, 0x28, 0x70, 0x0a, 0x45, 0x19, 0xfd, + 0x69, 0xdb, 0x69, 0x78, 0x11, 0xc8, 0xd2, 0x0c, 0x4c, 0xb6, 0xd8, + 0x05, 0x84, 0x1d, 0x62, 0x91, 0xf2, 0x09, 0x45, 0x75, 0xe0, 0x0f, + 0x4e, 0xc5, 0xa2, 0xcb, 0x46, 0x64, 0x01, 0xf0, 0xcf, 0xf2, 0xa5, + 0xa8, 0x83, 0xcc, 0xff, 0x25, 0x5f, 0xed, 0x7b, 0x53, 0x12, 0xb9, + 0x43, 0x70, 0x53, 0x55, 0x00, 0xfd, 0xa2, 0xa4, 0xca, 0x86, 0x91, + 0xff, 0x90, 0xf5, 0xb9, 0x15, 0xb0, 0xfd, 0x77, 0x94, 0xba, 0x45, + 0xfe, 0x16, 0xed, 0x0b, 0x55, 0x37, 0xfe, 0x1c, 0x1f, 0x31, 0x2b, + 0xc7, 0x0d, 0xef, 0xd2, 0xb9, 0x2b, 0x81, 0xe9, 0xbc, 0xf3, 0x66, + 0xa1, 0x22, 0x89, 0x63, 0x25, 0xe1, 0x96, 0x7a, 0xef, 0x11, 0x47, + 0x6b, 0xe7, 0x5f, 0x55, 0x58, 0x75, 0x2a, 0xb5, 0x77, 0x74, 0x42, + 0x56, 0x39, 0xf0, 0x58, 0x2f, 0xdd, 0xfc, 0x70, 0x50, 0x74, 0xcc, + 0x8c, 0x73, 0x02, 0xf8, 0x4e, 0x7f, 0x5c, 0x01, 0x76, 0xbd, 0x9c, + 0x53, 0x4c, 0x64, 0x7e, 0x5d, 0xfe, 0xf0, 0x15, 0xea, 0x35, 0x7b, + 0xc3, 0x91, 0xdc, 0xdc, 0x9f, 0x5c, 0x7f, 0x94, 0x3f, 0xec, 0x30, + 0xaf, 0x80, 0xdd, 0x63, 0x90, 0xf7, 0xa2, 0x3f, 0x73, 0x81, 0xe0, + 0xed, 0xc0, 0x1e, 0xc3, 0xde, 0xa0, 0xe9, 0x6d, 0x40, 0x8c, 0x1b, + 0xd4, 0xa1, 0xfe, 0x77, 0x4c, 0x5f, 0x7b, 0xbb, 0xc6, 0x81, 0x5a, + 0x10, 0xf0, 0xf7, 0x67, 0x86, 0x9e, 0xaa, 0xb9, 0x73, 0xa3, 0xc4, + 0x03, 0x9f, 0xb6, 0x41, 0xa7, 0x92, 0x87, 0x55, 0x40, 0x3e, 0x31, + 0x16, 0x37, 0xb5, 0x0a, 0x4f, 0x5e, 0x48, 0x02, 0xb1, 0x37, 0xab, + 0x43, 0xbd, 0xb0, 0xf7, 0x1d, 0xde, 0xfb, 0x84, 0xc8, 0x7f, 0x1e, + 0x00, 0x1b, 0x99, 0x01, 0x84, 0x3a, 0xf2, 0x37, 0x75, 0xdf, 0x88, + 0x8d, 0xc9, 0xfb, 0x3f, 0x2c, 0x68, 0x4d, 0x5f, 0x00, 0xaa, 0x1f, + 0x8d, 0xe0, 0x18, 0x69, 0xbe, 0x83, 0x18, 0x41, 0xaf, 0x13, 0xff, + 0x84, 0x66, 0x13, 0x77, 0x3b, 0x04, 0x20, 0x38, 0xb7, 0xf5, 0x83, + 0x60, 0x1f, 0x5e, 0x85, 0xe6, 0x44, 0xf5, 0x0f, 0xa9, 0x46, 0x03, + 0xfe, 0x21, 0x19, 0x82, 0xe7, 0xa0, 0x5a, 0x05, 0x40, 0xcb, 0x6c, + 0x8f, 0x3a, 0xa1, 0x9a, 0x05, 0xee, 0xa7, 0xd1, 0xea, 0x72, 0xfd, + 0x37, 0xdc, 0xa3, 0xb9, 0x57, 0x7d, 0xfe, 0x0b, 0x19, 0xfe, 0xe1, + 0xb3, 0x2f, 0x78, 0x84, 0xc2, 0x52, 0xf0, 0x53, 0x29, 0x70, 0xed, + 0x1d, 0x42, 0xbd, 0x02, 0x50, 0xfd, 0x7a, 0xa6, 0x45, 0x15, 0x3c, + 0x90, 0x15, 0x66, 0x25, 0xde, 0xb4, 0xda, 0xf9, 0xc7, 0xa0, 0x71, + 0x6f, 0x3e, 0x22, 0x71, 0x91, 0x79, 0xd1, 0x78, 0x6c, 0x94, 0x07, + 0xc7, 0xa6, 0x9a, 0xcd, 0x29, 0xfd, 0x8d, 0x87, 0x09, 0x7b, 0x9f, + 0x81, 0x76, 0xae, 0xf2, 0x74, 0xda, 0x1c, 0x23, 0xda, 0xb5, 0xd6, + 0x39, 0xc0, 0xc1, 0x54, 0x1b, 0x32, 0xff, 0xf6, 0xf9, 0x44, 0x3b, + 0xe9, 0x8d, 0x7f, 0x26, 0xcd, 0xdf, 0x5b, 0xfd, 0x8f, 0xd4, 0x49, + 0x49, 0x7d, 0x00, 0xfe, 0xf5, 0x17, 0x7e, 0x5c, 0x11, 0x70, 0xa5, + 0xca, 0xcf, 0xc7, 0xcf, 0xec, 0xa6, 0xec, 0x9f, 0xdd, 0xd2, 0x64, + 0xb4, 0xfc, 0x4d, 0xf4, 0xcf, 0x13, 0xc7, 0x00, 0xfd, 0x2d, 0x6e, + 0xc2, 0xfe, 0x31, 0xf1, 0x86, 0xfc, 0x73, 0x5a, 0xe3, 0x94, 0xc0, + 0xac, 0xda, 0xdb, 0xff, 0x80, 0x4c, 0xe0, 0x56, 0x7a, 0x64, 0xa7, + 0x6b, 0x84, 0x69, 0x28, 0x31, 0x74, 0x27, 0xd1, 0xd2, 0xc8, 0xfc, + 0x03, 0xc2, 0xc2, 0x26, 0x42, 0x34, 0x34, 0x32, 0xfb, 0xc0, 0xdd, + 0x6f, 0x65, 0xa6, 0xe4, 0x83, 0x7c, 0x00, 0xec, 0xca, 0x30, 0x3a, + 0xb4, 0x75, 0x0a, 0xa7, 0xe1, 0x07, 0xd0, 0x78, 0x62, 0x3e, 0xb8, + 0x29, 0x85, 0x53, 0x98, 0x34, 0x51, 0xac, 0xab, 0x43, 0xd6, 0xbb, + 0x85, 0xf5, 0x78, 0x1c, 0xa0, 0xfb, 0x49, 0x50, 0x24, 0xea, 0x71, + 0x7e, 0xfd, 0x5f, 0x6d, 0x6a, 0xc8, 0xbf, 0x66, 0x01, 0x7a, 0x4a, + 0xfc, 0xe0, 0x7c, 0x71, 0xf2, 0xc3, 0xab, 0xfd, 0x97, 0xea, 0xfe, + 0xc7, 0xe2, 0x70, 0x69, 0xc4, 0x79, 0x6a, 0xd5, 0x1d, 0xbc, 0x69, + 0xb5, 0xdf, 0x12, 0xa0, 0x5a, 0x24, 0x32, 0xff, 0xf1, 0x36, 0xdb, + 0xc5, 0x1a, 0x50, 0x8a, 0x9e, 0xd3, 0xd6, 0xae, 0x0f, 0xc8, 0xdf, + 0x4c, 0xbd, 0x6b, 0x8a, 0x31, 0x03, 0x5f, 0x07, 0xc1, 0xf1, 0xc1, + 0xe0, 0x88, 0xb0, 0x9e, 0xcb, 0x0a, 0x05, 0xe7, 0x3b, 0x62, 0xf9, + 0xb4, 0xb0, 0xde, 0xcc, 0x18, 0x1b, 0x1d, 0x16, 0x16, 0x65, 0x81, + 0x06, 0x53, 0x9c, 0xac, 0x07, 0x8a, 0x3e, 0xe8, 0x1b, 0x16, 0x16, + 0x11, 0x6b, 0xce, 0x3b, 0xd9, 0xc9, 0x88, 0xbf, 0xab, 0xd4, 0x9e, + 0x16, 0x1d, 0xd6, 0x6e, 0xdc, 0x21, 0x8f, 0x34, 0xf9, 0xd1, 0x28, + 0x58, 0xb5, 0xff, 0xfd, 0x9a, 0xd0, 0x95, 0x72, 0xec, 0x35, 0x70, + 0x40, 0x6a, 0xa6, 0x82, 0x3f, 0x01, 0x67, 0xc5, 0x6d, 0xcb, 0x61, + 0xfb, 0xa7, 0x8c, 0xd5, 0xcb, 0xed, 0x1f, 0x71, 0xef, 0x72, 0x6f, + 0x5c, 0x96, 0xc8, 0x24, 0xf8, 0xb9, 0x47, 0xd1, 0xd7, 0x6d, 0xa7, + 0x19, 0xdf, 0xe1, 0xf0, 0x33, 0x24, 0xbd, 0x48, 0x14, 0x63, 0xae, + 0x71, 0x52, 0x9e, 0xe0, 0xb1, 0x1f, 0xb5, 0xe5, 0xb9, 0x85, 0x42, + 0xb9, 0xd6, 0x8c, 0xfc, 0xca, 0x23, 0xdc, 0xcd, 0xb5, 0xd9, 0x60, + 0x87, 0xbf, 0x68, 0x5a, 0x63, 0x42, 0xef, 0x8a, 0xcd, 0x76, 0xf4, + 0x9a, 0x5b, 0x38, 0xd3, 0xc7, 0x88, 0xff, 0xe5, 0xf4, 0xf3, 0x77, + 0x72, 0x6d, 0xd9, 0x25, 0x02, 0x70, 0xa5, 0xab, 0x6f, 0xaa, 0x41, + 0xff, 0x0f, 0xda, 0x7f, 0x65, 0xef, 0xe1, 0x77, 0x8a, 0x4f, 0xb0, + 0x7b, 0xa4, 0x1e, 0x32, 0xb2, 0x7f, 0xe4, 0xc9, 0x9a, 0xe1, 0x92, + 0xfd, 0x03, 0xdf, 0xdd, 0xed, 0xe5, 0xa0, 0x00, 0x4f, 0xf3, 0xd1, + 0xed, 0x7a, 0xa3, 0x15, 0xb0, 0xe1, 0xab, 0xde, 0xdf, 0x85, 0x4a, + 0x4c, 0xa0, 0xc7, 0x77, 0x44, 0x51, 0x67, 0xca, 0xe9, 0xfe, 0x3f, + 0xb4, 0x75, 0xb6, 0xa2, 0xf6, 0x19, 0x56, 0xcf, 0xf1, 0x72, 0x17, + 0xd4, 0xd4, 0x6f, 0x15, 0xec, 0x81, 0x41, 0xa9, 0x3e, 0x95, 0x1c, + 0xa8, 0xea, 0xed, 0xc5, 0x7a, 0x50, 0x31, 0x21, 0xc8, 0x88, 0x7f, + 0x6e, 0x8f, 0x7e, 0x5b, 0x5c, 0x48, 0xe9, 0xde, 0x5a, 0xe2, 0x46, + 0x61, 0x57, 0x71, 0xa9, 0x0e, 0x7f, 0x64, 0x8d, 0x94, 0xce, 0x6a, + 0x86, 0xf0, 0x0e, 0xdd, 0xff, 0x51, 0x1e, 0x2d, 0x9e, 0x50, 0x0d, + 0x6e, 0x4e, 0xc4, 0xef, 0x61, 0xa3, 0x75, 0xb5, 0xda, 0xbf, 0x61, + 0x36, 0xd7, 0x4f, 0xb9, 0xb7, 0x85, 0xfd, 0x6d, 0x6b, 0xe5, 0xef, + 0x45, 0x02, 0x62, 0xe7, 0x59, 0x2c, 0x8b, 0x87, 0x91, 0x4d, 0x66, + 0x83, 0xc8, 0x51, 0x8b, 0x2d, 0x96, 0xa5, 0xf1, 0xe1, 0xe4, 0x9b, + 0x15, 0x12, 0x9b, 0x0e, 0x9b, 0xa9, 0xd9, 0x03, 0x45, 0xc5, 0x76, + 0x66, 0xcb, 0x14, 0xa9, 0xcb, 0xda, 0x6e, 0xb1, 0x65, 0xf1, 0x13, + 0xf0, 0x11, 0x4f, 0xb1, 0xcc, 0x79, 0x82, 0x0b, 0x19, 0x38, 0xdb, + 0x62, 0x99, 0x17, 0x4b, 0xbe, 0x80, 0x81, 0x93, 0x96, 0xea, 0xba, + 0x79, 0x20, 0x6b, 0xa4, 0xe2, 0xfb, 0x25, 0xa9, 0x9f, 0xd8, 0x85, + 0xea, 0xd9, 0x72, 0xd5, 0xd8, 0x7c, 0x8f, 0x07, 0xdc, 0x7c, 0xaf, + 0x83, 0x89, 0x7b, 0x3a, 0xed, 0x26, 0xa8, 0x8d, 0x7f, 0xf0, 0xb4, + 0xe4, 0x3e, 0xd1, 0x73, 0x6f, 0x56, 0xa5, 0x90, 0xf7, 0x59, 0x5f, + 0xfe, 0xff, 0x77, 0x12, 0x92, 0xfa, 0xc3, 0x7d, 0xfc, 0x4e, 0x39, + 0x37, 0xa8, 0xd3, 0x03, 0x3d, 0x0f, 0xc1, 0xaf, 0xe7, 0xe4, 0x06, + 0xcb, 0xa1, 0xdf, 0x2f, 0xfd, 0x52, 0xa7, 0xf6, 0x2f, 0x60, 0x9d, + 0x40, 0xf9, 0x58, 0xd6, 0xc2, 0xdf, 0xbf, 0x65, 0x78, 0x4b, 0xd6, + 0x16, 0xfd, 0xbf, 0x12, 0x53, 0xe7, 0xa5, 0xc7, 0xec, 0x37, 0x2e, + 0x6f, 0x19, 0x45, 0x3a, 0x88, 0x74, 0xd9, 0x86, 0x2d, 0xc6, 0xd2, + 0x6d, 0x23, 0xea, 0xd8, 0xfe, 0x27, 0x96, 0x50, 0xd3, 0x9b, 0xb5, + 0xf0, 0xef, 0xfa, 0x85, 0xed, 0x8b, 0x07, 0x6d, 0x45, 0x1e, 0xbe, + 0x34, 0x6a, 0x3f, 0x30, 0xae, 0x6f, 0x28, 0x3d, 0xf8, 0x1e, 0x31, + 0x29, 0xd3, 0x66, 0xdb, 0x38, 0x21, 0xa2, 0xd9, 0x12, 0xdb, 0x56, + 0x69, 0x20, 0x0a, 0xde, 0x74, 0xba, 0xe1, 0x35, 0x22, 0x0e, 0x50, + 0x3e, 0x96, 0xb5, 0xf0, 0x8f, 0x23, 0x06, 0x8a, 0xbc, 0x09, 0xdf, + 0x21, 0x4a, 0xaf, 0x13, 0x81, 0x46, 0xb9, 0xb5, 0x5f, 0xb3, 0x7f, + 0x44, 0xdf, 0xb8, 0xb8, 0xb8, 0x98, 0x08, 0xcd, 0x2c, 0x23, 0x71, + 0xbd, 0xc7, 0xa3, 0xa1, 0xc6, 0x93, 0x75, 0xf2, 0x86, 0x0e, 0xc0, + 0x13, 0x4a, 0xfc, 0xe3, 0x61, 0xa1, 0xd2, 0x9b, 0xea, 0xd7, 0x3c, + 0xcc, 0x78, 0x06, 0x9f, 0x5f, 0xe0, 0x3e, 0x47, 0x74, 0xeb, 0x25, + 0xfe, 0x8d, 0x74, 0xa7, 0x30, 0xea, 0xce, 0xff, 0xf1, 0x4f, 0xf7, + 0xe8, 0xf9, 0x5a, 0xa2, 0x51, 0x6e, 0x33, 0x83, 0x1f, 0x36, 0x61, + 0xdd, 0xd1, 0x02, 0x87, 0xc3, 0x61, 0x3f, 0x0a, 0x4b, 0xcd, 0xa0, + 0xe7, 0x15, 0x99, 0xbc, 0x33, 0x17, 0x6a, 0x1c, 0x4e, 0xeb, 0xf6, + 0xf0, 0x67, 0x50, 0xe2, 0x4b, 0x2a, 0xa6, 0xab, 0xb0, 0x88, 0x7f, + 0x78, 0x54, 0xea, 0x46, 0x9b, 0x8d, 0x9d, 0x2e, 0xc1, 0x52, 0x57, + 0xfe, 0x61, 0xb6, 0x5c, 0x3d, 0x5f, 0x5b, 0x64, 0xe5, 0xd1, 0xad, + 0x79, 0xe3, 0xf8, 0x5d, 0x4e, 0x34, 0x62, 0xe7, 0x70, 0xc0, 0xc6, + 0xd8, 0x69, 0x8d, 0xd7, 0xeb, 0x7c, 0x98, 0x86, 0x7e, 0x57, 0x26, + 0x5a, 0x30, 0x35, 0x39, 0x49, 0xb4, 0x42, 0x80, 0x41, 0x39, 0xd5, + 0x43, 0xd0, 0x30, 0x96, 0xfa, 0xc6, 0x43, 0xfe, 0xd9, 0x0b, 0x4e, + 0xba, 0xf1, 0x5c, 0x85, 0x55, 0x3b, 0xb9, 0xf8, 0x07, 0xf9, 0x87, + 0xee, 0x63, 0xf8, 0xf3, 0xe3, 0x0a, 0x85, 0xaa, 0xec, 0x55, 0x49, + 0xf0, 0xfd, 0x9f, 0xbc, 0xea, 0xbb, 0x2a, 0xa1, 0x50, 0xc7, 0x47, + 0xc5, 0x34, 0xee, 0x12, 0x70, 0xe7, 0x65, 0x9a, 0xcd, 0x1b, 0xaf, + 0x78, 0x54, 0x9b, 0x0a, 0xfd, 0xd0, 0x71, 0x6a, 0x26, 0x2a, 0x27, + 0x39, 0x6e, 0xa4, 0x5f, 0x17, 0xd2, 0x77, 0xb5, 0x2b, 0x7a, 0x55, + 0xda, 0x31, 0x0e, 0xad, 0xad, 0x35, 0x57, 0x6f, 0xb4, 0xae, 0xe6, + 0x1f, 0x57, 0xd5, 0xee, 0x19, 0xe4, 0xff, 0xbb, 0xf3, 0x96, 0xd5, + 0x92, 0x79, 0xd6, 0x05, 0x84, 0x43, 0x5d, 0x58, 0x6d, 0x92, 0x7f, + 0xcf, 0x54, 0x1d, 0xc7, 0x00, 0xef, 0xfc, 0xfd, 0xd7, 0x01, 0xb0, + 0x9b, 0x74, 0x5a, 0x68, 0x7b, 0x18, 0x54, 0xaf, 0xe9, 0x22, 0x7e, + 0xd6, 0xa6, 0x76, 0x6b, 0x9c, 0xe0, 0x70, 0x5b, 0x4d, 0xa6, 0xce, + 0x3f, 0x80, 0x7b, 0x5b, 0xfa, 0x43, 0xb3, 0x29, 0xe0, 0x85, 0x83, + 0x1e, 0x60, 0x8f, 0x57, 0xe8, 0x0f, 0xfb, 0xbe, 0x02, 0xb7, 0x7f, + 0xdf, 0x48, 0xbd, 0xd0, 0xe6, 0x9f, 0x92, 0x7e, 0x08, 0x5f, 0xa0, + 0x56, 0x71, 0x31, 0xe3, 0x9c, 0xf0, 0x9a, 0xe6, 0xea, 0xed, 0x4f, + 0xdf, 0xc9, 0xaf, 0x7a, 0xbb, 0x01, 0xc1, 0x1f, 0xd8, 0xa7, 0xb5, + 0xe0, 0x1a, 0x46, 0xbd, 0x77, 0x13, 0x78, 0x36, 0x35, 0x67, 0xb4, + 0xe3, 0xe8, 0x81, 0x72, 0xc3, 0xaa, 0xd2, 0x80, 0xbf, 0xe2, 0x17, + 0x22, 0xcb, 0xd4, 0xaa, 0x9a, 0x2c, 0x15, 0xa3, 0xb9, 0xa5, 0xa6, + 0x6a, 0xaa, 0x26, 0x4f, 0xdf, 0x9b, 0xd5, 0x2b, 0x5a, 0x8b, 0xff, + 0x44, 0xcd, 0xfb, 0x36, 0xc9, 0xd6, 0xe2, 0x87, 0x9e, 0x83, 0x1f, + 0x84, 0xc3, 0x51, 0x03, 0xc0, 0x41, 0xf1, 0x01, 0xa0, 0xfe, 0x2f, + 0x33, 0x4d, 0x69, 0x61, 0x3c, 0xe0, 0x53, 0xd9, 0x8b, 0x37, 0x48, + 0xa9, 0xca, 0xf9, 0x52, 0x38, 0xab, 0xdc, 0x2c, 0xe4, 0x2f, 0x0d, + 0x72, 0xa1, 0xa9, 0x09, 0xc7, 0x04, 0xf4, 0x2f, 0x68, 0x9b, 0xc9, + 0xf2, 0x75, 0x05, 0xa8, 0xf8, 0xda, 0x62, 0x31, 0xb7, 0x7b, 0x40, + 0xfe, 0x69, 0x02, 0xf8, 0xa9, 0x0f, 0x71, 0x6e, 0xa6, 0x27, 0xe9, + 0xa1, 0x5d, 0x6c, 0x46, 0xd0, 0x5d, 0xe3, 0x88, 0x07, 0xdf, 0x70, + 0xcd, 0x97, 0xca, 0x2b, 0x13, 0xef, 0x50, 0x32, 0x74, 0x3f, 0x0f, + 0x3c, 0xb6, 0xe4, 0xde, 0xbd, 0x93, 0x8f, 0xdf, 0x97, 0xfb, 0x4b, + 0xc3, 0x53, 0xa1, 0x1c, 0x02, 0xe0, 0x24, 0xfa, 0x8b, 0xdf, 0xcd, + 0xf9, 0x2e, 0xf8, 0x88, 0xbc, 0x95, 0x7f, 0xd8, 0x1e, 0xb0, 0x73, + 0xe6, 0x5d, 0xd7, 0x68, 0x82, 0x7f, 0xb6, 0xd4, 0x42, 0xc1, 0x2e, + 0x86, 0xb0, 0x37, 0x84, 0xd3, 0x0e, 0x36, 0x48, 0x3d, 0x29, 0x33, + 0xa8, 0xd8, 0x1a, 0xca, 0x5e, 0xaf, 0x16, 0xfe, 0xb0, 0xb2, 0x71, + 0x91, 0x0e, 0x8a, 0xa9, 0xee, 0xbb, 0xc4, 0x30, 0x26, 0x3f, 0xbd, + 0x02, 0x8f, 0x3d, 0x9b, 0xe6, 0xff, 0xf8, 0x17, 0x42, 0xa9, 0x83, + 0x6a, 0x71, 0xb4, 0x39, 0x26, 0x0f, 0xd4, 0x07, 0xaf, 0x75, 0x7b, + 0x76, 0x74, 0xc1, 0x43, 0xdd, 0x87, 0x04, 0x61, 0xa3, 0x3a, 0x30, + 0x6b, 0x26, 0xab, 0x98, 0xc8, 0x0d, 0x95, 0xce, 0x95, 0xc3, 0xbd, + 0x7c, 0xff, 0xa3, 0x8b, 0x04, 0x73, 0xf7, 0x5c, 0x90, 0x21, 0x77, + 0x55, 0xc8, 0xf6, 0x1f, 0x76, 0xa1, 0x5c, 0x03, 0x39, 0xb1, 0xd6, + 0xca, 0x17, 0xfb, 0x7e, 0xc7, 0x4b, 0xf1, 0x4c, 0x30, 0xee, 0x49, + 0x27, 0x55, 0x9c, 0x88, 0x35, 0x6a, 0x8e, 0x8c, 0xf8, 0xf7, 0x2d, + 0x50, 0x87, 0xb9, 0x90, 0xc4, 0x5e, 0x13, 0xf6, 0x2a, 0xef, 0x90, + 0x7f, 0xec, 0x51, 0xa9, 0xff, 0x9a, 0xe8, 0x58, 0xa9, 0x7f, 0x65, + 0x3f, 0xf8, 0x42, 0xef, 0x6c, 0x2a, 0xe6, 0x04, 0x17, 0x3a, 0xe0, + 0x34, 0xbe, 0x9f, 0x1d, 0x38, 0xd5, 0x87, 0x4a, 0xf1, 0xe7, 0x22, + 0x36, 0x94, 0x9f, 0xf0, 0xe2, 0xf6, 0x18, 0x98, 0x21, 0x94, 0x24, + 0x3e, 0xbe, 0x53, 0x75, 0x31, 0x23, 0xf9, 0x87, 0xee, 0x01, 0x00, + 0x95, 0x8e, 0x5f, 0x7a, 0x25, 0xf8, 0xb6, 0x2f, 0x1e, 0x6a, 0xe8, + 0x0a, 0xad, 0xca, 0x89, 0xd2, 0x48, 0x4a, 0xd4, 0x39, 0xea, 0x53, + 0xa6, 0xc4, 0x88, 0x7f, 0xab, 0x83, 0xea, 0x30, 0x17, 0x92, 0xe0, + 0xd5, 0x95, 0xae, 0xcf, 0x12, 0xc5, 0xb2, 0x49, 0x59, 0x77, 0xc5, + 0x2d, 0x79, 0xa9, 0xb5, 0xcb, 0x66, 0xd7, 0x7d, 0x10, 0xec, 0x70, + 0xcf, 0x11, 0x9a, 0x2d, 0xee, 0x65, 0x12, 0x2f, 0xd3, 0x27, 0x80, + 0xf0, 0xfa, 0xa4, 0xf9, 0xe3, 0x07, 0x30, 0xd4, 0xf0, 0x01, 0x8c, + 0xba, 0x0e, 0x8e, 0xb5, 0xe1, 0x17, 0xd4, 0xc8, 0x3d, 0x68, 0x8a, + 0x3f, 0xff, 0x3e, 0x10, 0xe7, 0x9e, 0xdb, 0xda, 0x80, 0x4b, 0xac, + 0x39, 0x60, 0x15, 0xa3, 0xd4, 0x7f, 0x7e, 0x2b, 0x6f, 0x8f, 0xe5, + 0x0c, 0xc4, 0x88, 0x3f, 0x2a, 0x3f, 0x69, 0xb0, 0x42, 0xba, 0xbd, + 0xcc, 0x1a, 0xcf, 0x1d, 0x71, 0xb1, 0x09, 0xac, 0xc8, 0xca, 0x3e, + 0x16, 0xc7, 0xd0, 0x02, 0x32, 0x59, 0x37, 0x5e, 0x82, 0x1d, 0xe6, + 0x0f, 0xcb, 0xec, 0x9a, 0x32, 0x16, 0x9d, 0x70, 0x4b, 0xf9, 0x68, + 0x35, 0xfc, 0xd1, 0x03, 0xb8, 0x34, 0xd4, 0xc0, 0x70, 0x34, 0x6d, + 0x01, 0xc8, 0xfa, 0x8d, 0xbd, 0x2a, 0x8f, 0xbd, 0xd1, 0xf6, 0xaf, + 0x7c, 0x29, 0x1e, 0x56, 0x85, 0xe2, 0xcb, 0x46, 0xf2, 0x37, 0x7e, + 0x4b, 0x8d, 0xf9, 0xc3, 0x8f, 0x06, 0x88, 0x83, 0x55, 0xb2, 0x4c, + 0x2a, 0x03, 0xe5, 0x22, 0xff, 0x3c, 0xdb, 0xc6, 0x49, 0xd2, 0x67, + 0x1c, 0xb9, 0xc9, 0xc3, 0xba, 0xf1, 0x8a, 0x82, 0x8a, 0x04, 0xbf, + 0xff, 0xd1, 0xb9, 0xe0, 0xa8, 0x32, 0x4a, 0x00, 0x4f, 0x8a, 0x06, + 0xb2, 0x37, 0xad, 0x48, 0xc4, 0x06, 0xd7, 0xa5, 0x71, 0xfa, 0x0f, + 0xa0, 0x73, 0x01, 0xae, 0x4e, 0xc3, 0x76, 0x81, 0xea, 0x09, 0x62, + 0x8a, 0x2e, 0x7f, 0x2e, 0xe4, 0x53, 0x70, 0x7f, 0x29, 0xaa, 0x4f, + 0x29, 0xfe, 0xed, 0x4f, 0x1f, 0x7e, 0x52, 0xf7, 0xb2, 0x5e, 0xf8, + 0x77, 0xcb, 0x03, 0xf7, 0xe7, 0x13, 0x37, 0xd3, 0x68, 0xdd, 0xfd, + 0x1f, 0x66, 0x26, 0x60, 0xe9, 0x1b, 0xae, 0x50, 0x4e, 0xbd, 0x23, + 0xe8, 0x37, 0x2d, 0xc1, 0xdb, 0x01, 0x58, 0x8e, 0x1a, 0x6b, 0xd8, + 0x52, 0xa8, 0x93, 0x8f, 0x90, 0xbf, 0x3a, 0xb6, 0xa5, 0xe1, 0xcf, + 0x45, 0x66, 0x78, 0x0a, 0x86, 0xe9, 0x3d, 0x00, 0xd3, 0xfc, 0xfb, + 0x78, 0x85, 0x21, 0x3f, 0xc3, 0x23, 0xaf, 0x3d, 0x21, 0xf9, 0x37, + 0xda, 0x08, 0xe4, 0xb1, 0x97, 0xa8, 0x2b, 0xa0, 0x60, 0x30, 0xc7, + 0xf0, 0xf7, 0xef, 0x33, 0xf0, 0x31, 0xe2, 0x6a, 0x51, 0xd3, 0x52, + 0x15, 0x31, 0x17, 0xfc, 0xb6, 0x44, 0x3d, 0x9b, 0xd6, 0x41, 0x51, + 0x42, 0x16, 0xd0, 0x3e, 0xe2, 0xa9, 0xc1, 0xb6, 0x65, 0x8a, 0xf6, + 0xc6, 0x98, 0xa6, 0x75, 0xb2, 0xd5, 0x22, 0x99, 0x45, 0x7d, 0xae, + 0x4a, 0xed, 0xdf, 0xe4, 0x72, 0xf1, 0x39, 0xd4, 0x85, 0x3f, 0xd7, + 0x3c, 0xa3, 0xba, 0x40, 0xef, 0x0d, 0x88, 0xfc, 0x06, 0xdc, 0xc7, + 0xee, 0xd9, 0xbd, 0x6e, 0x80, 0x4b, 0x7d, 0x35, 0xfc, 0xdb, 0x9f, + 0x06, 0x40, 0xfe, 0x0c, 0x97, 0x7a, 0x3c, 0x9b, 0x42, 0x18, 0xfe, + 0x8c, 0xa4, 0xd7, 0xb0, 0xcd, 0xa4, 0x2c, 0xe4, 0x1a, 0x96, 0xc9, + 0xf7, 0xc0, 0xb5, 0x21, 0x14, 0xff, 0x84, 0x86, 0x51, 0x23, 0x12, + 0x06, 0x86, 0x35, 0x20, 0x2e, 0xc5, 0xf0, 0xb7, 0x80, 0xaa, 0x77, + 0xc5, 0x05, 0x2e, 0x69, 0x55, 0x92, 0x7b, 0x81, 0x19, 0xd4, 0x83, + 0x3f, 0xf7, 0x54, 0x86, 0x27, 0x5f, 0x1d, 0x8d, 0x53, 0x64, 0x92, + 0x13, 0xd8, 0x71, 0x7b, 0x13, 0x78, 0x10, 0xd4, 0x88, 0x2b, 0xf1, + 0x48, 0xfe, 0x89, 0x25, 0xe0, 0x56, 0x2f, 0xe9, 0xdf, 0xdd, 0x4f, + 0xe1, 0xa6, 0xc9, 0x1b, 0xff, 0x3e, 0x8b, 0x54, 0x1f, 0xb9, 0x0f, + 0xed, 0xb7, 0x2c, 0xea, 0xd9, 0x22, 0x62, 0xc8, 0x20, 0xea, 0x24, + 0xa8, 0x31, 0xab, 0xd5, 0x06, 0xac, 0xc7, 0xd6, 0xa5, 0x9d, 0x2e, + 0x72, 0x14, 0xec, 0x18, 0x43, 0xdc, 0x5f, 0x0c, 0x3d, 0x0a, 0x0b, + 0x2b, 0xcd, 0xa2, 0x79, 0xb0, 0x37, 0x16, 0xf2, 0x4a, 0x1e, 0x90, + 0xbc, 0xd8, 0xcd, 0x72, 0x3b, 0x88, 0x64, 0x90, 0x5d, 0x72, 0x9c, + 0x36, 0xe2, 0xcf, 0x45, 0xee, 0xa8, 0x24, 0x7b, 0x0e, 0xa2, 0x04, + 0x67, 0x01, 0xb0, 0x45, 0xfc, 0x88, 0x52, 0x5d, 0xe0, 0x40, 0x84, + 0xc4, 0xff, 0x6c, 0x67, 0xf1, 0xe7, 0x88, 0x1d, 0x82, 0xb0, 0x4b, + 0x9e, 0xd2, 0x33, 0x4d, 0x70, 0xa1, 0xa1, 0x55, 0x6f, 0xfc, 0x49, + 0x31, 0xfc, 0xfe, 0x39, 0x3f, 0x08, 0x45, 0x74, 0xb8, 0xf9, 0xd9, + 0xae, 0xaa, 0x2a, 0xe1, 0xae, 0xa3, 0x42, 0x70, 0x2c, 0x30, 0x5c, + 0x68, 0x63, 0xc1, 0x9e, 0x63, 0xef, 0x9b, 0xb7, 0x39, 0x84, 0x62, + 0xc9, 0x09, 0x03, 0xb2, 0xcc, 0x53, 0xdc, 0xc2, 0xd3, 0x3d, 0xe0, + 0xa0, 0xb2, 0xec, 0x45, 0x97, 0x3f, 0x9a, 0xbd, 0xd6, 0xf8, 0xff, + 0x43, 0x13, 0xe2, 0x96, 0x14, 0xbf, 0xb7, 0xc3, 0x49, 0x69, 0xe6, + 0x18, 0xf2, 0x97, 0x3c, 0x08, 0xda, 0x6e, 0xa8, 0x04, 0x45, 0x8a, + 0x5d, 0xc8, 0x85, 0x6c, 0x41, 0x0b, 0x21, 0x48, 0xfe, 0x72, 0x21, + 0xc5, 0xe8, 0x0c, 0x99, 0x1b, 0xf3, 0xe7, 0x5a, 0xef, 0x05, 0x64, + 0x87, 0xfb, 0xcf, 0xbf, 0x00, 0x57, 0xc6, 0xd8, 0xb8, 0xe9, 0x67, + 0x94, 0x19, 0x04, 0x3d, 0xfe, 0x15, 0xa7, 0x8b, 0x04, 0xdc, 0xff, + 0x7d, 0x23, 0x58, 0x61, 0xe9, 0xb6, 0x48, 0xe3, 0x1b, 0xad, 0xb3, + 0xc9, 0x57, 0x4a, 0x9f, 0x3f, 0x9a, 0xbb, 0x63, 0x9c, 0x65, 0xd1, + 0xd2, 0x82, 0x5d, 0x52, 0x5b, 0x8c, 0xd6, 0x5e, 0xe0, 0xc9, 0x1a, + 0xc8, 0xff, 0x5f, 0xbf, 0xdb, 0x16, 0x8c, 0x8c, 0x4b, 0xb1, 0x55, + 0x02, 0xc5, 0xd5, 0x16, 0x49, 0xdf, 0x1c, 0xf8, 0x02, 0x90, 0xfc, + 0xe5, 0x8f, 0x54, 0xaf, 0x1f, 0xe0, 0x85, 0x3f, 0x72, 0xd2, 0x38, + 0xa0, 0xcc, 0x87, 0xfa, 0x99, 0x6b, 0x5c, 0x96, 0x10, 0x64, 0xc5, + 0x1e, 0x07, 0x76, 0x8d, 0x87, 0x95, 0xc2, 0xdf, 0x31, 0x61, 0xf8, + 0xca, 0x7d, 0xb6, 0xed, 0x29, 0xca, 0xf8, 0x07, 0x9a, 0xd6, 0xb8, + 0x3e, 0x0a, 0x77, 0x3f, 0xd1, 0xdc, 0x5b, 0x76, 0x37, 0x45, 0xd9, + 0x80, 0x3f, 0x3f, 0xb1, 0x58, 0xb0, 0x52, 0x13, 0x00, 0x51, 0xe7, + 0x80, 0x6a, 0xf7, 0xf7, 0xbf, 0x25, 0x76, 0xcc, 0x20, 0xff, 0xcb, + 0xdb, 0x8b, 0xfe, 0x51, 0xea, 0xa8, 0x42, 0x2f, 0x02, 0x39, 0x6d, + 0xeb, 0x9f, 0x5e, 0x59, 0x34, 0xfc, 0x61, 0xf0, 0x0f, 0x5c, 0xef, + 0x2e, 0x9b, 0x25, 0xf3, 0x80, 0x06, 0xfd, 0x49, 0xdc, 0x3a, 0xf0, + 0xc9, 0x35, 0x82, 0x3c, 0xed, 0xf1, 0xc8, 0x9f, 0xe9, 0xa9, 0x0a, + 0x0b, 0xaa, 0xde, 0xfc, 0x42, 0xc9, 0x51, 0xac, 0x45, 0x02, 0xc8, + 0xb7, 0x17, 0x2e, 0x8f, 0x45, 0x93, 0x4f, 0x76, 0xe0, 0x9a, 0xae, + 0xd6, 0x28, 0x06, 0xfc, 0xd1, 0xd7, 0x5e, 0x36, 0x87, 0x7c, 0xc3, + 0x60, 0x13, 0xa2, 0xf6, 0xfb, 0x9a, 0x7c, 0x23, 0xae, 0x3d, 0x88, + 0xcd, 0xcd, 0x5d, 0xd7, 0x61, 0x74, 0x46, 0x9e, 0x07, 0x78, 0xf2, + 0x99, 0xb5, 0x74, 0x1d, 0x8e, 0x09, 0xeb, 0x9e, 0xa1, 0xf8, 0xdf, + 0x5a, 0xd7, 0x94, 0xf8, 0x5b, 0x57, 0xfe, 0x5c, 0xbf, 0xf3, 0x20, + 0xbb, 0xa3, 0xf4, 0xef, 0x81, 0x45, 0x60, 0x83, 0x78, 0x53, 0x7d, + 0x8a, 0x95, 0x75, 0x00, 0x0d, 0xd2, 0x9d, 0x54, 0x30, 0x04, 0x8b, + 0x66, 0xea, 0x8a, 0x1b, 0x5f, 0x06, 0x76, 0xce, 0xf9, 0xb9, 0xfa, + 0xea, 0x7e, 0x6b, 0x4e, 0x0d, 0xa8, 0xce, 0x20, 0xba, 0x8b, 0x46, + 0xfc, 0x91, 0xbf, 0xc2, 0x61, 0x72, 0xfd, 0x5b, 0xbb, 0x84, 0x84, + 0xee, 0x6a, 0xa3, 0xd3, 0x29, 0x21, 0x01, 0x99, 0x90, 0x0d, 0xf1, + 0xfc, 0x8e, 0x7f, 0x9b, 0xe1, 0x09, 0x23, 0xda, 0x33, 0x03, 0xdd, + 0x7c, 0xb2, 0xf3, 0xea, 0x4b, 0x04, 0xff, 0xf1, 0x65, 0xdf, 0xe2, + 0x5d, 0x30, 0xe4, 0xbf, 0xa4, 0x78, 0xe5, 0xdf, 0x20, 0xd9, 0x59, + 0xb3, 0x5c, 0x1a, 0x39, 0x51, 0xa7, 0xb7, 0xa2, 0x55, 0xcf, 0x39, + 0x6e, 0xc8, 0xaf, 0x94, 0xc7, 0x84, 0x0e, 0xff, 0x18, 0x3b, 0xb0, + 0x45, 0x3e, 0xbf, 0xe1, 0x3a, 0x9e, 0x69, 0x5a, 0x46, 0x0e, 0x53, + 0x18, 0xf2, 0x87, 0x50, 0xf7, 0x26, 0x18, 0xde, 0x54, 0x1d, 0x24, + 0xcc, 0x5a, 0xb5, 0x94, 0xe0, 0xdf, 0x31, 0x3b, 0xaf, 0x1b, 0xf9, + 0x97, 0x52, 0xf5, 0xc6, 0x1f, 0xda, 0x9b, 0xc2, 0x15, 0xa9, 0xbd, + 0xd2, 0x2d, 0x7f, 0x2e, 0xf2, 0x84, 0xe2, 0xc7, 0x82, 0x44, 0x87, + 0xbf, 0xb8, 0x30, 0xb2, 0xc9, 0xf0, 0x25, 0x3b, 0xad, 0x99, 0x33, + 0xa8, 0x51, 0x1a, 0x9a, 0xbf, 0x49, 0x7d, 0xe3, 0xa3, 0x72, 0x74, + 0xc6, 0x3f, 0xea, 0x23, 0xb0, 0x0a, 0xb1, 0x7d, 0xaf, 0xed, 0xff, + 0xe8, 0xf5, 0x83, 0xbc, 0xf3, 0xe7, 0x63, 0xce, 0xb8, 0x3f, 0x15, + 0x1b, 0x2c, 0xdd, 0xef, 0x9f, 0xed, 0xff, 0xe8, 0xf0, 0x47, 0x0b, + 0x23, 0x91, 0x27, 0x31, 0xb1, 0x92, 0x42, 0x12, 0x8a, 0xbf, 0xff, + 0x8b, 0xaa, 0xe9, 0xd1, 0x2e, 0xfb, 0x0f, 0xf2, 0xe7, 0x82, 0x33, + 0x6e, 0xdd, 0xd2, 0xe9, 0xff, 0xe8, 0xf4, 0x83, 0x74, 0xf8, 0x93, + 0x8b, 0xf4, 0xc3, 0x17, 0x94, 0x49, 0xb3, 0xb7, 0xfa, 0xf5, 0x3f, + 0xd3, 0xff, 0xd1, 0xe1, 0x8f, 0x8c, 0xb3, 0x03, 0xba, 0x06, 0x03, + 0xc9, 0xdf, 0x34, 0xe2, 0xdc, 0x02, 0xe5, 0xe9, 0xc0, 0x57, 0xcd, + 0xa5, 0xe9, 0x55, 0x86, 0x20, 0x9f, 0x97, 0xa4, 0x6e, 0xd4, 0xa7, + 0x1e, 0x10, 0x9d, 0x04, 0x8d, 0xb6, 0xa4, 0x28, 0x6d, 0xe7, 0x2e, + 0x2e, 0xc7, 0xe1, 0x38, 0xaf, 0xb8, 0xa3, 0xb7, 0xf9, 0x7a, 0x7b, + 0x2b, 0xf2, 0x2f, 0x21, 0x3a, 0xfc, 0xa9, 0x20, 0x0d, 0xd9, 0xe5, + 0xc0, 0x19, 0x83, 0x93, 0xa3, 0xf6, 0x0b, 0x52, 0xfb, 0x0f, 0x7e, + 0x7e, 0x3f, 0x49, 0x1a, 0xb6, 0x9d, 0x73, 0x57, 0xa0, 0xed, 0xdf, + 0xbb, 0x8b, 0xd9, 0x98, 0x04, 0x11, 0x56, 0x41, 0x6d, 0xbd, 0x8c, + 0xf8, 0x37, 0xdd, 0x2a, 0x28, 0x4d, 0x2d, 0x5a, 0x53, 0x7b, 0x91, + 0x99, 0xbb, 0x32, 0xc5, 0x6f, 0xbb, 0xe6, 0x06, 0xa0, 0x22, 0x6f, + 0xb9, 0x3a, 0xd2, 0xdb, 0x38, 0x0e, 0xf9, 0xef, 0xc1, 0xc4, 0x73, + 0x66, 0xcd, 0x1c, 0x4e, 0xe3, 0x5e, 0x71, 0x71, 0x31, 0xca, 0x53, + 0xf7, 0xeb, 0xda, 0x37, 0x88, 0xfc, 0xeb, 0x9d, 0xbf, 0x26, 0x48, + 0x87, 0x38, 0x8e, 0xc7, 0x77, 0xd9, 0x2f, 0xd9, 0x7f, 0xf6, 0x2a, + 0x34, 0x0f, 0xf0, 0x51, 0x13, 0x4e, 0xc7, 0xfe, 0x87, 0x1a, 0x4c, + 0x4c, 0x0a, 0x3e, 0xbe, 0x10, 0xd8, 0xba, 0x50, 0x37, 0x18, 0xf0, + 0x52, 0x5a, 0x62, 0xdf, 0xd0, 0xa5, 0x64, 0xf9, 0x2f, 0x73, 0x97, + 0xc9, 0xde, 0x6c, 0xd0, 0xf0, 0x76, 0x33, 0x2b, 0x29, 0x1b, 0x8f, + 0xb3, 0x03, 0xa1, 0xe8, 0x68, 0x76, 0x19, 0xf0, 0x1c, 0x92, 0x2f, + 0xd5, 0x6a, 0x5e, 0xa1, 0x00, 0xdc, 0xa5, 0xc8, 0x7b, 0xd1, 0x7d, + 0xa4, 0x5e, 0x0b, 0x66, 0x49, 0xd1, 0x99, 0xff, 0x49, 0x62, 0x83, + 0x6b, 0xc8, 0xaf, 0x74, 0x5b, 0xc9, 0xfe, 0x8f, 0x99, 0xba, 0xf9, + 0x68, 0x81, 0xe3, 0x2d, 0x04, 0x39, 0xc7, 0xe1, 0x20, 0x87, 0x16, + 0xa9, 0x51, 0x5c, 0xb3, 0x7c, 0xf3, 0x66, 0x97, 0xe7, 0xd0, 0x20, + 0xf2, 0x1d, 0x0d, 0xb3, 0x0a, 0x77, 0x0a, 0xf6, 0x9c, 0x21, 0xbf, + 0xff, 0xee, 0x27, 0x25, 0xab, 0xcf, 0xbf, 0x5b, 0x96, 0x1b, 0xe4, + 0x30, 0x4b, 0xc9, 0x63, 0x7f, 0x00, 0x1e, 0xdb, 0xe8, 0xc8, 0x4e, + 0x73, 0x60, 0xa7, 0xfc, 0x33, 0xf1, 0x79, 0x07, 0x7c, 0xe0, 0x04, + 0xae, 0x03, 0x8b, 0xc7, 0x25, 0x8c, 0xb3, 0x5c, 0x07, 0xc2, 0x21, + 0xc6, 0x6f, 0xb9, 0xce, 0xc2, 0x47, 0x75, 0x6f, 0xc0, 0x24, 0x3d, + 0x9d, 0xc0, 0x88, 0x32, 0x64, 0xa9, 0xf4, 0xff, 0x9a, 0x44, 0x0e, + 0xc4, 0x8d, 0x30, 0x6a, 0x9a, 0xfb, 0x10, 0x9f, 0xe4, 0x48, 0xc2, + 0xd3, 0xcd, 0x32, 0x54, 0x4e, 0x85, 0xdd, 0xfa, 0xfb, 0x17, 0x52, + 0x5b, 0xc3, 0x7f, 0x3d, 0x35, 0x04, 0x85, 0x81, 0xe4, 0x9a, 0xae, + 0xfa, 0xa9, 0x1a, 0x3f, 0x22, 0x95, 0x3f, 0x6c, 0x6a, 0x85, 0xe3, + 0xc9, 0x7d, 0xa2, 0x87, 0x2c, 0xcb, 0xae, 0x01, 0xce, 0x54, 0x7a, + 0x41, 0x60, 0xd8, 0xae, 0xfb, 0x60, 0x27, 0xfa, 0x9c, 0xf8, 0x9e, + 0x57, 0x40, 0xb9, 0xb8, 0x9e, 0x7e, 0xc2, 0x3d, 0xf8, 0x44, 0xf0, + 0x1b, 0xee, 0x3f, 0xe2, 0x12, 0x10, 0xb6, 0xfe, 0xd1, 0xd9, 0xa5, + 0xff, 0x4d, 0x69, 0xbe, 0xf6, 0x36, 0xec, 0x11, 0x58, 0xad, 0xd6, + 0x3c, 0x27, 0xae, 0xd7, 0xf9, 0x90, 0xc8, 0xa1, 0x49, 0x19, 0xf9, + 0x1e, 0xb2, 0xfd, 0x0b, 0x5c, 0xe0, 0x04, 0x35, 0xc5, 0x37, 0xd0, + 0xa4, 0xb8, 0x73, 0x01, 0xd3, 0x03, 0x1e, 0xf2, 0x2b, 0xf8, 0x59, + 0x7a, 0x9a, 0x4b, 0x3d, 0x52, 0xa8, 0xa5, 0x15, 0xe5, 0x19, 0xf2, + 0x60, 0x85, 0x29, 0xad, 0x06, 0xdc, 0x7e, 0xc1, 0x10, 0xbd, 0x41, + 0xd8, 0xb0, 0xc5, 0x16, 0xcb, 0xbc, 0xbe, 0x21, 0x0f, 0xfa, 0x8d, + 0xfc, 0x71, 0x69, 0x36, 0x4d, 0x5c, 0x7e, 0x04, 0xaa, 0xd5, 0x71, + 0xfd, 0xc0, 0xc1, 0xbb, 0x5c, 0xa4, 0xfd, 0x13, 0xf2, 0x8e, 0x5d, + 0xc0, 0x63, 0x10, 0x1a, 0xbf, 0x4e, 0xff, 0xe5, 0x1e, 0xb0, 0x42, + 0x7a, 0x23, 0x3a, 0x9f, 0x92, 0xc6, 0x55, 0xc6, 0xaf, 0x51, 0xb5, + 0x90, 0xc1, 0xa0, 0xeb, 0x7b, 0x83, 0xa4, 0xf9, 0xeb, 0xdf, 0x61, + 0x67, 0x9d, 0xdb, 0xdf, 0x8c, 0xd1, 0x0e, 0x2c, 0xfc, 0xdb, 0xa4, + 0xf5, 0xa4, 0x35, 0xb0, 0xfc, 0x97, 0x4d, 0x20, 0xe7, 0xd4, 0x42, + 0x16, 0x52, 0xc6, 0xb3, 0xa9, 0x7b, 0xfa, 0x0e, 0xab, 0x75, 0x53, + 0x72, 0x07, 0xb6, 0x77, 0x89, 0xd6, 0xe0, 0x8f, 0x92, 0x95, 0x2c, + 0xd2, 0xbc, 0xc2, 0x53, 0xea, 0x50, 0x15, 0x72, 0x32, 0x04, 0xd6, + 0x16, 0x9c, 0xae, 0x84, 0xac, 0x74, 0x08, 0xb0, 0xba, 0x2e, 0xa9, + 0x01, 0x42, 0xa1, 0x34, 0xb0, 0x30, 0x54, 0xec, 0x07, 0x07, 0x4d, + 0x31, 0x9b, 0x63, 0x68, 0xe5, 0xc8, 0x39, 0xba, 0x21, 0x16, 0x44, + 0xe9, 0x90, 0xc6, 0xe8, 0x77, 0x98, 0x6f, 0x36, 0xc7, 0xd3, 0x6d, + 0x2f, 0x1f, 0xda, 0x37, 0x2e, 0xae, 0x6f, 0x98, 0x5e, 0xff, 0x38, + 0x00, 0x9a, 0x13, 0x8c, 0xa1, 0x1e, 0xc0, 0xb4, 0x46, 0x68, 0x89, + 0xa9, 0x66, 0xf9, 0x0c, 0x9e, 0x8b, 0xb0, 0x2b, 0x41, 0x24, 0x74, + 0x16, 0x29, 0x68, 0x67, 0xeb, 0x54, 0x69, 0xb9, 0xdc, 0x05, 0x8a, + 0xb3, 0x92, 0xe2, 0xe2, 0x53, 0xac, 0x4e, 0x39, 0x14, 0x83, 0x45, + 0x6c, 0xb4, 0xc2, 0x73, 0x35, 0xfe, 0xde, 0x71, 0x0e, 0xe3, 0xb5, + 0xa8, 0x7c, 0xaa, 0x00, 0xa8, 0x98, 0x0d, 0x7c, 0xaa, 0x07, 0x10, + 0xc3, 0x19, 0x1c, 0x5a, 0x35, 0x9c, 0xb2, 0xa7, 0xc0, 0xe1, 0x28, + 0xd8, 0x97, 0xd6, 0xf6, 0x61, 0x7e, 0x6b, 0xf0, 0xae, 0xce, 0x28, + 0x8d, 0xec, 0x08, 0x8f, 0xce, 0x64, 0x9e, 0xc2, 0x9f, 0x0f, 0xee, + 0x33, 0x1e, 0x9a, 0x44, 0xa9, 0xb1, 0x52, 0x0f, 0x14, 0x39, 0x5f, + 0xdd, 0x9c, 0x85, 0x4f, 0xc2, 0xd2, 0x8a, 0x71, 0x9c, 0x84, 0x07, + 0xe5, 0x1f, 0xba, 0x05, 0x00, 0x62, 0xf4, 0x5e, 0x4a, 0xa0, 0x1c, + 0x86, 0x9f, 0xdb, 0x53, 0x25, 0x8d, 0x23, 0xee, 0x1f, 0xf4, 0x10, + 0xfd, 0x1f, 0x92, 0x2a, 0x94, 0xf5, 0x3f, 0xb0, 0xfb, 0x67, 0xd7, + 0x16, 0xb5, 0xfc, 0xfe, 0xf3, 0x51, 0x0b, 0xb6, 0x5f, 0x45, 0x1e, + 0x08, 0xee, 0x6b, 0x19, 0x03, 0xf0, 0x3b, 0x18, 0x71, 0x00, 0xb8, + 0xde, 0x93, 0x9e, 0x45, 0xc8, 0x5a, 0x37, 0x8e, 0x94, 0xc2, 0x4d, + 0x11, 0x5d, 0x23, 0x9b, 0xae, 0xb3, 0xd9, 0xc6, 0xd3, 0x17, 0xf2, + 0xc6, 0xbf, 0xef, 0x65, 0x70, 0xeb, 0x16, 0xb9, 0xe2, 0x02, 0x25, + 0xdc, 0x76, 0x93, 0x86, 0x7a, 0xeb, 0xbd, 0x35, 0x68, 0xfa, 0x3f, + 0x33, 0xcf, 0x43, 0x78, 0x41, 0x87, 0x0c, 0x20, 0xa6, 0xf5, 0xfb, + 0x34, 0x37, 0x78, 0x2e, 0xcd, 0x07, 0x48, 0x16, 0xa5, 0x8e, 0x50, + 0x1d, 0x85, 0xf0, 0x5c, 0xad, 0x8d, 0xdd, 0x33, 0x0f, 0x78, 0x66, + 0xc0, 0xbf, 0x4d, 0xd6, 0xbb, 0x81, 0xc7, 0x71, 0xc2, 0x86, 0xfc, + 0x3c, 0x2f, 0xe1, 0x3b, 0x85, 0xc6, 0xb7, 0x6a, 0x4a, 0x0e, 0xbb, + 0x29, 0xc6, 0xef, 0x90, 0x16, 0x02, 0xf3, 0x4d, 0x35, 0x3e, 0x19, + 0xde, 0xf8, 0x27, 0x95, 0x03, 0x9b, 0x55, 0x59, 0x7c, 0x24, 0x26, + 0xec, 0x3e, 0x4e, 0x47, 0x31, 0x19, 0xbe, 0xbc, 0x27, 0x3c, 0x0d, + 0xe8, 0x03, 0x6d, 0x93, 0x33, 0xb2, 0x1b, 0xf0, 0x80, 0x8b, 0x84, + 0x29, 0x75, 0xf5, 0x6b, 0xb3, 0xbe, 0xdb, 0xfa, 0xf8, 0x2b, 0x0e, + 0xc7, 0xd7, 0xc6, 0x53, 0x69, 0x5e, 0xf9, 0xa3, 0xf6, 0xef, 0x14, + 0x1a, 0xaa, 0xf7, 0x5f, 0xe7, 0xf9, 0x71, 0xd5, 0x98, 0x76, 0xe1, + 0xe1, 0xfd, 0xd7, 0x3b, 0xc1, 0xf7, 0xa8, 0xaa, 0x4d, 0x13, 0xc0, + 0x36, 0xc5, 0xeb, 0xac, 0xfd, 0x69, 0x62, 0xf6, 0x45, 0x57, 0xbc, + 0xf0, 0x47, 0x73, 0x0c, 0xcb, 0x2c, 0x38, 0xfe, 0x8f, 0x9a, 0xb0, + 0x68, 0x1d, 0x1d, 0xf6, 0xaa, 0xa1, 0xf4, 0x30, 0x82, 0xd6, 0x54, + 0x09, 0xb2, 0xff, 0x3d, 0xbc, 0x26, 0x35, 0xc4, 0xae, 0x59, 0x22, + 0x81, 0x33, 0x7e, 0x02, 0x2b, 0x17, 0x47, 0xbc, 0xf6, 0x07, 0x24, + 0xb5, 0xf0, 0x47, 0xf6, 0x8f, 0x5d, 0xec, 0xd8, 0xa6, 0x7e, 0x35, + 0x50, 0xac, 0x7a, 0xc3, 0xac, 0xc0, 0x39, 0x84, 0xcd, 0x1a, 0x66, + 0xd3, 0xe9, 0x9e, 0x51, 0xe2, 0x85, 0x7f, 0xc4, 0x51, 0xe0, 0x99, + 0x96, 0x5e, 0xa3, 0x8e, 0x20, 0xc0, 0x84, 0x7b, 0x2f, 0xa6, 0xa0, + 0x80, 0x58, 0x3a, 0xd2, 0xf1, 0xb0, 0xea, 0xd4, 0x07, 0xf9, 0x6f, + 0x96, 0xe6, 0x57, 0x56, 0x1f, 0x73, 0x0a, 0xc0, 0xf5, 0x99, 0x76, + 0xd9, 0x4e, 0xbf, 0x1f, 0x81, 0xc7, 0xe3, 0x59, 0xae, 0x1f, 0x07, + 0xc2, 0x90, 0xbf, 0x7f, 0x1f, 0x68, 0x9d, 0x4e, 0xc9, 0xb8, 0x2e, + 0x5c, 0x90, 0xd6, 0xbc, 0xb6, 0x68, 0x41, 0xe4, 0x49, 0x65, 0xb3, + 0xca, 0xfc, 0x9b, 0x18, 0x06, 0xa3, 0xf4, 0xc2, 0x3f, 0xc6, 0x0e, + 0x0a, 0x62, 0x86, 0x17, 0x95, 0x8d, 0x27, 0x12, 0xec, 0xcf, 0xc6, + 0x39, 0xa8, 0x98, 0x1f, 0xaa, 0x4c, 0x70, 0xca, 0xfe, 0x1f, 0x88, + 0xbf, 0x72, 0xcd, 0x26, 0x43, 0x36, 0x3a, 0x81, 0x67, 0x87, 0xa6, + 0x8d, 0x5d, 0x06, 0xc0, 0xc5, 0xb3, 0xe0, 0x34, 0x1b, 0x42, 0x4d, + 0xe1, 0xa2, 0xcf, 0x1f, 0x79, 0xa9, 0x39, 0xca, 0x84, 0xf2, 0xad, + 0xfd, 0xd9, 0x9a, 0x03, 0x4d, 0xdf, 0x22, 0xfe, 0xb0, 0xea, 0x54, + 0x0d, 0x83, 0xe8, 0x5c, 0xb1, 0xea, 0x9c, 0xa2, 0xa9, 0xf7, 0x64, + 0xf1, 0xc2, 0x1f, 0x5e, 0xe9, 0x48, 0x64, 0xa7, 0x6c, 0xb5, 0x02, + 0x80, 0x09, 0x47, 0x03, 0xe1, 0x25, 0xf5, 0xe7, 0x3f, 0xdb, 0x1c, + 0x93, 0x9b, 0x06, 0x8a, 0x3f, 0x6c, 0x90, 0xe7, 0x15, 0x81, 0xca, + 0x1d, 0x1d, 0x68, 0xed, 0xc0, 0x83, 0x40, 0xf8, 0x60, 0xb1, 0xbb, + 0xe4, 0x15, 0x5d, 0x68, 0x6f, 0xfc, 0xd1, 0x92, 0xa8, 0xb2, 0xf7, + 0x98, 0x05, 0xaf, 0x9c, 0xdf, 0xb0, 0x3c, 0x50, 0x8e, 0x40, 0xa3, + 0xce, 0x29, 0x33, 0x07, 0xd8, 0x69, 0x03, 0x0f, 0x9d, 0xeb, 0xac, + 0xf3, 0x92, 0xc4, 0x98, 0x3f, 0x6a, 0x62, 0x2c, 0xa6, 0xa0, 0x4c, + 0x65, 0x32, 0x13, 0x25, 0xac, 0x41, 0xb3, 0x42, 0x74, 0x6b, 0xc4, + 0x47, 0x0c, 0x8c, 0xeb, 0x1b, 0xd1, 0x08, 0x0d, 0xfb, 0x48, 0x4d, + 0x03, 0xc3, 0x1f, 0xaf, 0x87, 0xf5, 0x6c, 0xa4, 0x4d, 0xd1, 0xe1, + 0x4e, 0x50, 0x92, 0x18, 0x7b, 0x4d, 0x9d, 0xc5, 0xa9, 0x1b, 0x7f, + 0xbf, 0xae, 0x71, 0x93, 0xcd, 0xdb, 0x8a, 0x84, 0xb2, 0xb5, 0xc4, + 0x03, 0xf0, 0x0f, 0x8b, 0x8e, 0x37, 0xe7, 0x09, 0xe0, 0x24, 0x2a, + 0x77, 0xbf, 0x59, 0x4e, 0x70, 0x5c, 0xec, 0x1c, 0x9b, 0x86, 0x9e, + 0x91, 0x66, 0x62, 0x1e, 0x84, 0x3f, 0x1a, 0x93, 0x4a, 0x42, 0xa3, + 0xd9, 0xf2, 0xfc, 0x15, 0x4c, 0x70, 0x4d, 0x42, 0xcb, 0xfb, 0xee, + 0x92, 0x63, 0x6a, 0x81, 0xe3, 0x0e, 0xc0, 0x2e, 0xf2, 0xd1, 0x75, + 0xb1, 0x8d, 0xc7, 0xde, 0x15, 0x03, 0x83, 0x69, 0xf8, 0xa3, 0x80, + 0x88, 0xc0, 0x39, 0x8a, 0x34, 0x90, 0x02, 0xd6, 0x00, 0xd8, 0x32, + 0x85, 0xee, 0x51, 0x67, 0xf1, 0x28, 0x49, 0x75, 0xd3, 0xfc, 0x0b, + 0xa8, 0xde, 0x71, 0x48, 0xc2, 0x19, 0x50, 0x36, 0x4b, 0xb6, 0x0f, + 0x1a, 0x0d, 0x5e, 0x6e, 0xcb, 0x2d, 0x71, 0x03, 0xa9, 0xfd, 0x43, + 0xf6, 0x9f, 0x70, 0x22, 0xa1, 0x95, 0x5f, 0x40, 0xe4, 0x94, 0x4b, + 0x82, 0x6a, 0xff, 0xd5, 0x9b, 0xbf, 0x34, 0xc5, 0x38, 0xf6, 0xae, + 0xbc, 0x9a, 0x11, 0x36, 0xa6, 0xa8, 0x65, 0x1d, 0x7b, 0x57, 0x58, + 0x49, 0x84, 0x94, 0x58, 0x50, 0x84, 0x46, 0x40, 0xee, 0xd4, 0xe4, + 0x9b, 0x93, 0x8b, 0xa4, 0x79, 0x7f, 0x0d, 0x7f, 0xe4, 0xa5, 0x21, + 0xaf, 0x41, 0x12, 0x25, 0xfa, 0x2c, 0xf2, 0x6e, 0xe0, 0x17, 0xb8, + 0xc1, 0x6c, 0x3d, 0xec, 0xf8, 0x12, 0xda, 0xfe, 0x61, 0x16, 0xa9, + 0xf1, 0x13, 0x8b, 0x95, 0x01, 0x83, 0x08, 0xb3, 0xdd, 0x23, 0xba, + 0x44, 0xca, 0x9e, 0x14, 0x21, 0x73, 0x4f, 0xdf, 0x2b, 0x3a, 0x68, + 0xc9, 0x3c, 0xe1, 0x2c, 0x3f, 0x36, 0x4e, 0x6c, 0x7a, 0x1f, 0x80, + 0x3f, 0x2c, 0x67, 0x70, 0xa4, 0x29, 0xae, 0x42, 0xc4, 0xc9, 0x2c, + 0x74, 0xb3, 0x59, 0x81, 0x38, 0xe1, 0xa0, 0x1a, 0xe7, 0x16, 0x5a, + 0x9b, 0xc5, 0x19, 0x63, 0xe3, 0x12, 0xd3, 0xcf, 0x3b, 0xbf, 0x2f, + 0x02, 0x05, 0x03, 0xf5, 0xf9, 0xf3, 0xd3, 0xcb, 0xa9, 0x35, 0x68, + 0xf2, 0x39, 0x5a, 0x2a, 0xd3, 0x5a, 0x07, 0x1c, 0xd6, 0xb4, 0xa7, + 0x95, 0x17, 0x7c, 0xb8, 0x07, 0xb0, 0x23, 0x36, 0x21, 0xdb, 0x40, + 0x8d, 0xe8, 0x37, 0x6d, 0x9a, 0x8b, 0xea, 0x03, 0xd7, 0xc5, 0xac, + 0x19, 0x91, 0xca, 0xa8, 0x86, 0x69, 0xf0, 0x31, 0xb1, 0xe5, 0x3d, + 0xd8, 0x5f, 0x7a, 0xe7, 0x1e, 0x80, 0x3f, 0x72, 0x67, 0xd8, 0xd0, + 0x00, 0x87, 0x3b, 0x3c, 0xdc, 0x46, 0x4a, 0xc0, 0x81, 0xa1, 0x9a, + 0xee, 0x01, 0xaa, 0x53, 0x26, 0xec, 0x9c, 0x7a, 0xd0, 0x18, 0x29, + 0xd7, 0xa0, 0x9f, 0x0d, 0x05, 0x95, 0x48, 0xd0, 0xe7, 0xcf, 0x75, + 0xbb, 0x20, 0x4d, 0xe7, 0xab, 0x17, 0x3f, 0xd6, 0x1e, 0x47, 0x90, + 0xd2, 0x1d, 0xf7, 0x87, 0x2d, 0xed, 0x6f, 0xca, 0x88, 0xeb, 0x4c, + 0x00, 0x96, 0xb3, 0x9d, 0x8b, 0xf9, 0x1e, 0x70, 0x18, 0x37, 0x36, + 0x3d, 0x7e, 0x00, 0xd5, 0xd6, 0x49, 0x03, 0x23, 0x88, 0x7e, 0x56, + 0xc3, 0xd7, 0xbe, 0x71, 0xba, 0x2e, 0xe7, 0xe6, 0x16, 0x78, 0x4a, + 0x77, 0xc7, 0x99, 0x1e, 0x94, 0x7f, 0x9f, 0xab, 0xa0, 0x6c, 0x8a, + 0x08, 0x25, 0x3a, 0x7e, 0xc1, 0x2e, 0xb7, 0x1d, 0x0d, 0x49, 0xf0, + 0xcb, 0xe5, 0x67, 0xcf, 0xe1, 0xc1, 0x89, 0x63, 0x52, 0xcd, 0x3e, + 0xa4, 0x10, 0x18, 0xf3, 0x6f, 0x9a, 0x05, 0xc0, 0xd7, 0xea, 0x5c, + 0x00, 0xbc, 0x38, 0x58, 0x06, 0x6f, 0x99, 0x4f, 0xf7, 0x80, 0x4d, + 0x3a, 0xe0, 0xc8, 0xd2, 0x1a, 0x27, 0xfd, 0xdb, 0xb4, 0x41, 0x0a, + 0xbd, 0xc5, 0x3d, 0xd9, 0x55, 0x79, 0x0c, 0x89, 0x77, 0x80, 0x38, + 0x8a, 0x39, 0xb5, 0x0a, 0x58, 0xe9, 0xa8, 0x9e, 0x81, 0xc9, 0xa5, + 0xf7, 0x2f, 0xa4, 0xf6, 0x8e, 0x8e, 0x8e, 0x59, 0x7a, 0x45, 0xb8, + 0x24, 0xfa, 0x57, 0x3d, 0x00, 0xff, 0xf1, 0x65, 0x52, 0x31, 0x27, + 0xde, 0x11, 0xe3, 0x81, 0x8d, 0x2c, 0x95, 0x5e, 0x84, 0xc9, 0xe5, + 0x28, 0xfe, 0x27, 0x96, 0x27, 0x2e, 0x80, 0xea, 0x34, 0xa9, 0x58, + 0xd5, 0x65, 0x3d, 0x3a, 0xfc, 0xa9, 0xf5, 0xbf, 0x1c, 0x9f, 0x52, + 0x85, 0x43, 0x4c, 0xc2, 0x0f, 0xfd, 0x06, 0x8e, 0xff, 0xa1, 0x11, + 0xd8, 0xd4, 0xca, 0x03, 0xa2, 0xdd, 0x2f, 0x48, 0x0d, 0x8e, 0xff, + 0x3b, 0xd6, 0x28, 0xe2, 0xf7, 0x33, 0xb2, 0xb3, 0x05, 0xb3, 0xd8, + 0x3a, 0x2e, 0x1f, 0x1c, 0x17, 0xfb, 0x62, 0x8d, 0x46, 0x9c, 0x11, + 0xac, 0x11, 0x0f, 0xc6, 0x1f, 0x7d, 0xfe, 0xa2, 0xef, 0x35, 0xfc, + 0xde, 0x71, 0x5d, 0x84, 0xea, 0x64, 0x7f, 0x29, 0x41, 0x0e, 0x4e, + 0xd0, 0xdb, 0x41, 0x7c, 0x0b, 0xb0, 0xfe, 0x37, 0xe4, 0x8f, 0x86, + 0x98, 0x55, 0x4b, 0x1c, 0x79, 0xef, 0x89, 0xd3, 0xdb, 0x11, 0xbb, + 0x41, 0x8d, 0xde, 0x9a, 0x66, 0xd8, 0x8a, 0x5f, 0x7f, 0x1d, 0xd7, + 0x5d, 0x21, 0x19, 0x1e, 0x69, 0xad, 0x62, 0xdb, 0x1f, 0xdd, 0x99, + 0x52, 0x2f, 0x3b, 0x38, 0x0b, 0x08, 0x19, 0xf8, 0x66, 0xe0, 0x5d, + 0x49, 0xfc, 0xf9, 0x30, 0x3c, 0xd2, 0x12, 0x9c, 0x21, 0x5c, 0x97, + 0x9b, 0x1a, 0x3e, 0xb9, 0x4c, 0x1c, 0x63, 0xae, 0x3f, 0x7f, 0x78, + 0x8b, 0x92, 0xe1, 0x03, 0x1b, 0x7c, 0x44, 0x17, 0xb6, 0xfe, 0x52, + 0x43, 0x00, 0x13, 0xe4, 0xb8, 0x87, 0x93, 0x6a, 0xc0, 0x7e, 0xa5, + 0x2e, 0xec, 0x5b, 0xe0, 0x9d, 0xbf, 0x6a, 0x89, 0xc3, 0x6a, 0x4f, + 0x0c, 0xb1, 0x88, 0xa6, 0x96, 0x64, 0x3f, 0x0f, 0x4a, 0x50, 0x2b, + 0x6e, 0x7f, 0x33, 0x94, 0xf7, 0xeb, 0xb8, 0xd2, 0x05, 0x2e, 0x88, + 0xde, 0x14, 0x21, 0x9f, 0x55, 0x56, 0xee, 0x4b, 0x08, 0xe5, 0xa1, + 0xc5, 0xb1, 0xb0, 0x18, 0x14, 0x26, 0xc8, 0x97, 0xb2, 0xf5, 0x40, + 0x41, 0x8a, 0xda, 0x24, 0x5b, 0xc7, 0x4b, 0x77, 0x91, 0xa5, 0x98, + 0x1a, 0xb0, 0xc9, 0xc6, 0x43, 0x27, 0x16, 0x20, 0xc5, 0x31, 0xac, + 0x33, 0x7f, 0x78, 0x19, 0xa9, 0x99, 0x87, 0x6f, 0x02, 0x72, 0x35, + 0x8d, 0x56, 0x5a, 0x61, 0xf4, 0x6a, 0x2c, 0x56, 0x58, 0x29, 0x13, + 0xa3, 0xa8, 0xd2, 0x32, 0xaa, 0xff, 0x69, 0xfe, 0xc8, 0xbb, 0x21, + 0x5f, 0xfa, 0x18, 0x3a, 0x5c, 0x95, 0xfc, 0x7c, 0x18, 0xc1, 0xa3, + 0x38, 0x7b, 0xde, 0xb7, 0x9c, 0x74, 0x01, 0x7b, 0xa2, 0x74, 0xeb, + 0x91, 0xab, 0x8b, 0x85, 0xa2, 0x3d, 0xcb, 0xcd, 0xcb, 0x0f, 0x94, + 0x29, 0xab, 0x56, 0x83, 0x57, 0xbb, 0x3c, 0x17, 0x56, 0x99, 0xcd, + 0x96, 0x63, 0x65, 0x62, 0x90, 0x72, 0x6a, 0x51, 0x22, 0xb4, 0xff, + 0x65, 0x5f, 0x6b, 0x03, 0xaf, 0x4d, 0x23, 0xfe, 0xf0, 0x03, 0x93, + 0xcd, 0x3c, 0x68, 0x08, 0xcc, 0xa6, 0x42, 0x6a, 0xc0, 0x04, 0xc9, + 0xc4, 0xa6, 0xf8, 0xc3, 0x87, 0x6d, 0xd4, 0xfe, 0xd3, 0xfc, 0x91, + 0xa7, 0x70, 0x86, 0x54, 0x61, 0x4b, 0x6e, 0x8e, 0x5a, 0x09, 0x99, + 0x7b, 0x1e, 0x2f, 0x75, 0xa8, 0xb2, 0xc6, 0x2b, 0xed, 0x46, 0xf0, + 0xc4, 0x03, 0xe2, 0x6a, 0x8b, 0x0a, 0xb9, 0x61, 0x87, 0x4f, 0x7d, + 0xa5, 0x53, 0x6c, 0xec, 0xca, 0x4e, 0x63, 0x57, 0xae, 0x81, 0x45, + 0x74, 0xf9, 0xe3, 0xc8, 0x17, 0x90, 0x7f, 0x99, 0x7e, 0xe8, 0x00, + 0x03, 0xfe, 0xd0, 0xec, 0x55, 0x06, 0xdd, 0xe0, 0x45, 0xb2, 0x02, + 0x61, 0xa1, 0x2b, 0x1d, 0x01, 0x98, 0x20, 0x05, 0xc4, 0xa7, 0xf8, + 0x43, 0x64, 0x71, 0xa0, 0x5a, 0x87, 0x3f, 0xbf, 0x90, 0x18, 0xaf, + 0x83, 0xcf, 0x4f, 0xf5, 0xde, 0x19, 0x73, 0xcb, 0xa0, 0x68, 0x4c, + 0xfd, 0x96, 0x1d, 0xc9, 0xcd, 0xb5, 0xce, 0x23, 0xfd, 0x18, 0xf9, + 0xc8, 0x19, 0x59, 0xa7, 0x61, 0xe2, 0x6c, 0x62, 0xfa, 0xab, 0xf9, + 0x1b, 0x1b, 0x4e, 0xe4, 0xe6, 0x9e, 0xc9, 0x9a, 0x11, 0x85, 0x6b, + 0x09, 0xd8, 0xe5, 0xcf, 0x53, 0x6c, 0xca, 0x78, 0x87, 0x18, 0x75, + 0x00, 0xcd, 0xd2, 0xe8, 0x2c, 0x5f, 0x30, 0xe6, 0xdf, 0xee, 0x04, + 0xf0, 0xa4, 0x4b, 0x18, 0xd0, 0x02, 0x38, 0xfd, 0x6c, 0xc8, 0x76, + 0xa0, 0x74, 0x04, 0x51, 0x80, 0xe4, 0xb7, 0x71, 0xa1, 0x8c, 0xae, + 0x00, 0x87, 0x94, 0xae, 0x2d, 0x6c, 0x93, 0xd6, 0x35, 0x34, 0xe0, + 0x1f, 0xbc, 0x49, 0x9d, 0x36, 0x43, 0x0d, 0xc5, 0x3e, 0x65, 0x0a, + 0xee, 0x89, 0x6f, 0x80, 0xd3, 0x60, 0xea, 0x9f, 0x6f, 0xaa, 0xd3, + 0x6d, 0xf5, 0x6f, 0xa9, 0x49, 0x6c, 0x10, 0x1a, 0x1e, 0xae, 0x0c, + 0xb4, 0xfa, 0x2f, 0xf7, 0x78, 0xa4, 0x09, 0x23, 0x2e, 0x7c, 0x97, + 0x20, 0x92, 0x43, 0xfc, 0x6b, 0xf6, 0xea, 0xcd, 0x18, 0x19, 0xf0, + 0x1f, 0x5e, 0x04, 0xd4, 0x6e, 0xfe, 0x7c, 0xcf, 0xbd, 0x09, 0xf0, + 0x81, 0xa8, 0x03, 0x01, 0xd0, 0xfa, 0x10, 0xfd, 0x01, 0xda, 0x15, + 0x00, 0xbb, 0x5c, 0xab, 0x9b, 0x96, 0x09, 0xd2, 0x0a, 0x09, 0x1d, + 0xfe, 0x51, 0xd9, 0x6a, 0xfc, 0x07, 0x68, 0x48, 0x78, 0xd2, 0xd5, + 0x29, 0x28, 0x9d, 0x18, 0x14, 0x7f, 0x48, 0x7a, 0x9c, 0x02, 0xa5, + 0xeb, 0xfb, 0x07, 0x71, 0x7c, 0xc8, 0x8b, 0x9f, 0x3b, 0xa5, 0x31, + 0x19, 0x0b, 0x28, 0xcf, 0x71, 0x79, 0x4e, 0xcd, 0xec, 0xce, 0x8e, + 0x47, 0x1b, 0xf1, 0x9f, 0x57, 0x45, 0x0c, 0xf3, 0xc0, 0x46, 0x7a, + 0xd9, 0x50, 0x3b, 0x31, 0x10, 0x04, 0x13, 0xc4, 0xb8, 0xa0, 0x28, + 0x30, 0xb6, 0xbc, 0x46, 0x15, 0xda, 0x72, 0x57, 0xfb, 0xc8, 0xd7, + 0x64, 0xf9, 0x8f, 0x77, 0x82, 0x7b, 0xf2, 0xd0, 0x3f, 0xb4, 0x2c, + 0xec, 0x83, 0xd5, 0x9f, 0x62, 0xef, 0x01, 0xca, 0xa3, 0xe2, 0x8f, + 0x8a, 0x69, 0xd8, 0x0f, 0x1e, 0x70, 0xcb, 0x6a, 0xd9, 0x70, 0xf8, + 0x1e, 0xa8, 0x91, 0x96, 0x50, 0x5b, 0x80, 0x63, 0x12, 0x6c, 0x48, + 0xc0, 0x6f, 0xb6, 0x3e, 0x8c, 0xb6, 0x3e, 0x7f, 0xf8, 0x52, 0x12, + 0x85, 0x12, 0x79, 0x08, 0x58, 0xe7, 0x55, 0x09, 0x6a, 0x0c, 0x0d, + 0x98, 0x20, 0xc5, 0x03, 0x7f, 0xad, 0x14, 0x9c, 0x17, 0x0d, 0xd5, + 0x06, 0x63, 0x1c, 0x72, 0x64, 0x50, 0x2d, 0x7f, 0x68, 0xaf, 0x83, + 0xef, 0x25, 0xbf, 0xa2, 0x26, 0xf0, 0xeb, 0xd9, 0x4e, 0xb8, 0x4b, + 0x05, 0xec, 0x06, 0x3a, 0x2b, 0x6b, 0x14, 0x69, 0x14, 0x16, 0xc6, + 0x8e, 0xa0, 0x06, 0xe9, 0xc4, 0x4b, 0x40, 0x91, 0x0d, 0xa5, 0x60, + 0x95, 0xa6, 0xd8, 0x4d, 0xd8, 0x23, 0x0f, 0x78, 0xec, 0x6b, 0xa5, + 0x7a, 0x02, 0x79, 0x29, 0x44, 0x98, 0x7f, 0xa8, 0x92, 0xea, 0x60, + 0x53, 0x53, 0xc5, 0xdd, 0x61, 0x62, 0x09, 0x28, 0x49, 0xa6, 0x03, + 0xe4, 0x72, 0xd8, 0x6b, 0x93, 0x18, 0xe6, 0x85, 0x9d, 0xd5, 0x9c, + 0xaf, 0xc9, 0xd0, 0x3b, 0xa8, 0xf7, 0x2a, 0xb6, 0xa7, 0x21, 0x16, + 0x8f, 0x68, 0x94, 0xf0, 0xfd, 0x0e, 0x0a, 0x52, 0x4c, 0x01, 0x2d, + 0x7f, 0x14, 0xf1, 0xa7, 0x26, 0x55, 0xba, 0xe5, 0x5e, 0xb9, 0xc0, + 0xbd, 0x80, 0xac, 0x8b, 0x67, 0x57, 0x18, 0x8c, 0xa8, 0x60, 0x19, + 0x69, 0xd3, 0x2c, 0x6b, 0x8d, 0xdd, 0x66, 0xdb, 0x37, 0x9a, 0xa9, + 0xcd, 0xdb, 0xae, 0xb3, 0xd9, 0xb6, 0xc8, 0x9e, 0x5b, 0x21, 0xc3, + 0xcd, 0x3b, 0x6d, 0xb6, 0xcd, 0xf3, 0x07, 0xcb, 0x7c, 0xa6, 0xa0, + 0x65, 0x21, 0x8d, 0x7b, 0x4c, 0xdd, 0x2c, 0xc6, 0x59, 0x88, 0x5c, + 0xa7, 0x78, 0x3b, 0x5c, 0x74, 0x03, 0xf7, 0x25, 0xe5, 0x4c, 0xb6, + 0xeb, 0xa1, 0x59, 0x7e, 0x93, 0x08, 0x27, 0x93, 0x50, 0x5e, 0x73, + 0x8f, 0x9a, 0x08, 0x48, 0x28, 0x97, 0x2b, 0xed, 0xc8, 0x1d, 0x95, + 0x28, 0xaa, 0x55, 0x5c, 0xca, 0x79, 0x77, 0xa5, 0xb9, 0xb1, 0x01, + 0xff, 0xb6, 0xfb, 0x04, 0x90, 0xdd, 0x5a, 0x7a, 0x16, 0x0b, 0x2b, + 0x98, 0x98, 0x23, 0xdd, 0xce, 0x69, 0x82, 0x70, 0x11, 0x02, 0x9b, + 0x18, 0xd6, 0xad, 0xb5, 0xd5, 0x56, 0x41, 0x8c, 0x68, 0xa6, 0x0a, + 0x1a, 0x61, 0x70, 0x7d, 0xa0, 0x0e, 0xb1, 0xa0, 0xd7, 0x81, 0xa8, + 0x25, 0x83, 0xa4, 0x17, 0x26, 0x48, 0xfc, 0x03, 0x6d, 0x19, 0x7d, + 0x91, 0xd6, 0x22, 0x9b, 0xf6, 0xd2, 0xf6, 0x42, 0xe4, 0x65, 0x40, + 0x4f, 0x04, 0xc1, 0x04, 0xf9, 0xf9, 0xa0, 0xb0, 0x66, 0x15, 0x0e, + 0x47, 0x15, 0x28, 0x5e, 0x2d, 0x5b, 0x82, 0x2c, 0xff, 0x88, 0x0d, + 0x95, 0x20, 0x5f, 0x7e, 0x7b, 0xc2, 0x4e, 0x02, 0x90, 0x45, 0xad, + 0x79, 0xf5, 0x5f, 0x29, 0xd0, 0x2f, 0x44, 0x6d, 0xfc, 0x91, 0xc3, + 0xa8, 0x7b, 0x2d, 0x39, 0x65, 0x8a, 0x3c, 0x2e, 0x2a, 0xeb, 0xbe, + 0xe5, 0x04, 0x51, 0xfe, 0xb4, 0x48, 0xe5, 0x1f, 0xfe, 0x9d, 0xc3, + 0xb1, 0x84, 0xf8, 0xc2, 0x4c, 0x5f, 0x38, 0x1c, 0x45, 0xe4, 0x37, + 0x0a, 0x13, 0x7e, 0x96, 0xe7, 0x75, 0x83, 0x27, 0xa2, 0x19, 0xb0, + 0xab, 0xdb, 0x27, 0x2a, 0xa4, 0x68, 0xfe, 0xfe, 0xfd, 0x77, 0x54, + 0x82, 0xa2, 0x64, 0xd9, 0x88, 0x19, 0xe6, 0x02, 0x6c, 0x78, 0x28, + 0x68, 0x0f, 0xec, 0x31, 0x5a, 0xad, 0xa5, 0xcb, 0x1f, 0xcf, 0x71, + 0x91, 0x8d, 0x66, 0xdb, 0xfd, 0x02, 0x38, 0xf6, 0x9c, 0x77, 0xd2, + 0xe4, 0xed, 0x87, 0x86, 0xeb, 0x8b, 0xf4, 0x4c, 0x9b, 0x0c, 0x15, + 0x3d, 0x0e, 0x15, 0xe9, 0x99, 0x90, 0x30, 0xa2, 0x15, 0x93, 0xa0, + 0x28, 0xf0, 0x61, 0x03, 0x13, 0x12, 0x62, 0x89, 0xb9, 0x76, 0x92, + 0x7f, 0xb3, 0x21, 0xcb, 0x2e, 0x08, 0x40, 0x8e, 0xf3, 0x0f, 0x5b, + 0x8c, 0x15, 0x00, 0xb0, 0x3e, 0x79, 0x91, 0xdf, 0x51, 0x0d, 0x02, + 0x2d, 0x7a, 0xfc, 0xb9, 0x90, 0x4d, 0x1e, 0x90, 0xd7, 0x51, 0x39, + 0x0d, 0x58, 0x5e, 0x03, 0x0a, 0x47, 0xb0, 0x5e, 0x1d, 0xb0, 0x1a, + 0xd7, 0x89, 0x81, 0xac, 0x1f, 0x92, 0xf2, 0xa1, 0x0a, 0xe2, 0x7f, + 0x4e, 0x0a, 0xb9, 0x9d, 0x0d, 0xad, 0x53, 0xcf, 0x29, 0x75, 0x1e, + 0xbe, 0x57, 0x1e, 0x11, 0x08, 0x4a, 0x12, 0x3e, 0xdd, 0xa3, 0x1f, + 0x8a, 0x1e, 0x89, 0x2e, 0x7f, 0x2e, 0x36, 0x1f, 0x80, 0x15, 0xca, + 0x34, 0x0f, 0x7c, 0xfb, 0x5d, 0x66, 0x1d, 0x1b, 0x62, 0x4e, 0xae, + 0x56, 0x34, 0xfe, 0xb0, 0x0f, 0x5f, 0xe8, 0xf9, 0x9f, 0xfb, 0xf6, + 0x0f, 0xbb, 0x2b, 0xe4, 0xf8, 0x19, 0xd5, 0xf2, 0x68, 0x06, 0x21, + 0xd0, 0x4c, 0xdd, 0x67, 0xe4, 0x93, 0xa8, 0xcf, 0xdf, 0x34, 0xc5, + 0x09, 0x6e, 0x4f, 0x93, 0x9e, 0x63, 0xbb, 0x53, 0x40, 0xd8, 0xa5, + 0xb7, 0x26, 0x67, 0x85, 0xa0, 0xad, 0xe2, 0x88, 0xa9, 0x64, 0x53, + 0x4b, 0xfd, 0xd0, 0x29, 0x7f, 0x54, 0xd0, 0x8e, 0x69, 0x8a, 0x6c, + 0x9a, 0xd6, 0x9d, 0x28, 0xda, 0xc6, 0xd3, 0xac, 0xca, 0x82, 0x19, + 0x55, 0xc2, 0x96, 0x59, 0xd7, 0x3d, 0x6b, 0x70, 0x31, 0x7d, 0xfe, + 0x5c, 0x4b, 0xd8, 0x06, 0xc8, 0xfd, 0x62, 0x8b, 0x87, 0x8d, 0x7f, + 0x28, 0x49, 0x42, 0x21, 0x00, 0xe5, 0xd9, 0xcc, 0x46, 0x4b, 0xaa, + 0x2b, 0x41, 0xe4, 0x17, 0x44, 0xfa, 0x4e, 0x73, 0xa2, 0xba, 0xa8, + 0xfe, 0x25, 0xd5, 0xef, 0x41, 0xdd, 0x8a, 0x42, 0xd9, 0x92, 0x02, + 0x59, 0xfc, 0xdd, 0xdf, 0x32, 0x0f, 0x66, 0x21, 0x51, 0x30, 0x66, + 0xb4, 0x80, 0xcc, 0x2f, 0x94, 0x8d, 0xb9, 0xaf, 0x08, 0x0a, 0xce, + 0xaf, 0xdd, 0x05, 0x80, 0x08, 0x88, 0x50, 0x57, 0xfe, 0x5c, 0xff, + 0x0b, 0x40, 0xd8, 0x8a, 0xc6, 0x48, 0x4d, 0xa9, 0x4e, 0x4d, 0xfc, + 0x4b, 0x49, 0x02, 0x61, 0xab, 0x58, 0xb6, 0x20, 0x3c, 0x8c, 0x14, + 0x02, 0x3d, 0xfa, 0x06, 0xf9, 0x62, 0x08, 0x25, 0x07, 0x52, 0xe4, + 0x92, 0x21, 0xa2, 0x75, 0x99, 0x35, 0x6f, 0x10, 0xb6, 0xa1, 0x86, + 0x5d, 0x23, 0x56, 0x0a, 0x48, 0x2c, 0xa6, 0x57, 0x00, 0x57, 0xb2, + 0x01, 0x8d, 0x07, 0x16, 0x23, 0xfe, 0x7e, 0x89, 0x37, 0x01, 0xf2, + 0xd5, 0x47, 0x5b, 0x8d, 0x69, 0xe2, 0x9f, 0xca, 0x82, 0x0c, 0x8f, + 0x93, 0x46, 0x4b, 0x17, 0x10, 0xff, 0xf2, 0xed, 0x52, 0xa1, 0x66, + 0xa2, 0xe0, 0x46, 0x55, 0xfb, 0x25, 0x57, 0xc3, 0xda, 0xf9, 0x87, + 0x64, 0x69, 0x62, 0x31, 0xa2, 0x51, 0x2d, 0xdd, 0xd1, 0xec, 0x3f, + 0x24, 0x46, 0xfc, 0x39, 0xd3, 0x7b, 0x2e, 0x34, 0xbb, 0x13, 0xb5, + 0x5f, 0x10, 0xf6, 0x13, 0xc6, 0x10, 0x7c, 0x5f, 0xa7, 0x28, 0xf3, + 0x7f, 0xc8, 0x2e, 0x70, 0x6f, 0x31, 0x5a, 0xbc, 0x43, 0x86, 0x96, + 0x0d, 0x68, 0x97, 0x98, 0x51, 0x0c, 0x84, 0x43, 0xe2, 0xcc, 0x11, + 0xcd, 0xdf, 0x6e, 0xd1, 0xbe, 0xff, 0x5c, 0x52, 0x05, 0x3b, 0x6e, + 0x11, 0x7b, 0x0d, 0x54, 0xa8, 0xb3, 0x19, 0xcd, 0x07, 0xc4, 0x0d, + 0xa0, 0x81, 0x91, 0x87, 0x6a, 0x27, 0x29, 0x9e, 0x36, 0x3d, 0x1f, + 0x1c, 0x32, 0x40, 0xda, 0x7b, 0x43, 0x2b, 0x8d, 0xff, 0x0a, 0xd4, + 0xf8, 0xaf, 0xb4, 0xb4, 0xde, 0xe2, 0x16, 0xb6, 0x76, 0x5a, 0x5b, + 0x03, 0xf2, 0xfb, 0x11, 0x5f, 0x14, 0xed, 0x18, 0x84, 0xed, 0xc2, + 0xa9, 0x06, 0x6d, 0x4b, 0x34, 0x1d, 0x31, 0x22, 0xf8, 0x4d, 0x3b, + 0x90, 0xc6, 0x4b, 0x69, 0xfe, 0xba, 0x7b, 0xd3, 0x41, 0x1b, 0x92, + 0x1e, 0xb7, 0x40, 0xf3, 0x23, 0xb9, 0xea, 0x6c, 0x56, 0xdc, 0x45, + 0xc7, 0x45, 0x2a, 0x3a, 0x36, 0x3f, 0xee, 0x47, 0xc7, 0xe5, 0xf1, + 0x26, 0x71, 0x0e, 0x97, 0xde, 0xbd, 0x6d, 0xc0, 0x45, 0x69, 0xef, + 0x0d, 0xad, 0xc4, 0xfe, 0x00, 0x5b, 0x90, 0x0c, 0xfd, 0x12, 0xec, + 0x77, 0x1e, 0x38, 0xbf, 0xba, 0x09, 0x6e, 0xcf, 0x22, 0xf9, 0x31, + 0x8e, 0x51, 0x1d, 0x8e, 0x41, 0x7b, 0xa3, 0x9f, 0x26, 0xab, 0x48, + 0x81, 0x89, 0x98, 0x11, 0x38, 0xeb, 0xb6, 0x34, 0x16, 0x51, 0x07, + 0xfe, 0x41, 0x9b, 0x19, 0xef, 0x05, 0x34, 0xa7, 0x41, 0x6c, 0x08, + 0x95, 0xe0, 0x60, 0x5c, 0x0f, 0xc2, 0xe1, 0x45, 0xad, 0xc8, 0x88, + 0x42, 0x6b, 0xf6, 0xcd, 0xe4, 0x2f, 0x5e, 0x26, 0xe1, 0x02, 0x3f, + 0x40, 0x93, 0x5b, 0x8e, 0x31, 0xba, 0x8d, 0x13, 0x6a, 0x04, 0xa1, + 0x6c, 0xa0, 0xb6, 0xda, 0x90, 0xb7, 0xb7, 0x20, 0x75, 0xb6, 0x69, + 0xf6, 0xa9, 0xc2, 0xc2, 0xf2, 0xe7, 0x9a, 0x6d, 0x95, 0x8c, 0x93, + 0x3a, 0xf0, 0xe7, 0x52, 0x6a, 0xc8, 0x51, 0x0c, 0xbc, 0x7c, 0x96, + 0x5c, 0x4c, 0xc9, 0xf2, 0x6f, 0x30, 0xdb, 0x29, 0x3d, 0xdc, 0x7a, + 0xf0, 0xe7, 0xc7, 0x38, 0x80, 0xa7, 0x48, 0x9d, 0x63, 0x61, 0x24, + 0x24, 0x43, 0x00, 0xc2, 0xb9, 0x8e, 0x54, 0x9a, 0xbc, 0xbd, 0x85, + 0xaa, 0x73, 0x5f, 0x8a, 0x7f, 0xad, 0x11, 0x0d, 0x7f, 0x6e, 0x92, + 0x64, 0x1f, 0xd4, 0x85, 0x7f, 0x54, 0x0e, 0xf8, 0x8e, 0x30, 0x92, + 0x1b, 0xa4, 0x54, 0x51, 0x9e, 0x31, 0x2c, 0xff, 0x7e, 0xbf, 0x00, + 0x69, 0x30, 0xa6, 0x1e, 0xfc, 0x51, 0xfd, 0x7d, 0x61, 0xf2, 0x29, + 0x41, 0xe9, 0x5a, 0xd2, 0x82, 0xe6, 0x51, 0x3c, 0x96, 0x47, 0xf4, + 0x7e, 0x52, 0x05, 0x36, 0x94, 0xb2, 0xa5, 0xc0, 0x88, 0x96, 0x7f, + 0x52, 0x3d, 0xf8, 0x07, 0x64, 0x82, 0x12, 0xd5, 0xf5, 0x3f, 0xee, + 0xe5, 0xa3, 0x74, 0x17, 0x91, 0xe1, 0xdf, 0x7a, 0x8b, 0xb2, 0x2a, + 0xb2, 0xee, 0xfc, 0xc5, 0xda, 0xcb, 0x7f, 0x4c, 0xa1, 0x81, 0x7d, + 0x83, 0x1e, 0x0f, 0xc8, 0x37, 0x6c, 0xdf, 0x44, 0xf1, 0x7b, 0xc5, + 0x29, 0x59, 0x0a, 0xac, 0x68, 0xf8, 0x07, 0x66, 0x48, 0x1c, 0xea, + 0xc2, 0x1f, 0xb5, 0x00, 0x65, 0xaa, 0x9f, 0x57, 0xa9, 0x9b, 0xee, + 0xd7, 0xd1, 0xfc, 0x83, 0x61, 0x63, 0x25, 0xaf, 0xac, 0xab, 0x33, + 0x7f, 0xb9, 0xf5, 0x82, 0x66, 0x8c, 0x54, 0x2f, 0xd3, 0x12, 0xb2, + 0xba, 0x12, 0x78, 0x04, 0xb0, 0xa5, 0xb5, 0xee, 0xed, 0xa9, 0xac, + 0x36, 0x7a, 0xf4, 0x47, 0xbf, 0x59, 0xfe, 0x8d, 0x5f, 0xbf, 0x0e, + 0x8a, 0x5f, 0x46, 0xff, 0xaa, 0x13, 0x7f, 0x34, 0x8a, 0xa0, 0x3c, + 0x80, 0x52, 0x0f, 0xe3, 0x90, 0x4a, 0xf1, 0xe7, 0x13, 0xec, 0x6a, + 0x19, 0xd4, 0x99, 0x3f, 0x2a, 0x5e, 0x3c, 0xcd, 0xdf, 0xd6, 0x46, + 0xf8, 0x3b, 0xa8, 0xbc, 0xe6, 0x16, 0x83, 0xa2, 0xcf, 0x0b, 0xa9, + 0x71, 0x0f, 0x5d, 0xe9, 0x00, 0x01, 0x4f, 0xea, 0x38, 0x1a, 0xe9, + 0xb4, 0x7f, 0xd2, 0xae, 0xa5, 0x75, 0xe2, 0x1f, 0xb0, 0x5e, 0x00, + 0x1b, 0xe4, 0xd7, 0x3f, 0xf9, 0x86, 0xb4, 0x4a, 0x55, 0x16, 0x8a, + 0x3f, 0xfe, 0x8e, 0xe5, 0x6f, 0xb0, 0xae, 0xfc, 0xb1, 0xf5, 0x8a, + 0x69, 0x23, 0x7f, 0x87, 0xbc, 0x21, 0xcc, 0xcf, 0x26, 0x58, 0x5a, + 0x95, 0xe6, 0x16, 0x66, 0x17, 0x70, 0xbe, 0x52, 0x8b, 0xeb, 0xe9, + 0x90, 0xeb, 0xc0, 0xbd, 0x56, 0x1b, 0x67, 0x8c, 0xe4, 0xcf, 0x87, + 0x0e, 0x87, 0xf6, 0x8f, 0x6b, 0xa5, 0xf8, 0x9a, 0xd5, 0x89, 0x3f, + 0x1a, 0xb7, 0x50, 0x82, 0xb3, 0x0c, 0x73, 0x31, 0xf6, 0x20, 0xc9, + 0x1f, 0x7f, 0xc7, 0xca, 0x3a, 0xd0, 0xba, 0xf2, 0x1f, 0x96, 0x2f, + 0x35, 0x98, 0xb8, 0xbf, 0x2f, 0x30, 0xd3, 0xdc, 0x28, 0xf6, 0x12, + 0x6a, 0x17, 0x3a, 0x1c, 0x04, 0xe0, 0x54, 0x0f, 0xfd, 0x1b, 0x94, + 0xa5, 0xe1, 0x8a, 0x2a, 0x70, 0x53, 0x0b, 0x00, 0xf9, 0x97, 0xa4, + 0xe0, 0x41, 0x81, 0x3e, 0x49, 0x0b, 0xb7, 0xd8, 0x05, 0xcf, 0x8f, + 0x4b, 0x24, 0x2b, 0xac, 0x6e, 0xfc, 0xdb, 0x9f, 0x56, 0x16, 0x29, + 0x70, 0xe9, 0x80, 0x19, 0xc5, 0x86, 0xfc, 0xcb, 0xdf, 0x94, 0x0c, + 0x13, 0xd4, 0x5b, 0x3f, 0xa8, 0x18, 0x78, 0x75, 0xe4, 0xdf, 0xf9, + 0xa8, 0x00, 0x0a, 0xe5, 0x42, 0x47, 0x11, 0x85, 0xd6, 0x50, 0xbe, + 0x82, 0x6d, 0xff, 0x76, 0x1f, 0x14, 0x8e, 0xe0, 0xf1, 0x02, 0x11, + 0x23, 0x03, 0x49, 0x91, 0x76, 0xdf, 0xe9, 0xcd, 0xff, 0x40, 0xfe, + 0xf7, 0xef, 0xe0, 0xd8, 0x43, 0xc5, 0xf0, 0xeb, 0xbd, 0x75, 0x64, + 0x4e, 0x3b, 0xd9, 0x90, 0xa2, 0xf9, 0x97, 0x1e, 0x22, 0x37, 0x11, + 0x7b, 0x49, 0xc9, 0x8f, 0x02, 0x46, 0xac, 0x96, 0x6e, 0xf6, 0x14, + 0x3b, 0xac, 0x01, 0xf9, 0x03, 0x69, 0x1f, 0xcc, 0xb0, 0x5d, 0x02, + 0xf8, 0x51, 0x75, 0x43, 0xad, 0x1b, 0x7f, 0xd3, 0x07, 0xd5, 0x40, + 0x59, 0x8a, 0xca, 0x99, 0xe6, 0xba, 0xc0, 0x8d, 0x81, 0x44, 0x1d, + 0x16, 0xf8, 0x6e, 0x05, 0xa8, 0x16, 0x7f, 0x5e, 0x78, 0xcf, 0x30, + 0x2e, 0xb8, 0x72, 0x31, 0x68, 0x05, 0x55, 0xa5, 0xb1, 0xbe, 0x96, + 0x74, 0xff, 0xcf, 0xbe, 0x54, 0x75, 0x44, 0xf0, 0xd6, 0xff, 0x21, + 0x6e, 0x7d, 0xf2, 0x3d, 0x70, 0x0c, 0x9b, 0x56, 0x3a, 0xc3, 0x1a, + 0x88, 0x3f, 0xb8, 0xf4, 0x97, 0x06, 0xe2, 0x68, 0x9d, 0x73, 0xae, + 0x0a, 0x5e, 0x27, 0xfe, 0x7c, 0xdc, 0x4d, 0xaa, 0xd2, 0x82, 0x35, + 0x88, 0xb0, 0x4b, 0x2d, 0x41, 0xd4, 0x34, 0x78, 0xa4, 0x6e, 0x0f, + 0x6a, 0x5a, 0xf5, 0xaa, 0x37, 0x52, 0xd0, 0x70, 0x81, 0xa6, 0x06, + 0x21, 0xfa, 0x7f, 0xcb, 0xf7, 0x14, 0x79, 0x4a, 0xb6, 0x26, 0xc8, + 0xaf, 0x11, 0xcd, 0xdf, 0x79, 0x82, 0x1c, 0x40, 0x20, 0x1c, 0x29, + 0xa3, 0x4e, 0x4a, 0x1b, 0x23, 0x23, 0xc7, 0xf8, 0x73, 0xf4, 0x2d, + 0x60, 0xfe, 0x02, 0x0a, 0x6f, 0x03, 0x6b, 0x6f, 0x81, 0xdc, 0xfa, + 0xb3, 0x4e, 0xfc, 0xdb, 0xc2, 0x5b, 0x28, 0x9e, 0x48, 0x6c, 0xa3, + 0x18, 0x9f, 0x0f, 0x5c, 0xaa, 0x15, 0x14, 0x75, 0x44, 0x00, 0xa7, + 0xe4, 0x6e, 0x4f, 0xf7, 0x7c, 0xdd, 0xea, 0x8d, 0x92, 0xfe, 0x79, + 0x40, 0xb0, 0x31, 0x56, 0x24, 0x51, 0xff, 0xe1, 0xea, 0x4f, 0x70, + 0xac, 0x0c, 0xd1, 0xe3, 0x7f, 0xbc, 0x07, 0x39, 0x80, 0x40, 0x54, + 0xf2, 0x68, 0xa3, 0x68, 0xbc, 0x30, 0x36, 0xf6, 0xaa, 0x66, 0x16, + 0x1b, 0xf2, 0x77, 0x3b, 0x05, 0x70, 0x29, 0x11, 0x55, 0xe3, 0x85, + 0x64, 0x33, 0x8b, 0xf8, 0x6f, 0xa7, 0x42, 0xdf, 0x2d, 0xbe, 0xcb, + 0xf2, 0x6f, 0x0c, 0xab, 0x75, 0x7a, 0x73, 0xc7, 0xc6, 0xa9, 0xc4, + 0x2e, 0x17, 0xc1, 0x6b, 0xdd, 0xc0, 0x29, 0x6f, 0xcd, 0xc6, 0xf1, + 0x53, 0x8b, 0x41, 0xf1, 0x1b, 0x12, 0x3c, 0xd5, 0xff, 0x25, 0x6e, + 0x75, 0x56, 0x99, 0xc6, 0x07, 0x93, 0x6e, 0xff, 0x82, 0xdf, 0x2c, + 0x52, 0x2a, 0xe9, 0x74, 0xb5, 0x98, 0xbd, 0xd4, 0x7f, 0xf0, 0xa9, + 0x3a, 0xc0, 0xc1, 0x36, 0xa8, 0xeb, 0x57, 0xa3, 0x09, 0xb1, 0x0e, + 0xf9, 0x97, 0xac, 0x3c, 0x01, 0x9b, 0xbd, 0x77, 0x0a, 0x01, 0x6d, + 0xbe, 0x22, 0xfe, 0x15, 0xd4, 0x72, 0xc3, 0xbb, 0x02, 0xc3, 0x1f, + 0xbd, 0xde, 0xac, 0xd1, 0x1a, 0x62, 0xf1, 0x08, 0xfb, 0xc4, 0x2f, + 0xc0, 0xef, 0x8d, 0x62, 0x20, 0x2d, 0xd2, 0x15, 0x7f, 0x82, 0x86, + 0x90, 0x1c, 0x72, 0xc3, 0x68, 0x61, 0x0c, 0xfa, 0x02, 0x98, 0x86, + 0x92, 0x69, 0xff, 0x1b, 0xcf, 0x73, 0xca, 0xc1, 0x1a, 0x82, 0xd5, + 0x62, 0xf6, 0xca, 0x3f, 0xf0, 0x20, 0xe6, 0x8d, 0x46, 0x3e, 0x0e, + 0x32, 0x93, 0xf8, 0xa8, 0xfd, 0x1b, 0x8e, 0xe2, 0x9f, 0x55, 0x0a, + 0xf2, 0x6d, 0xd7, 0x9d, 0x3f, 0xb2, 0x17, 0xae, 0xb3, 0xad, 0x7a, + 0x07, 0xb9, 0x1f, 0xc0, 0x0f, 0xca, 0xa3, 0xbf, 0x28, 0x5c, 0x3b, + 0x48, 0x09, 0x86, 0x0b, 0x83, 0xe0, 0x17, 0xc0, 0x3c, 0x52, 0xd6, + 0xfe, 0x6b, 0x77, 0x14, 0xd4, 0x68, 0x56, 0x61, 0x7b, 0xe5, 0xcf, + 0xa5, 0x7b, 0x70, 0x90, 0xaa, 0x6b, 0x40, 0x48, 0x67, 0xee, 0x16, + 0xb7, 0xff, 0x7c, 0x97, 0x43, 0xb0, 0x65, 0x29, 0x4a, 0xa0, 0x6a, + 0xe7, 0x3a, 0xbc, 0xff, 0xf1, 0xc7, 0x72, 0x73, 0x17, 0xb2, 0x9d, + 0xd6, 0x06, 0x13, 0x4f, 0xe4, 0x66, 0xa1, 0x1e, 0x57, 0x60, 0xda, + 0xf9, 0xdc, 0x6f, 0xe9, 0xb1, 0x85, 0x51, 0x27, 0x72, 0x0f, 0x89, + 0x13, 0x52, 0x53, 0x72, 0x73, 0xb7, 0xe9, 0x2e, 0xe8, 0xf2, 0x4f, + 0xab, 0x60, 0x1a, 0x4a, 0x96, 0x3f, 0x15, 0xa4, 0x5f, 0x16, 0xef, + 0xfc, 0xfb, 0xfd, 0x08, 0x0e, 0x3f, 0x89, 0x76, 0xc4, 0xbe, 0xc1, + 0x8e, 0x31, 0x48, 0xf6, 0x4f, 0x4f, 0x68, 0x9e, 0x5c, 0x8d, 0xa1, + 0x7e, 0xa9, 0x43, 0xfd, 0x87, 0xa2, 0x7a, 0x6b, 0x57, 0x06, 0x34, + 0x0c, 0x13, 0xdd, 0x1c, 0x1a, 0x34, 0xd5, 0x0c, 0x57, 0xfb, 0x87, + 0x85, 0x87, 0x37, 0x91, 0xb3, 0x86, 0xea, 0x8f, 0xf7, 0xb4, 0xda, + 0x06, 0xe8, 0x5d, 0x42, 0x58, 0xfe, 0x51, 0xd9, 0x40, 0xeb, 0xdb, + 0xef, 0x9d, 0xbf, 0x69, 0x15, 0x28, 0x1a, 0x88, 0x46, 0x3e, 0x76, + 0xb1, 0x98, 0xb2, 0xfd, 0x87, 0xfa, 0xbd, 0xfb, 0x35, 0xef, 0xbf, + 0x99, 0xd2, 0xf5, 0xb6, 0x08, 0xe7, 0x8f, 0x08, 0x7a, 0x50, 0x84, + 0x4c, 0xf8, 0x05, 0x50, 0x23, 0x09, 0x0c, 0x7f, 0x64, 0x52, 0xdc, + 0xd0, 0x2c, 0x48, 0xf1, 0xce, 0x9f, 0x1b, 0xe3, 0xa9, 0x9a, 0x0a, + 0xed, 0x40, 0xed, 0x73, 0x93, 0xf9, 0x9b, 0x92, 0xed, 0x72, 0x88, + 0x28, 0x49, 0xfe, 0x7d, 0xfc, 0x43, 0xd7, 0xd1, 0x73, 0x3f, 0xb7, + 0x01, 0xf0, 0x2c, 0x57, 0xad, 0x34, 0x9a, 0x7f, 0x48, 0x9a, 0x13, + 0xdc, 0x5f, 0xa3, 0x31, 0x24, 0x6b, 0xe1, 0xdf, 0x26, 0x0f, 0x6c, + 0x9e, 0x5e, 0x46, 0xb8, 0x1c, 0xc9, 0xa2, 0xd8, 0xff, 0x68, 0x43, + 0x39, 0x75, 0xfe, 0x8f, 0xab, 0x13, 0xff, 0x80, 0xb0, 0x30, 0xdd, + 0xf9, 0x98, 0x00, 0xbd, 0x0d, 0x1d, 0xf1, 0x66, 0xdc, 0xa1, 0x7a, + 0x33, 0x08, 0xe1, 0x9a, 0xe8, 0x98, 0xd2, 0x4e, 0x48, 0xa2, 0x10, + 0xfc, 0x83, 0xf0, 0xf0, 0xaf, 0xe7, 0x90, 0xf8, 0x76, 0xb4, 0x48, + 0x55, 0xe7, 0x3f, 0x6a, 0xe1, 0xef, 0x9f, 0x21, 0x9c, 0xfd, 0x9b, + 0x20, 0x64, 0x68, 0xba, 0xa0, 0x6a, 0xff, 0x07, 0x2d, 0x7f, 0x28, + 0x22, 0x22, 0x48, 0xd5, 0x81, 0xff, 0x78, 0x9b, 0x4d, 0x77, 0x9e, + 0x0e, 0xa6, 0x2f, 0xa1, 0xd2, 0xa3, 0x32, 0x6d, 0xfb, 0x90, 0x33, + 0x41, 0xd7, 0xad, 0x4a, 0x48, 0x6d, 0x42, 0x9a, 0x2e, 0xd1, 0x4e, + 0x71, 0x13, 0xf3, 0x3f, 0x84, 0xfd, 0xb7, 0x19, 0x0d, 0xff, 0x97, + 0x6d, 0xed, 0xa2, 0xfc, 0xe0, 0x65, 0xfc, 0x9b, 0x8e, 0x28, 0x35, + 0xba, 0xa8, 0xd2, 0x49, 0x06, 0xa3, 0xd2, 0xf2, 0x47, 0xdb, 0x7c, + 0x03, 0xe7, 0x4a, 0xe5, 0x01, 0xd4, 0x81, 0x3f, 0x6a, 0xc4, 0xf4, + 0x1e, 0x3a, 0x5b, 0x18, 0xd0, 0x0e, 0x12, 0x6c, 0xad, 0xf4, 0xae, + 0x80, 0x05, 0x3b, 0xc5, 0x30, 0x62, 0x34, 0xff, 0x23, 0x94, 0x48, + 0xfb, 0x3f, 0x6a, 0xf9, 0x1b, 0xcf, 0x20, 0x72, 0x38, 0x4a, 0x2b, + 0x20, 0xa3, 0x34, 0xeb, 0xf0, 0x47, 0xa1, 0x34, 0x81, 0xeb, 0x1d, + 0xd9, 0x9a, 0x7b, 0x78, 0xfc, 0x91, 0x5f, 0x4d, 0xa1, 0xec, 0x72, + 0x5b, 0xff, 0x1a, 0x84, 0x9c, 0xff, 0xa3, 0xa6, 0xff, 0xd0, 0x0f, + 0xb2, 0xfd, 0x37, 0x87, 0x8d, 0x0d, 0xe1, 0xa0, 0x23, 0xcb, 0xf2, + 0x29, 0x45, 0x8e, 0xa2, 0x14, 0xed, 0xc7, 0x4a, 0x8d, 0x7f, 0x44, + 0x6c, 0x70, 0x81, 0x9b, 0xf2, 0x26, 0xdf, 0x0f, 0x8f, 0x3f, 0xec, + 0x58, 0x7a, 0x3e, 0x90, 0x97, 0xdc, 0xd4, 0x9f, 0x3f, 0x39, 0xff, + 0x4b, 0x55, 0x37, 0x26, 0xc2, 0xc7, 0xb0, 0x1d, 0x1b, 0x1b, 0x82, + 0x0a, 0xff, 0x00, 0xa5, 0xd5, 0x08, 0xc6, 0x37, 0x42, 0x14, 0x7a, + 0xfc, 0x2f, 0x32, 0xa3, 0x5a, 0xee, 0x0d, 0x3f, 0x44, 0xfe, 0x13, + 0x9c, 0xb2, 0xf7, 0x99, 0x81, 0x1b, 0x9b, 0xde, 0xfe, 0xcf, 0xff, + 0x26, 0x61, 0xc6, 0x7f, 0x9b, 0x2f, 0x53, 0x1e, 0xc0, 0x43, 0xe3, + 0xff, 0xa4, 0x15, 0xd4, 0x48, 0xab, 0x0f, 0xf4, 0xf9, 0xb3, 0xfe, + 0x0f, 0xab, 0xa4, 0xf4, 0xc9, 0x16, 0xcb, 0x14, 0x83, 0xf5, 0x90, + 0x0f, 0x4d, 0xd8, 0xf1, 0xff, 0xe6, 0x59, 0x35, 0x40, 0x5c, 0x8d, + 0xf1, 0xb0, 0xf8, 0x9b, 0xde, 0xae, 0x52, 0x06, 0x75, 0xf4, 0xf9, + 0xb3, 0x21, 0xb6, 0xe5, 0xad, 0x26, 0xac, 0x9a, 0xb0, 0x70, 0xd0, + 0x52, 0xa2, 0x5c, 0x43, 0xb1, 0xe5, 0x54, 0xcb, 0x26, 0xe5, 0xde, + 0xa5, 0x67, 0x86, 0x35, 0x83, 0x8a, 0xd1, 0xde, 0xd1, 0x62, 0xb5, + 0xa6, 0xa3, 0x41, 0xb0, 0xe0, 0x74, 0x72, 0x10, 0x09, 0x49, 0x17, + 0xa8, 0x4b, 0x79, 0xc0, 0xd5, 0x89, 0x7f, 0x5c, 0xbe, 0x3a, 0xac, + 0x6d, 0xc8, 0xdf, 0x79, 0x5c, 0xeb, 0xde, 0xa5, 0xc3, 0x1f, 0xb6, + 0x94, 0xd4, 0x16, 0x4c, 0x91, 0x6b, 0xd0, 0xa6, 0x4c, 0x4a, 0x8b, + 0xfa, 0x92, 0x39, 0x55, 0xd9, 0x2e, 0x39, 0xde, 0xfc, 0xf6, 0xa0, + 0x47, 0xa0, 0x29, 0x42, 0x6c, 0xa1, 0x8c, 0xda, 0x19, 0xc5, 0xfd, + 0x26, 0x46, 0xb4, 0x1d, 0xfc, 0x43, 0x19, 0x27, 0x4d, 0xa4, 0x84, + 0x53, 0xb4, 0x9b, 0x50, 0x6b, 0xac, 0x97, 0xba, 0xf0, 0x0f, 0xb1, + 0x12, 0xd3, 0x1a, 0x86, 0xfc, 0x8f, 0x77, 0xd5, 0xf1, 0xc5, 0xd0, + 0xf2, 0x0f, 0xa7, 0x17, 0x4a, 0x9b, 0xe6, 0x20, 0x3f, 0x7b, 0xf5, + 0x8a, 0x44, 0x68, 0x35, 0xd8, 0x8d, 0xc4, 0xc3, 0x10, 0xe4, 0xd2, + 0xea, 0x0e, 0x9f, 0xda, 0x6c, 0x29, 0x44, 0x87, 0xd9, 0xac, 0x73, + 0xeb, 0xf5, 0x92, 0x3a, 0xf0, 0x47, 0x3b, 0x47, 0xab, 0xc3, 0x2a, + 0x86, 0xfc, 0x75, 0x63, 0xf5, 0xd6, 0xca, 0xbf, 0xfb, 0x05, 0xf0, + 0xaf, 0x7f, 0xe9, 0xf2, 0x6f, 0xb5, 0x55, 0xea, 0x84, 0x93, 0xfc, + 0x93, 0x2a, 0x00, 0x38, 0x2b, 0x77, 0xba, 0xff, 0x4d, 0xfc, 0xbb, + 0x65, 0x83, 0x1a, 0x75, 0xeb, 0xb6, 0x07, 0xe2, 0xff, 0xe8, 0xe4, + 0x54, 0x79, 0xa4, 0x88, 0xe6, 0x6f, 0xfa, 0xd0, 0x03, 0xb2, 0x2f, + 0xeb, 0xf1, 0xf7, 0x7f, 0xa7, 0x4c, 0x1a, 0xcd, 0x20, 0xf8, 0x07, + 0x67, 0x81, 0x7f, 0x7a, 0xca, 0xe5, 0xc0, 0xa1, 0x0a, 0x7f, 0x79, + 0x47, 0x95, 0x90, 0x01, 0x38, 0xce, 0x83, 0x7f, 0x57, 0xc5, 0x21, + 0x02, 0xfd, 0x62, 0xe0, 0xef, 0xa0, 0x5c, 0xe3, 0xb2, 0x3c, 0xe8, + 0x16, 0x44, 0xa7, 0xcb, 0x9b, 0xf3, 0xae, 0xad, 0x01, 0x87, 0xd5, + 0x11, 0xc7, 0x07, 0xe2, 0x6f, 0xda, 0x52, 0x2e, 0xe7, 0xa1, 0xf9, + 0x77, 0xb7, 0x83, 0xb2, 0x74, 0x9b, 0x1e, 0xff, 0x21, 0xd7, 0xe5, + 0x41, 0x38, 0x82, 0x7f, 0xec, 0x35, 0xf7, 0xb7, 0x17, 0x14, 0x17, + 0x4e, 0x85, 0xbf, 0xbc, 0xa3, 0xca, 0x80, 0x8b, 0xd8, 0x64, 0x0a, + 0xdb, 0xaa, 0x38, 0x44, 0xa0, 0x5f, 0x50, 0x5e, 0x54, 0x13, 0xf8, + 0x73, 0xfe, 0xad, 0xfa, 0xb2, 0x5b, 0xe5, 0xc0, 0x6b, 0xdc, 0x93, + 0x07, 0xdd, 0x3f, 0x9a, 0xd6, 0x2b, 0x90, 0x48, 0x97, 0xf8, 0x0f, + 0xb6, 0x83, 0xdb, 0xc4, 0xf0, 0xe8, 0x83, 0xbd, 0xff, 0x33, 0xaa, + 0x57, 0x37, 0xd2, 0xe1, 0xdf, 0x68, 0xe9, 0x7d, 0xf0, 0xdd, 0x00, + 0x3d, 0xfe, 0x4f, 0x59, 0x81, 0x47, 0x9a, 0x6d, 0x23, 0xf8, 0xa7, + 0xd4, 0x94, 0xbe, 0xba, 0x41, 0x76, 0xfe, 0x57, 0xf9, 0xcb, 0x3b, + 0xaa, 0xa0, 0x1d, 0xc5, 0xc2, 0x28, 0x08, 0xf4, 0x0b, 0xba, 0x36, + 0x6a, 0x09, 0x7a, 0x36, 0x5f, 0xb8, 0xf7, 0xf2, 0x8d, 0xcb, 0x5b, + 0x26, 0x92, 0x5e, 0x0c, 0x94, 0xd1, 0xed, 0xc9, 0x5b, 0xd9, 0x41, + 0x7d, 0xb7, 0xae, 0x7f, 0x8e, 0x43, 0x6d, 0x7d, 0x0f, 0xdf, 0xd0, + 0xbe, 0x6a, 0x9d, 0x09, 0x31, 0xaa, 0x0e, 0x68, 0x22, 0x71, 0xd5, + 0xc6, 0x3f, 0xa6, 0xe0, 0x58, 0x7b, 0x1d, 0xfe, 0x7d, 0x2f, 0x81, + 0xea, 0xb4, 0x08, 0x9a, 0x7f, 0x05, 0xea, 0xc2, 0x07, 0x2e, 0xae, + 0x06, 0x17, 0x7a, 0x28, 0x1c, 0xe4, 0x2d, 0xd4, 0xb7, 0x81, 0x9c, + 0xee, 0x33, 0x81, 0xbc, 0x59, 0x57, 0x3d, 0xf8, 0xa3, 0xbf, 0xab, + 0x3e, 0x17, 0x03, 0x83, 0xdd, 0x5e, 0x4b, 0x07, 0x0a, 0x95, 0xcb, + 0x3f, 0xbb, 0xc4, 0x03, 0x3c, 0xa7, 0x86, 0x2a, 0xd7, 0x56, 0xa5, + 0x3a, 0xcf, 0xa2, 0x3c, 0x01, 0x26, 0xe4, 0x86, 0x74, 0x07, 0xb5, + 0xf1, 0x6f, 0xb6, 0x5b, 0x5a, 0xc6, 0x40, 0xf1, 0x47, 0xc1, 0xa7, + 0xbe, 0xef, 0x18, 0x46, 0xf3, 0x47, 0x21, 0xba, 0xf8, 0x31, 0x37, + 0x40, 0xa9, 0x3c, 0x80, 0xa4, 0xf2, 0x1f, 0xf2, 0x2b, 0xd8, 0x18, + 0xd0, 0xfd, 0x37, 0x69, 0xf1, 0x53, 0x7d, 0xf9, 0x57, 0x95, 0xef, + 0x5b, 0x92, 0xba, 0x26, 0xa7, 0x06, 0x78, 0x32, 0x54, 0xa7, 0x28, + 0xe2, 0xfb, 0x8f, 0x4a, 0x4c, 0x3f, 0xef, 0x16, 0xa4, 0x8d, 0x12, + 0x88, 0xc9, 0x88, 0xec, 0xa2, 0x1a, 0xe0, 0x56, 0x62, 0x0e, 0x43, + 0x0c, 0xc2, 0x8d, 0x5f, 0xee, 0xbd, 0xd4, 0xc6, 0xbf, 0xcb, 0x56, + 0xd9, 0x65, 0x81, 0xe4, 0xdf, 0x2d, 0x07, 0xb8, 0x52, 0xfd, 0x58, + 0xfe, 0xa0, 0x68, 0x5a, 0xd7, 0x7d, 0xc4, 0x6e, 0x16, 0x0a, 0x7f, + 0x7e, 0x81, 0xbb, 0x22, 0x89, 0x0b, 0xb2, 0xca, 0x5e, 0xfd, 0xf5, + 0xe4, 0xef, 0x5c, 0xf9, 0xa4, 0x1f, 0x17, 0xd0, 0x33, 0xd3, 0x45, + 0x6e, 0x2d, 0x48, 0xd5, 0xff, 0x7c, 0xf7, 0x4c, 0x79, 0x7f, 0x67, + 0x62, 0x32, 0xa2, 0xdd, 0xc0, 0x94, 0x6d, 0xc5, 0xa0, 0xd8, 0x1c, + 0x2c, 0xf3, 0x27, 0x96, 0x71, 0xc8, 0xf6, 0x45, 0x6d, 0xfc, 0x33, + 0xca, 0xe4, 0xdf, 0x89, 0x9b, 0x43, 0xab, 0x13, 0xf7, 0xb6, 0xe6, + 0x34, 0xfc, 0x41, 0xe1, 0xb7, 0x95, 0xe0, 0xb8, 0x32, 0x7c, 0xa6, + 0xf0, 0x8f, 0x38, 0x80, 0x07, 0x9c, 0x67, 0x57, 0x88, 0xa1, 0x86, + 0xea, 0xcb, 0x7f, 0xbd, 0xd8, 0x26, 0x44, 0x58, 0x5c, 0x52, 0xac, + 0x26, 0x0d, 0x7f, 0x3c, 0xff, 0xef, 0x36, 0xfb, 0x73, 0xac, 0xfd, + 0x1f, 0xf2, 0x66, 0x91, 0x3c, 0x47, 0xf4, 0x60, 0xf5, 0x9f, 0x6a, + 0x07, 0x10, 0x37, 0x87, 0x8a, 0x7f, 0x34, 0xa7, 0xe1, 0xef, 0xac, + 0x14, 0x3c, 0x20, 0x5f, 0x6d, 0x23, 0x14, 0xfe, 0x89, 0x25, 0xf8, + 0x25, 0xea, 0x25, 0xfb, 0xc3, 0xd5, 0x93, 0xbf, 0xec, 0xdb, 0xd7, + 0x7a, 0x2f, 0x70, 0x2b, 0x91, 0xb2, 0x19, 0xfe, 0xc8, 0xb3, 0x14, + 0xd7, 0x54, 0x4c, 0xff, 0xaf, 0xf1, 0xbc, 0x32, 0x70, 0x2c, 0xea, + 0xc1, 0xf9, 0x67, 0x28, 0x9d, 0x79, 0xf5, 0xe6, 0x60, 0xf1, 0xe3, + 0xad, 0x65, 0x58, 0xfe, 0x59, 0x1b, 0x2a, 0x81, 0xc7, 0xf2, 0xa8, + 0x86, 0xbf, 0xff, 0x4a, 0x01, 0x07, 0x84, 0x0d, 0x5a, 0x2f, 0x88, + 0x0e, 0x00, 0xf5, 0xe4, 0xaf, 0x60, 0x24, 0x11, 0x63, 0x73, 0xac, + 0xfd, 0x83, 0x76, 0x91, 0x18, 0xa1, 0xe5, 0x8f, 0x56, 0x92, 0x8a, + 0x2e, 0x97, 0x0f, 0xc6, 0xbf, 0x8b, 0x12, 0x81, 0x4a, 0xbd, 0x39, + 0x58, 0xfc, 0x78, 0x34, 0x8b, 0xe5, 0x6f, 0x8e, 0xd8, 0x50, 0x29, + 0x10, 0x9b, 0x55, 0xc8, 0xfc, 0xdb, 0x1f, 0x93, 0xca, 0x3d, 0xb1, + 0x44, 0x9c, 0x02, 0x7c, 0x50, 0xfe, 0xbd, 0x6e, 0xa9, 0x13, 0x37, + 0x2c, 0x7f, 0xf9, 0x66, 0x58, 0xfe, 0x68, 0x06, 0xde, 0xf2, 0xe0, + 0xfc, 0x55, 0x51, 0x6e, 0x0e, 0x45, 0x96, 0xda, 0xd6, 0x5c, 0x8f, + 0x3f, 0x17, 0xb9, 0xc3, 0x03, 0xd4, 0xcd, 0x2a, 0x64, 0xfe, 0x6f, + 0x38, 0xa5, 0x89, 0xff, 0xf6, 0xa7, 0xc5, 0xd0, 0xd9, 0x0f, 0xca, + 0x9f, 0x0c, 0xf3, 0xc2, 0xf2, 0x8f, 0xca, 0xd1, 0xe7, 0x6f, 0x5a, + 0xf5, 0xb0, 0xf9, 0x77, 0xcc, 0x96, 0x2e, 0xa4, 0xe5, 0x2f, 0x3e, + 0x80, 0x71, 0x74, 0xfb, 0x17, 0xb0, 0x5b, 0x5e, 0x17, 0x0b, 0xcb, + 0x02, 0xbb, 0x00, 0x28, 0xfc, 0x61, 0x02, 0x8e, 0x20, 0xf1, 0x10, + 0xf8, 0x8f, 0x2f, 0x83, 0x26, 0x86, 0x0e, 0xff, 0xb0, 0x7d, 0x52, + 0x2c, 0x8a, 0x87, 0xc5, 0x1f, 0x79, 0x31, 0x8a, 0x2b, 0x9a, 0x75, + 0xf8, 0x73, 0x5d, 0xbe, 0xf2, 0x48, 0x63, 0x18, 0x0a, 0xff, 0xa8, + 0x5f, 0x94, 0x80, 0xe9, 0x13, 0x9c, 0x78, 0xfd, 0xaf, 0xda, 0xff, + 0x91, 0x76, 0xd0, 0x52, 0xf9, 0xcb, 0x4b, 0x6a, 0xeb, 0xcb, 0x1f, + 0x6d, 0x77, 0xb5, 0x3e, 0x48, 0xcb, 0x1f, 0x8d, 0x7f, 0x5e, 0x19, + 0xf2, 0x30, 0xf9, 0x47, 0x1e, 0x90, 0xc7, 0x14, 0xf4, 0xf8, 0xf3, + 0x5d, 0x76, 0x78, 0x64, 0x53, 0x44, 0xe2, 0xff, 0x8a, 0x47, 0x99, + 0xf8, 0x87, 0x95, 0x11, 0xaa, 0xa4, 0xbd, 0xf0, 0x97, 0xd7, 0x54, + 0x1a, 0x7d, 0xff, 0x4a, 0x98, 0x1f, 0x9a, 0x7f, 0xc8, 0xac, 0x62, + 0xa9, 0xab, 0x4b, 0xf3, 0xe7, 0x63, 0x4e, 0xc0, 0xce, 0x68, 0xe0, + 0x43, 0xe4, 0xcf, 0xc3, 0x7e, 0xbf, 0xb4, 0xac, 0x41, 0x8f, 0x3f, + 0x7c, 0x3e, 0x36, 0x41, 0x7a, 0x00, 0x22, 0xff, 0x16, 0xbb, 0x54, + 0xb7, 0x2f, 0x3f, 0xd8, 0x12, 0xcc, 0xf0, 0xca, 0x5f, 0x5e, 0xf8, + 0x87, 0x42, 0x2b, 0xe9, 0xd5, 0xff, 0x4a, 0x68, 0x49, 0x82, 0x7f, + 0xa3, 0xc8, 0x21, 0x9b, 0x8a, 0xe5, 0xbd, 0x05, 0xc9, 0xfe, 0x7f, + 0xf3, 0x3e, 0x29, 0x67, 0x04, 0xf7, 0x1e, 0x71, 0x00, 0x8c, 0xb5, + 0x7f, 0xc4, 0x91, 0x96, 0x7a, 0xf3, 0x8f, 0xbc, 0xa0, 0x0c, 0x29, + 0xe9, 0xf3, 0xe7, 0x06, 0x64, 0xd9, 0x0e, 0x2c, 0x08, 0x51, 0xf8, + 0x27, 0x90, 0xab, 0xf7, 0xc5, 0xb8, 0x08, 0xde, 0xf8, 0x8b, 0x33, + 0xe1, 0xfc, 0x38, 0x69, 0xf7, 0x16, 0x92, 0x7f, 0xc8, 0x17, 0x84, + 0x0b, 0x09, 0xbc, 0x86, 0xbc, 0x49, 0xcb, 0xc6, 0x13, 0xbf, 0x7a, + 0x94, 0x38, 0xa6, 0xc4, 0x64, 0x8c, 0xe5, 0xeb, 0xab, 0x55, 0xa0, + 0xec, 0x53, 0x69, 0x81, 0x2f, 0x6b, 0xff, 0x8a, 0xa3, 0x59, 0xf5, + 0xe5, 0x6f, 0x9a, 0xe3, 0x51, 0x56, 0xb5, 0x18, 0xf0, 0x57, 0x46, + 0xb1, 0x44, 0xfe, 0x6b, 0xc8, 0xed, 0x3d, 0xa0, 0x25, 0x78, 0x2b, + 0xc1, 0x1b, 0x7f, 0xa1, 0xe6, 0xc4, 0xe4, 0xa8, 0xb0, 0x76, 0xe3, + 0x4e, 0x48, 0xbb, 0xb7, 0x20, 0xfe, 0x2b, 0x44, 0xfb, 0x0f, 0xb9, + 0xb7, 0xa8, 0xbb, 0xdd, 0x52, 0xfd, 0x1c, 0xc1, 0xa1, 0xec, 0xbd, + 0x49, 0xf7, 0x0b, 0x1d, 0x07, 0x92, 0x89, 0xf1, 0x2f, 0x5a, 0xf0, + 0xd7, 0x5c, 0x5f, 0xfe, 0xdd, 0xd5, 0xe2, 0x37, 0xe2, 0xaf, 0x08, + 0xe6, 0xdf, 0xe2, 0x2c, 0x11, 0xff, 0x05, 0xaf, 0x80, 0x58, 0xe3, + 0x8d, 0xff, 0x5d, 0xeb, 0xd5, 0x3b, 0x39, 0x78, 0x1b, 0xf1, 0x42, + 0xb9, 0x8d, 0x01, 0x4e, 0x4b, 0x54, 0x00, 0xe7, 0xd7, 0x66, 0x9e, + 0x9d, 0xf4, 0xf7, 0x99, 0x42, 0x0c, 0x5a, 0x7f, 0xb3, 0x62, 0x8c, + 0xbc, 0x8b, 0x26, 0x9d, 0xbe, 0x54, 0x4d, 0xe7, 0xfa, 0xd8, 0x98, + 0xa1, 0x6e, 0xbc, 0xd0, 0xbd, 0x9e, 0xfc, 0x1b, 0x2d, 0xf5, 0x80, + 0xef, 0xe4, 0x4e, 0x58, 0x9d, 0xf8, 0xbf, 0x78, 0x0f, 0x90, 0x0b, + 0xef, 0x60, 0x4f, 0x30, 0xbb, 0x99, 0x17, 0xfe, 0x8e, 0x31, 0x63, + 0x8e, 0xe2, 0xde, 0xee, 0xf5, 0xd4, 0x20, 0x99, 0x7f, 0x55, 0x75, + 0xf6, 0x9a, 0xd4, 0x25, 0x07, 0x9d, 0x00, 0x9c, 0x53, 0x5d, 0x3a, + 0xc8, 0x5d, 0xcd, 0x49, 0x37, 0x10, 0xa3, 0x74, 0xec, 0xff, 0x40, + 0x09, 0x1e, 0xcd, 0xae, 0x27, 0xff, 0xc1, 0x05, 0x6a, 0x34, 0x83, + 0x3a, 0xf1, 0x7f, 0x69, 0x35, 0xa8, 0x20, 0x06, 0x61, 0xd0, 0x48, + 0xc0, 0xbd, 0x17, 0xbd, 0xf1, 0x8f, 0xe3, 0xc3, 0x87, 0xce, 0xb3, + 0x58, 0x66, 0x4b, 0x41, 0xfd, 0x71, 0xff, 0x7f, 0xc3, 0x6d, 0xf1, + 0x8d, 0x3d, 0xd7, 0xf3, 0xa1, 0x47, 0xab, 0xae, 0x8d, 0x7f, 0x4f, + 0x65, 0x32, 0x0b, 0xdd, 0x5c, 0x02, 0xee, 0xf7, 0x93, 0xfc, 0x6a, + 0xe3, 0x3f, 0xe3, 0x00, 0xc8, 0xa3, 0xe6, 0x94, 0x52, 0xaa, 0xc1, + 0xc2, 0xa5, 0xde, 0xf8, 0x6b, 0xae, 0x01, 0x12, 0x9a, 0x8c, 0x5e, + 0x73, 0xf6, 0xc6, 0x8d, 0xb3, 0x1f, 0x19, 0x2c, 0xd2, 0xf9, 0x23, + 0x52, 0xbf, 0xfe, 0xdf, 0xbb, 0x79, 0xa0, 0x7a, 0x1a, 0x65, 0xdf, + 0xd7, 0xc6, 0x7f, 0xed, 0x35, 0x26, 0x7a, 0x57, 0x9f, 0x3c, 0xb0, + 0x2b, 0x53, 0xd1, 0x4d, 0xbd, 0x71, 0x1e, 0x8d, 0x43, 0xd5, 0xc2, + 0x9f, 0xc3, 0x6b, 0x56, 0x74, 0x5c, 0xf6, 0xd0, 0xaa, 0x48, 0xef, + 0x8e, 0xdd, 0x78, 0xa1, 0xa5, 0x97, 0x89, 0xac, 0x7a, 0xf1, 0xbf, + 0x7b, 0xac, 0x42, 0x09, 0x52, 0xc0, 0xd5, 0x89, 0x7f, 0xc9, 0x89, + 0x9a, 0x5b, 0x63, 0xa8, 0xc4, 0xe0, 0x4f, 0xc0, 0xd5, 0x53, 0x8a, + 0x6e, 0xa4, 0xb8, 0xaa, 0xad, 0x76, 0xfe, 0xba, 0xd2, 0x36, 0x65, + 0xa7, 0x6d, 0xdf, 0xca, 0xc4, 0x56, 0x28, 0x78, 0x77, 0x0c, 0x3c, + 0xef, 0x69, 0x36, 0x53, 0x5b, 0x0f, 0x35, 0x8a, 0x9a, 0x6a, 0xd9, + 0x67, 0x43, 0x61, 0x1e, 0xe2, 0xc3, 0xe4, 0x2f, 0x87, 0x9c, 0x94, + 0xe1, 0x94, 0xb0, 0xc7, 0x1a, 0x91, 0xfb, 0xbd, 0x54, 0xff, 0x17, + 0x76, 0xef, 0x5d, 0x84, 0xf7, 0x5b, 0x1d, 0xf8, 0xbb, 0xcb, 0x35, + 0x31, 0xc8, 0x13, 0x6e, 0xd5, 0x94, 0xeb, 0xcc, 0xee, 0xd5, 0x9f, + 0x7f, 0xe3, 0xf8, 0xc3, 0x55, 0xd8, 0x2b, 0xc1, 0x3a, 0x60, 0xbd, + 0x78, 0x41, 0x2a, 0x82, 0x16, 0xc7, 0x47, 0x2d, 0xcf, 0xa9, 0x92, + 0xdb, 0x41, 0xab, 0x1c, 0x7b, 0x80, 0x89, 0x77, 0x1b, 0xa4, 0xb7, + 0xd8, 0x96, 0x53, 0xfb, 0xbd, 0x54, 0xff, 0x17, 0x82, 0xed, 0x6d, + 0x5d, 0x2f, 0xfe, 0x40, 0x8c, 0xc1, 0x4c, 0x0a, 0xb4, 0x07, 0xc1, + 0xc3, 0xe0, 0xcf, 0x8f, 0xb3, 0x03, 0x14, 0xff, 0xea, 0xfd, 0x3d, + 0x37, 0x2f, 0xfd, 0xa4, 0xc3, 0xbf, 0xf1, 0xb8, 0x93, 0x35, 0xf0, + 0xe1, 0xa0, 0xb5, 0xcd, 0x39, 0xf0, 0x81, 0x17, 0xa7, 0x07, 0xe8, + 0xf1, 0xaf, 0xbb, 0x60, 0x4f, 0x99, 0xdd, 0x64, 0x20, 0xae, 0xc7, + 0x97, 0x10, 0xf3, 0x7f, 0x19, 0xec, 0x8a, 0x45, 0x29, 0x12, 0xad, + 0x36, 0x70, 0xcd, 0x78, 0x75, 0x1f, 0x10, 0xd9, 0x37, 0xe9, 0x41, + 0xf8, 0x47, 0x9d, 0x04, 0x9e, 0xe3, 0x13, 0x43, 0x79, 0x3e, 0x74, + 0xa2, 0x5d, 0x7a, 0xa0, 0x23, 0x6d, 0xea, 0x14, 0x25, 0x72, 0x29, + 0x02, 0x85, 0xeb, 0x12, 0xdb, 0xa1, 0x01, 0xd2, 0xc9, 0xeb, 0x0a, + 0x05, 0x29, 0x56, 0xd5, 0x03, 0xf3, 0xc7, 0x9e, 0x32, 0xd4, 0x1c, + 0x24, 0xb5, 0x26, 0xbb, 0x0b, 0xbb, 0x62, 0x55, 0x9c, 0xc3, 0x89, + 0x63, 0x5c, 0x21, 0xa0, 0x34, 0x57, 0xf7, 0x81, 0x81, 0x4f, 0xd0, + 0xa6, 0xdf, 0xff, 0x95, 0xc5, 0x90, 0x3f, 0x1a, 0x85, 0xf8, 0x51, + 0x74, 0xf7, 0x37, 0xcd, 0xba, 0x2d, 0xf2, 0x0f, 0x50, 0x83, 0x3c, + 0x21, 0x97, 0x32, 0xcf, 0xa9, 0x78, 0x79, 0xc6, 0xb1, 0xe1, 0xcb, + 0xa7, 0x96, 0x50, 0x9d, 0x52, 0x56, 0x9e, 0x88, 0x8e, 0xee, 0xf4, + 0xef, 0xdf, 0x09, 0xc1, 0x78, 0xfc, 0x83, 0xd4, 0xd0, 0xe5, 0x0f, + 0xfb, 0xf5, 0x40, 0x5e, 0xae, 0xd0, 0x6c, 0xb7, 0xe6, 0xe3, 0xeb, + 0x70, 0x8c, 0xde, 0xff, 0xc4, 0xd4, 0xef, 0x79, 0xe5, 0x82, 0x1a, + 0xfe, 0x21, 0xb1, 0xe9, 0xdf, 0xe0, 0xf8, 0x60, 0x91, 0xc4, 0x6a, + 0x4d, 0x3e, 0x72, 0xd4, 0x62, 0x8b, 0xc5, 0x32, 0x73, 0x38, 0xbb, + 0x93, 0xd8, 0x43, 0x94, 0x3f, 0xc0, 0x3f, 0xc6, 0x4e, 0xc4, 0xff, + 0xd4, 0x04, 0x2f, 0x0c, 0xfa, 0xc0, 0xa3, 0x4c, 0xc3, 0x68, 0x2e, + 0xc8, 0x60, 0xf0, 0xdd, 0xb7, 0xdc, 0x93, 0xaa, 0xc9, 0x0b, 0xb3, + 0x95, 0x19, 0x96, 0xa0, 0x31, 0xa7, 0x3c, 0x62, 0x62, 0xbe, 0x65, + 0x98, 0xde, 0xda, 0x99, 0x86, 0x61, 0xe1, 0xe1, 0x9a, 0x58, 0x59, + 0xf5, 0x14, 0x34, 0xbb, 0x85, 0x06, 0x84, 0xba, 0x64, 0x58, 0xd3, + 0x61, 0xfd, 0x1c, 0x92, 0xce, 0x38, 0x44, 0x78, 0xe1, 0x8f, 0x42, + 0x4f, 0x2b, 0x7e, 0x7e, 0x12, 0x7f, 0x53, 0x53, 0xb9, 0x32, 0x4f, + 0x28, 0x04, 0xea, 0x2e, 0x7d, 0xec, 0x05, 0x69, 0xfe, 0x7c, 0xcc, + 0x11, 0x37, 0x70, 0x1c, 0x5e, 0x85, 0xe3, 0x03, 0x3a, 0xe5, 0xfd, + 0x53, 0x4c, 0x63, 0x7e, 0x12, 0xdc, 0x79, 0x36, 0xdb, 0x09, 0x7b, + 0x15, 0x70, 0x5f, 0x9b, 0xcf, 0x46, 0x0e, 0x09, 0x88, 0x4a, 0x59, + 0x07, 0x5b, 0xd6, 0x7d, 0x96, 0xf9, 0x43, 0x9e, 0xa4, 0xdc, 0x7a, + 0xf9, 0xb0, 0x21, 0xf3, 0xcd, 0xe6, 0xd4, 0xf8, 0x68, 0x6c, 0x73, + 0xf0, 0xa1, 0xb1, 0x29, 0x68, 0xe7, 0x85, 0x78, 0x9d, 0xdd, 0xa8, + 0xf0, 0xef, 0xaa, 0x6f, 0x26, 0x0e, 0xbe, 0xaf, 0x35, 0x67, 0xe4, + 0x79, 0x50, 0x8d, 0x40, 0x1b, 0x7a, 0x83, 0xd2, 0x70, 0x49, 0xfc, + 0x23, 0xd7, 0x49, 0x8d, 0x79, 0x60, 0x86, 0xa0, 0x89, 0xbd, 0x60, + 0xc0, 0x1f, 0x8f, 0x90, 0xec, 0x4b, 0x80, 0x2c, 0xfc, 0xda, 0x24, + 0x9f, 0x11, 0x84, 0x0c, 0x31, 0x5b, 0xf7, 0x53, 0x42, 0xd9, 0xda, + 0x9e, 0x61, 0x61, 0x91, 0x31, 0x53, 0xb3, 0x8a, 0x3c, 0x2b, 0xe9, + 0x72, 0xf6, 0xeb, 0xb6, 0x3a, 0x47, 0xda, 0x2e, 0xd6, 0xf3, 0xeb, + 0xe1, 0x65, 0x71, 0xea, 0xd2, 0x85, 0x96, 0xc9, 0xd6, 0x5f, 0xe1, + 0x6b, 0xe3, 0x2e, 0xc9, 0xdd, 0x3c, 0xb5, 0xa3, 0x5f, 0xf0, 0xc4, + 0x3d, 0xd7, 0x90, 0x9e, 0xbb, 0xe4, 0x3b, 0xb9, 0x5a, 0x86, 0xe6, + 0x87, 0xf9, 0xa5, 0x7a, 0x6c, 0xcb, 0x63, 0x38, 0x0f, 0x4e, 0xc5, + 0xbf, 0x96, 0xf8, 0x47, 0xe7, 0x4a, 0xc6, 0xda, 0xf0, 0xeb, 0xc0, + 0x28, 0x5e, 0x12, 0xcb, 0xbf, 0xed, 0x3e, 0xc1, 0x9d, 0x19, 0x29, + 0x3f, 0x8b, 0xe3, 0xf2, 0x0a, 0x9a, 0x74, 0xb5, 0x9b, 0x1f, 0x3c, + 0x7c, 0x25, 0xbd, 0x41, 0x40, 0xe3, 0xa4, 0x1c, 0xb4, 0xa5, 0x42, + 0x36, 0x9a, 0x61, 0x83, 0x2d, 0xab, 0x90, 0xa3, 0x78, 0xf6, 0xb6, + 0x5c, 0x5b, 0x06, 0xd0, 0x86, 0xd0, 0x77, 0x05, 0xd8, 0x6b, 0xcb, + 0x5e, 0xb4, 0xb6, 0x18, 0x3e, 0x20, 0xbc, 0x19, 0x95, 0x02, 0x89, + 0xde, 0x67, 0xab, 0x9e, 0xc1, 0x59, 0x5f, 0xf1, 0xca, 0x7f, 0x09, + 0xb3, 0x07, 0x07, 0x21, 0x0c, 0x7f, 0x7e, 0x76, 0x25, 0x31, 0xa9, + 0xc4, 0x8f, 0xba, 0x2e, 0x0d, 0xa3, 0xed, 0x04, 0xe0, 0x7d, 0xe5, + 0x01, 0x3e, 0x4a, 0xbd, 0x94, 0xa8, 0x65, 0x15, 0x0a, 0x97, 0xc7, + 0xb7, 0x43, 0x33, 0x6c, 0x93, 0x77, 0xba, 0x88, 0xa8, 0x9d, 0x68, + 0x05, 0xcd, 0xf1, 0xc9, 0x71, 0x71, 0x63, 0xcd, 0x7b, 0xec, 0x02, + 0xf8, 0x87, 0x1b, 0x94, 0x1d, 0x48, 0x1f, 0x19, 0x37, 0x32, 0xd5, + 0xf2, 0x95, 0xdc, 0x71, 0xf5, 0xc6, 0x9f, 0x6f, 0x1a, 0x1d, 0x17, + 0x37, 0xb0, 0x5d, 0xdd, 0xdc, 0xce, 0x52, 0xdd, 0xc0, 0xaa, 0x68, + 0xb2, 0xfc, 0xe1, 0xdd, 0x1f, 0xd5, 0x7f, 0xfd, 0x59, 0xfe, 0x91, + 0x07, 0x88, 0x39, 0x25, 0xf8, 0xe1, 0x58, 0xa4, 0x21, 0x26, 0xbd, + 0x75, 0x0e, 0xa2, 0xf8, 0x27, 0xa1, 0x58, 0xf5, 0x43, 0xe4, 0x2f, + 0xa2, 0xf7, 0x65, 0xf5, 0x7a, 0x51, 0xe7, 0xe0, 0x2f, 0xb8, 0x02, + 0xe3, 0x43, 0xff, 0x7c, 0x1e, 0x7d, 0x1d, 0x19, 0x4f, 0xe3, 0x87, + 0xe8, 0xf7, 0x8c, 0x5c, 0x83, 0xa2, 0x16, 0x3f, 0x5d, 0xcf, 0xe0, + 0xe6, 0x82, 0x07, 0xa7, 0xef, 0xc9, 0x75, 0x38, 0x8a, 0xb2, 0x37, + 0xa7, 0x74, 0x64, 0x2a, 0x01, 0xb4, 0x29, 0x07, 0x6b, 0xa5, 0x8e, + 0x2c, 0x05, 0x05, 0xca, 0x22, 0x0e, 0x86, 0x7f, 0xb3, 0x6c, 0x00, + 0x36, 0x1b, 0x3c, 0x46, 0x86, 0x3f, 0x15, 0xc5, 0x11, 0xca, 0x38, + 0x29, 0x08, 0x33, 0xe4, 0xbf, 0x4a, 0x7f, 0x8d, 0xc4, 0xf3, 0x17, + 0x80, 0x67, 0x87, 0x6a, 0xea, 0x90, 0xbb, 0x37, 0x4f, 0x2e, 0x07, + 0xe7, 0xe5, 0x46, 0xa7, 0x5f, 0x01, 0x32, 0x97, 0x0f, 0x31, 0xd5, + 0x39, 0x0e, 0x58, 0xa9, 0xbb, 0xe7, 0x54, 0xeb, 0xf7, 0x0a, 0x3c, + 0xf2, 0xac, 0xfd, 0xf7, 0xaf, 0x10, 0xa6, 0x88, 0xe9, 0xa9, 0x09, + 0x0b, 0xb3, 0xac, 0xd6, 0xcc, 0xd4, 0xee, 0xd4, 0xfd, 0x44, 0xe5, + 0x28, 0xbb, 0x9e, 0x6b, 0xf8, 0x93, 0xce, 0xc9, 0xac, 0x30, 0xfc, + 0xe7, 0xd1, 0x21, 0x09, 0xb8, 0xee, 0xbf, 0x89, 0xb1, 0xb7, 0x56, + 0x03, 0x79, 0xb2, 0x9e, 0x91, 0xa0, 0xcf, 0xe9, 0x96, 0x35, 0x9a, + 0x1e, 0x93, 0xdf, 0x28, 0xd5, 0x6d, 0x91, 0xf0, 0x15, 0x74, 0xdd, + 0x14, 0x74, 0x76, 0x75, 0xd0, 0x97, 0xc8, 0xcf, 0x5c, 0xe0, 0x7e, + 0xc1, 0x96, 0x85, 0xa9, 0x4b, 0x0e, 0x96, 0xa2, 0xc1, 0x1f, 0xf9, + 0x01, 0xf0, 0x51, 0x0b, 0x0f, 0x8b, 0xad, 0xb3, 0xe7, 0xd4, 0xeb, + 0x64, 0x45, 0x88, 0x42, 0x84, 0x9e, 0x92, 0xc6, 0x43, 0x9a, 0x7f, + 0xf9, 0xc0, 0xfc, 0xd9, 0xfe, 0xaf, 0x3c, 0xc5, 0x30, 0xf4, 0x67, + 0xed, 0x8e, 0x63, 0x58, 0x26, 0x54, 0x33, 0x2b, 0x64, 0x68, 0xfe, + 0x12, 0x2c, 0x8a, 0x3e, 0x56, 0xbe, 0x72, 0xc8, 0x21, 0xc1, 0xb3, + 0xc7, 0xab, 0x17, 0x93, 0x2c, 0x68, 0xde, 0xa8, 0x74, 0x4d, 0x67, + 0x74, 0xdd, 0xc0, 0xa1, 0x3b, 0x3d, 0x2a, 0x36, 0x5a, 0x38, 0x03, + 0xaa, 0x6f, 0x38, 0x50, 0x33, 0x52, 0xfd, 0x01, 0xf9, 0x06, 0xf4, + 0xcf, 0x03, 0xd2, 0x0e, 0x7a, 0x21, 0xef, 0x38, 0x1f, 0x3a, 0xff, + 0xc0, 0x77, 0xca, 0x74, 0x23, 0x2a, 0xa0, 0xde, 0x1b, 0xd5, 0xb2, + 0x92, 0xfc, 0x95, 0xf8, 0xd7, 0x68, 0xf5, 0x9d, 0x27, 0x23, 0x02, + 0xb5, 0xad, 0x6c, 0x68, 0x99, 0x00, 0xc2, 0x0f, 0x52, 0x11, 0x14, + 0xfe, 0xef, 0x62, 0xb2, 0x5c, 0x47, 0x44, 0x5a, 0x94, 0xd1, 0x7c, + 0xce, 0xcf, 0x22, 0x14, 0xae, 0x4b, 0x89, 0x8b, 0x4f, 0xcd, 0x82, + 0x6d, 0xc9, 0xcd, 0x38, 0xe2, 0x86, 0xfc, 0x92, 0xec, 0x40, 0xc8, + 0x5b, 0x39, 0x36, 0x2e, 0x29, 0xcb, 0x09, 0x68, 0xfe, 0x9d, 0xec, + 0x64, 0xed, 0x4d, 0xde, 0xfd, 0x14, 0xf3, 0x87, 0x76, 0x50, 0xb1, + 0x5d, 0x5d, 0xa2, 0x60, 0xc4, 0x9f, 0x6b, 0xf5, 0x71, 0x25, 0xb3, + 0x28, 0x0f, 0x4b, 0xc2, 0x2d, 0xa6, 0x65, 0x25, 0xf9, 0xc7, 0x5e, + 0x03, 0x27, 0x71, 0x88, 0x3d, 0xb4, 0x90, 0x6e, 0x4f, 0x07, 0x71, + 0x91, 0x62, 0x3e, 0x6d, 0xbe, 0x8c, 0xb7, 0xd9, 0x34, 0x9b, 0xc3, + 0xf8, 0xa7, 0x57, 0x02, 0x72, 0x7f, 0x6f, 0xb4, 0x58, 0x51, 0x76, + 0x5c, 0x9c, 0xb9, 0x55, 0xac, 0x6a, 0x83, 0x67, 0x15, 0x03, 0x3a, + 0x0e, 0x36, 0xda, 0xff, 0x11, 0x6d, 0xac, 0x50, 0x51, 0x65, 0x3d, + 0x47, 0xf3, 0x0f, 0x3c, 0xaa, 0xb7, 0x1f, 0x18, 0x47, 0x45, 0x75, + 0x94, 0x58, 0x1b, 0xf2, 0xe7, 0x22, 0x32, 0xdd, 0x95, 0xe9, 0xac, + 0x7d, 0x8b, 0xc2, 0x7a, 0x2a, 0x2d, 0x2b, 0xde, 0xc4, 0x29, 0xc5, + 0x4e, 0x2c, 0x62, 0x58, 0xeb, 0xae, 0x44, 0xa1, 0xfe, 0xd1, 0x42, + 0x4a, 0x31, 0xe6, 0x46, 0xe3, 0x65, 0x35, 0x60, 0x37, 0xf5, 0x19, + 0x99, 0x75, 0xb6, 0x71, 0x1d, 0x92, 0xc7, 0xac, 0xff, 0x24, 0x16, + 0x2b, 0xb6, 0x96, 0xc7, 0xef, 0xd1, 0x0a, 0xca, 0xcb, 0xd4, 0x26, + 0x17, 0xa6, 0xf8, 0xcd, 0xb0, 0xc1, 0xc8, 0xcd, 0x9c, 0xda, 0x4a, + 0xaa, 0xff, 0x06, 0xd9, 0xa5, 0x10, 0x9c, 0x99, 0xf4, 0xa6, 0x5c, + 0x8a, 0x40, 0x03, 0xf1, 0xb8, 0x13, 0xb8, 0x2f, 0xaa, 0x8b, 0x5c, + 0x8c, 0xf9, 0xa3, 0x69, 0xfe, 0x73, 0xec, 0xd6, 0xc0, 0x11, 0xfb, + 0x89, 0x96, 0x15, 0x6f, 0xe2, 0x74, 0xc7, 0x43, 0x7c, 0x4f, 0x51, + 0x47, 0x04, 0x67, 0x46, 0x17, 0x53, 0x72, 0x19, 0x28, 0x92, 0x26, + 0x09, 0xa2, 0x0e, 0x33, 0xdb, 0x7a, 0xe8, 0xf0, 0x0f, 0xda, 0x25, + 0x00, 0x1b, 0xf5, 0xaa, 0xa1, 0x59, 0xcb, 0x32, 0x66, 0xe0, 0x84, + 0x7f, 0x5f, 0x1b, 0xe6, 0x2a, 0x08, 0x1a, 0x0c, 0xd1, 0x01, 0x4a, + 0xfd, 0x3f, 0xcd, 0x23, 0x45, 0x90, 0x4f, 0xf5, 0x68, 0x42, 0x6f, + 0x61, 0x81, 0x1d, 0x84, 0xae, 0xc7, 0x41, 0xc9, 0x44, 0x75, 0x91, + 0x8b, 0x17, 0xfe, 0x7e, 0x66, 0x77, 0x05, 0xbb, 0xf5, 0x46, 0xdf, + 0xcb, 0x44, 0x08, 0x17, 0x79, 0x13, 0x2b, 0x35, 0x88, 0x13, 0x1f, + 0xb3, 0xcf, 0x25, 0x1c, 0x9a, 0x71, 0x12, 0xb8, 0x97, 0x49, 0x85, + 0xce, 0x8f, 0x29, 0xa7, 0xb7, 0xf5, 0x58, 0x24, 0x80, 0x85, 0xcc, + 0xa7, 0xd9, 0x9f, 0xfd, 0xa6, 0xa4, 0x40, 0x61, 0x4c, 0xaf, 0xcb, + 0x6c, 0x14, 0xe6, 0x4b, 0xe1, 0xaf, 0x8c, 0xff, 0xf4, 0xfb, 0x11, + 0x18, 0x85, 0x4b, 0xac, 0x63, 0xfd, 0x87, 0x64, 0xc8, 0xaf, 0x60, + 0x37, 0xbb, 0x17, 0x18, 0x59, 0xb3, 0x36, 0x8f, 0x13, 0x57, 0x7b, + 0x10, 0x06, 0x3a, 0xdf, 0x21, 0xa3, 0xfa, 0x7e, 0x69, 0x0d, 0xb8, + 0xa2, 0xbc, 0xa8, 0x4f, 0x5c, 0x00, 0xa5, 0x64, 0x1c, 0xce, 0xf1, + 0x4e, 0xb0, 0x89, 0x59, 0x88, 0x9e, 0x0e, 0x08, 0x7d, 0xe9, 0x3a, + 0x29, 0x55, 0xe0, 0x1e, 0x63, 0xc1, 0xd6, 0x83, 0xbf, 0x69, 0x95, + 0x47, 0xdd, 0xa4, 0x9c, 0x96, 0x7a, 0xf0, 0x8f, 0x38, 0xaa, 0x71, + 0x31, 0x8e, 0xf3, 0xd2, 0xb2, 0x88, 0x82, 0x56, 0x71, 0x80, 0xaa, + 0x34, 0xb5, 0xe2, 0x58, 0x58, 0x4d, 0x05, 0xaf, 0x8e, 0x29, 0x00, + 0x79, 0xf4, 0x32, 0x34, 0x34, 0x7a, 0xa1, 0xd9, 0x6f, 0x16, 0x76, + 0xef, 0xc1, 0x4c, 0x3a, 0xa9, 0x1e, 0xfc, 0x51, 0x60, 0x10, 0xf2, + 0x1e, 0x08, 0xa9, 0x07, 0xff, 0x46, 0x1b, 0xc1, 0x6d, 0xa6, 0x5c, + 0x6a, 0xe7, 0xcf, 0x35, 0xff, 0x9b, 0x07, 0x94, 0x4d, 0x56, 0x5f, + 0xe7, 0x5e, 0x79, 0x54, 0x34, 0xd3, 0x27, 0x89, 0x78, 0xd8, 0xa2, + 0xa0, 0x4a, 0x59, 0x63, 0x6b, 0x46, 0x9e, 0xd0, 0x6c, 0x84, 0x5e, + 0x1f, 0xfe, 0x28, 0xa2, 0x40, 0xde, 0x20, 0xbd, 0x26, 0xb0, 0x1e, + 0xfc, 0x11, 0x22, 0x33, 0xf6, 0x80, 0xf8, 0xeb, 0xb6, 0xac, 0xaa, + 0xf0, 0xab, 0xff, 0x05, 0x64, 0x0f, 0x08, 0x7c, 0x2b, 0x59, 0x80, + 0xdc, 0x0d, 0xc9, 0x2f, 0xd5, 0xc5, 0x54, 0x76, 0xa8, 0x49, 0xd5, + 0x34, 0x09, 0x8f, 0xef, 0xd4, 0xec, 0xde, 0x59, 0x1f, 0xfe, 0xb8, + 0x05, 0x39, 0x31, 0x42, 0x7d, 0x03, 0x02, 0xdb, 0x49, 0xed, 0x0b, + 0x8a, 0x49, 0x15, 0x4f, 0xe5, 0xac, 0x0f, 0xff, 0xe8, 0xb3, 0x06, + 0x2d, 0xab, 0x2a, 0x61, 0xb0, 0xf6, 0xfb, 0x87, 0x70, 0x62, 0xa8, + 0xf2, 0x00, 0xa6, 0xe6, 0x6c, 0x8b, 0x21, 0x7e, 0x6f, 0xbd, 0x97, + 0x69, 0xec, 0xe0, 0x5d, 0x97, 0x68, 0xd6, 0x14, 0xa3, 0xda, 0x9e, + 0x59, 0xa4, 0x5f, 0x2f, 0xfe, 0xc8, 0xf4, 0x12, 0x0a, 0xd3, 0xa4, + 0x9e, 0x54, 0x70, 0xdf, 0x0f, 0xbe, 0x96, 0x3b, 0xe9, 0x93, 0xca, + 0x94, 0xca, 0x99, 0xab, 0x37, 0xff, 0xd0, 0x9d, 0x06, 0x2d, 0xab, + 0x2a, 0x03, 0x5d, 0xe0, 0xe2, 0x87, 0x45, 0x38, 0xac, 0x87, 0x28, + 0xcd, 0xa3, 0xe8, 0xbe, 0xdb, 0x90, 0xeb, 0x8a, 0x75, 0x87, 0x85, + 0x9e, 0xb5, 0x20, 0xb0, 0xff, 0x08, 0x7f, 0x71, 0x58, 0xab, 0x2a, + 0x1b, 0xda, 0x87, 0x71, 0x63, 0xd3, 0xb6, 0x5f, 0xf1, 0x28, 0x8f, + 0x38, 0xc2, 0x2a, 0x14, 0xbd, 0xdb, 0x3e, 0x2c, 0x2c, 0xfa, 0xe5, + 0x48, 0xae, 0x16, 0xfe, 0xd0, 0x56, 0x63, 0x56, 0xcc, 0xfa, 0xa5, + 0x1b, 0xb4, 0xac, 0xaa, 0x8c, 0x85, 0x2d, 0x64, 0xcb, 0x69, 0x45, + 0x6a, 0xec, 0x11, 0x56, 0xfc, 0x53, 0x8b, 0x40, 0xd1, 0xbc, 0x96, + 0xca, 0xf9, 0xff, 0x0e, 0x7f, 0xd8, 0x73, 0x5a, 0x7b, 0x13, 0xdb, + 0x87, 0x78, 0x34, 0x06, 0x94, 0xcb, 0x61, 0x47, 0xd1, 0x9b, 0x51, + 0x75, 0xda, 0x66, 0xcb, 0xbd, 0xaa, 0xe7, 0xff, 0x40, 0xf1, 0x0f, + 0xd0, 0x6c, 0x4e, 0xcb, 0xf5, 0xcf, 0x37, 0xd8, 0x8c, 0x43, 0x91, + 0xc5, 0x40, 0x58, 0x84, 0xb7, 0xf7, 0xde, 0xa5, 0xbb, 0x9b, 0x04, + 0x94, 0x40, 0xf8, 0x74, 0xca, 0xde, 0x56, 0xde, 0xc1, 0xff, 0x25, + 0xfe, 0xd0, 0x3e, 0x9d, 0xb0, 0x5b, 0x9a, 0x38, 0x07, 0xf7, 0x0e, + 0x2f, 0x53, 0x7a, 0xb9, 0xfc, 0x80, 0xbd, 0xf7, 0x0c, 0xfd, 0x3f, + 0xf4, 0x76, 0x12, 0x25, 0xa5, 0xc9, 0x06, 0x60, 0xd4, 0xb2, 0x2a, + 0xf7, 0x82, 0xbc, 0xfd, 0x60, 0xff, 0x57, 0xda, 0x93, 0x5b, 0x47, + 0xd0, 0xb6, 0xd6, 0xf9, 0x4a, 0xf0, 0xf8, 0xd1, 0xb7, 0xc1, 0x1d, + 0xcd, 0x2b, 0x85, 0xdc, 0x16, 0xbf, 0x79, 0x82, 0x4a, 0xf2, 0xc2, + 0xbf, 0x93, 0x18, 0x6b, 0xfb, 0x69, 0xca, 0x16, 0x81, 0x12, 0xd0, + 0x37, 0x69, 0x85, 0xc5, 0x62, 0x99, 0x47, 0xc5, 0xde, 0xc6, 0xe3, + 0xfd, 0x16, 0xcb, 0x8a, 0xf1, 0xcd, 0xb9, 0xfa, 0xf3, 0x47, 0xc1, + 0x1a, 0xd4, 0x98, 0x4b, 0x7a, 0x62, 0x11, 0x2f, 0x30, 0xc4, 0x89, + 0xc2, 0x5e, 0x18, 0x48, 0xe0, 0x46, 0x20, 0x7c, 0x22, 0x3f, 0x1d, + 0xd8, 0xfe, 0x11, 0x1b, 0x27, 0x48, 0xd2, 0xfc, 0xeb, 0xfa, 0xb4, + 0x7f, 0x0f, 0x2e, 0xde, 0xf8, 0xa3, 0xb1, 0x1a, 0x4d, 0x58, 0x4c, + 0xd3, 0x12, 0x17, 0x0e, 0xaa, 0x45, 0xa4, 0xd0, 0xc5, 0x2c, 0xf1, + 0x6f, 0x96, 0x0d, 0xec, 0x31, 0x86, 0xb0, 0x93, 0xcb, 0xc1, 0x09, + 0xb9, 0x2f, 0x87, 0xec, 0x1f, 0x36, 0xde, 0x37, 0x72, 0x95, 0xad, + 0x87, 0xfd, 0xf3, 0xe0, 0xe2, 0x8d, 0x7f, 0xd3, 0x75, 0xb9, 0xb9, + 0xec, 0x9c, 0x26, 0xde, 0x31, 0x05, 0x5c, 0x1a, 0xa1, 0xae, 0xfb, + 0x6c, 0x67, 0xa1, 0xdb, 0x88, 0x74, 0xe9, 0x02, 0x56, 0x6f, 0x2f, + 0x52, 0x9c, 0x83, 0x30, 0x2d, 0x67, 0xb2, 0x81, 0xd1, 0x38, 0xec, + 0xce, 0xfa, 0x1b, 0x13, 0xb5, 0xf1, 0xdf, 0xce, 0x5f, 0x9e, 0x9d, + 0xa2, 0x05, 0xb7, 0xac, 0x79, 0x69, 0x62, 0x90, 0x78, 0x3e, 0x6c, + 0xc2, 0x3e, 0x8f, 0x99, 0xfa, 0x7d, 0x94, 0x07, 0x9b, 0x3b, 0xb0, + 0x0f, 0x5e, 0xc0, 0x1a, 0xf5, 0x8d, 0x94, 0xd7, 0x66, 0xec, 0x5d, + 0x62, 0xf6, 0xa6, 0xdb, 0x75, 0x4d, 0x9b, 0xe2, 0xb7, 0x52, 0xd0, + 0xec, 0x7b, 0x49, 0xf3, 0xef, 0x30, 0x77, 0x86, 0x76, 0xc7, 0xd8, + 0xc0, 0x49, 0x6f, 0x0f, 0x82, 0xf7, 0x65, 0xea, 0xa1, 0xdd, 0x6a, + 0x1b, 0x4f, 0xc6, 0xc6, 0xc5, 0xc5, 0x84, 0x28, 0xff, 0xc4, 0x4b, + 0xed, 0xea, 0xcf, 0x1f, 0x3f, 0x00, 0x50, 0xf5, 0xdd, 0x32, 0xd4, + 0xb2, 0x9a, 0xad, 0x4e, 0xc0, 0x6c, 0xcd, 0xd1, 0x3e, 0x5f, 0x58, + 0xd3, 0x58, 0x8c, 0xfb, 0xc4, 0xac, 0x79, 0x8f, 0x4c, 0x4b, 0x90, + 0x7a, 0x3e, 0xc1, 0x19, 0x82, 0x7b, 0x99, 0x72, 0x8b, 0xfe, 0x16, + 0x37, 0x1d, 0xc8, 0x4a, 0x75, 0xb1, 0x37, 0xe6, 0x1f, 0x91, 0xe9, + 0xdc, 0xc1, 0x3e, 0x80, 0x90, 0x05, 0xce, 0x33, 0xc8, 0xf0, 0x0c, + 0xff, 0x6e, 0xb3, 0x66, 0xf4, 0x1b, 0x4f, 0xc6, 0x3b, 0x1c, 0xe7, + 0x07, 0x28, 0xff, 0xc4, 0xdd, 0xd6, 0xa1, 0x4c, 0xb0, 0x8a, 0xa0, + 0x29, 0xaa, 0x7b, 0x08, 0x9a, 0xab, 0x19, 0xca, 0x5e, 0x07, 0x3d, + 0x80, 0xde, 0x19, 0xc5, 0x6a, 0xcb, 0x2a, 0xd8, 0xd3, 0x29, 0xfe, + 0xfe, 0x2b, 0x2b, 0x8b, 0xe6, 0xb5, 0xeb, 0xf9, 0x85, 0x40, 0xb8, + 0x3d, 0x8a, 0xf2, 0x8a, 0xa3, 0x28, 0x03, 0xcd, 0xc7, 0x47, 0xc4, + 0xfe, 0x55, 0xdd, 0x9c, 0x12, 0x49, 0xdf, 0x1c, 0x2a, 0x90, 0x99, + 0x18, 0xb4, 0x42, 0x13, 0xb0, 0x8f, 0x79, 0xff, 0xa3, 0x8e, 0xd4, + 0x30, 0x3b, 0xc6, 0xb6, 0x5c, 0xee, 0xb4, 0xe3, 0x51, 0xa4, 0xc0, + 0x83, 0x6c, 0xa8, 0x2d, 0x91, 0x74, 0x49, 0x0d, 0xbe, 0x02, 0x2c, + 0x57, 0xcf, 0x1d, 0x07, 0x13, 0x7b, 0xb9, 0x5e, 0x12, 0xfc, 0xf2, + 0xc6, 0xab, 0x65, 0x88, 0xfb, 0x5d, 0xfb, 0xbe, 0x65, 0x83, 0x99, + 0xee, 0x6c, 0x87, 0x7d, 0x42, 0x59, 0x76, 0x5e, 0x8d, 0x67, 0x7f, + 0x14, 0x93, 0x2b, 0xe1, 0x9c, 0x1b, 0xfb, 0x63, 0x1c, 0xbd, 0xe6, + 0x16, 0x0a, 0x93, 0x88, 0x1a, 0xcf, 0x7f, 0x56, 0x19, 0x38, 0xa3, + 0xf6, 0x18, 0xb8, 0xc0, 0x37, 0x8b, 0x95, 0x60, 0x5d, 0xaa, 0x30, + 0xfc, 0xf9, 0xf8, 0x7c, 0xcf, 0xc6, 0x96, 0xc4, 0xef, 0x7e, 0xb3, + 0x9c, 0xae, 0x54, 0xd1, 0xae, 0x4c, 0xaf, 0xd1, 0xd8, 0x28, 0xe8, + 0xa5, 0x9f, 0x78, 0x5a, 0xe6, 0x6f, 0x4f, 0x89, 0x63, 0x63, 0x6f, + 0xd7, 0x4f, 0x1a, 0xf5, 0x19, 0xbf, 0xc8, 0x6c, 0x5e, 0x34, 0x36, + 0x26, 0x4c, 0xd3, 0xc8, 0xf3, 0x31, 0xd6, 0x12, 0x41, 0x70, 0x6c, + 0xea, 0xc2, 0x7e, 0x83, 0xfe, 0xdd, 0xcc, 0xe7, 0xb0, 0x2d, 0x56, + 0x51, 0x90, 0x11, 0x47, 0x45, 0xeb, 0x6d, 0xf9, 0x71, 0x25, 0xec, + 0xad, 0xc8, 0xad, 0x6a, 0xc8, 0x02, 0x68, 0x20, 0x26, 0x69, 0x8c, + 0x2c, 0xb6, 0xfe, 0x0b, 0x5c, 0xec, 0x29, 0x25, 0x47, 0xa2, 0x7b, + 0x5c, 0x50, 0x22, 0x48, 0x0e, 0xf9, 0x45, 0xb7, 0xed, 0x0d, 0xb3, + 0xca, 0xfc, 0xf5, 0xe3, 0x7f, 0x3d, 0x24, 0xe1, 0x23, 0x5f, 0x59, + 0xb1, 0x62, 0x82, 0xde, 0xb8, 0xb7, 0x7f, 0x37, 0x6c, 0x8f, 0xcc, + 0x1e, 0xc8, 0x3e, 0xfa, 0xc8, 0x1d, 0x1e, 0xe1, 0xca, 0xc2, 0xa7, + 0xf0, 0xf8, 0x77, 0xaf, 0x0f, 0x4a, 0x75, 0xc7, 0xde, 0x35, 0xf5, + 0x7f, 0xe7, 0x02, 0xd5, 0x17, 0x15, 0xaf, 0x49, 0xbc, 0x37, 0x4d, + 0xfa, 0x77, 0xb3, 0xdd, 0xbf, 0xb2, 0x91, 0x0c, 0x91, 0xe8, 0xf2, + 0x0f, 0xea, 0x95, 0x30, 0x22, 0x8a, 0x08, 0x63, 0x10, 0xd8, 0x47, + 0xaa, 0xb6, 0xf8, 0xa8, 0x28, 0xef, 0x3d, 0xdd, 0x87, 0x29, 0x5d, + 0xf6, 0xd7, 0x20, 0x23, 0x75, 0x6c, 0x42, 0x52, 0x46, 0x5e, 0x35, + 0x70, 0x2e, 0xd7, 0x79, 0x37, 0xb5, 0xed, 0xdf, 0x52, 0x4f, 0x95, + 0x3a, 0x94, 0xd0, 0xf7, 0x8a, 0xb0, 0x55, 0x59, 0x20, 0xfb, 0x46, + 0xf1, 0x72, 0xd6, 0xa2, 0xe0, 0x74, 0xf9, 0x3f, 0x39, 0xc3, 0x7a, + 0x0b, 0x78, 0x7e, 0x59, 0xac, 0x96, 0x56, 0xcc, 0x55, 0x69, 0x57, + 0xb7, 0xa6, 0x7b, 0xf4, 0x67, 0x80, 0xfe, 0x77, 0xc4, 0x70, 0xfe, + 0x4b, 0x11, 0x2d, 0xff, 0xee, 0x17, 0xd4, 0xb9, 0x08, 0x3f, 0xb3, + 0x9b, 0x68, 0x31, 0xda, 0x1f, 0xd3, 0xdb, 0x31, 0x4f, 0x87, 0x7f, + 0xca, 0x1d, 0x50, 0x51, 0x01, 0xc8, 0xd8, 0x43, 0xd1, 0xb9, 0x52, + 0x07, 0x3f, 0x20, 0x93, 0x6d, 0xc0, 0xf5, 0xa5, 0xd5, 0x40, 0x31, + 0x68, 0xff, 0x1f, 0x14, 0x2f, 0xf3, 0x9f, 0xa2, 0x68, 0xf9, 0x9b, + 0x96, 0xb9, 0xf1, 0xc2, 0x3a, 0x24, 0x51, 0xe7, 0xc8, 0x10, 0x43, + 0xfe, 0x2b, 0xb5, 0x2d, 0x80, 0x2e, 0xff, 0x57, 0x73, 0xb2, 0x92, + 0x92, 0xb2, 0x6e, 0x12, 0xb1, 0x77, 0x1f, 0xdf, 0x29, 0xff, 0x98, + 0x7a, 0x27, 0x49, 0x7b, 0x0d, 0x8d, 0x84, 0x6c, 0x2a, 0x72, 0x9c, + 0x1f, 0xa5, 0xf2, 0x6f, 0xd5, 0x83, 0x09, 0x44, 0x1e, 0x12, 0x13, + 0xc7, 0xba, 0x7f, 0x44, 0xca, 0x4e, 0x85, 0x94, 0xd4, 0x32, 0xff, + 0x3d, 0x5e, 0xbb, 0xcd, 0xd7, 0xb0, 0x6b, 0x8a, 0xf1, 0x91, 0x54, + 0x41, 0x8d, 0x21, 0x27, 0x3a, 0x74, 0x7a, 0xa9, 0x3a, 0xfc, 0x9f, + 0x7a, 0x1e, 0xb6, 0x5e, 0xc1, 0x69, 0x35, 0x6a, 0x70, 0x46, 0x7e, + 0x81, 0x4c, 0x3b, 0xf6, 0x5a, 0x66, 0xed, 0x73, 0xf1, 0xa6, 0xa9, + 0x2e, 0x3a, 0xb4, 0x68, 0xca, 0x39, 0xaa, 0x90, 0x4c, 0xb1, 0x9b, + 0xec, 0x8e, 0x73, 0xe9, 0xb4, 0x3d, 0x32, 0x87, 0x89, 0x90, 0x54, + 0x27, 0x09, 0xd0, 0x6e, 0xf3, 0x16, 0x71, 0x50, 0x66, 0x12, 0x90, + 0x49, 0x6d, 0x47, 0xc6, 0xb5, 0xd1, 0xfb, 0x00, 0x0c, 0xeb, 0xff, + 0xde, 0x0e, 0x75, 0x93, 0x42, 0x6e, 0xd8, 0x4d, 0x69, 0x23, 0xd4, + 0x56, 0x07, 0xb3, 0x3b, 0xd5, 0x7a, 0x57, 0x71, 0xf9, 0x40, 0x5a, + 0x79, 0x2c, 0xc9, 0xe8, 0xdf, 0xc9, 0x48, 0xea, 0x7c, 0x5c, 0xbe, + 0xa7, 0xe6, 0x8e, 0xbb, 0xf2, 0x63, 0x35, 0xcd, 0x3f, 0x2c, 0x7a, + 0x3b, 0x38, 0xdb, 0xfb, 0x61, 0x78, 0x95, 0xf9, 0x5b, 0xe4, 0x88, + 0xea, 0xb0, 0x13, 0x49, 0x8d, 0x4b, 0xf9, 0x99, 0x8b, 0x27, 0x69, + 0xd4, 0x0d, 0xf9, 0x53, 0x61, 0xee, 0xda, 0x65, 0x4b, 0x86, 0xab, + 0x9f, 0xe5, 0xe6, 0x28, 0x2f, 0xd8, 0xa1, 0x68, 0x0d, 0x75, 0xeb, + 0xc3, 0x80, 0x99, 0x27, 0x0d, 0xd9, 0x52, 0x4c, 0x84, 0x1a, 0x8e, + 0x3a, 0x0c, 0x6e, 0xa6, 0x8d, 0xce, 0xac, 0x94, 0x83, 0x93, 0xf3, + 0x11, 0x13, 0xd6, 0xd9, 0x72, 0x2b, 0x40, 0xe5, 0xc9, 0xe5, 0xdd, + 0x35, 0x13, 0xa3, 0xfa, 0xae, 0xb8, 0xde, 0x64, 0x6a, 0x95, 0x34, + 0x74, 0x9c, 0x78, 0x87, 0xf1, 0x78, 0x18, 0xf2, 0xab, 0x76, 0xcb, + 0xc8, 0xba, 0xf1, 0x0f, 0xda, 0x2c, 0xc7, 0x69, 0x98, 0xea, 0x4c, + 0xe7, 0xf4, 0xc5, 0xf4, 0xd4, 0x84, 0x65, 0x3b, 0xad, 0xd6, 0x35, + 0xc9, 0x96, 0x6a, 0x25, 0xdc, 0x83, 0x2c, 0x2f, 0x5c, 0x51, 0x1d, + 0x5c, 0x4c, 0x69, 0xd5, 0xe0, 0x53, 0x13, 0xf2, 0x46, 0xcc, 0xc6, + 0x9e, 0x10, 0xa6, 0xb8, 0xdd, 0xa5, 0xf2, 0xda, 0x9c, 0xbf, 0x0f, + 0x53, 0x1f, 0x40, 0x60, 0xff, 0x69, 0x6b, 0xac, 0x5a, 0x27, 0x07, + 0x49, 0x9a, 0x18, 0x6e, 0xca, 0x05, 0xfb, 0x91, 0xe2, 0xd4, 0xc1, + 0x7c, 0x0f, 0x33, 0x2e, 0xff, 0xe4, 0x61, 0xad, 0xe7, 0x6d, 0xdd, + 0xf8, 0x73, 0x69, 0x77, 0xa4, 0xc8, 0x66, 0x03, 0x8b, 0xb6, 0xe9, + 0xc7, 0x37, 0x6a, 0x35, 0x47, 0x72, 0x4a, 0xa8, 0xa9, 0x86, 0xfd, + 0x27, 0xc6, 0xc7, 0x23, 0x60, 0x5d, 0x89, 0xf2, 0x02, 0x44, 0x7e, + 0x87, 0x77, 0xb1, 0x36, 0xa5, 0xd5, 0xe0, 0x75, 0x9e, 0xfe, 0xaf, + 0xe6, 0x03, 0x70, 0xbf, 0xe4, 0x6c, 0x01, 0xa8, 0xa9, 0x02, 0xe0, + 0x9c, 0x3c, 0x46, 0xdc, 0x7c, 0x74, 0x46, 0xbe, 0xe4, 0x6c, 0x78, + 0x61, 0x0e, 0x1b, 0x28, 0x2c, 0x24, 0x36, 0x7d, 0x5b, 0x6e, 0x6e, + 0xee, 0x91, 0x0d, 0xd2, 0xee, 0xad, 0x94, 0x44, 0xe5, 0x88, 0x5d, + 0xe7, 0x86, 0xeb, 0xd8, 0xe0, 0xd2, 0xa6, 0x65, 0x32, 0x8b, 0x7a, + 0xf3, 0x4f, 0xbc, 0xb3, 0x5c, 0xf4, 0x03, 0x8d, 0x3c, 0xf1, 0x93, + 0xb6, 0x8f, 0x89, 0x06, 0xd0, 0x6c, 0x1e, 0xe0, 0xb9, 0x71, 0xd4, + 0xba, 0xdf, 0x8e, 0xac, 0xd9, 0x55, 0x6c, 0x63, 0xdd, 0xe3, 0x82, + 0x62, 0x96, 0xa1, 0x1d, 0xc1, 0xd1, 0xf2, 0x8f, 0x81, 0x45, 0x60, + 0x83, 0x09, 0x7b, 0x33, 0xb8, 0xfe, 0xbe, 0x34, 0xa6, 0x85, 0x19, + 0x9c, 0x4e, 0xb1, 0xdd, 0x97, 0x22, 0x93, 0x35, 0x9f, 0x70, 0xc8, + 0x85, 0x1e, 0x65, 0xf1, 0x8d, 0x1b, 0xe5, 0xf0, 0x09, 0xd0, 0x1e, + 0x23, 0x21, 0xa3, 0xf7, 0xde, 0x93, 0x5f, 0x98, 0x5f, 0xb6, 0x0e, + 0x63, 0xa1, 0x20, 0x15, 0x3c, 0xe3, 0x19, 0xb6, 0x4f, 0x33, 0xda, + 0x00, 0x5b, 0x00, 0xb6, 0x8a, 0xa9, 0x23, 0xff, 0xe8, 0x5c, 0xa9, + 0x25, 0x0d, 0xc8, 0x74, 0x0d, 0xe3, 0x34, 0x82, 0xfa, 0xbf, 0xee, + 0x2b, 0xc8, 0xff, 0xab, 0x53, 0x16, 0x2a, 0x35, 0xfb, 0x34, 0xa6, + 0xc1, 0x83, 0x75, 0x8f, 0xec, 0x7b, 0x99, 0xea, 0xc6, 0xbc, 0xd1, + 0x72, 0xc6, 0x23, 0xf0, 0x99, 0xf0, 0xef, 0x15, 0x9a, 0x9f, 0x6b, + 0x84, 0x9a, 0x72, 0x5b, 0x78, 0x97, 0xe3, 0xc0, 0xbd, 0x1a, 0x95, + 0x68, 0xc2, 0xaf, 0x00, 0xb8, 0xf3, 0x32, 0x53, 0x47, 0xc6, 0xc5, + 0x25, 0x65, 0x15, 0x09, 0x92, 0x07, 0x95, 0x28, 0x11, 0xab, 0x8b, + 0x04, 0xcf, 0x95, 0xaf, 0x57, 0x99, 0xcd, 0xef, 0xef, 0xcc, 0xbd, + 0x53, 0x93, 0x6f, 0x66, 0xfa, 0xb5, 0xa1, 0x12, 0xef, 0x70, 0x1b, + 0xb1, 0x77, 0xb8, 0x94, 0xf5, 0x80, 0x66, 0xf6, 0xba, 0x8e, 0xfc, + 0xa1, 0xe1, 0x23, 0x5d, 0x2b, 0xa9, 0x7c, 0xb1, 0x2e, 0xfd, 0xca, + 0x4c, 0x14, 0x56, 0x04, 0x47, 0x18, 0xbf, 0xec, 0xa4, 0x47, 0xf3, + 0x91, 0x44, 0x9d, 0x94, 0x5d, 0xea, 0x64, 0x2f, 0x3d, 0x19, 0xb2, + 0x77, 0x9c, 0xb4, 0x48, 0xd3, 0x16, 0x86, 0xb6, 0x35, 0xc6, 0x69, + 0x83, 0xec, 0x42, 0x9e, 0xb9, 0xa7, 0xf8, 0x6e, 0x07, 0x27, 0x9c, + 0x10, 0x3c, 0xfb, 0x5b, 0x2b, 0x1c, 0x36, 0x54, 0x0a, 0x79, 0xcb, + 0xfb, 0x36, 0x37, 0x21, 0xdf, 0xd0, 0xe8, 0xc4, 0xe5, 0xb6, 0x2f, + 0x13, 0xe8, 0x6a, 0xc0, 0x4f, 0x6a, 0x00, 0x7a, 0xe5, 0x6a, 0xa6, + 0x25, 0x60, 0x3b, 0xce, 0xce, 0x5e, 0xd7, 0x91, 0x3f, 0x34, 0x7c, + 0xa4, 0x9c, 0x7d, 0x2f, 0xb3, 0xab, 0x37, 0xa0, 0xd1, 0x79, 0x44, + 0x70, 0x67, 0xe2, 0x62, 0x40, 0x73, 0x4c, 0xb6, 0xde, 0x69, 0x2e, + 0xca, 0x77, 0x03, 0x43, 0x27, 0x17, 0x9b, 0xfd, 0x75, 0xf9, 0x73, + 0xf2, 0x63, 0x81, 0xfc, 0x5b, 0x58, 0xc5, 0x7b, 0xef, 0x74, 0x68, + 0xd7, 0x20, 0xa5, 0x5d, 0x47, 0x81, 0x9b, 0x95, 0xed, 0xde, 0x23, + 0x37, 0x54, 0x56, 0xee, 0x1b, 0xa4, 0xbe, 0xc5, 0xfe, 0xda, 0x16, + 0x42, 0x72, 0x39, 0x4a, 0x70, 0x68, 0x97, 0xf1, 0xc4, 0x5e, 0xb3, + 0x32, 0xe6, 0x4b, 0x6d, 0xfc, 0xf9, 0x0e, 0x62, 0xb0, 0xe5, 0x65, + 0xf7, 0xbe, 0x16, 0xff, 0xf1, 0x5a, 0x0e, 0xea, 0x28, 0x4b, 0x22, + 0x46, 0xd8, 0x09, 0x5c, 0xef, 0x96, 0x42, 0xc9, 0xa3, 0x2d, 0x1b, + 0xf2, 0x86, 0xc0, 0xf6, 0xce, 0xcd, 0x4c, 0xe8, 0xa1, 0x77, 0x4f, + 0x8a, 0x24, 0xef, 0x8d, 0xbf, 0x3c, 0x6a, 0x1f, 0x18, 0x1b, 0x46, + 0x90, 0xf2, 0x5b, 0x29, 0xc8, 0x6e, 0x2e, 0xad, 0x3f, 0xab, 0x14, + 0x76, 0xe0, 0x91, 0xac, 0x90, 0xe1, 0x8b, 0xcc, 0xa9, 0xdd, 0xf4, + 0x2c, 0x06, 0x2f, 0xfc, 0x43, 0xf7, 0xdc, 0x62, 0x42, 0xce, 0xd6, + 0xc6, 0xbf, 0xc9, 0x47, 0x72, 0xb0, 0xed, 0x2a, 0xf1, 0x1f, 0x25, + 0x35, 0x68, 0xa0, 0x44, 0x92, 0x8f, 0xf0, 0x58, 0x70, 0x82, 0x53, + 0x5a, 0x00, 0x8a, 0xde, 0xfe, 0xe2, 0x37, 0xfc, 0xf1, 0xe8, 0x0d, + 0xeb, 0x28, 0xc3, 0x4f, 0xbc, 0xb9, 0x17, 0x77, 0x28, 0x92, 0x2a, + 0xc4, 0xad, 0xc6, 0xa1, 0x79, 0x42, 0xbe, 0x49, 0x98, 0xbf, 0x69, + 0x83, 0xee, 0x5c, 0xf2, 0xd8, 0x3b, 0x92, 0x9b, 0x0b, 0xda, 0xbd, + 0xec, 0x4c, 0x6f, 0xf4, 0x8f, 0x01, 0xdb, 0x8a, 0x04, 0xe0, 0xce, + 0x59, 0xce, 0x3a, 0x13, 0x7a, 0xe7, 0xcf, 0xa7, 0x7b, 0x98, 0x11, + 0xe4, 0xda, 0xf8, 0xfb, 0x8f, 0x95, 0x62, 0x23, 0x7d, 0x5d, 0xf1, + 0x83, 0xf4, 0xaf, 0x9f, 0x2b, 0x76, 0xca, 0x01, 0x93, 0xc6, 0x22, + 0x8e, 0x0d, 0x3f, 0x01, 0x52, 0xa7, 0x1b, 0x85, 0xd8, 0x5e, 0x85, + 0x48, 0x36, 0x5c, 0xee, 0x01, 0x87, 0x19, 0x63, 0x33, 0x64, 0xdb, + 0xbd, 0x17, 0xd1, 0xdf, 0x18, 0x3b, 0x38, 0x8d, 0xb6, 0x9a, 0x4a, + 0xbc, 0xe3, 0x59, 0x4a, 0xdd, 0x35, 0xbc, 0xdb, 0xa7, 0x0e, 0xeb, + 0xc4, 0x44, 0xc6, 0x53, 0xcc, 0xe2, 0xb7, 0x08, 0xbb, 0xf7, 0x62, + 0xf7, 0x76, 0xd8, 0x39, 0x00, 0x6e, 0x5d, 0x76, 0x01, 0xcf, 0x57, + 0xda, 0xe8, 0x94, 0x5e, 0xf8, 0x73, 0x43, 0xae, 0xed, 0xa6, 0xf6, + 0xbd, 0xaa, 0xf3, 0xf7, 0x0f, 0xef, 0x21, 0x53, 0x6a, 0xf8, 0xad, + 0x25, 0x31, 0x94, 0xe6, 0xd0, 0x9f, 0xe5, 0x28, 0x4e, 0x0d, 0x94, + 0xad, 0xc7, 0xfb, 0x5e, 0x01, 0xce, 0x37, 0x18, 0xec, 0x84, 0x1b, + 0x47, 0x3b, 0x73, 0xe2, 0x72, 0xcf, 0x69, 0xd8, 0x59, 0xf1, 0x57, + 0x72, 0x8a, 0x17, 0xf3, 0x9f, 0x76, 0x8f, 0x76, 0x3d, 0x95, 0x24, + 0xb1, 0x44, 0xbc, 0x17, 0x1c, 0x62, 0x2b, 0x12, 0x6d, 0x56, 0x5d, + 0x80, 0x76, 0xeb, 0x8e, 0x1c, 0x6d, 0xf3, 0xdc, 0xff, 0x4a, 0xf3, + 0x06, 0x78, 0xe3, 0x1f, 0xb6, 0xed, 0x36, 0x3d, 0x86, 0x5a, 0x67, + 0xfe, 0x51, 0xd9, 0x27, 0xa4, 0xda, 0x74, 0xb5, 0x87, 0xea, 0x03, + 0xa2, 0x4d, 0xea, 0xd9, 0x86, 0x06, 0xcf, 0xd5, 0x6c, 0x60, 0xb6, + 0x56, 0x0d, 0x59, 0x53, 0xb1, 0x10, 0xbd, 0x2f, 0x13, 0x4a, 0xc1, + 0xc1, 0xf0, 0x47, 0x46, 0x14, 0x0a, 0xbb, 0x48, 0x4f, 0x12, 0xc4, + 0xbf, 0xf9, 0x41, 0xdd, 0x99, 0x34, 0x14, 0x5a, 0x2a, 0x1b, 0xd5, + 0x2f, 0xed, 0x8f, 0x81, 0x6a, 0x14, 0xba, 0x33, 0xf2, 0x1b, 0x29, + 0xe6, 0x74, 0x8f, 0x53, 0x54, 0x68, 0xea, 0xda, 0xf9, 0xf3, 0xc9, + 0x35, 0x6b, 0x28, 0x93, 0xa9, 0xce, 0xfc, 0x43, 0x77, 0xda, 0x07, + 0x89, 0xff, 0x9a, 0xe6, 0x21, 0x77, 0xf9, 0xe5, 0x1e, 0xd7, 0xf3, + 0x2c, 0x83, 0x8d, 0x10, 0x31, 0x9a, 0x2f, 0x49, 0x77, 0x3b, 0x8e, + 0xa4, 0xdf, 0x72, 0xa3, 0xe0, 0xb2, 0xae, 0x3e, 0x23, 0xd0, 0x7d, + 0x04, 0x33, 0xc8, 0x4e, 0xca, 0x70, 0x51, 0x9e, 0xd7, 0xb2, 0x20, + 0xd7, 0xc1, 0x4c, 0x34, 0x00, 0x91, 0xe8, 0x10, 0x17, 0x8e, 0x4f, + 0x72, 0x02, 0x3b, 0xb6, 0x93, 0x90, 0xe7, 0xc4, 0x39, 0x76, 0x4c, + 0xd5, 0x1b, 0x7f, 0xae, 0xc3, 0xd5, 0xb3, 0x14, 0xcf, 0x3a, 0xf3, + 0xf7, 0x5b, 0xe2, 0x91, 0x86, 0xd2, 0x06, 0xd9, 0x77, 0x92, 0x3d, + 0xd5, 0x76, 0xba, 0x9e, 0x85, 0xd0, 0xca, 0xb1, 0xb3, 0x3d, 0x45, + 0xd3, 0x7b, 0xbf, 0xe3, 0x31, 0xfd, 0x0e, 0xbb, 0x9c, 0x00, 0x28, + 0xd1, 0x09, 0xb0, 0x04, 0xc1, 0xfe, 0x5f, 0x79, 0x89, 0xc0, 0xf4, + 0x1b, 0x45, 0xe0, 0xfe, 0xdf, 0x0a, 0x92, 0xc3, 0xdc, 0x22, 0x01, + 0xec, 0x8f, 0xc0, 0x1d, 0x5b, 0x20, 0x4d, 0x15, 0xb6, 0x3e, 0xa0, + 0xd9, 0x17, 0xd9, 0x4b, 0xfb, 0xcf, 0xe1, 0xe8, 0x7d, 0x94, 0x7e, + 0x9d, 0xf9, 0x73, 0x93, 0xe4, 0x37, 0x27, 0xf2, 0x08, 0xf5, 0x08, + 0x07, 0xea, 0x7a, 0x96, 0xc6, 0x97, 0x00, 0xcf, 0x08, 0xf1, 0x9f, + 0x8d, 0x63, 0xe7, 0x9b, 0x27, 0xe1, 0x30, 0xc9, 0xad, 0xf7, 0xfe, + 0x8c, 0x17, 0x0b, 0x86, 0x25, 0xef, 0xb1, 0xad, 0x27, 0x86, 0x7b, + 0x43, 0x12, 0x36, 0xc3, 0xfe, 0x1f, 0xb2, 0x67, 0x0f, 0xc5, 0xd0, + 0x57, 0x0a, 0x6a, 0x3f, 0xcc, 0x9c, 0x27, 0x48, 0x7b, 0x70, 0x20, + 0xde, 0xe8, 0x1e, 0xa0, 0xe5, 0xe8, 0x92, 0x7b, 0xb2, 0x8b, 0xe5, + 0x3d, 0xd5, 0x15, 0xf1, 0x62, 0xff, 0x21, 0x49, 0x76, 0x51, 0xfb, + 0x68, 0xd7, 0xca, 0x3f, 0x40, 0x8e, 0x8d, 0x31, 0xb2, 0xd4, 0x26, + 0x46, 0x05, 0x8d, 0xd8, 0xea, 0x98, 0x48, 0x04, 0x0c, 0xd3, 0xf7, + 0x7f, 0x52, 0x77, 0x73, 0x8e, 0x30, 0xc3, 0x8e, 0x4c, 0x99, 0x15, + 0x13, 0x1b, 0xfd, 0xb3, 0x38, 0x10, 0xc0, 0x37, 0x25, 0x63, 0x99, + 0x46, 0xac, 0x14, 0xe3, 0x30, 0x40, 0x0b, 0x9a, 0x1c, 0x20, 0xf7, + 0x6b, 0x93, 0x98, 0xb6, 0xf9, 0xf4, 0x4d, 0x37, 0x00, 0x95, 0xe2, + 0xac, 0x06, 0x9a, 0x7c, 0x42, 0x5e, 0x41, 0xb0, 0xe7, 0x70, 0xb9, + 0xb7, 0xa4, 0x34, 0x96, 0x8a, 0xcd, 0x2e, 0x69, 0x19, 0xd9, 0xff, + 0x48, 0x5a, 0x1f, 0xa0, 0x96, 0x81, 0xd4, 0xc6, 0x3f, 0x60, 0x81, + 0x1c, 0x1b, 0xe3, 0x74, 0x4d, 0xa9, 0x14, 0x15, 0xf6, 0x7a, 0xcd, + 0x45, 0x29, 0x6d, 0x41, 0x40, 0xad, 0xfc, 0xa1, 0x49, 0xe4, 0xb1, + 0x1f, 0x2d, 0x16, 0x5f, 0xec, 0x90, 0xb5, 0xc5, 0xda, 0x3d, 0x87, + 0x5a, 0x7e, 0x0c, 0xfb, 0x3a, 0xee, 0x7f, 0x00, 0xfb, 0x62, 0x22, + 0x34, 0x21, 0xc7, 0xb7, 0x4d, 0x3f, 0x56, 0x82, 0x77, 0x22, 0x16, + 0x0a, 0xcd, 0x91, 0x32, 0x33, 0xcc, 0x1f, 0xcd, 0x94, 0xca, 0x37, + 0x9b, 0xa0, 0x59, 0xac, 0x6d, 0xdc, 0xff, 0x13, 0x65, 0x9e, 0x93, + 0xd8, 0x6f, 0xb1, 0x56, 0xfe, 0x41, 0xcb, 0x94, 0xe0, 0x10, 0x05, + 0xd5, 0xae, 0xcb, 0xd2, 0x8e, 0x00, 0x1e, 0xbb, 0xf8, 0x8f, 0x65, + 0x41, 0xb5, 0xf2, 0x8f, 0xcd, 0x07, 0xa7, 0x5e, 0x8c, 0x4c, 0x73, + 0x8a, 0x1e, 0x02, 0x7d, 0xaf, 0x68, 0x56, 0xba, 0xe0, 0xbd, 0x26, + 0x7f, 0xb6, 0x7c, 0xcd, 0xf0, 0xe8, 0xb2, 0xcb, 0x25, 0xf6, 0xf1, + 0x6e, 0xed, 0x4a, 0x90, 0xba, 0x78, 0x75, 0xe3, 0x6f, 0xdc, 0xff, + 0x17, 0xa5, 0x6f, 0xde, 0x76, 0xe2, 0x03, 0xa8, 0xf5, 0xfd, 0x57, + 0x83, 0x47, 0x0c, 0xff, 0xe9, 0xfc, 0x00, 0xf1, 0x5f, 0x9f, 0x97, + 0x4d, 0x17, 0xff, 0x81, 0x1a, 0xfb, 0x98, 0x02, 0xbd, 0x75, 0x21, + 0x89, 0x77, 0x40, 0x35, 0x9a, 0x28, 0x84, 0xcd, 0xbc, 0x63, 0x02, + 0x6e, 0xf4, 0xf1, 0x08, 0x8a, 0xff, 0xf2, 0xbb, 0xac, 0x0b, 0x48, + 0xc7, 0x6c, 0xd8, 0xed, 0x7f, 0xde, 0xdf, 0x4c, 0xf3, 0xe8, 0x79, + 0x48, 0x40, 0xdd, 0xdb, 0xc3, 0x2b, 0x92, 0x7a, 0x29, 0x16, 0x7b, + 0xd3, 0x3d, 0x00, 0xbc, 0x6d, 0xc2, 0x7b, 0x66, 0xfe, 0xf6, 0xa2, + 0x94, 0x36, 0x53, 0xc3, 0xdf, 0x78, 0xfc, 0x47, 0x94, 0x90, 0xed, + 0xa4, 0xef, 0x61, 0xdd, 0xeb, 0x3f, 0xae, 0xd9, 0x6e, 0xd9, 0x7b, + 0x61, 0xa6, 0x93, 0x30, 0xd2, 0x22, 0x0f, 0xe9, 0xf8, 0x6a, 0xa2, + 0x87, 0x8f, 0xd7, 0xe2, 0xc0, 0x7b, 0xc5, 0x76, 0xc3, 0xe4, 0xf2, + 0x2a, 0x1c, 0x34, 0x92, 0x18, 0x08, 0x90, 0x64, 0x64, 0x29, 0xb6, + 0x87, 0x68, 0xfe, 0x68, 0x49, 0x89, 0x70, 0x21, 0x7d, 0x08, 0x65, + 0xdd, 0x21, 0x07, 0x98, 0xac, 0xa6, 0xa2, 0x71, 0xb1, 0x50, 0x4a, + 0xda, 0xc0, 0xf2, 0x57, 0x5f, 0x7b, 0xf9, 0x43, 0x60, 0x25, 0xc5, + 0x49, 0x38, 0x5b, 0xd6, 0x83, 0x3f, 0x97, 0xee, 0x94, 0xe2, 0x5e, + 0xc6, 0x5e, 0x25, 0x1e, 0x6c, 0xf0, 0x26, 0x1d, 0x5f, 0x05, 0x14, + 0x62, 0xed, 0x30, 0xb2, 0x50, 0xc6, 0x97, 0x89, 0xeb, 0x5f, 0xfa, + 0x5c, 0xc5, 0x61, 0xae, 0x38, 0x53, 0x9a, 0x93, 0xd9, 0x51, 0x0c, + 0x3e, 0x29, 0x34, 0x1e, 0x42, 0xf3, 0x9f, 0x50, 0x0d, 0x6a, 0xbe, + 0xd0, 0x6c, 0x5f, 0x9a, 0x52, 0x8d, 0x63, 0x45, 0x99, 0x96, 0xdd, + 0x07, 0xdf, 0x88, 0x5e, 0x28, 0xfd, 0x7e, 0x64, 0xf9, 0x1b, 0x8f, + 0xff, 0xca, 0xd2, 0x33, 0x6f, 0x8f, 0x5a, 0x63, 0x1a, 0xf2, 0x6f, + 0x91, 0xaa, 0x46, 0xaf, 0x96, 0x64, 0x94, 0x3c, 0x0a, 0x1c, 0x71, + 0x90, 0x68, 0x59, 0xf9, 0x64, 0x76, 0x13, 0x3f, 0x0e, 0x47, 0xb5, + 0x12, 0x67, 0xf3, 0x61, 0x93, 0x6d, 0xc6, 0x59, 0x8e, 0x4a, 0x8b, + 0x87, 0xa2, 0x4e, 0xe6, 0xd0, 0x53, 0x28, 0x68, 0xd5, 0xa6, 0x89, + 0xe1, 0x6f, 0xb2, 0xe8, 0x6e, 0x4e, 0x16, 0x7b, 0x55, 0xdc, 0x30, + 0x6a, 0xb8, 0x5d, 0x32, 0x08, 0x82, 0x3f, 0xf4, 0xb0, 0xbe, 0x06, + 0xc6, 0xe3, 0xff, 0xb2, 0x04, 0x64, 0x12, 0x2d, 0x40, 0x7d, 0xe6, + 0x3f, 0x3b, 0xc9, 0xa3, 0xc0, 0xfe, 0x16, 0xf2, 0xc1, 0x76, 0x38, + 0xa9, 0xf5, 0x7f, 0x83, 0x16, 0xfb, 0xb5, 0x61, 0x12, 0x3b, 0x33, + 0xc6, 0xb1, 0x49, 0x31, 0xa8, 0xf8, 0xe4, 0x62, 0x0b, 0x65, 0xb1, + 0xc2, 0x27, 0xa4, 0xe1, 0x1f, 0x79, 0x44, 0x77, 0xb1, 0x66, 0xe8, + 0x16, 0x31, 0xdc, 0x4f, 0xf0, 0x3b, 0x2e, 0x70, 0x3c, 0x21, 0x98, + 0x8f, 0x58, 0x78, 0x93, 0x8d, 0x9b, 0x60, 0x3c, 0xff, 0xa3, 0x4a, + 0xd2, 0x1d, 0xf5, 0xda, 0xf5, 0xe1, 0x1f, 0xa4, 0x3c, 0x38, 0xf2, + 0x0a, 0x38, 0xfe, 0x53, 0x0e, 0x3d, 0xae, 0x14, 0x92, 0x21, 0x48, + 0xce, 0x0a, 0x1a, 0xfe, 0x5c, 0xc4, 0x81, 0xeb, 0xd4, 0x44, 0x2c, + 0x7c, 0x54, 0x27, 0x3b, 0x28, 0xfc, 0xfd, 0x70, 0xac, 0x48, 0xd8, + 0x37, 0xd6, 0xfa, 0xbf, 0xa2, 0xb5, 0x98, 0x52, 0xb8, 0xa7, 0x90, + 0x95, 0x4e, 0xa1, 0x28, 0xeb, 0xfd, 0x03, 0x28, 0xde, 0x38, 0x6d, + 0xff, 0x19, 0xcf, 0xff, 0xa9, 0x12, 0x9d, 0xab, 0x7e, 0x00, 0xf5, + 0x9a, 0xff, 0x4e, 0xba, 0x93, 0x2a, 0x5f, 0x81, 0xb4, 0x78, 0x23, + 0x2f, 0xc0, 0x97, 0x9d, 0x1c, 0xef, 0xe2, 0x27, 0x14, 0xc9, 0x61, + 0xa9, 0x34, 0xef, 0x3f, 0x1e, 0x08, 0x68, 0x4d, 0x28, 0xc3, 0x4f, + 0xc5, 0xf5, 0x9e, 0x49, 0xe2, 0xdf, 0x6a, 0x16, 0xbe, 0x61, 0x58, + 0xfe, 0x77, 0xf5, 0xb6, 0xef, 0x0e, 0xdc, 0xe6, 0x11, 0x76, 0x20, + 0x7a, 0x21, 0xa9, 0x57, 0xa0, 0x5d, 0x04, 0xca, 0x6e, 0x01, 0xda, + 0xa5, 0xc8, 0xf4, 0xa1, 0x87, 0xd8, 0xb4, 0xb5, 0x5b, 0x0e, 0x15, + 0x9c, 0x43, 0x96, 0x80, 0xf5, 0x3f, 0x2b, 0x31, 0x2b, 0xea, 0xc5, + 0xbf, 0x6f, 0x81, 0xf4, 0x69, 0xa9, 0x13, 0x82, 0x98, 0xd1, 0xd4, + 0x62, 0x7a, 0xc2, 0xa3, 0xc3, 0x29, 0x41, 0x9e, 0xff, 0x1a, 0x7b, + 0x17, 0xe0, 0x19, 0xb3, 0xbe, 0x05, 0x40, 0x7e, 0xed, 0x83, 0x3f, + 0xfc, 0x7d, 0x01, 0xd1, 0x06, 0xa2, 0x15, 0xb2, 0x37, 0xe7, 0x76, + 0xfc, 0x2b, 0xb0, 0xb5, 0x8f, 0x9c, 0x60, 0x2d, 0xc3, 0x55, 0x0c, + 0xfc, 0xfe, 0xb1, 0xc7, 0x90, 0x0c, 0xd0, 0x4a, 0x9e, 0x8a, 0xed, + 0x27, 0xef, 0x66, 0xe6, 0xdf, 0xd7, 0xbc, 0xcf, 0xb6, 0xf3, 0xad, + 0xfd, 0x00, 0xec, 0x21, 0xcd, 0x3f, 0xe3, 0xf9, 0x7f, 0x52, 0xc6, + 0xdf, 0x51, 0x56, 0x82, 0xd4, 0x8b, 0x7f, 0xc4, 0xd1, 0x13, 0xe2, + 0xc5, 0xf9, 0xe5, 0x94, 0x7b, 0x66, 0xf3, 0x4d, 0x1e, 0x72, 0x59, + 0xe7, 0x53, 0x19, 0x1e, 0x79, 0x87, 0x0d, 0x4d, 0xfb, 0x87, 0x49, + 0xdc, 0xf8, 0xa1, 0x33, 0x91, 0xbb, 0xd5, 0x56, 0x0f, 0x28, 0x3f, + 0x7c, 0x01, 0x14, 0x6c, 0x3e, 0x54, 0x0a, 0x80, 0x68, 0x9c, 0xc0, + 0xfa, 0x3f, 0x5f, 0xa9, 0xa4, 0x4c, 0x71, 0xff, 0xaf, 0xbd, 0xf3, + 0x7e, 0x8c, 0xa2, 0xe8, 0xff, 0xf8, 0x5d, 0x2e, 0x20, 0x10, 0x40, + 0xaa, 0x80, 0x20, 0xbd, 0x08, 0x88, 0xc1, 0x10, 0xe9, 0xb7, 0x0b, + 0xca, 0x03, 0x06, 0x69, 0xa1, 0x57, 0x35, 0x12, 0x7a, 0x35, 0x24, + 0x84, 0x26, 0x02, 0x02, 0x8a, 0xa8, 0x14, 0x41, 0x91, 0x26, 0x48, + 0x93, 0x26, 0x55, 0x12, 0x08, 0x09, 0x4d, 0x8a, 0x40, 0x28, 0x4a, + 0x91, 0x16, 0x90, 0x8e, 0x80, 0x34, 0x91, 0xf2, 0x80, 0x3c, 0xf7, + 0xda, 0x65, 0xcb, 0xec, 0xcd, 0xfa, 0xfd, 0x03, 0xbe, 0xde, 0x2f, + 0xea, 0x2b, 0xbe, 0x93, 0xd7, 0x7d, 0x66, 0x6e, 0x76, 0x76, 0x66, + 0xee, 0x6e, 0x81, 0xf1, 0xcd, 0x07, 0x99, 0xa3, 0xd3, 0x9f, 0x1c, + 0xef, 0xaf, 0x55, 0x23, 0x6b, 0x91, 0x62, 0xcf, 0x45, 0x1d, 0x11, + 0xdf, 0x39, 0xf0, 0x0f, 0xe7, 0x3f, 0xec, 0x8f, 0xca, 0xbb, 0x57, + 0x1a, 0xb7, 0xde, 0xae, 0xcf, 0x3f, 0x67, 0xb1, 0x62, 0x85, 0x9d, + 0x77, 0xd6, 0xd9, 0xbf, 0x32, 0x66, 0x00, 0x31, 0xbf, 0x0b, 0xcb, + 0x34, 0x11, 0x49, 0x8f, 0x1e, 0xac, 0x6b, 0xaa, 0x5f, 0xd7, 0xb2, + 0x2a, 0xcb, 0xad, 0x6f, 0x2d, 0x71, 0xce, 0x7f, 0xb4, 0x47, 0xb6, + 0xcf, 0xef, 0x24, 0xda, 0x7f, 0x75, 0xc4, 0x77, 0xb7, 0x8c, 0xb7, + 0xa0, 0xdd, 0x4d, 0x8e, 0xd2, 0x82, 0x05, 0x97, 0x07, 0x7e, 0xe1, + 0xd3, 0x37, 0x14, 0xe7, 0xef, 0x98, 0x6e, 0xbd, 0x3f, 0x4a, 0xfb, + 0x5e, 0xa8, 0x51, 0xe5, 0x9f, 0x6e, 0x46, 0x2c, 0xb0, 0x7f, 0xf6, + 0x14, 0xef, 0x2c, 0x3a, 0xf3, 0x40, 0xf8, 0x2e, 0xaa, 0xcc, 0x5d, + 0x2f, 0x3d, 0x18, 0x1e, 0x7c, 0x70, 0x20, 0xfb, 0x57, 0xda, 0xd2, + 0x0b, 0x87, 0x39, 0xab, 0x25, 0x19, 0xcf, 0xff, 0xe7, 0x46, 0xc2, + 0x87, 0x37, 0xb4, 0xdb, 0xbb, 0x77, 0x4d, 0x2d, 0x67, 0xb0, 0xaf, + 0x31, 0x03, 0xa8, 0x75, 0x78, 0xb6, 0x70, 0x0c, 0x34, 0x50, 0x80, + 0x27, 0x97, 0xbf, 0x6c, 0xfb, 0x72, 0xb1, 0x32, 0x0d, 0x27, 0x9c, + 0x78, 0x62, 0x7d, 0xde, 0xa7, 0x73, 0xfe, 0xab, 0x3f, 0xc2, 0xb7, + 0xfe, 0x22, 0x0c, 0x81, 0x05, 0x3a, 0xad, 0x3a, 0x17, 0x98, 0xee, + 0xdd, 0x38, 0xb3, 0xaa, 0x47, 0xf1, 0xa7, 0x88, 0xf9, 0xdf, 0xe9, + 0xe9, 0x5d, 0x9b, 0x37, 0x6f, 0x37, 0x7c, 0x4d, 0x60, 0x22, 0x3c, + 0xd9, 0x7a, 0x4a, 0x7c, 0x8a, 0xc9, 0x81, 0x61, 0x8d, 0xca, 0x17, + 0x63, 0xf9, 0xc7, 0xf6, 0xd1, 0xaa, 0x9e, 0x7f, 0x3c, 0xff, 0x25, + 0x3e, 0x62, 0xaf, 0x70, 0x71, 0xe6, 0x8d, 0xd7, 0x69, 0x97, 0x8c, + 0xe7, 0x7f, 0xf3, 0xc7, 0x75, 0xf6, 0x6f, 0xb3, 0xe8, 0x2f, 0x3b, + 0x5a, 0xe9, 0xba, 0x0f, 0xec, 0xab, 0xf9, 0xed, 0x35, 0xed, 0xfd, + 0xff, 0x29, 0xc7, 0xee, 0x3d, 0xb9, 0x93, 0xdc, 0xd4, 0x7a, 0xed, + 0x0a, 0xf7, 0x3f, 0xc6, 0x73, 0xe8, 0x7e, 0x5d, 0x3c, 0xdc, 0xe7, + 0x2b, 0xd3, 0x72, 0xfd, 0x93, 0xe3, 0x71, 0x51, 0xd6, 0x8e, 0x9e, + 0xaf, 0xce, 0xca, 0xdb, 0x4f, 0xf8, 0xa6, 0xec, 0x8b, 0xf7, 0xb8, + 0x31, 0xb4, 0xdd, 0xb2, 0xe4, 0x68, 0x1f, 0x18, 0xf6, 0xef, 0x64, + 0x6c, 0x5a, 0x97, 0x92, 0xf1, 0xc8, 0xfe, 0xd1, 0xba, 0xff, 0x7c, + 0xfe, 0x4f, 0x7c, 0x54, 0xde, 0xb9, 0x36, 0xef, 0xd3, 0x0f, 0x23, + 0x7a, 0x62, 0x3c, 0x7f, 0xf3, 0xfc, 0xf7, 0x3f, 0x3c, 0xff, 0xb2, + 0xa9, 0x4b, 0xf4, 0x99, 0x6e, 0x96, 0x71, 0x47, 0x1c, 0xa7, 0x89, + 0x0a, 0x77, 0x99, 0xaf, 0x9d, 0x7f, 0xbb, 0x75, 0x64, 0x65, 0x5f, + 0x61, 0xe9, 0xdb, 0x7e, 0xff, 0x6b, 0x5a, 0x2d, 0xdb, 0xe7, 0xfc, + 0x24, 0x12, 0xc7, 0xfc, 0x5f, 0xbb, 0xff, 0xfb, 0x8d, 0xb7, 0xf8, + 0xde, 0xca, 0x48, 0x1d, 0x51, 0xdb, 0xbe, 0x6f, 0xeb, 0x2b, 0xc1, + 0x9f, 0xd2, 0xcf, 0x8c, 0xd5, 0xb5, 0xdf, 0x4c, 0xfc, 0xd3, 0xf9, + 0x4f, 0xf1, 0x91, 0xa5, 0x29, 0x2b, 0xb7, 0x1c, 0x66, 0xe4, 0xa3, + 0x38, 0xca, 0x98, 0xff, 0x6a, 0xfb, 0x18, 0xac, 0xea, 0x23, 0x82, + 0xe6, 0x7f, 0xe4, 0x9a, 0x3e, 0x9d, 0xe8, 0x44, 0xbe, 0xeb, 0xdc, + 0x94, 0xf4, 0xe5, 0xd5, 0xce, 0xbf, 0xc5, 0xd6, 0x2e, 0xe2, 0x28, + 0xb7, 0xb5, 0xfe, 0x61, 0x3d, 0x6a, 0xbd, 0x5b, 0x58, 0xfc, 0x9f, + 0x3c, 0x75, 0x1c, 0xdf, 0x10, 0xc6, 0xfd, 0x7f, 0x43, 0x3e, 0x29, + 0x24, 0xb6, 0x5e, 0x59, 0xe7, 0x92, 0x18, 0x7f, 0x8a, 0x9f, 0xd4, + 0xfe, 0x3f, 0xbe, 0xbe, 0xf5, 0xdf, 0xc7, 0xbf, 0x8f, 0x7f, 0x1f, + 0xff, 0x2f, 0x1e, 0x4c, 0x02, 0x4f, 0x78, 0x56, 0x86, 0xec, 0xf1, + 0xf9, 0x3a, 0x7b, 0x18, 0x2d, 0x67, 0x2c, 0x7f, 0xa4, 0x18, 0x3f, + 0xec, 0xa4, 0xfd, 0x70, 0x55, 0xc8, 0x5e, 0x9f, 0x2f, 0xd6, 0xc3, + 0xfe, 0xca, 0xc4, 0x4b, 0x63, 0xb5, 0x05, 0xc4, 0x45, 0xbb, 0x2f, + 0x29, 0xeb, 0x52, 0x53, 0x95, 0x98, 0x9d, 0x43, 0xfc, 0xeb, 0x77, + 0x2e, 0x51, 0x0c, 0xb6, 0xb1, 0xc3, 0x31, 0x81, 0xe5, 0xd9, 0xfc, + 0xaa, 0x0a, 0xfb, 0xf4, 0xd8, 0xcf, 0x7e, 0x23, 0x0b, 0x23, 0x0b, + 0xcb, 0xaf, 0xfd, 0x81, 0xd5, 0x21, 0xe9, 0x3e, 0x5f, 0x17, 0x8f, + 0x3e, 0x5a, 0x79, 0x3d, 0x3e, 0x4f, 0xc8, 0x53, 0xad, 0x35, 0x68, + 0x75, 0xd5, 0xb4, 0xce, 0x1f, 0x8b, 0x56, 0x45, 0xad, 0xb5, 0x68, + 0x75, 0xd3, 0xb4, 0x2e, 0x3d, 0x39, 0xac, 0x4d, 0xe6, 0x2f, 0xbd, + 0xda, 0x35, 0x6d, 0xff, 0xaf, 0x2b, 0x94, 0xa6, 0xbe, 0xd6, 0xea, + 0x8a, 0x4c, 0x51, 0xaa, 0xc1, 0xce, 0x9e, 0xff, 0x43, 0x60, 0x28, + 0xc0, 0x52, 0x0e, 0x0d, 0x53, 0x8d, 0x2c, 0x8c, 0x2c, 0x4c, 0xd7, + 0xfa, 0x01, 0xad, 0xee, 0x12, 0xad, 0x75, 0x68, 0xf5, 0x70, 0xa9, + 0x56, 0x12, 0x5a, 0x3d, 0x35, 0xad, 0x5c, 0x43, 0x26, 0x69, 0xbf, + 0x3a, 0xa1, 0xe5, 0x86, 0xd4, 0x9d, 0x87, 0xab, 0xab, 0xf3, 0x4a, + 0xb5, 0x53, 0x23, 0x32, 0x5d, 0x55, 0x0c, 0xf6, 0xeb, 0x8b, 0x6f, + 0x0a, 0xac, 0x55, 0x6a, 0x3d, 0x15, 0x86, 0x82, 0x91, 0x85, 0x91, + 0xb5, 0xb4, 0x92, 0xd1, 0xea, 0x25, 0xd1, 0x5a, 0x8f, 0x56, 0x6f, + 0x97, 0x6a, 0x6d, 0x40, 0xab, 0x8f, 0x50, 0x2d, 0x14, 0x5a, 0x94, + 0x2e, 0xa0, 0x29, 0x18, 0x95, 0x81, 0x75, 0x5c, 0x52, 0x55, 0x60, + 0x28, 0xc0, 0xec, 0xd5, 0x82, 0x91, 0xb5, 0xb4, 0x52, 0xd0, 0xea, + 0x2b, 0xd1, 0xda, 0x88, 0x56, 0x3f, 0x4d, 0xab, 0xfe, 0x14, 0xc5, + 0xa1, 0x95, 0x8a, 0x56, 0x7f, 0xa1, 0x5a, 0xcd, 0xdb, 0x47, 0x69, + 0x5a, 0x75, 0x36, 0x57, 0x55, 0x69, 0x14, 0x83, 0xdd, 0x3f, 0x5b, + 0x45, 0x60, 0xbd, 0xb3, 0xd4, 0x54, 0x61, 0xe5, 0xee, 0xb7, 0x36, + 0xab, 0x05, 0x23, 0x0b, 0xd3, 0xb5, 0xd2, 0xd0, 0x7a, 0x4f, 0xa2, + 0xb5, 0x09, 0xad, 0x38, 0x4d, 0x2b, 0x77, 0xcb, 0xcf, 0x1c, 0x8d, + 0xb8, 0x19, 0xad, 0x01, 0x9a, 0x56, 0x4a, 0x58, 0xbc, 0xdf, 0xe8, + 0xde, 0x47, 0x53, 0x5f, 0x50, 0xb3, 0x46, 0x76, 0x57, 0x16, 0x7f, + 0xd8, 0xc8, 0xec, 0xf2, 0x33, 0x26, 0x94, 0x12, 0x18, 0x7a, 0xb0, + 0x31, 0x89, 0xe3, 0x14, 0x23, 0x0b, 0x23, 0x0b, 0xd3, 0xb5, 0xb6, + 0xa0, 0x15, 0x2f, 0xd1, 0xda, 0x8a, 0x56, 0x82, 0xa6, 0x75, 0xc4, + 0xb3, 0xdd, 0xa1, 0xb5, 0x0d, 0xad, 0x81, 0x82, 0xd6, 0xc5, 0x4e, + 0x53, 0xd3, 0x66, 0xbf, 0x31, 0xde, 0x9f, 0x90, 0xde, 0x4c, 0xed, + 0xd3, 0x76, 0x8d, 0x62, 0xb0, 0xb9, 0x27, 0xae, 0x0a, 0x8c, 0x06, + 0x83, 0xd1, 0x60, 0x46, 0x16, 0x46, 0xd6, 0x6a, 0xc4, 0x1f, 0xd1, + 0x4a, 0x94, 0x68, 0x6d, 0x47, 0x6b, 0x90, 0x8b, 0xd6, 0x0e, 0xb4, + 0x06, 0x0b, 0x7d, 0x0b, 0x85, 0x59, 0xfb, 0x1b, 0xd6, 0x46, 0x21, + 0xb4, 0xda, 0xb7, 0xa6, 0xd6, 0x80, 0xe3, 0x03, 0xfc, 0x76, 0x86, + 0x02, 0xcc, 0xd9, 0xb7, 0xc8, 0x5a, 0x5a, 0x3b, 0xd1, 0x1a, 0x22, + 0xd1, 0xda, 0x85, 0xd6, 0x50, 0x97, 0x57, 0xe2, 0x4f, 0x68, 0x0d, + 0xd3, 0xb4, 0x1e, 0xbc, 0x96, 0x43, 0x7b, 0xc6, 0x37, 0x8f, 0x7f, + 0xa6, 0x4c, 0x6c, 0x54, 0x4a, 0x4d, 0xfd, 0xe4, 0x9a, 0x7f, 0xe7, + 0xc6, 0x8b, 0x8a, 0xc1, 0x0e, 0x4f, 0x89, 0x14, 0x18, 0x0a, 0xb0, + 0xcd, 0x97, 0x1a, 0x28, 0x46, 0x16, 0x46, 0x16, 0xa6, 0x6b, 0xed, + 0x46, 0xeb, 0x7d, 0x89, 0xd6, 0x1e, 0xb4, 0x86, 0x6b, 0x5a, 0x73, + 0x4e, 0xbe, 0xe6, 0xe8, 0xf2, 0x7b, 0xd1, 0xfa, 0x40, 0xa8, 0x56, + 0x4a, 0xf2, 0xf5, 0xd4, 0x7b, 0x45, 0x17, 0x2a, 0xbd, 0xa7, 0x36, + 0x53, 0xe8, 0xc2, 0x06, 0x2b, 0xda, 0xe4, 0x8c, 0xc0, 0xc6, 0x6f, + 0x2f, 0xa0, 0xc2, 0x52, 0x2a, 0xce, 0x53, 0x8c, 0x2c, 0x8c, 0x2c, + 0x4c, 0xd7, 0x4a, 0x47, 0x6b, 0x84, 0x44, 0x6b, 0x1f, 0x5a, 0x23, + 0x5d, 0xba, 0xfc, 0x7e, 0xb4, 0x46, 0x09, 0x7d, 0xcb, 0xb7, 0xb2, + 0x44, 0x1a, 0xdd, 0xb6, 0xc3, 0xbe, 0xcf, 0xcc, 0xee, 0x0d, 0xa3, + 0x7b, 0xdb, 0xd9, 0xef, 0x09, 0x7b, 0xfc, 0x30, 0x14, 0x8c, 0x2c, + 0x8c, 0xac, 0xa5, 0x75, 0x00, 0xad, 0x0f, 0x25, 0x5a, 0x07, 0xd1, + 0x1a, 0xad, 0x69, 0x35, 0xcd, 0xbc, 0xc8, 0xa1, 0xf5, 0x33, 0x5a, + 0x63, 0x34, 0xad, 0xa8, 0x59, 0x23, 0x36, 0xf2, 0x83, 0xed, 0x7b, + 0x4a, 0x29, 0xf4, 0x8f, 0x01, 0xb7, 0x47, 0xf9, 0x03, 0x7d, 0x4a, + 0x31, 0xd8, 0xfd, 0x7b, 0xc3, 0xfd, 0x76, 0xb6, 0x73, 0xf4, 0xc7, + 0x1a, 0xeb, 0xd8, 0x79, 0xa1, 0xdf, 0xc8, 0xc2, 0xc8, 0xc2, 0x74, + 0xad, 0x5f, 0xd0, 0x1a, 0x2b, 0xd1, 0x3a, 0x84, 0xd6, 0x47, 0x2e, + 0xd5, 0x3a, 0x8c, 0xd6, 0xc7, 0x9a, 0x56, 0x8b, 0x72, 0xe3, 0xb5, + 0x67, 0x3c, 0xf4, 0x50, 0x68, 0x6a, 0x62, 0xb7, 0x1f, 0x94, 0x89, + 0xa3, 0x16, 0x99, 0x95, 0x81, 0xbd, 0xde, 0x6e, 0xb3, 0xc0, 0xa8, + 0x0c, 0xac, 0x63, 0xfc, 0x6a, 0xc5, 0xc8, 0xc2, 0xc8, 0xc2, 0x74, + 0xad, 0x23, 0x68, 0x8d, 0x93, 0x68, 0x1d, 0x45, 0xeb, 0x13, 0x97, + 0x2e, 0xff, 0x2b, 0x5a, 0xe3, 0x85, 0xbe, 0x35, 0x34, 0xff, 0xa4, + 0xb4, 0xfb, 0x55, 0x1f, 0xfb, 0x3b, 0x97, 0x8d, 0x36, 0x2f, 0x34, + 0xb0, 0xcc, 0xa3, 0xeb, 0x2b, 0x76, 0x46, 0xf7, 0x86, 0x39, 0x5f, + 0x89, 0x64, 0xad, 0x57, 0xe2, 0x31, 0xb4, 0x3e, 0x95, 0x68, 0x1d, + 0x47, 0xeb, 0x33, 0x17, 0xad, 0x13, 0x68, 0x7d, 0x1e, 0x34, 0xca, + 0xd3, 0x10, 0x4b, 0x66, 0x7d, 0xad, 0xcc, 0x6c, 0x7c, 0x43, 0x31, + 0xd8, 0xe0, 0xf5, 0xdf, 0xfb, 0xed, 0x6c, 0x54, 0x8b, 0x70, 0x15, + 0x56, 0x7f, 0xca, 0x11, 0xc5, 0xc8, 0xc2, 0xc8, 0xc2, 0x74, 0xad, + 0x93, 0x68, 0x4d, 0x90, 0x68, 0x9d, 0x42, 0x6b, 0xa2, 0x8b, 0x56, + 0x06, 0x5a, 0x93, 0x82, 0x1a, 0xf1, 0xc3, 0xfb, 0x2d, 0xd5, 0x81, + 0xcf, 0x75, 0x52, 0x86, 0xc7, 0x9f, 0x35, 0x1b, 0xb1, 0xf2, 0xe8, + 0x58, 0x81, 0xa1, 0x00, 0x53, 0x8b, 0x2e, 0x31, 0x1b, 0x11, 0x46, + 0x16, 0xa6, 0x6b, 0x9d, 0x46, 0x6b, 0xb2, 0x44, 0xeb, 0x0c, 0x5a, + 0x5f, 0xb8, 0x68, 0xfd, 0x86, 0xd6, 0x14, 0xa1, 0x5a, 0x28, 0xcc, + 0x58, 0xd1, 0x55, 0x53, 0x30, 0x1b, 0x11, 0x16, 0x32, 0x58, 0x60, + 0x28, 0xc0, 0x50, 0xb0, 0x57, 0x8b, 0xac, 0xa5, 0x75, 0x16, 0xad, + 0xa9, 0x12, 0xad, 0x73, 0x68, 0x7d, 0xe9, 0xa2, 0x75, 0x1e, 0xad, + 0xaf, 0x82, 0x1a, 0x31, 0x23, 0xdf, 0x66, 0xbf, 0xb3, 0x11, 0xab, + 0x6f, 0xa8, 0xa0, 0x38, 0x1b, 0x11, 0xe6, 0x6c, 0x44, 0xb2, 0x56, + 0x23, 0x5e, 0x40, 0x6b, 0x9a, 0x44, 0xeb, 0x22, 0x5a, 0x5f, 0xbb, + 0x68, 0x5d, 0x42, 0x6b, 0xba, 0x30, 0x3b, 0xa5, 0x32, 0xe7, 0xbb, + 0x55, 0x51, 0xb2, 0xcd, 0x8b, 0x52, 0xa2, 0x33, 0xee, 0x99, 0xd5, + 0x2a, 0xfd, 0xcb, 0x48, 0x81, 0xbd, 0x18, 0x56, 0x51, 0x85, 0x2d, + 0xf3, 0x7c, 0xa3, 0x18, 0x59, 0x18, 0x59, 0x98, 0xae, 0x75, 0x19, + 0xad, 0x19, 0x12, 0xad, 0x2b, 0x68, 0xcd, 0x74, 0xd1, 0xfa, 0x1d, + 0xad, 0x59, 0x41, 0xd5, 0xda, 0x1f, 0x55, 0x51, 0x65, 0x44, 0x37, + 0x1a, 0x0c, 0x76, 0x60, 0xa6, 0x5f, 0x60, 0x28, 0xc0, 0xa6, 0x9d, + 0x9a, 0x67, 0x56, 0x0b, 0x46, 0x16, 0xa6, 0x6b, 0x5d, 0x45, 0x6b, + 0xb6, 0x44, 0xeb, 0x1a, 0x5a, 0xdf, 0xb8, 0x68, 0x5d, 0x47, 0x6b, + 0x4e, 0x90, 0x56, 0xf9, 0x12, 0x75, 0xd4, 0x7a, 0x4d, 0xdb, 0x0b, + 0x8d, 0x58, 0x30, 0xbd, 0xb9, 0xc0, 0x68, 0x30, 0x98, 0xb3, 0x6f, + 0x91, 0xb5, 0xfa, 0xd6, 0x1f, 0x68, 0xcd, 0x95, 0x68, 0xdd, 0x40, + 0xeb, 0x5b, 0x17, 0xad, 0x9b, 0x68, 0xcd, 0x13, 0xb4, 0xba, 0x16, + 0x28, 0x97, 0xfa, 0xe7, 0xfc, 0xf3, 0xda, 0xf5, 0xcf, 0x50, 0x80, + 0xf5, 0xf8, 0x3b, 0x54, 0xb5, 0x33, 0x2a, 0x03, 0xe3, 0x42, 0x63, + 0xaf, 0x16, 0x59, 0xeb, 0xe2, 0x73, 0x0b, 0xad, 0xf9, 0x12, 0xad, + 0xdb, 0x68, 0x2d, 0x70, 0xd1, 0xba, 0x83, 0xd6, 0xc2, 0xa0, 0x6a, + 0xd5, 0x3b, 0x33, 0x48, 0x19, 0xd5, 0x66, 0x9e, 0x50, 0xad, 0x12, + 0xbb, 0xe6, 0x0a, 0x8c, 0xca, 0xc0, 0xb8, 0x5c, 0xdb, 0xab, 0x45, + 0x16, 0xa6, 0x6b, 0xfd, 0x89, 0xd6, 0x22, 0x89, 0xd6, 0x5d, 0xb4, + 0xbe, 0x73, 0xd1, 0xfa, 0x0b, 0xad, 0xc5, 0xd2, 0xbe, 0xd5, 0x37, + 0xf2, 0x3b, 0x41, 0x2b, 0xed, 0xae, 0x5f, 0x60, 0x28, 0xc0, 0xb2, + 0x55, 0xbc, 0x20, 0x68, 0x91, 0x85, 0xe9, 0x5a, 0xf7, 0xd0, 0x5a, + 0x22, 0xd1, 0xba, 0x8f, 0xd6, 0x52, 0x97, 0x6b, 0xe2, 0x03, 0xb4, + 0x96, 0x05, 0x0d, 0xa7, 0x3c, 0xe3, 0x8f, 0xb6, 0xde, 0x10, 0xae, + 0x89, 0xd7, 0x63, 0x3e, 0x12, 0x18, 0x5d, 0x1f, 0xb6, 0x27, 0x2a, + 0xbb, 0x6a, 0x64, 0x61, 0x64, 0x61, 0xba, 0xd6, 0x43, 0xb4, 0x96, + 0x4b, 0xb4, 0xfe, 0x8b, 0xd6, 0xf7, 0x2e, 0x5a, 0x8f, 0xd0, 0x5a, + 0x11, 0x34, 0xb1, 0x39, 0x59, 0xff, 0x17, 0xe5, 0xea, 0x99, 0x82, + 0xaa, 0x7d, 0x62, 0x33, 0xe6, 0xf7, 0x0c, 0x81, 0xa1, 0x00, 0x6b, + 0xf2, 0x41, 0x84, 0x39, 0x69, 0x86, 0x91, 0x85, 0xe9, 0x5a, 0x8f, + 0xd1, 0x5a, 0x29, 0xd1, 0xfa, 0x1b, 0xad, 0x55, 0x9a, 0xd6, 0xe0, + 0x84, 0xd9, 0x0e, 0xad, 0x27, 0x68, 0xad, 0xd6, 0xb4, 0x94, 0x9e, + 0xcb, 0xb5, 0x5f, 0xcd, 0xad, 0xea, 0xab, 0x07, 0xde, 0x50, 0x8f, + 0xd7, 0x28, 0xa4, 0xe6, 0x59, 0xd0, 0x49, 0x31, 0x58, 0xe1, 0xa8, + 0x26, 0x02, 0x3b, 0xf9, 0x41, 0xa8, 0x0a, 0x2b, 0x90, 0xb3, 0xba, + 0x6a, 0x64, 0x61, 0x64, 0x61, 0xba, 0x96, 0xc7, 0x17, 0xd0, 0x5a, + 0x23, 0xd1, 0xf2, 0xfa, 0x02, 0x5a, 0x6b, 0x5d, 0x66, 0xa7, 0x21, + 0xbe, 0x80, 0xd6, 0x0f, 0xc2, 0x0c, 0x62, 0xed, 0xf8, 0x34, 0x7f, + 0x78, 0xbf, 0xe1, 0x4a, 0x9b, 0x4f, 0x63, 0xfd, 0xc6, 0x4c, 0x14, + 0x76, 0xa6, 0xeb, 0x7a, 0x81, 0xfd, 0x35, 0xf8, 0x47, 0x05, 0xc6, + 0x8d, 0xbd, 0x91, 0x85, 0x91, 0xb5, 0x6e, 0xf6, 0x7d, 0x68, 0xad, + 0x93, 0x68, 0x85, 0xa2, 0x95, 0xa4, 0x37, 0xe2, 0xa7, 0x57, 0x1d, + 0xd5, 0xca, 0x84, 0x56, 0xb2, 0xa0, 0x95, 0xba, 0xa3, 0x6f, 0x5a, + 0xad, 0xbf, 0xb7, 0x29, 0xeb, 0x97, 0x44, 0xaa, 0x3f, 0x9d, 0x3b, + 0xa6, 0x18, 0x8c, 0x6e, 0x6c, 0x67, 0x54, 0x06, 0x76, 0xfe, 0x68, + 0x0b, 0x73, 0x62, 0x03, 0x23, 0x0b, 0xd3, 0xb5, 0x32, 0xa3, 0xb5, + 0x5e, 0xa2, 0xf5, 0x0c, 0x5a, 0x1b, 0x5c, 0xb4, 0xb2, 0xa0, 0x95, + 0x22, 0xce, 0xb7, 0x02, 0xdd, 0xbb, 0x73, 0xce, 0xaa, 0x6a, 0xf6, + 0x3d, 0xd5, 0x4c, 0x05, 0xd8, 0xee, 0xf9, 0xf5, 0x05, 0xd6, 0xe0, + 0x7c, 0x35, 0x15, 0xc6, 0xad, 0xaa, 0x91, 0x85, 0x91, 0xb5, 0x6e, + 0x5f, 0xb3, 0xa2, 0xb5, 0x51, 0xa2, 0x95, 0x0d, 0xad, 0x54, 0x4d, + 0x4b, 0xc9, 0x5c, 0xce, 0xd1, 0x88, 0x61, 0x68, 0xa5, 0x09, 0x5a, + 0x0c, 0x9d, 0x55, 0x2f, 0x77, 0x56, 0x57, 0x35, 0xe9, 0xa4, 0x66, + 0x8d, 0x28, 0xaa, 0x1a, 0xec, 0xd4, 0xd0, 0x61, 0x02, 0x43, 0x01, + 0x66, 0x9f, 0x06, 0xc2, 0xc8, 0x5a, 0xd3, 0xc0, 0xec, 0x68, 0x6d, + 0x92, 0x68, 0xe5, 0x40, 0x6b, 0xb3, 0xa6, 0x95, 0xf5, 0x6c, 0x69, + 0x87, 0x56, 0x4e, 0xb4, 0xb6, 0x04, 0x5d, 0xaa, 0x6b, 0x64, 0x2d, + 0xa3, 0x9e, 0x19, 0x79, 0x45, 0x89, 0x1f, 0x52, 0x52, 0x35, 0xd8, + 0xe0, 0x76, 0xaa, 0xc0, 0xb8, 0x83, 0x86, 0x55, 0x9a, 0x9a, 0x57, + 0xb5, 0x2f, 0x24, 0x91, 0x85, 0xe9, 0x5a, 0xcf, 0xa2, 0xb5, 0x55, + 0xa2, 0x95, 0x0b, 0xad, 0x6d, 0x2e, 0xd5, 0xca, 0x8d, 0xd6, 0x8f, + 0x41, 0xe3, 0x16, 0x2f, 0x72, 0xdf, 0x81, 0xcb, 0x8a, 0x51, 0x19, + 0x58, 0xef, 0x21, 0x1e, 0xd5, 0xce, 0x50, 0x80, 0x29, 0xb5, 0xf3, + 0x9a, 0xe3, 0x16, 0x8c, 0x2c, 0x4c, 0xd7, 0xca, 0x83, 0xd6, 0x76, + 0x89, 0x56, 0x5e, 0xb4, 0x76, 0x68, 0x5a, 0x2b, 0xbe, 0x2e, 0xee, + 0xd0, 0xca, 0x87, 0xd6, 0x4e, 0x4d, 0xeb, 0xc2, 0x98, 0x70, 0xbf, + 0xd1, 0x60, 0xcc, 0xc7, 0x33, 0xe2, 0xc3, 0x55, 0xee, 0xfb, 0x0c, + 0xb6, 0xee, 0x5e, 0x3b, 0xc5, 0xce, 0x68, 0x30, 0xd8, 0xfd, 0x87, + 0x4d, 0x54, 0x23, 0x0b, 0x23, 0x0b, 0xd3, 0xb5, 0xf2, 0xa3, 0xb5, + 0x4b, 0xa2, 0xf5, 0x1c, 0x5a, 0x3f, 0x69, 0x5a, 0x9d, 0x4e, 0x57, + 0x71, 0x68, 0x15, 0x40, 0x6b, 0xb7, 0x30, 0x9c, 0x6a, 0xf3, 0xad, + 0xd1, 0x75, 0xd5, 0x7c, 0x09, 0xdf, 0x2b, 0x5c, 0x7a, 0x0d, 0xd6, + 0x76, 0x77, 0x7b, 0x81, 0x51, 0x19, 0xd8, 0x84, 0x17, 0xae, 0x09, + 0x4b, 0x23, 0x64, 0x61, 0xba, 0x56, 0x41, 0xb4, 0xf6, 0x48, 0xb4, + 0x0a, 0xa1, 0xb5, 0x57, 0xd3, 0xda, 0x7e, 0x3e, 0xbf, 0x43, 0xeb, + 0x79, 0xb4, 0xd2, 0x83, 0xb4, 0x1a, 0x14, 0xc9, 0xa9, 0xf5, 0xa3, + 0x1d, 0x91, 0xcf, 0x9a, 0x5a, 0xfb, 0x4e, 0x95, 0x14, 0x18, 0x0a, + 0x30, 0xfa, 0x91, 0x5d, 0x8b, 0xac, 0xd5, 0xb7, 0x0a, 0xa3, 0xb5, + 0x4f, 0xa2, 0x55, 0x04, 0xad, 0xfd, 0x4f, 0x2f, 0x3e, 0x39, 0x1c, + 0x5a, 0x2f, 0xa0, 0x75, 0x20, 0x48, 0xab, 0xdc, 0x83, 0x68, 0xa5, + 0x6a, 0x42, 0x4e, 0x35, 0xcf, 0xfc, 0xcc, 0xa6, 0x56, 0x58, 0xf2, + 0x04, 0x81, 0xa1, 0x00, 0x1b, 0x10, 0x55, 0x49, 0xd0, 0x22, 0x0b, + 0xd3, 0xb5, 0x8a, 0xa2, 0x75, 0x50, 0xa2, 0x55, 0x0c, 0xad, 0x9f, + 0x5d, 0xba, 0x7c, 0x71, 0xb4, 0x7e, 0x09, 0xea, 0x5b, 0xc9, 0xb5, + 0xee, 0x28, 0xd1, 0xdd, 0xaa, 0xaa, 0x2b, 0xae, 0x14, 0x32, 0xfb, + 0xd6, 0xae, 0xf4, 0x5c, 0xaa, 0x9d, 0xd1, 0x8f, 0x60, 0xbd, 0xaf, + 0xb7, 0x12, 0xfa, 0x16, 0x59, 0x98, 0xae, 0x55, 0x02, 0xad, 0x43, + 0x12, 0xad, 0x92, 0x68, 0x1d, 0xd6, 0xb4, 0x6e, 0x7f, 0x19, 0xee, + 0xd0, 0x2a, 0x85, 0xd6, 0x91, 0xa0, 0x6a, 0x9d, 0xdb, 0xf9, 0x8e, + 0x1a, 0x1b, 0x7f, 0x53, 0x78, 0x25, 0xee, 0xbf, 0x97, 0x28, 0x30, + 0x6d, 0xf9, 0x36, 0xc0, 0xfa, 0xe5, 0x2c, 0x20, 0x54, 0x8b, 0x2c, + 0x4c, 0xd7, 0x2a, 0x8d, 0xd6, 0x51, 0x89, 0x56, 0x19, 0xb4, 0x7e, + 0xd5, 0xb4, 0x16, 0x86, 0x8d, 0x73, 0x8c, 0xf2, 0x65, 0xd1, 0x3a, + 0x16, 0x34, 0x40, 0x70, 0x01, 0xc9, 0xbd, 0x34, 0xaf, 0x6a, 0x9f, + 0xd8, 0x3c, 0x73, 0x73, 0x9f, 0xc0, 0x50, 0x80, 0x31, 0x5b, 0xb0, + 0x0f, 0x10, 0x64, 0xad, 0x19, 0x44, 0x39, 0xb4, 0x8e, 0x4b, 0xb4, + 0x5e, 0x44, 0xeb, 0x84, 0xcb, 0xc5, 0xa7, 0x3c, 0x5a, 0x27, 0x83, + 0xa6, 0x81, 0x8b, 0x8f, 0xf7, 0x54, 0x5f, 0x9a, 0x55, 0x4b, 0x5d, + 0x92, 0x2d, 0xdd, 0x9c, 0x06, 0x46, 0x6e, 0x1a, 0x22, 0x30, 0x14, + 0x60, 0xf5, 0x4b, 0x75, 0x30, 0xd7, 0x4e, 0x61, 0x64, 0x61, 0xba, + 0x56, 0x05, 0xb4, 0x4e, 0x49, 0xb4, 0x2a, 0xa2, 0x95, 0xa1, 0x69, + 0xa5, 0xc7, 0x55, 0x72, 0x34, 0xe2, 0x4b, 0x68, 0x9d, 0x0e, 0xaa, + 0xd6, 0x81, 0x98, 0xfa, 0x5a, 0x83, 0xed, 0xdb, 0x5a, 0xd6, 0x6c, + 0xc4, 0x41, 0x33, 0xdf, 0x12, 0x18, 0x0a, 0x30, 0x1a, 0xcc, 0x5e, + 0x2d, 0xb2, 0x56, 0x23, 0x56, 0x42, 0xeb, 0x8c, 0x44, 0xeb, 0x65, + 0xb4, 0x7e, 0xd3, 0xb4, 0x46, 0x5d, 0xca, 0xec, 0xd0, 0x0a, 0x47, + 0xeb, 0x6c, 0x50, 0xdf, 0x3a, 0x93, 0x73, 0x8a, 0x52, 0xb2, 0x79, + 0x5e, 0x75, 0x54, 0x35, 0x8f, 0xa9, 0xe5, 0xfb, 0x21, 0x59, 0x60, + 0x28, 0xc0, 0xde, 0x2e, 0x1b, 0x21, 0xf4, 0x2d, 0xb2, 0x30, 0x5d, + 0xab, 0x32, 0x5a, 0xe7, 0x24, 0x5a, 0xaf, 0xa0, 0x75, 0x5e, 0xd3, + 0x5a, 0xdc, 0xb3, 0xbd, 0x43, 0x2b, 0x02, 0xad, 0x0b, 0x41, 0xd5, + 0xfa, 0x79, 0x7b, 0x59, 0x75, 0xda, 0xe6, 0xfc, 0xea, 0xf8, 0xdf, + 0xea, 0x9b, 0x5a, 0x2d, 0xab, 0xd6, 0x13, 0x18, 0x0a, 0x30, 0x16, + 0x2a, 0xed, 0xd5, 0x22, 0x0b, 0xd3, 0xb5, 0xaa, 0xa0, 0x75, 0x51, + 0xa2, 0x15, 0x89, 0xd6, 0x25, 0x97, 0x57, 0xe2, 0xab, 0x68, 0x5d, + 0x0e, 0xae, 0x56, 0x60, 0xd8, 0x5c, 0xdc, 0x2d, 0xbf, 0x6a, 0x7f, + 0x25, 0x9e, 0xbc, 0x19, 0xa6, 0xda, 0x99, 0x76, 0xfd, 0x0b, 0xb0, + 0x8b, 0xb5, 0x22, 0xc5, 0x6a, 0x05, 0xb2, 0x30, 0x5d, 0xab, 0x2a, + 0x5a, 0x57, 0x24, 0x5a, 0xd5, 0xd0, 0xfa, 0x5d, 0xd3, 0x4a, 0x2a, + 0x57, 0xdd, 0xa1, 0x55, 0x1d, 0xad, 0xab, 0xc2, 0xc4, 0x86, 0xee, + 0xfd, 0x7a, 0xcb, 0xc6, 0xea, 0xa8, 0x1a, 0x35, 0x55, 0xee, 0x64, + 0x0c, 0xa6, 0xac, 0xe8, 0x2e, 0x30, 0x66, 0xa9, 0xb0, 0x1e, 0xef, + 0xb5, 0x37, 0x27, 0x36, 0x30, 0xb2, 0x30, 0x5d, 0xab, 0x06, 0x5a, + 0xd7, 0x24, 0x5a, 0x35, 0xd1, 0xba, 0xae, 0x69, 0x7d, 0x92, 0x50, + 0xd4, 0xa1, 0x55, 0x0b, 0xad, 0x3f, 0x82, 0xaa, 0xc5, 0x1a, 0x15, + 0x23, 0x7a, 0xab, 0xb9, 0xf9, 0xcd, 0x6a, 0x5d, 0x4b, 0xd9, 0xe9, + 0xb7, 0x33, 0x2a, 0x03, 0x73, 0x8e, 0xf2, 0xda, 0x02, 0xa7, 0x39, + 0xca, 0xd7, 0x46, 0xeb, 0x86, 0x44, 0xcb, 0x8f, 0xd6, 0x4d, 0x97, + 0x6a, 0x29, 0x68, 0xdd, 0x12, 0xaa, 0xc5, 0x5d, 0x0e, 0x23, 0xf5, + 0xd1, 0x82, 0x6d, 0xcd, 0xca, 0xc0, 0x2e, 0xdf, 0xcf, 0xa7, 0xda, + 0x19, 0x95, 0x81, 0xd9, 0xa7, 0x81, 0x30, 0xb2, 0xd6, 0x34, 0x50, + 0x45, 0xeb, 0xb6, 0x44, 0xab, 0x0e, 0x5a, 0x77, 0x5c, 0x26, 0x36, + 0x75, 0xd1, 0xfa, 0x33, 0xa8, 0x5a, 0x39, 0x0a, 0x1c, 0xd3, 0x2a, + 0x63, 0xef, 0x5b, 0x43, 0xdf, 0x8c, 0x52, 0xec, 0x8c, 0xca, 0xc0, + 0x9c, 0xd5, 0x22, 0x6b, 0x55, 0xeb, 0x35, 0xb4, 0xee, 0x4a, 0xb4, + 0x5e, 0x47, 0xeb, 0x2f, 0x4d, 0xeb, 0x64, 0x78, 0x98, 0x43, 0xab, + 0x1e, 0x5a, 0xf7, 0x82, 0x86, 0x53, 0xfa, 0xc7, 0xa1, 0x99, 0x1d, + 0xd5, 0xe4, 0x0e, 0x21, 0x66, 0xdf, 0xda, 0xb3, 0x31, 0x46, 0x60, + 0x54, 0x06, 0x66, 0xdf, 0xb8, 0x33, 0xfa, 0x96, 0x55, 0xad, 0xff, + 0xa0, 0x75, 0x5f, 0xa2, 0x55, 0x1f, 0xad, 0x07, 0x9a, 0xd6, 0xb4, + 0x26, 0x15, 0x1d, 0x5a, 0x0d, 0xd0, 0x7a, 0xa8, 0x69, 0x7d, 0x73, + 0xb9, 0x90, 0x79, 0x8b, 0xf1, 0x57, 0xcc, 0x76, 0x6d, 0x55, 0xd9, + 0x3e, 0x9c, 0xb6, 0x58, 0xfb, 0x50, 0x60, 0x27, 0x67, 0x54, 0x51, + 0x61, 0x95, 0x06, 0x9f, 0x57, 0x8c, 0x2c, 0x8c, 0x2c, 0x4c, 0xd7, + 0x7a, 0x03, 0xad, 0xff, 0x4a, 0xb4, 0xa2, 0xd0, 0x7a, 0xe4, 0xa2, + 0xd5, 0x10, 0xad, 0xc7, 0xc2, 0xb8, 0x45, 0x65, 0x18, 0x12, 0x77, + 0x47, 0x47, 0x9a, 0x33, 0x51, 0x58, 0x97, 0x45, 0x9b, 0x04, 0x46, + 0x83, 0xc1, 0xb8, 0xf9, 0xb2, 0x8f, 0x5b, 0x64, 0xad, 0x1b, 0xb2, + 0x37, 0xd1, 0xfa, 0x5b, 0xa2, 0xd5, 0x08, 0xad, 0x27, 0x2e, 0xb7, + 0x18, 0x8d, 0xd1, 0xf2, 0x78, 0xd1, 0x1a, 0xdf, 0xe9, 0x66, 0x8a, + 0x51, 0x99, 0x6d, 0x77, 0x3b, 0x6a, 0x33, 0xd1, 0xaf, 0x67, 0x97, + 0x16, 0x66, 0x10, 0x76, 0x66, 0xcc, 0x20, 0x98, 0x89, 0x1a, 0x59, + 0x18, 0x59, 0x6b, 0x76, 0xda, 0x04, 0x2d, 0xaf, 0x37, 0x58, 0xab, + 0x29, 0x5a, 0x21, 0x5e, 0xfd, 0x52, 0xdd, 0xcb, 0xa1, 0xd5, 0x0c, + 0x2d, 0x5f, 0x90, 0xd6, 0xd1, 0x05, 0x21, 0x2a, 0x0d, 0x36, 0xf7, + 0x8d, 0x5e, 0xa6, 0x56, 0x6c, 0xd1, 0xf2, 0x02, 0x43, 0x01, 0xc6, + 0x2d, 0xac, 0x5d, 0x8b, 0xac, 0xb5, 0x62, 0x13, 0x8d, 0x56, 0xa8, + 0x44, 0xab, 0x39, 0x5a, 0x99, 0xbc, 0xf2, 0x6a, 0xb5, 0x40, 0x2b, + 0x73, 0x90, 0x56, 0xb7, 0x0a, 0xa1, 0x4a, 0x91, 0xab, 0xc7, 0x85, + 0x6a, 0x4d, 0x8b, 0xe8, 0x2f, 0x30, 0x14, 0x60, 0xac, 0xce, 0xd8, + 0xb5, 0xc8, 0x5a, 0x2b, 0x36, 0x2d, 0xd1, 0x7a, 0x46, 0xa2, 0xd5, + 0x0a, 0xad, 0x2c, 0x2e, 0x5a, 0xad, 0xd1, 0xca, 0xea, 0xb5, 0xef, + 0xf9, 0x18, 0xc3, 0x29, 0x0a, 0xf6, 0x2e, 0x3f, 0xf0, 0xc1, 0x5f, + 0x7e, 0x3b, 0x43, 0x01, 0x86, 0x82, 0x91, 0x35, 0x86, 0x53, 0x4b, + 0xab, 0x0d, 0x5a, 0xd9, 0x24, 0x5a, 0x6d, 0xd1, 0x0a, 0xd3, 0xb4, + 0x8a, 0x55, 0x7a, 0xde, 0xa1, 0xd5, 0x0e, 0xad, 0xec, 0x5e, 0xe7, + 0xcd, 0x3e, 0xdd, 0x96, 0xc5, 0xc6, 0xff, 0xb6, 0xcd, 0x6d, 0x6a, + 0x15, 0x0f, 0xdb, 0x22, 0x30, 0x14, 0x60, 0x49, 0x65, 0x73, 0x0b, + 0x07, 0x0e, 0xc8, 0xc2, 0x74, 0xad, 0xf6, 0x68, 0xe5, 0x90, 0x68, + 0x75, 0x40, 0x2b, 0xa7, 0xa6, 0x35, 0x6c, 0xe6, 0x24, 0xc7, 0x34, + 0xb0, 0x23, 0x5a, 0xcf, 0x7a, 0x85, 0x19, 0x44, 0xfe, 0x49, 0x69, + 0xeb, 0x17, 0x0d, 0xd5, 0xf6, 0x77, 0x02, 0xff, 0x6e, 0xee, 0xf9, + 0x70, 0x3b, 0x61, 0x67, 0xec, 0xef, 0xc0, 0x18, 0xa3, 0x8c, 0x2c, + 0x8c, 0xac, 0x35, 0x6e, 0x75, 0x42, 0x2b, 0x97, 0x44, 0xeb, 0x2d, + 0xb4, 0x72, 0x7b, 0xe5, 0x8b, 0x94, 0x6f, 0xa3, 0x95, 0x47, 0xd3, + 0xba, 0x51, 0xb3, 0xb0, 0xb9, 0x5d, 0xfe, 0xb0, 0xfc, 0x58, 0xa5, + 0xf1, 0xbc, 0x71, 0xe6, 0x1a, 0x3c, 0x8c, 0x75, 0x52, 0x3b, 0xa3, + 0x32, 0x30, 0xd6, 0xe0, 0x8d, 0x2c, 0x8c, 0xac, 0xb5, 0x2e, 0xff, + 0x0e, 0x5a, 0x79, 0x25, 0x5a, 0x31, 0x68, 0xe5, 0x73, 0xa9, 0xd6, + 0xbb, 0x68, 0xe5, 0x17, 0xbb, 0x7c, 0xa0, 0x32, 0xab, 0x5e, 0x69, + 0xaa, 0x55, 0xe6, 0x83, 0x7c, 0xad, 0xcc, 0x6a, 0xe5, 0x78, 0x18, + 0x27, 0x30, 0x2a, 0x03, 0xa3, 0x32, 0x46, 0x16, 0x46, 0xd6, 0xaa, + 0x56, 0x67, 0xb4, 0x9e, 0x93, 0x68, 0xc5, 0xa2, 0x55, 0xc0, 0xa5, + 0x5a, 0x5d, 0xd0, 0x2a, 0xa8, 0x69, 0x1d, 0xd8, 0x15, 0xad, 0x35, + 0xc4, 0x90, 0xc8, 0xc7, 0x4a, 0xee, 0xa2, 0x3d, 0xd4, 0x42, 0x15, + 0x47, 0xf8, 0xf3, 0xbe, 0x94, 0xa1, 0x18, 0x8c, 0xfd, 0x1d, 0x3b, + 0xd3, 0x0e, 0x1c, 0x04, 0x18, 0xb3, 0x08, 0x23, 0x0b, 0x23, 0x0b, + 0xd3, 0xb5, 0xba, 0xa2, 0x55, 0x48, 0xa2, 0xd5, 0x0d, 0xad, 0xe7, + 0xbd, 0xf2, 0xb5, 0xd3, 0xee, 0x68, 0x15, 0x16, 0xfa, 0xd6, 0x89, + 0xd3, 0xb9, 0xb5, 0xfd, 0x66, 0xfb, 0x96, 0x26, 0x6c, 0x6e, 0xae, + 0x55, 0x02, 0xe3, 0x42, 0x03, 0xb3, 0x6f, 0x73, 0xc2, 0xc8, 0x5a, + 0xdb, 0x9c, 0x3d, 0xd0, 0x2a, 0x22, 0xd1, 0xea, 0x89, 0xd6, 0x0b, + 0x2e, 0x5a, 0xbd, 0xd0, 0x2a, 0x2a, 0x68, 0x19, 0x7d, 0xeb, 0xda, + 0xa9, 0xb7, 0x15, 0xa3, 0xc1, 0x60, 0xf3, 0xd2, 0x27, 0x09, 0x8c, + 0xca, 0xc0, 0x12, 0x1b, 0x8d, 0x51, 0xec, 0x17, 0x1f, 0xb2, 0x30, + 0x5d, 0xab, 0x37, 0x5a, 0xc5, 0x24, 0x5a, 0x7d, 0xd0, 0x2a, 0xae, + 0xf7, 0xad, 0x43, 0x37, 0x1c, 0x5a, 0x7d, 0xd1, 0x2a, 0xe1, 0x75, + 0xee, 0x62, 0x74, 0xaf, 0xbd, 0x4a, 0x39, 0x17, 0x79, 0xde, 0xff, + 0x67, 0xf3, 0x83, 0xe6, 0x2e, 0x46, 0xfb, 0xa4, 0x83, 0x02, 0xbb, + 0x38, 0xf5, 0x8e, 0x02, 0xe3, 0x70, 0x81, 0x91, 0x85, 0x91, 0xb5, + 0x0e, 0x1c, 0xf4, 0x43, 0xab, 0xa4, 0x44, 0xab, 0x3f, 0x5a, 0xa5, + 0x34, 0xad, 0xdb, 0x43, 0x3c, 0x8e, 0x71, 0xeb, 0x3d, 0xb4, 0x4a, + 0x0b, 0x7d, 0x0b, 0x05, 0xee, 0xf5, 0xa6, 0xd6, 0x7b, 0x5e, 0x35, + 0x5e, 0x75, 0x30, 0xba, 0xb1, 0x9d, 0x51, 0x19, 0xd8, 0x96, 0xf7, + 0x6a, 0xa8, 0xf6, 0xbe, 0x45, 0x16, 0xa6, 0x6b, 0xc5, 0xa1, 0x55, + 0x46, 0xa2, 0x35, 0x00, 0xad, 0xb2, 0xba, 0xd6, 0xea, 0x0c, 0x47, + 0xb5, 0xe2, 0xd1, 0x2a, 0xe7, 0xb5, 0x4f, 0x6c, 0x50, 0xa8, 0x9c, + 0xf3, 0x88, 0x56, 0x19, 0x63, 0x9d, 0x14, 0xb6, 0x61, 0xf6, 0x7d, + 0x81, 0x51, 0x19, 0x18, 0x95, 0x31, 0xb2, 0x30, 0xb2, 0x56, 0xb5, + 0x12, 0xd0, 0x7a, 0x51, 0xa2, 0x35, 0x10, 0xad, 0xf2, 0x2e, 0xd5, + 0x4a, 0x44, 0xab, 0x42, 0x90, 0x16, 0x17, 0x10, 0x96, 0xd8, 0x8c, + 0x0d, 0x60, 0x58, 0x52, 0x85, 0xc5, 0x7e, 0x3b, 0xa3, 0x32, 0xb0, + 0x6c, 0xdf, 0x36, 0x51, 0x8d, 0xac, 0x71, 0xf1, 0x81, 0xe9, 0x5a, + 0x83, 0xd0, 0xaa, 0x28, 0xd1, 0x1a, 0x8c, 0xd6, 0x4b, 0x2e, 0xd5, + 0x1a, 0x82, 0x56, 0xa5, 0x20, 0xad, 0x5a, 0xbb, 0x54, 0xf5, 0x8b, + 0xef, 0xee, 0x09, 0xd5, 0x1a, 0x91, 0x2b, 0x5a, 0x60, 0x54, 0x06, + 0x36, 0x6d, 0x6e, 0xb4, 0x50, 0x2d, 0xb2, 0x30, 0x5d, 0x6b, 0x28, + 0x5a, 0x2f, 0x4b, 0xb4, 0x86, 0xa1, 0x15, 0xae, 0x69, 0x55, 0xae, + 0x34, 0xdd, 0xa1, 0xf5, 0x3e, 0x5a, 0x95, 0x83, 0x66, 0x10, 0x31, + 0x0b, 0xde, 0x55, 0xd2, 0xd3, 0xc3, 0xd5, 0xa3, 0x73, 0x92, 0xcc, + 0xa5, 0x11, 0x2e, 0x34, 0x76, 0xc6, 0xa2, 0x11, 0x8c, 0x05, 0x49, + 0x23, 0x0b, 0x23, 0x6b, 0x2d, 0x52, 0x0e, 0x47, 0xeb, 0x15, 0x89, + 0xd6, 0x07, 0x68, 0x45, 0xb8, 0x0c, 0xa7, 0x23, 0xd0, 0xaa, 0xe2, + 0xb5, 0xaf, 0x34, 0x37, 0x6d, 0x93, 0x98, 0x76, 0xa8, 0xfc, 0x33, + 0xda, 0xde, 0xe1, 0xf4, 0xb2, 0x7a, 0x00, 0xd6, 0x7b, 0x72, 0x61, + 0x81, 0xb1, 0x53, 0x06, 0x63, 0xef, 0xd0, 0xc8, 0xc2, 0xc8, 0x5a, + 0xfb, 0x89, 0x23, 0xd1, 0x8a, 0x94, 0x68, 0x8d, 0x42, 0xeb, 0x55, + 0x97, 0xbe, 0xf5, 0x21, 0x5a, 0x55, 0x85, 0x57, 0x22, 0x95, 0xb9, + 0xbc, 0xa9, 0x8d, 0xb6, 0xbf, 0x63, 0x3f, 0x70, 0x10, 0xf3, 0xb8, + 0x9b, 0xc0, 0xe8, 0x47, 0x30, 0xf6, 0x77, 0xec, 0xaf, 0x44, 0xb2, + 0xd6, 0x9e, 0xcf, 0x68, 0xb4, 0xaa, 0x49, 0xb4, 0xc6, 0xa0, 0x55, + 0xfd, 0xe9, 0xb8, 0xd5, 0xcf, 0x51, 0xad, 0xb1, 0x68, 0xd5, 0xf0, + 0xda, 0x57, 0x03, 0x8d, 0xd9, 0x29, 0x37, 0xed, 0xbd, 0x0f, 0x46, + 0x98, 0x5a, 0xa9, 0x45, 0xb3, 0x08, 0x8c, 0x11, 0x1d, 0xc6, 0x62, + 0xb7, 0x91, 0x85, 0x91, 0xb5, 0x16, 0xc0, 0x3f, 0x42, 0xab, 0xa6, + 0x44, 0xeb, 0x63, 0xb4, 0x6a, 0x69, 0x5a, 0x9d, 0xb6, 0x8d, 0x76, + 0x68, 0x8d, 0x43, 0xab, 0xb6, 0xa6, 0xf5, 0x24, 0x62, 0x71, 0x2a, + 0x3f, 0x60, 0x7f, 0x87, 0x39, 0x13, 0x87, 0x39, 0x8d, 0x0b, 0x0d, + 0xec, 0xc1, 0xc8, 0xa5, 0x02, 0x43, 0x01, 0xc6, 0xd8, 0x65, 0x64, + 0x61, 0x64, 0xad, 0x4b, 0xf5, 0x27, 0x68, 0xf9, 0x25, 0x5a, 0xe3, + 0xd1, 0x52, 0x34, 0xad, 0xed, 0x45, 0xfe, 0x74, 0x68, 0x7d, 0x8a, + 0x96, 0x1a, 0xd4, 0x88, 0x55, 0x1e, 0xe4, 0xd1, 0x56, 0x67, 0x78, + 0x65, 0x19, 0xac, 0xdb, 0xf4, 0xd2, 0x02, 0xd3, 0x26, 0xc8, 0x01, + 0xc6, 0xea, 0x8c, 0xbd, 0x11, 0xc9, 0x5a, 0x2b, 0x36, 0x9f, 0xa1, + 0x55, 0x47, 0xa2, 0xf5, 0x39, 0x5a, 0x75, 0x5d, 0x1a, 0x71, 0x02, + 0x5a, 0xaf, 0x05, 0x69, 0x8d, 0x8d, 0x6f, 0xa6, 0xf5, 0x23, 0x7b, + 0x23, 0xbe, 0x3f, 0xa5, 0x95, 0xc0, 0x50, 0x80, 0x39, 0xfb, 0x16, + 0x59, 0xab, 0x6f, 0x4d, 0x44, 0xeb, 0x75, 0x89, 0xd6, 0x24, 0xb4, + 0xea, 0xe9, 0x03, 0x44, 0x54, 0x94, 0xa3, 0xcb, 0x4f, 0x46, 0xeb, + 0x3f, 0x41, 0x5a, 0x0c, 0x89, 0x6b, 0xd2, 0x92, 0xcc, 0xbd, 0x43, + 0x6d, 0x69, 0x64, 0xf3, 0x03, 0xbf, 0x9d, 0xf1, 0xaa, 0x83, 0x95, + 0xbd, 0xf0, 0xb2, 0x62, 0x64, 0x61, 0x64, 0x61, 0xba, 0xd6, 0x17, + 0x68, 0xd5, 0x97, 0x68, 0x4d, 0x41, 0xab, 0x81, 0xcb, 0x2b, 0x71, + 0x2a, 0x5a, 0x6f, 0x04, 0x69, 0x2d, 0x3b, 0x97, 0x4b, 0xdd, 0xb7, + 0xed, 0x8a, 0xdf, 0xfe, 0x4a, 0x2c, 0x53, 0xa2, 0x84, 0xc0, 0x50, + 0x80, 0x71, 0xa1, 0xb1, 0x6b, 0x91, 0xb5, 0x2e, 0x3e, 0x5f, 0xa2, + 0x15, 0x25, 0xd1, 0xfa, 0x0a, 0xad, 0x86, 0x2e, 0xe3, 0xd6, 0x34, + 0xb4, 0xde, 0x0c, 0x1a, 0xe5, 0x99, 0x9c, 0x70, 0xfd, 0x33, 0xfa, + 0x11, 0xec, 0x8b, 0x0b, 0xcb, 0x04, 0xc6, 0x3f, 0x61, 0xce, 0x6b, + 0x22, 0x59, 0x4b, 0xeb, 0x6b, 0xb4, 0x1a, 0x49, 0xb4, 0xa6, 0xa3, + 0xd5, 0xd8, 0xa5, 0x5a, 0x33, 0xd0, 0x6a, 0x22, 0x54, 0x8b, 0x7d, + 0xe9, 0xea, 0x27, 0xb7, 0xfa, 0x0f, 0x4e, 0xae, 0x66, 0xce, 0xdb, + 0x61, 0xc3, 0x5b, 0x97, 0x57, 0xec, 0x8c, 0xca, 0xc0, 0x0e, 0xd5, + 0x9f, 0x2a, 0x54, 0x8b, 0x2c, 0x4c, 0xd7, 0x9a, 0x89, 0x56, 0x53, + 0x89, 0xd6, 0x2c, 0xb4, 0x9a, 0xb9, 0x68, 0xcd, 0x46, 0x2b, 0x5a, + 0xa8, 0x16, 0x0a, 0x9c, 0xc1, 0xe2, 0xd7, 0x1b, 0x0d, 0x06, 0x5b, + 0x78, 0xbb, 0xab, 0xc0, 0x50, 0x80, 0xed, 0xe9, 0xde, 0xd2, 0xac, + 0x16, 0x8c, 0x2c, 0x4c, 0xd7, 0xfa, 0x06, 0xad, 0xe6, 0x12, 0xad, + 0x39, 0x68, 0xb5, 0xf0, 0xea, 0x4b, 0x23, 0x4b, 0x1d, 0x8d, 0x38, + 0x17, 0xad, 0x96, 0x41, 0x7d, 0x8b, 0x89, 0x6f, 0xc4, 0x9e, 0x75, + 0x8a, 0x71, 0x36, 0x1e, 0x76, 0x63, 0x52, 0xaa, 0xc0, 0x50, 0x80, + 0x71, 0x42, 0xc4, 0x5e, 0x2d, 0xb2, 0xd6, 0xa9, 0x91, 0x6f, 0xd1, + 0x6a, 0x25, 0xd1, 0x9a, 0x87, 0x56, 0x6b, 0x4d, 0xab, 0x57, 0xf2, + 0x66, 0x87, 0xd6, 0x7c, 0xb4, 0xda, 0x08, 0xd7, 0x44, 0xfa, 0x11, + 0x87, 0x9d, 0xbe, 0x59, 0xbe, 0x54, 0x29, 0x71, 0x25, 0xc5, 0xec, + 0x5b, 0xdc, 0xd8, 0xdb, 0x19, 0xfd, 0x08, 0xc6, 0x59, 0x2d, 0x23, + 0x0b, 0x23, 0x6b, 0x9d, 0xdf, 0x5a, 0x80, 0x56, 0x5b, 0x89, 0xd6, + 0x42, 0xb4, 0xda, 0x69, 0x5a, 0x8d, 0x4e, 0xaf, 0x71, 0x68, 0x2d, + 0x42, 0xab, 0xbd, 0x30, 0x83, 0x40, 0x81, 0xbb, 0x17, 0x56, 0xf5, + 0x4a, 0xe5, 0x5a, 0x61, 0x6a, 0xdd, 0x9a, 0x9d, 0x28, 0x30, 0xd6, + 0x50, 0x61, 0x34, 0x98, 0x79, 0x43, 0x16, 0x60, 0x64, 0xad, 0x46, + 0xfc, 0x0e, 0xad, 0x0e, 0x12, 0xad, 0xc5, 0x68, 0x75, 0x74, 0xe9, + 0x5b, 0x4b, 0xd0, 0xea, 0x14, 0x34, 0x69, 0x9e, 0x78, 0xf7, 0x91, + 0x62, 0x1f, 0x0c, 0x60, 0x75, 0x93, 0x73, 0x0a, 0x03, 0x04, 0x27, + 0x44, 0x60, 0xf6, 0x01, 0x02, 0x46, 0xd6, 0x7a, 0x25, 0x2e, 0x45, + 0xeb, 0x2d, 0x89, 0xd6, 0x32, 0xb4, 0xde, 0xd6, 0xb4, 0x76, 0xbd, + 0x7e, 0xc9, 0x51, 0xad, 0xe5, 0x68, 0xbd, 0x13, 0x34, 0xdf, 0x0a, + 0x5b, 0x53, 0x44, 0xf5, 0x4d, 0x38, 0x54, 0xdb, 0x38, 0xbf, 0x0c, + 0xbb, 0x92, 0x14, 0x2e, 0x30, 0x14, 0x60, 0x89, 0xdd, 0x7f, 0xf5, + 0x1b, 0x59, 0x18, 0x59, 0x98, 0xae, 0xf5, 0x3d, 0x5a, 0x31, 0x12, + 0xad, 0x15, 0x68, 0xbd, 0xeb, 0x95, 0xaf, 0x06, 0xae, 0x44, 0xab, + 0x73, 0x90, 0x16, 0xcf, 0x18, 0x05, 0xfb, 0xa6, 0xf0, 0x9c, 0x8f, + 0x9e, 0x57, 0xed, 0x0c, 0x05, 0x98, 0x53, 0x8b, 0xac, 0xa5, 0xb5, + 0x0a, 0xad, 0x58, 0x89, 0xd6, 0x6a, 0xb4, 0xba, 0xb8, 0x54, 0x6b, + 0x0d, 0x5a, 0x5d, 0x35, 0xad, 0xe2, 0xa5, 0xb6, 0x9b, 0x0b, 0x49, + 0xbc, 0x8b, 0xa0, 0x63, 0xee, 0xcc, 0x7e, 0xe3, 0x50, 0x14, 0x8c, + 0xf7, 0x5d, 0xd8, 0x19, 0x0a, 0xb0, 0xda, 0x8d, 0x2f, 0xfa, 0x8d, + 0x2c, 0x8c, 0x2c, 0x4c, 0xd7, 0x5a, 0x8b, 0x56, 0x37, 0x89, 0xd6, + 0x0f, 0x68, 0x75, 0x77, 0xd1, 0x5a, 0x87, 0x56, 0x0f, 0xa1, 0x5a, + 0x4c, 0x62, 0xb8, 0xae, 0x31, 0x74, 0x1a, 0x0d, 0x06, 0xfb, 0x6d, + 0xc4, 0x2a, 0xbf, 0x9d, 0xa1, 0x00, 0x63, 0xe8, 0xb4, 0x57, 0x8b, + 0xac, 0x35, 0x9c, 0x26, 0xa1, 0xd5, 0x53, 0xa2, 0x95, 0x8c, 0x56, + 0x2f, 0xaf, 0xbe, 0x15, 0x75, 0xdc, 0xa1, 0xb5, 0x1e, 0xad, 0xde, + 0xc2, 0x00, 0x41, 0x65, 0xca, 0x87, 0x46, 0x28, 0xf7, 0x17, 0x64, + 0x98, 0xb7, 0xaa, 0xda, 0x11, 0xd9, 0x2d, 0x09, 0x02, 0x43, 0x01, + 0x56, 0xf8, 0x6e, 0x1d, 0x73, 0x80, 0x80, 0x91, 0x85, 0xe9, 0x5a, + 0x1b, 0xd0, 0xea, 0x23, 0xd1, 0x4a, 0x41, 0xab, 0xaf, 0xcb, 0x35, + 0x71, 0x23, 0x5a, 0xfd, 0x84, 0x46, 0x7c, 0x1c, 0xde, 0x46, 0x89, + 0x39, 0x3a, 0xd1, 0x5f, 0xed, 0x44, 0x09, 0xbf, 0xb1, 0x06, 0x0f, + 0x7b, 0xc7, 0x53, 0x42, 0xb1, 0x33, 0xde, 0x65, 0x00, 0xbb, 0xbe, + 0xb1, 0xbb, 0xd9, 0x88, 0x30, 0xb2, 0x30, 0x5d, 0x2b, 0x15, 0xad, + 0xfe, 0x12, 0xad, 0x34, 0xb4, 0xde, 0xd3, 0xb4, 0xba, 0x8c, 0x1b, + 0xe2, 0xe8, 0xf2, 0x9b, 0xd0, 0x8a, 0x0b, 0xd2, 0x62, 0xc9, 0xff, + 0xa5, 0x39, 0x61, 0xfe, 0x66, 0x9f, 0x0f, 0x37, 0xb5, 0x18, 0xa3, + 0xec, 0x0c, 0x05, 0xd8, 0xb9, 0x91, 0xcd, 0x05, 0x2d, 0xb2, 0x30, + 0x5d, 0x6b, 0x33, 0x5a, 0x03, 0x24, 0x5a, 0x5b, 0xd0, 0x8a, 0x77, + 0xa9, 0xd6, 0x56, 0xb4, 0x12, 0xbc, 0xf6, 0x63, 0x65, 0x2c, 0x1a, + 0x95, 0xfc, 0x3c, 0x93, 0x72, 0x62, 0xfd, 0x18, 0xf3, 0x9e, 0x10, + 0x76, 0xb9, 0x92, 0x22, 0x30, 0xed, 0x76, 0x22, 0xc0, 0xe6, 0x36, + 0x4c, 0xf7, 0x1b, 0x59, 0x18, 0x59, 0x98, 0xae, 0xb5, 0x0d, 0xad, + 0x81, 0x12, 0xad, 0x1f, 0xd1, 0x4a, 0x74, 0xd1, 0xda, 0x8e, 0xd6, + 0x20, 0xaf, 0x7d, 0xcf, 0xe7, 0x56, 0x85, 0x67, 0xb4, 0x0d, 0x92, + 0x49, 0xd5, 0x13, 0x4c, 0x05, 0xd8, 0xcd, 0xb1, 0x1d, 0x05, 0x96, + 0x9c, 0xf8, 0x8a, 0xc6, 0xe8, 0xf6, 0x46, 0x16, 0x46, 0x16, 0xa6, + 0x6b, 0xed, 0x40, 0x6b, 0xb0, 0x44, 0x6b, 0x27, 0x5a, 0x43, 0x5c, + 0xb4, 0x76, 0xa1, 0x35, 0x54, 0xa8, 0x56, 0xae, 0xd0, 0x7c, 0xea, + 0xe4, 0xd5, 0xa7, 0x94, 0x1d, 0xc7, 0x16, 0xfb, 0x8d, 0xed, 0x72, + 0xd8, 0xa9, 0x6b, 0xf7, 0x04, 0xc6, 0xed, 0x04, 0x8c, 0x93, 0x6d, + 0xe6, 0x21, 0xbc, 0x00, 0x23, 0x6b, 0x9d, 0x76, 0xfb, 0x09, 0xad, + 0x61, 0x12, 0xad, 0xdd, 0x68, 0xbd, 0xef, 0x15, 0x3f, 0x57, 0x7a, + 0x84, 0xca, 0x9b, 0xf2, 0x4f, 0x7a, 0xf2, 0x7b, 0x1a, 0x74, 0xe9, + 0xd7, 0xa7, 0x75, 0x97, 0xb8, 0xf8, 0x2e, 0x83, 0xea, 0xc6, 0xc5, + 0xc5, 0x0c, 0xae, 0xdf, 0x2f, 0xae, 0x4f, 0x4c, 0xbc, 0xb7, 0x9c, + 0x67, 0x8f, 0x2f, 0xbb, 0x27, 0xbb, 0x27, 0xd4, 0xeb, 0xd9, 0xc7, + 0xaa, 0xbe, 0xfe, 0xf6, 0xbd, 0x93, 0x9e, 0xbd, 0xbe, 0x7c, 0x9e, + 0x7c, 0x9e, 0xd0, 0x10, 0x83, 0xee, 0xf7, 0x85, 0x64, 0x0a, 0xcd, + 0xee, 0xc9, 0xa3, 0xfd, 0x30, 0xdd, 0x17, 0x12, 0xf8, 0xab, 0x21, + 0x5e, 0xcf, 0x01, 0x9f, 0xd7, 0x9b, 0xd9, 0xe3, 0x79, 0x21, 0x40, + 0xd9, 0x9a, 0x8b, 0xea, 0x1b, 0xdf, 0x25, 0xae, 0x6f, 0x4c, 0xef, + 0x26, 0x31, 0x7d, 0xba, 0x04, 0x7e, 0xf3, 0x3e, 0x5f, 0x66, 0xcf, + 0x40, 0xed, 0x2f, 0xe6, 0xd4, 0xfe, 0x87, 0xfd, 0xbe, 0x2c, 0x9e, + 0xc0, 0x7f, 0x74, 0xee, 0xd7, 0x2f, 0x2e, 0x36, 0x4c, 0x23, 0x07, + 0x7c, 0x99, 0x3c, 0x3d, 0xfa, 0xc6, 0x76, 0x19, 0xf4, 0x3f, 0xb1, + 0x0f, 0x94, 0xa5 }; -const int default_font_data_len = 26446; +const int default_font_data_len = 29252; diff --git a/panda/src/text/config_text.cxx b/panda/src/text/config_text.cxx index d3efde74d2..3a7e7e2df2 100644 --- a/panda/src/text/config_text.cxx +++ b/panda/src/text/config_text.cxx @@ -24,7 +24,7 @@ #include "dynamicTextFont.h" #include "dynamicTextPage.h" #include "geomTextGlyph.h" -#include "qpgeomTextGlyph.h" +#include "geomTextGlyph.h" #include "unicodeLatinMap.h" #include "pandaSystem.h" @@ -168,10 +168,10 @@ init_libtext() { DynamicTextFont::init_type(); DynamicTextPage::init_type(); GeomTextGlyph::init_type(); - qpGeomTextGlyph::init_type(); + GeomTextGlyph::init_type(); GeomTextGlyph::register_with_read_factory(); - qpGeomTextGlyph::register_with_read_factory(); + GeomTextGlyph::register_with_read_factory(); PandaSystem *ps = PandaSystem::get_global_ptr(); ps->add_system("Freetype"); diff --git a/panda/src/text/dynamicTextGlyph.cxx b/panda/src/text/dynamicTextGlyph.cxx index 1119c54451..89ca9cc777 100644 --- a/panda/src/text/dynamicTextGlyph.cxx +++ b/panda/src/text/dynamicTextGlyph.cxx @@ -22,11 +22,11 @@ #include "dynamicTextPage.h" #include "geomTextGlyph.h" -#include "qpgeomTextGlyph.h" -#include "qpgeomVertexData.h" -#include "qpgeomVertexFormat.h" -#include "qpgeomTriangles.h" -#include "qpgeomVertexWriter.h" +#include "geomTextGlyph.h" +#include "geomVertexData.h" +#include "geomVertexFormat.h" +#include "geomTriangles.h" +#include "geomVertexWriter.h" #include "textureAttrib.h" #include "transparencyAttrib.h" #include "renderState.h" @@ -125,81 +125,45 @@ make_geom(int bitmap_top, int bitmap_left, float advance, float poly_margin, // Create a corresponding triangle pair. We use a pair of indexed // triangles rther than a single triangle strip, to avoid the bad // vertex duplication behavior with lots of two-triangle strips. - if (use_qpgeom) { - PT(qpGeomVertexData) vdata = new qpGeomVertexData - (string(), qpGeomVertexFormat::get_v3t2(), - qpGeom::UH_static); - qpGeomVertexWriter vertex(vdata, InternalName::get_vertex()); - qpGeomVertexWriter texcoord(vdata, InternalName::get_texcoord()); + PT(GeomVertexData) vdata = new GeomVertexData + (string(), GeomVertexFormat::get_v3t2(), + Geom::UH_static); + GeomVertexWriter vertex(vdata, InternalName::get_vertex()); + GeomVertexWriter texcoord(vdata, InternalName::get_texcoord()); + + vertex.add_data3f(left, 0, top); + vertex.add_data3f(left, 0, bottom); + vertex.add_data3f(right, 0, top); + vertex.add_data3f(right, 0, bottom); + + texcoord.add_data2f(uv_left, uv_top); + texcoord.add_data2f(uv_left, uv_bottom); + texcoord.add_data2f(uv_right, uv_top); + texcoord.add_data2f(uv_right, uv_bottom); + + PT(GeomTriangles) tris = new GeomTriangles(Geom::UH_static); + tris->add_vertex(0); + tris->add_vertex(1); + tris->add_vertex(2); + tris->close_primitive(); + tris->add_vertex(2); + tris->add_vertex(1); + tris->add_vertex(3); + tris->close_primitive(); - vertex.add_data3f(left, 0, top); - vertex.add_data3f(left, 0, bottom); - vertex.add_data3f(right, 0, top); - vertex.add_data3f(right, 0, bottom); - - texcoord.add_data2f(uv_left, uv_top); - texcoord.add_data2f(uv_left, uv_bottom); - texcoord.add_data2f(uv_right, uv_top); - texcoord.add_data2f(uv_right, uv_bottom); - - PT(qpGeomTriangles) tris = new qpGeomTriangles(qpGeom::UH_static); - tris->add_vertex(0); - tris->add_vertex(1); - tris->add_vertex(2); - tris->close_primitive(); - tris->add_vertex(2); - tris->add_vertex(1); - tris->add_vertex(3); - tris->close_primitive(); - - PT(qpGeom) geom = new qpGeomTextGlyph(this); - geom->set_vertex_data(vdata); - geom->add_primitive(tris); - - _geom = geom; - - // The above will increment our _geom_count to 1. Reset it back - // down to 0, since our own internal Geom doesn't count. - nassertv(_geom_count == 1); - _geom_count--; - - } else { - PT(Geom) geom = new GeomTextGlyph(this); - _geom = geom; - - // The above will increment our _geom_count to 1. Reset it back - // down to 0, since our own internal Geom doesn't count. - nassertv(_geom_count == 1); - _geom_count--; - - PTA_Vertexf coords; - coords.push_back(Vertexf(left, 0, top)); - coords.push_back(Vertexf(left, 0, bottom)); - coords.push_back(Vertexf(right, 0, top)); - coords.push_back(Vertexf(right, 0, bottom)); - - PTA_TexCoordf texcoords; - texcoords.push_back(TexCoordf(uv_left, uv_top)); - texcoords.push_back(TexCoordf(uv_left, uv_bottom)); - texcoords.push_back(TexCoordf(uv_right, uv_top)); - texcoords.push_back(TexCoordf(uv_right, uv_bottom)); - - PTA_Colorf colors; - colors.push_back(Colorf(1.0f, 1.0f, 1.0f, 1.0f)); - - PTA_int lengths; - lengths.push_back(4); - - geom->set_coords(coords); - geom->set_texcoords(texcoords, G_PER_VERTEX); - geom->set_colors(colors, G_OVERALL); - geom->set_lengths(lengths); - geom->set_num_prims(1); - } - + PT(Geom) geom = new GeomTextGlyph(this); + geom->set_vertex_data(vdata); + geom->add_primitive(tris); + _geom = geom; + + // The above will increment our _geom_count to 1. Reset it back + // down to 0, since our own internal Geom doesn't count. + nassertv(_geom_count == 1); + _geom_count--; + _state = RenderState::make(TextureAttrib::make(_page), TransparencyAttrib::make(TransparencyAttrib::M_alpha)); - + _advance = advance / font_pixels_per_unit; } diff --git a/panda/src/text/geomTextGlyph.I b/panda/src/text/geomTextGlyph.I index b34781c641..18a83cf6ed 100644 --- a/panda/src/text/geomTextGlyph.I +++ b/panda/src/text/geomTextGlyph.I @@ -1,5 +1,5 @@ // Filename: geomTextGlyph.I -// Created by: drose (11Feb02) +// Created by: drose (31Mar05) // //////////////////////////////////////////////////////////////////// // @@ -38,7 +38,7 @@ GeomTextGlyph(DynamicTextGlyph *glyph) : //////////////////////////////////////////////////////////////////// INLINE GeomTextGlyph:: GeomTextGlyph(const GeomTextGlyph ©) : - GeomTristrip(copy), + Geom(copy), _glyph(copy._glyph) { if (_glyph != (DynamicTextGlyph *)NULL) { diff --git a/panda/src/text/geomTextGlyph.cxx b/panda/src/text/geomTextGlyph.cxx index 361ae6456c..2c980943fd 100644 --- a/panda/src/text/geomTextGlyph.cxx +++ b/panda/src/text/geomTextGlyph.cxx @@ -1,5 +1,5 @@ // Filename: geomTextGlyph.cxx -// Created by: drose (11Feb02) +// Created by: drose (31Mar05) // //////////////////////////////////////////////////////////////////// // @@ -33,7 +33,7 @@ TypeHandle GeomTextGlyph::_type_handle; //////////////////////////////////////////////////////////////////// void GeomTextGlyph:: operator = (const GeomTextGlyph ©) { - GeomTristrip::operator = (copy); + Geom::operator = (copy); if (_glyph != copy._glyph) { if (_glyph != (DynamicTextGlyph *)NULL) { _glyph->_geom_count--; @@ -93,8 +93,6 @@ make_GeomTextGlyph(const FactoryParams ¶ms) { parse_params(params, scan, manager); me->fillin(scan, manager); - me->make_dirty(); - me->config(); return me; } diff --git a/panda/src/text/geomTextGlyph.h b/panda/src/text/geomTextGlyph.h index 5706ce972b..f2feb687ef 100644 --- a/panda/src/text/geomTextGlyph.h +++ b/panda/src/text/geomTextGlyph.h @@ -1,5 +1,5 @@ // Filename: geomTextGlyph.h -// Created by: drose (11Feb02) +// Created by: drose (31Mar05) // //////////////////////////////////////////////////////////////////// // @@ -23,19 +23,19 @@ #ifdef HAVE_FREETYPE -#include "geomTristrip.h" +#include "geom.h" #include "dynamicTextGlyph.h" //////////////////////////////////////////////////////////////////// // Class : GeomTextGlyph -// Description : This is a specialization on GeomTristrip for -// containing a triangle strip intended to represent a +// Description : This is a specialization on Geom for containing a +// triangle strip intended to represent a // DynamicTextGlyph. Its sole purpose is to maintain // the geom count on the glyph, so we can determine the // actual usage count on a dynamic glyph (and thus know // when it is safe to recycle the glyph). //////////////////////////////////////////////////////////////////// -class EXPCL_PANDA GeomTextGlyph : public GeomTristrip { +class EXPCL_PANDA GeomTextGlyph : public Geom { public: INLINE GeomTextGlyph(DynamicTextGlyph *glyph); INLINE GeomTextGlyph(const GeomTextGlyph ©); @@ -57,9 +57,9 @@ PUBLISHED: } public: static void init_type() { - GeomTristrip::init_type(); + Geom::init_type(); register_type(_type_handle, "GeomTextGlyph", - GeomTristrip::get_class_type()); + Geom::get_class_type()); } virtual TypeHandle get_type() const { return get_class_type(); diff --git a/panda/src/text/qpgeomTextGlyph.I b/panda/src/text/qpgeomTextGlyph.I deleted file mode 100644 index 2f21757708..0000000000 --- a/panda/src/text/qpgeomTextGlyph.I +++ /dev/null @@ -1,47 +0,0 @@ -// Filename: qpgeomTextGlyph.I -// Created by: drose (31Mar05) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////////////////// -// Function: qpGeomTextGlyph::Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE qpGeomTextGlyph:: -qpGeomTextGlyph(DynamicTextGlyph *glyph) : - _glyph(glyph) -{ - if (_glyph != (DynamicTextGlyph *)NULL) { - _glyph->_geom_count++; - } -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeomTextGlyph::Copy Constructor -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -INLINE qpGeomTextGlyph:: -qpGeomTextGlyph(const qpGeomTextGlyph ©) : - qpGeom(copy), - _glyph(copy._glyph) -{ - if (_glyph != (DynamicTextGlyph *)NULL) { - _glyph->_geom_count++; - } -} diff --git a/panda/src/text/qpgeomTextGlyph.cxx b/panda/src/text/qpgeomTextGlyph.cxx deleted file mode 100644 index f2f7b5376d..0000000000 --- a/panda/src/text/qpgeomTextGlyph.cxx +++ /dev/null @@ -1,101 +0,0 @@ -// Filename: qpgeomTextGlyph.cxx -// Created by: drose (31Mar05) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#include "geomTextGlyph.h" - -#ifdef HAVE_FREETYPE - -#include "datagramIterator.h" -#include "bamReader.h" - -TypeHandle qpGeomTextGlyph::_type_handle; - - -//////////////////////////////////////////////////////////////////// -// Function: qpGeomTextGlyph::Copy Assignment Operator -// Access: Public -// Description: -//////////////////////////////////////////////////////////////////// -void qpGeomTextGlyph:: -operator = (const qpGeomTextGlyph ©) { - qpGeom::operator = (copy); - if (_glyph != copy._glyph) { - if (_glyph != (DynamicTextGlyph *)NULL) { - _glyph->_geom_count--; - } - _glyph = copy._glyph; - if (_glyph != (DynamicTextGlyph *)NULL) { - _glyph->_geom_count++; - } - } -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeomTextGlyph::Destructor -// Access: Public, Virtual -// Description: -//////////////////////////////////////////////////////////////////// -qpGeomTextGlyph:: -~qpGeomTextGlyph() { - if (_glyph != (DynamicTextGlyph *)NULL) { - _glyph->_geom_count--; - } -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeomTextGlyph::make_copy -// Access: Public, Virtual -// Description: Returns a newly-allocated qpGeom that is a shallow copy -// of this one. It will be a different qpGeom pointer, -// but its internal data may or may not be shared with -// that of the original qpGeom. -//////////////////////////////////////////////////////////////////// -qpGeom *qpGeomTextGlyph:: -make_copy() const { - return new qpGeomTextGlyph(*this); -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeomTextGlyph::register_with_factory -// Access: Public, Static -// Description: Factory method to generate a qpGeomTextGlyph object -//////////////////////////////////////////////////////////////////// -void qpGeomTextGlyph:: -register_with_read_factory() { - BamReader::get_factory()->register_factory(get_class_type(), make_qpGeomTextGlyph); -} - -//////////////////////////////////////////////////////////////////// -// Function: qpGeomTextGlyph::make_qpGeomTextGlyph -// Access: Public -// Description: Factory method to generate a qpGeomTextGlyph object -//////////////////////////////////////////////////////////////////// -TypedWritable* qpGeomTextGlyph:: -make_qpGeomTextGlyph(const FactoryParams ¶ms) { - qpGeomTextGlyph *me = new qpGeomTextGlyph((DynamicTextGlyph *)NULL); - DatagramIterator scan; - BamReader *manager; - - parse_params(params, scan, manager); - me->fillin(scan, manager); - me->make_dirty(); - me->config(); - return me; -} - -#endif // HAVE_FREETYPE diff --git a/panda/src/text/qpgeomTextGlyph.h b/panda/src/text/qpgeomTextGlyph.h deleted file mode 100644 index 597e03490b..0000000000 --- a/panda/src/text/qpgeomTextGlyph.h +++ /dev/null @@ -1,77 +0,0 @@ -// Filename: qpgeomTextGlyph.h -// Created by: drose (31Mar05) -// -//////////////////////////////////////////////////////////////////// -// -// PANDA 3D SOFTWARE -// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved -// -// All use of this software is subject to the terms of the Panda 3d -// Software license. You should have received a copy of this license -// along with this source code; you will also find a current copy of -// the license at http://etc.cmu.edu/panda3d/docs/license/ . -// -// To contact the maintainers of this program write to -// panda3d-general@lists.sourceforge.net . -// -//////////////////////////////////////////////////////////////////// - -#ifndef qpGEOMTEXTGLYPH_H -#define qpGEOMTEXTGLYPH_H - -#include "pandabase.h" - -#ifdef HAVE_FREETYPE - -#include "qpgeom.h" -#include "dynamicTextGlyph.h" - -//////////////////////////////////////////////////////////////////// -// Class : qpGeomTextGlyph -// Description : This is a specialization on Geom for containing a -// triangle strip intended to represent a -// DynamicTextGlyph. Its sole purpose is to maintain -// the geom count on the glyph, so we can determine the -// actual usage count on a dynamic glyph (and thus know -// when it is safe to recycle the glyph). -//////////////////////////////////////////////////////////////////// -class EXPCL_PANDA qpGeomTextGlyph : public qpGeom { -public: - INLINE qpGeomTextGlyph(DynamicTextGlyph *glyph); - INLINE qpGeomTextGlyph(const qpGeomTextGlyph ©); - void operator = (const qpGeomTextGlyph ©); - virtual ~qpGeomTextGlyph(); - - virtual qpGeom *make_copy() const; - -private: - PT(DynamicTextGlyph) _glyph; - -public: - static void register_with_read_factory(); - static TypedWritable *make_qpGeomTextGlyph(const FactoryParams ¶ms); - -PUBLISHED: - static TypeHandle get_class_type() { - return _type_handle; - } -public: - static void init_type() { - qpGeom::init_type(); - register_type(_type_handle, "qpGeomTextGlyph", - qpGeom::get_class_type()); - } - virtual TypeHandle get_type() const { - return get_class_type(); - } - virtual TypeHandle force_init_type() {init_type(); return get_class_type();} - -private: - static TypeHandle _type_handle; -}; - -#include "qpgeomTextGlyph.I" - -#endif // HAVE_FREETYPE - -#endif // GEOMTEXTGLYPH_H diff --git a/panda/src/text/staticTextFont.cxx b/panda/src/text/staticTextFont.cxx index 8d5017420c..d1a87f6fce 100644 --- a/panda/src/text/staticTextFont.cxx +++ b/panda/src/text/staticTextFont.cxx @@ -20,10 +20,9 @@ #include "config_text.h" #include "geom.h" -#include "geomPoint.h" #include "geomNode.h" -#include "qpgeomVertexReader.h" -#include "qpgeomPoints.h" +#include "geomVertexReader.h" +#include "geomPoints.h" #include "renderState.h" #include "dcast.h" @@ -186,8 +185,7 @@ get_glyph(int character, const TextGlyph *&glyph) { // those two Geoms. //////////////////////////////////////////////////////////////////// void StaticTextFont:: -find_character_gsets(PandaNode *root, CPT(Geom) &ch, - const GeomPoint *&dot1, CPT(qpGeom) &dot2, +find_character_gsets(PandaNode *root, CPT(Geom) &ch, CPT(Geom) &dot, const RenderState *&state, const RenderState *net_state) { CPT(RenderState) next_net_state = net_state->compose(root->get_state()); @@ -196,28 +194,18 @@ find_character_gsets(PandaNode *root, CPT(Geom) &ch, for (int i = 0; i < geode->get_num_geoms(); i++) { const Geom *geom = geode->get_geom(i); - if (geom->is_qpgeom()) { - CPT(qpGeom) qpgeom = DCAST(qpGeom, geom); - bool found_points = false; - for (int j = 0; j < qpgeom->get_num_primitives() && !found_points; j++) { - const qpGeomPrimitive *primitive = qpgeom->get_primitive(j); - if (primitive->is_of_type(qpGeomPoints::get_class_type())) { - dot2 = qpgeom; - found_points = true; - } + bool found_points = false; + for (int j = 0; j < geom->get_num_primitives() && !found_points; j++) { + const GeomPrimitive *primitive = geom->get_primitive(j); + if (primitive->is_of_type(GeomPoints::get_class_type())) { + dot = geom; + found_points = true; } - if (!found_points) { - // If it doesn't have any points, it must be the regular - // letter. - ch = geom; - state = next_net_state->compose(geode->get_geom_state(i)); - } - - } else if (geom->is_of_type(GeomPoint::get_class_type())) { - dot1 = DCAST(GeomPoint, geom); - - } else { + } + if (!found_points) { + // If it doesn't have any points, it must be the regular + // letter. ch = geom; state = next_net_state->compose(geode->get_geom_state(i)); } @@ -227,7 +215,7 @@ find_character_gsets(PandaNode *root, CPT(Geom) &ch, PandaNode::Children cr = root->get_children(); int num_children = cr.get_num_children(); for (int i = 0; i < num_children; i++) { - find_character_gsets(cr.get_child(i), ch, dot1, dot2, state, + find_character_gsets(cr.get_child(i), ch, dot, state, next_net_state); } } @@ -259,29 +247,13 @@ find_characters(PandaNode *root, const RenderState *net_state) { if (all_digits) { int character = atoi(name.c_str()); CPT(Geom) ch; - const GeomPoint *dot1 = NULL; - CPT(qpGeom) dot2; + CPT(Geom) dot; const RenderState *state = NULL; - find_character_gsets(root, ch, dot1, dot2, state, next_net_state); - if (dot1 != NULL) { + find_character_gsets(root, ch, dot, state, next_net_state); + if (ch != (Geom *)NULL && dot != (Geom *)NULL) { // Get the first vertex from the "dot" geoset. This will be the // origin of the next character. - PTA_Vertexf alist; - PTA_ushort ilist; - float width; - dot1->get_coords(alist, ilist); - if (ilist.empty()) { - width = alist[0][0]; - } else { - width = alist[ilist[0]][0]; - } - - _glyphs[character] = new TextGlyph(ch, state, width); - - } else if (ch != (Geom *)NULL && dot2 != (qpGeom *)NULL) { - // Get the first vertex from the "dot" geoset. This will be the - // origin of the next character. - qpGeomVertexReader reader(dot2->get_vertex_data(), InternalName::get_vertex()); + GeomVertexReader reader(dot->get_vertex_data(), InternalName::get_vertex()); float width = reader.get_data1f(); _glyphs[character] = new TextGlyph(ch, state, width); @@ -292,28 +264,14 @@ find_characters(PandaNode *root, const RenderState *net_state) { // design size, or line height. CPT(Geom) ch; - const GeomPoint *dot1 = NULL; - CPT(qpGeom) dot2; + CPT(Geom) dot; const RenderState *state = NULL; - find_character_gsets(root, ch, dot1, dot2, state, next_net_state); - if (dot1 != NULL) { + find_character_gsets(root, ch, dot, state, next_net_state); + if (ch != (Geom *)NULL && dot != (Geom *)NULL) { // Get the first vertex from the "dot" geoset. This will be the // design size indicator. - PTA_Vertexf alist; - PTA_ushort ilist; - dot1->get_coords(alist, ilist); - if (ilist.empty()) { - _line_height = alist[0][2]; - } else { - _line_height = alist[ilist[0]][2]; - } - _space_advance = 0.25f * _line_height; - - } else if (ch != (Geom *)NULL && dot2 != (qpGeom *)NULL) { - // Get the first vertex from the "dot" geoset. This will be the - // design size indicator. - const qpGeom *qpgeom = DCAST(qpGeom, ch); - qpGeomVertexReader reader(qpgeom->get_vertex_data(), InternalName::get_vertex()); + const Geom *geom = DCAST(Geom, ch); + GeomVertexReader reader(geom->get_vertex_data(), InternalName::get_vertex()); _line_height = reader.get_data3f()[2]; _space_advance = 0.25f * _line_height; } diff --git a/panda/src/text/staticTextFont.h b/panda/src/text/staticTextFont.h index 16e1164880..639f5d5875 100644 --- a/panda/src/text/staticTextFont.h +++ b/panda/src/text/staticTextFont.h @@ -26,7 +26,7 @@ #include "textGlyph.h" #include "pandaNode.h" #include "geom.h" -#include "qpgeom.h" +#include "geom.h" #include "pointerTo.h" #include "pmap.h" @@ -51,10 +51,8 @@ public: virtual bool get_glyph(int character, const TextGlyph *&glyph); private: - void find_character_gsets(PandaNode *root, CPT(Geom) &ch, - const GeomPoint *&dot1, - CPT(qpGeom) &dot2, - const RenderState *&state, + void find_character_gsets(PandaNode *root, CPT(Geom) &ch, CPT(Geom) &dot, + const RenderState *&state, const RenderState *net_state); void find_characters(PandaNode *root, const RenderState *net_state); diff --git a/panda/src/text/textAssembler.I b/panda/src/text/textAssembler.I index 9ad03b7a26..ab950d4bb2 100644 --- a/panda/src/text/textAssembler.I +++ b/panda/src/text/textAssembler.I @@ -28,7 +28,7 @@ // geomEnums.h. //////////////////////////////////////////////////////////////////// INLINE void TextAssembler:: -set_usage_hint(qpGeom::UsageHint usage_hint) { +set_usage_hint(Geom::UsageHint usage_hint) { _usage_hint = usage_hint; } @@ -38,7 +38,7 @@ set_usage_hint(qpGeom::UsageHint usage_hint) { // Description: Returns the UsageHint that will be applied to // generated geometry. See set_usage_hint(). //////////////////////////////////////////////////////////////////// -INLINE qpGeom::UsageHint TextAssembler:: +INLINE Geom::UsageHint TextAssembler:: get_usage_hint() const { return _usage_hint; } diff --git a/panda/src/text/textAssembler.cxx b/panda/src/text/textAssembler.cxx index 7d51bc9810..68021f82c6 100644 --- a/panda/src/text/textAssembler.cxx +++ b/panda/src/text/textAssembler.cxx @@ -85,7 +85,7 @@ isbreakpoint(unsigned int ch) { TextAssembler:: TextAssembler(TextEncoder *encoder) : _encoder(encoder), - _usage_hint(qpGeom::UH_static) + _usage_hint(Geom::UH_static) { clear(); } @@ -1417,7 +1417,6 @@ tack_on_accent(char accent_mark, TextAssembler::CheesyPosition position, } } } - return false; } @@ -1469,7 +1468,8 @@ assign_copy_to(GeomNode *geom_node, const RenderState *state, LMatrix4f new_xform = _xform * extra_xform; Pieces::const_iterator pi; for (pi = _pieces.begin(); pi != _pieces.end(); ++pi) { - PT(Geom) new_geom = (*pi)._geom->make_copy(); + const Geom *geom = (*pi)._geom; + PT(Geom) new_geom = new Geom(*geom); new_geom->transform_vertices(new_xform); geom_node->add_geom(new_geom, state->compose((*pi)._state)); } diff --git a/panda/src/text/textAssembler.h b/panda/src/text/textAssembler.h index 4afcccb21a..4963971712 100644 --- a/panda/src/text/textAssembler.h +++ b/panda/src/text/textAssembler.h @@ -28,7 +28,7 @@ #include "unicodeLatinMap.h" #include "geomNode.h" #include "pointerTo.h" -#include "qpgeom.h" +#include "geom.h" class TextEncoder; @@ -49,8 +49,8 @@ public: void clear(); - INLINE void set_usage_hint(qpGeom::UsageHint usage_hint); - INLINE qpGeom::UsageHint get_usage_hint() const; + INLINE void set_usage_hint(Geom::UsageHint usage_hint); + INLINE Geom::UsageHint get_usage_hint() const; bool set_wtext(const wstring &wtext, const TextProperties &properties, int max_rows = 0); @@ -183,7 +183,7 @@ private: LVector2f _lr; TextEncoder *_encoder; - qpGeom::UsageHint _usage_hint; + Geom::UsageHint _usage_hint; }; #include "textAssembler.I" diff --git a/panda/src/text/textGlyph.I b/panda/src/text/textGlyph.I index 13563c55e5..590203ed92 100644 --- a/panda/src/text/textGlyph.I +++ b/panda/src/text/textGlyph.I @@ -73,7 +73,7 @@ operator = (const TextGlyph ©) { // Description: Returns a Geom that renders the particular glyph. //////////////////////////////////////////////////////////////////// INLINE PT(Geom) TextGlyph:: -get_geom(qpGeom::UsageHint usage_hint) const { +get_geom(Geom::UsageHint usage_hint) const { if (_geom == (Geom *)NULL) { return NULL; } @@ -82,13 +82,10 @@ get_geom(qpGeom::UsageHint usage_hint) const { // to modify its vertices without fear of stomping on other copies; // it is also critical for the DynamicTextGlyph, which depends on // this behavior to properly count references to this glyph. - PT(Geom) new_geom = _geom->make_copy(); - if (new_geom->is_qpgeom()) { - qpGeom *qpgeom = DCAST(qpGeom, new_geom); - qpgeom->set_usage_hint(usage_hint); - if (qpgeom->get_vertex_data()->get_usage_hint() != usage_hint) { - qpgeom->modify_vertex_data()->set_usage_hint(usage_hint); - } + PT(Geom) new_geom = new Geom(*_geom); + new_geom->set_usage_hint(usage_hint); + if (new_geom->get_vertex_data()->get_usage_hint() != usage_hint) { + new_geom->modify_vertex_data()->set_usage_hint(usage_hint); } return new_geom; } diff --git a/panda/src/text/textGlyph.h b/panda/src/text/textGlyph.h index d473cbd29c..49b91e6b20 100644 --- a/panda/src/text/textGlyph.h +++ b/panda/src/text/textGlyph.h @@ -22,7 +22,7 @@ #include "pandabase.h" #include "renderState.h" #include "referenceCount.h" -#include "qpgeom.h" +#include "geom.h" #include "pointerTo.h" #include "dcast.h" @@ -40,7 +40,7 @@ public: INLINE void operator = (const TextGlyph ©); virtual ~TextGlyph(); - INLINE PT(Geom) get_geom(qpGeom::UsageHint usage_hint) const; + INLINE PT(Geom) get_geom(Geom::UsageHint usage_hint) const; INLINE const RenderState *get_state() const; INLINE float get_advance() const; diff --git a/panda/src/text/textNode.I b/panda/src/text/textNode.I index 7256096f06..b3641ef875 100644 --- a/panda/src/text/textNode.I +++ b/panda/src/text/textNode.I @@ -675,7 +675,7 @@ get_coordinate_system() const { // geomEnums.h. //////////////////////////////////////////////////////////////////// INLINE void TextNode:: -set_usage_hint(qpGeom::UsageHint usage_hint) { +set_usage_hint(Geom::UsageHint usage_hint) { _assembler.set_usage_hint(usage_hint); invalidate_no_measure(); } @@ -686,7 +686,7 @@ set_usage_hint(qpGeom::UsageHint usage_hint) { // Description: Returns the UsageHint that will be applied to // generated geometry. See set_usage_hint(). //////////////////////////////////////////////////////////////////// -INLINE qpGeom::UsageHint TextNode:: +INLINE Geom::UsageHint TextNode:: get_usage_hint() const { return _assembler.get_usage_hint(); } diff --git a/panda/src/text/textNode.cxx b/panda/src/text/textNode.cxx index 53c15b63b1..bb4ce1457d 100644 --- a/panda/src/text/textNode.cxx +++ b/panda/src/text/textNode.cxx @@ -24,14 +24,10 @@ #include "compose_matrix.h" #include "geom.h" -#include "geomTristrip.h" -#include "geomLinestrip.h" -#include "geomPoint.h" -#include "qpgeom.h" -#include "qpgeomLinestrips.h" -#include "qpgeomPoints.h" -#include "qpgeomTristrips.h" -#include "qpgeomVertexWriter.h" +#include "geomLinestrips.h" +#include "geomPoints.h" +#include "geomTristrips.h" +#include "geomVertexWriter.h" #include "geomNode.h" #include "notify.h" #include "transformState.h" @@ -630,59 +626,32 @@ make_frame() { CPT(RenderAttrib) thick = RenderModeAttrib::make(RenderModeAttrib::M_unchanged, _frame_width); CPT(RenderState) state = RenderState::make(thick); - if (use_qpgeom) { - PT(qpGeomVertexData) vdata = new qpGeomVertexData - ("text", qpGeomVertexFormat::get_v3(), get_usage_hint()); - qpGeomVertexWriter vertex(vdata, InternalName::get_vertex()); - - vertex.add_data3f(left, 0.0f, top); - vertex.add_data3f(left, 0.0f, bottom); - vertex.add_data3f(right, 0.0f, bottom); - vertex.add_data3f(right, 0.0f, top); - - PT(qpGeomLinestrips) frame = new qpGeomLinestrips(get_usage_hint()); - frame->add_consecutive_vertices(0, 4); - frame->add_vertex(0); - frame->close_primitive(); - - PT(qpGeom) geom = new qpGeom; - geom->set_vertex_data(vdata); - geom->add_primitive(frame); - frame_node->add_geom(geom, state); - - if (get_frame_corners()) { - PT(qpGeomPoints) corners = new qpGeomPoints(get_usage_hint()); - corners->add_consecutive_vertices(0, 4); - PT(qpGeom) geom2 = new qpGeom; - geom2->set_vertex_data(vdata); - geom2->add_primitive(corners); - frame_node->add_geom(geom2, state); - } - - } else { - GeomLinestrip *geoset = new GeomLinestrip; - PTA_int lengths=PTA_int::empty_array(0); - PTA_Vertexf verts; - lengths.push_back(5); - verts.push_back(Vertexf(left, 0.0f, top)); - verts.push_back(Vertexf(left, 0.0f, bottom)); - verts.push_back(Vertexf(right, 0.0f, bottom)); - verts.push_back(Vertexf(right, 0.0f, top)); - verts.push_back(Vertexf(left, 0.0f, top)); - - geoset->set_num_prims(1); - geoset->set_lengths(lengths); - - geoset->set_coords(verts); - frame_node->add_geom(geoset, state); - - if (get_frame_corners()) { - GeomPoint *geoset = new GeomPoint; - - geoset->set_num_prims(4); - geoset->set_coords(verts); - frame_node->add_geom(geoset, state); - } + PT(GeomVertexData) vdata = new GeomVertexData + ("text", GeomVertexFormat::get_v3(), get_usage_hint()); + GeomVertexWriter vertex(vdata, InternalName::get_vertex()); + + vertex.add_data3f(left, 0.0f, top); + vertex.add_data3f(left, 0.0f, bottom); + vertex.add_data3f(right, 0.0f, bottom); + vertex.add_data3f(right, 0.0f, top); + + PT(GeomLinestrips) frame = new GeomLinestrips(get_usage_hint()); + frame->add_consecutive_vertices(0, 4); + frame->add_vertex(0); + frame->close_primitive(); + + PT(Geom) geom = new Geom; + geom->set_vertex_data(vdata); + geom->add_primitive(frame); + frame_node->add_geom(geom, state); + + if (get_frame_corners()) { + PT(GeomPoints) corners = new GeomPoints(get_usage_hint()); + corners->add_consecutive_vertices(0, 4); + PT(Geom) geom2 = new Geom; + geom2->set_vertex_data(vdata); + geom2->add_primitive(corners); + frame_node->add_geom(geom2, state); } return frame_node.p(); @@ -703,60 +672,30 @@ make_card() { float bottom = dimensions[2]; float top = dimensions[3]; - if (use_qpgeom) { - PT(qpGeomVertexData) vdata = new qpGeomVertexData - ("text", qpGeomVertexFormat::get_v3t2(), get_usage_hint()); - qpGeomVertexWriter vertex(vdata, InternalName::get_vertex()); - qpGeomVertexWriter texcoord(vdata, InternalName::get_texcoord()); - - vertex.add_data3f(left, 0.0f, top); - vertex.add_data3f(left, 0.0f, bottom); - vertex.add_data3f(right, 0.0f, top); - vertex.add_data3f(right, 0.0f, bottom); - - texcoord.add_data2f(0.0f, 1.0f); - texcoord.add_data2f(0.0f, 0.0f); - texcoord.add_data2f(1.0f, 1.0f); - texcoord.add_data2f(1.0f, 0.0f); - - PT(qpGeomTristrips) card = new qpGeomTristrips(get_usage_hint()); - card->add_consecutive_vertices(0, 4); - card->close_primitive(); - - PT(qpGeom) geom = new qpGeom; - geom->set_vertex_data(vdata); - geom->add_primitive(card); - - card_node->add_geom(geom); - - } else { - GeomTristrip *geoset = new GeomTristrip; - PTA_int lengths=PTA_int::empty_array(0); - lengths.push_back(4); - - PTA_Vertexf verts; - verts.push_back(Vertexf(left, 0.02f, top)); - verts.push_back(Vertexf(left, 0.02f, bottom)); - verts.push_back(Vertexf(right, 0.02f, top)); - verts.push_back(Vertexf(right, 0.02f, bottom)); - - geoset->set_num_prims(1); - geoset->set_lengths(lengths); - - geoset->set_coords(verts); - - if (has_card_texture()) { - PTA_TexCoordf uvs; - uvs.push_back(TexCoordf(0.0f, 1.0f)); - uvs.push_back(TexCoordf(0.0f, 0.0f)); - uvs.push_back(TexCoordf(1.0f, 1.0f)); - uvs.push_back(TexCoordf(1.0f, 0.0f)); - - geoset->set_texcoords(uvs, G_PER_VERTEX); - } - - card_node->add_geom(geoset); - } + PT(GeomVertexData) vdata = new GeomVertexData + ("text", GeomVertexFormat::get_v3t2(), get_usage_hint()); + GeomVertexWriter vertex(vdata, InternalName::get_vertex()); + GeomVertexWriter texcoord(vdata, InternalName::get_texcoord()); + + vertex.add_data3f(left, 0.0f, top); + vertex.add_data3f(left, 0.0f, bottom); + vertex.add_data3f(right, 0.0f, top); + vertex.add_data3f(right, 0.0f, bottom); + + texcoord.add_data2f(0.0f, 1.0f); + texcoord.add_data2f(0.0f, 0.0f); + texcoord.add_data2f(1.0f, 1.0f); + texcoord.add_data2f(1.0f, 0.0f); + + PT(GeomTristrips) card = new GeomTristrips(get_usage_hint()); + card->add_consecutive_vertices(0, 4); + card->close_primitive(); + + PT(Geom) geom = new Geom; + geom->set_vertex_data(vdata); + geom->add_primitive(card); + + card_node->add_geom(geom); return card_node.p(); } @@ -787,182 +726,84 @@ make_card_with_border() { // 10 12 14 16 - three // - if (use_qpgeom) { - PT(qpGeomVertexData) vdata = new qpGeomVertexData - ("text", qpGeomVertexFormat::get_v3t2(), get_usage_hint()); - qpGeomVertexWriter vertex(vdata, InternalName::get_vertex()); - qpGeomVertexWriter texcoord(vdata, InternalName::get_texcoord()); - - // verts 1,2,3,4 - vertex.add_data3f(left, 0.02f, top); - vertex.add_data3f(left, 0.02f, top - _card_border_size); - vertex.add_data3f(left + _card_border_size, 0.02f, top); - vertex.add_data3f(left + _card_border_size, 0.02f, - top - _card_border_size); - // verts 5,6,7,8 - vertex.add_data3f(right - _card_border_size, 0.02f, top); - vertex.add_data3f(right - _card_border_size, 0.02f, - top - _card_border_size); - vertex.add_data3f(right, 0.02f, top); - vertex.add_data3f(right, 0.02f, top - _card_border_size); - // verts 9,10,11,12 - vertex.add_data3f(left, 0.02f, bottom + _card_border_size); - vertex.add_data3f(left, 0.02f, bottom); - vertex.add_data3f(left + _card_border_size, 0.02f, - bottom + _card_border_size); - vertex.add_data3f(left + _card_border_size, 0.02f, bottom); - // verts 13,14,15,16 - vertex.add_data3f(right - _card_border_size, 0.02f, - bottom + _card_border_size); - vertex.add_data3f(right - _card_border_size, 0.02f, bottom); - vertex.add_data3f(right, 0.02f, bottom + _card_border_size); - vertex.add_data3f(right, 0.02f, bottom); - - texcoord.add_data2f(0.0f, 1.0f); //1 - texcoord.add_data2f(0.0f, 1.0f - _card_border_uv_portion); //2 - texcoord.add_data2f(0.0f + _card_border_uv_portion, 1.0f); //3 - texcoord.add_data2f(0.0f + _card_border_uv_portion, - 1.0f - _card_border_uv_portion); //4 - texcoord.add_data2f(1.0f -_card_border_uv_portion, 1.0f); //5 - texcoord.add_data2f(1.0f -_card_border_uv_portion, - 1.0f - _card_border_uv_portion); //6 - texcoord.add_data2f(1.0f, 1.0f); //7 - texcoord.add_data2f(1.0f, 1.0f - _card_border_uv_portion); //8 - - texcoord.add_data2f(0.0f, _card_border_uv_portion); //9 - texcoord.add_data2f(0.0f, 0.0f); //10 - texcoord.add_data2f(_card_border_uv_portion, _card_border_uv_portion); //11 - texcoord.add_data2f(_card_border_uv_portion, 0.0f); //12 - - texcoord.add_data2f(1.0f - _card_border_uv_portion, _card_border_uv_portion);//13 - texcoord.add_data2f(1.0f - _card_border_uv_portion, 0.0f);//14 - texcoord.add_data2f(1.0f, _card_border_uv_portion);//15 - texcoord.add_data2f(1.0f, 0.0f);//16 - - PT(qpGeomTristrips) card = new qpGeomTristrips(get_usage_hint()); - - // tristrip #1 - card->add_consecutive_vertices(0, 8); - card->close_primitive(); - - // tristrip #2 - card->add_vertex(1); - card->add_vertex(8); - card->add_vertex(3); - card->add_vertex(10); - card->add_vertex(5); - card->add_vertex(12); - card->add_vertex(7); - card->add_vertex(14); - card->close_primitive(); - - // tristrip #3 - card->add_consecutive_vertices(8, 8); - card->close_primitive(); - - PT(qpGeom) geom = new qpGeom; - geom->set_vertex_data(vdata); - geom->add_primitive(card); - - card_node->add_geom(geom); - - } else { - GeomTristrip *geoset = new GeomTristrip; - PTA_int lengths; - lengths.push_back(8); - lengths.push_back(8); - lengths.push_back(8); - - PTA_Vertexf verts; - // verts 1,2,3,4 - verts.push_back(Vertexf(left, 0.02f, top)); - verts.push_back(Vertexf(left, 0.02f, top - _card_border_size)); - verts.push_back(Vertexf(left + _card_border_size, 0.02f, top)); - verts.push_back(Vertexf(left + _card_border_size, 0.02f, - top - _card_border_size)); - // verts 5,6,7,8 - verts.push_back(Vertexf(right - _card_border_size, 0.02f, top)); - verts.push_back(Vertexf(right - _card_border_size, 0.02f, - top - _card_border_size)); - verts.push_back(Vertexf(right, 0.02f, top)); - verts.push_back(Vertexf(right, 0.02f, top - _card_border_size)); - // verts 9,10,11,12 - verts.push_back(Vertexf(left, 0.02f, bottom + _card_border_size)); - verts.push_back(Vertexf(left, 0.02f, bottom)); - verts.push_back(Vertexf(left + _card_border_size, 0.02f, - bottom + _card_border_size)); - verts.push_back(Vertexf(left + _card_border_size, 0.02f, bottom)); - // verts 13,14,15,16 - verts.push_back(Vertexf(right - _card_border_size, 0.02f, - bottom + _card_border_size)); - verts.push_back(Vertexf(right - _card_border_size, 0.02f, bottom)); - verts.push_back(Vertexf(right, 0.02f, bottom + _card_border_size)); - verts.push_back(Vertexf(right, 0.02f, bottom)); - - PTA_ushort indices; - // tristrip #1 - indices.push_back(0); - indices.push_back(1); - indices.push_back(2); - indices.push_back(3); - indices.push_back(4); - indices.push_back(5); - indices.push_back(6); - indices.push_back(7); - // tristrip #2 - indices.push_back(1); - indices.push_back(8); - indices.push_back(3); - indices.push_back(10); - indices.push_back(5); - indices.push_back(12); - indices.push_back(7); - indices.push_back(14); - // tristrip #3 - indices.push_back(8); - indices.push_back(9); - indices.push_back(10); - indices.push_back(11); - indices.push_back(12); - indices.push_back(13); - indices.push_back(14); - indices.push_back(15); - - geoset->set_num_prims(3); - geoset->set_lengths(lengths); - - geoset->set_coords(verts,indices); - - if (has_card_texture()) { - PTA_TexCoordf uvs; - uvs.push_back(TexCoordf(0.0f, 1.0f)); //1 - uvs.push_back(TexCoordf(0.0f, 1.0f - _card_border_uv_portion)); //2 - uvs.push_back(TexCoordf(0.0f + _card_border_uv_portion, 1.0f)); //3 - uvs.push_back(TexCoordf(0.0f + _card_border_uv_portion, - 1.0f - _card_border_uv_portion)); //4 - uvs.push_back(TexCoordf( 1.0f -_card_border_uv_portion, 1.0f)); //5 - uvs.push_back(TexCoordf( 1.0f -_card_border_uv_portion, - 1.0f - _card_border_uv_portion)); //6 - uvs.push_back(TexCoordf(1.0f, 1.0f)); //7 - uvs.push_back(TexCoordf(1.0f, 1.0f - _card_border_uv_portion)); //8 - - uvs.push_back(TexCoordf(0.0f, _card_border_uv_portion)); //9 - uvs.push_back(TexCoordf(0.0f, 0.0f)); //10 - uvs.push_back(TexCoordf(_card_border_uv_portion, _card_border_uv_portion)); //11 - uvs.push_back(TexCoordf(_card_border_uv_portion, 0.0f)); //12 - - uvs.push_back(TexCoordf(1.0f - _card_border_uv_portion, _card_border_uv_portion));//13 - uvs.push_back(TexCoordf(1.0f - _card_border_uv_portion, 0.0f));//14 - uvs.push_back(TexCoordf(1.0f, _card_border_uv_portion));//15 - uvs.push_back(TexCoordf(1.0f, 0.0f));//16 - - // we can use same ref's as before (same order) - geoset->set_texcoords(uvs, G_PER_VERTEX, indices); - } - - card_node->add_geom(geoset); - } + PT(GeomVertexData) vdata = new GeomVertexData + ("text", GeomVertexFormat::get_v3t2(), get_usage_hint()); + GeomVertexWriter vertex(vdata, InternalName::get_vertex()); + GeomVertexWriter texcoord(vdata, InternalName::get_texcoord()); + + // verts 1,2,3,4 + vertex.add_data3f(left, 0.02f, top); + vertex.add_data3f(left, 0.02f, top - _card_border_size); + vertex.add_data3f(left + _card_border_size, 0.02f, top); + vertex.add_data3f(left + _card_border_size, 0.02f, + top - _card_border_size); + // verts 5,6,7,8 + vertex.add_data3f(right - _card_border_size, 0.02f, top); + vertex.add_data3f(right - _card_border_size, 0.02f, + top - _card_border_size); + vertex.add_data3f(right, 0.02f, top); + vertex.add_data3f(right, 0.02f, top - _card_border_size); + // verts 9,10,11,12 + vertex.add_data3f(left, 0.02f, bottom + _card_border_size); + vertex.add_data3f(left, 0.02f, bottom); + vertex.add_data3f(left + _card_border_size, 0.02f, + bottom + _card_border_size); + vertex.add_data3f(left + _card_border_size, 0.02f, bottom); + // verts 13,14,15,16 + vertex.add_data3f(right - _card_border_size, 0.02f, + bottom + _card_border_size); + vertex.add_data3f(right - _card_border_size, 0.02f, bottom); + vertex.add_data3f(right, 0.02f, bottom + _card_border_size); + vertex.add_data3f(right, 0.02f, bottom); + + texcoord.add_data2f(0.0f, 1.0f); //1 + texcoord.add_data2f(0.0f, 1.0f - _card_border_uv_portion); //2 + texcoord.add_data2f(0.0f + _card_border_uv_portion, 1.0f); //3 + texcoord.add_data2f(0.0f + _card_border_uv_portion, + 1.0f - _card_border_uv_portion); //4 + texcoord.add_data2f(1.0f -_card_border_uv_portion, 1.0f); //5 + texcoord.add_data2f(1.0f -_card_border_uv_portion, + 1.0f - _card_border_uv_portion); //6 + texcoord.add_data2f(1.0f, 1.0f); //7 + texcoord.add_data2f(1.0f, 1.0f - _card_border_uv_portion); //8 + + texcoord.add_data2f(0.0f, _card_border_uv_portion); //9 + texcoord.add_data2f(0.0f, 0.0f); //10 + texcoord.add_data2f(_card_border_uv_portion, _card_border_uv_portion); //11 + texcoord.add_data2f(_card_border_uv_portion, 0.0f); //12 + texcoord.add_data2f(1.0f - _card_border_uv_portion, _card_border_uv_portion);//13 + texcoord.add_data2f(1.0f - _card_border_uv_portion, 0.0f);//14 + texcoord.add_data2f(1.0f, _card_border_uv_portion);//15 + texcoord.add_data2f(1.0f, 0.0f);//16 + + PT(GeomTristrips) card = new GeomTristrips(get_usage_hint()); + + // tristrip #1 + card->add_consecutive_vertices(0, 8); + card->close_primitive(); + + // tristrip #2 + card->add_vertex(1); + card->add_vertex(8); + card->add_vertex(3); + card->add_vertex(10); + card->add_vertex(5); + card->add_vertex(12); + card->add_vertex(7); + card->add_vertex(14); + card->close_primitive(); + + // tristrip #3 + card->add_consecutive_vertices(8, 8); + card->close_primitive(); + + PT(Geom) geom = new Geom; + geom->set_vertex_data(vdata); + geom->add_primitive(card); + + card_node->add_geom(geom); + return card_node.p(); } diff --git a/panda/src/text/textNode.h b/panda/src/text/textNode.h index 81fd82701b..045cc38588 100644 --- a/panda/src/text/textNode.h +++ b/panda/src/text/textNode.h @@ -28,7 +28,7 @@ #include "textAssembler.h" #include "pandaNode.h" #include "luse.h" -#include "qpgeom.h" +#include "geom.h" //////////////////////////////////////////////////////////////////// // Class : TextNode @@ -120,8 +120,8 @@ PUBLISHED: INLINE void set_coordinate_system(CoordinateSystem cs); INLINE CoordinateSystem get_coordinate_system() const; - INLINE void set_usage_hint(qpGeom::UsageHint usage_hint); - INLINE qpGeom::UsageHint get_usage_hint() const; + INLINE void set_usage_hint(Geom::UsageHint usage_hint); + INLINE Geom::UsageHint get_usage_hint() const; // These methods are inherited from TextProperties, but we override // here so we can flag the TextNode as dirty when they have been diff --git a/panda/src/text/text_composite1.cxx b/panda/src/text/text_composite1.cxx index eff5c128c0..a7329d5eb7 100644 --- a/panda/src/text/text_composite1.cxx +++ b/panda/src/text/text_composite1.cxx @@ -5,5 +5,4 @@ #include "dynamicTextPage.cxx" #include "fontPool.cxx" #include "geomTextGlyph.cxx" -#include "qpgeomTextGlyph.cxx" #include "staticTextFont.cxx" diff --git a/panda/src/tform/mouseWatcher.I b/panda/src/tform/mouseWatcher.I index 14e0b46107..24303d5a83 100644 --- a/panda/src/tform/mouseWatcher.I +++ b/panda/src/tform/mouseWatcher.I @@ -38,7 +38,7 @@ has_mouse() const { //////////////////////////////////////////////////////////////////// INLINE bool MouseWatcher:: is_mouse_open() const { - return _has_mouse && (_suppress_flags & MouseWatcherRegion::SF_mouse_position) == 0; + return _has_mouse && (_internal_suppress & MouseWatcherRegion::SF_mouse_position) == 0; } //////////////////////////////////////////////////////////////////// diff --git a/panda/src/tform/mouseWatcher.cxx b/panda/src/tform/mouseWatcher.cxx index 75b65f94d7..519208e1c2 100644 --- a/panda/src/tform/mouseWatcher.cxx +++ b/panda/src/tform/mouseWatcher.cxx @@ -58,7 +58,7 @@ MouseWatcher(const string &name) : _button_events = new ButtonEventList; _has_mouse = false; - _suppress_flags = 0; + _internal_suppress = 0; _preferred_region = (MouseWatcherRegion *)NULL; _preferred_button_down_region = (MouseWatcherRegion *)NULL; _button_down = false; @@ -657,9 +657,10 @@ press(ButtonHandle button) { // all the keyboard events, even if it doesn't set its // keyboard flag. _preferred_region->press(param); + consider_keyboard_suppress(_preferred_region); } - if ((_suppress_flags & MouseWatcherRegion::SF_other_button) == 0) { + if ((_internal_suppress & MouseWatcherRegion::SF_other_button) == 0) { // All the other regions only get the keyboard events if they // set their global keyboard flag, *and* the current region does // not suppress keyboard buttons. @@ -738,6 +739,7 @@ keystroke(int keycode) { if (region->get_keyboard()) { param.set_outside(region != _preferred_region); region->keystroke(param); + consider_keyboard_suppress(region); } } @@ -751,6 +753,7 @@ keystroke(int keycode) { if (region->get_keyboard()) { param.set_outside(region != _preferred_region); region->keystroke(param); + consider_keyboard_suppress(region); } } } @@ -813,6 +816,7 @@ global_keyboard_press(const MouseWatcherParameter ¶m) { if (region != _preferred_region && region->get_keyboard()) { region->press(param); + consider_keyboard_suppress(region); } } @@ -825,6 +829,7 @@ global_keyboard_press(const MouseWatcherParameter ¶m) { if (region != _preferred_region && region->get_keyboard()) { region->press(param); + consider_keyboard_suppress(region); } } } @@ -941,6 +946,25 @@ set_mouse(const LVecBase2f &xy, const LVecBase2f &pixel_xy) { set_current_regions(regions); } +//////////////////////////////////////////////////////////////////// +// Function: MouseWatcher::consider_keyboard_suppress +// Access: Private +// Description: If we send any keyboard events to a region that has +// the SF_any_button suppress flag set, that means we +// should not send the keyboard event along the data +// graph. +// +// This method is called as each keyboard event is sent +// to a region; it should update the internal +// _keyboard_suppress bitmask to indicate this. +//////////////////////////////////////////////////////////////////// +void MouseWatcher:: +consider_keyboard_suppress(const MouseWatcherRegion *region) { + if ((region->get_suppress_flags() & MouseWatcherRegion::SF_any_button) != 0) { + _external_suppress |= MouseWatcherRegion::SF_any_button; + } +} + //////////////////////////////////////////////////////////////////// // Function: MouseWatcher::do_transmit_data // Access: Protected, Virtual @@ -959,7 +983,8 @@ do_transmit_data(const DataNodeTransmit &input, DataNodeTransmit &output) { bool mouse_moved = false; // Initially, we do not suppress any events to objects below us in // the data graph. - _suppress_flags = 0; + _internal_suppress = 0; + _external_suppress = 0; if (!input.has_data(_xy_input)) { // No mouse in the window. @@ -992,7 +1017,7 @@ do_transmit_data(const DataNodeTransmit &input, DataNodeTransmit &output) { set_no_mouse(); // This also means we should suppress button events below us. - _suppress_flags = MouseWatcherRegion::SF_any_button; + _internal_suppress |= MouseWatcherRegion::SF_any_button; } else { // The mouse is within the display region; rescale it. @@ -1016,7 +1041,7 @@ do_transmit_data(const DataNodeTransmit &input, DataNodeTransmit &output) { // owned by a region because of a recent button-down event, that // region determines whether we suppress events below us. if (_preferred_region != (MouseWatcherRegion *)NULL) { - _suppress_flags = _preferred_region->get_suppress_flags(); + _internal_suppress |= _preferred_region->get_suppress_flags(); } // Look for button events. @@ -1057,7 +1082,7 @@ do_transmit_data(const DataNodeTransmit &input, DataNodeTransmit &output) { } if (_has_mouse && - (_suppress_flags & MouseWatcherRegion::SF_mouse_position) == 0) { + (_internal_suppress & MouseWatcherRegion::SF_mouse_position) == 0) { if (mouse_moved) { move(ButtonHandle::none()); //tform_cat.info() << "do_transmit_data()::mouse_moved" << endl; @@ -1069,7 +1094,7 @@ do_transmit_data(const DataNodeTransmit &input, DataNodeTransmit &output) { output.set_data(_pixel_xy_output, EventParameter(_pixel_xy)); } - int suppress_buttons = (_suppress_flags & MouseWatcherRegion::SF_any_button); + int suppress_buttons = ((_internal_suppress | _external_suppress) & MouseWatcherRegion::SF_any_button); if (suppress_buttons != 0) { // Suppress some buttons. diff --git a/panda/src/tform/mouseWatcher.h b/panda/src/tform/mouseWatcher.h index ed8683a864..910963b812 100644 --- a/panda/src/tform/mouseWatcher.h +++ b/panda/src/tform/mouseWatcher.h @@ -154,13 +154,18 @@ protected: void set_no_mouse(); void set_mouse(const LVecBase2f &xy, const LVecBase2f &pixel_xy); +private: + void consider_keyboard_suppress(const MouseWatcherRegion *region); + +protected: // This wants to be a set, but because you cannot export sets across // dlls in windows, we will make it a vector instead typedef pvector< PT(MouseWatcherGroup) > Groups; Groups _groups; bool _has_mouse; - int _suppress_flags; + int _internal_suppress; + int _external_suppress; LPoint2f _mouse; LPoint2f _mouse_pixel; diff --git a/pandatool/src/bam/Sources.pp b/pandatool/src/bam/Sources.pp index 5ff33eef49..7fb598af70 100644 --- a/pandatool/src/bam/Sources.pp +++ b/pandatool/src/bam/Sources.pp @@ -25,7 +25,7 @@ #define LOCAL_LIBS \ eggbase progbase #define OTHER_LIBS \ - builder:c collide:c chan:c char:c display:c downloader:c \ + collide:c chan:c char:c display:c downloader:c \ dgraph:c egg2pg:c egg:c event:c express:c \ grutil:c gobj:c gsgbase:c lerp:c linmath:c mathutil:c \ pgraph:c parametrics:c pnmimagetypes:c pnmimage:c putil:c \ diff --git a/pandatool/src/bam/bamToEgg.cxx b/pandatool/src/bam/bamToEgg.cxx index ec123ff90a..6f6a9424ec 100644 --- a/pandatool/src/bam/bamToEgg.cxx +++ b/pandatool/src/bam/bamToEgg.cxx @@ -31,10 +31,8 @@ #include "lodNode.h" #include "geomNode.h" #include "geom.h" -#include "geomTri.h" -#include "qpgeom.h" -#include "qpgeomTriangles.h" -#include "qpgeomVertexReader.h" +#include "geomTriangles.h" +#include "geomVertexReader.h" #include "string_utils.h" #include "bamFile.h" #include "eggGroup.h" @@ -243,29 +241,14 @@ convert_geom_node(GeomNode *node, const WorkingNodePath &node_path, CPT(RenderState) geom_state = net_state->compose(node->get_geom_state(i)); const Geom *geom = node->get_geom(i); - if (geom->is_of_type(qpGeom::get_class_type())) { - const qpGeom *qpgeom = DCAST(qpGeom, geom); - int num_primitives = qpgeom->get_num_primitives(); - for (int j = 0; j < num_primitives; ++j) { - const qpGeomPrimitive *primitive = qpgeom->get_primitive(j); - CPT(qpGeomPrimitive) simple = primitive->decompose(); - if (simple->is_of_type(qpGeomTriangles::get_class_type())) { - convert_triangles(qpgeom->get_vertex_data(), - DCAST(qpGeomTriangles, simple), geom_state, - net_mat, egg_parent); - } - } - - } else { - // Explode the Geom before we try to deal with it. That way, we - // don't have to know about tristrips or whatnot. - PT(Geom) exploded = geom->explode(); - - // Now determine what kind of Geom we've got. Chances are good - // it's triangles. - if (exploded->is_of_type(GeomTri::get_class_type())) { - convert_geom_tri(DCAST(GeomTri, exploded), geom_state, net_mat, - egg_parent); + int num_primitives = geom->get_num_primitives(); + for (int j = 0; j < num_primitives; ++j) { + const GeomPrimitive *primitive = geom->get_primitive(j); + CPT(GeomPrimitive) simple = primitive->decompose(); + if (simple->is_of_type(GeomTriangles::get_class_type())) { + convert_triangles(geom->get_vertex_data(), + DCAST(GeomTriangles, simple), geom_state, + net_mat, egg_parent); } } } @@ -279,11 +262,11 @@ convert_geom_node(GeomNode *node, const WorkingNodePath &node_path, // Description: //////////////////////////////////////////////////////////////////// void BamToEgg:: -convert_triangles(const qpGeomVertexData *vertex_data, - const qpGeomTriangles *primitive, +convert_triangles(const GeomVertexData *vertex_data, + const GeomTriangles *primitive, const RenderState *net_state, const LMatrix4f &net_mat, EggGroupNode *egg_parent) { - qpGeomVertexReader reader(vertex_data); + GeomVertexReader reader(vertex_data); // Check for a color scale. LVecBase4f color_scale(1.0f, 1.0f, 1.0f, 1.0f); @@ -385,140 +368,6 @@ convert_triangles(const qpGeomVertexData *vertex_data, } } -//////////////////////////////////////////////////////////////////// -// Function: BamToEgg::convert_geom_tri -// Access: Private -// Description: -//////////////////////////////////////////////////////////////////// -void BamToEgg:: -convert_geom_tri(GeomTri *geom, const RenderState *net_state, - const LMatrix4f &net_mat, EggGroupNode *egg_parent) { - int nprims = geom->get_num_prims(); - Geom::VertexIterator vi = geom->make_vertex_iterator(); - Geom::NormalIterator ni = geom->make_normal_iterator(); - Geom::TexCoordIterator ti = geom->make_texcoord_iterator(); - Geom::ColorIterator ci = geom->make_color_iterator(); - - GeomBindType vb = geom->get_binding(G_COORD); - GeomBindType nb = geom->get_binding(G_NORMAL); - GeomBindType tb = geom->get_binding(G_TEXCOORD); - GeomBindType cb = geom->get_binding(G_COLOR); - - // Check for a color scale. - LVecBase4f color_scale(1.0f, 1.0f, 1.0f, 1.0f); - const RenderAttrib *color_scale_attrib = net_state->get_attrib(ColorScaleAttrib::get_class_type()); - if (color_scale_attrib != (const RenderAttrib *)NULL) { - const ColorScaleAttrib *csa = DCAST(ColorScaleAttrib, color_scale_attrib); - color_scale = csa->get_scale(); - } - - // Check for a color override. - bool has_color_override = false; - bool has_color_off = false; - Colorf color_override; - const RenderAttrib *color_attrib = net_state->get_attrib(ColorAttrib::get_class_type()); - if (color_attrib != (const RenderAttrib *)NULL) { - const ColorAttrib *ca = DCAST(ColorAttrib, color_attrib); - if (ca->get_color_type() == ColorAttrib::T_flat) { - has_color_override = true; - color_override = ca->get_color(); - color_override.set(color_override[0] * color_scale[0], - color_override[1] * color_scale[1], - color_override[2] * color_scale[2], - color_override[3] * color_scale[3]); - - } else if (ca->get_color_type() == ColorAttrib::T_off) { - has_color_off = true; - } - } - - // Check for a texture. - EggTexture *egg_tex = (EggTexture *)NULL; - const RenderAttrib *tex_attrib = net_state->get_attrib(TextureAttrib::get_class_type()); - if (tex_attrib != (const RenderAttrib *)NULL) { - const TextureAttrib *ta = DCAST(TextureAttrib, tex_attrib); - egg_tex = get_egg_texture(ta->get_texture()); - } - - // Check the backface flag. - bool bface = false; - const RenderAttrib *cf_attrib = net_state->get_attrib(CullFaceAttrib::get_class_type()); - if (cf_attrib != (const RenderAttrib *)NULL) { - const CullFaceAttrib *cfa = DCAST(CullFaceAttrib, cf_attrib); - if (cfa->get_effective_mode() == CullFaceAttrib::M_cull_none) { - bface = true; - } - } - - Normalf normal; - Colorf color; - - // Get overall properties. - if (nb == G_OVERALL) { - normal = geom->get_next_normal(ni); - } - if (cb == G_OVERALL) { - color = geom->get_next_color(ci); - } - - for (int i = 0; i < nprims; i++) { - // Get per-prim properties. - if (nb == G_PER_PRIM) { - normal = geom->get_next_normal(ni); - } - if (cb == G_PER_PRIM) { - color = geom->get_next_color(ci); - } - - EggPolygon *egg_poly = new EggPolygon; - egg_parent->add_child(egg_poly); - if (egg_tex != (EggTexture *)NULL) { - egg_poly->set_texture(egg_tex); - } - - if (bface) { - egg_poly->set_bface_flag(true); - } - - for (int j = 0; j < 3; j++) { - EggVertex egg_vert; - - // Get per-vertex properties. - if (vb == G_PER_VERTEX) { - Vertexf vertex = geom->get_next_vertex(vi); - egg_vert.set_pos(LCAST(double, vertex * net_mat)); - } - if (nb == G_PER_VERTEX) { - normal = geom->get_next_normal(ni) * net_mat; - } - if (tb == G_PER_VERTEX) { - TexCoordf uv = geom->get_next_texcoord(ti); - egg_vert.set_uv(LCAST(double, uv)); - } - if (cb == G_PER_VERTEX) { - color = geom->get_next_color(ci); - } - - if (nb != G_OFF) { - egg_vert.set_normal(LCAST(double, normal * net_mat)); - } - - if (has_color_override) { - egg_vert.set_color(color_override); - - } else if (!has_color_off && cb != G_OFF) { - egg_vert.set_color(Colorf(color[0] * color_scale[0], - color[1] * color_scale[1], - color[2] * color_scale[2], - color[3] * color_scale[3])); - } - - EggVertex *new_egg_vert = _vpool->create_unique_vertex(egg_vert); - egg_poly->add_vertex(new_egg_vert); - } - } -} - //////////////////////////////////////////////////////////////////// // Function: BamToEgg::recurse_nodes // Access: Private diff --git a/pandatool/src/bam/bamToEgg.h b/pandatool/src/bam/bamToEgg.h index 26b444d015..a86f78b217 100644 --- a/pandatool/src/bam/bamToEgg.h +++ b/pandatool/src/bam/bamToEgg.h @@ -34,8 +34,8 @@ class EggTexture; class LODNode; class GeomNode; class GeomTri; -class qpGeomVertexData; -class qpGeomTriangles; +class GeomVertexData; +class GeomTriangles; class PandaNode; class RenderState; class Texture; @@ -59,13 +59,11 @@ private: EggGroupNode *egg_parent, bool has_decal); void convert_geom_node(GeomNode *node, const WorkingNodePath &node_path, EggGroupNode *egg_parent, bool has_decal); - void convert_triangles(const qpGeomVertexData *vertex_data, - const qpGeomTriangles *primitive, + void convert_triangles(const GeomVertexData *vertex_data, + const GeomTriangles *primitive, const RenderState *net_state, const LMatrix4f &net_mat, EggGroupNode *egg_parent); - void convert_geom_tri(GeomTri *geom, const RenderState *net_state, - const LMatrix4f &net_mat, EggGroupNode *egg_parent); void recurse_nodes(const WorkingNodePath &node_path, EggGroupNode *egg_parent, bool has_decal); bool apply_node_properties(EggGroup *egg_group, PandaNode *node); diff --git a/pandatool/src/egg-qtess/Sources.pp b/pandatool/src/egg-qtess/Sources.pp index 219d2a2a95..a564039a77 100644 --- a/pandatool/src/egg-qtess/Sources.pp +++ b/pandatool/src/egg-qtess/Sources.pp @@ -3,7 +3,7 @@ #define LOCAL_LIBS \ eggbase progbase #define OTHER_LIBS \ - chan:c char:c downloader:c egg2pg:c event:c lerp:c builder:c \ + chan:c char:c downloader:c egg2pg:c event:c lerp:c \ tform:c grutil:c text:c dgraph:c display:c gsgbase:c collide:c gobj:c \ parametrics:c pgraph:c egg:c pandaegg:m \ pnmimagetypes:c pnmimage:c mathutil:c linmath:c putil:c panda:m \ diff --git a/pandatool/src/mayaprogs/Sources.pp b/pandatool/src/mayaprogs/Sources.pp index dd9cd6d5f0..59502500d7 100644 --- a/pandatool/src/mayaprogs/Sources.pp +++ b/pandatool/src/mayaprogs/Sources.pp @@ -119,7 +119,7 @@ #define LOCAL_LIBS \ mayaegg ptloader converter pandatoolbase #define OTHER_LIBS \ - egg2pg:c builder:c egg:c pandaegg:m \ + egg2pg:c egg:c pandaegg:m \ mathutil:c linmath:c putil:c panda:m \ express:c pandaexpress:m \ dtoolconfig dtool diff --git a/pandatool/src/ptloader/Sources.pp b/pandatool/src/ptloader/Sources.pp index 5744a82838..bc293bf073 100644 --- a/pandatool/src/ptloader/Sources.pp +++ b/pandatool/src/ptloader/Sources.pp @@ -5,7 +5,7 @@ fltegg flt lwoegg lwo dxfegg dxf vrmlegg pvrml xfileegg xfile \ converter pandatoolbase #define OTHER_LIBS \ - egg2pg:c builder:c egg:c pandaegg:m \ + egg2pg:c egg:c pandaegg:m \ mathutil:c linmath:c putil:c \ gobj:c chan:c parametrics:c pgraph:c \ pnmimage:c grutil:c collide:c tform:c text:c \