diff --git a/Assets/Synty/AnimationSwordCombat/Animations/Polygon/Attack/HeavyCombo01/A_Attack_HeavyCombo01A_Sword.fbx.meta b/Assets/Synty/AnimationSwordCombat/Animations/Polygon/Attack/HeavyCombo01/A_Attack_HeavyCombo01A_Sword.fbx.meta index 631b3d972..27ad79555 100644 --- a/Assets/Synty/AnimationSwordCombat/Animations/Polygon/Attack/HeavyCombo01/A_Attack_HeavyCombo01A_Sword.fbx.meta +++ b/Assets/Synty/AnimationSwordCombat/Animations/Polygon/Attack/HeavyCombo01/A_Attack_HeavyCombo01A_Sword.fbx.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: f3800f1bd189abc469fcc7c374371a91 ModelImporter: - serializedVersion: 22200 + serializedVersion: 24501 internalIDToNameTable: [] externalObjects: {} materials: @@ -9,6 +9,7 @@ ModelImporter: materialName: 0 materialSearch: 1 materialLocation: 1 + searchTexturesGlobally: 1 animations: legacyGenerateAnimations: 4 bakeSimulation: 0 @@ -16,8 +17,6 @@ ModelImporter: optimizeGameObjects: 0 removeConstantScaleCurves: 0 motionNodeName: - rigImportErrors: - rigImportWarnings: animationImportErrors: animationImportWarnings: animationRetargetingWarnings: @@ -580,6 +579,35 @@ ModelImporter: maskType: 1 maskSource: {fileID: 31900000, guid: ebc8800d7aef22a4aa95591cd452157d, type: 2} additiveReferencePoseFrame: 1 + - serializedVersion: 16 + name: A_Attack_HeavyCombo01A_Slam_Sword + takeName: A_Attack_HeavyCombo01A_Sword + internalID: -1787871631005901691 + firstFrame: 14.42 + lastFrame: 62 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 0 + loopBlend: 0 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 3 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 isReadable: 0 meshes: lODScreenPercentages: [] @@ -606,6 +634,11 @@ ModelImporter: maxBonesPerVertex: 4 minBoneWeight: 0.001 optimizeBones: 0 + generateMeshLods: 0 + meshLodGenerationFlags: 0 + maximumMeshLod: -1 + importUVs: -1 + importVertexColors: 1 meshOptimizationFlags: -1 indexFormat: 0 secondaryUVAngleDistortion: 8 @@ -625,6 +658,7 @@ ModelImporter: legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 blendShapeNormalImportMode: 1 normalSmoothingSource: 0 + calculateBlendshapeNormalsDeltaFromImportedNormals: 1 referencedClips: [] importAnimation: 1 humanDescription: diff --git a/Assets/Synty/AnimationSwordCombat/Animations/Polygon/Idle/Menacing01/A_Idle_Menacing01_Sword.fbx.meta b/Assets/Synty/AnimationSwordCombat/Animations/Polygon/Idle/Menacing01/A_Idle_Menacing01_Sword.fbx.meta index a15771d86..f14a79330 100644 --- a/Assets/Synty/AnimationSwordCombat/Animations/Polygon/Idle/Menacing01/A_Idle_Menacing01_Sword.fbx.meta +++ b/Assets/Synty/AnimationSwordCombat/Animations/Polygon/Idle/Menacing01/A_Idle_Menacing01_Sword.fbx.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: f574f64a099779248beea90d27b2dde0 ModelImporter: - serializedVersion: 22200 + serializedVersion: 24501 internalIDToNameTable: [] externalObjects: {} materials: @@ -9,6 +9,7 @@ ModelImporter: materialName: 0 materialSearch: 1 materialLocation: 1 + searchTexturesGlobally: 1 animations: legacyGenerateAnimations: 4 bakeSimulation: 0 @@ -16,8 +17,6 @@ ModelImporter: optimizeGameObjects: 0 removeConstantScaleCurves: 0 motionNodeName: - rigImportErrors: - rigImportWarnings: animationImportErrors: animationImportWarnings: animationRetargetingWarnings: @@ -44,7 +43,7 @@ ModelImporter: cycleOffset: 0 loop: 0 hasAdditiveReferencePose: 0 - loopTime: 0 + loopTime: 1 loopBlend: 0 loopBlendOrientation: 1 loopBlendPositionY: 1 @@ -195,6 +194,11 @@ ModelImporter: maxBonesPerVertex: 4 minBoneWeight: 0.001 optimizeBones: 0 + generateMeshLods: 0 + meshLodGenerationFlags: 0 + maximumMeshLod: -1 + importUVs: -1 + importVertexColors: 1 meshOptimizationFlags: -1 indexFormat: 0 secondaryUVAngleDistortion: 8 @@ -214,6 +218,7 @@ ModelImporter: legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 blendShapeNormalImportMode: 1 normalSmoothingSource: 0 + calculateBlendshapeNormalsDeltaFromImportedNormals: 1 referencedClips: [] importAnimation: 1 humanDescription: diff --git a/Assets/_Project/Animation/AC_PlayerTopDown.controller b/Assets/_Project/Animation/AC_PlayerTopDown.controller index 25263e0c5..ebf1ad229 100644 --- a/Assets/_Project/Animation/AC_PlayerTopDown.controller +++ b/Assets/_Project/Animation/AC_PlayerTopDown.controller @@ -42,7 +42,7 @@ AnimatorStateTransition: m_Mute: 0 m_IsExit: 0 serializedVersion: 3 - m_TransitionDuration: 0.03 + m_TransitionDuration: 0.06 m_TransitionOffset: 0 m_ExitTime: 0.75 m_HasExitTime: 0 @@ -58,7 +58,7 @@ AnimatorState: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: SpecialSlam - m_Speed: 1 + m_Speed: 1.5 m_CycleOffset: 0 m_Transitions: - {fileID: -1718360560449278314} @@ -71,7 +71,7 @@ AnimatorState: m_MirrorParameterActive: 0 m_CycleOffsetParameterActive: 0 m_TimeParameterActive: 0 - m_Motion: {fileID: -623603649343465320, guid: da76a86fe339c6444a0c1c040a9b5105, type: 3} + m_Motion: {fileID: -1787871631005901691, guid: f3800f1bd189abc469fcc7c374371a91, type: 3} m_Tag: m_SpeedParameter: m_MirrorParameter: @@ -124,7 +124,7 @@ AnimatorStateTransition: m_Mute: 0 m_IsExit: 0 serializedVersion: 3 - m_TransitionDuration: 0.04 + m_TransitionDuration: 0.07 m_TransitionOffset: 0 m_ExitTime: 0.75 m_HasExitTime: 0 @@ -149,7 +149,7 @@ AnimatorStateTransition: m_Mute: 0 m_IsExit: 1 serializedVersion: 3 - m_TransitionDuration: 0.12 + m_TransitionDuration: 0.15 m_TransitionOffset: 0 m_ExitTime: 0.9 m_HasExitTime: 0 @@ -202,7 +202,7 @@ AnimatorStateTransition: m_Mute: 0 m_IsExit: 0 serializedVersion: 3 - m_TransitionDuration: 0.03 + m_TransitionDuration: 0.06 m_TransitionOffset: 0 m_ExitTime: 0.75 m_HasExitTime: 0 @@ -365,7 +365,7 @@ AnimatorStateTransition: m_Mute: 0 m_IsExit: 1 serializedVersion: 3 - m_TransitionDuration: 0.12 + m_TransitionDuration: 0.15 m_TransitionOffset: 0 m_ExitTime: 0.9 m_HasExitTime: 0 @@ -390,7 +390,7 @@ AnimatorStateTransition: m_Mute: 0 m_IsExit: 1 serializedVersion: 3 - m_TransitionDuration: 0.12 + m_TransitionDuration: 0.15 m_TransitionOffset: 0 m_ExitTime: 0.9 m_HasExitTime: 0 @@ -633,7 +633,7 @@ AnimatorState: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: Swing3 - m_Speed: 1 + m_Speed: 1.1 m_CycleOffset: 0 m_Transitions: - {fileID: 7246856984932168808} @@ -646,7 +646,7 @@ AnimatorState: m_MirrorParameterActive: 0 m_CycleOffsetParameterActive: 0 m_TimeParameterActive: 0 - m_Motion: {fileID: -623603649343465320, guid: 594271330704f684e85012825546489b, type: 3} + m_Motion: {fileID: -8890989884591690541, guid: c9e0b6900401fcb42980df96b84db76c, type: 3} m_Tag: m_SpeedParameter: m_MirrorParameter: @@ -727,6 +727,12 @@ AnimatorController: m_DefaultInt: 0 m_DefaultBool: 0 m_Controller: {fileID: 9100000} + - m_Name: InCombat + m_Type: 4 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 9100000} m_AnimatorLayers: - serializedVersion: 5 m_Name: Base Layer @@ -786,7 +792,7 @@ AnimatorState: m_MirrorParameterActive: 0 m_CycleOffsetParameterActive: 0 m_TimeParameterActive: 0 - m_Motion: {fileID: -623603649343465320, guid: 42d545cebb3c8b54ebedba77f9435c49, type: 3} + m_Motion: {fileID: 5800342443961765143, guid: 95697c3218923dd43aa160c110bfbc79, type: 3} m_Tag: m_SpeedParameter: m_MirrorParameter: @@ -868,7 +874,7 @@ AnimatorStateTransition: m_Mute: 0 m_IsExit: 0 serializedVersion: 3 - m_TransitionDuration: 0.03 + m_TransitionDuration: 0.06 m_TransitionOffset: 0 m_ExitTime: 0.75 m_HasExitTime: 0 @@ -896,12 +902,37 @@ AnimatorState: m_MirrorParameterActive: 0 m_CycleOffsetParameterActive: 0 m_TimeParameterActive: 0 - m_Motion: {fileID: -623603649343465320, guid: 65d8851d683f4784b9f64c2f37c952c7, type: 3} + m_Motion: {fileID: -1444214504022159124, guid: a0b8f6f252ea03c46b36b357f5ea81e5, type: 3} m_Tag: m_SpeedParameter: m_MirrorParameter: m_CycleOffsetParameter: m_TimeParameter: +--- !u!1101 &3694240317838589182 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 2 + m_ConditionEvent: InCombat + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 8302574255206078140} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.4 + m_TransitionOffset: 0 + m_ExitTime: 0.9 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 --- !u!1101 &5014557051428573475 AnimatorStateTransition: m_ObjectHideFlags: 1 @@ -963,6 +994,9 @@ AnimatorStateMachine: - serializedVersion: 1 m_State: {fileID: -8219464881866229938} m_Position: {x: 515, y: 585, z: 0} + - serializedVersion: 1 + m_State: {fileID: 5692497731704029855} + m_Position: {x: 550, y: 650, z: 0} m_ChildStateMachines: [] m_AnyStateTransitions: - {fileID: 5014557051428573475} @@ -980,6 +1014,34 @@ AnimatorStateMachine: m_ExitPosition: {x: 800, y: 120, z: 0} m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} m_DefaultState: {fileID: 8302574255206078140} +--- !u!1102 &5692497731704029855 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: CombatIdle + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 3694240317838589182} + - {fileID: 5811251164301445305} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: -3634702890504892199, guid: f574f64a099779248beea90d27b2dde0, type: 3} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: --- !u!1102 &5736576975501273399 AnimatorState: serializedVersion: 6 @@ -988,7 +1050,7 @@ AnimatorState: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: Swing1 - m_Speed: 1 + m_Speed: 1.25 m_CycleOffset: 0 m_Transitions: - {fileID: -1792799526728587842} @@ -1001,12 +1063,37 @@ AnimatorState: m_MirrorParameterActive: 0 m_CycleOffsetParameterActive: 0 m_TimeParameterActive: 0 - m_Motion: {fileID: -623603649343465320, guid: dd80b656157b2b441b2466c7646c8441, type: 3} + m_Motion: {fileID: -7717634560727564301, guid: 9f773338b2a96174ebe9b63870034ca3, type: 3} m_Tag: m_SpeedParameter: m_MirrorParameter: m_CycleOffsetParameter: m_TimeParameter: +--- !u!1101 &5811251164301445305 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 3 + m_ConditionEvent: Speed + m_EventTreshold: 0.1 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: -8102868851794693864} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.25 + m_TransitionOffset: 0 + m_ExitTime: 0.9 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 --- !u!1107 &6065214076707455157 AnimatorStateMachine: serializedVersion: 7 @@ -1046,7 +1133,7 @@ AnimatorStateTransition: m_Mute: 0 m_IsExit: 1 serializedVersion: 3 - m_TransitionDuration: 0.12 + m_TransitionDuration: 0.15 m_TransitionOffset: 0 m_ExitTime: 0.9 m_HasExitTime: 0 @@ -1066,6 +1153,7 @@ AnimatorState: m_CycleOffset: 0 m_Transitions: - {fileID: -1505565898738729052} + - {fileID: 9125527510138141906} m_StateMachineBehaviours: [] m_Position: {x: 50, y: 50, z: 0} m_IKOnFeet: 0 @@ -1081,6 +1169,31 @@ AnimatorState: m_MirrorParameter: m_CycleOffsetParameter: m_TimeParameter: +--- !u!1101 &9125527510138141906 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 1 + m_ConditionEvent: InCombat + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 5692497731704029855} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.25 + m_TransitionOffset: 0 + m_ExitTime: 0.9 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 --- !u!1102 &9217853296350750828 AnimatorState: serializedVersion: 6 diff --git a/Assets/_Project/Art/Models/Rebased_SM_Wep_Melee.asset b/Assets/_Project/Art/Models/Rebased_SM_Wep_Melee.asset new file mode 100644 index 000000000..0df0627cb --- /dev/null +++ b/Assets/_Project/Art/Models/Rebased_SM_Wep_Melee.asset @@ -0,0 +1,198 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!43 &4300000 +Mesh: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Rebased_SM_Wep_Melee + serializedVersion: 12 + m_SubMeshes: + - serializedVersion: 2 + firstByte: 0 + indexCount: 2586 + topology: 0 + baseVertex: 0 + firstVertex: 0 + vertexCount: 1508 + localAABB: + m_Center: {x: 1.2140799, y: 0.40094, z: -0.05417368} + m_Extent: {x: 0.6914554, y: 0.071966305, z: 0.31731963} + m_Shapes: + vertices: [] + shapes: [] + channels: [] + fullWeights: [] + m_BindPose: + - e00: 1 + e01: 0.000000018409569 + e02: 0.00000009140017 + e03: -0.79963195 + e10: 0.000000018409587 + e11: -1 + e12: -0.00000017136335 + e13: 0.46094 + e20: 0.00000009140017 + e21: 0.00000017136335 + e22: -1 + e23: -0.034173902 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_BoneNameHashes: + m_RootBoneNameHash: 0 + m_BonesAABB: + - m_Min: {x: -0.27700758, y: -0.011966288, z: -0.29731965} + m_Max: {x: 1.1059033, y: 0.13196632, z: 0.33731964} + m_VariableBoneCountWeights: + m_Data: + m_MeshCompression: 0 + m_IsReadable: 1 + m_KeepVertices: 0 + m_KeepIndices: 0 + m_IndexFormat: 0 + m_IndexBuffer: 9501980196010d0297010e025900270228025702580259025a025b025c0261026202630269056a056b0573057405750576057705780579057a057b057c057d057e057f0580058105000006000700000007000100b101b2010800b10108000200b301b4010900b30109000300b501b6010a00b5010a000400b701b8010b00b7010b000500b901ba01bb01b901bb01bc01c90119001800c9011800ca01cb011a00cc01cb01cc01cd01ce011b00cf01ce01cf01d001d1011c00d201d101d201d301d4011d00d501d401d501d601d701d801d901d701d901da01db011e001f00db011f00dc01dd01de012000dd012000df01e001e1012100e0012100e201e301e4012200e3012200e501e601e7012300e6012300e801e901ea01eb01e901eb01ec01ed01ee01ef01ee01f101ef01ee01f001f101f001ee01f201f301f401f501f401f701f501f401f601f701f701f601f8014a00370062004a00620061005200270026005200260053002500560055002500550024004d004c002c004d002c002d002e002f0050002e0050004f00010202023000010230003100320033000402320004020502070291015e00070293019101340093010702920193013400920134005f00340060005f0034001a026000080209020a0208020a025800fc010b020c02fc010c023e000c023f003e003f0018023e003f001902180217023e0018025400fc013e00170254003e005400fb01fc011602540017024900fb01540016024900540049000302fb011502490016024800030249001502480049004800fe0103021402480015024e00fe01480014024e0048004e00fd01fe0111024e0014024700fd014e00110247004e0047002800fd01470038002800470046003800470013024600110213024700110212021302290039004500290045004400440045003c0044003c003a0044003a002b0000022900440044002b001f0200024400510044001f025100ff010002510051001f021d02ff015100430051001d0243000602ff01430043001d021e0206024300420043001e024200fa0106024200570042001e02fa014200570057001e021c021b0257001c024100fa0157001b02410057004100f901fa0141003600f90141004b003600410040004b001b02400041001b02350040005d005c003b005d003b002a003d000f0210023d0010025b00200221022202200222025a0023022402250223022502260229022a022b0229022b022c022d022e022f022d022f02300231023202330231023302340235023602370235023702380239023a023b0239023b023c023d023e023f023d023f02400241024202430241029401420248024202940144024502460244024602470249024402470249024a0244024b024c024d024b024d024e024f02500251024f02510252025302540255025302550256025d025e025f025d025f0260026f00720071006f0071007000770078007a0077007a00790065006a00690065006900660064026c006b0064026b00650266026e006d0066026d0067026802670068006802680069026a02630064006a0264006b026c026d026e026c026e026f026f026e0273006f02730078026e02d7027300d502d702d802d502d602d7027500d6027b027a0275007b027a027b027c027c027b0280027c028002810270027202730270027102720279027102700279027400710271027400d002cf02d002a500cf02a500d10276007e02a5007d027e0276007d0276007f0286027e027d02860287027e027402750276027402760277028202830284028202840285027b00160115017b0015017c00880289021401880214017d008a028b0213018a0213017e008c028d0212018c0212017f008e028f0211018e02110180009002910292029002920293028200880083008100880082009c02880081009a029b02840084009b02850085009b0286009000dc00db009000db008f009300dd009d0293009d029e029500de009f0295009f02a0029700df00a1029700a102a2029900e000a3029900a302a402a502a602a702a502a702a8028a00a902aa028a00aa028900ab02ac029100ab02910092008b00ad02ae028b00ae02af02b002b102b202b002b20294008c00b302b4028c00b402b502b602b702b802b602b80296008d00b902ba028d00ba02bb02bc02bd02be02bc02be0298008e00bf02c0028e00c002c102c202c302c402c202c4029a00c502c602c702c502c702c802c902ca02cb02c902cb02cc029b00c600c500da049b00c500da04c5005f010a05da045f019c00c700cd029c00cd02ce029e00c400c3009e00c3009d00a000a400a300a000a3009f00d202d302a600d202a600d402a200a800a700a200a700a100d902a900db02d902da02a900bd00fb02a900f902fb02bd00f902fa02fb02fa020003fb02fa02ff020003ed02bb00da02ec02bb00ed02ec02f702bb00eb02ec02ed02eb02ed02ee02dc02dd02aa00dc02aa00de02df02e102e202df02e002e102f202e102bc00f802f202bc00f802ef02f202ef02f102f202ef02f002f102be00e002fe02fc02be00fe02fc02fd02be000503fc02fe020503fe020603b700b800b900b700b900ba00bf00c100c200bf00c200c000ad00ae00b100ad00b100b200e302e402b300e302b300b400e502e602b500e502b500b600e702e802b000e702b000af00e902ea02ac00e902ac00ab00f302f402f502f302f502f602010302030303010303030403ca00cc00cb00ca00cb00c900cd00ce000703cd0007030803cf00d0000903cf0009030a03d100d2000b03d1000b030c03d300d4000d03d3000d030e030f03100311030f0311031203130314031503130315031603170318031903170319031a031b031c031d031b031d031e031f03200321031f0321032203230324032503230325032603270328032903270329032a032b032c032d032b032d032e032f03300331032f0331033203c80033033403c800340335033603370338033603380339033a033b033c033a033c033d033e033f0340033e034003410366016801670166016701650169016a0142036901420343036b016c0144036b01440345036d016e0146036d01460347036f01700148036f01480349034a034b034c034a034c034d03e200e400e300e200e300e100e500e6004e03e5004e034f03e700e8005003e70050035103e900ea005203e90052035303eb00ec005403eb00540355035603570358035603580359035a035b035c035a035c035d03d5005f03d600d5005e035f0380035e03d500800381035e0360036103620360036203630364036503660364036603d700670368036903670369036a036b036c036d036b036d03d8006e036f0370036e037003710372037303740372037403d90075037603770375037703780379037a037b0379037b03da007c037d037e037c037e037f03ee008901ed00ee008c01890182038c01ee008a018c0182038a01820383038d018403ef008d018f018403880384038f01850386038e0185038e01870389038a03f000890390018a038a0390018f038b038c038d038b038d038e03f10090039103f10091039203f2008b0193038b01950393038b0194039503f40006010501f4000501f300f50007019603f50096039703f60008019803f60098039903f70009019a03f7009a039b03f8000a019c03f8009c039d039e039f03a0039e03a003a103fa0036013501fa003501f900fb003701a203fb00a203a303fc003801a403fc00a403a503fd003901a603fd00a603a703fe003a01a803fe00a803a903aa03ab03ac03aa03ac03ad030001ae03af030001af03ff000101b003b1030101b103b2030201b303b4030201b403b5030301b603b7030301b703b8030401b903ba030401ba03bb03bc03bd03be03bc03be03bf03c003c103c203c003c203c303c403c503c603c403c603c703c803c903ca03c803ca03cb03cc03cd03ce03cc03ce03cf03d003d103d203d003d203d303d403d503d603d403d603d7030c01d803d9030c01d9030b010d01da03db030d01db03dc030e01dd03de030e01de03df030f01e003e1030f01e103e2031001e303e4031001e403e503e603e703e803e603e803e903ea03eb03ec03ea03ec03ed03ee03ef03f003ee03f003f103f203f303f403f203f403f503f603f703f803f603f803f903fa03fb03fc03fa03fc03fd03fe03ff030004fe03000401041801020403041801030417011901040405041901050406041a01070408041a01080409041b010a040b041b010b040c041c010d040e041c010e040f041004110412041004120413043c013e013d013c013d013b013f01400114043f0114041504410142011604410116041704430144011804430118041904450146011a0445011a041b041c041d041e041c041e041f0424011e011d0124011d01230125011f012004250120042104260120012204260122042304270121012404270124042504280122012604280126042704280429042a0428042a042b0448019a0199014801990147014b019b012c044b012c042d044d019c012e044d012e042f044f019d0130044f013004310451019e01320451013204330434043504360434043604370430012a012901300129012f0131012b01380431013804390432012c013a0432013a043b0433012d013c0433013c043d0434012e013e0434013e043f0440044104420440044204430454015601550154015501530157015801440457014404450459015a0146045901460447045b015c0148045b01480449045d015e014a045d014a044b044c044d044e044c044e044f04500451045204500452045304540455045604540456045704580459045a0458045a045b045c045d045e045c045e045f04600461046204600462046304640465046604640466046704680469046a0468046a046b046c046d046e046c046e046f04700471047204700472047304740475047604740476047704780479047a0478047a047b047c047d047e047c047e047f04800481048204800482048304840449014a0184044a0185048604870488048604880489048a048b044c018a044c018c048d048e048f048d048f049004910492044e0191044e019304940495049604940496049704980499045001980450019a049b049c049d049b049d049e049f04a00452019f045201a104a204a304a404a204a404a504a604a704a804a604a804a904aa04ab04ac04aa04ac04ad04ae04af04b004ae04b004b104b204b304b404b204b404b504b604b704b804b604b804b904ba04bb04bc04ba04bc04bd04be04bf04c004be04c004c104c204c304c404c204c404c504c604c704c804c604c804c904ca04cb04cc04ca04cc04cd04ce04cf04d004ce04d004d104d204d304d404d204d404d504d604d704d804d604d804d9046101db04dc046101dc0460016401e404e5046401e5046301ea04ec04ed04ea04eb04ec04f204eb04ea04f204f304eb04f604f304f204f604f704f304ee04ef04f004ee04f004f104f104f004f404f104f404f504f504f404f804f504f804f904fa04fc04fd04fa04fb04fc040205fb04fa0402050305fb04060503050205060507050305fe04ff040005fe0400050105010500050405010504050505050504050805050508050905e904e8040b05e604e804e904e604e704e804e6040c05e704e1040d05e204e004e104e204e004e204e3040e05e004e3046201df040f05dd04df046201dd04de04df04dd041005de0411051205130511051305140515051605170515051705180519051a051b0519051b051c051d051e051f051d051f05200539053a053b0539053b053c053d053e053f053d053f05400541054205430541054305440545054605470545054705480549054a054b0549054b054c054d054e054f054d054f05500551055205530551055305540555055605570555055705580559055a055b0559055b055c055d055e055f055d055f0560056105620563056105630564056505660567056505670568056c056d056e056c056e056f05700572056e057005710572058205830584058405830585058405850586058705880589058a05890588058a0588058b058c058d058e058e058d058f058e058f059005910592059305940593059205940592059505a601a801a701a601a701a501a901aa019605a90196059705ab01ac019805ab0198059905ad01ae019a05ad019a059b05af01b0019c05af019c059d059e059f05a0059e05a005a105a001a205a305a001a3059f01a101a405a505a101a505a605a201a705a805a201a805a905a301aa05ab05a301ab05ac05a401ad05ae05a401ae05af05b005b105b205b005b205b305b405b505b605b405b605b705b805b905ba05b805ba05bb05bc05bd05be05bc05be05bf05c005c105c205c005c205c305c405c505c605c405c605c705c805c905ca05c805ca05cb05cc05cd05ce05cc05ce05cf05d005d105d205d005d205d305d405d505d605d405d605d705d805d905da05d805da05db05dc05dd05de05dc05de05df05e005e105e205e005e205e305990287009802950287009902980287009702940287009502970287009602960287009402320588013805320581018801380588018001310581013205380580012f053105820181012f0580017f013605820131052f057f01300536058601820130057f0186013005860136053705870183013705830133052e05870137053305830184012e057e0187013305840134052d057e012e053405840185012d057d017e0134058501350535057d012d05350585017d012b057b012c052b057c017b012c057b01750127057c012b052c0575012505270577017c0125057501740124057701270525057401230524057301770123057401730123057301240529057a012a05290579017a012a057a0178012605790129052a0578012805260576017901280578017101220576012605280571012105220572017601210571017201210572012205c7011700c801c70116001700c80117001200c6011600c701c8011200c301c60115001600c30112001300c5011500c601c3011300c401c50114001500c40113001400c4011400c501c20111001000c2011000c101be011100c201c10110000f00be010c001100c1010f00c001bd010c00be01c0010f000e00bd010d000c00c0010e00bf01bf010d00bd01bf010e000d00 + m_VertexData: + serializedVersion: 3 + m_VertexCount: 1508 + m_Channels: + - stream: 0 + offset: 0 + format: 0 + dimension: 3 + - stream: 0 + offset: 12 + format: 0 + dimension: 3 + - stream: 0 + offset: 24 + format: 0 + dimension: 4 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 1 + offset: 0 + format: 0 + dimension: 2 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 2 + offset: 0 + format: 0 + dimension: 4 + - stream: 2 + offset: 16 + format: 10 + dimension: 4 + m_DataSize: 120640 + _typelessdata: 79a7d23f8eaaec3e7c6ea1bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803fa1bfd73f8eaaec3e7a6ea1bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803fb64bda3f8eaaec3e35e55dbdd4b35d3ff1d94ab40a00003fa3ac2f340000803f01daca330000803fa1bfd73f8eaaec3e9a89b5bdd7b35d3f3bcf96b2050000bfd79a82320000803f41cf16b20000803f79a7d23f8eaaec3e9a89b5bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf651bd03f8eaaec3e37e55dbde9b35dbfe3d94a34d1ffffbea8ac2f340000803fbed9ca33000080bf79a7d23f77e5ad3e876ea1bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803fa1bfd73f77e5ad3e856ea1bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803fb64bda3f77e5ad3e3be55dbdd4b35d3ff1d94ab40a00003fa3ac2f340000803f01daca330000803fa1bfd73f77e5ad3e9d89b5bdd7b35d3f3bcf96b2050000bfd79a82320000803f41cf16b20000803f79a7d23f77e5ad3e9d89b5bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf651bd03f77e5ad3e3de55dbde9b35dbfe3d94a34d1ffffbea8ac2f340000803fbed9ca33000080bf67d3d33f8eaaec3e30a711bd010000b40100803f020038340000803f020000340300b828000080bfb493d63f8eaaec3e2fa711bd010000b40100803f020038340000803f020000340300b828000080bfd9f3d73f8eaaec3e35e55dbd010000b40100803f020038340000803f020000340300b828000080bfb493d63f8eaaec3ea11195bd010000b40100803f020038340000803f020000340300b828000080bf67d3d33f8eaaec3ea11195bd010000b40100803f020038340000803f020000340300b828000080bf4273d23f8eaaec3e36e55dbd010000b40100803f020038340000803f020000340300b828000080bf67d3d33f77e5ad3e35a711bd01000034010080bf020038b40000803f020000340300b8280000803fb493d63f77e5ad3e35a711bd01000034010080bf020038b40000803f020000340300b8280000803fd9f3d73f77e5ad3e3be55dbd01000034010080bf020038b40000803f020000340300b8280000803fb493d63f77e5ad3ea31195bd01000034010080bf020038b40000803f020000340300b8280000803f67d3d33f77e5ad3ea41195bd01000034010080bf020038b40000803f020000340300b8280000803f4273d23f77e5ad3e3ce55dbd01000034010080bf020038b40000803f020000340300b8280000803fc996d43fc720f23e51f43bbdd38a1fb43a10323f86ed373f0000803f47f1dd338840e5330000803f50d0d53fc720f23e51f43bbdd38a1fb43b10323f86ed373f0000803f48f1dd338840e5330000803f166dd63fc720f23e35e55dbd00491f3f8010323f58edb73eba4075be701589be58e96e3f0000803f50d0d53fc720f23e1fd67fbd03491f3f8210323f3eedb7be9740753e5c15893e5de96e3f0000803fc996d43fc720f23e1fd67fbd462b94b23d10323f84ed37bf0000803ff91e4e32cfe854b2000080bf07fad33fc720f23e36e55dbd45491fbf8610323f63ecb7beac3f75bea314893e86e96e3f0000803fc996d43f3e6fa83e58f43bbd392b94323c1032bf87ed373f0000803fe61e4e32c0e854b20000803f50d0d53f3e6fa83e58f43bbd392b94323c1032bf87ed373f0000803fe61e4e32c0e854b20000803f166dd63f3e6fa83e3ce55dbd05491f3f821032bf54edb73ebb4075be6e15893e59e96e3f000080bf50d0d53f3e6fa83e26d67fbd09491f3f801032bf4aedb7beb140753e641589be5ae96e3f000080bfc996d43f3e6fa83e26d67fbdd38a1f34371032bf8bed37bf0000803f43f1dd338e40e533000080bf07fad33f3e6fa83e3ce55dbd47491fbf7d1032bf6fecb7bec23f75bea71489be85e96e3f000080bffb83b73f6d5fd53eedde45bec2c687bed7770fb49ad5763f2c2f18b30000803fde540a34000080bffb83b73f9930c53eedde45bec2c687bed7770fb49ad5763f2c2f18b30000803fde540a34000080bffd44ef3f6d5fd53e232b46be25f79c3e9b6156b445ac733f727283330000803fe90e4c34000080bffc44ef3f9930c53e232b46be25f79c3e9b6156b445ac733f727283330000803fe90e4c34000080bf6b3cef3f6b5fd53e1441ae3d010000b40100803f020038340000803f020000340300b828000080bf6b3cef3f9730c53e1441ae3d01000034010080bf020038b40000803f020000340300b8280000803fbf43b73f6c5fd53e171baf3d49be97be2532633fc0aeb43e9a7f743f3a018d3e4146e03d000080bfbf43b73f9830c53e171baf3d01000034010080bf020038b40000803f020000340300b8280000803f8d93da3f9830c53eaa1c623cd06c223fab097433c0df45bfd9d51ab30000803fbca03c330000803f8d93da3f6c5fd53eb01c623cd06c223fab097433c0df45bfd9d51ab30000803fbca03c330000803f53efcf3f6c5fd53ea81c623c57ae10bf18236034fb3153bfc358fd330000803fafe838340000803f53efcf3f9830c53ea21c623c57ae10bf18236034fb3153bfc358fd330000803fafe838340000803f8d93da3f9930c53ed028fabd0100803f010000b4c747c433c947c4b3c94744280000803f000080bf8d93da3f6c5fd53ecf28fabd0100803f010000b4c747c433c947c4b3c94744280000803f000080bf53efcf3f6d5fd53ed128fabd010080bf01000034c747c4b3c947c4b3c94744280000803f0000803f53efcf3f9930c53ed128fabd010080bf01000034c747c4b3c947c4b3c94744280000803f0000803f7b7bc43f6e5fd53ee49491bef14493be460a5a3f0741e0be722e753f7df7823efbb206be000080bf7b7bc43f9a30c53ee49491be01000034010080bf020038b40000803f020000340300b8280000803f5076e43f9930c53e168e92be01000034010080bf020038b40000803f020000340300b8280000803f5076e43f6d5fd53e168e92be1ca09c3e4262583fe754e0be40ba733fbc0d8bbe4029103e000080bf5076e43f6b5fd53e9b29363e010000b40100803f020038340000803f020000340300b828000080bf5076e43f9730c53e9b29363e01000034010080bf020038b40000803f020000340300b8280000803f7a7bc43f9730c53e2737343e01000034010080bf020038b40000803f020000340300b8280000803f7a7bc43f6b5fd53e2737343e48be97be2532633fbdaeb43e9b7f743f39018d3e3d46e03d000080bf8636d13f9730c53e79ea743e01000034010080bf020038b40000803f020000340300b8280000803f8636d13f6a5fd53e7aea743e3dc190be3a13583fe250e93e368e753f97c07e3e258a093e000080bf6657d53f6d5fd53ef98849be010000b40100803f020038340000803f020000340300b828000080bf8736d13f6e5fd53e8ceeb1be010000b40100803f020038340000803f020000340300b828000080bf8736d13f9a30c53e8ceeb1be01000034010080bf020038b40000803f020000340300b8280000803f6657d53f9930c53ef98849be01000034010080bf020038b40000803f020000340300b8280000803fd26cd53f9930c53ed128fabd01000034010080bf020038b40000803f020000340300b8280000803fd26cd53f9830c53ea61c623c01000034010080bf020038b40000803f020000340300b8280000803f6657d53f9730c53ea62cb53d01000034010080bf020038b40000803f020000340300b8280000803f5996d93f9730c53e7aea743e01000034010080bf020038b40000803f020000340300b8280000803f5996d93f6a5fd53e7aea743e010000b40100803f020038340000803f020000340300b828000080bf6657d53f6b5fd53ea72cb53d010000b40100803f020038340000803f020000340300b828000080bfd26cd53f6c5fd53eac1c623c010000b40100803f020038340000803f020000340300b828000080bfd26cd53f6c5fd53ed028fabd010000b40100803f020038340000803f020000340300b828000080bf5a96d93f6e5fd53e8ceeb1be1ca09c3e4262583fe454e0be40ba733fbc0d8bbe3f29103e000080bf5a96d93f9a30c53e8ceeb1be01000034010080bf020038b40000803f020000340300b8280000803f3d8edf3f9830c53eac513b3dd06c223fab097433c0df45bfd9d51ab30000803fbca03c330000803f3d8edf3f6b5fd53ead513b3dd06c223fab097433c0df45bfd9d51ab30000803fbca03c330000803f1d60d53f6b5fd53ece67483d010000b40100803f020038340000803f020000340300b828000080bfcaf9c93f6c5fd53eb8293b3d57ae10bf18236034fb3153bfc358fd330000803fafe838340000803fcaf9c93f9830c53eb6293b3d57ae10bf18236034fb3153bfc358fd330000803fafe838340000803f1d60d53f9830c53ecd67483d01000034010080bf020038b40000803f020000340300b8280000803f3d8edf3f9930c53e07c71dbed69e9c3ebd5556b479ba733f3b2183330000803f820f4c34000080bf3d8edf3f6d5fd53e07c71dbed69e9c3ebd5556b479ba733f3b2183330000803f820f4c34000080bf1d60d53f6d5fd53e920c21be010000b40100803f020038340000803f020000340300b828000080bfcaf9c93f6d5fd53e0cbd1dbe2e4486be78fe0fb4730a773f190b17b30000803f66f40a34000080bfcaf9c93f9930c53e0dbd1dbe2e4486be78fe0fb4730a773f190b17b30000803f66f40a34000080bf1d60d53f9930c53e920c21be01000034010080bf020038b40000803f020000340300b8280000803f94e8f33f0148cd3e2e6252beff29a73e284c643fe160a0be6e8cdc3d449a963edb1d733f0000803f94e8f33f0048cd3e27dfc63dd622a03e1dbc0634182873bfcf8f28b30000803f53f3ff330000803f006cda3fff47cd3e11bb863e5ce220b47cba553f73e90c3f0000803f89510634011db133000080bf926cd03fff47cd3e11bb863e3bc190be3a13583fe250e93e368e753f93c07e3e228a093e000080bfb76ec13f0048cd3eb490443e48be97be2532633fc0aeb43e9a7f743f39018d3e4046e03d000080bfd866b23f0048cd3e20dfc63d48be97be2532633fbeaeb43e9b7f743f39018d3e3e46e03d000080bfd866b23f0248cd3e316252becd9284be1ba06b3f59f895beec44773f46a97c3e21d0a0bd000080bfb76ec13f0248cd3eaac199bea71b96be9ea15a3f9f07dcbe2cc0743fb816863e4af206be000080bf936cd03f0348cd3e5f34bebe43c190be3613583fed50e9be358e753f9dc07e3e308a09be000080bf016cda3f0348cd3e5f34bebe1ea09c3e4262583fe754e0be40ba733fbe0d8bbe4229103e000080bfc05fe73f0248cd3ee0099bbe1ca09c3e4262583fe754e0be40ba733fbc0d8bbe4029103e000080bf6c4bec3f013eda3e4e9b53bef9d33c3fa29fee32bddb2cbfd102b0b20000803f1420a1320000803f6c4bec3f0552c03e4f9b53bef9d33c3fa29fee32bddb2cbfd102b0b20000803f1420a1320000803ff2a0ba3f023eda3e727853be089d26bfd8005f34495c42bf572311340000803f084f29340000803ff2a0ba3f0552c03e737853be089d26bfd8005f34495c42bf572311340000803f084f29340000803f7818e43f023eda3e1ea18dbe995c123fec8f9b33b40852bfb3e031b30000803fb3427f330000803f7818e43f0552c03e1fa18dbe995c123fec8f9b33b40852bfb3e031b30000803fb3427f330000803f7ed8c43f0552c03ed4c48cbe089d26bfd8005f34495c42bf572311340000803f084f29340000803f7ed8c43f023eda3ed3c48cbe089d26bfd8005f34495c42bf572311340000803f084f29340000803f6940d13f0652c03ed51cabbeac8c05bfc8c05f3493675abf3774e9330000803fb1e43e340000803f6940d13f023eda3ed51cabbeac8c05bfc8c05f3493675abf3774e9330000803fb1e43e340000803f2b85d93f0652c03e6d1babbec7a22e398efa3734020080bf9002fbad0000803f91fa37340000803f2b85d93f023eda3e6c1babbec7a22e398efa3734020080bf9002fbad0000803f91fa37340000803f83e8c13f023eda3e933d47be520c353f6e9c5cb498fd343f38051c340000803f87f81b340000803f0d2ec93f023eda3e50b780be520c353f6e9c5cb498fd343f38051c340000803f87f81b340000803f0d2ec93f0552c03e50b780be520c353f6e9c5cb498fd343f38051c340000803f87f81b340000803f83e8c13f0552c03e943d47be520c353f6e9c5cb498fd343f38051c340000803f87f81b340000803fadecce3f023eda3e69218bbe19eae6bb84fb7f3f674c19bc60fe7f3f85e7e63bb4478ab8000080bfadecce3f0552c03e69218bbee0eae6bb84fb7fbfc74d19bc60fe7f3f4ce8e6bb69498ab80000803fdf51db3f023eda3e292b8bbed611013c4afb7f3fce5414bcf8fd7f3f7d1001bc53939538000080bfdf51db3f0552c03e292b8bbe6914013c4afb7fbf255614bcf8fd7f3f1013013ca89795380000803fbc2ae03f023eda3e852c81be49a247bf84e275b2cd41203ff4be3fb20000803fc6ec1932000080bfbc2ae03f0552c03e852c81be49a247bf84e275b2cd41203ff4be3fb20000803fc6ec1932000080bf6c03e63f013eda3e7e1548be49a247bf84e275b2cd41203ff4be3fb20000803fc6ec1932000080bf6c03e63f0552c03e7e1548be49a247bf84e275b2cd41203ff4be3fb20000803fc6ec1932000080bfb6ca053f038fc73ed1990ebd5dcbc3be08a302b6c88a6c3fecd347b50000803f3b6af135000080bfb6ca053f0401d33ed0990ebd5dcbc3be08a302b6c88a6c3fecd347b50000803f3b6af135000080bfb6ca053ffeb9d83e54e55dbd67cbc3be03da4c3f9f8aec3ec08a6c3f2f90a93e49cb433e000080bfb6ca053f0401d33e6f9896bd63cbc3be0ada4c3f928aecbec18a6c3f3090a93e3acb43be000080bfb6ca053f038fc73e709896bd77cbc3be9af65a34c38a6cbfdf77a7330000803f06524a340000803fb6ca053f0ad6c13e56e55dbd6acbc3befad94cbfb08aecbec18a6c3f2b90a9be5ccb43be0000803fd650e53f6cb9c63e0a0a03bd1aba783f1bba07bc2e3472be1ee0033cc1fd7f3fb96a00bb0000803fd650e53f98d6d33e090a03bd1aba783f81b9073c303472be89df03bcc1fd7f3f286a003b0000803fe494e43f2f65da3e35e55dbded67783f230a8a3c54f676bebbf685bcb3f67f3f692f853b0000803fd650e53f98d6d33e33609cbd1aba783f26b9073c2f34723e30df03bcc1fd7f3fd16900bb0000803fd650e53f6cb9c63e34609cbd1aba783f70ba07bc2c34723e71e0033cc1fd7f3f086b003b0000803fe494e43fd52ac03e37e55dbded67783fc10a8abc50f6763e54f7853cb3f67f3fff2f853b0000803fb6ca053f0248cd3e55e55dbd010080bf01000034c747c4b3c947c4b3c94744280000803f0000803f78a3e43f0148cd3e36e55dbd2fa1783f40f6a0b3e4f173bee6539c330000803fd66199b20000803fd749bd3f9a19bc3e3fe55dbda4440ebf71643bbf76cac9be910974be61b8a0be60476b3f000080bf344fbd3fceb0c43e1d77aabda5440ebf71643bbf76cac9be920974be61b8a0be5f476b3f000080bff513bd3f7af1d43e0408a4bde4a41abf96af843c7ef84bbf9053203c68f77f3f2977533c0000803fd749bd3f6b76de3e3ce55dbd500613bf3f90363faad1cdbe4a1881beb94ca03ea3676a3f0000803f344fbd3f37dfd53e78b8cdbc9a440ebf81643b3f6acac93e6d09743e63b8a0be61476b3f0000803f344fbd3fcdb0c43e7bb8cdbcc61016bfda1394b363674f3fab9a2db30000803fb5ef6f33000080bf582dc13f0cefb03e3fe55dbdddeb1f34e4b35dbfdeffffbe0000803ffe7e0a34c8eb9f330000803f93a6c03f851bbf3e8125d1bdddeb1f34e4b35dbfe0ffffbe0000803ffe7e0a34c9eb9f330000803f522de03f0cefb03e39e55dbd34ab1d3fb97a3bbfb6b394be9d6b3f3ec89c63be14f7743f000080bf545fe13f851bbf3e7e25d1bd34ab1d3fb97a3bbfb5b394be9b6b3f3ec79c63be14f7743f000080bf93a6c03f8074db3e7f25d1bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf545fe13f8074db3e7c25d1bd5c3d243fef156c33d55e44bfa37617b30000803f3f1835330000803f582dc13ff6a0e93e3ae55dbd572077b3f1b35d3faeffffbe0000803f9f0456330820f7b2000080bf522de03ff5a0e93e34e55dbd25ab1d3fc47a3b3fa0b394be6b6b3f3eb29c633e18f7743f0000803f93a6c03f8074db3efbfbcbbbdbeb1fb4edb35d3fbdffff3e0000803f027f0a34b1eb9f33000080bf545fe13f7f74db3ec9fbcbbb26ab1d3fc07a3b3fb0b3943e836b3fbec69c63be16f7743f0000803f93a6c03f851bbf3e10fccbbbc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f545fe13f851bbf3edefbcbbb5a3d243fd7425fb4d75e443f533c0f340000803fe3412b34000080bffc11d83f851bbf3e7e25d1bdddeb1f34e4b35dbfe0ffffbe0000803ffe7e0a34c9eb9f330000803ffc11d83f8074db3e7d25d1bdc747c43302003834020080bf0000803f99138da8ca47c433000080bffc11d83f7f74db3ed7fbcbbbc747c4b3020038b40200803f0000803f99138da8ca47c4330000803ffb11d83f851bbf3eecfbcbbbc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f0995d23f851bbf3e7f25d1bd0a277fbf7d3be1330783a63d9a7ce0330000803fdb7f12b2000080bf0995d23f8074db3e7e25d1bd0a277fbf7d3be1330783a63d9a7ce0330000803fdb7f12b2000080bf0995d23f7f74db3ee0fbcbbb09277fbf4c890e342283a6bd7f100e340000803f156c3932000080bf0995d23f851bbf3ef4fbcbbb09277fbf4c890e342283a6bd7f100e340000803f156c3932000080bf7e93d13f861bbf3ea53b4bbe0a277fbf7d3be1330783a63d9a7ce0330000803fdb7f12b2000080bf7e93d13f8074db3ea43b4bbe0a277fbf7d3be1330783a63d9a7ce0330000803fdb7f12b2000080bf36a5d83f861bbf3e9b334bbe0306213b94fd7fbf015907bcceff7f3f9d04213b7144aa370000803f36a5d83f8074db3e9a334bbed2b87f3f516f08b495dc3e3d624908340000803f5a70cb310000803f7e93d13f7f74db3e0992b83d09277fbf4c890e342283a6bd7f100e340000803f156c3932000080bf7e93d13f841bbf3e0892b83d09277fbf4c890e342283a6bd7f100e340000803f156c3932000080bf35a5d83f7f74db3efb81b83de0f1203b92fd7f3f6275073cceff7f3f79f020bbd552aab7000080bf35a5d83f841bbf3efa81b83dd2b87f3f0393eeb364dc3ebdad50ee330000803f80deb1b10000803f6c4bec3fff3dda3e6651c93df4d33c3feca75ab4c1db2c3f5a4821340000803f85a413340000803f6c4bec3f0352c03e6551c93df4d33c3feca75ab4c1db2c3f5a4821340000803f85a413340000803ff2a0ba3f003eda3ea40bc93d0c9d26bf2e8f61b3445c423f37cd12b30000803fcc3f2b33000080bff2a0ba3f0352c03ea30bc93d0c9d26bf2e8f61b3445c423f37cd12b30000803fcc3f2b33000080bf7718e43fff3dda3ea04f2c3ec05c123f8f2460b49a08523f0f2600340000803f85e53734000080bf7718e43f0352c03e9f4f2c3ec05c123f8f2460b49a08523f0f2600340000803f85e53734000080bf7ed8c43f0352c03e09972a3e0c9d26bf2e8f61b3445c423f37cd12b30000803fcc3f2b33000080bf7ed8c43f003eda3e09972a3e0c9d26bf2e8f61b3445c423f37cd12b30000803fcc3f2b33000080bf6840d13f0252c03e1647673eba8c05bf1c68b4b389675a3f853a3cb30000803f9ee99933000080bf6940d13fff3dda3e1747673eba8c05bf1c68b4b389675a3f853a3cb30000803f9ee99933000080bf2a85d93f0252c03e5244673e20592b395e0538b40200803f4d57f62d0000803f61053834000080bf2a85d93fff3dda3e5244673e20592b395e0538b40200803f4d57f62d0000803f61053834000080bf83e8c13f003eda3ee695b03d480c353fa4401e33a2fd34bf97d6dfb20000803f7bc4df320000803f0c2ec93f003eda3ef97b123e480c353fa4401e33a2fd34bf97d6dfb20000803f7bc4df320000803f0c2ec93f0352c03ef87b123e480c353fa4401e33a2fd34bf97d6dfb20000803f7bc4df320000803f83e8c13f0352c03ee595b03d480c353fa4401e33a2fd34bf97d6dfb20000803f7bc4df320000803facecce3fff3dda3e3f50273e33fde4bb8afb7f3f6e44193c67fe7f3fa4fae43b65198938000080bfacecce3f0352c03e3e50273ef9fde4bb8afb7fbfef42193c67fe7f3f6afbe4bb851889380000803fde51db3fff3dda3eb763273e99e6ff3b54fb7f3f2053143c01fe7f3fede3ffbb914594b8000080bfde51db3f0352c03eb663273ebeebff3b54fb7fbf9751143c01fe7f3f12e9ff3b034794b80000803fbc2ae03fff3dda3e6e66133e47a247bf70005734d04120bfa1a927340000803f8c970634000080bfbc2ae03f0352c03e6e66133e47a247bf70005734d04120bfa1a927340000803f8c970634000080bf6c03e63f003eda3ec545b23d47a247bf70005734d04120bfa1a927340000803f8c970634000080bf6c03e63f0352c03ec445b23d47a247bf70005734d04120bfa1a927340000803f8c970634000080bf52b1db3f7f74db3ed2fbcbbbc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f52b1db3f851bbf3ee6fbcbbbc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f7d47db3f0cefb03e3ae55dbdddeb1f34e4b35dbfdeffffbe0000803ffe7e0a34c8eb9f330000803f52b1db3f851bbf3e7e25d1bdddeb1f34e4b35dbfe0ffffbe0000803ffe7e0a34c9eb9f330000803f52b1db3f8074db3e7d25d1bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf7d47db3ff5a0e93e35e55dbde52978bf6990323e44ff30be7d332ebea1b0fa3c93257c3f0000803f9d34dc3fe54bdf3e4ed8dd3bc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f9d34dc3f1f44bb3e34d8dd3bc747c4b3020038b40200803f0000803f99138da8ca47c4330000803fe34be13fe54bdf3e55d8dd3bc747c4b3020038b40200803f0000803f99138da8ca47c4330000803fe34be13f1f44bb3e3cd8dd3bc747c4b3020038b40200803f0000803f99138da8ca47c4330000803fcc94db3f3e40a93e3be55dbd11207733e2b35dbfe2ffff3e0000803f54045633f41ff7b20000803ff3cddf3f3e40a93e3ae55dbd17207733e4b35dbfe0ffff3e0000803f5b045633f81ff7b20000803f9e34dc3f2044bb3ebfc2ebbdddeb1f34e1b35dbfe9ffffbe0000803ffc7e0a34cfeb9f330000803fe34be13f1f44bb3ebec2ebbdddeb1f34e1b35dbfe9ffffbe0000803ffc7e0a34cfeb9f330000803f9e34dc3fe64bdf3ebdc2ebbdc747c43302003834020080bf0000803f99138da8ca47c433000080bfe34be13fe64bdf3ebdc2ebbdc747c43302003834020080bf0000803f99138da8ca47c433000080bfcc94db3fc74ff13e34e55dbd172077b3e4b35d3fe0ffffbe0000803f5b045633f81ff7b2000080bff3cddf3fc74ff13e33e55dbd172077b3e4b35d3fe0ffffbe0000803f5b045633f81ff7b2000080bf6afacb3f0cefb03e3de55dbd00ab63bf4a1feabea16a2bb40d7218b46bc49cb30000803f0000803fee50ca3f851bbf3e8025d1bd68a363bf8017eabe083084bcc51d6bbc22c8f1bb78f77f3f0000803fee50ca3f8074db3e7f25d1bdcc3872bf50a93434a1b4a5be23f02a340000803f32e16933000080bf6afacb3ff6a0e93e38e55dbdf8aa63bf771fea3e980349b16fc432b1fed5b7300000803f0000803fee50ca3f7f74db3eedfbcbbb61a363bfac17ea3e5430843c451e6b3cdbc8f1bb78f77f3f0000803fee50ca3f851bbf3e01fccbbbcd3872bff13d7633a0b4a53e31fd68330000803faa639fb2000080bf4771c43f0cefb03e3fe55dbdddeb1f34e4b35dbfe0ffffbe0000803ffe7e0a34c9eb9f330000803fbc85c43f851bbf3e8025d1bdddeb1f34e4b35dbfdeffffbe0000803ffe7e0a34c8eb9f330000803fbc85c43f8074db3e7f25d1bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf4771c43ff6a0e93e39e55dbd572077b3f1b35d3faeffffbe0000803f9f0456330820f7b2000080bfbc85c43f7f74db3ef5fbcbbbdbeb1fb4edb35d3fbfffff3e0000803f027f0a34b2eb9f33000080bfbc85c43f851bbf3e0afccbbbc747c4b3020038b40200803f0000803f99138da8ca47c4330000803fe275c63f1138b93e3de55dbde3eb1f34c0b35dbf2f0000bf0000803fed7e0a341eec9f330000803f785ec63f0e40c33e0872b4bde3eb1f34c0b35dbf2e0000bf0000803fed7e0a341cec9f330000803f30f6ca3f1138b93e3de55dbde3eb1f34c0b35dbf2f0000bf0000803fed7e0a341eec9f330000803fdab3c93f0d40c33e0772b4bde3eb1f34c0b35dbf2d0000bf0000803fed7e0a341bec9f330000803f785ec63ff84fd73e0772b4bdc747c43302003834020080bf0000803f99138da8ca47c433000080bfdab3c93ff84fd73e0772b4bdc747c43302003834020080bf0000803f99138da8ca47c433000080bfe175c63ff457e13e3ae55dbd7e1f77b3c3b35d3f290000bf0000803fb7035633cd1ff7b2000080bf31f6ca3ff457e13e39e55dbd7e1f77b3c3b35d3f290000bf0000803fb7035633cd1ff7b2000080bf785ec63ff74fd73ed9cca5bce3eb1fb4beb35d3f3100003f0000803fec7e0a3420ec9f33000080bfdab3c93ff74fd73ed8cca5bce3eb1fb4beb35d3f3100003f0000803fec7e0a3420ec9f33000080bf785ec63f0d40c33eddcca5bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803fdab3c93f0d40c33edbcca5bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803ffac4833f9b19bc3e4ae55dbd714df2b403b45dbf72ffffbe0000803f3cd7d1b4eb4c72b40000803ffac4833fceb0c43e2277aabd5fa3efb400b45dbf7dffffbe0000803f8888cfb4e4a26fb40000803ffac4833f38dfd53e2277aabdf9bfe0b4151dcd36020080bf0000803f4313342cfdbfe0b4000080bffac4833f6c76de3e47e55dbd02248a33c7b35d3f220000bf0000803f31446fb327240a33000080bffac4833f38dfd53e8eb8cdbce0eb1fb4d5b35d3f0a00003f0000803ff77e0a34eceb9f33000080bffac4833fceb0c43e91b8cdbcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f9766783f16f5bd3e4be55dbdf71566bf3765c2be107860be98c64ebe7db3aebd0ac6793f0000803f9766783f8c9ec53e0b08a4bdf71566bf3765c2be107860be98c64ebe7db3aebd0ac6793f0000803f9766783f7bf1d43e0a08a4bdf61566bf19b64334fd77e0be64e62f340000803f119bab33000080bf9766783ff09adc3e48e55dbdf81566bf4065c23e0a7860be94c64ebe81b3ae3d0bc6793f0000803f9766783f7af1d43e0675e7bcf91566bf3b65c23e0778603e91c64e3e79b3aebd0bc6793f0000803f9766783f8c9ec53e0975e7bcfa1566bf8e7f0933ec77e03ecf28f7320000803f0b2071b2000080bf9382213f16f5bd3e54e55dbddfeb1f34d8b35dbf040000bf0000803ff87e0a34e4eb9f330000803f9382213f8c9ec53e0f08a4bddfeb1f34d8b35dbf040000bf0000803ff87e0a34e4eb9f330000803f9382213f7bf1d43e0f08a4bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf9382213ff19adc3e51e55dbde61f77b3d9b35d3f020000bf0000803f26045633ea1ff7b2000080bf9382213f7bf1d43e1675e7bce0eb1fb4d5b35d3f0a00003f0000803ff77e0a34eceb9f33000080bf9382213f8c9ec53e1975e7bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f7a8f803f8354af3e4ce55dbde318273f03f627bfeff1c1be32c9883e357e89be31ec6c3f000080bf7a8f803f444ebe3e9cb3d6bde318273f03f627bff0f1c1be32c9883e357e89be30ec6c3f000080bf7a8f803fc341dc3e9bb3d6bdea18273f6d655f33d3f141bfe8d011b30000803f7e3e29330000803f7a8f803f833beb3e46e55dbde118273f02f6273fe7f1c1be2ac9883e2e7e893e33ec6c3f0000803f7a8f803fc241dc3e9e3566bbdd18273f02f6273ff0f1c13e2dc988be357e89be31ec6c3f0000803f7a8f803f444ebe3ec93566bbe218273f44f25eb4d8f1413fb68511340000803f43e72834000080bf867d7b3f8354af3e4ce55dbdf71566bf3765c2be0e7860be97c64ebe7cb3aebd0bc6793f0000803f867d7b3f444ebe3e9cb3d6bdf71566bf3765c2be107860be98c64ebe7db3aebd0ac6793f0000803f867d7b3fc341dc3e9bb3d6bdf61566bf19b64334fd77e0be64e62f340000803f119bab33000080bf867d7b3f833beb3e47e55dbdf81566bf4065c23e087860be91c64ebe7fb3ae3d0bc6793f0000803f867d7b3fc241dc3ea73566bbf91566bf3d65c23e0978603e93c64e3e7db3aebd0bc6793f0000803f857d7b3f444ebe3ed23566bbf81566bf897f0933ed77e03ec328f7320000803f032071b2000080bf7fb51d3f3bf6b03e55e55dbd5923543fb831f8be944b8fbe825f773e80b510befac4753f000080bf7fb51d3f221fbf3ea80cd1bd5723543fb731f8be934b8fbe7f5f773e7eb510befac4753f000080bf7fb51d3fe670db3ea70cd1bd6723543febdd44b1734b0fbf002323310000803ff763dcb00000803f7fb51d3fca99e93e50e55dbd4f23543fcf31f83e8b4b8fbe665f773e83b5103efbc4753f000080bf7fb51d3fe670db3eca8acdbb4e23543fca31f83e994b8f3e805f77be90b510befac4753f000080bf7fb51d3f211fbf3e328ccdbb5423543fb1c9a2b58d4b0f3f7ee586350000803f693d36350000803f5372173f3bf6b03e56e55dbd6bcbc3befad94cbfb08aecbec18a6c3f2d90a9be5ecb43be0000803f5372173f221fbf3ea90cd1bd75cbc3be9af65a34c38a6cbfdd77a7330000803f06524a340000803f5372173fe670db3ea70cd1bd64cbc3be09da4c3f918aecbec18a6c3f3190a93e3bcb43be000080bf5372173fca99e93e51e55dbd67cbc3be03da4c3f9f8aec3ec08a6c3f2f90a93e49cb433e000080bf5372173fe670db3ecf8acdbb5dcbc3be08a302b6c88a6c3fecd347b50000803f3b6af135000080bf5372173f211fbf3e378ccdbb5dcbc3be09a302b6c88a6c3fedd347b50000803f3c6af135000080bf150a763f16f5bd3e4be55dbddfeb1f34d8b35dbf040000bf0000803ff87e0a34e4eb9f330000803f150a763f8c9ec53e0b08a4bddfeb1f34d8b35dbf040000bf0000803ff87e0a34e4eb9f330000803f150a763f7bf1d43e0b08a4bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf150a763ff09adc3e49e55dbdec1f77b3dbb35d3f010000bf0000803f2d045633ee1ff7b2000080bf150a763f7af1d43e0675e7bcdfeb1fb4d5b35d3f0900003f0000803ff67e0a34eaeb9f33000080bf150a763f8c9ec53e0975e7bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803fca62643f16f5bd3e4de55dbddfeb1f34d8b35dbf050000bf0000803ff87e0a34e5eb9f330000803fca62643f8c9ec53e0c08a4bddfeb1f34d8b35dbf050000bf0000803ff87e0a34e5eb9f330000803fca62643f7bf1d43e0b08a4bdc747c43302003834020080bf0000803f99138da8ca47c433000080bfca62643ff19adc3e4ae55dbde61f77b3d9b35d3f020000bf0000803f26045633ea1ff7b2000080bfca62643f7af1d43e0a75e7bce0eb1fb4d5b35d3f0b00003f0000803ff77e0a34eeeb9f33000080bfc962643f8c9ec53e0c75e7bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f98ba603f16f5bd3e4de55dbddfeb1f34d8b35dbf050000bf0000803ff87e0a34e5eb9f330000803f98ba603f8c9ec53e0c08a4bddfeb1f34d8b35dbf050000bf0000803ff87e0a34e5eb9f330000803f98ba603f7bf1d43e0c08a4bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf98ba603ff19adc3e4be55dbde61f77b3d9b35d3f020000bf0000803f26045633ea1ff7b2000080bf98ba603f7af1d43e0a75e7bce0eb1fb4d5b35d3f0b00003f0000803ff77e0a34eeeb9f33000080bf98ba603f8c9ec53e0d75e7bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f258a383f16f5bd3e51e55dbddfeb1f34d8b35dbf040000bf0000803ff87e0a34e4eb9f330000803f258a383f8c9ec53e0e08a4bddfeb1f34d8b35dbf040000bf0000803ff87e0a34e4eb9f330000803f258a383f7bf1d43e0e08a4bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf258a383ff19adc3e4fe55dbdec1f77b3dbb35d3f010000bf0000803f2d045633ee1ff7b2000080bf258a383f7bf1d43e1275e7bcdfeb1fb4d5b35d3f0900003f0000803ff67e0a34eaeb9f33000080bf258a383f8c9ec53e1575e7bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f7910353f16f5bd3e52e55dbddfeb1f34d8b35dbf040000bf0000803ff87e0a34e4eb9f330000803f7910353f8c9ec53e0e08a4bddfeb1f34d8b35dbf040000bf0000803ff87e0a34e4eb9f330000803f7910353f7bf1d43e0e08a4bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf7910353ff19adc3e4fe55dbdec1f77b3dbb35d3f010000bf0000803f2d045633ee1ff7b2000080bf7910353f7bf1d43e1375e7bcdfeb1fb4d5b35d3f0900003f0000803ff67e0a34eaeb9f33000080bf7910353f8c9ec53e1575e7bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f625a243f16f5bd3e53e55dbddfeb1f34d8b35dbf040000bf0000803ff87e0a34e4eb9f330000803f625a243f8c9ec53e0f08a4bddfeb1f34d8b35dbf040000bf0000803ff87e0a34e4eb9f330000803f625a243f7bf1d43e0f08a4bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf625a243ff19adc3e50e55dbde61f77b3d9b35d3f020000bf0000803f26045633ea1ff7b2000080bf625a243f7bf1d43e1675e7bce0eb1fb4d5b35d3f0a00003f0000803ff77e0a34eceb9f33000080bf625a243f8c9ec53e1975e7bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803fe5b9653ff5deb83e4de55dbddfeb1f34d5b35dbf090000bf0000803ff67e0a34eaeb9f330000803fe5b9653f7c13c33ebda6b5bddfeb1f34d5b35dbf090000bf0000803ff67e0a34eaeb9f330000803fe00a753ff5deb83e4ce55dbddfeb1f34d5b35dbf090000bf0000803ff67e0a34eaeb9f330000803fe00a753f7c13c33ebca6b5bddfeb1f34d5b35dbf090000bf0000803ff67e0a34eaeb9f330000803fe5b9653f887cd73ebca6b5bdc747c43302003834020080bf0000803f99138da8ca47c433000080bfe00a753f887cd73ebba6b5bdc747c43302003834020080bf0000803f99138da8ca47c433000080bfe5b9653f11b1e13e4ae55dbd9a1f77b3c9b35d3f1f0000bf0000803fd5035633d61ff7b2000080bfe00a753f11b1e13e48e55dbd9a1f77b3c9b35d3f1f0000bf0000803fd5035633d61ff7b2000080bfe5b9653f887cd73e45faa0bce2eb1fb4c3b35d3f2800003f0000803fee7e0a3414ec9f33000080bfe00a753f887cd73e42faa0bce2eb1fb4c3b35d3f2800003f0000803fee7e0a3414ec9f33000080bfe6b9653f7b13c33e49faa0bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803fe00a753f7b13c33e46faa0bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f3dd0393ff6deb83e52e55dbd08ee13b5deb35dbff8ffffbe0000803f6d1c00b503ee93b40000803f3ed0393f7c13c33ebfa6b5bd08ee13b5deb35dbff8ffffbe0000803f6d1c00b503ee93b40000803f7c635f3ff6deb83e4ee55dbd09b15a3fe97fe6be3e1485be4a766b3efa2cf8bd8933773f000080bf7c635f3f7c13c33ebda6b5bd09b15a3fe87fe6be3e1485be4a766b3ef92cf8bd8933773f000080bf3ed0393f887cd73ebea6b5bd4ba4afb5646f0b36020080bf0000803f43553f2c4ea4afb5000080bf7c635f3f887cd73ebca6b5bd04b15a3fd31e5bb2481405bfc32f3b320000803fbfd0e3b10000803f3ed0393f11b1e13e4ee55dbd4ecd50b5c1b35d3f2d0000bf0000803fd9d3343597cdd0b4000080bf7c635f3f11b1e13e4ae55dbdf7b05a3f0980e63e641485be7f766b3e692df83d8533773f000080bf3dd0393f887cd73e4efaa0bce5eb1fb4b4b35d3f4300003f0000803fe77e0a3439ec9f33000080bf7c635f3f887cd73e47faa0bcf6b05a3f0580e63e7414853e9c766bbe852df8bd8333773f000080bf3dd0393f7c13c33e51faa0bc0cf5ab3566dae3350200803f0000803ffd0c19ac0ff5abb50000803f7c635f3f7c13c33e4afaa0bc00b15a3f15ff4cb44a14053ff41e2f340000803f8a21d5330000803f9659253ff6deb83e54e55dbddfeb1f34d5b35dbf090000bf0000803ff67e0a34eaeb9f330000803f9759253f7c13c33ec0a6b5bddfeb1f34d5b35dbf090000bf0000803ff67e0a34eaeb9f330000803f5fca333ff6deb83e52e55dbddfeb1f34d5b35dbf090000bf0000803ff67e0a34eaeb9f330000803f60ca333f7c13c33ebfa6b5bddfeb1f34d5b35dbf090000bf0000803ff67e0a34eaeb9f330000803f9759253f897cd73ebfa6b5bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf60ca333f897cd73ebfa6b5bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf9759253f12b1e13e50e55dbd941f77b3c7b35d3f200000bf0000803fce035633d21ff7b2000080bf60ca333f11b1e13e4fe55dbd941f77b3c7b35d3f200000bf0000803fce035633d21ff7b2000080bf9659253f887cd73e52faa0bce2eb1fb4c3b35d3f2700003f0000803fee7e0a3413ec9f33000080bf60ca333f887cd73e4ffaa0bce2eb1fb4c3b35d3f2700003f0000803fee7e0a3413ec9f33000080bf9659253f7c13c33e55faa0bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f5fca333f7c13c33e53faa0bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803fb120ce3f0cefb03e3de55dbdddeb1f34e4b35dbfdeffffbe0000803ffe7e0a34c8eb9f330000803fcd07cd3f851bbf3e8025d1bdc747c43302003834020080bf0000803f99138da8ca47c433000080bfcd07cd3f8074db3e7e25d1bdc747c43302003834020080bf0000803f99138da8ca47c433000080bfb120ce3ff6a0e93e38e55dbd5b2077b3f3b35d3faeffffbe0000803fa50456330c20f7b2000080bfcc07cd3f7f74db3ee8fbcbbbc747c4b3020038b40200803f0000803f99138da8ca47c4330000803fcc07cd3f851bbf3efdfbcbbbc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f760bcc3f09bda83e3ee55dbddeeb1f34deb35dbff3ffffbe0000803ffb7e0a34d6eb9f330000803f99dac93f8502bb3e3d89edbddeeb1f34deb35dbff3ffffbe0000803ffb7e0a34d6eb9f330000803fb120ce3f09bda83e3de55dbddeeb1f34deb35dbff3ffffbe0000803ffb7e0a34d6eb9f330000803f10adcc3f8502bb3e3d89edbddeeb1f34deb35dbff3ffffbe0000803ffb7e0a34d6eb9f330000803f99dac93f808ddf3e3c89edbdc747c43302003834020080bf0000803f99138da8ca47c433000080bf10adcc3f808ddf3e3b89edbdc747c43302003834020080bf0000803f99138da8ca47c433000080bf760bcc3ffbd2f13e37e55dbd0a2077b3e1b35d3fe9ffffbe0000803f4d045633f41ff7b2000080bfb120ce3ffbd2f13e37e55dbd0a2077b3e1b35d3fe9ffffbe0000803f4d045633f41ff7b2000080bf98dac93f7f8ddf3eea3ffa3bdfeb1fb4deb35d3ff8ffff3e0000803ffc7e0a34daeb9f33000080bf10adcc3f7f8ddf3eee3ffa3bdfeb1fb4deb35d3ff8ffff3e0000803ffc7e0a34daeb9f33000080bf98dac93f8502bb3ecf3ffa3bc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f10adcc3f8502bb3ed43ffa3bc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f982ad73f0552c03e171d9abe58b3bc3b94fd7fbf69c5d1bbeafe7f3f5cb2bc3b96a01a380000803fc692d33f0552c03ef1229abe34f6b4bb7afd7fbfb841e0bb00ff7f3f20f5b4bb81861eb80000803f982ad73f023eda3e171d9abe2fb1bc3b94fd7f3f5dc2d1bbeafe7f3f33b0bcbb929c1a38000080bfc692d33f023eda3ef0229abe14f8b4bb7afd7f3fae3ee0bb00ff7f3f00f7b43b00861eb8000080bf59d5d03ff6c1da3e292b8bbe2e37a6bc72e97f3fca4a88bc0502b1b99c43883ceef67f3f0000803f59d5d03f11cebf3e2a2b8bbec739a6bc70e97fbf514b88bc7805b1b9224488bceef67f3f000080bf2e8bd93ff6c1da3e9f258bbe3073b53c9ae77f3fbb9582bc4423b939888d823cadf77f3f0000803f2e8bd93f11cebf3e9f258bbe1777b53c9ae77fbf2c9682bcdf27b939f98d82bcadf77f3f000080bf6a28d33f7d9fbf3ee6f478becc4e38bcc3ee7fbf41caa3bcdbfb7f3f5f4538bc64db6bb90000803ff069d73f7d9fbf3eebe578be2f68483c53ee7fbf45c8a1bc19fb7f3f2f5e483c74517d390000803f6a28d33f86f0da3ee5f478beb04a38bcc3ee7f3f16cca3bcdbfb7f3f4341383cc5d86bb9000080bff069d73f86f0da3eeae578bea961483c53ee7f3f38caa1bc1afb7f3faa5748bc434c7d39000080bf6a28d33f84f0da3eecd4093e7f0b38bcb5ee7f3f7931a43cdefb7f3f0902383cae196c39000080bff169d73f84f0da3e9fc7093e3229483c45ee7f3f9030a23c1cfb7f3f281f48bceca47db9000080bf6a28d33f7b9fbf3eebd4093e980f38bcb5ee7fbf302ea43cdefb7f3f220638bc361a6c390000803ff169d73f7b9fbf3e9ec7093ebf2f483c45ee7fbf2e2da23c1cfb7f3fb625483cf0a77db90000803f232cd73f0352c03e2149443e17dfb33bb8fd7fbfb085ce3b04ff7f3f2fdeb33b031c11b80000803fd390d33f0352c03ee154443e0f7aacbb9efd7fbf77b0dc3b18ff7f3f1179acbb50b014380000803f232cd73fff3dda3e2149443ef6dcb33bb8fd7f3f6788ce3b04ff7f3f0edcb3bb331c11b8000080bfd390d33fff3dda3ee254443eec7bacbb9efd7f3f2fb3dc3b18ff7f3fee7aac3bc0b31438000080bf5ad5d03ff4c1da3eb663273ecbc8a3bcd8e97f3f893c883cf958ae39913588bcf0f67f3f0000803f5ad5d03f0ecebf3eb663273e5ecba3bcd8e97fbfa03b883c8c5aae39a834883cf0f67f3f000080bf2e8bd93ff4c1da3ea358273e14efb23c0ae87f3f2fa0823cafa0b6b9359882bcabf77f3f0000803f2e8bd93f0ecebf3ea258273ef9f2b23c0ae87fbf339f823c48a3b6b93a97823cacf77f3f000080bfea77ac3f9a19bc3e42e55dbd6f4df2b402b45dbf75ffffbe0000803f39d7d1b4eb4c72b40000803fdb64b13f9a19bc3e41e55dbdc32f0936ffb35dbf82ffffbe0000803f619ded357f2f89350000803f3b74ae3fceb0c43e80b8cdbcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803fbbf2ae3fcb57c13eed4593bdebeb1f348db35dbf850000bf0000803fd47e0a3491ec9f330000803fa0ceb53f38dfd53e1d77aabdf9bfe0b4151dcd36020080bf0000803f4313342cfdbfe0b4000080bf532dbc3f7af1d43e0408a4bde96eff3c2a38db3d70677ebf22e07f3f29d75abbdef6fd3c000080bf0913b83fb2d6cb3e4977aabd927838b4629a06b7020080bf0000803fb7fcc1ab957838b4000080bf4659b93f6d41db3e8b2a85bdee5c6933cab35d3f1b0000bf0000803f1e194ab31f5de932000080bfc70bb73f0248cd3edc6675bece9284be1ba06b3f59f895beec44773f48a97c3e22d0a0bd000080bfa6eabd3f0248cd3ee0a08ebe3f429fbed9ae5e3f0809c4bef04c733f55c3913eee5100be000080bff4a1bb3fa1a3d03eb68f7ebee84090be8e96673f36b7a3be17a1753fe601883e5d4bc0bd000080bfe673bb3f1693c93e28737ebed0f885bec4d66bbfaf5c93bea914773fb8c07fbe19ce9fbd0000803f5a04e43fff47cd3e653d593edcdd5c3f1fa19d3ead59cd3e6bf08ebed090733fbae504be0000803feb41e53fff46d33ecaaf3a3edcdd5c3f1da19d3eaa59cd3e69f08ebed190733fb7e504be0000803f058fe93fff47cd3ee993353e9ad5653ecca6773ee7a9713fec77793f142964bdd4a45ebe0000803f76efe53ff121c93e67983e3edcdd5c3f1fa19d3ead59cd3e6bf08ebed090733fbae504be0000803fa2b5473ff6deb83e50e55dbd08ee13b5deb35dbff8ffffbe0000803f6d1c00b503ee93b40000803fa2b5473f7c13c33ed3a6b5bd08ee13b5deb35dbff8ffffbe0000803f6d1c00b503ee93b40000803fa2b5473f887cd73ebea6b5bd4ba4afb5646f0b36020080bf0000803f43553f2c4ea4afb5000080bfa2b5473f14b1e13e4de55dbd4ecd50b5c1b35d3f2d0000bf0000803fd9d3343597cdd0b4000080bfa2b5473f887cd73e9bfaa0bce5eb1fb4b4b35d3f4300003f0000803fe77e0a3439ec9f33000080bfa2b5473f7c13c33e4ffaa0bc0cf5ab3566dae3350200803f0000803ffd0c19ac0ff5abb50000803f2fea4e3ffbdeb83e50e55dbd5ffae5b4edb35dbfbfffffbe0000803fc72ac7b425fa65b40000803f30ea4e3f7c13c33ed2a6b5bd61fae5b4edb35dbfc1ffffbe0000803fc92ac7b428fa65b40000803f2fea4e3f887cd73ed2a6b5bdc4a32436efff3734020080bf54abecaa0000803ff2ff37340000803f2fea4e3f14b1e13e4ce55dbd89799635c9b35d3f1f0000bf0000803f985082b5ad791635000080bf2fea4e3f887cd73e4afaa0bc4b6fec34bab35d3f3700003f0000803f11c2ccb4b16f6cb4000080bf2fea4e3f7c13c33e4dfaa0bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f6fed483f72b2be3e50e55dbdb94f8c36f6b35dbfa3ffffbe0000803feb067336864f0c360000803f6fed483f3bfdc53e2b78a1bdba4f8c36f6b35dbfa3ffffbe0000803fec067336874f0c360000803f62b24d3f78b2be3e4fe55dbdba4f8c36f6b35dbfa3ffffbe0000803fec067336874f0c360000803f63b24d3f3bfdc53e2a78a1bdba4f8c36f6b35dbfa3ffffbe0000803fec067336874f0c360000803f70ed483fcc92d43e1578a1bd6d47c433edcab836020080bf0000803fecae0dab7047c433000080bf63b24d3fcc92d43e1578a1bd6d47c433edcab836020080bf0000803fecae0dab7047c433000080bf70ed483f98dddb3e76e55dbdbabe0536abb35d3f530000bf0000803f09a7e7b511bf8535000080bf63b24d3f98dddb3e4de55dbdbabe0536abb35d3f530000bf0000803f09a7e7b511bf8535000080bf6fed483fcb92d43e91b5f1bca19a8eb699b35d3f7100003f0000803f11ff76361f9b0e36000080bf63b24d3fcb92d43e3db5f1bca19a8eb699b35d3f7100003f0000803f11ff76361f9b0e36000080bf6fed483f3bfdc53ef0b4f1bc84488db6dcf702370200803f0000803f3b8f102e86488d360000803f62b24d3f3bfdc53eefb4f1bc84488db6dcf702370200803f0000803f3b8f102e86488d360000803fa1bfd73f8eaaec3e7a6ea1bcd4b35d3ff1d94ab40a00003fa3ac2f340000803f01daca330000803fa1bfd73f77e5ad3e856ea1bcd4b35d3ff1d94ab40a00003fa3ac2f340000803f01daca330000803fb64bda3f8eaaec3e35e55dbdd7b35d3f3bcf96b2050000bfd79a82320000803f41cf16b20000803fb64bda3f77e5ad3e3be55dbdd7b35d3f3bcf96b2050000bfd79a82320000803f41cf16b20000803fa1bfd73f8eaaec3e9a89b5bdc747c43302003834020080bf0000803f99138da8ca47c433000080bfa1bfd73f77e5ad3e9d89b5bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf79a7d23f8eaaec3e9a89b5bde9b35dbfe3d94a34d1ffffbea8ac2f340000803fbed9ca33000080bf79a7d23f77e5ad3e9d89b5bde9b35dbfe3d94a34d1ffffbea8ac2f340000803fbed9ca33000080bf651bd03f8eaaec3e37e55dbde6b35dbf0ad09632d6ffff3e949b82320000803ff1cf16b2000080bf651bd03f77e5ad3e3de55dbde6b35dbf0ad09632d6ffff3e949b82320000803ff1cf16b2000080bf79a7d23f77e5ad3e876ea1bce6b35dbf0ad09632d6ffff3e949b82320000803ff1cf16b2000080bf79a7d23f8eaaec3e7c6ea1bce6b35dbf0ad09632d6ffff3e949b82320000803ff1cf16b2000080bfa1bfd73f8eaaec3e7a6ea1bc010000b40100803f020038340000803f020000340300b828000080bf79a7d23f8eaaec3e7c6ea1bc010000b40100803f020038340000803f020000340300b828000080bfb64bda3f8eaaec3e35e55dbd010000b40100803f020038340000803f020000340300b828000080bfa1bfd73f8eaaec3e9a89b5bd010000b40100803f020038340000803f020000340300b828000080bf79a7d23f8eaaec3e9a89b5bd010000b40100803f020038340000803f020000340300b828000080bf651bd03f8eaaec3e37e55dbd010000b40100803f020038340000803f020000340300b828000080bf79a7d23f77e5ad3e876ea1bc01000034010080bf020038b40000803f020000340300b8280000803fa1bfd73f77e5ad3e856ea1bc01000034010080bf020038b40000803f020000340300b8280000803fb64bda3f77e5ad3e3be55dbd01000034010080bf020038b40000803f020000340300b8280000803fa1bfd73f77e5ad3e9d89b5bd01000034010080bf020038b40000803f020000340300b8280000803f79a7d23f77e5ad3e9d89b5bd01000034010080bf020038b40000803f020000340300b8280000803f651bd03f77e5ad3e3de55dbd01000034010080bf020038b40000803f020000340300b8280000803fb493d63f8eaaec3e2fa711bdd38a1fb43a10323f86ed373f0000803f47f1dd338840e5330000803f67d3d33f8eaaec3e30a711bdd38a1fb43a10323f86ed373f0000803f47f1dd338840e5330000803fd9f3d73f8eaaec3e35e55dbdfe481f3f8110323f58edb73eb74075be711589be58e96e3f0000803f50d0d53fc720f23e51f43bbdff481f3f8010323f58edb73eb84075be701589be58e96e3f0000803fb493d63f8eaaec3e2fa711bd00491f3f8010323f58edb73eba4075be701589be58e96e3f0000803fb493d63f8eaaec3ea11195bd03491f3f8210323f3dedb7be9540753e5b15893e5de96e3f0000803f166dd63fc720f23e35e55dbd04491f3f8310323f3fedb7be9940753e5d15893e5ce96e3f0000803fd9f3d73f8eaaec3e35e55dbd04491f3f8310323f3eedb7be9840753e5c15893e5de96e3f0000803f67d3d33f8eaaec3ea11195bd462b94b23d10323f84ed37bf0000803ff91e4e32cfe854b2000080bf50d0d53fc720f23e1fd67fbd462b94b23d10323f84ed37bf0000803ff91e4e32cfe854b2000080bfb493d63f8eaaec3ea11195bd462b94b23d10323f84ed37bf0000803ff91e4e32cfe854b2000080bf4273d23f8eaaec3e36e55dbd46491fbf8610323f63ecb7bead3f75bea314893e86e96e3f0000803fc996d43fc720f23e1fd67fbd45491fbf8610323f62ecb7beac3f75bea214893e87e96e3f0000803f67d3d33f8eaaec3ea11195bd46491fbf8610323f63ecb7bead3f75bea314893e86e96e3f0000803f67d3d33f8eaaec3e30a711bd44491fbf8310323f76ecb73ec83f753eb11489be82e96e3f0000803fc996d43fc720f23e51f43bbd42491fbf8410323f78ecb73ec93f753eb41489be82e96e3f0000803f07fad33fc720f23e36e55dbd44491fbf8310323f77ecb73ec93f753eb11489be82e96e3f0000803f4273d23f8eaaec3e36e55dbd44491fbf8310323f76ecb73ec83f753eb11489be82e96e3f0000803f67d3d33f77e5ad3e35a711bd352b94323b1032bf87ed373f0000803fdf1e4e32bae854b20000803fb493d63f77e5ad3e35a711bd352b94323b1032bf87ed373f0000803fdf1e4e32bae854b20000803fb493d63f77e5ad3e35a711bd05491f3f821032bf54edb73ebb4075be6e15893e59e96e3f000080bf50d0d53f3e6fa83e58f43bbd05491f3f811032bf54edb73ebb4075be6e15893e59e96e3f000080bfd9f3d73f77e5ad3e3be55dbd05491f3f821032bf54edb73ebb4075be6e15893e59e96e3f000080bfd9f3d73f77e5ad3e3be55dbd0b491f3f801032bf49edb7beb340753e631589be5ae96e3f000080bf166dd63f3e6fa83e3ce55dbd09491f3f801032bf4aedb7beb140753e641589be5ae96e3f000080bfb493d63f77e5ad3ea31195bd0b491f3f801032bf4aedb7beb440753e631589be59e96e3f000080bfb493d63f77e5ad3ea31195bdd38a1f34371032bf8bed37bf0000803f43f1dd338e40e533000080bf50d0d53f3e6fa83e26d67fbdd38a1f34371032bf8bed37bf0000803f43f1dd338e40e533000080bf67d3d33f77e5ad3ea41195bdd38a1f34371032bf8bed37bf0000803f43f1dd338e40e533000080bf67d3d33f77e5ad3ea41195bd47491fbf7d1032bf6eecb7bec03f75bea61489be85e96e3f000080bfc996d43f3e6fa83e26d67fbd45491fbf7d1032bf6eecb7bebe3f75bea61489be85e96e3f000080bf4273d23f77e5ad3e3ce55dbd47491fbf7d1032bf6eecb7bec03f75bea61489be85e96e3f000080bf4273d23f77e5ad3e3ce55dbd43491fbf7f1032bf73ecb73ec23f753eac14893e84e96e3f000080bf07fad33f3e6fa83e3ce55dbd42491fbf7f1032bf73ecb73ec13f753eac14893e84e96e3f000080bfc996d43f3e6fa83e58f43bbd43491fbf7f1032bf73ecb73ec23f753eac14893e84e96e3f000080bf67d3d33f77e5ad3e35a711bd42491fbf801032bf72ecb73ebe3f753eab14893e84e96e3f000080bf50d0d53f3e6fa83e58f43bbd01000034010080bf020038b40000803f020000340300b8280000803fc996d43f3e6fa83e58f43bbd01000034010080bf020038b40000803f020000340300b8280000803f166dd63f3e6fa83e3ce55dbd01000034010080bf020038b40000803f020000340300b8280000803fc996d43f3e6fa83e26d67fbd01000034010080bf020038b40000803f020000340300b8280000803f50d0d53f3e6fa83e26d67fbd01000034010080bf020038b40000803f020000340300b8280000803f07fad33f3e6fa83e3ce55dbd01000034010080bf020038b40000803f020000340300b8280000803f50d0d53fc720f23e51f43bbd010000b40100803f020038340000803f020000340300b828000080bf166dd63fc720f23e35e55dbd010000b40100803f020038340000803f020000340300b828000080bfc996d43fc720f23e51f43bbd010000b40100803f020038340000803f020000340300b828000080bf50d0d53fc720f23e1fd67fbd010000b40100803f020038340000803f020000340300b828000080bf07fad33fc720f23e36e55dbd010000b40100803f020038340000803f020000340300b828000080bfc996d43fc720f23e1fd67fbd010000b40100803f020038340000803f020000340300b828000080bffc44ef3f9930c53e232b46be01000034010080bf020038b40000803f020000340300b8280000803f3d8edf3f9930c53e07c71dbe01000034010080bf020038b40000803f020000340300b8280000803f3d8edf3f6d5fd53e07c71dbe010000b40100803f020038340000803f020000340300b828000080bffd44ef3f6d5fd53e232b46be010000b40100803f020038340000803f020000340300b828000080bf3d8edf3f6b5fd53ead513b3d010000b40100803f020038340000803f020000340300b828000080bf8d93da3f6c5fd53eb01c623c010000b40100803f020038340000803f020000340300b828000080bf8d93da3f9830c53eaa1c623c01000034010080bf020038b40000803f020000340300b8280000803f3d8edf3f9830c53eac513b3d01000034010080bf020038b40000803f020000340300b8280000803f8d93da3f6c5fd53eb01c623c0100803f010000b4c747c433c947c4b3c94744280000803f000080bf8d93da3f9830c53eaa1c623c0100803f010000b4c747c433c947c4b3c94744280000803f000080bf8d93da3f6c5fd53ecf28fabd010000b40100803f020038340000803f020000340300b828000080bf53efcf3f9830c53ea21c623c010080bf01000034c747c4b3c947c4b3c94744280000803f0000803f53efcf3f6c5fd53ea81c623c010080bf01000034c747c4b3c947c4b3c94744280000803f0000803f8d93da3f9930c53ed028fabd01000034010080bf020038b40000803f020000340300b8280000803ffb83b73f6d5fd53eedde45be215686beba1d6b3f019797beff07773fc3b67f3ec5dea4bd000080bfc05fe73f0248cd3ee0099bbeff29a73e284c643fe160a0be6e8cdc3d449a963edb1d733f0000803f5076e43f6d5fd53e168e92beff29a73e284c643fdf60a0be6a8cdc3d419a963edb1d733f0000803ffd44ef3f6d5fd53e232b46beff29a73e284c643fdf60a0be6a8cdc3d419a963edb1d733f0000803f5076e43f6d5fd53e168e92be010000b40100803f020038340000803f020000340300b828000080bf5a96d93f6e5fd53e8ceeb1be010000b40100803f020038340000803f020000340300b828000080bf76efe53ff121c93e67983e3e98d5653ecca6773ee7a9713fed77793f122964bdd2a45ebe0000803feb41e53fff46d33ecaaf3a3e9ad5653ec8a6773ee7a9713fec77793f112964bdd4a45ebe0000803f7a7bc43f6b5fd53e2737343e3dc190be3a13583fe550e93e368e753f97c07e3e268a093e000080bfb76ec13f0048cd3eb490443e3ec190be3a13583fe250e93e368e753f99c07e3e268a093e000080bfbf43b73f6c5fd53e171baf3d010000b40100803f020038340000803f020000340300b828000080bf7a7bc43f6b5fd53e2737343e010000b40100803f020038340000803f020000340300b828000080bf8636d13f6a5fd53e7aea743e010000b40100803f020038340000803f020000340300b828000080bfcaf9c93f6c5fd53eb8293b3d010000b40100803f020038340000803f020000340300b828000080bf53efcf3f6c5fd53ea81c623c010000b40100803f020038340000803f020000340300b828000080bf53efcf3f6d5fd53ed128fabd010000b40100803f020038340000803f020000340300b828000080bfcaf9c93f6d5fd53e0cbd1dbe010000b40100803f020038340000803f020000340300b828000080bffb83b73f6d5fd53eedde45be010000b40100803f020038340000803f020000340300b828000080bf7b7bc43f6e5fd53ee49491be010000b40100803f020038340000803f020000340300b828000080bf8736d13f6e5fd53e8ceeb1be42c190be3713583feb50e9be358e753f9cc07e3e2e8a09be000080bffb83b73f9930c53eedde45be01000034010080bf020038b40000803f020000340300b8280000803fcaf9c93f9930c53e0dbd1dbe01000034010080bf020038b40000803f020000340300b8280000803f53efcf3f9830c53ea21c623c01000034010080bf020038b40000803f020000340300b8280000803f53efcf3f9930c53ed128fabd01000034010080bf020038b40000803f020000340300b8280000803fcaf9c93f9830c53eb6293b3d01000034010080bf020038b40000803f020000340300b8280000803f5996d93f6a5fd53e7aea743e5de220b47cba553f75e90c3f0000803f8a510634051db133000080bf8636d13f6a5fd53e7aea743e5ce220b47cba553f73e90c3f0000803f89510634011db133000080bf926cd03fff47cd3e11bb863e5ce220b47cba553f73e90c3f0000803f89510634011db133000080bf8736d13f6e5fd53e8ceeb1be626053b377ba553f7ce90cbf0000803f28793033fdb2e8b2000080bf5a96d93f6e5fd53e8ceeb1be636053b377ba553f7be90cbf0000803f29793033fdb2e8b2000080bf016cda3f0348cd3e5f34bebe626053b377ba553f7ce90cbf0000803f28793033fdb2e8b2000080bf936cd03f0348cd3e5f34bebe636053b377ba553f7be90cbf0000803f29793033fdb2e8b2000080bf6b3cef3f9730c53e1441ae3d8ff39c3e59e70734d9ac73bf8da426b30000803f5c5c01340000803f6b3cef3f6b5fd53e1441ae3d8ff39c3e59e70734d9ac73bf8da426b30000803f5c5c01340000803fcaf9c93f9830c53eb6293b3d828686bea92a53346f0177bf90ee5d330000803f58bf4b340000803fbf43b73f9830c53e171baf3d51e487beb05f53348ad176bff46760330000803ff6ca4b340000803fbf43b73f6c5fd53e171baf3d4fe487beaf5f53348ad176bfef6760330000803ff5ca4b340000803fcaf9c93f6c5fd53eb8293b3d828686bea92a53346f0177bf90ee5d330000803f58bf4b340000803f8d93da3f6c5fd53ecf28fabdcd6c223f3a6f5fb4c3df453f59c30d340000803fe4b32c34000080bf8d93da3f9930c53ed028fabdcd6c223f3a6f5fb4c3df453f59c30d340000803fe4b32c34000080bf3d8edf3f9930c53e07c71dbecd6c223f3a6f5fb4c3df453f59c30d340000803fe4b32c34000080bf3d8edf3f6d5fd53e07c71dbecd6c223f3a6f5fb4c3df453f59c30d340000803fe4b32c34000080bfcaf9c93f6d5fd53e0cbd1dbe59ae10bf7fe99eb3f931533f239f33b30000803f79198333000080bfcaf9c93f9930c53e0dbd1dbe59ae10bf7fe99eb3f931533f239f33b30000803f79198333000080bf53efcf3f9930c53ed128fabd59ae10bf7fe99eb3f931533f239f33b30000803f79198333000080bf53efcf3f6d5fd53ed128fabd59ae10bf7fe99eb3f931533f239f33b30000803f79198333000080bf926cd03fff47cd3e11bb863ee660533395ba55bf4de90c3f0000803faf79303341b3e8b20000803f8636d13f9730c53e79ea743ee660533395ba55bf4de90c3f0000803faf79303341b3e8b20000803f5996d93f9730c53e7aea743ee660533395ba55bf4de90c3f0000803faf79303341b3e8b20000803f006cda3fff47cd3e11bb863ee460533395ba55bf4ee90c3f0000803fad79303341b3e8b20000803fb76ec13f0048cd3eb490443e13c190be501358bfa150e93e3c8e753f61c07ebed389093e0000803f7a7bc43f9730c53e2737343e13c190be501358bf9f50e93e3c8e753f61c07ebed289093e0000803f8636d13f9730c53e79ea743e13c190be501358bfa150e93e3c8e753f61c07ebed389093e0000803f926cd03fff47cd3e11bb863e14c190be501358bfa150e93e3b8e753f62c07ebed489093e0000803fbf43b73f9830c53e171baf3d18be97be373263bf84aeb43ea37f743f13018dbea845e03d0000803f7a7bc43f9730c53e2737343e18be97be373263bf84aeb43ea37f743f13018dbea845e03d0000803fb76ec13f0048cd3eb490443e18be97be373263bf84aeb43ea37f743f13018dbea845e03d0000803fd866b23f0048cd3e20dfc63d18be97be373263bf84aeb43ea37f743f13018dbea845e03d0000803fc70bb73f0248cd3edc6675bebbc38abee1e36abfc1fa94be256b763fcc4584bed0c9a7bd0000803ffb83b73f9930c53eedde45be2ec889be48166bbf19a694be6d8e763f645f83be3223a6bd0000803fd866b23f0248cd3e316252bebbc38abee1e36abfc0fa94be256b763fcc4584becfc9a7bd0000803f7b7bc43f9a30c53ee49491be613a93be5bec58bf6c92e4be0930753f904182be354009be0000803fe673bb3f1693c93e28737ebe2f0a9fbe66af5cbf020bcdbe1c56733f433c90be130306be0000803fa6eabd3f0248cd3ee0a08ebe2f0a9fbe66af5cbf030bcdbe1c56733f433c90be130306be0000803fb76ec13f0248cd3eaac199be720296be3eda59bf112adfbe0ac4743fe68385be4bc508be0000803f7b7bc43f9a30c53ee49491be1ee583beb53d6cbf57a892be235c773fbcee7bbe19669cbd0000803f936cd03f0348cd3e5f34bebe18c190be491358bfbc50e9be3b8e753f62c07ebee78909be0000803f8736d13f9a30c53e8ceeb1be18c190be491358bfbe50e9be3b8e753f62c07ebee98909be0000803f016cda3f0348cd3e5f34bebe5ce220348aba55bf5fe90cbf0000803f92510634e81cb1330000803f5a96d93f9a30c53e8ceeb1be5ce220348aba55bf60e90cbf0000803f92510634e91cb1330000803f8736d13f9a30c53e8ceeb1be5ce220348aba55bf5fe90cbf0000803f92510634e81cb1330000803f936cd03f0348cd3e5f34bebe5ce220348aba55bf5fe90cbf0000803f92510634e81cb1330000803fc05fe73f0248cd3ee0099bbefd9f9c3e556258bfb754e0be46ba733fab0d8b3e0229103e0000803f5076e43f9930c53e168e92befe9f9c3e576258bfb754e0be46ba733fad0d8b3e0329103e0000803f5a96d93f9a30c53e8ceeb1befe9f9c3e556258bfb754e0be46ba733fac0d8b3e0329103e0000803f016cda3f0348cd3e5f34bebefd9f9c3e576258bfb754e0be46ba733fac0d8b3e0229103e0000803ffc44ef3f9930c53e232b46bed629a73e394c64bfbf60a0be028cdc3d2b9a96bedf1d733f000080bf5076e43f9930c53e168e92bed629a73e394c64bfbf60a0be028cdc3d2b9a96bedf1d733f000080bfc05fe73f0248cd3ee0099bbed629a73e394c64bfbf60a0be028cdc3d2b9a96bedf1d733f000080bf94e8f33f0148cd3e2e6252bed629a73e394c64bfbf60a0be028cdc3d2b9a96bedf1d733f000080bfd866b23f0248cd3e316252be24c095be2d840ab434ce743fca0d22b30000803f8d750434000080bffb83b73f9930c53eedde45bec2c687bed7770fb49ad5763f2c2f18b30000803fde540a34000080bffb83b73f6d5fd53eedde45bec2c687bed7770fb49ad5763f2c2f18b30000803fde540a34000080bffd44ef3f6d5fd53e232b46be25f79c3e9b6156b445ac733f727283330000803fe90e4c34000080bffc44ef3f9930c53e232b46be25f79c3e9b6156b445ac733f727283330000803fe90e4c34000080bf94e8f33f0148cd3e2e6252be0c12a03e52cb56b4dc2a733f384e86330000803ff5064c34000080bf6b3cef3f6b5fd53e1441ae3d8ff39c3e59e70734d9ac73bf8da426b30000803f5c5c01340000803f6b3cef3f9730c53e1441ae3d8ff39c3e59e70734d9ac73bf8da426b30000803f5c5c01340000803f3d8edf3f9830c53eac513b3dee979c3ed808083495bb73bf3f6c26b30000803f138401340000803f3d8edf3f6b5fd53ead513b3dee979c3ed808083495bb73bf3f6c26b30000803f138401340000803fbf43b73f6c5fd53e171baf3d4fe487beaf5f53348ad176bfef6760330000803ff5ca4b340000803fbf43b73f9830c53e171baf3d51e487beb05f53348ad176bff46760330000803ff6ca4b340000803fd866b23f0048cd3e20dfc63d4a9195bead5d55345cd574bf3b5179330000803f1d0f4c340000803f7ed8c43f023eda3ed3c48cbeac8c05bfc8c05f3493675abf3774e9330000803fb1e43e340000803f7ed8c43f0552c03ed4c48cbeac8c05bfc8c05f3493675abf3774e9330000803fb1e43e340000803f6940d13f023eda3ed51cabbec7a22e398efa3734020080bf9002fbad0000803f91fa37340000803f6940d13f0652c03ed51cabbec7a22e398efa3734020080bf9002fbad0000803f91fa37340000803f2b85d93f023eda3e6c1babbe995c123fec8f9b33b40852bfb3e031b30000803fb3427f330000803f2b85d93f0652c03e6d1babbe995c123fec8f9b33b40852bfb3e031b30000803fb3427f330000803f7818e43f023eda3e1ea18dbef9d33c3fa29fee32bddb2cbfd102b0b20000803f1420a1320000803f7818e43f0552c03e1fa18dbef9d33c3fa29fee32bddb2cbfd102b0b20000803f1420a1320000803ff2a0ba3f023eda3e727853be010000b40100803f020038340000803f020000340300b828000080bf83e8c13f023eda3e933d47be010000b40100803f020038340000803f020000340300b828000080bf0d2ec93f023eda3e50b780bea5ffebba62ff7f3fba2982bbe5ff7f3f2cffeb3aabfcefb6000080bf7ed8c43f023eda3ed3c48cbe010000b40100803f020038340000803f020000340300b828000080bf7ed8c43f0552c03ed4c48cbe01000034010080bf020038b40000803f020000340300b8280000803f0d2ec93f0552c03e50b780beb8f7ebba62ff7fbfa62c82bbe5ff7f3f3ff7ebbafff9efb60000803f83e8c13f0552c03e943d47be01000034010080bf020038b40000803f020000340300b8280000803ff2a0ba3f0552c03e737853be01000034010080bf020038b40000803f020000340300b8280000803ff2a0ba3f0552c03e737853be657452bee9c319b4fc887a3f3dd1fcb20000803f997b1634000080bf83e8c13f0552c03e943d47be657452bee9c319b4fc887a3f3dd1fcb20000803f997b1634000080bf83e8c13f023eda3e933d47be657452bee9c319b4fc887a3f3dd1fcb20000803f997b1634000080bff2a0ba3f023eda3e727853be657452bee9c319b4fc887a3f3dd1fcb20000803f997b1634000080bf6940d13f023eda3ed51cabbe1e3c18bb90ff7f3f91a03cbbd3ff7f3ff63b183b6c57e0b6000080bf6940d13f0652c03ed51cabbe3a3818bb90ff7fbf76a63cbbd3ff7f3f123818bbb258e0b60000803f2b85d93f023eda3e6c1babbe1c341a3b9aff7f3f2a6b2bbbd2ff7f3ffb331abbde82ce36000080bfbc2ae03f023eda3e852c81be5cfe0a3b4eff7f3f36d186bbdbff7f3f10fe0abb8c651237000080bf7818e43f023eda3e1ea18dbe010000b40100803f020038340000803f020000340300b828000080bf7818e43f0552c03e1fa18dbe01000034010080bf020038b40000803f020000340300b8280000803fbc2ae03f0552c03e852c81be67020b3b4eff7fbf21d486bbdbff7f3f1b020b3bfa6c12370000803f2b85d93f0652c03e6d1babbe3c381a3b9aff7fbf0d712bbbd2ff7f3f1b381a3b7b8fce360000803f6c03e63f013eda3e7e1548be010000b40100803f020038340000803f020000340300b828000080bf6c4bec3f013eda3e4e9b53be010000b40100803f020038340000803f020000340300b828000080bf6c4bec3f013eda3e4e9b53be13df643e45f44fb41a86793fc3ea39330000803f86b14a34000080bf6c03e63f013eda3e7e1548be13df643e45f44fb41a86793fc3ea39330000803f86b14a34000080bf6c03e63f0552c03e7e1548be13df643e45f44fb41a86793fc3ea39330000803f86b14a34000080bf6c4bec3f0552c03e4f9b53be13df643e45f44fb41a86793fc3ea39330000803f86b14a34000080bf6c4bec3f0552c03e4f9b53be01000034010080bf020038b40000803f020000340300b8280000803f6c03e63f0552c03e7e1548be01000034010080bf020038b40000803f020000340300b8280000803fb6ca053f0401d33ed0990ebd66cbc3be03da4c3f9f8aec3ec08a6c3f2e90a93e48cb433e000080bf5372173fe670db3ecf8acdbb67cbc3be03da4c3f9e8aec3ec08a6c3f2f90a93e48cb433e000080bfb6ca053ffeb9d83e54e55dbd62cbc3be09da4c3f928aecbec18a6c3f2e90a93e39cb43be000080bf5372173fca99e93e51e55dbd63cbc3be0ada4c3f8e8aecbec28a6c3f3190a93e38cb43be000080bfb6ca053f0401d33e6f9896bd77cbc3be9af65a34c38a6cbfdf77a7330000803f06524a340000803f5372173fe670db3ea70cd1bd75cbc3be9af65a34c38a6cbfdd77a7330000803f06524a340000803fb6ca053f038fc73e709896bd6bcbc3befcd94cbfb28aecbec18a6c3f2e90a9be5fcb43be0000803f5372173f221fbf3ea90cd1bd6bcbc3befad94cbfb28aecbec18a6c3f2d90a9be5fcb43be0000803fb6ca053f0ad6c13e56e55dbd5ecbc3bef6d94cbfcd8aec3ec38a6c3f1b90a9be66cb433e0000803f5372173f3bf6b03e56e55dbd5dcbc3bef6d94cbfcb8aec3ec38a6c3f1b90a9be63cb433e0000803f5372173f211fbf3e378ccdbb60cbc3bef6d94cbfcb8aec3ec28a6c3f1d90a9be66cb433e0000803fb6ca053f038fc73ed1990ebd5dcbc3bef6d94cbfcb8aec3ec38a6c3f1b90a9be63cb433e0000803fb6ca053f0401d33ed0990ebd010080bf01000034c747c4b3c947c4b3c94744280000803f0000803fb6ca053f038fc73ed1990ebd010080bf01000034c747c4b3c947c4b3c94744280000803f0000803fb6ca053ffeb9d83e54e55dbd010080bf01000034c747c4b3c947c4b3c94744280000803f0000803fb6ca053f0401d33e6f9896bd010080bf01000034c747c4b3c947c4b3c94744280000803f0000803fb6ca053f038fc73e709896bd010080bf01000034c747c4b3c947c4b3c94744280000803f0000803fb6ca053f0ad6c13e56e55dbd010080bf01000034c747c4b3c947c4b3c94744280000803f0000803fe494e43f2f65da3e35e55dbded67783ffb098a3c55f6763e94f685bcb3f67f3f432f85bb0000803f78a3e43f0148cd3e36e55dbd31a1783f0e2628b4e4f1733ebe4e23340000803f013b20330000803fe494e43fd52ac03e37e55dbded67783f910a8abc52f676be26f7853cb3f67f3fd22f85bb0000803fbc85c43f851bbf3e8025d1bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf93a6c03f851bbf3e8125d1bdc747c43302003834020080bf0000803f99138da8ca47c433000080bfbc85c43f8074db3e7f25d1bd572077b3f1b35d3fafffffbe0000803f9f0456330920f7b2000080bf93a6c03f8074db3e7f25d1bd572077b3f1b35d3faeffffbe0000803f9f0456330820f7b2000080bf4771c43ff6a0e93e39e55dbddbeb1fb4edb35d3fbfffff3e0000803f027f0a34b2eb9f33000080bf582dc13ff6a0e93e3ae55dbddbeb1fb4edb35d3fbfffff3e0000803f027f0a34b2eb9f33000080bfbc85c43f7f74db3ef5fbcbbbc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f93a6c03f8074db3efbfbcbbbc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f582dc13f0cefb03e3fe55dbd1d207733e5b35dbfdbffff3e0000803f62045633f91ff7b20000803f4771c43f0cefb03e3fe55dbd1c207733e5b35dbfdcffff3e0000803f61045633f91ff7b20000803fbc85c43f851bbf3e0afccbbb1c207733e5b35dbfdcffff3e0000803f61045633f91ff7b20000803f93a6c03f851bbf3e10fccbbb1d207733e5b35dbfdbffff3e0000803f62045633f91ff7b20000803f93a6c03f851bbf3e8125d1bda5440ebf71643bbf76cac9be920974be61b8a0be5f476b3f000080bf582dc13f0cefb03e3fe55dbda5440ebf70643bbf78cac9be950974be62b8a0be5f476b3f000080bfd650e53f6cb9c63e34609cbd34ab1d3fb97a3bbfb5b394be9b6b3f3ec79c63be14f7743f000080bfe494e43fd52ac03e37e55dbd34ab1d3fb97a3bbfb5b394be9b6b3f3ec79c63be14f7743f000080bf93a6c03f8074db3e7f25d1bde4a41abf94af843c7ef84bbf8d53203c68f77f3f2677533c0000803f93a6c03f851bbf3e8125d1bde4a41abf95af843c7ef84bbf8f53203c68f77f3f2777533c0000803f344fbd3fceb0c43e1d77aabde4a41abf96af843c7ef84bbf9053203c68f77f3f2977533c0000803fd650e53f98d6d33e33609cbd5c3d243fef156c33d55e44bfa37617b30000803f3f1835330000803fd650e53f6cb9c63e34609cbd5c3d243fef156c33d55e44bfa37617b30000803f3f1835330000803f545fe13f851bbf3e7e25d1bd5c3d243fef156c33d55e44bfa37617b30000803f3f1835330000803f582dc13ff6a0e93e3ae55dbd500613bf3f90363faad1cdbe4a1881beb94ca03ea3676a3f0000803f93a6c03f8074db3e7f25d1bd500613bf3f90363faad1cdbe4a1881beb94ca03ea3676a3f0000803ff513bd3f7af1d43e0408a4bd4f0613bf4090363fa8d1cdbe481881beb94ca03ea4676a3f0000803fe494e43f2f65da3e35e55dbd26ab1d3fc47a3b3f9fb394be6c6b3f3eb19c633e19f7743f0000803fd650e53f98d6d33e33609cbd25ab1d3fc47a3b3fa0b394be6b6b3f3eb29c633e18f7743f0000803f545fe13f8074db3e7c25d1bd25ab1d3fc47a3b3fa0b394be6b6b3f3eb29c633e18f7743f0000803f93a6c03f8074db3efbfbcbbb98440ebf82643b3f6ccac93e6e09743e66b8a0be61476b3f0000803f582dc13ff6a0e93e3ae55dbd9b440ebf81643b3f6bcac93e7009743e64b8a0be60476b3f0000803fd749bd3f6b76de3e3ce55dbd98440ebf82643b3f6bcac93e6c09743e66b8a0be61476b3f0000803fd650e53f98d6d33e090a03bd26ab1d3fc07a3b3fafb3943e826b3fbec59c63be16f7743f0000803fe494e43f2f65da3e35e55dbd26ab1d3fc07a3b3fb0b3943e836b3fbec69c63be16f7743f0000803f522de03ff5a0e93e34e55dbd27ab1d3fc07a3b3fb0b3943e846b3fbec69c63be16f7743f0000803f93a6c03f851bbf3e10fccbbbc71016bfd91394b363674f3fab9a2db30000803fb3ef6f33000080bf93a6c03f8074db3efbfbcbbbc71016bfd91394b363674f3fab9a2db30000803fb3ef6f33000080bf344fbd3f37dfd53e78b8cdbcc61016bfda1394b363674f3fab9a2db30000803fb5ef6f33000080bfd650e53f6cb9c63e0a0a03bd5a3d243fd7425fb4d75e443f533c0f340000803fe3412b34000080bfd650e53f98d6d33e090a03bd5a3d243fd7425fb4d75e443f533c0f340000803fe3412b34000080bf545fe13f7f74db3ec9fbcbbb5a3d243fd7425fb4d75e443f533c0f340000803fe3412b34000080bfd749bd3f9a19bc3e3fe55dbda4440ebf75643bbf6bcac93e8009743e5ab8a03e61476b3f000080bf582dc13f0cefb03e3fe55dbda4440ebf74643bbf6bcac93e8009743e5ab8a03e61476b3f000080bf93a6c03f851bbf3e10fccbbba4440ebf75643bbf6bcac93e8009743e5ab8a03e61476b3f000080bf344fbd3fcdb0c43e7bb8cdbca4440ebf75643bbf6bcac93e8009743e5ab8a03e61476b3f000080bfe494e43fd52ac03e37e55dbd33ab1d3fba7a3bbfb6b3943e9c6b3fbec99c633e14f7743f000080bfd650e53f6cb9c63e0a0a03bd34ab1d3fba7a3bbfb6b3943e9d6b3fbec99c633e14f7743f000080bf545fe13f851bbf3edefbcbbb33ab1d3fba7a3bbfb7b3943e9d6b3fbecc9c633e14f7743f000080bf522de03f0cefb03e39e55dbd33ab1d3fba7a3bbfb6b3943e9c6b3fbec99c633e14f7743f000080bf52b1db3f851bbf3e7e25d1bdc747c43302003834020080bf0000803f99138da8ca47c433000080bffc11d83f851bbf3e7e25d1bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf0995d23f851bbf3e7f25d1bd01000034010080bf020038b40000803f020000340300b8280000803f7e93d13f861bbf3ea53b4bbe1c0d35bb2efd7fbf166311bcc0ff7f3f4a0b35bb34a5cdb70000803ffc11d83f851bbf3e7e25d1bd01000034010080bf020038b40000803f020000340300b8280000803ffc11d83f851bbf3e7e25d1bdd2b87f3f516f08b495dc3e3d624908340000803f5a70cb310000803f36a5d83f861bbf3e9b334bbed2b87f3f516f08b495dc3e3d624908340000803f5a70cb310000803ffc11d83f8074db3e7d25d1bdd2b87f3f516f08b495dc3e3d624908340000803f5a70cb310000803ffc11d83f8074db3e7d25d1bd010000b40100803f020038340000803f020000340300b828000080bf36a5d83f8074db3e9a334bbea0ff203b94fd7f3f8d5907bcceff7f3f3afe20bb603eaa37000080bf7e93d13f8074db3ea43b4bbe6f0e35bb2efd7f3f866311bcc0ff7f3f9d0c353b53a7cdb7000080bf0995d23f8074db3e7e25d1bd010000b40100803f020038340000803f020000340300b828000080bf0995d23f7f74db3ee0fbcbbb010000b40100803f020038340000803f020000340300b828000080bf7e93d13f7f74db3e0992b83d280f35bb2cfd7f3f1d7f113cc0ff7f3f550d353b2ccfcd37000080bffc11d83f7f74db3ed7fbcbbb010000b40100803f020038340000803f020000340300b828000080bffc11d83f7f74db3ed7fbcbbbd2b87f3f0393eeb364dc3ebdad50ee330000803f80deb1b10000803f35a5d83f7f74db3efb81b83dd2b87f3f0393eeb364dc3ebdad50ee330000803f80deb1b10000803ffb11d83f851bbf3eecfbcbbbd2b87f3f0393eeb364dc3ebdad50ee330000803f80deb1b10000803ffb11d83f851bbf3eecfbcbbb01000034010080bf020038b40000803f020000340300b8280000803f35a5d83f841bbf3efa81b83d4bf8203b92fd7fbff771073cceff7f3fe4f6203b5355aab70000803f7e93d13f841bbf3e0892b83dd40d35bb2cfd7fbfcd7b113cc0ff7f3f010c35bbfac8cd370000803f0995d23f851bbf3ef4fbcbbb01000034010080bf020038b40000803f020000340300b8280000803f7ed8c43f003eda3e09972a3eba8c05bf1c68b4b389675a3f853a3cb30000803f9ee99933000080bf7ed8c43f0352c03e09972a3eba8c05bf1c68b4b389675a3f853a3cb30000803f9ee99933000080bf6940d13fff3dda3e1747673e20592b395e0538b40200803f4d57f62d0000803f61053834000080bf6840d13f0252c03e1647673e20592b395e0538b40200803f4d57f62d0000803f61053834000080bf2a85d93fff3dda3e5244673ec05c123f8f2460b49a08523f0f2600340000803f85e53734000080bf2a85d93f0252c03e5244673ec05c123f8f2460b49a08523f0f2600340000803f85e53734000080bf7718e43fff3dda3ea04f2c3ef4d33c3feca75ab4c1db2c3f5a4821340000803f85a413340000803f7718e43f0352c03e9f4f2c3ef4d33c3feca75ab4c1db2c3f5a4821340000803f85a413340000803ff2a0ba3f003eda3ea40bc93d010000b40100803f020038340000803f020000340300b828000080bf7ed8c43f003eda3e09972a3e010000b40100803f020038340000803f020000340300b828000080bf0c2ec93f003eda3ef97b123e9900ecba62ff7f3faf2c823be5ff7f3f2000ec3a1703f036000080bf83e8c13f003eda3ee695b03d010000b40100803f020038340000803f020000340300b828000080bf7ed8c43f0352c03e09972a3e01000034010080bf020038b40000803f020000340300b8280000803ff2a0ba3f0352c03ea30bc93d01000034010080bf020038b40000803f020000340300b8280000803f83e8c13f0352c03ee595b03d01000034010080bf020038b40000803f020000340300b8280000803f0c2ec93f0352c03ef87b123eacf8ebba62ff7fbfdb29823be5ff7f3f33f8ebbad1f5ef360000803ff2a0ba3f0352c03ea30bc93d667452be02614e34fc887abf6aa929330000803f2bf949340000803ff2a0ba3f003eda3ea40bc93d667452be02614e34fc887abf6aa929330000803f2bf949340000803f83e8c13f003eda3ee695b03d667452be02614e34fc887abf6aa929330000803f2bf949340000803f83e8c13f0352c03ee595b03d667452be02614e34fc887abf6aa929330000803f2bf949340000803f6940d13fff3dda3e1747673ee20c0fbb9aff7f3f010a373bd8ff7f3fbf0c0f3bb98fcc36000080bf6840d13f0252c03e1647673efd080fbb9aff7fbf6204373bd8ff7f3fda080fbbe083cc360000803f2a85d93fff3dda3e5244673e6393103ba4ff7f3f7206263bd7ff7f3f469310bb8a86bbb6000080bf7718e43fff3dda3ea04f2c3e010000b40100803f020038340000803f020000340300b828000080bfbc2ae03fff3dda3e6e66133e53fe0a3b4eff7f3f0ed4863bdbff7f3f07fe0abb996812b7000080bf7718e43f0352c03e9f4f2c3e01000034010080bf020038b40000803f020000340300b8280000803f2a85d93f0252c03e5244673e8097103ba4ff7fbfd300263bd7ff7f3f6397103b8685bbb60000803fbc2ae03f0352c03e6e66133e60020b3b4eff7fbf39d1863bdbff7f3f14020b3bca6912b70000803f6c4bec3fff3dda3e6651c93d010000b40100803f020038340000803f020000340300b828000080bf6c03e63f003eda3ec545b23d010000b40100803f020038340000803f020000340300b828000080bf6c4bec3fff3dda3e6651c93d11df643e82bc16341c8679bf3cc306b30000803f52ec12340000803f6c4bec3f0352c03e6551c93d11df643e82bc16341c8679bf3cc306b30000803f52ec12340000803f6c03e63f0352c03ec445b23d11df643e82bc16341c8679bf3cc306b30000803f52ec12340000803f6c03e63f003eda3ec545b23d11df643e82bc16341c8679bf3cc306b30000803f52ec12340000803f6c4bec3f0352c03e6551c93d01000034010080bf020038b40000803f020000340300b8280000803f6c03e63f0352c03ec445b23d01000034010080bf020038b40000803f020000340300b8280000803fe34be13f1f44bb3e3cd8dd3b11207733e2b35dbfe2ffff3e0000803f54045633f41ff7b20000803f9d34dc3f1f44bb3e34d8dd3b17207733e4b35dbfe0ffff3e0000803f5b045633f81ff7b20000803ff3cddf3f3e40a93e3ae55dbdddeb1f34e1b35dbfe9ffffbe0000803ffc7e0a34cfeb9f330000803fcc94db3f3e40a93e3be55dbdddeb1f34e1b35dbfe9ffffbe0000803ffc7e0a34cfeb9f330000803fe34be13f1f44bb3ebec2ebbdc747c43302003834020080bf0000803f99138da8ca47c433000080bf9e34dc3f2044bb3ebfc2ebbdc747c43302003834020080bf0000803f99138da8ca47c433000080bfe34be13fe64bdf3ebdc2ebbd172077b3e4b35d3fe0ffffbe0000803f5b045633f81ff7b2000080bf9e34dc3fe64bdf3ebdc2ebbd172077b3e4b35d3fe0ffffbe0000803f5b045633f81ff7b2000080bf9d34dc3fe54bdf3e4ed8dd3bddeb1fb4dfb35d3fedffff3e0000803ffb7e0a34d1eb9f33000080bfe34be13fe54bdf3e55d8dd3bddeb1fb4dfb35d3fedffff3e0000803ffb7e0a34d1eb9f33000080bff3cddf3fc74ff13e33e55dbdddeb1fb4dfb35d3fecffff3e0000803ffb7e0a34d1eb9f33000080bfcc94db3fc74ff13e34e55dbdddeb1fb4dfb35d3fefffff3e0000803ffb7e0a34d2eb9f33000080bf52b1db3f851bbf3ee6fbcbbbc9a274bf7a358833dada963e952982330000803f8e87a0b2000080bf9d34dc3f1f44bb3e34d8dd3bc9a274bf7a358833dada963e952982330000803f8e87a0b2000080bf9d34dc3fe54bdf3e4ed8dd3bc9a274bf7a358833dada963e952982330000803f8e87a0b2000080bf52b1db3f7f74db3ed2fbcbbbc9a274bf7a358833dada963e952982330000803f8e87a0b2000080bf545fe13f7f74db3ec9fbcbbbd2bb7f3f254208b49ecd3a3ddb1d08340000803f00dbc6310000803fe34be13fe54bdf3e55d8dd3bd2bb7f3f254208b49fcd3a3ddb1d08340000803f01dbc6310000803fe34be13f1f44bb3e3cd8dd3bd2bb7f3f254208b49fcd3a3ddb1d08340000803f01dbc6310000803f545fe13f851bbf3edefbcbbbd2bb7f3f254208b49ecd3a3ddb1d08340000803f00dbc6310000803f7d47db3f0cefb03e3ae55dbde32978bf719032be52ff303e8a332e3ec2b0fa3c93257c3f0000803fcc94db3f3e40a93e3be55dbde32978bf719032be52ff303e8a332e3ec2b0fa3c93257c3f0000803f9d34dc3f1f44bb3e34d8dd3be32978bf719032be52ff303e8a332e3ec2b0fa3c93257c3f0000803f52b1db3f851bbf3ee6fbcbbbe32978bf719032be52ff303e8a332e3ec2b0fa3c93257c3f0000803f545fe13f851bbf3edefbcbbb254d7a3f107a48bec1929abd9290973dfec972bc13457f3f000080bfe34be13f1f44bb3e3cd8dd3b254d7a3f107a48bec1929abd9290973dfec972bc13457f3f000080bff3cddf3f3e40a93e3ae55dbd254d7a3f107a48bec1929abd9290973dfec972bc13457f3f000080bf522de03f0cefb03e39e55dbd254d7a3f107a48bec1929abd9290973dfec972bc13457f3f000080bf52b1db3f851bbf3e7e25d1bde22978bf729032be5fff30be96332ebed5b0fabc92257c3f0000803f9e34dc3f2044bb3ebfc2ebbde22978bf729032be5fff30be96332ebed5b0fabc92257c3f0000803fcc94db3f3e40a93e3be55dbde22978bf729032be5fff30be96332ebed5b0fabc92257c3f0000803f7d47db3f0cefb03e3ae55dbde22978bf729032be5fff30be96332ebed5b0fabc92257c3f0000803f522de03f0cefb03e39e55dbd254d7a3f117a48bece929a3d9f9097bd13ca723c13457f3f000080bff3cddf3f3e40a93e3ae55dbd254d7a3f117a48bed0929a3da19097bd16ca723c13457f3f000080bfe34be13f1f44bb3ebec2ebbd254d7a3f117a48bed0929a3da19097bd16ca723c13457f3f000080bf545fe13f851bbf3e7e25d1bd254d7a3f117a48bed0929a3da19097bd16ca723c13457f3f000080bf52b1db3f8074db3e7d25d1bdc8a274bf0d883034e3da96beecb128340000803f500d5033000080bf9e34dc3fe64bdf3ebdc2ebbdc8a274bf0d883034e3da96beecb128340000803f500d5033000080bf9e34dc3f2044bb3ebfc2ebbdc8a274bf0d883034e3da96beecb128340000803f500d5033000080bf52b1db3f851bbf3e7e25d1bdc8a274bf0d883034e3da96beecb128340000803f500d5033000080bf545fe13f851bbf3e7e25d1bdd2bb7f3f5bf3eeb371cd3abdb7b3ee330000803f925caeb10000803fe34be13f1f44bb3ebec2ebbdd2bb7f3f5bf3eeb371cd3abdb7b3ee330000803f925caeb10000803fe34be13fe64bdf3ebdc2ebbdd2bb7f3f5bf3eeb371cd3abdb7b3ee330000803f925caeb10000803f545fe13f8074db3e7c25d1bdd2bb7f3f5bf3eeb371cd3abdb7b3ee330000803f925caeb10000803fcc94db3fc74ff13e34e55dbde52978bf6a90323e44ff30be7d332ebea2b0fa3c93257c3f0000803f9e34dc3fe64bdf3ebdc2ebbde52978bf6990323e44ff30be7d332ebea1b0fa3c93257c3f0000803f52b1db3f8074db3e7d25d1bde52978bf6990323e44ff30be7d332ebea1b0fa3c93257c3f0000803f545fe13f8074db3e7c25d1bd244d7a3fdd79483e0e939a3ddd9097bd3aca72bc12457f3f000080bfe34be13fe64bdf3ebdc2ebbd244d7a3fdc79483e0e939a3ddd9097bd39ca72bc12457f3f000080bff3cddf3fc74ff13e33e55dbd244d7a3fdc79483e0e939a3ddd9097bd39ca72bc12457f3f000080bf522de03ff5a0e93e34e55dbd244d7a3fdc79483e0d939a3ddc9097bd37ca72bc12457f3f000080bf52b1db3f7f74db3ed2fbcbbbe62978bf5a90323e3cff303e75332e3e80b0fabc93257c3f0000803f9d34dc3fe54bdf3e4ed8dd3be62978bf5a90323e3cff303e75332e3e80b0fabc93257c3f0000803fcc94db3fc74ff13e34e55dbde62978bf5c90323e3cff303e75332e3e83b0fabc93257c3f0000803f7d47db3ff5a0e93e35e55dbde62978bf5c90323e3cff303e75332e3e83b0fabc93257c3f0000803f522de03ff5a0e93e34e55dbd254d7a3fdb79483ef0929abdbf90973d07ca723c12457f3f000080bff3cddf3fc74ff13e33e55dbd274d7a3fdc79483ef2929abdc290973d0cca723c12457f3f000080bfe34be13fe54bdf3e55d8dd3b254d7a3fdd79483ef1929abdc090973d0bca723c12457f3f000080bf545fe13f7f74db3ec9fbcbbb254d7a3fdb79483ef1929abdc090973d09ca723c12457f3f000080bf10adcc3f8502bb3e3d89edbdc747c43302003834020080bf0000803f99138da8ca47c433000080bf99dac93f8502bb3e3d89edbdc747c43302003834020080bf0000803f99138da8ca47c433000080bf10adcc3f808ddf3e3b89edbd0a2077b3e1b35d3fe9ffffbe0000803f4d045633f41ff7b2000080bf99dac93f808ddf3e3c89edbd0a2077b3e1b35d3fe9ffffbe0000803f4d045633f41ff7b2000080bfb120ce3ffbd2f13e37e55dbddfeb1fb4deb35d3ff8ffff3e0000803ffc7e0a34daeb9f33000080bf760bcc3ffbd2f13e37e55dbddfeb1fb4deb35d3ff8ffff3e0000803ffc7e0a34daeb9f33000080bf10adcc3f7f8ddf3eee3ffa3bc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f98dac93f7f8ddf3eea3ffa3bc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f760bcc3f09bda83e3ee55dbd06207733e1b35dbfeeffff3e0000803f4a045633f51ff7b20000803fb120ce3f09bda83e3de55dbd06207733e1b35dbfeeffff3e0000803f4a045633f51ff7b20000803f10adcc3f8502bb3ed43ffa3b06207733e1b35dbfeeffff3e0000803f4a045633f51ff7b20000803f98dac93f8502bb3ecf3ffa3b06207733e1b35dbfeeffff3e0000803f4a045633f51ff7b20000803fdab3c93f0d40c33e0772b4bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf785ec63f0e40c33e0872b4bdc747c43302003834020080bf0000803f99138da8ca47c433000080bfdab3c93ff84fd73e0772b4bd801f77b3c4b35d3f290000bf0000803fba035633cf1ff7b2000080bf785ec63ff84fd73e0772b4bd7d1f77b3c3b35d3f2a0000bf0000803fb6035633ce1ff7b2000080bf31f6ca3ff457e13e39e55dbde3eb1fb4beb35d3f3100003f0000803fec7e0a3420ec9f33000080bfe175c63ff457e13e3ae55dbde3eb1fb4beb35d3f3100003f0000803fec7e0a3420ec9f33000080bfdab3c93ff74fd73ed8cca5bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f785ec63ff74fd73ed9cca5bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803fe275c63f1138b93e3de55dbd761f7733c1b35dbf2c00003f0000803fae035633cb1ff7b20000803f30f6ca3f1138b93e3de55dbd761f7733c1b35dbf2c00003f0000803fae035633cb1ff7b20000803fdab3c93f0d40c33edbcca5bc761f7733c1b35dbf2c00003f0000803fae035633cb1ff7b20000803f785ec63f0d40c33eddcca5bc761f7733c1b35dbf2c00003f0000803fae035633cb1ff7b20000803fbc85c43f851bbf3e8025d1bded2b2e3ff16522bfcde7bbbedc6e893ea02480bee2226e3f000080bf785ec63f0e40c33e0872b4bded2b2e3ff16522bfcde7bbbedc6e893ea02480bee2226e3f000080bfe275c63f1138b93e3de55dbdee2b2e3ff26522bfcbe7bbbedb6e893e9f2480bee2226e3f000080bf4771c43f0cefb03e3fe55dbdee2b2e3ff26522bfcbe7bbbedb6e893e9f2480bee2226e3f000080bf30f6ca3f1138b93e3de55dbdfeaa63bf4c1feabea16a2bb40c7218b46cc49cb30000803f0000803fdab3c93f0d40c33e0772b4bd68a363bf8017eabe083084bcc51d6bbc22c8f1bb78f77f3f0000803fbc85c43f8074db3e7f25d1bd1360323f212c2b3318a037bfd889eeb20000803f2e8ff5320000803f785ec63ff84fd73e0772b4bd1360323f212c2b3318a037bfd889eeb20000803f2e8ff5320000803f785ec63f0e40c33e0872b4bd1360323f212c2b3318a037bfd889eeb20000803f2e8ff5320000803fbc85c43f851bbf3e8025d1bd1360323f212c2b3318a037bfd889eeb20000803f2e8ff5320000803fee50ca3f851bbf3e8025d1bdcc3872bf50a93434a1b4a5be23f02a340000803f32e16933000080bfdab3c93f0d40c33e0772b4bdcc3872bf50a93434a1b4a5be23f02a340000803f32e16933000080bfdab3c93ff84fd73e0772b4bdcc3872bf50a93434a1b4a5be23f02a340000803f32e16933000080bf4771c43ff6a0e93e39e55dbde62b2e3ffc65223fb0e7bbbebf6e893e9224803ee9226e3f000080bfe175c63ff457e13e3ae55dbde62b2e3ffb65223fb0e7bbbebf6e893e9124803ee9226e3f000080bf785ec63ff84fd73e0772b4bde62b2e3ffc65223fb0e7bbbebf6e893e9224803ee9226e3f000080bfbc85c43f8074db3e7f25d1bde52b2e3ffc65223fafe7bbbebd6e893e9124803ee9226e3f000080bfee50ca3f8074db3e7f25d1bd61a363bfa917ea3e433084bc261e6bbcb9c8f13b78f77f3f0000803fdab3c93ff84fd73e0772b4bd61a363bfa917ea3e433084bc261e6bbcb9c8f13b78f77f3f0000803f31f6ca3ff457e13e39e55dbdf8aa63bf771fea3e980349b16fc432b1fed5b7300000803f0000803fbc85c43f7f74db3ef5fbcbbbe32b2e3ff865223fc3e7bb3ecc6e89be9e2480bee4226e3f000080bf785ec63ff74fd73ed9cca5bce32b2e3ffa65223fc2e7bb3ecb6e89be9e2480bee4226e3f000080bfe175c63ff457e13e3ae55dbde32b2e3ffa65223fc2e7bb3ecb6e89be9e2480bee4226e3f000080bf4771c43ff6a0e93e39e55dbde32b2e3ffa65223fc2e7bb3ecb6e89be9e2480bee4226e3f000080bf6afacb3ff6a0e93e38e55dbdf8aa63bf771fea3e980349b16fc432b1fed5b7300000803f0000803f31f6ca3ff457e13e39e55dbdf8aa63bf771fea3e980349b16fc432b1fed5b7300000803f0000803fdab3c93ff74fd73ed8cca5bc61a363bfac17ea3e5430843c451e6b3cdbc8f1bb78f77f3f0000803fbc85c43f851bbf3e0afccbbb0e60323f1c2b5db41da0373ff61a1a340000803f25a41e34000080bf785ec63f0d40c33eddcca5bc0e60323f1c2b5db41da0373ff61a1a340000803f25a41e34000080bf785ec63ff74fd73ed9cca5bc0e60323f1c2b5db41da0373ff61a1a340000803f25a41e34000080bfbc85c43f7f74db3ef5fbcbbb0f60323f1b2b5db41ca0373ff61a1a340000803f23a41e34000080bfee50ca3f7f74db3eedfbcbbbcd3872bff13d7633a0b4a53e31fd68330000803faa639fb2000080bfdab3c93ff74fd73ed8cca5bccd3872bff13d7633a0b4a53e31fd68330000803faa639fb2000080bfdab3c93f0d40c33edbcca5bccd3872bff03d7633a1b4a53e30fd68330000803faa639fb2000080bf4771c43f0cefb03e3fe55dbded2b2e3ff26522bfcee7bb3edc6e89bea124803ee1226e3f000080bfe275c63f1138b93e3de55dbdec2b2e3ff26522bfcce7bb3edb6e89bea024803ee2226e3f000080bf785ec63f0d40c33eddcca5bced2b2e3ff26522bfcbe7bb3eda6e89be9f24803ee2226e3f000080bfbc85c43f851bbf3e0afccbbbed2b2e3ff26522bfcee7bb3edc6e89bea124803ee1226e3f000080bfee50ca3f851bbf3e01fccbbb68a363bf8017eabe582f843c8c1c6b3ce1c6f13b78f77f3f0000803fdab3c93f0d40c33edbcca5bc68a363bf8017eabe582f843c8c1c6b3ce1c6f13b78f77f3f0000803f344fbd3fceb0c43e1d77aabd8edffe35ebb35dbfc2ffffbe0000803f1ebadc3550df7e350000803fd749bd3f9a19bc3e3fe55dbdc22f0936ffb35dbf82ffffbe0000803f5f9ded357e2f89350000803ffac4833fceb0c43e2277aabd7bf9deb446c2c636020080bf0000803f2b1e2d2c7ef9deb4000080bf344fbd3fceb0c43e1d77aabdeb6eff3c2d38db3d70677ebf22e07f3f2ed75abbe0f6fd3c000080bf0913b83fb2d6cb3e4977aabdeb6eff3c2c38db3d70677ebf22e07f3f2dd75abbe0f6fd3c000080bff513bd3f7af1d43e0408a4bde96eff3c2c38db3d70677ebf22e07f3f2bd75abbdef6fd3c000080bf344fbd3fceb0c43e1d77aabd4d49c433e2bfc1b7020080bf0000803f638e142c5049c433000080bfd749bd3f6b76de3e3ce55dbd911f77b3c7b35d3f220000bf0000803fcb035633d31ff7b2000080bffac4833f38dfd53e2277aabd7e948633c7b35d3f200000bf0000803f661969b3a0940633000080bf532dbc3f7af1d43e0408a4bd8db1123d956b4e3f492317bff5d57f3feab7ecbc5c52ad3c000080bf4659b93f6d41db3e8b2a85bd8db1123d956b4e3f492317bff5d57f3feab7ecbc5c52ad3c000080bfd749bd3f6b76de3e3ce55dbd8db1123d956b4e3f492317bff5d57f3feab7ecbc5c52ad3c000080bff513bd3f7af1d43e0408a4bd8db1123d956b4e3f4a2317bff5d57f3feab7ecbc5d52ad3c000080bfa0ceb53f38dfd53e1d77aabd552077b3f1b35d3fb1ffffbe0000803f9e0456330920f7b2000080bf344fbd3f37dfd53e78b8cdbce0eb1fb4d5b35d3f0a00003f0000803ff77e0a34eceb9f33000080bfd749bd3f6b76de3e3ce55dbddfeb1fb4d5b35d3f0900003f0000803ff67e0a34eaeb9f33000080bffac4833f6c76de3e47e55dbde0eb1fb4d5b35d3f0a00003f0000803ff77e0a34eceb9f33000080bffac4833f38dfd53e8eb8cdbcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f344fbd3fcdb0c43e7bb8cdbcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f344fbd3f37dfd53e78b8cdbcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f867d7b3f444ebe3e9cb3d6bdf61566bf19b64334fd77e0be64e62f340000803f119bab33000080bf9766783f8c9ec53e0b08a4bdf61566bf19b64334fd77e0be64e62f340000803f119bab33000080bf867d7b3fc341dc3e9bb3d6bdf81566bf4065c23e0a7860be94c64ebe81b3ae3d0bc6793f0000803f9766783f7bf1d43e0a08a4bdf81566bf4065c23e097860be92c64ebe7fb3ae3d0bc6793f0000803f867d7b3f833beb3e47e55dbdf91566bf3a65c23e0778603e91c64e3e79b3aebd0bc6793f0000803f9766783ff09adc3e48e55dbdf91566bf3b65c23e0978603e93c64e3e7bb3aebd0bc6793f0000803f867d7b3fc241dc3ea73566bbfa1566bf8e7f0933ec77e03ecf28f7320000803f0b2071b2000080bf9766783f7af1d43e0675e7bcfa1566bf8e7f0933ec77e03ecf28f7320000803f0b2071b2000080bf9766783f16f5bd3e4be55dbdf71566bf3565c2befd77603e86c64e3e6cb3ae3d0bc6793f0000803f867d7b3f8354af3e4ce55dbdf71566bf3465c2befb77603e84c64e3e6ab3ae3d0cc6793f0000803f857d7b3f444ebe3ed23566bbf71566bf3665c2befd77603e86c64e3e6cb3ae3d0bc6793f0000803f9766783f8c9ec53e0975e7bcf71566bf3565c2befd77603e86c64e3e6cb3ae3d0bc6793f0000803f625a243f8c9ec53e0f08a4bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf9382213f8c9ec53e0f08a4bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf625a243f7bf1d43e0f08a4bde61f77b3d9b35d3f020000bf0000803f26045633ea1ff7b2000080bf9382213f7bf1d43e0f08a4bde61f77b3d9b35d3f020000bf0000803f26045633ea1ff7b2000080bf625a243ff19adc3e50e55dbde0eb1fb4d5b35d3f0a00003f0000803ff77e0a34eceb9f33000080bf9382213ff19adc3e51e55dbde0eb1fb4d5b35d3f0a00003f0000803ff77e0a34eceb9f33000080bf625a243f7bf1d43e1675e7bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f9382213f7bf1d43e1675e7bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f9382213f16f5bd3e54e55dbde01f7733d8b35dbf0500003f0000803f20045633ea1ff7b20000803f625a243f16f5bd3e53e55dbde01f7733d8b35dbf0500003f0000803f20045633ea1ff7b20000803f625a243f8c9ec53e1975e7bce01f7733d8b35dbf0500003f0000803f20045633ea1ff7b20000803f9382213f8c9ec53e1975e7bce01f7733d8b35dbf0500003f0000803f20045633ea1ff7b20000803ffac4833fceb0c43e2277aabde318273f03f627bfeef1c1be31c9883e347e89be31ec6c3f000080bffac4833f9b19bc3e4ae55dbde318273f03f627bfeff1c1be32c9883e357e89be31ec6c3f000080bffac4833f38dfd53e2277aabde918273f6f655f33d3f141bfe8d011b30000803f7f3e29330000803ffac4833fceb0c43e2277aabde918273f6f655f33d3f141bfe8d011b30000803f7f3e29330000803f7a8f803f444ebe3e9cb3d6bdea18273f6d655f33d3f141bfe8d011b30000803f7e3e29330000803ffac4833f6c76de3e47e55dbde118273f02f6273fe7f1c1be2ac9883e2e7e893e33ec6c3f0000803ffac4833f38dfd53e2277aabde118273f02f6273fe7f1c1be2ac9883e2e7e893e33ec6c3f0000803f7a8f803fc341dc3e9bb3d6bddf18273f02f6273fe7f1c1be29c9883e2e7e893e33ec6c3f0000803ffac4833f38dfd53e8eb8cdbcdd18273f02f6273ff0f1c13e2dc988be357e89be31ec6c3f0000803ffac4833f6c76de3e47e55dbddd18273f02f6273ff0f1c13e2dc988be357e89be31ec6c3f0000803f7a8f803f833beb3e46e55dbddd18273f02f6273ff0f1c13e2dc988be357e89be31ec6c3f0000803ffac4833fceb0c43e91b8cdbce218273f44f25eb4d8f1413fb68511340000803f43e72834000080bffac4833f38dfd53e8eb8cdbce218273f44f25eb4d8f1413fb68511340000803f43e72834000080bf7a8f803fc241dc3e9e3566bbe218273f44f25eb4d8f1413fb68511340000803f43e72834000080bf7a8f803f8354af3e4ce55dbde018273f06f627bfe7f1c13e28c988be317e893e32ec6c3f000080bffac4833f9b19bc3e4ae55dbde018273f06f627bfe8f1c13e29c988be327e893e32ec6c3f000080bffac4833fceb0c43e91b8cdbce018273f06f627bfe8f1c13e29c988be327e893e32ec6c3f000080bf7a8f803f444ebe3ec93566bbe018273f07f627bfe8f1c13e29c988be327e893e32ec6c3f000080bf867d7b3f444ebe3e9cb3d6bde0eb1f34cfb35dbf120000bf0000803ff47e0a34f6eb9f330000803f7a8f803f444ebe3e9cb3d6bde0eb1f34cfb35dbf120000bf0000803ff47e0a34f6eb9f330000803f7a8f803f8354af3e4ce55dbde0eb1f34cfb35dbf120000bf0000803ff47e0a34f6eb9f330000803f867d7b3f8354af3e4ce55dbde0eb1f34cfb35dbf120000bf0000803ff47e0a34f6eb9f330000803f867d7b3fc341dc3e9bb3d6bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf7a8f803fc341dc3e9bb3d6bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf7a8f803f444ebe3e9cb3d6bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf867d7b3f444ebe3e9cb3d6bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf867d7b3f833beb3e47e55dbdc91f77b3d3b35d3f0d0000bf0000803f07045633e21ff7b2000080bf7a8f803f833beb3e46e55dbdc91f77b3d3b35d3f0d0000bf0000803f07045633e21ff7b2000080bf7a8f803fc341dc3e9bb3d6bdc91f77b3d3b35d3f0d0000bf0000803f07045633e21ff7b2000080bf867d7b3fc341dc3e9bb3d6bdc91f77b3d3b35d3f0d0000bf0000803f07045633e21ff7b2000080bf867d7b3fc241dc3ea73566bbe0eb1fb4d0b35d3f1100003f0000803ff47e0a34f5eb9f33000080bf7a8f803fc241dc3e9e3566bbe0eb1fb4d0b35d3f1100003f0000803ff47e0a34f5eb9f33000080bf7a8f803f833beb3e46e55dbde0eb1fb4d0b35d3f1100003f0000803ff47e0a34f5eb9f33000080bf867d7b3f833beb3e47e55dbde0eb1fb4d0b35d3f1100003f0000803ff47e0a34f5eb9f33000080bf857d7b3f444ebe3ed23566bbc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f7a8f803f444ebe3ec93566bbc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f7a8f803fc241dc3e9e3566bbc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f867d7b3fc241dc3ea73566bbc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f867d7b3f8354af3e4ce55dbdc61f7733d2b35dbf0e00003f0000803f04045633e11ff7b20000803f7a8f803f8354af3e4ce55dbdc61f7733d2b35dbf0e00003f0000803f04045633e11ff7b20000803f7a8f803f444ebe3ec93566bbc61f7733d2b35dbf0e00003f0000803f04045633e11ff7b20000803f857d7b3f444ebe3ed23566bbc61f7733d2b35dbf0e00003f0000803f04045633e11ff7b20000803f9382213f8c9ec53e0f08a4bd5923543fb831f8be934b8fbe815f773e7fb510befac4753f000080bf9382213f16f5bd3e54e55dbd5723543fb731f8be914b8fbe7c5f773e7cb510befbc4753f000080bf9382213f7bf1d43e0f08a4bd6723543febdd44b1734b0fbf002323310000803ff763dcb00000803f9382213f8c9ec53e0f08a4bd6723543febdd44b1734b0fbf002323310000803ff763dcb00000803f7fb51d3f221fbf3ea80cd1bd6523543fabdd44b1734b0fbfca2223310000803fb063dcb00000803f9382213ff19adc3e51e55dbd4f23543fcf31f83e8c4b8fbe685f773e84b5103efbc4753f000080bf9382213f7bf1d43e0f08a4bd4f23543fcd31f83e8b4b8fbe665f773e82b5103efbc4753f000080bf7fb51d3fe670db3ea70cd1bd4f23543fcd31f83e8b4b8fbe665f773e82b5103efbc4753f000080bf9382213f7bf1d43e1675e7bc4e23543fc931f83e994b8f3e805f77be8fb510befac4753f000080bf9382213ff19adc3e51e55dbd4e23543fc931f83e9a4b8f3e825f77be90b510befac4753f000080bf7fb51d3fca99e93e50e55dbd4e23543fca31f83e994b8f3e805f77be90b510befac4753f000080bf9382213f8c9ec53e1975e7bc5523543fb1c9a2b58b4b0f3f7ee586350000803f673d36350000803f9382213f7bf1d43e1675e7bc5523543fb3c9a2b58c4b0f3f80e586350000803f6a3d36350000803f7fb51d3fe670db3eca8acdbb5423543fb0c9a2b58d4b0f3f7de586350000803f683d36350000803f7fb51d3f3bf6b03e55e55dbd5123543fc031f8beb14b8f3eb15f77bea4b5103ef6c4753f000080bf9382213f16f5bd3e54e55dbd5123543fc031f8beae4b8f3eab5f77bea2b5103ef7c4753f000080bf9382213f8c9ec53e1975e7bc5123543fc231f8beb04b8f3eae5f77bea4b5103ef6c4753f000080bf7fb51d3f211fbf3e328ccdbb5123543fc231f8beb04b8f3eae5f77bea4b5103ef6c4753f000080bf5372173f221fbf3ea90cd1bde0eb1f34cfb35dbf140000bf0000803ff47e0a34f9eb9f330000803f7fb51d3f221fbf3ea80cd1bde0eb1f34cfb35dbf140000bf0000803ff47e0a34f9eb9f330000803f7fb51d3f3bf6b03e55e55dbde0eb1f34cfb35dbf140000bf0000803ff47e0a34f9eb9f330000803f5372173f3bf6b03e56e55dbde0eb1f34cfb35dbf140000bf0000803ff47e0a34f9eb9f330000803f5372173fe670db3ea70cd1bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf7fb51d3fe670db3ea70cd1bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf7fb51d3f221fbf3ea80cd1bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf5372173f221fbf3ea90cd1bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf5372173fca99e93e51e55dbdfb1f77b3deb35d3ff5ffffbe0000803f3d045633f01ff7b2000080bf7fb51d3fca99e93e50e55dbdfb1f77b3deb35d3ff5ffffbe0000803f3d045633f01ff7b2000080bf7fb51d3fe670db3ea70cd1bdfb1f77b3deb35d3ff5ffffbe0000803f3d045633f01ff7b2000080bf5372173fe670db3ea70cd1bdfb1f77b3deb35d3ff5ffffbe0000803f3d045633f01ff7b2000080bf5372173fe670db3ecf8acdbbdfeb1fb4d9b35d3f0300003f0000803ff97e0a34e3eb9f33000080bf7fb51d3fe670db3eca8acdbbdfeb1fb4d9b35d3f0300003f0000803ff97e0a34e3eb9f33000080bf7fb51d3fca99e93e50e55dbddfeb1fb4d9b35d3f0300003f0000803ff97e0a34e3eb9f33000080bf5372173fca99e93e51e55dbddfeb1fb4d9b35d3f0300003f0000803ff97e0a34e3eb9f33000080bf5372173f211fbf3e378ccdbb9847c4b3ce8647b60200803f0000803f03fb98aa9b47c4330000803f7fb51d3f211fbf3e328ccdbb9847c4b3ce8647b60200803f0000803f03fb98aa9b47c4330000803f7fb51d3fe670db3eca8acdbb9847c4b3ce8647b60200803f0000803f03fb98aa9b47c4330000803f5372173fe670db3ecf8acdbb9847c4b3ce8647b60200803f0000803f03fb98aa9b47c4330000803f5372173f3bf6b03e56e55dbd831f7733c4b35dbf2700003f0000803fbc035633ce1ff7b20000803f7fb51d3f3bf6b03e55e55dbd831f7733c4b35dbf2700003f0000803fbc035633ce1ff7b20000803f7fb51d3f211fbf3e328ccdbb831f7733c4b35dbf2700003f0000803fbc035633ce1ff7b20000803f5372173f211fbf3e378ccdbb831f7733c4b35dbf2700003f0000803fbc035633ce1ff7b20000803f9766783f8c9ec53e0b08a4bddfeb1f34d8b35dbf040000bf0000803ff87e0a34e4eb9f330000803f9766783f16f5bd3e4be55dbddfeb1f34d8b35dbf040000bf0000803ff87e0a34e4eb9f330000803f9766783f7bf1d43e0a08a4bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf9766783f8c9ec53e0b08a4bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf150a763f8c9ec53e0b08a4bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf9766783ff09adc3e48e55dbdec1f77b3dbb35d3f010000bf0000803f2d045633ee1ff7b2000080bf9766783f7bf1d43e0a08a4bdec1f77b3dbb35d3f010000bf0000803f2d045633ee1ff7b2000080bf150a763f7bf1d43e0b08a4bdec1f77b3dbb35d3f010000bf0000803f2d045633ee1ff7b2000080bf9766783f7af1d43e0675e7bcdfeb1fb4d5b35d3f0900003f0000803ff67e0a34eaeb9f33000080bf9766783ff09adc3e48e55dbddfeb1fb4d5b35d3f0900003f0000803ff67e0a34eaeb9f33000080bf150a763ff09adc3e49e55dbddfeb1fb4d5b35d3f0900003f0000803ff67e0a34eaeb9f33000080bf9766783f8c9ec53e0975e7bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f9766783f7af1d43e0675e7bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f150a763f7af1d43e0675e7bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f150a763f16f5bd3e4be55dbde01f7733d8b35dbf0500003f0000803f20045633ea1ff7b20000803f9766783f16f5bd3e4be55dbde01f7733d8b35dbf0500003f0000803f20045633ea1ff7b20000803f9766783f8c9ec53e0975e7bce01f7733d8b35dbf0500003f0000803f20045633ea1ff7b20000803f150a763f8c9ec53e0975e7bce01f7733d8b35dbf0500003f0000803f20045633ea1ff7b20000803fe00a753f7c13c33ebca6b5bdc747c43302003834020080bf0000803f99138da8ca47c433000080bfe5b9653f7c13c33ebda6b5bdc747c43302003834020080bf0000803f99138da8ca47c433000080bfe00a753f887cd73ebba6b5bd9a1f77b3c9b35d3f1f0000bf0000803fd5035633d61ff7b2000080bfe5b9653f887cd73ebca6b5bd9a1f77b3c9b35d3f1f0000bf0000803fd5035633d61ff7b2000080bfe00a753f11b1e13e48e55dbde2eb1fb4c3b35d3f2800003f0000803fee7e0a3414ec9f33000080bfe5b9653f11b1e13e4ae55dbde2eb1fb4c3b35d3f2800003f0000803fee7e0a3414ec9f33000080bfe00a753f887cd73e42faa0bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803fe5b9653f887cd73e45faa0bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803fe5b9653ff5deb83e4de55dbdd31f7733d5b35dbf0900003f0000803f12045633e41ff7b20000803fe00a753ff5deb83e4ce55dbdd71f7733d6b35dbf0800003f0000803f16045633e61ff7b20000803fe00a753f7b13c33e46faa0bcd71f7733d6b35dbf0800003f0000803f16045633e61ff7b20000803fe6b9653f7b13c33e49faa0bcd51f7733d6b35dbf0900003f0000803f15045633e61ff7b20000803fca62643f8c9ec53e0c08a4bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf98ba603f8c9ec53e0c08a4bdc747c43302003834020080bf0000803f99138da8ca47c433000080bfca62643f7bf1d43e0b08a4bde61f77b3d9b35d3f020000bf0000803f26045633ea1ff7b2000080bf98ba603f7bf1d43e0c08a4bde61f77b3d9b35d3f020000bf0000803f26045633ea1ff7b2000080bfca62643ff19adc3e4ae55dbde0eb1fb4d5b35d3f0b00003f0000803ff77e0a34eeeb9f33000080bf98ba603ff19adc3e4be55dbde0eb1fb4d5b35d3f0b00003f0000803ff77e0a34eeeb9f33000080bfca62643f7af1d43e0a75e7bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f98ba603f7af1d43e0a75e7bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f98ba603f16f5bd3e4de55dbdde1f7733d8b35dbf0600003f0000803f1e045633ea1ff7b20000803fca62643f16f5bd3e4de55dbdde1f7733d8b35dbf0600003f0000803f1e045633ea1ff7b20000803fc962643f8c9ec53e0c75e7bcde1f7733d8b35dbf0600003f0000803f1e045633ea1ff7b20000803f98ba603f8c9ec53e0d75e7bcde1f7733d8b35dbf0600003f0000803f1e045633ea1ff7b20000803fa2b5473f7c13c33ed3a6b5bd4ba4afb5646f0b36020080bf0000803f43553f2c4ea4afb5000080bf3ed0393f7c13c33ebfa6b5bd4ba4afb5646f0b36020080bf0000803f43553f2c4ea4afb5000080bfa2b5473f887cd73ebea6b5bd4fcd50b5c0b35d3f2e0000bf0000803fd9d334359acdd0b4000080bf3ed0393f887cd73ebea6b5bd4fcd50b5c0b35d3f2e0000bf0000803fd9d334359acdd0b4000080bfa2b5473f14b1e13e4de55dbde5eb1fb4b4b35d3f4300003f0000803fe77e0a3439ec9f33000080bf3ed0393f11b1e13e4ee55dbde5eb1fb4b4b35d3f4300003f0000803fe77e0a3439ec9f33000080bfa2b5473f887cd73e9bfaa0bc0cf5ab3566dae3350200803f0000803ffd0c19ac0ff5abb50000803f3dd0393f887cd73e4efaa0bc0cf5ab3566dae3350200803f0000803ffd0c19ac0ff5abb50000803f3dd0393ff6deb83e52e55dbdd51f7733d6b35dbf0900003f0000803f15045633e61ff7b20000803fa2b5473ff6deb83e50e55dbdd51f7733d6b35dbf0900003f0000803f15045633e61ff7b20000803fa2b5473f7c13c33e4ffaa0bcd51f7733d6b35dbf0900003f0000803f15045633e61ff7b20000803f3dd0393f7c13c33e51faa0bcd51f7733d6b35dbf0900003f0000803f15045633e61ff7b20000803f258a383f8c9ec53e0e08a4bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf7910353f8c9ec53e0e08a4bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf258a383f7bf1d43e0e08a4bdec1f77b3dbb35d3f010000bf0000803f2d045633ee1ff7b2000080bf7910353f7bf1d43e0e08a4bdec1f77b3dbb35d3f010000bf0000803f2d045633ee1ff7b2000080bf258a383ff19adc3e4fe55dbddfeb1fb4d5b35d3f0900003f0000803ff67e0a34eaeb9f33000080bf7910353ff19adc3e4fe55dbddfeb1fb4d5b35d3f0900003f0000803ff67e0a34eaeb9f33000080bf258a383f7bf1d43e1275e7bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f7910353f7bf1d43e1375e7bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f7910353f16f5bd3e52e55dbde01f7733d8b35dbf0500003f0000803f20045633ea1ff7b20000803f258a383f16f5bd3e51e55dbde01f7733d8b35dbf0500003f0000803f20045633ea1ff7b20000803f258a383f8c9ec53e1575e7bce01f7733d8b35dbf0500003f0000803f20045633ea1ff7b20000803f7910353f8c9ec53e1575e7bce01f7733d8b35dbf0500003f0000803f20045633ea1ff7b20000803f60ca333f7c13c33ebfa6b5bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf9759253f7c13c33ec0a6b5bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf60ca333f897cd73ebfa6b5bd941f77b3c7b35d3f200000bf0000803fce035633d21ff7b2000080bf9759253f897cd73ebfa6b5bd941f77b3c7b35d3f200000bf0000803fce035633d21ff7b2000080bf60ca333f11b1e13e4fe55dbde2eb1fb4c3b35d3f2700003f0000803fee7e0a3413ec9f33000080bf9759253f12b1e13e50e55dbde2eb1fb4c3b35d3f2700003f0000803fee7e0a3413ec9f33000080bf60ca333f887cd73e4ffaa0bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f9659253f887cd73e52faa0bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f9659253ff6deb83e54e55dbdd31f7733d5b35dbf0900003f0000803f12045633e41ff7b20000803f5fca333ff6deb83e52e55dbdd31f7733d5b35dbf0900003f0000803f12045633e41ff7b20000803f5fca333f7c13c33e53faa0bcd31f7733d5b35dbf0900003f0000803f12045633e41ff7b20000803f9659253f7c13c33e55faa0bcd31f7733d5b35dbf0900003f0000803f12045633e41ff7b20000803fca62643f8c9ec53e0c08a4bd0fb15abfc87fe6be361485be42766bbec62cf8bd8a33773f0000803fe5b9653f7c13c33ebda6b5bd0fb15abfc87fe6be361485be42766bbec62cf8bd8a33773f0000803fe5b9653ff5deb83e4de55dbd11b15abfca7fe6be351485be42766bbec62cf8bd8a33773f0000803fca62643f16f5bd3e4de55dbd11b15abfc87fe6be361485be44766bbec62cf8bd8a33773f0000803f150a763f16f5bd3e4be55dbdf738693f9bd6b6be9d1f53bedf8f443e05199abdf77f7a3f000080bfe00a753ff5deb83e4ce55dbdf738693f9bd6b6be9d1f53bedf8f443e05199abdf77f7a3f000080bfe00a753f7c13c33ebca6b5bdf738693f9bd6b6be9d1f53bedf8f443e05199abdf77f7a3f000080bf150a763f8c9ec53e0b08a4bdf738693f9bd6b6be9d1f53bedf8f443e05199abdf77f7a3f000080bfca62643f7bf1d43e0b08a4bd09b15abf0fff4c343c1405bff61e2f340000803f6e21d533000080bfe5b9653f887cd73ebca6b5bd09b15abf0fff4c343b1405bff61e2f340000803f6c21d533000080bfe5b9653f7c13c33ebda6b5bd09b15abf0fff4c343c1405bff61e2f340000803f6e21d533000080bfca62643f8c9ec53e0c08a4bd07b15abf0fff4c343d1405bff51e2f340000803f6f21d533000080bf150a763f8c9ec53e0b08a4bdf138693f51f422b3b11fd3be9d7414330000803f8b6386b20000803fe00a753f7c13c33ebca6b5bdf138693f51f422b3b11fd3be9d7414330000803f8b6386b20000803fe00a753f887cd73ebba6b5bdf138693f51f422b3b11fd3be9d7414330000803f8b6386b20000803f150a763f7bf1d43e0b08a4bdf138693f51f422b3b11fd3be9d7414330000803f8b6386b20000803fca62643ff19adc3e4ae55dbd03b15abff87fe63e5c1485be7d766bbe462df83d8533773f0000803fe5b9653f11b1e13e4ae55dbd01b15abff87fe63e5c1485be7a766bbe462df83d8533773f0000803fe5b9653f887cd73ebca6b5bd01b15abff87fe63e5d1485be7d766bbe492df83d8533773f0000803fca62643f7bf1d43e0b08a4bd03b15abff87fe63e5c1485be7d766bbe462df83d8533773f0000803f150a763f7bf1d43e0b08a4bdea38693fb7d6b63ee01f53be1590443e50199a3df37f7a3f000080bfe00a753f887cd73ebba6b5bdeb38693fb7d6b63ee01f53be1690443e50199a3df37f7a3f000080bfe00a753f11b1e13e48e55dbdea38693fb9d6b63ee01f53be1590443e51199a3df37f7a3f000080bf150a763ff09adc3e49e55dbdea38693fb7d6b63ee01f53be1590443e50199a3df37f7a3f000080bfca62643f7af1d43e0a75e7bc02b15abff57fe63e6114853e86766b3e4e2df8bd8533773f0000803fe5b9653f887cd73e45faa0bc02b15abff37fe63e6214853e88766b3e4e2df8bd8533773f0000803fe5b9653f11b1e13e4ae55dbd02b15abff37fe63e6114853e86766b3e4c2df8bd8533773f0000803fca62643ff19adc3e4ae55dbd02b15abff37fe63e6214853e88766b3e4e2df8bd8533773f0000803f150a763ff09adc3e49e55dbdea38693fb5d6b63efc1f533e319044be64199abdf27f7a3f000080bfe00a753f11b1e13e48e55dbdea38693fb7d6b63efc1f533e309044be65199abdf17f7a3f000080bfe00a753f887cd73e42faa0bcea38693fb7d6b63efe1f533e329044be66199abdf17f7a3f000080bf150a763f7af1d43e0675e7bcea38693fb4d6b63efa1f533e309044be62199abdf27f7a3f000080bfc962643f8c9ec53e0c75e7bcf6b05abf941d5b325a14053fa72e3b320000803f92cfe3b1000080bfe6b9653f7b13c33e49faa0bcf6b05abf891d5b325b14053f9e2e3b320000803f89cfe3b1000080bfe5b9653f887cd73e45faa0bcf6b05abf941d5b325a14053fa72e3b320000803f92cfe3b1000080bfca62643f7af1d43e0a75e7bcf6b05abf941d5b325a14053fa72e3b320000803f92cfe3b1000080bf150a763f7af1d43e0675e7bcf038693fdd7b40b4b61fd33e8c5b2f340000803fefbd9e330000803fe00a753f887cd73e42faa0bcf038693fdd7b40b4b61fd33e8c5b2f340000803fefbd9e330000803fe00a753f7b13c33e46faa0bcf038693fdd7b40b4b61fd33e8c5b2f340000803fefbd9e330000803f150a763f8c9ec53e0975e7bcf038693fdd7b40b4b61fd33e8c5b2f340000803fefbd9e330000803fca62643f16f5bd3e4de55dbdfcb05abffa7fe6be6614853e89766b3e5c2df83d8433773f0000803fe5b9653ff5deb83e4de55dbdfcb05abffc7fe6be6714853e8a766b3e602df83d8433773f0000803fe6b9653f7b13c33e49faa0bcfcb05abffa7fe6be6614853e89766b3e5c2df83d8433773f0000803fc962643f8c9ec53e0c75e7bcfcb05abffa7fe6be6514853e87766b3e5b2df83d8433773f0000803f150a763f8c9ec53e0975e7bcf638693f9dd6b6beab1f533eeb8f44be12199a3df67f7a3f000080bfe00a753f7b13c33e46faa0bcf638693f9dd6b6beaa1f533eea8f44be10199a3df67f7a3f000080bfe00a753ff5deb83e4ce55dbdf638693f9ed6b6beab1f533eeb8f44be12199a3df67f7a3f000080bf150a763f16f5bd3e4be55dbdf638693f9ed6b6beab1f533eeb8f44be12199a3df67f7a3f000080bf258a383f8c9ec53e0e08a4bd3d9b5dbf93fdddbe9c2a80be0d3165bec196e5bd74d9773f0000803f3ed0393f7c13c33ebfa6b5bd3d9b5dbf91fdddbe9c2a80be0d3165bebf96e5bd74d9773f0000803f3dd0393ff6deb83e52e55dbd3d9b5dbf91fdddbe9c2a80be0d3165bebf96e5bd74d9773f0000803f258a383f16f5bd3e51e55dbd3d9b5dbf91fdddbe9c2a80be0d3165bebf96e5bd74d9773f0000803f98ba603f16f5bd3e4de55dbd09b15a3fe87fe6be3e1485be4a766b3ef92cf8bd8933773f000080bf98ba603f8c9ec53e0c08a4bd09b15a3fe87fe6be3e1485be4a766b3ef92cf8bd8933773f000080bf258a383f7bf1d43e0e08a4bd369b5dbf41ec4a34a52a00bffca82f340000803fdc2fcb33000080bf3ed0393f887cd73ebea6b5bd369b5dbf41ec4a34a52a00bffca82f340000803fdc2fcb33000080bf3ed0393f7c13c33ebfa6b5bd369b5dbf41ec4a34a52a00bffca82f340000803fdc2fcb33000080bf258a383f8c9ec53e0e08a4bd369b5dbf41ec4a34a52a00bffca82f340000803fdc2fcb33000080bf98ba603f8c9ec53e0c08a4bd04b15a3fd31e5bb2481405bfc32f3b320000803fbfd0e3b10000803f7c635f3f7c13c33ebda6b5bd02b15a3fc31e5bb2481405bfb42f3b320000803fafd0e3b10000803f98ba603f7bf1d43e0c08a4bd02b15a3fc31e5bb2481405bfb42f3b320000803fafd0e3b10000803f258a383ff19adc3e4fe55dbd309b5dbfc0fddd3ec32a80be4a3165be3897e53d6fd9773f0000803f3ed0393f11b1e13e4ee55dbd309b5dbfc0fddd3ec22a80be473165be3797e53d6fd9773f0000803f3ed0393f887cd73ebea6b5bd309b5dbfc0fddd3ec32a80be4a3165be3897e53d6fd9773f0000803f258a383f7bf1d43e0e08a4bd309b5dbfc0fddd3ec32a80be4a3165be3897e53d6fd9773f0000803f98ba603f7bf1d43e0c08a4bdf9b05a3f0a80e63e651485be84766b3e6c2df83d8433773f000080bf7c635f3f887cd73ebca6b5bdf7b05a3f0980e63e641485be7f766b3e692df83d8533773f000080bf98ba603ff19adc3e4be55dbdf9b05a3f0a80e63e661485be86766b3e6e2df83d8433773f000080bf258a383f7bf1d43e1275e7bc319b5dbfbdfddd3ec82a803e5431653e3f97e5bd6ed9773f0000803f3dd0393f887cd73e4efaa0bc319b5dbfbdfddd3ec72a803e5231653e3d97e5bd6ed9773f0000803f3ed0393f11b1e13e4ee55dbd319b5dbfbdfddd3ec72a803e5231653e3d97e5bd6ed9773f0000803f258a383ff19adc3e4fe55dbd319b5dbfbdfddd3ec82a803e5431653e3f97e5bd6ed9773f0000803f98ba603ff19adc3e4be55dbdf6b05a3f0680e63e7414853e9c766bbe862df8bd8333773f000080bf7c635f3f11b1e13e4ae55dbdf6b05a3f0580e63e7414853e9c766bbe852df8bd8333773f000080bf98ba603f7af1d43e0a75e7bcf6b05a3f0680e63e7414853e9c766bbe862df8bd8333773f000080bf258a383f8c9ec53e1575e7bc379b5dbfaf779532a32a003ff26281320000803f79a915b2000080bf3dd0393f7c13c33e51faa0bc379b5dbfaf779532a32a003ff26281320000803f79a915b2000080bf3dd0393f887cd73e4efaa0bc379b5dbfaf779532a32a003ff26281320000803f79a915b2000080bf258a383f7bf1d43e1275e7bc379b5dbfaf779532a32a003ff26281320000803f79a915b2000080bf98ba603f7af1d43e0a75e7bc00b15a3f15ff4cb44a14053ff41e2f340000803f8a21d5330000803f7c635f3f887cd73e47faa0bc02b15a3f16ff4cb44a14053ff71e2f340000803f8b21d5330000803f98ba603f8c9ec53e0d75e7bc02b15a3f16ff4cb44a14053ff71e2f340000803f8b21d5330000803f258a383f16f5bd3e51e55dbd3c9b5dbf97fdddbe9a2a803e0831653ec096e53d74d9773f0000803f3dd0393ff6deb83e52e55dbd3c9b5dbf95fdddbe9a2a803e0831653ebe96e53d74d9773f0000803f3dd0393f7c13c33e51faa0bc3c9b5dbf95fdddbe9a2a803e0831653ebe96e53d74d9773f0000803f258a383f8c9ec53e1575e7bc3c9b5dbf97fdddbe9a2a803e0831653ec096e53d74d9773f0000803f98ba603f8c9ec53e0d75e7bc08b15a3fec7fe6be4514853e56766bbe0b2df83d8833773f000080bf7c635f3f7c13c33e4afaa0bc07b15a3fed7fe6be4414853e53766bbe0b2df83d8833773f000080bf7c635f3ff6deb83e4ee55dbd07b15a3fed7fe6be4414853e53766bbe0b2df83d8833773f000080bf98ba603f16f5bd3e4de55dbd07b15a3fed7fe6be4514853e55766bbe0c2df83d8833773f000080bf625a243f8c9ec53e0f08a4bd063969bf57d6b6be671f53beb78f44bea2189abdfa7f7a3f0000803f9759253f7c13c33ec0a6b5bd063969bf57d6b6be671f53beb78f44bea2189abdfa7f7a3f0000803f9659253ff6deb83e54e55dbd063969bf57d6b6be671f53beb78f44bea2189abdfa7f7a3f0000803f625a243f16f5bd3e53e55dbd063969bf57d6b6be671f53beb78f44bea2189abdfa7f7a3f0000803f7910353f16f5bd3e52e55dbd2c9b5d3fdefdddbead2a80be1b31653e2e97e5bd72d9773f000080bf5fca333ff6deb83e52e55dbd2c9b5d3fdefdddbead2a80be1b31653e2e97e5bd72d9773f000080bf60ca333f7c13c33ebfa6b5bd2b9b5d3fdffdddbeac2a80be1931653e2e97e5bd72d9773f000080bf7910353f8c9ec53e0e08a4bd2c9b5d3fdefdddbead2a80be1b31653e2e97e5bd72d9773f000080bf625a243f7bf1d43e0f08a4bd013969bfcd7b4034721fd3be8a5b2f340000803fafbd9e33000080bf9759253f897cd73ebfa6b5bdff3869bfcc7b4034721fd3be875b2f340000803faebd9e33000080bf9759253f7c13c33ec0a6b5bd013969bfcd7b4034721fd3be8a5b2f340000803fafbd9e33000080bf625a243f8c9ec53e0f08a4bd013969bfcd7b4034721fd3be8a5b2f340000803fafbd9e33000080bf7910353f8c9ec53e0e08a4bd339b5d3f7c7795b2a92a00bfc36281320000803f4da915b20000803f60ca333f7c13c33ebfa6b5bd339b5d3f777795b2aa2a00bfbf6281320000803f49a915b20000803f60ca333f897cd73ebfa6b5bd339b5d3f7c7795b2a92a00bfc36281320000803f4da915b20000803f7910353f7bf1d43e0e08a4bd339b5d3f7c7795b2a92a00bfc36281320000803f4da915b20000803f625a243ff19adc3e50e55dbdfb3869bf82d6b63ea91f53beee8f44bef9189a3df67f7a3f0000803f9759253f12b1e13e50e55dbdfb3869bf82d6b63ea71f53beeb8f44bef7189a3df67f7a3f0000803f9759253f897cd73ebfa6b5bdfb3869bf82d6b63ea71f53beeb8f44bef7189a3df67f7a3f0000803f625a243f7bf1d43e0f08a4bdfb3869bf82d6b63ea71f53beeb8f44bef7189a3df67f7a3f0000803f7910353f7bf1d43e0e08a4bd2a9b5d3fc9fddd3ec82a80be4d31653e4c97e53d6ed9773f000080bf60ca333f897cd73ebfa6b5bd2a9b5d3fc7fddd3ec62a80be4931653e4697e53d6ed9773f000080bf60ca333f11b1e13e4fe55dbd2a9b5d3fc7fddd3ec52a80be4731653e4597e53d6fd9773f000080bf7910353ff19adc3e4fe55dbd2a9b5d3fc9fddd3ec82a80be4d31653e4c97e53d6ed9773f000080bf625a243f7bf1d43e1675e7bcfc3869bf7dd6b63eaa1f533eef8f443ef5189abdf67f7a3f0000803f9659253f887cd73e52faa0bcfc3869bf7dd6b63eac1f533ef18f443ef7189abdf67f7a3f0000803f9759253f12b1e13e50e55dbdfc3869bf7dd6b63ea91f533eef8f443ef5189abdf67f7a3f0000803f625a243ff19adc3e50e55dbdfc3869bf7dd6b63eaa1f533eef8f443ef5189abdf67f7a3f0000803f7910353ff19adc3e4fe55dbd289b5d3fc5fddd3ed52a803e643165be6197e5bd6dd9773f000080bf60ca333f11b1e13e4fe55dbd289b5d3fc5fddd3ed52a803e643165be6197e5bd6dd9773f000080bf60ca333f887cd73e4ffaa0bc289b5d3fc5fddd3ed52a803e643165be6197e5bd6dd9773f000080bf7910353f7bf1d43e1375e7bc299b5d3fc2fddd3ed52a803e653165be5e97e5bd6dd9773f000080bf625a243f8c9ec53e1975e7bc023969bfd5f422336d1fd33e207514330000803fcd6386b2000080bf9659253f7c13c33e55faa0bc023969bfd5f422336d1fd33e207514330000803fcd6386b2000080bf9659253f887cd73e52faa0bc003969bfd1f422336d1fd33e1b7514330000803fc96386b2000080bf625a243f7bf1d43e1675e7bc023969bfd5f422336d1fd33e207514330000803fcd6386b2000080bf7910353f7bf1d43e1375e7bc219b5d3f4fec4ab4c72a003ff7a82f340000803f2030cb330000803f60ca333f887cd73e4ffaa0bc219b5d3f4fec4ab4c72a003ff7a82f340000803f2030cb330000803f5fca333f7c13c33e53faa0bc219b5d3f4eec4ab4c62a003ff7a82f340000803f1d30cb330000803f7910353f8c9ec53e1575e7bc219b5d3f4fec4ab4c72a003ff7a82f340000803f2030cb330000803f625a243f16f5bd3e53e55dbd043969bf5cd6b6be5c1f533eab8f443e9e189a3dfb7f7a3f0000803f9659253ff6deb83e54e55dbd043969bf5bd6b6be5c1f533eab8f443e9e189a3dfb7f7a3f0000803f9659253f7c13c33e55faa0bc043969bf5bd6b6be5c1f533eab8f443e9e189a3dfb7f7a3f0000803f625a243f8c9ec53e1975e7bc043969bf5bd6b6be5c1f533eab8f443e9e189a3dfb7f7a3f0000803f7910353f8c9ec53e1575e7bc1b9b5d3f05feddbeda2a803e603165bead97e53d6dd9773f000080bf5fca333f7c13c33e53faa0bc1c9b5d3f04feddbeda2a803e613165beac97e53d6dd9773f000080bf5fca333ff6deb83e52e55dbd1b9b5d3f05feddbedb2a803e623165beaf97e53d6dd9773f000080bf7910353f16f5bd3e52e55dbd1b9b5d3f05feddbeda2a803e603165bead97e53d6dd9773f000080bf0995d23f851bbf3e7f25d1bdddeb1f34e4b35dbfdeffffbe0000803ffe7e0a34c8eb9f330000803f0995d23f8074db3e7e25d1bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf0995d23f851bbf3e7f25d1bdc747c43302003834020080bf0000803f99138da8ca47c433000080bf7d47db3ff5a0e93e35e55dbd5b2077b3f3b35d3faeffffbe0000803fa50456330c20f7b2000080bffc11d83f8074db3e7d25d1bd5b2077b3f3b35d3faeffffbe0000803fa50456330c20f7b2000080bf0995d23f8074db3e7e25d1bd5b2077b3f3b35d3faeffffbe0000803fa50456330c20f7b2000080bf0995d23f7f74db3ee0fbcbbbdbeb1fb4edb35d3fbfffff3e0000803f027f0a34b2eb9f33000080bffc11d83f7f74db3ed7fbcbbbdbeb1fb4edb35d3fbfffff3e0000803f027f0a34b2eb9f33000080bf7d47db3ff5a0e93e35e55dbddbeb1fb4edb35d3fbfffff3e0000803f027f0a34b2eb9f33000080bfb120ce3ff6a0e93e38e55dbddbeb1fb4edb35d3fbfffff3e0000803f027f0a34b2eb9f33000080bf0995d23f851bbf3ef4fbcbbbc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f0995d23f7f74db3ee0fbcbbbc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f7d47db3f0cefb03e3ae55dbd1d207733e5b35dbfdbffff3e0000803f62045633f91ff7b20000803ffb11d83f851bbf3eecfbcbbb20207733e5b35dbfd7ffff3e0000803f64045633f81ff7b20000803f0995d23f851bbf3ef4fbcbbb1d207733e5b35dbfdbffff3e0000803f62045633f91ff7b20000803fb120ce3f0cefb03e3de55dbd20207733e5b35dbfd7ffff3e0000803f64045633f81ff7b20000803fee50ca3f851bbf3e8025d1bd68b077bfadc531bc0748813ed2022cbc25fc7f3ff68f333b000080bf99dac93f8502bb3e3d89edbddcb077bf2a3d2cbc7246813e5da826bc61fc7f3fe5f62d3b000080bf760bcc3f09bda83e3ee55dbd779e77bfade8afbc5778813e6d30aabce3f07f3f61f8b13b000080bf6afacb3f0cefb03e3de55dbd779e77bfaee8afbc5778813e6e30aabce3f07f3f62f8b13b000080bfb120ce3f0cefb03e3de55dbde4ac7b3f32b0ffbb5b413bbe6660fb3b02fe7f3f7108bbba0000803fb120ce3f09bda83e3de55dbde4ac7b3f30b0ffbb59413bbe6460fb3b02fe7f3f6e08bbba0000803f10adcc3f8502bb3e3d89edbd7e5c7b3faa727cbb030342be1be0773b84ff7f3f3a523fba0000803fcd07cd3f851bbf3e8025d1bde15d7b3f1f6780bbefe541bee3287c3b80ff7f3f888242ba0000803fee50ca3f8074db3e7f25d1bd68b077bf3fc6313c0948813e5f032c3c25fc7f3f8d9033bb000080bf99dac93f808ddf3e3c89edbddcb077bfb93d2c3c7146813ee7a8263c61fc7f3f74f72dbb000080bf10adcc3f808ddf3e3b89edbd7e5c7b3fc26f7c3b020342be41dd77bb84ff7f3f05503f3a0000803fcd07cd3f8074db3e7e25d1bde15d7b3fae65803bede541be0f267cbb80ff7f3f5780423a0000803f6afacb3ff6a0e93e38e55dbd779e77bfe3e8af3c5878813ea230aa3ce3f07f3f99f8b1bb000080bf760bcc3ffbd2f13e37e55dbd779e77bfe2e8af3c5778813ea130aa3ce3f07f3f97f8b1bb000080bfb120ce3ffbd2f13e37e55dbde4ac7b3fa1aeff3b5a413bbedb5efbbb02fe7f3f4a07bb3a0000803fb120ce3ff6a0e93e38e55dbde4ac7b3f9faeff3b5a413bbed95efbbb02fe7f3f4807bb3a0000803fee50ca3f7f74db3eedfbcbbb66b077bf72c6313c144881be8f032c3c25fc7f3fcf90333b000080bf98dac93f7f8ddf3eea3ffa3bdab077bff23d2c3c7a4681be1da9263c61fc7f3fbaf72d3b000080bf760bcc3ffbd2f13e37e55dbd759e77bfe7e8af3c657881bea430aa3ce3f07f3faff8b13b000080bf6afacb3ff6a0e93e38e55dbd759e77bfeae8af3c677881bea730aa3ce3f07f3fb5f8b13b000080bfb120ce3ff6a0e93e38e55dbde4ac7b3f31aeff3b6d413b3e6d5efbbb02fe7f3f0b07bbba0000803fb120ce3ffbd2f13e37e55dbde4ac7b3f33aeff3b6d413b3e6f5efbbb02fe7f3f0c07bbba0000803f10adcc3f7f8ddf3eee3ffa3b7e5c7b3fca6e7c3b1603423e4ddc77bb84ff7f3f5d4f3fba0000803fcc07cd3f7f74db3ee8fbcbbbe15d7b3f3165803b00e6413e19257cbb80ff7f3fad7f42ba0000803fee50ca3f851bbf3e01fccbbb68b077bf26c531bc134881be4f022cbc25fc7f3f7f8f33bb000080bf98dac93f8502bb3ecf3ffa3bdcb077bfac3c2cbc7b4681bee3a726bc61fc7f3f72f62dbb000080bf10adcc3f8502bb3ed43ffa3b7e5c7b3fe2737cbb1703423e4de1773b84ff7f3f3a533f3a0000803fcc07cd3f851bbf3efdfbcbbbe15d7b3fb86780bb03e6413e102a7c3b80ff7f3f8483423a0000803f6afacb3f0cefb03e3de55dbd779e77bf5ae8afbc647881be1d30aabce3f07f3f1ff8b1bb000080bf760bcc3f09bda83e3ee55dbd779e77bf58e8afbc627881be1b30aabce3f07f3f1af8b1bb000080bfb120ce3f09bda83e3de55dbde4ac7b3fd7b0ffbb6d413b3e0861fb3b02fe7f3ffc08bb3a0000803fb120ce3f0cefb03e3de55dbde4ac7b3fd7b0ffbb6f413b3e0861fb3b02fe7f3ffe08bb3a0000803fcd07cd3f851bbf3e8025d1bdddeb1f34e4b35dbfe0ffffbe0000803ffe7e0a34c9eb9f330000803fcc07cd3f851bbf3efdfbcbbb20207733e5b35dbfd7ffff3e0000803f64045633f81ff7b20000803f52b1db3f851bbf3ee6fbcbbb1c207733e5b35dbfdcffff3e0000803f61045633f91ff7b20000803f52b1db3f7f74db3ed2fbcbbbdbeb1fb4edb35d3fbdffff3e0000803f027f0a34b1eb9f33000080bfcc07cd3f7f74db3ee8fbcbbbdbeb1fb4eeb35d3fbdffff3e0000803f037f0a34b1eb9f33000080bfcd07cd3f8074db3e7e25d1bd5b2077b3f3b35d3faeffffbe0000803fa50456330c20f7b2000080bf52b1db3f8074db3e7d25d1bd572077b3f1b35d3faeffffbe0000803f9f0456330820f7b2000080bf35a5d83f7f74db3efb81b83d0ff72c3f5fab4433f3ba3cbff1e004b30000803f79fd10330000803fbc2ae03fff3dda3e6e66133e0ff72c3f5fab4433f3ba3cbff1e004b30000803f79fd10330000803fbc2ae03f0352c03e6e66133e0ff72c3f5fab4433f3ba3cbff1e004b30000803f79fd10330000803f35a5d83f841bbf3efa81b83d0ff72c3f5fab4433f3ba3cbff1e004b30000803f79fd10330000803f7e93d13f841bbf3e0892b83d01c220bf7c935f341c3b47bf9c650c340000803f45ff2d340000803f0c2ec93f0352c03ef87b123e01c220bf7c935f341c3b47bf9c650c340000803f45ff2d340000803f0c2ec93f003eda3ef97b123e01c220bf7c935f341c3b47bf9c650c340000803f45ff2d340000803f7e93d13f7f74db3e0992b83d01c220bf7c935f341c3b47bf9c650c340000803f45ff2d340000803fbc2ae03f023eda3e852c81be0df72c3fe6215eb4f5ba3c3f251516340000803f1ec32334000080bf36a5d83f8074db3e9a334bbe0cf72c3fe6215eb4f5ba3c3f241516340000803f1ec32334000080bf36a5d83f861bbf3e9b334bbe0cf72c3fe6215eb4f5ba3c3f241516340000803f1ec32334000080bfbc2ae03f0552c03e852c81be0df72c3fe6215eb4f5ba3c3f251516340000803f1ec32334000080bf0d2ec93f0552c03e50b780be0fc220bfb3457bb3103b473f09ca1db30000803f278d4333000080bf7e93d13f861bbf3ea53b4bbe0dc220bfba457bb3113b473f0cca1db30000803f2d8d4333000080bf7e93d13f8074db3ea43b4bbe0dc220bfba457bb3113b473f0cca1db30000803f2d8d4333000080bf0d2ec93f023eda3e50b780be0fc220bfb3457bb3103b473f09ca1db30000803f278d4333000080bf2b85d93f0652c03e6d1babbe3c381a3b9aff7fbf0d712bbbd2ff7f3f1b381a3b7b8fce360000803f6940d13f0652c03ed51cabbe3a3818bb90ff7fbf76a63cbbd3ff7f3f123818bbb258e0b60000803f6940d13f023eda3ed51cabbe1e3c18bb90ff7f3f91a03cbbd3ff7f3ff63b183b6c57e0b6000080bf2b85d93f023eda3e6c1babbe1c341a3b9aff7f3f2a6b2bbbd2ff7f3ffb331abbde82ce36000080bfadecce3f023eda3e69218bbe19eae6bb84fb7f3f674c19bc60fe7f3f85e7e63bb4478ab8000080bfadecce3f0552c03e69218bbee0eae6bb84fb7fbfc74d19bc60fe7f3f4ce8e6bb69498ab80000803fdf51db3f023eda3e292b8bbed611013c4afb7f3fce5414bcf8fd7f3f7d1001bc53939538000080bfdf51db3f0552c03e292b8bbe6914013c4afb7fbf255614bcf8fd7f3f1013013ca89795380000803f7e93d13f861bbf3ea53b4bbe1c0d35bb2efd7fbf166311bcc0ff7f3f4a0b35bb34a5cdb70000803f36a5d83f861bbf3e9b334bbe0306213b94fd7fbf015907bcceff7f3f9d04213b7144aa370000803f36a5d83f8074db3e9a334bbea0ff203b94fd7f3f8d5907bcceff7f3f3afe20bb603eaa37000080bf7e93d13f8074db3ea43b4bbe6f0e35bb2efd7f3f866311bcc0ff7f3f9d0c353b53a7cdb7000080bf7e93d13f7f74db3e0992b83d280f35bb2cfd7f3f1d7f113cc0ff7f3f550d353b2ccfcd37000080bf35a5d83f7f74db3efb81b83de0f1203b92fd7f3f6275073cceff7f3f79f020bbd552aab7000080bf35a5d83f841bbf3efa81b83d4bf8203b92fd7fbff771073cceff7f3fe4f6203b5355aab70000803f7e93d13f841bbf3e0892b83dd40d35bb2cfd7fbfcd7b113cc0ff7f3f010c35bbfac8cd370000803f6840d13f0252c03e1647673efd080fbb9aff7fbf6204373bd8ff7f3fda080fbbe083cc360000803f2a85d93f0252c03e5244673e8097103ba4ff7fbfd300263bd7ff7f3f6397103b8685bbb60000803f2a85d93fff3dda3e5244673e6393103ba4ff7f3f7206263bd7ff7f3f469310bb8a86bbb6000080bf6940d13fff3dda3e1747673ee20c0fbb9aff7f3f010a373bd8ff7f3fbf0c0f3bb98fcc36000080bfacecce3fff3dda3e3f50273e33fde4bb8afb7f3f6e44193c67fe7f3fa4fae43b65198938000080bfacecce3f0352c03e3e50273ef9fde4bb8afb7fbfef42193c67fe7f3f6afbe4bb851889380000803fde51db3fff3dda3eb763273e99e6ff3b54fb7f3f2053143c01fe7f3fede3ffbb914594b8000080bfde51db3f0352c03eb663273ebeebff3b54fb7fbf9751143c01fe7f3f12e9ff3b034794b80000803fc692d33f0552c03ef1229abea68c4e3f61fa53b44c3d173ff0072b340000803fe276fa330000803fc692d33f023eda3ef0229abea68c4e3f61fa53b44c3d173ff0072b340000803fe276fa330000803f59d5d03ff6c1da3e292b8bbea68c4e3f60fa53b44b3d173ff0072b340000803fdf76fa330000803f59d5d03f11cebf3e2a2b8bbea68c4e3f60fa53b44b3d173ff0072b340000803fdf76fa330000803f59d5d03f11cebf3e2a2b8bbe1f50583ff1051cb24de908bfd8d503320000803fb1e2a6b10000803f59d5d03ff6c1da3e292b8bbe2150583f0d061cb24ce908bff1d503320000803fcde2a6b10000803f6a28d33f86f0da3ee5f478be2150583f0d061cb24ce908bff1d503320000803fcde2a6b10000803f6a28d33f7d9fbf3ee6f478be2150583f0d061cb24ce908bff1d503320000803fcde2a6b10000803f6a28d33f7d9fbf3ee6f478bee43fe13aa2c73734ecff7fbf53b4a1af0000803f94c737340000803f6a28d33f86f0da3ee5f478bee43fe13aa2c73734ecff7fbf53b4a1af0000803f94c737340000803ff069d73f86f0da3eeae578bee43fe13aa2c73734ecff7fbf53b4a1af0000803f94c737340000803ff069d73f7d9fbf3eebe578bee43fe13aa2c73734ecff7fbf53b4a1af0000803f94c737340000803ff069d73f7d9fbf3eebe578bea47b5dbfa9034b342c6100bf36a42f340000803fc89dcb33000080bff069d73f86f0da3eeae578bea47b5dbfa9034b342c6100bf36a42f340000803fc89dcb33000080bf2e8bd93ff6c1da3e9f258bbea47b5dbfa9034b342c6100bf36a42f340000803fc89dcb33000080bf2e8bd93f11cebf3e9f258bbea47b5dbfa9034b342c6100bf36a42f340000803fc89dcb33000080bf2e8bd93f11cebf3e9f258bbe6c1358bf8ad315320649093fb5ebfc310000803fe3b1a0b1000080bf2e8bd93ff6c1da3e9f258bbe6c1358bf7ed315320749093fa0ebfc310000803fd8b1a0b1000080bf982ad73f023eda3e171d9abe6c1358bf7ed315320749093fa0ebfc310000803fd8b1a0b1000080bf982ad73f0552c03e171d9abe6c1358bf7ed315320749093fa0ebfc310000803fd8b1a0b1000080bf982ad73f0552c03e171d9abef269d0badacb37b4f0ff7f3fb1a195af0000803fcfcb3734000080bf982ad73f023eda3e171d9abef269d0badacb37b4f0ff7f3fb1a195af0000803fcfcb3734000080bfc692d33f023eda3ef0229abef269d0badacb37b4f0ff7f3fb1a195af0000803fcfcb3734000080bfc692d33f0552c03ef1229abef269d0badacb37b4f0ff7f3fb1a195af0000803fcfcb3734000080bff169d73f84f0da3e9fc7093ef9cd5dbf363c983272a5ff3e77e683320000803f5c0618b2000080bff169d73f7b9fbf3e9ec7093ef9cd5dbf3b3c983270a5ff3e7be683320000803f600618b2000080bf2e8bd93f0ecebf3ea258273ef9cd5dbf3b3c983270a5ff3e7be683320000803f600618b2000080bf2e8bd93ff4c1da3ea358273ef9cd5dbf413c98326ea5ff3e80e683320000803f650618b2000080bf2e8bd93ff4c1da3ea358273ed31956bf78ec4f346e580cbfa6e42d340000803f49fae333000080bf2e8bd93f0ecebf3ea258273ed31956bf78ec4f346e580cbfa6e42d340000803f49fae333000080bf232cd73f0352c03e2149443ed31956bf78ec4f346e580cbfa6e42d340000803f49fae333000080bf232cd73fff3dda3e2149443ed31956bf78ec4f346d580cbfa6e42d340000803f47fae333000080bf232cd73fff3dda3e2149443e427dd0ba14343834f0ff7fbf7104962f0000803f083438340000803f232cd73f0352c03e2149443e427dd0ba14343834f0ff7fbf7104962f0000803f083438340000803fd390d33f0352c03ee154443e427dd0ba14343834f0ff7fbf7104962f0000803f083438340000803fd390d33fff3dda3ee254443e427dd0ba14343834f0ff7fbf7104962f0000803f083438340000803fd390d33fff3dda3ee254443ebb484c3fdd020c3219491abf1e74dfb10000803f67c3a8310000803fd390d33f0352c03ee154443ebb484c3fdd020c3219491abf1e74dfb10000803f67c3a8310000803f5ad5d03f0ecebf3eb663273ebb484c3fdd020c3219491abf1e74dfb10000803f67c3a8310000803f5ad5d03ff4c1da3eb663273ebb484c3fdd020c3219491abf1e74dfb10000803f67c3a8310000803f5ad5d03ff4c1da3eb663273e33af583ffd524eb4a152083f39a32e340000803f5dbddb330000803f5ad5d03f0ecebf3eb663273e34af583ffd524eb4a152083f3aa32e340000803f5dbddb330000803f6a28d33f7b9fbf3eebd4093e34af583ffd524eb4a152083f3aa32e340000803f5dbddb330000803f6a28d33f84f0da3eecd4093e34af583ffd524eb4a052083f3aa32e340000803f5cbddb330000803f6a28d33f84f0da3eecd4093e63fdc73af43138b4f0ff7f3f25e58f2f0000803fe8313834000080bf6a28d33f7b9fbf3eebd4093e63fdc73af43138b4f0ff7f3f25e58f2f0000803fe8313834000080bff169d73f7b9fbf3e9ec7093e63fdc73af43138b4f0ff7f3f25e58f2f0000803fe8313834000080bff169d73f84f0da3e9fc7093e63fdc73af43138b4f0ff7f3f25e58f2f0000803fe8313834000080bfdb64b13f9a19bc3e41e55dbdd43d06bf8b2059bf5c199a3d9a12223d3512833d37467f3f000080bf3b74ae3fceb0c43e80b8cdbcd43d06bf8b2059bf5c199a3d9a12223d3512833d37467f3f000080bfbbf2ae3fcb57c13eed4593bdd33d06bf8b2059bf5b199a3d9712223d3412833d37467f3f000080bffac4833f9b19bc3e4ae55dbdde1f7733d8b35dbf0600003f0000803f1e045633ea1ff7b20000803fea77ac3f9a19bc3e42e55dbddc1f7733d8b35dbf0700003f0000803f1d045633ea1ff7b20000803f3b74ae3fceb0c43e80b8cdbcdc1f7733d8b35dbf0700003f0000803f1d045633ea1ff7b20000803ffac4833fceb0c43e91b8cdbcde1f7733d8b35dbf0600003f0000803f1e045633ea1ff7b20000803fdb64b13f9a19bc3e41e55dbde01f7733d8b35dbf0500003f0000803f20045633ea1ff7b20000803fd749bd3f9a19bc3e3fe55dbde11f7733d8b35dbf0400003f0000803f21045633e91ff7b20000803f344fbd3fcdb0c43e7bb8cdbce01f7733d8b35dbf0500003f0000803f20045633ea1ff7b20000803fbbf2ae3fcb57c13eed4593bd4d52123fd00c4ebf366f233eff40bdbdf540053ee7b77c3f000080bf3b74ae3fceb0c43e80b8cdbc4e52123fcf0c4ebf366f233e0041bdbdf540053ee7b77c3f000080bfea77ac3f9a19bc3e42e55dbd4d52123fd00c4ebf346f233efd40bdbdf440053ee7b77c3f000080bf0913b83fb2d6cb3e4977aabd7651d13e9034bd3e519e55bf167d26befbe06d3fb1e8a93e0000803fa0ceb53f38dfd53e1d77aabd7751d13e9234bd3e519e55bf197d26befbe06d3fb3e8a93e0000803f4659b93f6d41db3e8b2a85bd7551d13e9034bd3e519e55bf167d26befbe06d3fb1e8a93e0000803f532dbc3f7af1d43e0408a4bd43486dbee1f30e3f6fea4bbf4208793f3035083e624b42be000080bf0913b83fb2d6cb3e4977aabd43486dbee0f30e3f6fea4bbf4208793f2f35083e624b42be000080bf4659b93f6d41db3e8b2a85bd43486dbee0f30e3f6fea4bbf4208793f2f35083e624b42be000080bfe673bb3f1693c93e28737ebe73067bbee4dd8d3c322678bf78218b3b2cf67f3f6889893c0000803fc70bb73f0248cd3edc6675be73067bbee3dd8d3c322678bf77218b3b2cf67f3f6789893c0000803ff4a1bb3fa1a3d03eb68f7ebe73067bbee3dd8d3c322678bf77218b3b2cf67f3f6789893c0000803fa6eabd3f0248cd3ee0a08ebecf2d59bfba83a83dfae205bf56728f3dc5217f3f3add303d000080bfe673bb3f1693c93e28737ebecf2d59bfba83a83df9e205bf56728f3dc5217f3f39dd303d000080bff4a1bb3fa1a3d03eb68f7ebecf2d59bfba83a83df8e205bf56728f3dc5217f3f37dd303d000080bf006cda3fff47cd3e11bb863e40c7a03e9164543f4754ec3ef30c733f897f8cbe07551cbe000080bf5a04e43fff47cd3e653d593e6cc19b3e29d0593f6159db3eecdd733f821d8bbea8180cbe000080bf5996d93f6a5fd53e7aea743e9b789f3e89dd553f5ddce73e0a44733fa8328cbea1fe17be000080bfeb41e53fff46d33ecaaf3a3ecf239b3e696f5a3f2b4dd93e08f7733fbde78abe2b2f0abe000080bf5076e43f6b5fd53e9b29363ed0239b3e696f5a3f2b4dd93e07f7733fbee78abe2c2f0abe000080bf94e8f33f0048cd3e27dfc63de81a973e6c70683f4a50983ee598743f1d988fbe9e30bcbd000080bf6b3cef3f6b5fd53e1441ae3d182e9c3e8843673f68569a3eb980c5bdec3992be9817743f0000803f058fe93fff47cd3ee993353e1b80b03e5c30623f7450a23e41fdebbd6a3697be93cb723f0000803feb41e53fff46d33ecaaf3a3e7af5b43e91fe603f5b09a43e49cff4bd073198be7481723f0000803f5076e43f6b5fd53e9b29363e77f5b43e91fe603f5b09a43e44cff4bd073198be7481723f0000803f94e8f33f0048cd3e27dfc63dc51a973e7e7068bf1650983eea98743f03988f3e2e30bcbd0000803f058fe93fff47cd3ee993353ea0e2b03ec00762bf62c7a23eba41edbd6a96973eabb7723f000080bf6b3cef3f9730c53e1441ae3df6579c3efa3667bf44779a3ef8e3c5bd3854923e6512743f000080bf76efe53ff121c93e67983e3e37ebb43e4df060bfeb62a43e6056f5bdfc83983e4972723f000080bf5076e43f9730c53e9b29363e39ebb43e4df060bfea62a43e6156f5bdfb83983e4a72723f000080bf006cda3fff47cd3e11bb863e21c7a03ead6454bf0854ec3ef80c733f7d7f8c3ebb541cbe0000803f5996d93f9730c53e7aea743e1f399f3e20f855bfe0a5e73e6f4e733f44068c3efb9717be0000803f5a04e43fff47cd3e653d593ece009b3e81025abfc019db3e98fc733f0c808a3e74310bbe0000803f76efe53ff121c93e67983e3e7c679a3e7c8e5abf6156d93ee514743fde418a3e6e7c09be0000803f5076e43f9730c53e9b29363e7b679a3e7c8e5abf5f56d93ee514743fdd418a3e6b7c09be0000803f63b24d3f3bfdc53e2a78a1bd6d47c433edcab836020080bf0000803fecae0dab7047c433000080bf6fed483f3bfdc53e2b78a1bd6d47c433edcab836020080bf0000803fecae0dab7047c433000080bf63b24d3fcc92d43e1578a1bdbbbe0536abb35d3f530000bf0000803f0aa7e7b512bf8535000080bf70ed483fcc92d43e1578a1bdbabe0536abb35d3f530000bf0000803f09a7e7b511bf8535000080bf63b24d3f98dddb3e4de55dbda19a8eb699b35d3f7100003f0000803f11ff76361f9b0e36000080bf70ed483f98dddb3e76e55dbda19a8eb699b35d3f7100003f0000803f11ff76361f9b0e36000080bf63b24d3fcb92d43e3db5f1bc84488db6dcf702370200803f0000803f3b8f102e86488d360000803f6fed483fcb92d43e91b5f1bc84488db6dcf702370200803f0000803f3b8f102e86488d360000803f6fed483f72b2be3e50e55dbd573e8936deb35dbff2ffff3e0000803f7db66d364f3e09b60000803f62b24d3f78b2be3e4fe55dbd563e8936deb35dbff2ffff3e0000803f7cb66d364e3e09b60000803f62b24d3f3bfdc53eefb4f1bc563e8936deb35dbff2ffff3e0000803f7cb66d364e3e09b60000803f6fed483f3bfdc53ef0b4f1bc573e8936deb35dbff3ffff3e0000803f7db66d36503e09b60000803f7c635f3f7c13c33ebda6b5bd5ffae5b4edb35dbfbfffffbe0000803fc72ac7b425fa65b40000803f7c635f3ff6deb83e4ee55dbd5ffae5b4edb35dbfbfffffbe0000803fc72ac7b425fa65b40000803f7c635f3f887cd73ebca6b5bdc4a32436efff3734020080bf54abecaa0000803ff2ff37340000803f7c635f3f7c13c33ebda6b5bdc4a32436efff3734020080bf54abecaa0000803ff2ff37340000803f30ea4e3f7c13c33ed2a6b5bdc4a32436efff3734020080bf54abecaa0000803ff2ff37340000803f7c635f3f11b1e13e4ae55dbd89799635c9b35d3f1f0000bf0000803f985082b5ad791635000080bf7c635f3f887cd73ebca6b5bd89799635c9b35d3f1f0000bf0000803f985082b5ad791635000080bf2fea4e3f887cd73ed2a6b5bd89799635c9b35d3f1f0000bf0000803f985082b5ad791635000080bf7c635f3f887cd73e47faa0bc4b6fec34bab35d3f3700003f0000803f11c2ccb4b16f6cb4000080bf7c635f3f11b1e13e4ae55dbd4b6fec34bbb35d3f3600003f0000803f12c2ccb4af6f6cb4000080bf2fea4e3f14b1e13e4ce55dbd4b6fec34bab35d3f3700003f0000803f11c2ccb4b16f6cb4000080bf7c635f3f7c13c33e4afaa0bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f7c635f3f887cd73e47faa0bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f2fea4e3f887cd73e4afaa0bcc747c4b3020038b40200803f0000803f99138da8ca47c4330000803f2fea4e3ffbdeb83e50e55dbd77dc94b5e5b35dbfd7ffff3e0000803feeea80b55fdc14350000803f7c635f3ff6deb83e4ee55dbd77dc94b5e5b35dbfd7ffff3e0000803feeea80b55fdc14350000803f7c635f3f7c13c33e4afaa0bc77dc94b5e5b35dbfd7ffff3e0000803feeea80b55fdc14350000803f2fea4e3f7c13c33e4dfaa0bc77dc94b5e5b35dbfd7ffff3e0000803feeea80b55fdc14350000803fa2b5473f7c13c33ed3a6b5bddb89663fb6c7c0be439a5ebec55f4d3ebbbcabbdc3e0793f000080bf6fed483f3bfdc53e2b78a1bddb89663fb4c7c0be429a5ebec35f4d3eb8bcabbdc3e0793f000080bf6fed483f72b2be3e50e55dbddb89663fb6c7c0be439a5ebec55f4d3ebbbcabbdc3e0793f000080bfa2b5473ff6deb83e50e55dbddb89663fb4c7c0be429a5ebec35f4d3eb8bcabbdc3e0793f000080bf2fea4e3ffbdeb83e50e55dbde68966bf81c7c0be0b9a5ebe985f4dbe5ebcabbdc7e0793f0000803f62b24d3f78b2be3e4fe55dbde68966bf81c7c0be0b9a5ebe985f4dbe5ebcabbdc7e0793f0000803f63b24d3f3bfdc53e2a78a1bde68966bf7fc7c0be099a5ebe975f4dbe5bbcabbdc7e0793f0000803f30ea4e3f7c13c33ed2a6b5bde68966bf81c7c0be0b9a5ebe985f4dbe5ebcabbdc7e0793f0000803fa2b5473f887cd73ebea6b5bdd589663f59cdfe35749adebeae75e5b50000803fce8f5d350000803f70ed483fcc92d43e1578a1bdd589663f59cdfe35759adebeae75e5b50000803fcf8f5d350000803f6fed483f3bfdc53e2b78a1bdd589663f57cdfe35749adebeac75e5b50000803fcc8f5d350000803fa2b5473f7c13c33ed3a6b5bdd589663f57cdfe35759adebeac75e5b50000803fcd8f5d350000803f30ea4e3f7c13c33ed2a6b5bd058a66bf3e444334b299debe96d82f340000803f69caa933000080bf63b24d3f3bfdc53e2a78a1bd058a66bf3e444334b299debe96d82f340000803f69caa933000080bf63b24d3fcc92d43e1578a1bd058a66bf3e444334b299debe96d82f340000803f69caa933000080bf2fea4e3f887cd73ed2a6b5bd058a66bf3e444334b299debe96d82f340000803f69caa933000080bfa2b5473f14b1e13e4de55dbdb789663ff0c7c03e8e9b5ebee5604d3efbbdab3db0e0793f000080bf70ed483f98dddb3e76e55dbdb789663ff0c7c03e8e9b5ebee5604d3efbbdab3db0e0793f000080bf70ed483fcc92d43e1578a1bdb789663ff0c7c03e8e9b5ebee5604d3efbbdab3db0e0793f000080bfa2b5473f887cd73ebea6b5bdb589663ff0c7c03e8e9b5ebee3604d3efbbdab3db0e0793f000080bf2fea4e3f887cd73ed2a6b5bdf58966bf34c7c03e449a5ebede5f4dbe48bcab3dc3e0793f0000803f63b24d3fcc92d43e1578a1bdf48966bf35c7c03e419a5ebed95f4dbe47bcab3dc3e0793f0000803f63b24d3f98dddb3e4de55dbdf58966bf34c7c03e429a5ebedb5f4dbe47bcab3dc3e0793f0000803f2fea4e3f14b1e13e4ce55dbdf58966bf34c7c03e449a5ebede5f4dbe48bcab3dc3e0793f0000803fa2b5473f887cd73e9bfaa0bcd789663f6cc7c03e379b5e3ead604dbe3fbdabbdb6e0793f000080bf6fed483fcb92d43e91b5f1bcd789663f6ec7c03e3a9b5e3eb0604dbe43bdabbdb6e0793f000080bf70ed483f98dddb3e76e55dbdd789663f6cc7c03e379b5e3ead604dbe3fbdabbdb6e0793f000080bfa2b5473f14b1e13e4de55dbdd789663f6ec7c03e389b5e3eae604dbe41bdabbdb6e0793f000080bf2fea4e3f14b1e13e4ce55dbdf58966bf22c7c03e809a5e3e17604d3e69bcabbdbfe0793f0000803f63b24d3f98dddb3e4de55dbdf58966bf21c7c03e809a5e3e17604d3e68bcabbdbfe0793f0000803f63b24d3fcb92d43e3db5f1bcf58966bf21c7c03e809a5e3e17604d3e68bcabbdbfe0793f0000803f2fea4e3f887cd73e4afaa0bcf58966bf21c7c03e809a5e3e17604d3e68bcabbdbfe0793f0000803fa2b5473f7c13c33e4ffaa0bceb89663ff82335361c9ade3ee71f23b60000803f3d829db50000803f6fed483f3bfdc53ef0b4f1bceb89663ff62335361c9ade3ee61f23b60000803f3b829db50000803f6fed483fcb92d43e91b5f1bceb89663ff52335361c9ade3ee51f23b60000803f3a829db50000803fa2b5473f887cd73e9bfaa0bceb89663ff82335361c9ade3ee71f23b60000803f3d829db50000803f2fea4e3f887cd73e4afaa0bc068a66bf21170d33ad99de3eb31dfe320000803f825d75b2000080bf63b24d3fcb92d43e3db5f1bc068a66bf25170d33aa99de3eba1dfe320000803f855d75b2000080bf62b24d3f3bfdc53eefb4f1bc068a66bf21170d33ad99de3eb31dfe320000803f825d75b2000080bf2fea4e3f7c13c33e4dfaa0bc068a66bf21170d33ad99de3eb31dfe320000803f825d75b2000080bfa2b5473ff6deb83e50e55dbdda89663fa3c7c0be849a5e3e03604dbedfbcab3dbfe0793f000080bf6fed483f72b2be3e50e55dbdda89663fa1c7c0be829a5e3e00604dbedbbcab3dbfe0793f000080bf6fed483f3bfdc53ef0b4f1bcda89663fa1c7c0be829a5e3e00604dbedbbcab3dbfe0793f000080bfa2b5473f7c13c33e4ffaa0bcda89663fa1c7c0be829a5e3e00604dbedbbcab3dbfe0793f000080bf2fea4e3f7c13c33e4dfaa0bce68966bf81c7c0bef2995e3e815f4d3e4bbcab3dc9e0793f0000803f62b24d3f3bfdc53eefb4f1bce68966bf81c7c0bef1995e3e805f4d3e4bbcab3dc9e0793f0000803f62b24d3f78b2be3e4fe55dbde68966bf81c7c0bef1995e3e805f4d3e4bbcab3dc9e0793f0000803f2fea4e3ffbdeb83e50e55dbde68966bf83c7c0bef2995e3e815f4d3e4dbcab3dc9e0793f0000803ff080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303e3286ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3386ee3e3addc53d3386ee3e3addc53d3386ee3e3addc53d3386ee3e3addc53d3386ee3e3addc53d3386ee3e3addc53db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13dc0bcf33e339b313eb6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13dc0bcf33e339b313eb6dbf43eb89bd13db6dbf43eb89bd13dc0bcf33e339b313eb6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13dc0bcf33e339b313eb6dbf43eb89bd13dc0bcf33e339b313eb6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13dc0bcf33e339b313eb6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13dc0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e542b343e8dbbfd3e542b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e6c51fe3e6c10303e6c51fe3e6c10303e6c51fe3e6c10303e6c51fe3e6c10303e6c51fe3e6c10303e6c51fe3e6c10303e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e6c51fe3e6c10303e8dbbfd3e5c2b343e8dbbfd3e582b343e8dbbfd3e582b343e8dbbfd3e582b343e8dbbfd3e582b343e8dbbfd3e582b343e8dbbfd3e582b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8ebbfd3e5c2b343e8ebbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e542b343e8dbbfd3e542b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e8dbbfd3e542b343e8dbbfd3e542b343e8dbbfd3e542b343e8ebbfd3e542b343e8dbbfd3e542b343e8dbbfd3e542b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8ebbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e542b343e8dbbfd3e542b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8ebbfd3e5c2b343e8ebbfd3e5c2b343e8dbbfd3e542b343e8dbbfd3e5c2b343e8dbbfd3e542b343e8dbbfd3e5c2b343e80c1de3cf49b8d3e90c1de3cf49b8d3e90c1de3cf49b8d3e90c1de3cf49b8d3e90c1de3cf49b8d3e90c1de3cf49b8d3e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e6064da3d00a0343e6064da3d00a0343e6064da3d00a0343e6064da3d00a0343e6064da3d00a0343e6064da3d00a0343e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8ebbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8ebbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e6d51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6d51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d00a0343e6064da3d04a0343e6064da3d04a0343e6064da3d04a0343e6064da3d04a0343e6064da3d00a0343e6064da3d00a0343e6064da3d00a0343e6064da3d00a0343e6064da3d00a0343e6064da3d00a0343e6064da3d00a0343e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8ebbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e80c1de3cf49b8d3e80c1de3cf49b8d3e90c1de3cf49b8d3e80c1de3cf49b8d3e90c1de3cf49b8d3e90c1de3cf49b8d3e90c1de3cf49b8d3e90c1de3cf49b8d3ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e319b313ec0bcf33e339b313ec0bcf33e339b313e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d476f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d476f4c3e902ed23d486f4c3ee05eda3d0b40383ee05eda3d0b40383ee05eda3d0b40383ee05eda3d0b40383ee05eda3d0b40383ee05eda3d0b40383ee05eda3d0b40383ee05eda3d0b40383ee05eda3d0b40383ee05eda3d0b40383ee05eda3d0b40383ee05eda3d0b40383ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303ef080fe3e94ce303e3286ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3386ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3386ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3386ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3386ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3386ee3e3addc53d3386ee3e3addc53d3286ee3e3addc53d3386ee3e3addc53d3386ee3e3addc53d3386ee3e3addc53d3386ee3e3addc53d3386ee3e3addc53d3386ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53d3286ee3e3addc53db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13dc0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313eb6dbf43eb89bd13db6dbf43eb89bd13dc0bcf33e339b313ec0bcf33e319b313ec0bcf33e339b313ec0bcf33e339b313eb6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13dc0bcf33e339b313eb6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13dc0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313eb6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13dc0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313eb6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13db6dbf43eb89bd13dc0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e542b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e542b343e8dbbfd3e542b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e542b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e6c51fe3e6c10303e6c51fe3e7010303e6c51fe3e6c10303e6c51fe3e7010303e6c51fe3e6c10303e6c51fe3e7010303e6c51fe3e6c10303e6c51fe3e7010303e6c51fe3e6c10303e6d51fe3e7010303e6c51fe3e7010303e6c51fe3e6c10303e6c51fe3e6c10303e6c51fe3e6c10303e6c51fe3e6c10303e6c51fe3e6c10303e6c51fe3e6c10303e6c51fe3e6c10303e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8ebbfd3e5c2b343e8ebbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e582b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8ebbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e582b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8ebbfd3e5c2b343e8dbbfd3e582b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8ebbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e582b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e582b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e582b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e542b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e542b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e542b343e8dbbfd3e542b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee38e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e8dbbfd3e5c2b343e8dbbfd3e542b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8ebbfd3e5c2b343e8ebbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e542b343e8dbbfd3e542b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e542b343e8dbbfd3e5c2b343e8dbbfd3e542b343e8dbbfd3e542b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e542b343e8dbbfd3e5c2b343e8dbbfd3e542b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8ebbfd3e5c2b343e8ebbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e542b343e8dbbfd3e5c2b343e8ebbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e542b343e8ebbfd3e5c2b343e8ebbfd3e5c2b343e8ebbfd3e542b343e8ebbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e542b343e8dbbfd3e542b343e8dbbfd3e5c2b343e8dbbfd3e542b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e542b343e8dbbfd3e542b343e8dbbfd3e5c2b343e8dbbfd3e542b343e8dbbfd3e5c2b343e90c1de3cf49b8d3e80c1de3cf49b8d3e90c1de3cf49b8d3e90c1de3cf49b8d3e90c1de3cf49b8d3e90c1de3cf49b8d3e90c1de3cf49b8d3e90c1de3cf49b8d3e90c1de3cf49b8d3e90c1de3cf49b8d3e90c1de3cf49b8d3e90c1de3cf49b8d3e90c1de3cf49b8d3e90c1de3cf49b8d3e90c1de3cf49b8d3e90c1de3cf49b8d3e90c1de3cf49b8d3e90c1de3cf49b8d3e90c1de3cf49b8d3e90c1de3cf49b8d3e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8ebbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e6064da3d00a0343e6064da3d00a0343e6064da3d00a0343e6064da3d00a0343e6064da3d00a0343e6064da3d00a0343e6064da3d00a0343e6064da3d00a0343e6064da3d00a0343e6064da3d00a0343e6064da3d00a0343e6064da3d00a0343e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8ebbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8ebbfd3ecdb4313e8ebbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8ebbfd3ecdb4313e8ebbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e8dbbfd3ecdb4313e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6d51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6d51fe3e7010303e6d51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6d51fe3e7010303e6d51fe3e7010303e6c51fe3e7010303e6c51fe3e7010303e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e6064da3d02a0343e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e6064da3d02a0343e6064da3d04a0343e6064da3d02a0343e6064da3d04a0343e6064da3d02a0343e6064da3d04a0343e6064da3d02a0343e6064da3d04a0343e6064da3d00a0343e6064da3d02a0343e6064da3d02a0343e6064da3d00a0343e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8ebbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8ebbfd3e5c2b343e8ebbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e1cb6f33ee78e293e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8dbbfd3e5c2b343e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e8cc9fe3e3c9a313e80c1de3cf49b8d3e90c1de3cf49b8d3e80c1de3cf49b8d3e80c1de3cf49b8d3e80c1de3cf49b8d3e90c1de3cf49b8d3e90c1de3cf49b8d3e80c1de3cf49b8d3e80c1de3cf49b8d3e90c1de3cf49b8d3e80c1de3cf49b8d3e90c1de3cf49b8d3e80c1de3cf49b8d3e90c1de3cf49b8d3e90c1de3cf49b8d3e90c1de3cf49b8d3e189d4b3d18e9903e1d9d4b3d18e9903e189d4b3d18e9903ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e319b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e319b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ec0bcf33e339b313ee05eda3d0b40383ee05eda3d0b40383ee05eda3d0b40383ee05eda3d0b40383ee05eda3d0b40383ee05eda3d0b40383ee05eda3d0b40383ee05eda3d0b40383ee05eda3d0b40383ee05eda3d0b40383ee05eda3d0b40383ee05eda3d0b40383e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d476f4c3e902ed23d476f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d476f4c3e902ed23d476f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d476f4c3e902ed23d476f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d476f4c3e902ed23d476f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d486f4c3e902ed23d476f4c3e902ed23d476f4c3e0000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f000000000000000000000000000000000000000000000000000000000000803f00000000000000000000000000000000000000000000000000000000 + m_CompressedMesh: + m_Vertices: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_UV: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Normals: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Tangents: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Weights: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_NormalSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_TangentSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_FloatColors: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_BoneIndices: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_Triangles: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_UVInfo: 0 + m_LocalAABB: + m_Center: {x: 1.2140799, y: 0.40094, z: -0.05417368} + m_Extent: {x: 0.6914554, y: 0.071966305, z: 0.31731963} + m_MeshUsageFlags: 0 + m_CookingOptions: 30 + m_BakedConvexCollisionMesh: + m_BakedTriangleCollisionMesh: + 'm_MeshMetrics[0]': 1 + 'm_MeshMetrics[1]': 1 + m_MeshOptimizationFlags: 1 + m_StreamData: + serializedVersion: 2 + offset: 0 + size: 0 + path: + m_MeshLodInfo: + serializedVersion: 2 + m_LodSelectionCurve: + serializedVersion: 1 + m_LodSlope: 0 + m_LodBias: 0 + m_NumLevels: 1 + m_SubMeshes: + - serializedVersion: 2 + m_Levels: + - serializedVersion: 1 + m_IndexStart: 0 + m_IndexCount: 0 diff --git a/Assets/_Project/Art/Models/Rebased_SM_Wep_Melee.asset.meta b/Assets/_Project/Art/Models/Rebased_SM_Wep_Melee.asset.meta new file mode 100644 index 000000000..f6c5bca0b --- /dev/null +++ b/Assets/_Project/Art/Models/Rebased_SM_Wep_Melee.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0d76db2ce815146419fd52c745104909 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4300000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Materials/M_Weapon_Animated.mat b/Assets/_Project/Materials/M_Weapon_Animated.mat new file mode 100644 index 000000000..53f7adea1 --- /dev/null +++ b/Assets/_Project/Materials/M_Weapon_Animated.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-6263134222815092261 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: M_Weapon_Animated + m_Shader: {fileID: -6465566751694194690, guid: 32ea7846f763cb340950fafed798ecf6, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _USE_VERTEX_COLOR + m_InvalidKeywords: [] + m_LightmapFlags: 2 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseColorMap: + m_Texture: {fileID: 2800000, guid: 48dd9a7736c11b5448a74711310e2ee6, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _DeformedMeshIndex: 0 + - _Metallic: 0 + - _QueueControl: 0 + - _QueueOffset: 0 + - _Smoothness: 0 + - _USE_VERTEX_COLOR: 1 + m_Colors: + - _BaseColor: {r: 0.95, g: 0.9, b: 0.82, a: 1} + - _DeformationParamsForMotionVectors: {r: 0, g: 0, b: 0, a: 0} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/_Project/Materials/M_Weapon_Animated.mat.meta b/Assets/_Project/Materials/M_Weapon_Animated.mat.meta new file mode 100644 index 000000000..40093e738 --- /dev/null +++ b/Assets/_Project/Materials/M_Weapon_Animated.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 53abed4a039a2944498dc0d43258baf5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Prefabs/Player.prefab b/Assets/_Project/Prefabs/Player.prefab index 7f7e568a9..42b6f57c6 100644 --- a/Assets/_Project/Prefabs/Player.prefab +++ b/Assets/_Project/Prefabs/Player.prefab @@ -833,6 +833,7 @@ Transform: - {fileID: 100450397525093210} - {fileID: 795319999662639885} - {fileID: 1063840860590240591} + - {fileID: 136525282400229282} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &8290370249712404227 @@ -2948,6 +2949,99 @@ MeshRenderer: m_SortingOrder: 0 m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &7369922033552706299 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 136525282400229282} + - component: {fileID: 4540681531604194498} + m_Layer: 0 + m_Name: SM_Wep_Melee + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &136525282400229282 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7369922033552706299} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 194292233036670670} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!137 &4540681531604194498 +SkinnedMeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7369922033552706299} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 3 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 53abed4a039a2944498dc0d43258baf5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 4300000, guid: 0d76db2ce815146419fd52c745104909, type: 2} + m_Bones: + - {fileID: 7714500739160558408} + m_BlendShapeWeights: [] + m_RootBone: {fileID: 7714500739160558408} + m_AABB: + m_Center: {x: 0.41444784, y: 0.060000006, z: 0.02000001} + m_Extent: {x: 0.6914554, y: 0.071966305, z: 0.31731963} + m_DirtyAABB: 0 --- !u!1 &7432474647424217847 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/_Project/Scripts/Authoring/Player/PlayerAuthoring.cs b/Assets/_Project/Scripts/Authoring/Player/PlayerAuthoring.cs index cbaaf7f10..dc7d16876 100644 --- a/Assets/_Project/Scripts/Authoring/Player/PlayerAuthoring.cs +++ b/Assets/_Project/Scripts/Authoring/Player/PlayerAuthoring.cs @@ -80,6 +80,7 @@ namespace ProjectM.Authoring AddComponent(entity); // LANTERN Blink: predicted blink window (Movement-archetype Spark), baked idle // MC-4 melee combo: predicted, owner-replicated combo anchor (Step/SwingStartTick/LockUntilTick), baked idle/zero. AddComponent(entity); + AddComponent(entity); // 07-20 G2.1: server-only scheduled cleave (baked zeroed, not replicated) // Death gate (enableable, derived from Health by PlayerDeathStateSystem) baked DISABLED = alive; // plus the server-only respawn timer. diff --git a/Assets/_Project/Scripts/Client/Input/DebugInputInjectionSystem.cs b/Assets/_Project/Scripts/Client/Input/DebugInputInjectionSystem.cs index d8ee1fd7f..7e9c14dc4 100644 --- a/Assets/_Project/Scripts/Client/Input/DebugInputInjectionSystem.cs +++ b/Assets/_Project/Scripts/Client/Input/DebugInputInjectionSystem.cs @@ -53,6 +53,12 @@ namespace ProjectM.Client /// override). The ability cooldown still gates how many shots actually result. public static void Fire(int frames = 10) { Active = true; FireFrames = math.max(FireFrames, frames); } + /// Frames remaining to hold the melee Attack event (07-19: melee swing validation). + public static int AttackFrames; + + /// Convenience: hold the melee Attack for the next frames (also enables override). + public static void Attack(int frames = 10) { Active = true; AttackFrames = math.max(AttackFrames, frames); } + /// Per-socket fire holds (LANTERN 4-socket kit). Each held frame raises that socket's fire event. public static readonly int[] SocketFrames = new int[SocketId.Count]; @@ -66,7 +72,7 @@ namespace ProjectM.Client public static void SetAim(float x, float z) { Active = true; Aim = new float2(x, z); } /// Convenience: stop overriding and clear all injected input. - public static void Stop() { Active = false; Move = default; Aim = default; FireFrames = 0; for (int i = 0; i < SocketId.Count; i++) SocketFrames[i] = 0; } + public static void Stop() { Active = false; Move = default; Aim = default; FireFrames = 0; AttackFrames = 0; for (int i = 0; i < SocketId.Count; i++) SocketFrames[i] = 0; } protected override void OnCreate() { @@ -80,6 +86,8 @@ namespace ProjectM.Client bool fire = FireFrames > 0; if (FireFrames > 0) FireFrames--; + bool attack = AttackFrames > 0; + if (AttackFrames > 0) AttackFrames--; // LANTERN 4-socket kit: per-socket fire holds, decremented once per frame. bool s0 = SocketFrames[0] > 0; if (SocketFrames[0] > 0) SocketFrames[0]--; bool s1 = SocketFrames[1] > 0; if (SocketFrames[1] > 0) SocketFrames[1]--; @@ -99,6 +107,8 @@ namespace ProjectM.Client input.ValueRW.Scheme = Scheme; if (fire) input.ValueRW.Fire.Set(); + if (attack) + input.ValueRW.Attack.Set(); if (s0) input.ValueRW.Socket0.Set(); if (s1) input.ValueRW.Socket1.Set(); if (s2) input.ValueRW.Socket2.Set(); diff --git a/Assets/_Project/Scripts/Client/Presentation/CombatFeedbackSystem.cs b/Assets/_Project/Scripts/Client/Presentation/CombatFeedbackSystem.cs index eaf12fbae..06232458c 100644 --- a/Assets/_Project/Scripts/Client/Presentation/CombatFeedbackSystem.cs +++ b/Assets/_Project/Scripts/Client/Presentation/CombatFeedbackSystem.cs @@ -64,6 +64,9 @@ namespace ProjectM.Client bool _slashActive; float _slashRange, _slashHalf; // live cone geometry re-sampled each frame for the per-frame sweep rebuild int _slashSweepSign = 1; // alternate sweep direction per combo step (reads as alternating strikes) + Mesh _smearMesh; MeshRenderer _smearMr; Material _smearMat; // 07-20 G2.3: blade-smear ribbon (leading-edge band at blade height) + uint _pendingConnectTick; // 07-20 G2.1 (review C14): the local swing's CONTACT tick; connect cues fire THEN (0 = none) + int _pendingConnectStep; double _lastHoldTime; // C4: last hit-stop hold time (throttle so a horde wipe doesn't stutter) // Remote teammates' melee cleave arcs (deferred-items pass, co-op): one pooled slash renderer per remote @@ -150,6 +153,8 @@ namespace ProjectM.Client Object.Destroy(_fxRoot.gameObject); if (_slashMesh != null) Object.Destroy(_slashMesh); if (_slashMat != null) Object.Destroy(_slashMat); + if (_smearMesh != null) Object.Destroy(_smearMesh); + if (_smearMat != null) Object.Destroy(_smearMat); foreach (var kv in _remoteSlashes) { @@ -441,45 +446,44 @@ namespace ProjectM.Client PrototypeCameraRig.AddShake(0.04f * step); int comboLen = SystemAPI.TryGetSingleton(out var tcfg) ? (int)math.clamp((int)tcfg.MeleeComboLength, 1, 3) : 3; bool finisher = step >= comboLen; - float slashRange = tcfg.MeleeRange > 0f ? tcfg.MeleeRange : 2.6f; + float slashRange = tcfg.MeleeRange > 0f ? tcfg.MeleeRange : 2.2f; float slashHalf = tcfg.MeleeConeHalfAngleRad > 0f ? tcfg.MeleeConeHalfAngleRad : 0.9f; // Slice-2 deferred reach fix: the SERVER folds per-player StatModifiers into melee range - // (class seed +0.8, boons, meta tiers) — the arc must sweep the REAL reach, not the base. + // (class seed +0.8, boons, meta tiers) -- the arc must sweep the REAL reach, not the base. if (EntityManager.HasBuffer(_localPlayer)) slashRange = math.max(0f, StatMath.Apply(slashRange, StatTarget.MeleeRange, EntityManager.GetBuffer(_localPlayer, true))); - if (finisher) slashRange *= tcfg.MeleeFinisherMult > 0f ? tcfg.MeleeFinisherMult : 1.8f; - // MC-4 connect-vs-whiff: client-side cone overlap over the cached enemy snapshot gives an IMMEDIATE - // "you bit" read (the authoritative server damage spark/number arrives a few ticks later). - bool connected = false; Vector3 nearestHit = (Vector3)localPos; float ndist = float.MaxValue; - float cosHalf = Mathf.Cos(slashHalf); - float2 fdir = new float2(face.x, face.z); - foreach (var kv in _cache) + if (finisher) slashRange *= tcfg.MeleeFinisherRangeMult > 0f ? tcfg.MeleeFinisherRangeMult : 1.25f; // 07-20 G2.2: REACH-only finisher mult + // 07-20 G2.4 (review C13): the sweep-reveal (60% of life) completes AT the LIVE contact tick, so + // the drawn edge and the damage moment stay one object under knob tuning. + uint contactTicks = MeleeTiming.ContactTicks((byte)step, math.max(0f, tcfg.MeleeContactTicks)); + float arcLife = Mathf.Max(finisher ? 0.5f : 0.34f, (contactTicks / 60f) / 0.6f); + TriggerSlash((Vector3)localPos, new float2(face.x, face.z), slashRange, slashHalf, step, comboLen, false, arcLife); + // 07-20 G2.1/G5 (review C14): the CONNECT package (bite burst/thunk/kick/rumble + the finisher + // hold) fires at the CONTACT tick -- not here at the swing edge, where damage doesn't exist yet. + _pendingConnectStep = step; + if (contactTicks == 0u) { - if (!kv.Value.IsEnemy) continue; - if (MeleeConeMath.InCone(localPos, fdir, slashRange, cosHalf, kv.Value.Pos)) - { - float d2 = math.distancesq(localPos, kv.Value.Pos); - if (d2 < ndist) { ndist = d2; nearestHit = (Vector3)kv.Value.Pos; connected = true; } - } + _pendingConnectTick = 0u; + EvaluateMeleeConnect(localPos, step, comboLen); // knob 0 = legacy same-tick connect } - TriggerSlash((Vector3)localPos, new float2(face.x, face.z), slashRange, slashHalf, step, comboLen, connected); // sweeps + ramps + brightens on connect - if (connected) + else { - Burst(_hitFx, cfg != null ? cfg.Hit : null, nearestHit + Vector3.up * 0.7f, FeelConfig.HitBurstCount); - PlayClip(_meleeConnectClip, nearestHit, FeelConfig.MeleeConnectVolume); - PrototypeCameraRig.PunchFov(FeelConfig.MeleeConnectFovKick, FeelConfig.HitStopDurationMs); - if (FeelConfig.RumbleEnabled && AimPresentation.Scheme == 1) - RumbleUtil.Pulse(FeelConfig.RumbleHit * 0.6f, FeelConfig.RumbleHit, FeelConfig.RumbleDurationSec); + _pendingConnectTick = TickUtil.NonZero(mc.SwingStartTick + contactTicks); } - if (finisher) - { - PrototypeCameraRig.PunchFov(FeelConfig.DashFovKick * 0.6f, FeelConfig.HitStopDurationMs); - TryHold(); // C4: a beat of crunch on the combo finisher (the deliberate payoff hit) - } } _lastLocalSwingTick = mc.SwingStartTick; _swingTickInit = true; + + // 07-20: fire the deferred connect package when the blade lands (contact tick reached; wrap-safe). + if (_pendingConnectTick != 0u + && SystemAPI.TryGetSingleton(out var meleeNt) && meleeNt.ServerTick.IsValid + && !new NetworkTick(_pendingConnectTick).IsNewerThan(meleeNt.ServerTick)) + { + int cLen = SystemAPI.TryGetSingleton(out var ct2) ? (int)math.clamp((int)ct2.MeleeComboLength, 1, 3) : 3; + EvaluateMeleeConnect(localPos, _pendingConnectStep, cLen); + _pendingConnectTick = 0u; + } } @@ -799,30 +803,51 @@ namespace ProjectM.Client _slashMr.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; _slashMr.receiveShadows = false; _slashMr.enabled = false; + + // 07-20 G2.3: the blade-smear ribbon -- a narrow band at blade height tracking the arc's leading edge + // (child of the arc GO so the transform follows for free). Geometry via BuildSlashInto's angular-window + // mode (review C18: one shared builder, no drift from arc retones). + var smearGo = new GameObject("MeleeSmearRibbon"); + smearGo.transform.SetParent(go.transform, false); + _smearMesh = new Mesh { name = "MeleeSmearRibbon" }; + smearGo.AddComponent().sharedMesh = _smearMesh; + _smearMr = smearGo.AddComponent(); + _smearMat = MakeParticleMaterial(); + _smearMat.name = "MeleeSmearRibbon"; + _smearMr.sharedMaterial = _smearMat; + _smearMr.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + _smearMr.receiveShadows = false; + _smearMr.enabled = false; } // Rebuild the crescent (inner->outer arc) for the LIVE cone half-angle + range, in local +Z-forward space. // `reveal` (0..1) sweeps the arc open from one edge (sweepSign) toward the other so the cleave reads directional. - void BuildSlashInto(Mesh mesh, float range, float halfAngle, float reveal, int sweepSign) + // 07-20 G2.3 extension: innerFrac/y/angularWindowRad let the SAME builder cut the blade-smear ribbon + // (a narrow band trailing the leading edge at blade height) -- defaults reproduce the classic ground arc. + void BuildSlashInto(Mesh mesh, float range, float halfAngle, float reveal, int sweepSign, + float innerFrac = 0.45f, float y = 0f, float angularWindowRad = 0f) { const int seg = 16; float r1 = Mathf.Max(0.4f, range); - float r0 = r1 * 0.45f; + float r0 = r1 * innerFrac; float aStart = sweepSign >= 0 ? -halfAngle : halfAngle; // trailing edge float aFull = sweepSign >= 0 ? halfAngle : -halfAngle; // far edge float aEnd = Mathf.Lerp(aStart, aFull, Mathf.Clamp01(reveal)); // current leading edge of the sweep + float aBase = aStart; + if (angularWindowRad > 0f) // smear mode: only the trailing band behind the leading edge + aBase = sweepSign >= 0 ? Mathf.Max(aStart, aEnd - angularWindowRad) : Mathf.Min(aStart, aEnd + angularWindowRad); var verts = new Vector3[(seg + 1) * 2]; var cols = new Color[(seg + 1) * 2]; var uvs = new Vector2[(seg + 1) * 2]; var tris = new int[seg * 6]; for (int i = 0; i <= seg; i++) { - float a = Mathf.Lerp(aStart, aEnd, i / (float)seg); + float a = Mathf.Lerp(aBase, aEnd, i / (float)seg); float sx = Mathf.Sin(a), cz = Mathf.Cos(a); - verts[i * 2] = new Vector3(sx * r0, 0f, cz * r0); - verts[i * 2 + 1] = new Vector3(sx * r1, 0f, cz * r1); + verts[i * 2] = new Vector3(sx * r0, y, cz * r0); + verts[i * 2 + 1] = new Vector3(sx * r1, y, cz * r1); float lead = i / (float)seg; // 0 trailing -> 1 leading edge (brightest at the travelling blade) - cols[i * 2] = new Color(1f, 1f, 1f, 0.55f * (0.2f + 0.8f * lead)); // inner, brightest at the leading edge + cols[i * 2] = new Color(1f, 1f, 1f, 0.35f * (0.2f + 0.8f * lead)); // 07-19 retone: a wake, not a laser // inner, brightest at the leading edge cols[i * 2 + 1] = new Color(1f, 1f, 1f, 0f); // outer rim fades out uvs[i * 2] = new Vector2(0.5f, 0.5f); uvs[i * 2 + 1] = new Vector2(0.5f, 0.5f); @@ -845,17 +870,68 @@ namespace ProjectM.Client // the range telegraph (MC-4 clarity) AND now SWEEPS across + ramps per combo step so the swing reads as a // directional, escalating cleave rather than a static flash. // C4: fire a brief presentation-only hit-stop hold, throttled (never Time.timeScale; the sim keeps ticking). - void TryHold() + void TryHold(int frames = 0) // 07-20 G5 (review C17): ONE hold path, per-verb frames (0 = the light default) { if (!FeelConfig.HitStopFreezeEnabled) return; double now = SystemAPI.Time.ElapsedTime; if (now - _lastHoldTime < 0.22) return; _lastHoldTime = now; - PrototypeCameraRig.Hold(FeelConfig.HitStopMaxFrames); + PrototypeCameraRig.Hold(frames > 0 ? frames : FeelConfig.HitStopMaxFrames); + } + + // 07-20 G2.1/G5 (review C14): the melee CONNECT package, fired when the blade actually LANDS. Recomputes + // aim + reach LIVE at the contact tick (the cast-turn kept steering since the swing edge) over the cached + // enemy snapshot; brightens the still-sweeping arc on a bite; the finisher hold is the G5 heavy beat. + void EvaluateMeleeConnect(float3 localPos, int step, int comboLen) + { + if (_localPlayer == Entity.Null || !EntityManager.Exists(_localPlayer)) return; + var cfg = VFXConfig.Instance; + bool finisher = step >= comboLen; + float range = 2.2f, half = 0.9f, finRange = 1.25f; + if (SystemAPI.TryGetSingleton(out var tcfg)) + { + if (tcfg.MeleeRange > 0f) range = tcfg.MeleeRange; + if (tcfg.MeleeConeHalfAngleRad > 0f) half = tcfg.MeleeConeHalfAngleRad; + if (tcfg.MeleeFinisherRangeMult > 0f) finRange = tcfg.MeleeFinisherRangeMult; + } + if (EntityManager.HasBuffer(_localPlayer)) + range = math.max(0f, StatMath.Apply(range, StatTarget.MeleeRange, + EntityManager.GetBuffer(_localPlayer, true))); + if (finisher) range *= finRange; + float2 fdir = new float2(0f, 1f); + if (EntityManager.HasComponent(_localPlayer) && EntityManager.HasComponent(_localPlayer)) + fdir = FacingMath.ResolveAim( + EntityManager.GetComponentData(_localPlayer).Aim, + EntityManager.GetComponentData(_localPlayer).Direction); + bool connected = false; Vector3 nearestHit = (Vector3)localPos; float ndist = float.MaxValue; + float cosHalf = Mathf.Cos(half); + foreach (var kv in _cache) + { + if (!kv.Value.IsEnemy) continue; + if (MeleeConeMath.InCone(localPos, fdir, range, cosHalf, kv.Value.Pos)) + { + float d2 = math.distancesq(localPos, kv.Value.Pos); + if (d2 < ndist) { ndist = d2; nearestHit = (Vector3)kv.Value.Pos; connected = true; } + } + } + if (connected) + { + Burst(_hitFx, cfg != null ? cfg.Hit : null, nearestHit + Vector3.up * 0.7f, FeelConfig.HitBurstCount); + PlayClip(_meleeConnectClip, nearestHit, FeelConfig.MeleeConnectVolume); + PrototypeCameraRig.PunchFov(FeelConfig.MeleeConnectFovKick, FeelConfig.HitStopDurationMs); + if (FeelConfig.RumbleEnabled && AimPresentation.Scheme == 1) + RumbleUtil.Pulse(FeelConfig.RumbleHit * 0.6f, FeelConfig.RumbleHit, FeelConfig.RumbleDurationSec); + if (_slashActive) _slashTint *= 1.4f; // the bite brighten, now AT the bite (UpdateSlash re-reads the tint) + } + if (finisher) + { + PrototypeCameraRig.PunchFov(FeelConfig.DashFovKick * 0.6f, FeelConfig.HitStopDurationMs); + TryHold(FeelConfig.FinisherHoldFrames); // G5: the heavy payoff beat, at contact + } } -void TriggerSlash(Vector3 pos, float2 facing, float range, float halfAngle, int step, int comboLen, bool connected) +void TriggerSlash(Vector3 pos, float2 facing, float range, float halfAngle, int step, int comboLen, bool connected, float lifeOverride = 0f) { if (_slashMr == null || _slashMat == null) return; bool finisher = step >= comboLen; @@ -870,14 +946,18 @@ void TriggerSlash(Vector3 pos, float2 facing, float range, float halfAngle, int // Per-step ramp so the chain visibly builds to the finisher (the steps were byte-identical before). float t = comboLen > 1 ? math.saturate((step - 1) / (float)(comboLen - 1)) : 1f; _slashTint = finisher - ? new Color(3.4f, 2.4f, 0.7f) // finisher: warm HDR flash - : Color.Lerp(new Color(1.2f, 1.9f, 2.6f), new Color(1.9f, 2.8f, 3.4f), t); // cool, brighter per step - if (connected) _slashTint *= 1.6f; // brighter arc on a confirmed bite (the immediate "you hit" read) - _slashLife = finisher ? 0.28f : Mathf.Lerp(0.15f, 0.20f, t); + ? new Color(1.7f, 1.25f, 0.5f) // finisher: lamp-warm accent (07-19 retone) + : Color.Lerp(new Color(0.5f, 0.9f, 1.05f), new Color(0.8f, 1.3f, 1.4f), t); // dim bioluminescent teal, brighter per step + if (connected) _slashTint *= 1.4f; // brighter arc on a confirmed bite (the immediate "you hit" read) + _slashTint *= Mathf.Max(0f, FeelConfig.MeleeArcIntensity); // 07-19 LANTERN retone: live dimmer knob + _slashLife = lifeOverride > 0f ? lifeOverride : (finisher ? 0.50f : Mathf.Lerp(0.30f, 0.38f, t)); // 07-20: melee passes a knob-derived life (reveal ends AT contact) _slashAge = 0f; _slashActive = true; _slashMat.color = _slashTint; _slashMr.enabled = true; + // 07-19 vibe: a few slow bubbles shed along the cleave path (the murk answers the swing). + if (_bubbleFx != null && FeelConfig.MeleeArcBubbles > 0) + EmitColored(_bubbleFx, pos + f * (range * 0.55f) + Vector3.up * 0.35f, FeelConfig.MeleeArcBubbles, new Color(0.75f, 0.95f, 1f, 0.8f)); } void UpdateSlash(float dt) @@ -885,13 +965,26 @@ void TriggerSlash(Vector3 pos, float2 facing, float range, float halfAngle, int if (!_slashActive || _slashMr == null) return; _slashAge += dt; float u = _slashAge / Mathf.Max(1e-4f, _slashLife); - if (u >= 1f) { _slashActive = false; _slashMr.enabled = false; return; } + if (u >= 1f) { _slashActive = false; _slashMr.enabled = false; if (_smearMr != null) _smearMr.enabled = false; return; } // MC-4 clarity: SWEEP the crescent open across the arc over the first ~60% of life (reads as a blade // travelling through the cleave), then hold + fade — instead of popping the whole cone at once. float reveal = Mathf.Clamp01(u / 0.6f); BuildSlashInto(_slashMesh, _slashRange, _slashHalf, reveal, _slashSweepSign); var c = _slashTint; c.a = u < 0.6f ? 1f : 1f - (u - 0.6f) / 0.4f; _slashMat.color = c; - _slashMr.transform.localScale = Vector3.one * (1f + u * 0.10f); + _slashMr.transform.localScale = Vector3.one * (1f + u * 0.06f); // 07-19: subtler drift + + // 07-20 G2.3: the blade-smear ribbon rides the arc's leading edge at blade height while the sweep runs + // (the reach trick: the swept edge reads FROM THE WEAPON, not as a floor decal alone). + bool smearShow = _smearMr != null && u < 0.75f; + if (_smearMr != null) _smearMr.enabled = smearShow; + if (smearShow) + { + BuildSlashInto(_smearMesh, _slashRange, _slashHalf, reveal, _slashSweepSign, + innerFrac: 0.7f, y: 0.95f, angularWindowRad: 0.25f); // thin band = streak, not a pane + var sc = _slashTint * 0.8f; + sc.a = (u < 0.6f ? 0.7f : 0.7f * (1f - (u - 0.6f) / 0.15f)); + _smearMat.color = sc; + } } // Remote teammates' melee cleave arcs (deferred-items pass, co-op readability): the local player's swing @@ -907,7 +1000,8 @@ void TriggerSlash(Vector3 pos, float2 facing, float range, float halfAngle, int int comboLen = SystemAPI.TryGetSingleton(out var tcfg) ? (int)math.clamp((int)tcfg.MeleeComboLength, 1, 3) : 3; float baseRange = tcfg.MeleeRange > 0f ? tcfg.MeleeRange : 2.6f; float baseHalf = tcfg.MeleeConeHalfAngleRad > 0f ? tcfg.MeleeConeHalfAngleRad : 0.9f; - float finisherMult = tcfg.MeleeFinisherMult > 0f ? tcfg.MeleeFinisherMult : 1.8f; + float finisherMult = tcfg.MeleeFinisherRangeMult > 0f ? tcfg.MeleeFinisherRangeMult : 1.25f; // 07-20 G2.2: REACH-only finisher mult + float remoteContactKnob = math.max(0f, tcfg.MeleeContactTicks); // 07-20 G2.4: remote sweeps track contact too _remoteSeen.Clear(); foreach (var (xf, facing, mc, entity) in @@ -930,7 +1024,8 @@ void TriggerSlash(Vector3 pos, float2 facing, float range, float halfAngle, int rs.Half = baseHalf; rs.SweepSign = (step % 2 == 0) ? -1 : 1; rs.Tint = FeelConfig.RemoteSlashColor * (finisher ? 1.5f : 1f); - rs.Life = finisher ? 0.26f : 0.18f; + rs.Life = Mathf.Max(finisher ? 0.50f : 0.34f, + (MeleeTiming.ContactTicks((byte)step, remoteContactKnob) / 60f) / 0.6f); // 07-20: reveal ends AT contact (knob-aware, review C13) rs.Age = 0f; rs.Active = true; BuildSlashInto(rs.Mesh, rs.Range, rs.Half, 0f, rs.SweepSign); @@ -955,7 +1050,7 @@ void TriggerSlash(Vector3 pos, float2 facing, float range, float halfAngle, int float reveal = Mathf.Clamp01(u / 0.6f); BuildSlashInto(rs.Mesh, rs.Range, rs.Half, reveal, rs.SweepSign); var c = rs.Tint; c.a = u < 0.6f ? 1f : 1f - (u - 0.6f) / 0.4f; rs.Mat.color = c; - tr.localScale = Vector3.one * (1f + u * 0.10f); + tr.localScale = Vector3.one * (1f + u * 0.06f); } } } diff --git a/Assets/_Project/Scripts/Client/Presentation/FeelConfig.cs b/Assets/_Project/Scripts/Client/Presentation/FeelConfig.cs index 3b90824f5..73143e089 100644 --- a/Assets/_Project/Scripts/Client/Presentation/FeelConfig.cs +++ b/Assets/_Project/Scripts/Client/Presentation/FeelConfig.cs @@ -153,6 +153,16 @@ namespace ProjectM.Client /// Shoulder-lamp beam range (m). public static float ShoulderLampRange; + /// Seconds the Menacing01 combat idle (CombatIdle state) holds after the last melee swing (0 = off). + public static float CombatIdleHoldSec; + + /// Melee slash-arc brightness multiplier (07-19 LANTERN retone: the WEAPON is the read, the arc is a water wake). + public static float MeleeArcIntensity; + /// Bubbles shed along a melee cleave (0 = off). + public static int MeleeArcBubbles; + /// Camera hold frames when the melee FINISHER lands (07-20 G5 impact ladder; light hits use HitStopMaxFrames). + public static int FinisherHoldFrames; + /// Master gate for gamepad rumble (no-op on KBM). public static bool RumbleEnabled; @@ -276,6 +286,10 @@ namespace ProjectM.Client RunNaturalSpeed = 2.6f; // measured: A_Run_FwdStrafeF_RootMotion_Masc averageSpeed (run ring) ShoulderLampIntensity = 8f; // 07-16e: the suit lamp actually lights (3 got lost in the murk ambient) ShoulderLampRange = 12f; + CombatIdleHoldSec = 4f; // 07-18: Menacing01 combat-idle hold after the last swing + MeleeArcIntensity = 1f; // 07-19: arc colors are pre-toned dim; this scales from there + MeleeArcBubbles = 6; + FinisherHoldFrames = 5; // 07-20 G5: the finisher's heavy beat (~83ms), capped well under the 8-frame ladder ceiling RumbleEnabled = true; @@ -289,7 +303,7 @@ namespace ProjectM.Client PlayerHurtFlashColor = new Color(2.6f, 0.55f, 0.4f, 1f); // C2: hot red-orange body flash when the player is hit BodyFlashDurationSec = 0.16f; RemoteSwingEnabled = true; - RemoteSlashColor = new Color(1.4f, 2.2f, 2.8f, 1f); // cool teammate arc + RemoteSlashColor = new Color(0.7f, 1.15f, 1.3f, 1f); // cool teammate arc (07-19 retone: dim bioluminescent wake) StrikeBeepEnabled = true; StrikeBeepVolume = 0.40f; StrikeBeepLeadTicks = 8; diff --git a/Assets/_Project/Scripts/Client/Presentation/PlayerAnimationDriveSystem.cs b/Assets/_Project/Scripts/Client/Presentation/PlayerAnimationDriveSystem.cs index 41434f893..e8e72130e 100644 --- a/Assets/_Project/Scripts/Client/Presentation/PlayerAnimationDriveSystem.cs +++ b/Assets/_Project/Scripts/Client/Presentation/PlayerAnimationDriveSystem.cs @@ -51,10 +51,11 @@ namespace ProjectM.Client static readonly FastAnimatorParameter k_ComboStep = new FastAnimatorParameter("ComboStep"); // replicated MeleeCombo.Step -> per-step swing clips (Swing1/2/3) static readonly FastAnimatorParameter k_IsCone = new FastAnimatorParameter("IsCone"); // ability archetype (replicated AbilityRef + blob): Cone -> two-hand slam, else the shot + static readonly FastAnimatorParameter k_InCombat = new FastAnimatorParameter("InCombat"); // 07-18: Menacing01 combat idle -- swing recency (FeelConfig.CombatIdleHoldSec) // Ticks after a swing-start that IsAttacking stays true (drives the MeleeSwing state). Kept < the swing lock - // (MeleeRecoverTicks ~16) so a CHAINED swing re-pulses the bool false->true and re-triggers the Any State - // transition per hit. ~0.22s @ 60Hz. Presentation-only. + // (MeleeRecoverTicks ~30) so a CHAINED swing re-pulses the bool false->true and re-triggers the Any State + // transition per hit. ~0.43s @ 60Hz (07-19 heavy retime). Presentation-only. const uint k_AttackAnimTicks = PlayerAimSystem.CastFacingTicks; // structurally tied (07-16 review): body-yaw cast-turn and the swing anim pulse must agree // Remote prevPos cache (per ghost Entity). Pruned every frame (a vanished remote = a despawn). @@ -85,6 +86,8 @@ static readonly FastAnimatorParameter k_ComboStep = new FastAnimatorParameter( NetworkTick serverTick = SystemAPI.TryGetSingleton(out var nt) ? nt.ServerTick : default; // Ability blob for the per-class special read (Cone -> slam anim); default(BlobAssetReference) if absent. var abilityBlob = SystemAPI.TryGetSingleton(out var adbSingleton) ? adbSingleton.Value : default; + // 07-18 combat idle: swing-recency window (the same wrap-safe SwingActive predicate as the anim pulse, wider). 60Hz sim ticks. + uint combatIdleTicks = (uint)math.max(1f, FeelConfig.CombatIdleHoldSec * 60f); // 07-16 banking: signed facing turn rate -> Bank (-1..1, + = bank right, leaning INTO the turn). // Sampled main-thread (a single local player), smoothed so the additive pose eases in and out. @@ -115,6 +118,7 @@ static readonly FastAnimatorParameter k_ComboStep = new FastAnimatorParameter( comboStep = k_ComboStep, isCone = k_IsCone, abilityDb = abilityBlob, serverTick = serverTick, attackTicks = k_AttackAnimTicks, bank = k_Bank, bankValue = _bankSmoothed, + inCombat = k_InCombat, combatIdleTicks = combatIdleTicks, strideScale = k_StrideScale, trudgeNaturalSpeed = math.max(0.5f, FeelConfig.TrudgeNaturalSpeed), runNaturalSpeed = math.max(0.5f, FeelConfig.RunNaturalSpeed), }; @@ -131,6 +135,7 @@ static readonly FastAnimatorParameter k_ComboStep = new FastAnimatorParameter( dt = dt, strideScale = k_StrideScale, trudgeNaturalSpeed = math.max(0.5f, FeelConfig.TrudgeNaturalSpeed), runNaturalSpeed = math.max(0.5f, FeelConfig.RunNaturalSpeed), + inCombat = k_InCombat, combatIdleTicks = combatIdleTicks, prevPos = _prevPos, seen = seen, }; @@ -162,6 +167,8 @@ static readonly FastAnimatorParameter k_ComboStep = new FastAnimatorParameter( { public FastAnimatorParameter bank; public float bankValue; + public FastAnimatorParameter inCombat; + public uint combatIdleTicks; public FastAnimatorParameter strideScale; public float trudgeNaturalSpeed; public float runNaturalSpeed; @@ -205,6 +212,7 @@ public FastAnimatorParameter moveX, moveZ, speed, isDead, isAttacking, isFiring, if (a.HasParameter(comboStep)) a.SetParameterValue(comboStep, (int)melee.Step); if (a.HasParameter(isCone)) a.SetParameterValue(isCone, coneL); + if (a.HasParameter(inCombat)) a.SetParameterValue(inCombat, TickWindowMath.SwingActive(melee, serverTick, combatIdleTicks)); } } @@ -225,6 +233,8 @@ public FastAnimatorParameter moveX, moveZ, speed, isDead, isAttacking, isFiring, public float runNaturalSpeed; public NativeParallelHashMap prevPos; public NativeParallelHashSet seen; + public FastAnimatorParameter inCombat; + public uint combatIdleTicks; void Execute( Entity e, @@ -257,6 +267,7 @@ public FastAnimatorParameter moveX, moveZ, speed, isDead, isAttacking, isFiring, a.SetParameterValue(strideScale, StrideScaleValue(math.length(vel.xz), stats.MoveSpeed, trudgeNaturalSpeed, runNaturalSpeed)); if (a.HasParameter(comboStep)) a.SetParameterValue(comboStep, (int)melee.Step); if (a.HasParameter(isCone)) a.SetParameterValue(isCone, coneR); + if (a.HasParameter(inCombat)) a.SetParameterValue(inCombat, TickWindowMath.SwingActive(melee, serverTick, combatIdleTicks)); } } diff --git a/Assets/_Project/Scripts/Editor/PlayerRigTools.cs b/Assets/_Project/Scripts/Editor/PlayerRigTools.cs index 56ce2ccc8..9170d0246 100644 --- a/Assets/_Project/Scripts/Editor/PlayerRigTools.cs +++ b/Assets/_Project/Scripts/Editor/PlayerRigTools.cs @@ -604,5 +604,242 @@ namespace ProjectM.EditorTools foreach (var c in sm.states) if (c.state.name == name) return c.state; return null; } - } + + + /// 07-18 melee-anim pass: swap the attack states onto AnimationSwordCombat pack clips + /// (LightCombo01 A/B/C -> Swing1/2/3, HeavyCombo01A -> SpecialSlam, Death_B_01 -> Death) and add the + /// Menacing01 combat idle (CombatIdle state + InCombat param; PlayerAnimationDriveSystem holds it for + /// FeelConfig.CombatIdleHoldSec after a swing). State speeds land each clip's HIT take inside the + /// 13-tick swing-anim window (CastFacingTicks ~0.22s + 0.12s exit blend). Idempotent / re-runnable. + [MenuItem("ProjectM/Animation/Player - Wire Sword Combat Attacks (LANTERN)")] + public static void WireSwordCombatAttackClips() + { + var ac = AssetDatabase.LoadAssetAtPath(PlayerController); + if (ac == null) { Debug.LogError($"[PlayerRigTools] Controller missing: {PlayerController}"); return; } + + const string packDir = "Assets/Synty/AnimationSwordCombat/Animations/Polygon/"; + AnimationClip PackClip(string fbxSub, string clipName) + { + foreach (var o in AssetDatabase.LoadAllAssetsAtPath(packDir + fbxSub + ".fbx")) + if (o is AnimationClip c && c.name == clipName) return c; + Debug.LogError($"[PlayerRigTools] SwordCombat clip missing: {fbxSub} -> {clipName}"); + return null; + } + + // Menacing01: the pack take ships loopTime=false -- flip it on the pack importer once (idempotent). + const string menacingFbx = "Idle/Menacing01/A_Idle_Menacing01_Sword"; + var menacing = PackClip(menacingFbx, "A_Idle_Menacing01_Sword"); + if (menacing != null && !menacing.isLooping) + { + var imp = AssetImporter.GetAtPath(packDir + menacingFbx + ".fbx") as ModelImporter; + var takes = (imp.clipAnimations != null && imp.clipAnimations.Length > 0) + ? imp.clipAnimations : imp.defaultClipAnimations; + foreach (var t in takes) t.loopTime = true; + imp.clipAnimations = takes; + imp.SaveAndReimport(); + menacing = PackClip(menacingFbx, "A_Idle_Menacing01_Sword"); + } + + // 07-19 retime: a custom SLAM take on the HeavyCombo01A fbx -- the stock windup is ~1s of the 2s clip, + // so the take starts ~22% in (leaves ~0.5s clip-time of windup before the hit; at speed 1.5 the strike + // lands ~0.35s into the 26-tick window) instead of comic 5x compression. Idempotent by take name. + { + string fbx = packDir + "Attack/HeavyCombo01/A_Attack_HeavyCombo01A_Sword.fbx"; + var imp = AssetImporter.GetAtPath(fbx) as ModelImporter; + var takes = (imp.clipAnimations != null && imp.clipAnimations.Length > 0) ? imp.clipAnimations : imp.defaultClipAnimations; + bool hasSlam = false; + ModelImporterClipAnimation full = null; + foreach (var tk in takes) + { + if (tk.name == "A_Attack_HeavyCombo01A_Slam_Sword") hasSlam = true; + if (tk.name == "A_Attack_HeavyCombo01A_Sword") full = tk; + } + if (!hasSlam && full != null) + { + var slam = imp.defaultClipAnimations[0]; // fresh instance (never mutate an existing take entry) + slam.name = "A_Attack_HeavyCombo01A_Slam_Sword"; + slam.firstFrame = Mathf.Lerp(full.firstFrame, full.lastFrame, 0.22f); + slam.lastFrame = full.lastFrame; + slam.loopTime = false; + var list = new System.Collections.Generic.List(takes) { slam }; + imp.clipAnimations = list.ToArray(); + imp.SaveAndReimport(); + } + else if (full == null) Debug.LogError("[PlayerRigTools] HeavyCombo01A full take not found -- slam take skipped."); + } + + var sm = ac.layers[0].stateMachine; + + // Attack/death states: full pack clip + a state speed that lands the HIT take inside the swing + // window. Hit-start seconds measured off the pack takes (= the WindUp take length). + var swaps = new (string state, string fbxSub, string clip, float speed)[] + { + ("Swing1", "Attack/LightCombo01/A_Attack_LightCombo01A_Sword", "A_Attack_LightCombo01A_Sword", 1.25f), // hit @0.33s -> ~0.27s (07-19 retime: 26-tick window) + ("Swing2", "Attack/LightCombo01/A_Attack_LightCombo01B_Sword", "A_Attack_LightCombo01B_Sword", 1.0f), // hit @0.17s natural speed + ("Swing3", "Attack/LightCombo01/A_Attack_LightCombo01C_Sword", "A_Attack_LightCombo01C_Sword", 1.1f), // finisher: hit @0.33s, heaviest of the chain + ("SpecialSlam", "Attack/HeavyCombo01/A_Attack_HeavyCombo01A_Sword", "A_Attack_HeavyCombo01A_Slam_Sword", 1.5f), // custom take (skips ~2/3 of the windup); hit ~0.35s + ("Death", "Death/A_Death_B_01_Sword", "A_Death_B_01_Sword", 1.0f), // backward collapse, holds last frame + }; + foreach (var s in swaps) + { + var st = FindState(sm, s.state); + var clip = PackClip(s.fbxSub, s.clip); + if (st == null || clip == null) { Debug.LogError($"[PlayerRigTools] Skipped {s.state} (state or clip missing)."); continue; } + st.motion = clip; + st.speed = s.speed; + } + + // 07-19 retime: soften the swing entries (0.03 read as a snap-cut) + exits, matching the heavy cadence. + foreach (var tr in sm.anyStateTransitions) + { + if (tr.destinationState == null) continue; + string dn = tr.destinationState.name; + if (dn == "Swing1" || dn == "Swing2" || dn == "Swing3") tr.duration = 0.06f; + else if (dn == "SpecialSlam") tr.duration = 0.07f; + } + foreach (var sn in new[] { "Swing1", "Swing2", "Swing3", "SpecialSlam" }) + { + var st2 = FindState(sm, sn); + if (st2 == null) continue; + foreach (var tr in st2.transitions) if (tr.isExit) tr.duration = 0.15f; + } + + // InCombat param + the CombatIdle (Menacing01) state. Idle -> CombatIdle is appended AFTER the + // existing Idle -> Locomotion transition, so movement keeps priority while InCombat holds. + bool hasInCombat = false; + foreach (var p in ac.parameters) if (p.name == "InCombat") hasInCombat = true; + if (!hasInCombat) ac.AddParameter("InCombat", AnimatorControllerParameterType.Bool); + + var idle = FindState(sm, "Idle"); + var loco = FindState(sm, "Locomotion"); + var combatIdle = FindState(sm, "CombatIdle"); + if (combatIdle == null && menacing != null && idle != null && loco != null) + { + combatIdle = sm.AddState("CombatIdle"); + var toCombat = idle.AddTransition(combatIdle); + toCombat.hasExitTime = false; toCombat.duration = 0.25f; + toCombat.AddCondition(AnimatorConditionMode.If, 0f, "InCombat"); + var toIdle = combatIdle.AddTransition(idle); + toIdle.hasExitTime = false; toIdle.duration = 0.4f; + toIdle.AddCondition(AnimatorConditionMode.IfNot, 0f, "InCombat"); + var toLoco = combatIdle.AddTransition(loco); + toLoco.hasExitTime = false; toLoco.duration = 0.25f; + toLoco.AddCondition(AnimatorConditionMode.Greater, 0.1f, "Speed"); + } + if (combatIdle != null && menacing != null) { combatIdle.motion = menacing; combatIdle.speed = 1f; } + + EditorUtility.SetDirty(ac); + AssetDatabase.SaveAssets(); + Debug.Log("[PlayerRigTools] SwordCombat wired: Swing1/2/3 = LightCombo01 A/B/C, SpecialSlam = HeavyCombo01A, Death = Death_B_01, CombatIdle = Menacing01."); + } + + // 07-19 grip offset (Hand_R bone-local). Iterate these + re-run Attach Melee Weapon if the grip reads wrong. + static readonly Vector3 WeaponGripPos = new Vector3(0f, 0.06f, 0.02f); + static readonly Vector3 WeaponGripEuler = new Vector3(0f, 0f, -90f); + const float WeaponScale = 1.25f; // 07-20 G2.3 (reach honesty): the Synty-proportion exaggeration that sells the 2.2m cone + + /// 07-19 melee feel: rigid-skin a bulky Synty salvage axe into the RIGHT hand (100% Hand_R; + /// GraftSmr's rebase conventions: world-rest verts + rigid inverse bindpose; RecalculateTangents or + /// Rukhanka/BRG registration fails and the whole rig vanishes). An SMR so Rukhanka + Entities-Graphics + /// deform it with the rig like the suit kit. Idempotent / re-runnable. + [MenuItem("ProjectM/Animation/Player - Attach Melee Weapon (LANTERN)")] + public static void AttachMeleeWeapon() + { + const string weaponFbx = "Assets/Synty/PolygonDungeonRealms/Models/SM_Wep_Axe_Large_01.fbx"; + const string matPath = "Assets/_Project/Materials/M_Weapon_Animated.mat"; + const string bodyMat = "Assets/_Project/Materials/M_SuitFrame_Bathynaut_Animated.mat"; + const string output = "Assets/_Project/Prefabs/Player.prefab"; + const string childName = "SM_Wep_Melee"; + const string meshPath = "Assets/_Project/Art/Models/Rebased_SM_Wep_Melee.asset"; + + var src = AssetDatabase.LoadAssetAtPath(weaponFbx); + if (src == null) { Debug.LogError($"[PlayerRigTools] Weapon fbx missing: {weaponFbx}"); return; } + var srcMf = src.GetComponentInChildren(true); + if (srcMf == null || srcMf.sharedMesh == null) { Debug.LogError("[PlayerRigTools] Weapon mesh missing."); return; } + var srcMesh = srcMf.sharedMesh; + + // Deformation-aware material: clone the suit's AnimatedLit material, swap the atlas to the weapon pack's. + var mat = AssetDatabase.LoadAssetAtPath(matPath); + if (mat == null) + { + var body = AssetDatabase.LoadAssetAtPath(bodyMat); + if (body == null) { Debug.LogError($"[PlayerRigTools] Body material missing: {bodyMat}"); return; } + mat = new Material(body) { name = "M_Weapon_Animated" }; + // EXPLICIT pack atlas (07-19 fix): the FBX's importer material carries NO texture, so a mainTexture + // fallback silently keeps the cloned suit atlas (caught by the material-VALUES check, not the render). + var atlas = AssetDatabase.LoadAssetAtPath("Assets/Synty/PolygonDungeonRealms/Textures/Dungeons_2_Texture_01_A.png"); + if (atlas == null) { var srcMr = srcMf.GetComponent(); atlas = srcMr != null && srcMr.sharedMaterial != null ? srcMr.sharedMaterial.mainTexture : null; } + if (atlas != null && mat.HasProperty("_BaseColorMap")) mat.SetTexture("_BaseColorMap", atlas); + else Debug.LogWarning("[PlayerRigTools] Weapon atlas not resolved -- material keeps the cloned suit atlas."); + AssetDatabase.CreateAsset(mat, matPath); + } + + var root = PrefabUtility.LoadPrefabContents(output); + try + { + Transform hand = null; + foreach (var t in root.GetComponentsInChildren(true)) if (t.name == "Hand_R") { hand = t; break; } + if (hand == null) { Debug.LogError("[PlayerRigTools] Hand_R not found on Player.prefab."); return; } + + // Rigid rest matrices (GraftSmr conventions: scale-stripped rest, feet-at-0 prefab space). + var hm = hand.localToWorldMatrix; + var handRigid = Matrix4x4.TRS((Vector3)hm.GetColumn(3), hm.rotation, Vector3.one); + var grip = Matrix4x4.TRS(WeaponGripPos, Quaternion.Euler(WeaponGripEuler), Vector3.one * WeaponScale); // uniform scale: normals keep their directions + var toWorld = handRigid * grip; + + var verts = srcMesh.vertices; + var norms = srcMesh.normals; + var newVerts = new Vector3[verts.Length]; + var newNorms = new Vector3[norms.Length]; + for (int v = 0; v < verts.Length; v++) + { + newVerts[v] = toWorld.MultiplyPoint3x4(verts[v]); + newNorms[v] = toWorld.rotation * norms[v]; + } + var weights = new BoneWeight[verts.Length]; + for (int v = 0; v < verts.Length; v++) weights[v] = new BoneWeight { boneIndex0 = 0, weight0 = 1f }; + + var mesh = AssetDatabase.LoadAssetAtPath(meshPath); + bool fresh = mesh == null; + if (fresh) mesh = new Mesh(); else mesh.Clear(); + mesh.name = "Rebased_" + childName; + mesh.vertices = newVerts; + mesh.normals = newNorms; + mesh.uv = srcMesh.uv; + mesh.subMeshCount = srcMesh.subMeshCount; + for (int s = 0; s < srcMesh.subMeshCount; s++) mesh.SetTriangles(srcMesh.GetTriangles(s), s); + mesh.boneWeights = weights; + mesh.bindposes = new[] { handRigid.inverse }; + mesh.RecalculateBounds(); + mesh.RecalculateTangents(); // Rukhanka/BRG registration fails on a tangent-less mesh + if (fresh) AssetDatabase.CreateAsset(mesh, meshPath); else EditorUtility.SetDirty(mesh); + + var old = root.transform.Find(childName); + if (old != null) Object.DestroyImmediate(old.gameObject); + var go = new GameObject(childName); + go.transform.SetParent(root.transform, false); + var smr = go.AddComponent(); + smr.sharedMesh = mesh; + smr.bones = new[] { hand }; + smr.rootBone = hand; + // Bounds in rootBone (hand) space = the grip-transformed source verts. + var bmin = new Vector3(float.MaxValue, float.MaxValue, float.MaxValue); + var bmax = new Vector3(float.MinValue, float.MinValue, float.MinValue); + for (int v = 0; v < verts.Length; v++) + { + var p = grip.MultiplyPoint3x4(verts[v]); + bmin = Vector3.Min(bmin, p); bmax = Vector3.Max(bmax, p); + } + var lb = new Bounds(); lb.SetMinMax(bmin, bmax); + smr.localBounds = lb; + smr.sharedMaterials = new[] { mat }; + + PrefabUtility.SaveAsPrefabAsset(root, output); + } + finally { PrefabUtility.UnloadPrefabContents(root); } + AssetDatabase.SaveAssets(); + Debug.Log($"[PlayerRigTools] Melee weapon attached to Hand_R ({srcMesh.vertexCount}v, grip pos {WeaponGripPos} euler {WeaponGripEuler})."); + } + +} } diff --git a/Assets/_Project/Scripts/Simulation/Combat/MeleeTiming.cs b/Assets/_Project/Scripts/Simulation/Combat/MeleeTiming.cs new file mode 100644 index 000000000..0db400090 --- /dev/null +++ b/Assets/_Project/Scripts/Simulation/Combat/MeleeTiming.cs @@ -0,0 +1,28 @@ +using Unity.Mathematics; + +namespace ProjectM.Simulation +{ + /// 07-20 melee feel forks (guidelines G2.1): the per-step CONTACT tick — how many ticks after + /// SwingStartTick the blade actually lands. The server cleave resolves THEN (not at swing start), so the + /// damage cone is a true record of the visible hit. Fractions derive from the AC_PlayerTopDown clip contact + /// seconds at the wired state speeds (PlayerRigTools swaps table: A hit@0.267s, B hit@0.167s, C hit@0.333s + /// @60Hz): step2 = x0.625 (10t at the default), step3+ (finisher) = x1.25 (20t). Knob = TuningConfig + /// .MeleeContactTicks (default 16); 0 = IMMEDIATE (legacy same-tick resolve; the mechanics tests pin 0). + /// COUPLING (documented, not clamped): keep contact(step3) < CastFacingTicks (26) and < MeleeRecoverTicks — + /// the cast-turn/anim window and chain cadence assume the hit lands inside both. The cleave itself is safe at + /// ANY knob value (MeleeComboSystem flushes a still-armed pending cleave before overwriting the swing). + public static class MeleeTiming + { + /// Server tick-batching slack: the buffered-attack validity window past the unlock edge must + /// cover Netcode's default MaxSimulationStepBatchSize (4) or an edge press drops under load (design + /// review wf_000bc247 C1). + public const uint BatchSlackTicks = 4; + + public static uint ContactTicks(byte step, float contactKnob) + { + if (contactKnob <= 0f) return 0u; // 0 = immediate (legacy same-tick resolve) + float f = step == 2 ? 0.625f : step >= 3 ? 1.25f : 1f; + return (uint)math.max(0f, math.round(contactKnob * f)); + } + } +} diff --git a/Assets/_Project/Scripts/Simulation/Combat/MeleeTiming.cs.meta b/Assets/_Project/Scripts/Simulation/Combat/MeleeTiming.cs.meta new file mode 100644 index 000000000..851d5492e --- /dev/null +++ b/Assets/_Project/Scripts/Simulation/Combat/MeleeTiming.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 4354c9c60079e0a44a0985ef7065d574 \ No newline at end of file diff --git a/Assets/_Project/Scripts/Simulation/Debug/TuningConfig.cs b/Assets/_Project/Scripts/Simulation/Debug/TuningConfig.cs index 3c8f7079d..9df620061 100644 --- a/Assets/_Project/Scripts/Simulation/Debug/TuningConfig.cs +++ b/Assets/_Project/Scripts/Simulation/Debug/TuningConfig.cs @@ -46,6 +46,14 @@ namespace ProjectM.Simulation public float MeleeFinisherMult; public float MeleeComboLength; + // 07-20 melee feel forks (guidelines G2/G7, design review wf_000bc247): + /// Finisher REACH multiplier (reach honesty G2.2) — MeleeFinisherMult keeps damage/recover/knockback only. + public float MeleeFinisherRangeMult; + /// Attack input-buffer window (ticks before unlock a press is remembered). 0 = off. + public float MeleeBufferTicks; + /// Base contact delay (ticks from swing start to the blade landing; per-step via MeleeTiming). 0 = IMMEDIATE (legacy same-tick cleave). + public float MeleeContactTicks; + // EB-1 fortress aggro: a <1 multiplier on a Husk's SQUARED distance to a structure (so structures are // preferred targets); a closer player 'in the way' still wins. Read server-side by EnemyAISystem. public float StructureAggroWeight; @@ -76,15 +84,18 @@ namespace ProjectM.Simulation ChargerLungeDurationTicks = 18f, ChargerWhiffStaggerTicks = 36f, GruntWindupTicks = Tuning.AttackWindupTicks, // canonical Grunt-windup source (TelegraphTests couples to it) - MeleeDamage = 18f, - MeleeRange = 2.6f, + MeleeDamage = 30f, // 07-19 heavy-weapon retime: bigger hit, slower cadence (DPS ~held: 18/0.27s -> 30/0.50s) + MeleeRange = 2.2f, // 07-20 G2.2 reach honesty: axe tip ~1.8m + a 0.4m player-favoring margin (was 2.6) MeleeConeHalfAngleRad = 0.9f, // ~51.5 deg half-angle (~103 deg cleave arc) - MeleeRecoverTicks = 16f, // light-swing lock/recovery (~0.27s) - MeleeChainGraceTicks = 18f, // window after the lock to chain the next hit (~0.3s) + MeleeRecoverTicks = 30f, // heavy-swing lock/recovery (~0.50s; 07-19 weighty-melee retime) + MeleeChainGraceTicks = 24f, // window after the lock to chain the next hit (~0.4s) MeleeSwingMoveScale = 0.35f, // movement-commit while swinging (0..1) MeleeKnockbackSpeed = 6f, - MeleeFinisherMult = 1.8f, // finisher (last hit) scales dmg/range/recover/knockback + MeleeFinisherMult = 1.5f, // finisher (last hit) scales dmg/range/recover/knockback (07-19: 1.8 -> 1.5, recover was ballooning at the heavy cadence) MeleeComboLength = 3f, // light, light, finisher + MeleeFinisherRangeMult = 1.25f, // 07-20 G2.2: finisher REACH (damage/recover/knockback keep MeleeFinisherMult) + MeleeBufferTicks = 8f, // 07-20 G7: attack press remembered in the last ~0.13s of a lock (0 = off) + MeleeContactTicks = 16f, // 07-20 G2.1: blade lands ~0.27s after swing start (per-step via MeleeTiming; 0 = legacy immediate) StructureAggroWeight = 0.7f, // EB-1: <1 prefers structures (fortress aggro); live-tunable StaggerKnockbackSpeed = 7f, // B2 poise: kb.Speed >= this interrupts windups/lunges; below = nudge only SeparationMaxSpeed = 3f, // B1: max separation push (units/s) so soft-collision can't fling @@ -116,6 +127,9 @@ namespace ProjectM.Simulation case TuningKnob.CastTurnRateDeg: case TuningKnob.MoveSharpness: case TuningKnob.SeparationMaxSpeed: + case TuningKnob.MeleeFinisherRangeMult: + case TuningKnob.MeleeBufferTicks: // 07-20: 0 = buffer OFF sentinel (must survive ClampKnob — review C10) + case TuningKnob.MeleeContactTicks: // 07-20: 0 = IMMEDIATE sentinel (legacy same-tick cleave) return math.max(0f, value); // tick knobs: >= 1 (a 0 tick count is degenerate; a 0 i-frame window divides-by-zero in DashSystem). // FinalSiegeMultiplier also lands here on purpose — a final siege should never be < 1x a normal one. @@ -155,6 +169,9 @@ namespace ProjectM.Simulation case TuningKnob.TurnRateDeg: c.TurnRateDeg = value; break; case TuningKnob.CastTurnRateDeg: c.CastTurnRateDeg = value; break; case TuningKnob.MoveSharpness: c.MoveSharpness = value; break; + case TuningKnob.MeleeBufferTicks: c.MeleeBufferTicks = value; break; + case TuningKnob.MeleeFinisherRangeMult: c.MeleeFinisherRangeMult = value; break; + case TuningKnob.MeleeContactTicks: c.MeleeContactTicks = value; break; // unknown index -> no-op (matches the no-default switch convention in DebugCommandReceiveSystem) } @@ -190,6 +207,9 @@ namespace ProjectM.Simulation case TuningKnob.TurnRateDeg: return c.TurnRateDeg; case TuningKnob.CastTurnRateDeg: return c.CastTurnRateDeg; case TuningKnob.MoveSharpness: return c.MoveSharpness; + case TuningKnob.MeleeBufferTicks: return c.MeleeBufferTicks; + case TuningKnob.MeleeFinisherRangeMult: return c.MeleeFinisherRangeMult; + case TuningKnob.MeleeContactTicks: return c.MeleeContactTicks; default: return 0f; } @@ -223,6 +243,9 @@ namespace ProjectM.Simulation TurnRateDeg = c.TurnRateDeg, CastTurnRateDeg = c.CastTurnRateDeg, MoveSharpness = c.MoveSharpness, + MeleeBufferTicks = c.MeleeBufferTicks, + MeleeFinisherRangeMult = c.MeleeFinisherRangeMult, + MeleeContactTicks = c.MeleeContactTicks, }; @@ -254,6 +277,9 @@ namespace ProjectM.Simulation TurnRateDeg = r.TurnRateDeg, CastTurnRateDeg = r.CastTurnRateDeg, MoveSharpness = r.MoveSharpness, + MeleeBufferTicks = r.MeleeBufferTicks, + MeleeFinisherRangeMult = r.MeleeFinisherRangeMult, + MeleeContactTicks = r.MeleeContactTicks, }; } @@ -289,9 +315,12 @@ namespace ProjectM.Simulation public const byte TurnRateDeg = 26; public const byte CastTurnRateDeg = 27; public const byte MoveSharpness = 28; + public const byte MeleeBufferTicks = 29; // 07-20 G7 (0 = off sentinel) + public const byte MeleeFinisherRangeMult = 30; // 07-20 G2.2 + public const byte MeleeContactTicks = 31; // 07-20 G2.1 (0 = immediate sentinel) /// Knob count (overlay iteration bound). - public const byte Count = 29; + public const byte Count = 32; } /// @@ -327,6 +356,9 @@ namespace ProjectM.Simulation public float TurnRateDeg; public float CastTurnRateDeg; public float MoveSharpness; + public float MeleeBufferTicks; // 07-20 melee feel forks (dev-protocol bump: rebuild both peers) + public float MeleeFinisherRangeMult; + public float MeleeContactTicks; } // NOTE: appending fields = a DEV-PROTOCOL BUMP (RpcCollection hash) — rebuild both peers together. diff --git a/Assets/_Project/Scripts/Simulation/Player/DashSystem.cs b/Assets/_Project/Scripts/Simulation/Player/DashSystem.cs index ea7cfbdb6..8d3ce5e99 100644 --- a/Assets/_Project/Scripts/Simulation/Player/DashSystem.cs +++ b/Assets/_Project/Scripts/Simulation/Player/DashSystem.cs @@ -35,6 +35,15 @@ namespace ProjectM.Simulation const float DefaultSharpness = CharacterComponent.DefaultGroundedSharpness; // CharacterComponent.GetDefault() base const float SimTickRate = 60f; + // 07-20 G7 dash law (design review wf_000bc247 C4): a LOOKUP, not a query add -- melee-less entities + // (dash test harnesses) must keep dashing; only entities that carry MeleeCombo get the commitment rule. + ComponentLookup m_MeleeLookup; + + public void OnCreate(ref SystemState state) + { + m_MeleeLookup = state.GetComponentLookup(isReadOnly: true); + } + [BurstCompile] public void OnUpdate(ref SystemState state) { @@ -50,19 +59,31 @@ namespace ProjectM.Simulation float dashSharpness = t.DashSharpness; // 07-15 underwater feel: the restore target honors the MoveSharpness dev-override (0 = authored const). float baseSharpness = t.MoveSharpness > 0f ? t.MoveSharpness : DefaultSharpness; + float contactKnob = math.max(0f, t.MeleeContactTicks); // 07-20 G7: pre-contact swing = dash refused + m_MeleeLookup.Update(ref state); - foreach (var (ds, cd, control, character, input, facing) in + foreach (var (ds, cd, control, character, input, facing, entity) in SystemAPI.Query, RefRW, RefRW, RefRW, RefRO, RefRO>() - .WithAll().WithDisabled()) + .WithAll().WithDisabled().WithEntityAccess()) { // --- START (idempotent: fresh press + cooldown ready + not already mid-dash) --- bool ready = cd.ValueRO.NextTick == 0u || !new NetworkTick(cd.ValueRO.NextTick).IsNewerThan(serverTick); bool inWindow = ds.ValueRO.RecoverUntilTick != 0u && new NetworkTick(ds.ValueRO.RecoverUntilTick).IsNewerThan(serverTick); - if (input.ValueRO.Dash.IsSet && ready && !inWindow) + // 07-20 G7 (the Bathynaut COMMITS): a dash start is refused while a swing is PRE-CONTACT -- the + // blade hasn't landed; post-contact recovery dash-cancel stays allowed. Same wrap-safe window + // family as the anim pulse (TickWindowMath.SwingActive over the per-step contact ticks); + // contact knob 0 -> zero-length window -> no refusal (legacy). Deterministic both worlds. + bool preContactCommit = false; + if (m_MeleeLookup.HasComponent(entity)) + { + var mcRO = m_MeleeLookup[entity]; + preContactCommit = TickWindowMath.SwingActive(mcRO, serverTick, MeleeTiming.ContactTicks(mcRO.Step, contactKnob)); + } + if (input.ValueRO.Dash.IsSet && ready && !inWindow && !preContactCommit) { // C1 + 07-15 fork: dash toward MOVEMENT input when moving (a panic 'dash away' still works); else // toward the CURSOR aim (stationary aim-and-dash keeps today's KBM feel under move-facing — diff --git a/Assets/_Project/Scripts/Simulation/Player/MeleeCombo.cs b/Assets/_Project/Scripts/Simulation/Player/MeleeCombo.cs index 156798d02..7cff51248 100644 --- a/Assets/_Project/Scripts/Simulation/Player/MeleeCombo.cs +++ b/Assets/_Project/Scripts/Simulation/Player/MeleeCombo.cs @@ -28,5 +28,25 @@ namespace ProjectM.Simulation /// Raw ServerTick the swing's movement-commit / recovery lock ends (NonZero). Gates the next press /// (locked while now < this) and anchors the chain window [LockUntilTick, LockUntilTick + grace). [GhostField] public uint LockUntilTick; + + /// 07-20 (guidelines G7 input buffer): raw ServerTick of an Attack press that landed during the + /// swing lock's LAST MeleeBufferTicks (NonZero; 0 = empty). Consumed (zeroed) when it starts the chained + /// swing; validity is anchored to the UNLOCK edge, not the press tick, so server tick-batching cannot + /// drop an edge press (design review wf_000bc247 C1). Predicted + rollback-restored like its siblings. + [GhostField] public uint BufferedAttackTick; + } + + /// 07-20 (guidelines G2.1 damage-at-contact): SERVER-ONLY scheduled cleave — the AttackWindup + /// schedule-and-consume idiom, entity-local (design review wf_000bc247 C11: no container, no disposal, no + /// staleness window). Stamped when a swing starts (ResolveTick = start + MeleeTiming.ContactTicks), fired on + /// a wrap-safe elapsed compare (tick-batch-proof), CONSUMED by zeroing. A still-armed pending is FLUSHED + /// (fired early) before a chained swing overwrites it, so no knob combination can lose a cleave (C0/C12). + /// Not replicated; the client's contact cues are presentation-side (CombatFeedbackSystem). Baked zeroed. + public struct MeleeCleavePending : IComponentData + { + /// NonZero tick the armed swing's blade lands; 0 = nothing pending. + public uint ResolveTick; + /// Combo step of the ARMED swing (finisher scaling resolved against the live combo length). + public byte Step; } } diff --git a/Assets/_Project/Scripts/Simulation/Player/MeleeComboSystem.cs b/Assets/_Project/Scripts/Simulation/Player/MeleeComboSystem.cs index cb0d6eddf..1e5d773f1 100644 --- a/Assets/_Project/Scripts/Simulation/Player/MeleeComboSystem.cs +++ b/Assets/_Project/Scripts/Simulation/Player/MeleeComboSystem.cs @@ -58,10 +58,38 @@ namespace ProjectM.Simulation BufferLookup m_InvLookup; BufferLookup m_StatModLookup; ComponentLookup m_BoonEffectsLookup; // Phase 1.7 (player query is at the 7-type cap -> lookup) + ComponentLookup m_PendingLookup; // 07-20 G2.1 scheduled cleave (query at cap -> lookup) /// Phase 1.7 Detonating Finisher blast radius (planar, tunable). const float k_DetonateRadius = 3.5f; + /// 07-20 G2.1: build a cleave payload from LIVE player state at the moment it FIRES (contact tick, + /// flush, or legacy same-tick) -- the cast-turn keeps steering the cone until the blade lands. Static with + /// explicit params (no captures) so Burst lowering stays trivial. Reach uses the RANGE-only finisher mult + /// (G2.2); damage/knockback keep the classic finisher mult. + static PendingCleave BuildCleave(byte step, byte comboLen, float baseDamage, float baseRange, float knockSpeed, + float finisherMult, float finisherRangeMult, uint stamp, uint knockUntil, float3 from, float2 aim, + float2 facingDir, int ownerId, byte bflags, bool hasMods, DynamicBuffer mods) + { + bool fin = step >= comboLen; + float d = math.max(0f, hasMods ? StatMath.Apply(baseDamage, StatTarget.MeleeDamage, mods) : baseDamage); + float r = math.max(0f, hasMods ? StatMath.Apply(baseRange, StatTarget.MeleeRange, mods) : baseRange); + return new PendingCleave + { + From = from, + Face = FacingMath.ResolveAim(aim, facingDir), + Damage = fin ? d * finisherMult : d, + Range = fin ? r * finisherRangeMult : r, + KnockSpeed = fin ? knockSpeed * finisherMult : knockSpeed, + OwnerId = ownerId, + Stamp = stamp, + KnockUntil = knockUntil, + IsFinisher = fin, + Detonate = (bflags & BoonFlag.FinisherDetonate) != 0, + Pull = (bflags & BoonFlag.KnockToPull) != 0, + }; + } + [BurstCompile] public void OnCreate(ref SystemState state) { @@ -72,6 +100,7 @@ namespace ProjectM.Simulation m_InvLookup = state.GetBufferLookup(isReadOnly: false); m_StatModLookup = state.GetBufferLookup(isReadOnly: true); m_BoonEffectsLookup = state.GetComponentLookup(isReadOnly: true); + m_PendingLookup = state.GetComponentLookup(isReadOnly: false); state.RequireForUpdate(); } @@ -92,6 +121,9 @@ namespace ProjectM.Simulation float moveScale = math.max(0f, t.MeleeSwingMoveScale); float knockSpeed = math.max(0f, t.MeleeKnockbackSpeed); float finisherMult = math.max(1f, t.MeleeFinisherMult); + float finisherRangeMult = math.max(0f, t.MeleeFinisherRangeMult); // 07-20 G2.2: REACH-only finisher scaling + float bufferKnob = math.max(0f, t.MeleeBufferTicks); // 07-20 G7: 0 = buffer off + float contactKnob = math.max(0f, t.MeleeContactTicks); // 07-20 G2.1: 0 = immediate (legacy) byte comboLen = (byte)math.clamp((int)t.MeleeComboLength, 1, 3); uint stamp = TickUtil.NonZero(now); uint knockUntil = TickUtil.NonZero(now + (uint)math.max(1, Tuning.KnockbackDurationTicks)); @@ -103,6 +135,7 @@ namespace ProjectM.Simulation var cleaves = isServer ? new NativeList(Allocator.Temp) : default; m_StatModLookup.Update(ref state); m_BoonEffectsLookup.Update(ref state); // Phase 1.7: per-player boon flags (read inside the player loop) + m_PendingLookup.Update(ref state); // 07-20 G2.1: scheduled cleave slots (server-only writes) foreach (var (mc, control, input, facing, xform, owner, ds, entity) in SystemAPI.Query, RefRW, RefRO, @@ -119,10 +152,48 @@ namespace ProjectM.Simulation bool locked = mc.ValueRO.LockUntilTick != 0u && new NetworkTick(mc.ValueRO.LockUntilTick).IsNewerThan(serverTick); - // --- ADVANCE (idempotent ABSOLUTE writes; dash wins same-tick ties via !Dash.IsSet) --- + // --- 07-20 G2.1: fire a DUE scheduled cleave BEFORE anything can overwrite the swing this tick + // (wrap-safe elapsed compare = tick-batch-proof; consumed by zeroing -- the AttackWindup idiom, + // design review wf_000bc247 C11). Server-only; the pending slot never replicates. + bool hasPending = m_PendingLookup.HasComponent(entity); + if (isServer && hasPending) + { + var pend = m_PendingLookup[entity]; + if (pend.ResolveTick != 0u && !new NetworkTick(pend.ResolveTick).IsNewerThan(serverTick)) + { + cleaves.Add(BuildCleave(pend.Step, comboLen, baseDamage, baseRange, knockSpeed, + finisherMult, finisherRangeMult, stamp, knockUntil, xform.ValueRO.Position, + input.ValueRO.Aim, facing.ValueRO.Direction, owner.ValueRO.NetworkId, + m_BoonEffectsLookup.HasComponent(entity) ? m_BoonEffectsLookup[entity].Flags : (byte)0, + m_StatModLookup.HasBuffer(entity), m_StatModLookup.HasBuffer(entity) ? m_StatModLookup[entity] : default)); + m_PendingLookup[entity] = default; + } + } + + // --- 07-20 G7 buffer: a press in the lock's LAST MeleeBufferTicks is remembered; validity anchors + // to the UNLOCK edge so server tick-batching can't drop an edge press (review wf_000bc247 C1). --- + uint bufTicks = (uint)bufferKnob; + if (bufTicks > 0u && input.ValueRO.Attack.IsSet && locked) + { + var lockEnd = new NetworkTick(mc.ValueRO.LockUntilTick); + if (lockEnd.IsValid && lockEnd.TicksSince(serverTick) <= (int)bufTicks) + mc.ValueRW.BufferedAttackTick = TickUtil.NonZero(now); + } + bool buffered = false; + if (!locked && mc.ValueRO.BufferedAttackTick != 0u) + { + var lockEnd = new NetworkTick(mc.ValueRO.LockUntilTick); + if (bufTicks > 0u && lockEnd.IsValid && serverTick.TicksSince(lockEnd) <= (int)MeleeTiming.BatchSlackTicks) + buffered = true; + else + mc.ValueRW.BufferedAttackTick = 0u; // stale (missed the slack / buffer tuned off) -- drop + } + + // --- ADVANCE (idempotent ABSOLUTE writes; dash wins same-tick ties via !Dash.IsSet; a buffered + // press counts as a press -- G7) --- bool swingStarted = false; byte swingStep = 0; - if (input.ValueRO.Attack.IsSet && !locked && !dashActive && !input.ValueRO.Dash.IsSet) + if ((input.ValueRO.Attack.IsSet || buffered) && !locked && !dashActive && !input.ValueRO.Dash.IsSet) { bool inChainWindow = false; if (mc.ValueRO.LockUntilTick != 0u) @@ -139,6 +210,7 @@ namespace ProjectM.Simulation mc.ValueRW.Step = swingStep; mc.ValueRW.SwingStartTick = TickUtil.NonZero(now); mc.ValueRW.LockUntilTick = TickUtil.NonZero(now + stepRecover); + mc.ValueRW.BufferedAttackTick = 0u; // consumed (or superseded by a fresh press) swingStarted = true; } @@ -150,33 +222,33 @@ namespace ProjectM.Simulation if (inSwingWindow && !dashActive) control.ValueRW.MoveVelocity *= moveScale; - // --- SERVER: queue the cleave (resolved after the loop). Damage/cone are SERVER-authoritative. --- + // --- SERVER: schedule the cleave at the CONTACT tick (07-20 G2.1) -- or fire same-tick when the + // knob is 0 (legacy) / the entity has no pending slot (plain test worlds). Damage stays SERVER-only; + // payload is built from LIVE state at the moment it fires (the cast-turn steers until the blade lands). if (swingStarted && isServer) { - bool isFin = swingStep >= comboLen; - // Slice 2: fold the player's class/run StatModifiers onto the live-tunable melee base so the - // PRIMARY verb scales with class identity (Warrior +MeleeDamage/+reach) + run augments. - byte bflags = m_BoonEffectsLookup.HasComponent(entity) ? m_BoonEffectsLookup[entity].Flags : (byte)0; - bool hasMods = m_StatModLookup.HasBuffer(entity); - float pDamage = math.max(0f, hasMods ? StatMath.Apply(baseDamage, StatTarget.MeleeDamage, m_StatModLookup[entity]) : baseDamage); - float pRange = math.max(0f, hasMods ? StatMath.Apply(baseRange, StatTarget.MeleeRange, m_StatModLookup[entity]) : baseRange); - // Manual-aim cleave (07-15): the cone follows the CURRENT tick's replicated Aim (SoD skillshot - // grammar) — PlayerFacing is body-yaw only; the facing fallback covers a resting gamepad stick. - float2 face = FacingMath.ResolveAim(input.ValueRO.Aim, facing.ValueRO.Direction); - cleaves.Add(new PendingCleave + uint ct = MeleeTiming.ContactTicks(swingStep, contactKnob); + if (ct > 0u && hasPending) { - From = xform.ValueRO.Position, - Face = face, - Damage = isFin ? pDamage * finisherMult : pDamage, - Range = isFin ? pRange * finisherMult : pRange, - KnockSpeed = isFin ? knockSpeed * finisherMult : knockSpeed, - OwnerId = owner.ValueRO.NetworkId, - Stamp = stamp, - KnockUntil = knockUntil, - IsFinisher = isFin, - Detonate = (bflags & BoonFlag.FinisherDetonate) != 0, - Pull = (bflags & BoonFlag.KnockToPull) != 0, - }); + // FLUSH a still-armed older cleave first (pathological knob combos can push contact past the + // recover lock -- fire it early rather than lose it; review wf_000bc247 C0/C12). + var pend = m_PendingLookup[entity]; + if (pend.ResolveTick != 0u) + cleaves.Add(BuildCleave(pend.Step, comboLen, baseDamage, baseRange, knockSpeed, + finisherMult, finisherRangeMult, stamp, knockUntil, xform.ValueRO.Position, + input.ValueRO.Aim, facing.ValueRO.Direction, owner.ValueRO.NetworkId, + m_BoonEffectsLookup.HasComponent(entity) ? m_BoonEffectsLookup[entity].Flags : (byte)0, + m_StatModLookup.HasBuffer(entity), m_StatModLookup.HasBuffer(entity) ? m_StatModLookup[entity] : default)); + m_PendingLookup[entity] = new MeleeCleavePending { ResolveTick = TickUtil.NonZero(now + ct), Step = swingStep }; + } + else + { + cleaves.Add(BuildCleave(swingStep, comboLen, baseDamage, baseRange, knockSpeed, + finisherMult, finisherRangeMult, stamp, knockUntil, xform.ValueRO.Position, + input.ValueRO.Aim, facing.ValueRO.Direction, owner.ValueRO.NetworkId, + m_BoonEffectsLookup.HasComponent(entity) ? m_BoonEffectsLookup[entity].Flags : (byte)0, + m_StatModLookup.HasBuffer(entity), m_StatModLookup.HasBuffer(entity) ? m_StatModLookup[entity] : default)); + } } } diff --git a/Assets/_Project/Scripts/Simulation/Player/PlayerAimSystem.cs b/Assets/_Project/Scripts/Simulation/Player/PlayerAimSystem.cs index e4cbce11a..d983104c9 100644 --- a/Assets/_Project/Scripts/Simulation/Player/PlayerAimSystem.cs +++ b/Assets/_Project/Scripts/Simulation/Player/PlayerAimSystem.cs @@ -33,7 +33,7 @@ namespace ProjectM.Simulation /// Ticks facing stays aimed after a swing/fire starts (~0.22s @60Hz — matches the anim pulse /// k_AttackAnimTicks so body yaw and the swing animation agree). - public const uint CastFacingTicks = 13; + public const uint CastFacingTicks = 26; // 07-19 heavy-weapon retime: cast-turn + swing-anim window tracks the full ~0.43s swing (was 13; MUST stay < MeleeRecoverTicks so the anim pulse re-triggers between chained swings) [BurstCompile] public void OnUpdate(ref SystemState state) diff --git a/Assets/_Project/Tests/EditMode/MeleeComboTests.cs b/Assets/_Project/Tests/EditMode/MeleeComboTests.cs index 6735be609..3735e66aa 100644 --- a/Assets/_Project/Tests/EditMode/MeleeComboTests.cs +++ b/Assets/_Project/Tests/EditMode/MeleeComboTests.cs @@ -34,6 +34,17 @@ namespace ProjectM.Tests group.SortSystems(); world.SetTime(new TimeData(elapsedTime: 0f, deltaTime: 1f / 60f)); SetServerTick(world, tick); + // 07-19: PIN the melee knobs these mechanics tests were authored against. The LIVE feel defaults + // (TuningConfig.Defaults()) are free to drift for game feel (heavy-weapon retime moved recover 16->30, + // dmg 18->30, finisher 1.8->1.5); the chain/lock/cone MECHANICS under test are not. + var pinned = TuningConfig.Defaults(); + pinned.MeleeDamage = 18f; pinned.MeleeRange = 2.6f; pinned.MeleeConeHalfAngleRad = 0.9f; + pinned.MeleeRecoverTicks = 16f; pinned.MeleeChainGraceTicks = 18f; pinned.MeleeSwingMoveScale = 0.35f; + pinned.MeleeKnockbackSpeed = 6f; pinned.MeleeFinisherMult = 1.8f; pinned.MeleeComboLength = 3f; + // 07-20 forks pinned LEGACY: finisher reach = the old combined mult, buffer OFF, same-tick cleave + // (contact 0 = the IMMEDIATE sentinel) -- new-behavior tests override per-test. + pinned.MeleeFinisherRangeMult = 1.8f; pinned.MeleeBufferTicks = 0f; pinned.MeleeContactTicks = 0f; + world.EntityManager.SetComponentData(world.EntityManager.CreateEntity(typeof(TuningConfig)), pinned); return (world, group); } @@ -41,6 +52,7 @@ namespace ProjectM.Tests { var e = em.CreateEntity(); em.AddComponentData(e, new MeleeCombo()); + em.AddComponent(e); // 07-20 G2.1: the scheduled-cleave slot (baked zeroed on the real player) em.AddComponentData(e, new CharacterControl { MoveVelocity = float3.zero }); em.AddComponentData(e, new PlayerInput()); em.AddComponentData(e, new PlayerFacing { Direction = facing }); @@ -71,6 +83,15 @@ namespace ProjectM.Tests em.SetComponentData(player, pi); } + /// 07-20 (review C6): clear the held Attack event -- plain test worlds never clear InputEvents, + /// and a still-set Attack silently re-chains at any unlock tick the test advances across. + static void Release(EntityManager em, Entity player) + { + var pi = em.GetComponentData(player); + pi.Attack = default; + em.SetComponentData(player, pi); + } + // ---- state machine (plain world) ---- [Test] @@ -359,9 +380,11 @@ namespace ProjectM.Tests using (world) { var em = world.EntityManager; - var cfg = TuningConfig.Defaults(); + // Modify the MakeWorld-pinned singleton (a second TuningConfig entity would break TryGetSingleton). + var cfgEnt = em.CreateEntityQuery(typeof(TuningConfig)).GetSingletonEntity(); + var cfg = em.GetComponentData(cfgEnt); cfg.MeleeComboLength = 2f; - em.SetComponentData(em.CreateEntity(typeof(TuningConfig)), cfg); + em.SetComponentData(cfgEnt, cfg); var p = MakePlayer(em, new float2(0, 1)); em.SetComponentData(p, new MeleeCombo { Step = 1, SwingStartTick = 100, LockUntilTick = 116 }); // chain @@ -488,5 +511,117 @@ namespace ProjectM.Tests } } - } + + + // ---- 07-20 melee feel forks (guidelines G2.1/G7; design review wf_000bc247) ---- + + [Test] + public void Cleave_Resolves_At_The_Contact_Tick_Exactly_Once() + { + var (world, group) = MakeWorld("MeleeContactDelay", 100, server: true); + using (world) + { + var em = world.EntityManager; + // contact 16 / recover 24: the resolve tick (116) lands INSIDE the lock (124) so a held press + // cannot re-chain at the observation tick (review C6's collision trap). + var cfgEnt = em.CreateEntityQuery(typeof(TuningConfig)).GetSingletonEntity(); + var cfg = em.GetComponentData(cfgEnt); + cfg.MeleeContactTicks = 16f; cfg.MeleeRecoverTicks = 24f; + em.SetComponentData(cfgEnt, cfg); + + var p = MakePlayer(em, new float2(0, 1)); + var enemy = MakeEnemy(em, new float3(0, 0, 2)); + Press(em, p); + group.Update(); // tick 100: the swing starts; the cleave is SCHEDULED for 116 + Release(em, p); + Assert.AreEqual(1, em.GetComponentData(p).Step, "swing started"); + Assert.AreEqual(0, em.GetBuffer(enemy).Length, "no damage at the swing-start tick (the blade hasn't landed)"); + + SetServerTick(world, 108); group.Update(); + Assert.AreEqual(0, em.GetBuffer(enemy).Length, "no damage pre-contact"); + + SetServerTick(world, 116); group.Update(); // the blade lands + var d = em.GetBuffer(enemy); + Assert.AreEqual(1, d.Length, "exactly one cleave at the contact tick"); + Assert.AreEqual(116u, d[0].SourceTick, "damage is stamped with the CONTACT tick"); + + SetServerTick(world, 117); group.Update(); + Assert.AreEqual(1, em.GetBuffer(enemy).Length, "the pending cleave is consumed (no double resolve)"); + } + } + + [Test] + public void Buffered_Press_Starts_The_Chained_Swing_At_Unlock() + { + var (world, group) = MakeWorld("MeleeBuffer", 100, server: true); + using (world) + { + var em = world.EntityManager; + var cfgEnt = em.CreateEntityQuery(typeof(TuningConfig)).GetSingletonEntity(); + var cfg = em.GetComponentData(cfgEnt); + cfg.MeleeBufferTicks = 8f; // contact stays pinned 0 (legacy resolve; the buffer is what's under test) + em.SetComponentData(cfgEnt, cfg); + + var p = MakePlayer(em, new float2(0, 1)); + Press(em, p); + group.Update(); // tick 100: swing 1, lock until 116 (pinned recover 16) + Release(em, p); + Assert.AreEqual(1, em.GetComponentData(p).Step); + + SetServerTick(world, 110); Press(em, p); group.Update(); // locked, 6 ticks remain (<= 8): buffered + Release(em, p); + Assert.AreNotEqual(0u, em.GetComponentData(p).BufferedAttackTick, "the late press is remembered"); + Assert.AreEqual(1, em.GetComponentData(p).Step, "still swing 1 (locked)"); + + SetServerTick(world, 116); group.Update(); // unlock: the buffer fires the chain WITHOUT a live press + var mc = em.GetComponentData(p); + Assert.AreEqual(2, mc.Step, "the buffered press chains to swing 2 at the unlock tick"); + Assert.AreEqual(0u, mc.BufferedAttackTick, "the buffer is consumed"); + } + } + + [Test] + public void Dash_Is_Refused_Pre_Contact_And_Allowed_Post_Contact() + { + var world = new World("MeleeDashLaw", WorldFlags.Game | WorldFlags.GameServer); + using (world) + { + var group = world.GetOrCreateSystemManaged(); + group.AddSystemToUpdateList(world.GetOrCreateSystem()); + group.AddSystemToUpdateList(world.GetOrCreateSystem()); + group.SortSystems(); + world.SetTime(new TimeData(elapsedTime: 0f, deltaTime: 1f / 60f)); + SetServerTick(world, 100); + var em = world.EntityManager; + var pinned = TuningConfig.Defaults(); + pinned.MeleeDamage = 18f; pinned.MeleeRange = 2.6f; pinned.MeleeConeHalfAngleRad = 0.9f; + pinned.MeleeRecoverTicks = 30f; pinned.MeleeChainGraceTicks = 18f; pinned.MeleeSwingMoveScale = 0.35f; + pinned.MeleeKnockbackSpeed = 6f; pinned.MeleeFinisherMult = 1.8f; pinned.MeleeComboLength = 3f; + pinned.MeleeFinisherRangeMult = 1.8f; pinned.MeleeBufferTicks = 0f; + pinned.MeleeContactTicks = 16f; // the law under test needs a REAL pre-contact window + em.SetComponentData(em.CreateEntity(typeof(TuningConfig)), pinned); + + var p = MakePlayer(em, new float2(0, 1)); + em.AddComponentData(p, new DashCooldown { NextTick = 0 }); + em.AddComponentData(p, CharacterComponent.GetDefault()); + + Press(em, p); + group.Update(); // tick 100: swing 1 starts (contact at 116) + Release(em, p); + Assert.AreEqual(1, em.GetComponentData(p).Step, "swing started"); + + // pre-contact (tick 105): a dash press is REFUSED -- the Bathynaut commits (G7). + SetServerTick(world, 105); + var pi = em.GetComponentData(p); pi.Dash.Set(); em.SetComponentData(p, pi); + group.Update(); + Assert.AreEqual(0u, em.GetComponentData(p).StartTick, "dash refused while the blade is pre-contact"); + + // post-contact (tick 120, still inside the recover lock): the recovery dash-cancel opens. + SetServerTick(world, 120); + pi = em.GetComponentData(p); pi.Dash.Set(); em.SetComponentData(p, pi); + group.Update(); + Assert.AreEqual(120u, em.GetComponentData(p).StartTick, "post-contact recovery dash-cancel is allowed"); + } + } +} }