From aa4d6c3ce2b442706a03de03129ebfba997dc408 Mon Sep 17 00:00:00 2001 From: "DESKTOP-5RP3AKU\\Jisol" <2858626794@qq.com> Date: Thu, 1 Feb 2024 04:56:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- JNFrame/Assembly-CSharp-firstpass.csproj | 4221 ++++++----- JNFrame/Assembly-CSharp.csproj | 658 +- .../Assets/Packages/BepuPhysics.2.3.4.meta | 2 +- .../BepuPhysics.2.3.4/BepuPhysics.nuspec.meta | 2 +- .../bepuphysicslogo256.png.meta | 15 +- .../Packages/BepuPhysics.2.3.4/lib.meta | 2 +- .../BepuPhysics.2.3.4/lib/netstandard2.0.meta | 2 +- .../lib/netstandard2.0/BepuPhysics.dll.meta | 2 +- .../lib/netstandard2.0/BepuPhysics.xml.meta | 2 +- .../Assets/Packages/BepuUtilities.2.3.4.meta | 2 +- .../BepuUtilities.nuspec.meta | 2 +- .../bepuphysicslogo256.png.meta | 15 +- .../Packages/BepuUtilities.2.3.4/lib.meta | 2 +- .../lib/netstandard2.0.meta | 2 +- .../lib/netstandard2.0/BepuUtilities.dll.meta | 2 +- .../lib/netstandard2.0/BepuUtilities.xml.meta | 2 +- .../Plugins/JNGame/BepuPhysics/Core.meta | 8 + .../JNGame/BepuPhysics/Core/BepuPhysics1.meta | 8 + .../Core/BepuPhysics1/BEPUphysics.meta | 8 + .../BEPUphysics/BEPUphysics.csproj | 22 + .../BEPUphysics/BEPUphysics.csproj.meta | 7 + .../BEPUphysics/BroadPhaseEntries.meta | 8 + .../BroadPhaseEntries/BroadPhaseEntry.cs | 154 + .../BroadPhaseEntries/BroadPhaseEntry.cs.meta | 11 + .../BroadPhaseEntries/Collidable.cs | 151 + .../BroadPhaseEntries/Collidable.cs.meta | 11 + .../BroadPhaseEntries/CollidableCollection.cs | 256 + .../CollidableCollection.cs.meta | 11 + .../BroadPhaseEntries/CollidablePair.cs | 71 + .../BroadPhaseEntries/CollidablePair.cs.meta | 11 + .../BroadPhaseEntries/DetectorVolume.cs | 482 ++ .../BroadPhaseEntries/DetectorVolume.cs.meta | 11 + .../EntityCollidableCollection.cs | 124 + .../EntityCollidableCollection.cs.meta | 11 + .../BEPUphysics/BroadPhaseEntries/Events.meta | 8 + .../Events/CollisionEventTypes.cs | 270 + .../Events/CollisionEventTypes.cs.meta | 11 + .../Events/CompoundEventManager.cs | 41 + .../Events/CompoundEventManager.cs.meta | 11 + .../Events/ContactEventManager.cs | 292 + .../Events/ContactEventManager.cs.meta | 11 + .../Events/EntryEventManager.cs | 332 + .../Events/EntryEventManager.cs.meta | 11 + .../Events/IContactEventTriggerer.cs | 53 + .../Events/IContactEventTriggerer.cs.meta | 11 + .../Events/IEntryEventTriggerer.cs | 36 + .../Events/IEntryEventTriggerer.cs.meta | 11 + .../BroadPhaseEntries/InstancedMesh.cs | 252 + .../BroadPhaseEntries/InstancedMesh.cs.meta | 11 + .../BroadPhaseEntries/MobileCollidables.meta | 8 + .../MobileCollidables/CompoundCollidable.cs | 624 ++ .../CompoundCollidable.cs.meta | 11 + .../MobileCollidables/CompoundHelper.cs | 519 ++ .../MobileCollidables/CompoundHelper.cs.meta | 11 + .../MobileCollidables/CompoundHierarchy.cs | 57 + .../CompoundHierarchy.cs.meta | 11 + .../MobileCollidables/ConvexCollidable.cs | 93 + .../ConvexCollidable.cs.meta | 11 + .../MobileCollidables/EntityCollidable.cs | 320 + .../EntityCollidable.cs.meta | 11 + .../MobileCollidables/MobileCollidable.cs | 19 + .../MobileCollidable.cs.meta | 11 + .../MobileCollidables/MobileMeshCollidable.cs | 250 + .../MobileMeshCollidable.cs.meta | 11 + .../MobileCollidables/TriangleCollidable.cs | 54 + .../TriangleCollidable.cs.meta | 11 + .../BroadPhaseEntries/StaticCollidable.cs | 129 + .../StaticCollidable.cs.meta | 11 + .../BroadPhaseEntries/StaticGroup.cs | 155 + .../BroadPhaseEntries/StaticGroup.cs.meta | 11 + .../BroadPhaseEntries/StaticMesh.cs | 254 + .../BroadPhaseEntries/StaticMesh.cs.meta | 11 + .../BEPUphysics/BroadPhaseEntries/Terrain.cs | 298 + .../BroadPhaseEntries/Terrain.cs.meta | 11 + .../BEPUphysics/BroadPhaseSystems.meta | 8 + .../BroadPhaseSystems/BroadPhase.cs | 114 + .../BroadPhaseSystems/BroadPhase.cs.meta | 11 + .../BroadPhaseSystems/BroadPhaseOverlap.cs | 95 + .../BroadPhaseOverlap.cs.meta | 11 + .../BroadPhaseSystems/BruteForce.cs | 41 + .../BroadPhaseSystems/BruteForce.cs.meta | 11 + .../BroadPhaseSystems/Hierarchies.meta | 8 + .../Hierarchies/DynamicHierarchy.cs | 344 + .../Hierarchies/DynamicHierarchy.cs.meta | 11 + .../Hierarchies/DynamicHierarchyNode.cs | 857 +++ .../Hierarchies/DynamicHierarchyNode.cs.meta | 11 + .../DynamicHierarchyQueryAccelerator.cs | 103 + .../DynamicHierarchyQueryAccelerator.cs.meta | 11 + .../BroadPhaseSystems/IBoundingBoxOwner.cs | 16 + .../IBoundingBoxOwner.cs.meta | 11 + .../IBroadPhaseEntryOwner.cs | 15 + .../IBroadPhaseEntryOwner.cs.meta | 11 + .../BroadPhaseSystems/IQueryAccelerator.cs | 57 + .../IQueryAccelerator.cs.meta | 11 + .../BroadPhaseSystems/SortAndSweep.meta | 8 + .../SortAndSweep/Grid2DEntry.cs | 23 + .../SortAndSweep/Grid2DEntry.cs.meta | 11 + .../SortAndSweep/Grid2DSortAndSweep.cs | 273 + .../SortAndSweep/Grid2DSortAndSweep.cs.meta | 11 + .../Grid2DSortAndSweepQueryAccelerator.cs | 220 + ...Grid2DSortAndSweepQueryAccelerator.cs.meta | 11 + .../SortAndSweep/GridCell2D.cs | 115 + .../SortAndSweep/GridCell2D.cs.meta | 11 + .../SortAndSweep/SortAndSweep1D.cs | 288 + .../SortAndSweep/SortAndSweep1D.cs.meta | 11 + .../SortAndSweep/SortedGrid2DSet.cs | 181 + .../SortAndSweep/SortedGrid2DSet.cs.meta | 11 + .../BepuPhysics1/BEPUphysics/Character.meta | 8 + .../Character/CharacterContactCategorizer.cs | 175 + .../CharacterContactCategorizer.cs.meta | 11 + .../CharacterContactPositionState.cs | 20 + .../CharacterContactPositionState.cs.meta | 11 + .../Character/CharacterController.cs | 897 +++ .../Character/CharacterController.cs.meta | 11 + .../Character/CharacterPairLocker.cs | 89 + .../Character/CharacterPairLocker.cs.meta | 11 + .../Character/HorizontalMotionConstraint.cs | 726 ++ .../HorizontalMotionConstraint.cs.meta | 11 + .../BEPUphysics/Character/ICharacterTag.cs | 42 + .../Character/ICharacterTag.cs.meta | 11 + .../BEPUphysics/Character/MovementMode.cs | 27 + .../Character/MovementMode.cs.meta | 11 + .../BEPUphysics/Character/QueryManager.cs | 278 + .../Character/QueryManager.cs.meta | 11 + .../Character/SphereCharacterController.cs | 599 ++ .../SphereCharacterController.cs.meta | 11 + .../BEPUphysics/Character/StanceManager.cs | 483 ++ .../Character/StanceManager.cs.meta | 11 + .../BEPUphysics/Character/StepManager.cs | 815 +++ .../BEPUphysics/Character/StepManager.cs.meta | 11 + .../BEPUphysics/Character/SupportFinder.cs | 619 ++ .../Character/SupportFinder.cs.meta | 11 + .../Character/VerticalMotionConstraint.cs | 296 + .../VerticalMotionConstraint.cs.meta | 11 + .../BEPUphysics/CollisionRuleManagement.meta | 8 + .../CollisionRuleManagement/CollisionGroup.cs | 157 + .../CollisionGroup.cs.meta | 11 + .../CollisionGroupPair.cs | 75 + .../CollisionGroupPair.cs.meta | 11 + .../CollisionRuleManagement/CollisionRule.cs | 34 + .../CollisionRule.cs.meta | 11 + .../CollisionRuleManagement/CollisionRules.cs | 302 + .../CollisionRules.cs.meta | 11 + .../ICollisionRulesOwner.cs | 13 + .../ICollisionRulesOwner.cs.meta | 11 + .../BEPUphysics/CollisionShapes.meta | 8 + .../CollisionShapes/CollisionShape.cs | 26 + .../CollisionShapes/CollisionShape.cs.meta | 11 + .../CollisionShapes/CompoundShape.cs | 328 + .../CollisionShapes/CompoundShape.cs.meta | 11 + .../CollisionShapes/ConvexShapes.meta | 8 + .../CollisionShapes/ConvexShapes/BoxShape.cs | 291 + .../ConvexShapes/BoxShape.cs.meta | 11 + .../ConvexShapes/CapsuleShape.cs | 307 + .../ConvexShapes/CapsuleShape.cs.meta | 11 + .../CollisionShapes/ConvexShapes/ConeShape.cs | 145 + .../ConvexShapes/ConeShape.cs.meta | 11 + .../ConvexShapes/ConvexHullShape.cs | 320 + .../ConvexShapes/ConvexHullShape.cs.meta | 11 + .../ConvexShapes/ConvexShape.cs | 284 + .../ConvexShapes/ConvexShape.cs.meta | 11 + .../ConvexShapes/ConvexShapeDescription.cs | 35 + .../ConvexShapeDescription.cs.meta | 11 + .../ConvexShapes/CylinderShape.cs | 310 + .../ConvexShapes/CylinderShape.cs.meta | 11 + .../ConvexShapes/InertiaHelper.cs | 610 ++ .../ConvexShapes/InertiaHelper.cs.meta | 11 + .../ConvexShapes/MinkowskiSumShape.cs | 245 + .../ConvexShapes/MinkowskiSumShape.cs.meta | 11 + .../ConvexShapes/SphereShape.cs | 125 + .../ConvexShapes/SphereShape.cs.meta | 11 + .../ConvexShapes/TransformableShape.cs | 161 + .../ConvexShapes/TransformableShape.cs.meta | 11 + .../ConvexShapes/TriangleShape.cs | 366 + .../ConvexShapes/TriangleShape.cs.meta | 11 + .../ConvexShapes/WrappedShape.cs | 336 + .../ConvexShapes/WrappedShape.cs.meta | 11 + .../CollisionShapes/EntityShape.cs | 65 + .../CollisionShapes/EntityShape.cs.meta | 11 + .../EntityShapeVolumeDescription.cs | 14 + .../EntityShapeVolumeDescription.cs.meta | 11 + .../CollisionShapes/InstancedMeshShape.cs | 91 + .../InstancedMeshShape.cs.meta | 11 + .../CollisionShapes/MobileMeshShape.cs | 669 ++ .../CollisionShapes/MobileMeshShape.cs.meta | 11 + .../ShapeDistributionInformation.cs | 26 + .../ShapeDistributionInformation.cs.meta | 11 + .../CollisionShapes/StaticGroupShape.cs | 206 + .../CollisionShapes/StaticGroupShape.cs.meta | 11 + .../CollisionShapes/StaticMeshShape.cs | 56 + .../CollisionShapes/StaticMeshShape.cs.meta | 11 + .../CollisionShapes/TerrainShape.cs | 679 ++ .../CollisionShapes/TerrainShape.cs.meta | 11 + .../BEPUphysics/CollisionTests.meta | 8 + .../CollisionTests/CollisionAlgorithms.meta | 8 + .../CollisionAlgorithms/BoxBoxCollider.cs | 6314 +++++++++++++++++ .../BoxBoxCollider.cs.meta | 11 + .../CollisionAlgorithms/BoxSphereTester.cs | 87 + .../BoxSphereTester.cs.meta | 11 + .../CollisionAlgorithms/GJK.meta | 8 + .../CollisionAlgorithms/GJK/GJKToolbox.cs | 498 ++ .../GJK/GJKToolbox.cs.meta | 11 + .../CollisionAlgorithms/GJK/PairSimplex.cs | 1006 +++ .../GJK/PairSimplex.cs.meta | 11 + .../CollisionAlgorithms/GJK/RaySimplex.cs | 563 ++ .../GJK/RaySimplex.cs.meta | 11 + .../CollisionAlgorithms/GJK/SimpleSimplex.cs | 422 ++ .../GJK/SimpleSimplex.cs.meta | 11 + .../GeneralConvexPairTester.cs | 356 + .../GeneralConvexPairTester.cs.meta | 11 + .../CollisionAlgorithms/MPRToolbox.cs | 2779 ++++++++ .../CollisionAlgorithms/MPRToolbox.cs.meta | 11 + .../CollisionAlgorithms/MinkowskiToolbox.cs | 178 + .../MinkowskiToolbox.cs.meta | 11 + .../CollisionAlgorithms/SphereTester.cs | 58 + .../CollisionAlgorithms/SphereTester.cs.meta | 11 + .../TriangleConvexPairTester.cs | 921 +++ .../TriangleConvexPairTester.cs.meta | 11 + .../CollisionAlgorithms/TrianglePairTester.cs | 51 + .../TrianglePairTester.cs.meta | 11 + .../TriangleSpherePairTester.cs | 136 + .../TriangleSpherePairTester.cs.meta | 11 + .../TriangleTrianglePairTester.cs | 59 + .../TriangleTrianglePairTester.cs.meta | 11 + .../BEPUphysics/CollisionTests/Contact.cs | 61 + .../CollisionTests/Contact.cs.meta | 11 + .../BEPUphysics/CollisionTests/ContactData.cs | 66 + .../CollisionTests/ContactData.cs.meta | 11 + .../CollisionTests/ContactReducer.cs | 320 + .../CollisionTests/ContactReducer.cs.meta | 11 + .../CollisionTests/ContactRefresher.cs | 71 + .../CollisionTests/ContactRefresher.cs.meta | 11 + .../CollisionTests/ContactSupplementData.cs | 25 + .../ContactSupplementData.cs.meta | 11 + .../BEPUphysics/CollisionTests/Manifolds.meta | 8 + .../Manifolds/BoxContactManifold.cs | 241 + .../Manifolds/BoxContactManifold.cs.meta | 11 + .../Manifolds/BoxSphereContactManifold.cs | 147 + .../BoxSphereContactManifold.cs.meta | 11 + .../Manifolds/ContactManifold.cs | 128 + .../Manifolds/ContactManifold.cs.meta | 11 + .../Manifolds/GeneralConvexContactManifold.cs | 199 + .../GeneralConvexContactManifold.cs.meta | 11 + .../Manifolds/InstancedMeshContactManifold.cs | 139 + .../InstancedMeshContactManifold.cs.meta | 11 + .../InstancedMeshConvexContactManifold.cs | 24 + ...InstancedMeshConvexContactManifold.cs.meta | 11 + .../InstancedMeshSphereContactManifold.cs | 24 + ...InstancedMeshSphereContactManifold.cs.meta | 11 + .../Manifolds/MobileMeshContactManifold.cs | 294 + .../MobileMeshContactManifold.cs.meta | 11 + .../MobileMeshConvexContactManifold.cs | 24 + .../MobileMeshConvexContactManifold.cs.meta | 11 + .../MobileMeshSphereContactManifold.cs | 24 + .../MobileMeshSphereContactManifold.cs.meta | 11 + .../MobileMeshTriangleContactManifold.cs | 24 + .../MobileMeshTriangleContactManifold.cs.meta | 11 + .../Manifolds/SphereContactManifold.cs | 141 + .../Manifolds/SphereContactManifold.cs.meta | 11 + .../Manifolds/StaticMeshContactManifold.cs | 114 + .../StaticMeshContactManifold.cs.meta | 11 + .../StaticMeshConvexContactManifold.cs | 25 + .../StaticMeshConvexContactManifold.cs.meta | 11 + .../StaticMeshSphereContactManifold.cs | 25 + .../StaticMeshSphereContactManifold.cs.meta | 11 + .../Manifolds/TerrainContactManifold.cs | 187 + .../Manifolds/TerrainContactManifold.cs.meta | 11 + .../Manifolds/TerrainConvexContactManifold.cs | 20 + .../TerrainConvexContactManifold.cs.meta | 11 + .../Manifolds/TerrainSphereContactManifold.cs | 20 + .../TerrainSphereContactManifold.cs.meta | 11 + .../Manifolds/TerrainVertexIndices.cs | 18 + .../Manifolds/TerrainVertexIndices.cs.meta | 11 + .../TriangleConvexContactManifold.cs | 209 + .../TriangleConvexContactManifold.cs.meta | 11 + .../TriangleMeshConvexContactManifold.cs | 789 ++ .../TriangleMeshConvexContactManifold.cs.meta | 11 + .../BepuPhysics1/BEPUphysics/Constraints.meta | 8 + .../BEPUphysics/Constraints/Collision.meta | 8 + .../Collision/ContactFrictionConstraint.cs | 336 + .../ContactFrictionConstraint.cs.meta | 11 + .../Collision/ContactManifoldConstraint.cs | 179 + .../ContactManifoldConstraint.cs.meta | 11 + .../ContactManifoldConstraintGroup.cs | 128 + .../ContactManifoldConstraintGroup.cs.meta | 11 + .../Collision/ContactPenetrationConstraint.cs | 333 + .../ContactPenetrationConstraint.cs.meta | 11 + .../ConvexContactManifoldConstraint.cs | 215 + .../ConvexContactManifoldConstraint.cs.meta | 11 + .../NonConvexContactManifoldConstraint.cs | 218 + ...NonConvexContactManifoldConstraint.cs.meta | 11 + .../Collision/SlidingFrictionTwoAxis.cs | 513 ++ .../Collision/SlidingFrictionTwoAxis.cs.meta | 11 + .../Collision/TwistFrictionConstraint.cs | 236 + .../Collision/TwistFrictionConstraint.cs.meta | 11 + .../BEPUphysics/Constraints/IJacobians.cs | 125 + .../Constraints/IJacobians.cs.meta | 11 + .../Constraints/ISolverSettings.cs | 13 + .../Constraints/ISolverSettings.cs.meta | 11 + .../Constraints/ISpringConstraint.cs | 13 + .../Constraints/ISpringConstraint.cs.meta | 11 + .../Constraints/IXDImpulseConstraint.cs | 89 + .../Constraints/IXDImpulseConstraint.cs.meta | 11 + .../BEPUphysics/Constraints/JointTransform.cs | 375 + .../Constraints/JointTransform.cs.meta | 11 + .../BEPUphysics/Constraints/SingleEntity.meta | 8 + .../MaximumAngularVelocityConstraint.cs | 199 + .../MaximumAngularVelocityConstraint.cs.meta | 11 + .../MaximumLinearVelocityConstraint.cs | 199 + .../MaximumLinearVelocityConstraint.cs.meta | 11 + .../SingleEntity/SingleEntityAngularMotor.cs | 253 + .../SingleEntityAngularMotor.cs.meta | 11 + .../SingleEntity/SingleEntityConstraint.cs | 50 + .../SingleEntityConstraint.cs.meta | 11 + .../SingleEntity/SingleEntityLinearMotor.cs | 307 + .../SingleEntityLinearMotor.cs.meta | 11 + .../BEPUphysics/Constraints/Solver.cs | 318 + .../BEPUphysics/Constraints/Solver.cs.meta | 11 + .../BEPUphysics/Constraints/SolverGroups.meta | 8 + .../SolverGroups/CustomizableSolverGroup.cs | 32 + .../CustomizableSolverGroup.cs.meta | 11 + .../SolverGroups/LineSliderJoint.cs | 81 + .../SolverGroups/LineSliderJoint.cs.meta | 11 + .../SolverGroups/PlaneSliderJoint.cs | 96 + .../SolverGroups/PlaneSliderJoint.cs.meta | 11 + .../SolverGroups/PrismaticJoint.cs | 83 + .../SolverGroups/PrismaticJoint.cs.meta | 11 + .../Constraints/SolverGroups/RevoluteJoint.cs | 117 + .../SolverGroups/RevoluteJoint.cs.meta | 11 + .../Constraints/SolverGroups/SolverGroup.cs | 282 + .../SolverGroups/SolverGroup.cs.meta | 11 + .../SolverGroups/SwivelHingeJoint.cs | 134 + .../SolverGroups/SwivelHingeJoint.cs.meta | 11 + .../SolverGroups/UniversalJoint.cs | 84 + .../SolverGroups/UniversalJoint.cs.meta | 11 + .../Constraints/SolverGroups/WeldJoint.cs | 80 + .../SolverGroups/WeldJoint.cs.meta | 11 + .../BEPUphysics/Constraints/SolverSettings.cs | 72 + .../Constraints/SolverSettings.cs.meta | 11 + .../Constraints/SolverUpdateable.cs | 448 ++ .../Constraints/SolverUpdateable.cs.meta | 11 + .../Constraints/SolverUpdateableChange.cs | 29 + .../SolverUpdateableChange.cs.meta | 11 + .../BEPUphysics/Constraints/SpringSettings.cs | 112 + .../Constraints/SpringSettings.cs.meta | 11 + .../BEPUphysics/Constraints/TwoEntity.meta | 8 + .../Constraints/TwoEntity/JointLimits.meta | 8 + .../TwoEntity/JointLimits/DistanceLimit.cs | 458 ++ .../JointLimits/DistanceLimit.cs.meta | 11 + .../JointLimits/EllipseSwingLimit.cs | 452 ++ .../JointLimits/EllipseSwingLimit.cs.meta | 11 + .../TwoEntity/JointLimits/JointLimit.cs | 79 + .../TwoEntity/JointLimits/JointLimit.cs.meta | 11 + .../TwoEntity/JointLimits/LinearAxisLimit.cs | 473 ++ .../JointLimits/LinearAxisLimit.cs.meta | 11 + .../TwoEntity/JointLimits/RevoluteLimit.cs | 650 ++ .../JointLimits/RevoluteLimit.cs.meta | 11 + .../TwoEntity/JointLimits/SwingLimit.cs | 349 + .../TwoEntity/JointLimits/SwingLimit.cs.meta | 11 + .../TwoEntity/JointLimits/TwistLimit.cs | 453 ++ .../TwoEntity/JointLimits/TwistLimit.cs.meta | 11 + .../Constraints/TwoEntity/Joints.meta | 8 + .../TwoEntity/Joints/BallSocketJoint.cs | 374 + .../TwoEntity/Joints/BallSocketJoint.cs.meta | 11 + .../TwoEntity/Joints/DistanceJoint.cs | 385 + .../TwoEntity/Joints/DistanceJoint.cs.meta | 11 + .../Constraints/TwoEntity/Joints/Joint.cs | 60 + .../TwoEntity/Joints/Joint.cs.meta | 11 + .../TwoEntity/Joints/NoRotationJoint.cs | 263 + .../TwoEntity/Joints/NoRotationJoint.cs.meta | 11 + .../TwoEntity/Joints/PointOnLineJoint.cs | 550 ++ .../TwoEntity/Joints/PointOnLineJoint.cs.meta | 11 + .../TwoEntity/Joints/PointOnPlaneJoint.cs | 391 + .../Joints/PointOnPlaneJoint.cs.meta | 11 + .../TwoEntity/Joints/RevoluteAngularJoint.cs | 369 + .../Joints/RevoluteAngularJoint.cs.meta | 11 + .../Joints/SwivelHingeAngularJoint.cs | 307 + .../Joints/SwivelHingeAngularJoint.cs.meta | 11 + .../TwoEntity/Joints/TwistJoint.cs | 367 + .../TwoEntity/Joints/TwistJoint.cs.meta | 11 + .../Constraints/TwoEntity/Motors.meta | 8 + .../TwoEntity/Motors/AngularMotor.cs | 327 + .../TwoEntity/Motors/AngularMotor.cs.meta | 11 + .../TwoEntity/Motors/LinearAxisMotor.cs | 424 ++ .../TwoEntity/Motors/LinearAxisMotor.cs.meta | 11 + .../Constraints/TwoEntity/Motors/Motor.cs | 34 + .../TwoEntity/Motors/Motor.cs.meta | 11 + .../TwoEntity/Motors/MotorSettings.cs | 470 ++ .../TwoEntity/Motors/MotorSettings.cs.meta | 11 + .../TwoEntity/Motors/RevoluteMotor.cs | 375 + .../TwoEntity/Motors/RevoluteMotor.cs.meta | 11 + .../TwoEntity/Motors/TwistMotor.cs | 386 + .../TwoEntity/Motors/TwistMotor.cs.meta | 11 + .../TwoEntity/TwoEntityConstraint.cs | 84 + .../TwoEntity/TwoEntityConstraint.cs.meta | 11 + .../BEPUphysics/DataStructures.meta | 8 + .../DataStructures/BoundingBoxTree.cs | 726 ++ .../DataStructures/BoundingBoxTree.cs.meta | 11 + .../DataStructures/MeshBoundingBoxTree.cs | 479 ++ .../MeshBoundingBoxTree.cs.meta | 11 + .../DataStructures/MeshBoundingBoxTreeData.cs | 73 + .../MeshBoundingBoxTreeData.cs.meta | 11 + .../DataStructures/StaticMeshData.cs | 50 + .../DataStructures/StaticMeshData.cs.meta | 11 + .../DataStructures/TransformableMeshData.cs | 79 + .../TransformableMeshData.cs.meta | 11 + .../DataStructures/TreeOverlapPair.cs | 35 + .../DataStructures/TreeOverlapPair.cs.meta | 11 + .../DataStructures/TriangleMesh.cs | 195 + .../DataStructures/TriangleMesh.cs.meta | 11 + .../BEPUphysics/DeactivationManagement.meta | 8 + .../DeactivationManager.cs | 772 ++ .../DeactivationManager.cs.meta | 11 + .../ISimulationIslandConnection.cs | 65 + .../ISimulationIslandConnection.cs.meta | 11 + .../ISimulationIslandConnectionOwner.cs | 21 + .../ISimulationIslandConnectionOwner.cs.meta | 11 + .../ISimulationIslandMemberOwner.cs | 18 + .../ISimulationIslandMemberOwner.cs.meta | 11 + .../SimulationIsland.cs | 185 + .../SimulationIsland.cs.meta | 11 + .../SimulationIslandConnection.cs | 118 + .../SimulationIslandConnection.cs.meta | 11 + .../SimulationIslandMember.cs | 442 ++ .../SimulationIslandMember.cs.meta | 11 + .../SimulationIslandMemberList.cs | 194 + .../SimulationIslandMemberList.cs.meta | 11 + .../BepuPhysics1/BEPUphysics/Entities.meta | 8 + .../BEPUphysics/Entities/Entity.cs | 60 + .../BEPUphysics/Entities/Entity.cs.meta | 11 + .../BEPUphysics/Entities/EntityBase.cs | 1297 ++++ .../BEPUphysics/Entities/EntityBase.cs.meta | 11 + .../Entities/EntityConstraintCollection.cs | 120 + .../EntityConstraintCollection.cs.meta | 11 + .../EntitySolverUpdateableCollection.cs | 120 + .../EntitySolverUpdateableCollection.cs.meta | 11 + .../BEPUphysics/Entities/MorphableEntity.cs | 160 + .../Entities/MorphableEntity.cs.meta | 11 + .../BEPUphysics/Entities/Prefabs.meta | 8 + .../BEPUphysics/Entities/Prefabs/Box.cs | 141 + .../BEPUphysics/Entities/Prefabs/Box.cs.meta | 11 + .../BEPUphysics/Entities/Prefabs/Capsule.cs | 168 + .../Entities/Prefabs/Capsule.cs.meta | 11 + .../Entities/Prefabs/CompoundBody.cs | 87 + .../Entities/Prefabs/CompoundBody.cs.meta | 11 + .../BEPUphysics/Entities/Prefabs/Cone.cs | 111 + .../BEPUphysics/Entities/Prefabs/Cone.cs.meta | 11 + .../Entities/Prefabs/ConvexHull.cs | 103 + .../Entities/Prefabs/ConvexHull.cs.meta | 11 + .../BEPUphysics/Entities/Prefabs/Cylinder.cs | 109 + .../Entities/Prefabs/Cylinder.cs.meta | 11 + .../Entities/Prefabs/MinkowskiSum.cs | 113 + .../Entities/Prefabs/MinkowskiSum.cs.meta | 11 + .../Entities/Prefabs/MobileMesh.cs | 58 + .../Entities/Prefabs/MobileMesh.cs.meta | 11 + .../BEPUphysics/Entities/Prefabs/Sphere.cs | 90 + .../Entities/Prefabs/Sphere.cs.meta | 11 + .../Entities/Prefabs/TransformableEntity.cs | 111 + .../Prefabs/TransformableEntity.cs.meta | 11 + .../BEPUphysics/Entities/Prefabs/Triangle.cs | 203 + .../Entities/Prefabs/Triangle.cs.meta | 11 + .../Entities/Prefabs/WrappedBody.cs | 95 + .../Entities/Prefabs/WrappedBody.cs.meta | 11 + .../BEPUphysics/EntityStateManagement.meta | 8 + .../BufferedStatesAccessor.cs | 209 + .../BufferedStatesAccessor.cs.meta | 11 + .../BufferedStatesManager.cs | 147 + .../BufferedStatesManager.cs.meta | 11 + .../EntityBufferedStates.cs | 49 + .../EntityBufferedStates.cs.meta | 11 + .../EntityStateReadBuffers.cs | 207 + .../EntityStateReadBuffers.cs.meta | 11 + .../EntityStateWriteBuffer.cs | 124 + .../EntityStateWriteBuffer.cs.meta | 11 + .../InterpolatedStatesAccessor.cs | 110 + .../InterpolatedStatesAccessor.cs.meta | 11 + .../InterpolatedStatesManager.cs | 227 + .../InterpolatedStatesManager.cs.meta | 11 + .../EntityStateManagement/MotionState.cs | 63 + .../EntityStateManagement/MotionState.cs.meta | 11 + .../BepuPhysics1/BEPUphysics/ISpaceObject.cs | 27 + .../BEPUphysics/ISpaceObject.cs.meta | 11 + .../BepuPhysics1/BEPUphysics/Materials.meta | 8 + .../BEPUphysics/Materials/IMaterialOwner.cs | 13 + .../Materials/IMaterialOwner.cs.meta | 11 + .../Materials/InteractionProperties.cs | 21 + .../Materials/InteractionProperties.cs.meta | 11 + .../BEPUphysics/Materials/Material.cs | 113 + .../BEPUphysics/Materials/Material.cs.meta | 11 + .../BEPUphysics/Materials/MaterialManager.cs | 89 + .../Materials/MaterialManager.cs.meta | 11 + .../BEPUphysics/Materials/MaterialPair.cs | 51 + .../Materials/MaterialPair.cs.meta | 11 + .../MultithreadedProcessingStage.cs | 97 + .../MultithreadedProcessingStage.cs.meta | 11 + .../BEPUphysics/NarrowPhaseSystems.meta | 8 + .../NarrowPhaseSystems/NarrowPhase.cs | 414 ++ .../NarrowPhaseSystems/NarrowPhase.cs.meta | 11 + .../NarrowPhaseSystems/NarrowPhaseHelper.cs | 438 ++ .../NarrowPhaseHelper.cs.meta | 11 + .../NarrowPhasePairFactory.cs | 132 + .../NarrowPhasePairFactory.cs.meta | 11 + .../BEPUphysics/NarrowPhaseSystems/Pairs.meta | 8 + .../Pairs/BoxPairHandler.cs | 93 + .../Pairs/BoxPairHandler.cs.meta | 11 + .../Pairs/BoxSpherePairHandler.cs | 158 + .../Pairs/BoxSpherePairHandler.cs.meta | 11 + .../Pairs/CollidablePairHandler.cs | 264 + .../Pairs/CollidablePairHandler.cs.meta | 11 + .../Pairs/CompoundConvexPairHandler.cs | 75 + .../Pairs/CompoundConvexPairHandler.cs.meta | 11 + .../Pairs/CompoundGroupPairHandler.cs | 60 + .../Pairs/CompoundGroupPairHandler.cs.meta | 11 + .../Pairs/CompoundInstancedMeshPairHandler.cs | 79 + .../CompoundInstancedMeshPairHandler.cs.meta | 11 + .../Pairs/CompoundMobileMeshPairHandler.cs | 80 + .../CompoundMobileMeshPairHandler.cs.meta | 11 + .../Pairs/CompoundPairHandler.cs | 74 + .../Pairs/CompoundPairHandler.cs.meta | 11 + .../Pairs/CompoundStaticMeshPairHandler.cs | 79 + .../CompoundStaticMeshPairHandler.cs.meta | 11 + .../Pairs/CompoundTerrainPairHandler.cs | 79 + .../Pairs/CompoundTerrainPairHandler.cs.meta | 11 + .../Pairs/ContactCollection.cs | 223 + .../Pairs/ContactCollection.cs.meta | 11 + .../Pairs/ContactInformation.cs | 53 + .../Pairs/ContactInformation.cs.meta | 11 + .../Pairs/ConvexConstraintPairHandler.cs | 86 + .../Pairs/ConvexConstraintPairHandler.cs.meta | 11 + .../Pairs/ConvexPairHandler.cs | 116 + .../Pairs/ConvexPairHandler.cs.meta | 11 + .../DetectorVolumeCompoundPairHandler.cs | 73 + .../DetectorVolumeCompoundPairHandler.cs.meta | 11 + .../Pairs/DetectorVolumeConvexPairHandler.cs | 114 + .../DetectorVolumeConvexPairHandler.cs.meta | 11 + .../Pairs/DetectorVolumeGroupPairHandler.cs | 136 + .../DetectorVolumeGroupPairHandler.cs.meta | 11 + .../DetectorVolumeMobileMeshPairHandler.cs | 186 + ...etectorVolumeMobileMeshPairHandler.cs.meta | 11 + .../Pairs/DetectorVolumePairHandler.cs | 161 + .../Pairs/DetectorVolumePairHandler.cs.meta | 11 + .../Pairs/GeneralConvexPairHandler.cs | 90 + .../Pairs/GeneralConvexPairHandler.cs.meta | 11 + .../Pairs/GroupPairHandler.cs | 345 + .../Pairs/GroupPairHandler.cs.meta | 11 + .../Pairs/IDetectorVolumePairHandlerParent.cs | 9 + .../IDetectorVolumePairHandlerParent.cs.meta | 11 + .../Pairs/IPairHandlerParent.cs | 36 + .../Pairs/IPairHandlerParent.cs.meta | 11 + .../Pairs/InstancedMeshConvexPairHandler.cs | 20 + .../InstancedMeshConvexPairHandler.cs.meta | 11 + .../Pairs/InstancedMeshPairHandler.cs | 221 + .../Pairs/InstancedMeshPairHandler.cs.meta | 11 + .../Pairs/InstancedMeshSpherePairHandler.cs | 18 + .../InstancedMeshSpherePairHandler.cs.meta | 11 + .../Pairs/MeshGroupPairHandler.cs | 405 ++ .../Pairs/MeshGroupPairHandler.cs.meta | 11 + .../Pairs/MobileMeshConvexPairHandler.cs | 20 + .../Pairs/MobileMeshConvexPairHandler.cs.meta | 11 + .../MobileMeshInstancedMeshPairHandler.cs | 125 + ...MobileMeshInstancedMeshPairHandler.cs.meta | 11 + .../Pairs/MobileMeshMeshPairHandler.cs | 63 + .../Pairs/MobileMeshMeshPairHandler.cs.meta | 11 + .../Pairs/MobileMeshMobileMeshPairHandler.cs | 125 + .../MobileMeshMobileMeshPairHandler.cs.meta | 11 + .../Pairs/MobileMeshPairHandler.cs | 271 + .../Pairs/MobileMeshPairHandler.cs.meta | 11 + .../Pairs/MobileMeshSpherePairHandler.cs | 20 + .../Pairs/MobileMeshSpherePairHandler.cs.meta | 11 + .../Pairs/MobileMeshStaticMeshPairHandler.cs | 115 + .../MobileMeshStaticMeshPairHandler.cs.meta | 11 + .../Pairs/MobileMeshTerrainPairHandler.cs | 136 + .../MobileMeshTerrainPairHandler.cs.meta | 11 + .../Pairs/MobileMeshTrianglePairHandler.cs | 20 + .../MobileMeshTrianglePairHandler.cs.meta | 11 + .../Pairs/NarrowPhasePair.cs | 83 + .../Pairs/NarrowPhasePair.cs.meta | 11 + .../Pairs/SpherePairHandler.cs | 147 + .../Pairs/SpherePairHandler.cs.meta | 11 + .../Pairs/StandardPairHandler.cs | 234 + .../Pairs/StandardPairHandler.cs.meta | 11 + .../Pairs/StaticGroupCompoundPairHandler.cs | 79 + .../StaticGroupCompoundPairHandler.cs.meta | 11 + .../Pairs/StaticGroupConvexPairHandler.cs | 75 + .../StaticGroupConvexPairHandler.cs.meta | 11 + .../Pairs/StaticGroupMobileMeshPairHandler.cs | 78 + .../StaticGroupMobileMeshPairHandler.cs.meta | 11 + .../Pairs/StaticGroupPairHandler.cs | 59 + .../Pairs/StaticGroupPairHandler.cs.meta | 11 + .../Pairs/StaticMeshConvexPairHandler.cs | 20 + .../Pairs/StaticMeshConvexPairHandler.cs.meta | 11 + .../Pairs/StaticMeshPairHandler.cs | 210 + .../Pairs/StaticMeshPairHandler.cs.meta | 11 + .../Pairs/StaticMeshSpherePairHandler.cs | 20 + .../Pairs/StaticMeshSpherePairHandler.cs.meta | 11 + .../Pairs/TerrainConvexPairHandler.cs | 18 + .../Pairs/TerrainConvexPairHandler.cs.meta | 11 + .../Pairs/TerrainPairHandler.cs | 216 + .../Pairs/TerrainPairHandler.cs.meta | 11 + .../Pairs/TerrainSpherePairHandler.cs | 18 + .../Pairs/TerrainSpherePairHandler.cs.meta | 11 + .../Pairs/TriangleConvexPairHandler.cs | 217 + .../Pairs/TriangleConvexPairHandler.cs.meta | 11 + .../BEPUphysics/OtherSpaceStages.meta | 8 + .../OtherSpaceStages/BoundingBoxUpdater.cs | 86 + .../BoundingBoxUpdater.cs.meta | 11 + .../DeferredEventDispatcher.cs | 94 + .../DeferredEventDispatcher.cs.meta | 11 + .../OtherSpaceStages/ForceUpdater.cs | 158 + .../OtherSpaceStages/ForceUpdater.cs.meta | 11 + .../OtherSpaceStages/IDeferredEventCreator.cs | 29 + .../IDeferredEventCreator.cs.meta | 11 + .../IDeferredEventCreatorOwner.cs | 13 + .../IDeferredEventCreatorOwner.cs.meta | 11 + .../OtherSpaceStages/IForceUpdateable.cs | 30 + .../OtherSpaceStages/IForceUpdateable.cs.meta | 11 + .../OtherSpaceStages/SpaceObjectBuffer.cs | 83 + .../SpaceObjectBuffer.cs.meta | 11 + .../Core/BepuPhysics1/BEPUphysics/Paths.meta | 8 + .../BEPUphysics/Paths/CardinalSpline3D.cs | 60 + .../Paths/CardinalSpline3D.cs.meta | 11 + .../Paths/ConstantAngularSpeedCurve.cs | 40 + .../Paths/ConstantAngularSpeedCurve.cs.meta | 11 + .../Paths/ConstantLinearSpeedCurve.cs | 40 + .../Paths/ConstantLinearSpeedCurve.cs.meta | 11 + .../BEPUphysics/Paths/ConstantSpeedCurve.cs | 50 + .../Paths/ConstantSpeedCurve.cs.meta | 11 + .../BepuPhysics1/BEPUphysics/Paths/Curve.cs | 259 + .../BEPUphysics/Paths/Curve.cs.meta | 11 + .../BEPUphysics/Paths/CurveControlPoint.cs | 84 + .../Paths/CurveControlPoint.cs.meta | 11 + .../Paths/CurveControlPointList.cs | 113 + .../Paths/CurveControlPointList.cs.meta | 11 + .../Paths/CurveEndpointBehavior.cs | 21 + .../Paths/CurveEndpointBehavior.cs.meta | 11 + .../Paths/FiniteDifferenceSpline3D.cs | 81 + .../Paths/FiniteDifferenceSpline3D.cs.meta | 11 + .../BEPUphysics/Paths/HermiteCurve3D.cs | 92 + .../BEPUphysics/Paths/HermiteCurve3D.cs.meta | 11 + .../Paths/LinearInterpolationCurve3D.cs | 103 + .../Paths/LinearInterpolationCurve3D.cs.meta | 11 + .../BEPUphysics/Paths/Path following.meta | 8 + .../Paths/Path following/EntityMover.cs | 150 + .../Paths/Path following/EntityMover.cs.meta | 11 + .../Paths/Path following/EntityRotator.cs | 136 + .../Path following/EntityRotator.cs.meta | 11 + .../BepuPhysics1/BEPUphysics/Paths/Path.cs | 35 + .../BEPUphysics/Paths/Path.cs.meta | 11 + .../BEPUphysics/Paths/QuaternionSlerpCurve.cs | 73 + .../Paths/QuaternionSlerpCurve.cs.meta | 11 + .../BEPUphysics/Paths/SpeedControlledCurve.cs | 266 + .../Paths/SpeedControlledCurve.cs.meta | 11 + .../BEPUphysics/Paths/StepCurve1D.cs | 50 + .../BEPUphysics/Paths/StepCurve1D.cs.meta | 11 + .../Paths/VariableAngularSpeedCurve.cs | 43 + .../Paths/VariableAngularSpeedCurve.cs.meta | 11 + .../Paths/VariableLinearSpeedCurve.cs | 43 + .../Paths/VariableLinearSpeedCurve.cs.meta | 11 + .../BEPUphysics/Paths/VariableSpeedCurve.cs | 51 + .../Paths/VariableSpeedCurve.cs.meta | 11 + .../BEPUphysics/PhysicsChecker.cs | 42 + .../BEPUphysics/PhysicsChecker.cs.meta | 11 + .../BEPUphysics/PhysicsResources.cs | 186 + .../BEPUphysics/PhysicsResources.cs.meta | 11 + .../BEPUphysics/PhysicsThreadResources.cs | 250 + .../PhysicsThreadResources.cs.meta | 11 + .../BEPUphysics/PositionUpdating.meta | 8 + .../ContinuousPositionUpdater.cs | 260 + .../ContinuousPositionUpdater.cs.meta | 11 + .../ICCDPositionUpdateable.cs | 52 + .../ICCDPositionUpdateable.cs.meta | 11 + .../PositionUpdating/IPositionUpdateable.cs | 25 + .../IPositionUpdateable.cs.meta | 11 + .../PositionUpdating/PositionUpdater.cs | 52 + .../PositionUpdating/PositionUpdater.cs.meta | 11 + .../BEPUphysics/ProcessingStage.cs | 65 + .../BEPUphysics/ProcessingStage.cs.meta | 11 + .../BepuPhysics1/BEPUphysics/RayCastResult.cs | 31 + .../BEPUphysics/RayCastResult.cs.meta | 11 + .../BepuPhysics1/BEPUphysics/Settings.meta | 8 + .../Settings/CollisionDetectionSettings.cs | 105 + .../CollisionDetectionSettings.cs.meta | 11 + .../Settings/CollisionResponseSettings.cs | 47 + .../CollisionResponseSettings.cs.meta | 11 + .../BEPUphysics/Settings/MotionSettings.cs | 78 + .../Settings/MotionSettings.cs.meta | 11 + .../Core/BepuPhysics1/BEPUphysics/Space.cs | 793 +++ .../BepuPhysics1/BEPUphysics/Space.cs.meta | 11 + .../BEPUphysics/TimeStepSettings.cs | 26 + .../BEPUphysics/TimeStepSettings.cs.meta | 11 + .../BEPUphysics/UpdateableSystems.meta | 8 + .../UpdateableSystems/CombinedUpdateable.cs | 62 + .../CombinedUpdateable.cs.meta | 11 + .../UpdateableSystems/FluidVolume.cs | 549 ++ .../UpdateableSystems/FluidVolume.cs.meta | 11 + .../UpdateableSystems/ForceFields.meta | 8 + .../ForceFields/BoundingBoxForceFieldShape.cs | 60 + .../BoundingBoxForceFieldShape.cs.meta | 11 + .../BoundingSphereForceFieldShape.cs | 60 + .../BoundingSphereForceFieldShape.cs.meta | 11 + .../ForceFields/ForceField.cs | 157 + .../ForceFields/ForceField.cs.meta | 11 + .../ForceFields/ForceFieldShape.cs | 32 + .../ForceFields/ForceFieldShape.cs.meta | 11 + .../ForceFields/InfiniteForceFieldShape.cs | 32 + .../InfiniteForceFieldShape.cs.meta | 11 + .../ForceFields/VolumeForceFieldShape.cs | 53 + .../ForceFields/VolumeForceFieldShape.cs.meta | 11 + .../IBeforeNarrowPhaseUpdateable.cs | 15 + .../IBeforeNarrowPhaseUpdateable.cs.meta | 11 + .../IBeforePositionUpdateUpdateable.cs | 16 + .../IBeforePositionUpdateUpdateable.cs.meta | 11 + .../IBeforeSolverUpdateable.cs | 15 + .../IBeforeSolverUpdateable.cs.meta | 11 + .../IDuringForcesUpdateable.cs | 16 + .../IDuringForcesUpdateable.cs.meta | 11 + .../IEndOfFrameUpdateable.cs | 15 + .../IEndOfFrameUpdateable.cs.meta | 11 + .../IEndOfTimeStepUpdateable.cs | 16 + .../IEndOfTimeStepUpdateable.cs.meta | 11 + .../UpdateableSystems/ISpaceUpdateable.cs | 31 + .../ISpaceUpdateable.cs.meta | 11 + .../UpdateableSystems/Updateable.cs | 112 + .../UpdateableSystems/Updateable.cs.meta | 11 + .../UpdateableSystems/UpdateableManager.cs | 169 + .../UpdateableManager.cs.meta | 11 + .../UpdateableSystems/UpdateableManagers.cs | 237 + .../UpdateableManagers.cs.meta | 11 + .../BepuPhysics1/BEPUphysics/Vehicle.meta | 8 + .../Vehicle/CylinderCastWheelShape.cs | 274 + .../Vehicle/CylinderCastWheelShape.cs.meta | 11 + .../BEPUphysics/Vehicle/RaycastWheelShape.cs | 204 + .../Vehicle/RaycastWheelShape.cs.meta | 11 + .../BEPUphysics/Vehicle/Vehicle.cs | 289 + .../BEPUphysics/Vehicle/Vehicle.cs.meta | 11 + .../BepuPhysics1/BEPUphysics/Vehicle/Wheel.cs | 521 ++ .../BEPUphysics/Vehicle/Wheel.cs.meta | 11 + .../BEPUphysics/Vehicle/WheelBrake.cs | 326 + .../BEPUphysics/Vehicle/WheelBrake.cs.meta | 11 + .../BEPUphysics/Vehicle/WheelDrivingMotor.cs | 349 + .../Vehicle/WheelDrivingMotor.cs.meta | 11 + .../Vehicle/WheelFrictionBlender.cs | 15 + .../Vehicle/WheelFrictionBlender.cs.meta | 11 + .../BEPUphysics/Vehicle/WheelShape.cs | 258 + .../BEPUphysics/Vehicle/WheelShape.cs.meta | 11 + .../Vehicle/WheelSlidingFriction.cs | 332 + .../Vehicle/WheelSlidingFriction.cs.meta | 11 + .../BEPUphysics/Vehicle/WheelSuspension.cs | 411 ++ .../Vehicle/WheelSuspension.cs.meta | 11 + .../Core/BepuPhysics1/BEPUutilities.meta | 8 + .../BEPUutilities/AffineTransform.cs | 252 + .../BEPUutilities/AffineTransform.cs.meta | 11 + .../BEPUutilities/BEPUutilities.csproj | 17 + .../BEPUutilities/BEPUutilities.csproj.meta | 7 + .../BepuPhysics1/BEPUutilities/BoundingBox.cs | 234 + .../BEPUutilities/BoundingBox.cs.meta | 11 + .../BEPUutilities/BoundingSphere.cs | 33 + .../BEPUutilities/BoundingSphere.cs.meta | 11 + .../BEPUutilities/ContainmentType.cs | 21 + .../BEPUutilities/ContainmentType.cs.meta | 11 + .../BEPUutilities/ConvexHullHelper.Pruning.cs | 113 + .../ConvexHullHelper.Pruning.cs.meta | 11 + .../BEPUutilities/ConvexHullHelper.cs | 518 ++ .../BEPUutilities/ConvexHullHelper.cs.meta | 11 + .../BEPUutilities/DataStructures.meta | 8 + .../DataStructures/ConcurrentDeque.cs | 224 + .../DataStructures/ConcurrentDeque.cs.meta | 11 + .../DataStructures/ObservableDictionary.cs | 78 + .../ObservableDictionary.cs.meta | 11 + .../DataStructures/ObservableList.cs | 200 + .../DataStructures/ObservableList.cs.meta | 11 + .../DataStructures/QuickDictionary.cs | 467 ++ .../DataStructures/QuickDictionary.cs.meta | 11 + .../BEPUutilities/DataStructures/QuickList.cs | 541 ++ .../DataStructures/QuickList.cs.meta | 11 + .../DataStructures/QuickQueue.cs | 435 ++ .../DataStructures/QuickQueue.cs.meta | 11 + .../BEPUutilities/DataStructures/QuickSet.cs | 424 ++ .../DataStructures/QuickSet.cs.meta | 11 + .../BEPUutilities/DataStructures/RawList.cs | 433 ++ .../DataStructures/RawList.cs.meta | 11 + .../DataStructures/RawValueList.cs | 131 + .../DataStructures/RawValueList.cs.meta | 11 + .../DataStructures/ReadOnlyDictionary.cs | 131 + .../DataStructures/ReadOnlyDictionary.cs.meta | 11 + .../DataStructures/ReadOnlyEnumerable.cs | 44 + .../DataStructures/ReadOnlyEnumerable.cs.meta | 11 + .../DataStructures/ReadOnlyList.cs | 192 + .../DataStructures/ReadOnlyList.cs.meta | 11 + .../BEPUutilities/DataStructures/TinyList.cs | 278 + .../DataStructures/TinyList.cs.meta | 11 + .../DataStructures/TinyStructList.cs | 288 + .../DataStructures/TinyStructList.cs.meta | 11 + .../Core/BepuPhysics1/BEPUutilities/Int2.cs | 51 + .../BepuPhysics1/BEPUutilities/Int2.cs.meta | 11 + .../BepuPhysics1/BEPUutilities/MathChecker.cs | 178 + .../BEPUutilities/MathChecker.cs.meta | 11 + .../BepuPhysics1/BEPUutilities/MathHelper.cs | 110 + .../BEPUutilities/MathHelper.cs.meta | 11 + .../Core/BepuPhysics1/BEPUutilities/Matrix.cs | 1389 ++++ .../BepuPhysics1/BEPUutilities/Matrix.cs.meta | 11 + .../BepuPhysics1/BEPUutilities/Matrix2x2.cs | 358 + .../BEPUutilities/Matrix2x2.cs.meta | 11 + .../BepuPhysics1/BEPUutilities/Matrix2x3.cs | 248 + .../BEPUutilities/Matrix2x3.cs.meta | 11 + .../BepuPhysics1/BEPUutilities/Matrix3x2.cs | 256 + .../BEPUutilities/Matrix3x2.cs.meta | 11 + .../BepuPhysics1/BEPUutilities/Matrix3x3.cs | 1414 ++++ .../BEPUutilities/Matrix3x3.cs.meta | 11 + .../BEPUutilities/PermutationMapper.cs | 129 + .../BEPUutilities/PermutationMapper.cs.meta | 11 + .../Core/BepuPhysics1/BEPUutilities/Plane.cs | 75 + .../BepuPhysics1/BEPUutilities/Plane.cs.meta | 11 + .../BepuPhysics1/BEPUutilities/Quaternion.cs | 866 +++ .../BEPUutilities/Quaternion.cs.meta | 11 + .../Core/BepuPhysics1/BEPUutilities/Ray.cs | 188 + .../BepuPhysics1/BEPUutilities/Ray.cs.meta | 11 + .../Core/BepuPhysics1/BEPUutilities/RayHit.cs | 22 + .../BepuPhysics1/BEPUutilities/RayHit.cs.meta | 11 + .../BEPUutilities/ResourceManagement.meta | 8 + .../ResourceManagement/BufferPool.cs | 165 + .../ResourceManagement/BufferPool.cs.meta | 11 + .../ResourceManagement/BufferPools.cs | 33 + .../ResourceManagement/BufferPools.cs.meta | 11 + .../ResourceManagement/CommonResources.cs | 132 + .../CommonResources.cs.meta | 11 + .../ResourceManagement/LockingBufferPool.cs | 43 + .../LockingBufferPool.cs.meta | 11 + .../ResourceManagement/LockingResourcePool.cs | 115 + .../LockingResourcePool.cs.meta | 11 + .../ResourceManagement/ResourcePool.cs | 62 + .../ResourceManagement/ResourcePool.cs.meta | 11 + .../ResourceManagement/UnsafeResourcePool.cs | 111 + .../UnsafeResourcePool.cs.meta | 11 + .../BEPUutilities/RigidTransform.cs | 160 + .../BEPUutilities/RigidTransform.cs.meta | 11 + .../BepuPhysics1/BEPUutilities/SpinLock.cs | 73 + .../BEPUutilities/SpinLock.cs.meta | 11 + .../BepuPhysics1/BEPUutilities/Threading.meta | 8 + .../Threading/IParallelLooper.cs | 31 + .../Threading/IParallelLooper.cs.meta | 11 + .../Threading/ParallelLoopWorker.cs | 100 + .../Threading/ParallelLoopWorker.cs.meta | 11 + .../BEPUutilities/Threading/ParallelLooper.cs | 187 + .../Threading/ParallelLooper.cs.meta | 11 + .../BepuPhysics1/BEPUutilities/Toolbox.cs | 1747 +++++ .../BEPUutilities/Toolbox.cs.meta | 11 + .../BEPUutilities/TriangleSidedness.cs | 22 + .../BEPUutilities/TriangleSidedness.cs.meta | 11 + .../BepuPhysics1/BEPUutilities/Vector2.cs | 451 ++ .../BEPUutilities/Vector2.cs.meta | 11 + .../BepuPhysics1/BEPUutilities/Vector3.cs | 746 ++ .../BEPUutilities/Vector3.cs.meta | 11 + .../BepuPhysics1/BEPUutilities/Vector4.cs | 707 ++ .../BEPUutilities/Vector4.cs.meta | 11 + .../BEPUutilities/VoronoiRegion.cs | 18 + .../BEPUutilities/VoronoiRegion.cs.meta | 11 + .../JNGame/BepuPhysics/Core/BepuPhysics2.meta | 8 + .../Core/BepuPhysics2/BepuPhysics.2.3.4.meta | 8 + .../BepuPhysics.2.3.4/.signature.p7s | Bin 0 -> 9472 bytes .../BepuPhysics.2.3.4/BepuPhysics.nuspec | 21 + .../BepuPhysics.2.3.4/BepuPhysics.nuspec.meta | 7 + .../BepuPhysics.2.3.4/bepuphysicslogo256.png | Bin 0 -> 42285 bytes .../bepuphysicslogo256.png.meta | 140 + .../BepuPhysics2/BepuPhysics.2.3.4/lib.meta | 8 + .../BepuPhysics.2.3.4/lib/netstandard2.0.meta | 8 + .../lib/netstandard2.0/BepuPhysics.dll | Bin 0 -> 731648 bytes .../lib/netstandard2.0/BepuPhysics.dll.meta | 23 + .../lib/netstandard2.0/BepuPhysics.xml | 6303 ++++++++++++++++ .../lib/netstandard2.0/BepuPhysics.xml.meta | 7 + .../BepuPhysics2/BepuUtilities.2.3.4.meta | 8 + .../BepuUtilities.2.3.4/.signature.p7s | Bin 0 -> 9473 bytes .../BepuUtilities.2.3.4/BepuUtilities.nuspec | 22 + .../BepuUtilities.nuspec.meta | 7 + .../bepuphysicslogo256.png | Bin 0 -> 42285 bytes .../bepuphysicslogo256.png.meta | 140 + .../BepuPhysics2/BepuUtilities.2.3.4/lib.meta | 8 + .../lib/netstandard2.0.meta | 8 + .../lib/netstandard2.0/BepuUtilities.dll | Bin 0 -> 128512 bytes .../lib/netstandard2.0/BepuUtilities.dll.meta | 23 + .../lib/netstandard2.0/BepuUtilities.xml | 4105 +++++++++++ .../lib/netstandard2.0/BepuUtilities.xml.meta | 7 + .../JNGame/BepuPhysics/JNBepuPhysics.cs.meta | 12 +- .../JNGame/BepuPhysics/JNBepuPhysics1.cs | 24 + .../JNGame/BepuPhysics/JNBepuPhysics1.cs.meta | 3 + .../Plugins/JNGame/Sync/Frame/JNSyncFrame.cs | 2 +- JNFrame/Assets/Plugins/JNGame/Util/JAPI.cs | 2 +- JNFrame/Assets/Script/App.cs | 2 +- JNFrame/Assets/Script/AppImpl/JNGSocket.cs | 2 +- .../Script/battle/mode/GWorldSceneMode.cs | 2 +- JNFrame/Assets/packages.config | 2 +- JNFrame/JNFrame.sln | 20 +- JNFrame/Logs/AssetImportWorker0-prev.log | 1082 +++ JNFrame/Logs/AssetImportWorker1-prev.log | 930 +++ JNFrame/Logs/Packages-Update.log | 8 + ...hadercompiler-UnityShaderCompiler.exe0.log | 2 +- .../.signature.p7s | Bin 0 -> 22354 bytes .../LICENSE.TXT | 23 + ...untime.CompilerServices.Unsafe.4.5.2.nupkg | Bin 0 -> 104723 bytes .../THIRD-PARTY-NOTICES.TXT | 309 + ...System.Runtime.CompilerServices.Unsafe.dll | Bin 0 -> 23088 bytes ...System.Runtime.CompilerServices.Unsafe.xml | 200 + ...System.Runtime.CompilerServices.Unsafe.dll | Bin 0 -> 23600 bytes ...System.Runtime.CompilerServices.Unsafe.xml | 200 + ...System.Runtime.CompilerServices.Unsafe.dll | Bin 0 -> 23600 bytes ...System.Runtime.CompilerServices.Unsafe.xml | 200 + ...System.Runtime.CompilerServices.Unsafe.dll | Bin 0 -> 23304 bytes ...System.Runtime.CompilerServices.Unsafe.xml | 200 + ...System.Runtime.CompilerServices.Unsafe.dll | Bin 0 -> 23816 bytes ...System.Runtime.CompilerServices.Unsafe.xml | 200 + .../useSharedDesignerContext.txt} | 0 .../version.txt | 1 + JNFrame/Packages/manifest.json | 1 + JNFrame/Packages/packages-lock.json | 24 +- .../Settings.json | 2 - JNFrame/ProjectSettings/ProjectSettings.asset | 58 +- JNFrame/ProjectSettings/ProjectVersion.txt | 4 +- JNFrame/UniTask.Addressables.csproj | 525 +- JNFrame/UniTask.DOTween.csproj | 525 +- JNFrame/UniTask.Editor.csproj | 543 +- JNFrame/UniTask.Linq.csproj | 655 +- JNFrame/UniTask.TextMeshPro.csproj | 529 +- JNFrame/UniTask.csproj | 645 +- .../UserSettings/Layouts/default-2022.dwlt | 196 +- ...p-firstpass.csproj.AssemblyReference.cache | Bin 672778 -> 674737 bytes ...mbly-CSharp.csproj.AssemblyReference.cache | Bin 670406 -> 672365 bytes ...ddressables.csproj.AssemblyReference.cache | Bin 632999 -> 634958 bytes ...ask.DOTween.csproj.AssemblyReference.cache | Bin 632999 -> 634958 bytes ...Task.Editor.csproj.AssemblyReference.cache | Bin 663731 -> 665690 bytes ...niTask.Linq.csproj.AssemblyReference.cache | Bin 632999 -> 634958 bytes ...TextMeshPro.csproj.AssemblyReference.cache | Bin 633994 -> 635953 bytes .../UniTask.csproj.AssemblyReference.cache | Bin 632999 -> 634958 bytes 932 files changed, 112600 insertions(+), 4058 deletions(-) create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BEPUphysics.csproj create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BEPUphysics.csproj.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/BroadPhaseEntry.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/BroadPhaseEntry.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/Collidable.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/Collidable.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/CollidableCollection.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/CollidableCollection.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/CollidablePair.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/CollidablePair.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/DetectorVolume.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/DetectorVolume.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/EntityCollidableCollection.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/EntityCollidableCollection.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/Events.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/Events/CollisionEventTypes.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/Events/CollisionEventTypes.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/Events/CompoundEventManager.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/Events/CompoundEventManager.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/Events/ContactEventManager.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/Events/ContactEventManager.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/Events/EntryEventManager.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/Events/EntryEventManager.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/Events/IContactEventTriggerer.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/Events/IContactEventTriggerer.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/Events/IEntryEventTriggerer.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/Events/IEntryEventTriggerer.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/InstancedMesh.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/InstancedMesh.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/MobileCollidables.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/MobileCollidables/CompoundCollidable.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/MobileCollidables/CompoundCollidable.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/MobileCollidables/CompoundHelper.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/MobileCollidables/CompoundHelper.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/MobileCollidables/CompoundHierarchy.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/MobileCollidables/CompoundHierarchy.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/MobileCollidables/ConvexCollidable.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/MobileCollidables/ConvexCollidable.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/MobileCollidables/EntityCollidable.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/MobileCollidables/EntityCollidable.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/MobileCollidables/MobileCollidable.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/MobileCollidables/MobileCollidable.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/MobileCollidables/MobileMeshCollidable.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/MobileCollidables/MobileMeshCollidable.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/MobileCollidables/TriangleCollidable.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/MobileCollidables/TriangleCollidable.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/StaticCollidable.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/StaticCollidable.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/StaticGroup.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/StaticGroup.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/StaticMesh.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/StaticMesh.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/Terrain.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseEntries/Terrain.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/BroadPhase.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/BroadPhase.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/BroadPhaseOverlap.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/BroadPhaseOverlap.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/BruteForce.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/BruteForce.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/Hierarchies.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/Hierarchies/DynamicHierarchy.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/Hierarchies/DynamicHierarchy.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/Hierarchies/DynamicHierarchyNode.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/Hierarchies/DynamicHierarchyNode.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/Hierarchies/DynamicHierarchyQueryAccelerator.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/Hierarchies/DynamicHierarchyQueryAccelerator.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/IBoundingBoxOwner.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/IBoundingBoxOwner.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/IBroadPhaseEntryOwner.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/IBroadPhaseEntryOwner.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/IQueryAccelerator.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/IQueryAccelerator.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/SortAndSweep.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/SortAndSweep/Grid2DEntry.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/SortAndSweep/Grid2DEntry.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/SortAndSweep/Grid2DSortAndSweep.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/SortAndSweep/Grid2DSortAndSweep.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/SortAndSweep/Grid2DSortAndSweepQueryAccelerator.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/SortAndSweep/Grid2DSortAndSweepQueryAccelerator.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/SortAndSweep/GridCell2D.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/SortAndSweep/GridCell2D.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/SortAndSweep/SortAndSweep1D.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/SortAndSweep/SortAndSweep1D.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/SortAndSweep/SortedGrid2DSet.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/BroadPhaseSystems/SortAndSweep/SortedGrid2DSet.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Character.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Character/CharacterContactCategorizer.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Character/CharacterContactCategorizer.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Character/CharacterContactPositionState.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Character/CharacterContactPositionState.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Character/CharacterController.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Character/CharacterController.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Character/CharacterPairLocker.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Character/CharacterPairLocker.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Character/HorizontalMotionConstraint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Character/HorizontalMotionConstraint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Character/ICharacterTag.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Character/ICharacterTag.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Character/MovementMode.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Character/MovementMode.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Character/QueryManager.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Character/QueryManager.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Character/SphereCharacterController.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Character/SphereCharacterController.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Character/StanceManager.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Character/StanceManager.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Character/StepManager.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Character/StepManager.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Character/SupportFinder.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Character/SupportFinder.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Character/VerticalMotionConstraint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Character/VerticalMotionConstraint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionRuleManagement.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionRuleManagement/CollisionGroup.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionRuleManagement/CollisionGroup.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionRuleManagement/CollisionGroupPair.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionRuleManagement/CollisionGroupPair.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionRuleManagement/CollisionRule.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionRuleManagement/CollisionRule.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionRuleManagement/CollisionRules.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionRuleManagement/CollisionRules.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionRuleManagement/ICollisionRulesOwner.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionRuleManagement/ICollisionRulesOwner.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/CollisionShape.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/CollisionShape.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/CompoundShape.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/CompoundShape.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/ConvexShapes.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/ConvexShapes/BoxShape.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/ConvexShapes/BoxShape.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/ConvexShapes/CapsuleShape.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/ConvexShapes/CapsuleShape.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/ConvexShapes/ConeShape.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/ConvexShapes/ConeShape.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/ConvexShapes/ConvexHullShape.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/ConvexShapes/ConvexHullShape.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/ConvexShapes/ConvexShape.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/ConvexShapes/ConvexShape.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/ConvexShapes/ConvexShapeDescription.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/ConvexShapes/ConvexShapeDescription.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/ConvexShapes/CylinderShape.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/ConvexShapes/CylinderShape.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/ConvexShapes/InertiaHelper.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/ConvexShapes/InertiaHelper.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/ConvexShapes/MinkowskiSumShape.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/ConvexShapes/MinkowskiSumShape.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/ConvexShapes/SphereShape.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/ConvexShapes/SphereShape.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/ConvexShapes/TransformableShape.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/ConvexShapes/TransformableShape.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/ConvexShapes/TriangleShape.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/ConvexShapes/TriangleShape.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/ConvexShapes/WrappedShape.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/ConvexShapes/WrappedShape.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/EntityShape.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/EntityShape.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/EntityShapeVolumeDescription.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/EntityShapeVolumeDescription.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/InstancedMeshShape.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/InstancedMeshShape.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/MobileMeshShape.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/MobileMeshShape.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/ShapeDistributionInformation.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/ShapeDistributionInformation.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/StaticGroupShape.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/StaticGroupShape.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/StaticMeshShape.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/StaticMeshShape.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/TerrainShape.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionShapes/TerrainShape.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/CollisionAlgorithms.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/CollisionAlgorithms/BoxBoxCollider.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/CollisionAlgorithms/BoxBoxCollider.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/CollisionAlgorithms/BoxSphereTester.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/CollisionAlgorithms/BoxSphereTester.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/CollisionAlgorithms/GJK.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/CollisionAlgorithms/GJK/GJKToolbox.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/CollisionAlgorithms/GJK/GJKToolbox.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/CollisionAlgorithms/GJK/PairSimplex.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/CollisionAlgorithms/GJK/PairSimplex.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/CollisionAlgorithms/GJK/RaySimplex.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/CollisionAlgorithms/GJK/RaySimplex.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/CollisionAlgorithms/GJK/SimpleSimplex.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/CollisionAlgorithms/GJK/SimpleSimplex.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/CollisionAlgorithms/GeneralConvexPairTester.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/CollisionAlgorithms/GeneralConvexPairTester.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/CollisionAlgorithms/MPRToolbox.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/CollisionAlgorithms/MPRToolbox.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/CollisionAlgorithms/MinkowskiToolbox.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/CollisionAlgorithms/MinkowskiToolbox.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/CollisionAlgorithms/SphereTester.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/CollisionAlgorithms/SphereTester.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/CollisionAlgorithms/TriangleConvexPairTester.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/CollisionAlgorithms/TriangleConvexPairTester.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/CollisionAlgorithms/TrianglePairTester.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/CollisionAlgorithms/TrianglePairTester.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/CollisionAlgorithms/TriangleSpherePairTester.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/CollisionAlgorithms/TriangleSpherePairTester.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/CollisionAlgorithms/TriangleTrianglePairTester.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/CollisionAlgorithms/TriangleTrianglePairTester.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Contact.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Contact.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/ContactData.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/ContactData.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/ContactReducer.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/ContactReducer.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/ContactRefresher.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/ContactRefresher.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/ContactSupplementData.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/ContactSupplementData.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/BoxContactManifold.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/BoxContactManifold.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/BoxSphereContactManifold.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/BoxSphereContactManifold.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/ContactManifold.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/ContactManifold.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/GeneralConvexContactManifold.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/GeneralConvexContactManifold.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/InstancedMeshContactManifold.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/InstancedMeshContactManifold.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/InstancedMeshConvexContactManifold.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/InstancedMeshConvexContactManifold.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/InstancedMeshSphereContactManifold.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/InstancedMeshSphereContactManifold.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/MobileMeshContactManifold.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/MobileMeshContactManifold.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/MobileMeshConvexContactManifold.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/MobileMeshConvexContactManifold.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/MobileMeshSphereContactManifold.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/MobileMeshSphereContactManifold.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/MobileMeshTriangleContactManifold.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/MobileMeshTriangleContactManifold.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/SphereContactManifold.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/SphereContactManifold.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/StaticMeshContactManifold.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/StaticMeshContactManifold.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/StaticMeshConvexContactManifold.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/StaticMeshConvexContactManifold.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/StaticMeshSphereContactManifold.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/StaticMeshSphereContactManifold.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/TerrainContactManifold.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/TerrainContactManifold.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/TerrainConvexContactManifold.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/TerrainConvexContactManifold.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/TerrainSphereContactManifold.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/TerrainSphereContactManifold.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/TerrainVertexIndices.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/TerrainVertexIndices.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/TriangleConvexContactManifold.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/TriangleConvexContactManifold.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/TriangleMeshConvexContactManifold.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/CollisionTests/Manifolds/TriangleMeshConvexContactManifold.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/Collision.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/Collision/ContactFrictionConstraint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/Collision/ContactFrictionConstraint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/Collision/ContactManifoldConstraint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/Collision/ContactManifoldConstraint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/Collision/ContactManifoldConstraintGroup.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/Collision/ContactManifoldConstraintGroup.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/Collision/ContactPenetrationConstraint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/Collision/ContactPenetrationConstraint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/Collision/ConvexContactManifoldConstraint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/Collision/ConvexContactManifoldConstraint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/Collision/NonConvexContactManifoldConstraint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/Collision/NonConvexContactManifoldConstraint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/Collision/SlidingFrictionTwoAxis.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/Collision/SlidingFrictionTwoAxis.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/Collision/TwistFrictionConstraint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/Collision/TwistFrictionConstraint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/IJacobians.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/IJacobians.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/ISolverSettings.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/ISolverSettings.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/ISpringConstraint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/ISpringConstraint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/IXDImpulseConstraint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/IXDImpulseConstraint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/JointTransform.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/JointTransform.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SingleEntity.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SingleEntity/MaximumAngularVelocityConstraint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SingleEntity/MaximumAngularVelocityConstraint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SingleEntity/MaximumLinearVelocityConstraint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SingleEntity/MaximumLinearVelocityConstraint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SingleEntity/SingleEntityAngularMotor.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SingleEntity/SingleEntityAngularMotor.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SingleEntity/SingleEntityConstraint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SingleEntity/SingleEntityConstraint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SingleEntity/SingleEntityLinearMotor.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SingleEntity/SingleEntityLinearMotor.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/Solver.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/Solver.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SolverGroups.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SolverGroups/CustomizableSolverGroup.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SolverGroups/CustomizableSolverGroup.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SolverGroups/LineSliderJoint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SolverGroups/LineSliderJoint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SolverGroups/PlaneSliderJoint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SolverGroups/PlaneSliderJoint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SolverGroups/PrismaticJoint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SolverGroups/PrismaticJoint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SolverGroups/RevoluteJoint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SolverGroups/RevoluteJoint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SolverGroups/SolverGroup.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SolverGroups/SolverGroup.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SolverGroups/SwivelHingeJoint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SolverGroups/SwivelHingeJoint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SolverGroups/UniversalJoint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SolverGroups/UniversalJoint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SolverGroups/WeldJoint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SolverGroups/WeldJoint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SolverSettings.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SolverSettings.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SolverUpdateable.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SolverUpdateable.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SolverUpdateableChange.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SolverUpdateableChange.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SpringSettings.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/SpringSettings.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/JointLimits.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/JointLimits/DistanceLimit.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/JointLimits/DistanceLimit.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/JointLimits/EllipseSwingLimit.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/JointLimits/EllipseSwingLimit.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/JointLimits/JointLimit.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/JointLimits/JointLimit.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/JointLimits/LinearAxisLimit.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/JointLimits/LinearAxisLimit.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/JointLimits/RevoluteLimit.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/JointLimits/RevoluteLimit.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/JointLimits/SwingLimit.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/JointLimits/SwingLimit.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/JointLimits/TwistLimit.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/JointLimits/TwistLimit.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Joints.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Joints/BallSocketJoint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Joints/BallSocketJoint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Joints/DistanceJoint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Joints/DistanceJoint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Joints/Joint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Joints/Joint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Joints/NoRotationJoint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Joints/NoRotationJoint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Joints/PointOnLineJoint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Joints/PointOnLineJoint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Joints/PointOnPlaneJoint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Joints/PointOnPlaneJoint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Joints/RevoluteAngularJoint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Joints/RevoluteAngularJoint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Joints/SwivelHingeAngularJoint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Joints/SwivelHingeAngularJoint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Joints/TwistJoint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Joints/TwistJoint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Motors.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Motors/AngularMotor.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Motors/AngularMotor.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Motors/LinearAxisMotor.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Motors/LinearAxisMotor.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Motors/Motor.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Motors/Motor.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Motors/MotorSettings.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Motors/MotorSettings.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Motors/RevoluteMotor.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Motors/RevoluteMotor.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Motors/TwistMotor.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/Motors/TwistMotor.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/TwoEntityConstraint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Constraints/TwoEntity/TwoEntityConstraint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DataStructures.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DataStructures/BoundingBoxTree.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DataStructures/BoundingBoxTree.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DataStructures/MeshBoundingBoxTree.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DataStructures/MeshBoundingBoxTree.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DataStructures/MeshBoundingBoxTreeData.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DataStructures/MeshBoundingBoxTreeData.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DataStructures/StaticMeshData.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DataStructures/StaticMeshData.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DataStructures/TransformableMeshData.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DataStructures/TransformableMeshData.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DataStructures/TreeOverlapPair.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DataStructures/TreeOverlapPair.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DataStructures/TriangleMesh.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DataStructures/TriangleMesh.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DeactivationManagement.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DeactivationManagement/DeactivationManager.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DeactivationManagement/DeactivationManager.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DeactivationManagement/ISimulationIslandConnection.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DeactivationManagement/ISimulationIslandConnection.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DeactivationManagement/ISimulationIslandConnectionOwner.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DeactivationManagement/ISimulationIslandConnectionOwner.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DeactivationManagement/ISimulationIslandMemberOwner.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DeactivationManagement/ISimulationIslandMemberOwner.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DeactivationManagement/SimulationIsland.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DeactivationManagement/SimulationIsland.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DeactivationManagement/SimulationIslandConnection.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DeactivationManagement/SimulationIslandConnection.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DeactivationManagement/SimulationIslandMember.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DeactivationManagement/SimulationIslandMember.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DeactivationManagement/SimulationIslandMemberList.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/DeactivationManagement/SimulationIslandMemberList.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/Entity.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/Entity.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/EntityBase.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/EntityBase.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/EntityConstraintCollection.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/EntityConstraintCollection.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/EntitySolverUpdateableCollection.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/EntitySolverUpdateableCollection.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/MorphableEntity.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/MorphableEntity.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/Prefabs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/Prefabs/Box.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/Prefabs/Box.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/Prefabs/Capsule.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/Prefabs/Capsule.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/Prefabs/CompoundBody.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/Prefabs/CompoundBody.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/Prefabs/Cone.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/Prefabs/Cone.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/Prefabs/ConvexHull.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/Prefabs/ConvexHull.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/Prefabs/Cylinder.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/Prefabs/Cylinder.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/Prefabs/MinkowskiSum.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/Prefabs/MinkowskiSum.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/Prefabs/MobileMesh.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/Prefabs/MobileMesh.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/Prefabs/Sphere.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/Prefabs/Sphere.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/Prefabs/TransformableEntity.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/Prefabs/TransformableEntity.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/Prefabs/Triangle.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/Prefabs/Triangle.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/Prefabs/WrappedBody.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Entities/Prefabs/WrappedBody.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/EntityStateManagement.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/EntityStateManagement/BufferedStatesAccessor.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/EntityStateManagement/BufferedStatesAccessor.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/EntityStateManagement/BufferedStatesManager.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/EntityStateManagement/BufferedStatesManager.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/EntityStateManagement/EntityBufferedStates.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/EntityStateManagement/EntityBufferedStates.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/EntityStateManagement/EntityStateReadBuffers.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/EntityStateManagement/EntityStateReadBuffers.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/EntityStateManagement/EntityStateWriteBuffer.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/EntityStateManagement/EntityStateWriteBuffer.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/EntityStateManagement/InterpolatedStatesAccessor.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/EntityStateManagement/InterpolatedStatesAccessor.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/EntityStateManagement/InterpolatedStatesManager.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/EntityStateManagement/InterpolatedStatesManager.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/EntityStateManagement/MotionState.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/EntityStateManagement/MotionState.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/ISpaceObject.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/ISpaceObject.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Materials.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Materials/IMaterialOwner.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Materials/IMaterialOwner.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Materials/InteractionProperties.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Materials/InteractionProperties.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Materials/Material.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Materials/Material.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Materials/MaterialManager.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Materials/MaterialManager.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Materials/MaterialPair.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Materials/MaterialPair.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/MultithreadedProcessingStage.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/MultithreadedProcessingStage.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/NarrowPhase.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/NarrowPhase.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/NarrowPhaseHelper.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/NarrowPhaseHelper.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/NarrowPhasePairFactory.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/NarrowPhasePairFactory.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/BoxPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/BoxPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/BoxSpherePairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/BoxSpherePairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/CollidablePairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/CollidablePairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/CompoundConvexPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/CompoundConvexPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/CompoundGroupPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/CompoundGroupPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/CompoundInstancedMeshPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/CompoundInstancedMeshPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/CompoundMobileMeshPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/CompoundMobileMeshPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/CompoundPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/CompoundPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/CompoundStaticMeshPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/CompoundStaticMeshPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/CompoundTerrainPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/CompoundTerrainPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/ContactCollection.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/ContactCollection.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/ContactInformation.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/ContactInformation.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/ConvexConstraintPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/ConvexConstraintPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/ConvexPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/ConvexPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/DetectorVolumeCompoundPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/DetectorVolumeCompoundPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/DetectorVolumeConvexPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/DetectorVolumeConvexPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/DetectorVolumeGroupPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/DetectorVolumeGroupPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/DetectorVolumeMobileMeshPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/DetectorVolumeMobileMeshPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/DetectorVolumePairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/DetectorVolumePairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/GeneralConvexPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/GeneralConvexPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/GroupPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/GroupPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/IDetectorVolumePairHandlerParent.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/IDetectorVolumePairHandlerParent.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/IPairHandlerParent.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/IPairHandlerParent.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/InstancedMeshConvexPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/InstancedMeshConvexPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/InstancedMeshPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/InstancedMeshPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/InstancedMeshSpherePairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/InstancedMeshSpherePairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/MeshGroupPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/MeshGroupPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/MobileMeshConvexPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/MobileMeshConvexPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/MobileMeshInstancedMeshPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/MobileMeshInstancedMeshPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/MobileMeshMeshPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/MobileMeshMeshPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/MobileMeshMobileMeshPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/MobileMeshMobileMeshPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/MobileMeshPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/MobileMeshPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/MobileMeshSpherePairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/MobileMeshSpherePairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/MobileMeshStaticMeshPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/MobileMeshStaticMeshPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/MobileMeshTerrainPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/MobileMeshTerrainPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/MobileMeshTrianglePairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/MobileMeshTrianglePairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/NarrowPhasePair.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/NarrowPhasePair.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/SpherePairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/SpherePairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/StandardPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/StandardPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/StaticGroupCompoundPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/StaticGroupCompoundPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/StaticGroupConvexPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/StaticGroupConvexPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/StaticGroupMobileMeshPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/StaticGroupMobileMeshPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/StaticGroupPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/StaticGroupPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/StaticMeshConvexPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/StaticMeshConvexPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/StaticMeshPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/StaticMeshPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/StaticMeshSpherePairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/StaticMeshSpherePairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/TerrainConvexPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/TerrainConvexPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/TerrainPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/TerrainPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/TerrainSpherePairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/TerrainSpherePairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/TriangleConvexPairHandler.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/NarrowPhaseSystems/Pairs/TriangleConvexPairHandler.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/OtherSpaceStages.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/OtherSpaceStages/BoundingBoxUpdater.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/OtherSpaceStages/BoundingBoxUpdater.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/OtherSpaceStages/DeferredEventDispatcher.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/OtherSpaceStages/DeferredEventDispatcher.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/OtherSpaceStages/ForceUpdater.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/OtherSpaceStages/ForceUpdater.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/OtherSpaceStages/IDeferredEventCreator.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/OtherSpaceStages/IDeferredEventCreator.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/OtherSpaceStages/IDeferredEventCreatorOwner.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/OtherSpaceStages/IDeferredEventCreatorOwner.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/OtherSpaceStages/IForceUpdateable.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/OtherSpaceStages/IForceUpdateable.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/OtherSpaceStages/SpaceObjectBuffer.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/OtherSpaceStages/SpaceObjectBuffer.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/CardinalSpline3D.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/CardinalSpline3D.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/ConstantAngularSpeedCurve.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/ConstantAngularSpeedCurve.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/ConstantLinearSpeedCurve.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/ConstantLinearSpeedCurve.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/ConstantSpeedCurve.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/ConstantSpeedCurve.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/Curve.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/Curve.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/CurveControlPoint.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/CurveControlPoint.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/CurveControlPointList.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/CurveControlPointList.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/CurveEndpointBehavior.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/CurveEndpointBehavior.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/FiniteDifferenceSpline3D.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/FiniteDifferenceSpline3D.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/HermiteCurve3D.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/HermiteCurve3D.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/LinearInterpolationCurve3D.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/LinearInterpolationCurve3D.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/Path following.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/Path following/EntityMover.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/Path following/EntityMover.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/Path following/EntityRotator.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/Path following/EntityRotator.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/Path.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/Path.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/QuaternionSlerpCurve.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/QuaternionSlerpCurve.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/SpeedControlledCurve.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/SpeedControlledCurve.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/StepCurve1D.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/StepCurve1D.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/VariableAngularSpeedCurve.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/VariableAngularSpeedCurve.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/VariableLinearSpeedCurve.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/VariableLinearSpeedCurve.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/VariableSpeedCurve.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Paths/VariableSpeedCurve.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/PhysicsChecker.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/PhysicsChecker.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/PhysicsResources.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/PhysicsResources.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/PhysicsThreadResources.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/PhysicsThreadResources.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/PositionUpdating.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/PositionUpdating/ContinuousPositionUpdater.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/PositionUpdating/ContinuousPositionUpdater.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/PositionUpdating/ICCDPositionUpdateable.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/PositionUpdating/ICCDPositionUpdateable.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/PositionUpdating/IPositionUpdateable.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/PositionUpdating/IPositionUpdateable.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/PositionUpdating/PositionUpdater.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/PositionUpdating/PositionUpdater.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/ProcessingStage.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/ProcessingStage.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/RayCastResult.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/RayCastResult.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Settings.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Settings/CollisionDetectionSettings.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Settings/CollisionDetectionSettings.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Settings/CollisionResponseSettings.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Settings/CollisionResponseSettings.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Settings/MotionSettings.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Settings/MotionSettings.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Space.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Space.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/TimeStepSettings.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/TimeStepSettings.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/CombinedUpdateable.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/CombinedUpdateable.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/FluidVolume.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/FluidVolume.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/ForceFields.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/ForceFields/BoundingBoxForceFieldShape.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/ForceFields/BoundingBoxForceFieldShape.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/ForceFields/BoundingSphereForceFieldShape.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/ForceFields/BoundingSphereForceFieldShape.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/ForceFields/ForceField.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/ForceFields/ForceField.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/ForceFields/ForceFieldShape.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/ForceFields/ForceFieldShape.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/ForceFields/InfiniteForceFieldShape.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/ForceFields/InfiniteForceFieldShape.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/ForceFields/VolumeForceFieldShape.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/ForceFields/VolumeForceFieldShape.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/IBeforeNarrowPhaseUpdateable.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/IBeforeNarrowPhaseUpdateable.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/IBeforePositionUpdateUpdateable.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/IBeforePositionUpdateUpdateable.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/IBeforeSolverUpdateable.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/IBeforeSolverUpdateable.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/IDuringForcesUpdateable.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/IDuringForcesUpdateable.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/IEndOfFrameUpdateable.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/IEndOfFrameUpdateable.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/IEndOfTimeStepUpdateable.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/IEndOfTimeStepUpdateable.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/ISpaceUpdateable.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/ISpaceUpdateable.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/Updateable.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/Updateable.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/UpdateableManager.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/UpdateableManager.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/UpdateableManagers.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/UpdateableSystems/UpdateableManagers.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Vehicle.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Vehicle/CylinderCastWheelShape.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Vehicle/CylinderCastWheelShape.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Vehicle/RaycastWheelShape.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Vehicle/RaycastWheelShape.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Vehicle/Vehicle.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Vehicle/Vehicle.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Vehicle/Wheel.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Vehicle/Wheel.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Vehicle/WheelBrake.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Vehicle/WheelBrake.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Vehicle/WheelDrivingMotor.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Vehicle/WheelDrivingMotor.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Vehicle/WheelFrictionBlender.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Vehicle/WheelFrictionBlender.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Vehicle/WheelShape.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Vehicle/WheelShape.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Vehicle/WheelSlidingFriction.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Vehicle/WheelSlidingFriction.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Vehicle/WheelSuspension.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUphysics/Vehicle/WheelSuspension.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/AffineTransform.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/AffineTransform.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/BEPUutilities.csproj create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/BEPUutilities.csproj.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/BoundingBox.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/BoundingBox.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/BoundingSphere.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/BoundingSphere.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ContainmentType.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ContainmentType.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ConvexHullHelper.Pruning.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ConvexHullHelper.Pruning.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ConvexHullHelper.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ConvexHullHelper.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ConcurrentDeque.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ConcurrentDeque.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ObservableDictionary.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ObservableDictionary.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ObservableList.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ObservableList.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickDictionary.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickDictionary.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickList.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickList.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickQueue.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickQueue.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickSet.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickSet.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/RawList.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/RawList.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/RawValueList.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/RawValueList.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ReadOnlyDictionary.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ReadOnlyDictionary.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ReadOnlyEnumerable.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ReadOnlyEnumerable.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ReadOnlyList.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ReadOnlyList.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/TinyList.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/TinyList.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/TinyStructList.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/TinyStructList.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Int2.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Int2.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/MathChecker.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/MathChecker.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/MathHelper.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/MathHelper.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix2x2.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix2x2.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix2x3.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix2x3.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix3x2.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix3x2.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix3x3.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix3x3.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/PermutationMapper.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/PermutationMapper.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Plane.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Plane.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Quaternion.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Quaternion.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Ray.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Ray.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/RayHit.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/RayHit.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/BufferPool.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/BufferPool.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/BufferPools.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/BufferPools.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/CommonResources.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/CommonResources.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/LockingBufferPool.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/LockingBufferPool.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/LockingResourcePool.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/LockingResourcePool.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/ResourcePool.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/ResourcePool.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/UnsafeResourcePool.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/UnsafeResourcePool.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/RigidTransform.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/RigidTransform.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/SpinLock.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/SpinLock.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Threading.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Threading/IParallelLooper.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Threading/IParallelLooper.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Threading/ParallelLoopWorker.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Threading/ParallelLoopWorker.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Threading/ParallelLooper.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Threading/ParallelLooper.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Toolbox.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Toolbox.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/TriangleSidedness.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/TriangleSidedness.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Vector2.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Vector2.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Vector3.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Vector3.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Vector4.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Vector4.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/VoronoiRegion.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/VoronoiRegion.cs.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/.signature.p7s create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/BepuPhysics.nuspec create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/BepuPhysics.nuspec.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/bepuphysicslogo256.png create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/bepuphysicslogo256.png.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/lib.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/lib/netstandard2.0.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/lib/netstandard2.0/BepuPhysics.dll create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/lib/netstandard2.0/BepuPhysics.dll.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/lib/netstandard2.0/BepuPhysics.xml create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/lib/netstandard2.0/BepuPhysics.xml.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/.signature.p7s create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/BepuUtilities.nuspec create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/BepuUtilities.nuspec.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/bepuphysicslogo256.png create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/bepuphysicslogo256.png.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/lib.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/lib/netstandard2.0.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/lib/netstandard2.0/BepuUtilities.dll create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/lib/netstandard2.0/BepuUtilities.dll.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/lib/netstandard2.0/BepuUtilities.xml create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/lib/netstandard2.0/BepuUtilities.xml.meta create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/JNBepuPhysics1.cs create mode 100644 JNFrame/Assets/Plugins/JNGame/BepuPhysics/JNBepuPhysics1.cs.meta create mode 100644 JNFrame/Logs/AssetImportWorker0-prev.log create mode 100644 JNFrame/Logs/AssetImportWorker1-prev.log create mode 100644 JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/.signature.p7s create mode 100644 JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/LICENSE.TXT create mode 100644 JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/System.Runtime.CompilerServices.Unsafe.4.5.2.nupkg create mode 100644 JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/THIRD-PARTY-NOTICES.TXT create mode 100644 JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.dll create mode 100644 JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.xml create mode 100644 JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netstandard1.0/System.Runtime.CompilerServices.Unsafe.dll create mode 100644 JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netstandard1.0/System.Runtime.CompilerServices.Unsafe.xml create mode 100644 JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll create mode 100644 JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml create mode 100644 JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/ref/netstandard1.0/System.Runtime.CompilerServices.Unsafe.dll create mode 100644 JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/ref/netstandard1.0/System.Runtime.CompilerServices.Unsafe.xml create mode 100644 JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/ref/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll create mode 100644 JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/ref/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml rename JNFrame/{ProjectSettings/boot.config => Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/useSharedDesignerContext.txt} (100%) create mode 100644 JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/version.txt diff --git a/JNFrame/Assembly-CSharp-firstpass.csproj b/JNFrame/Assembly-CSharp-firstpass.csproj index 0a347a9b..01e96936 100644 --- a/JNFrame/Assembly-CSharp-firstpass.csproj +++ b/JNFrame/Assembly-CSharp-firstpass.csproj @@ -26,11 +26,11 @@ full false Temp\Bin\Debug\Assembly-CSharp-firstpass\ - UNITY_2021_3_33;UNITY_2021_3;UNITY_2021;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_2021_1_OR_NEWER;UNITY_2021_2_OR_NEWER;UNITY_2021_3_OR_NEWER;UNITY_INCLUDE_TESTS;ENABLE_AR;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_EVENT_QUEUE;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_NATIVE_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;ENABLE_RUNTIME_PERMISSIONS;ENABLE_ENGINE_CODE_STRIPPING;ENABLE_ONSCREEN_KEYBOARD;ENABLE_MANAGED_UNITYTLS;INCLUDE_DYNAMIC_GI;ENABLE_SCRIPTING_GC_WBARRIERS;PLATFORM_SUPPORTS_MONO;ENABLE_VIDEO;ENABLE_ACCELERATOR_CLIENT_DEBUGGING;PLATFORM_ANDROID;TEXTCORE_1_0_OR_NEWER;UNITY_ANDROID;UNITY_ANDROID_API;ENABLE_EGL;ENABLE_NETWORK;ENABLE_RUNTIME_GI;ENABLE_CRUNCH_TEXTURE_COMPRESSION;UNITY_CAN_SHOW_SPLASH_SCREEN;UNITY_HAS_GOOGLEVR;UNITY_HAS_TANGO;ENABLE_SPATIALTRACKING;ENABLE_ETC_COMPRESSION;PLATFORM_EXTENDS_VULKAN_DEVICE;PLATFORM_HAS_MULTIPLE_SWAPCHAINS;UNITY_ANDROID_SUPPORTS_SHADOWFILES;PLATFORM_UPDATES_TIME_OUTSIDE_OF_PLAYER_LOOP;ENABLE_UNITYADS_RUNTIME;UNITY_UNITYADS_API;ENABLE_MONO;NET_STANDARD_2_0;NET_STANDARD;NET_STANDARD_2_1;NETSTANDARD;NETSTANDARD2_1;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_IG;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_LEGACY_INPUT_MANAGER;TEXTCORE_FONT_ENGINE_1_5_OR_NEWER;UNITY_PHYSICS_CUSTOM;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER + UNITY_2022_3_16;UNITY_2022_3;UNITY_2022;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_2021_1_OR_NEWER;UNITY_2021_2_OR_NEWER;UNITY_2021_3_OR_NEWER;UNITY_2022_1_OR_NEWER;UNITY_2022_2_OR_NEWER;UNITY_2022_3_OR_NEWER;PLATFORM_ARCH_64;UNITY_64;UNITY_INCLUDE_TESTS;ENABLE_AR;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_EVENT_QUEUE;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_VIRTUALTEXTURING;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_EDITOR_GAME_SERVICES;ENABLE_UNITY_GAME_SERVICES_ANALYTICS_SUPPORT;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_GENERATE_NATIVE_PLUGINS_FOR_ASSEMBLIES_API;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;ENABLE_MANAGED_UNITYTLS;INCLUDE_DYNAMIC_GI;ENABLE_SCRIPTING_GC_WBARRIERS;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;ENABLE_VIDEO;ENABLE_ACCELERATOR_CLIENT_DEBUGGING;ENABLE_NAVIGATION_PACKAGE_DEBUG_VISUALIZATION;ENABLE_NAVIGATION_HEIGHTMESH_RUNTIME_SUPPORT;ENABLE_NAVIGATION_UI_REQUIRES_PACKAGE;PLATFORM_STANDALONE;TEXTCORE_1_0_OR_NEWER;PLATFORM_STANDALONE_WIN;UNITY_STANDALONE_WIN;UNITY_STANDALONE;UNITY_UGP_API;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_NVIDIA;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_OUT_OF_PROCESS_CRASH_HANDLER;ENABLE_CLUSTER_SYNC;ENABLE_CLUSTERINPUT;PLATFORM_UPDATES_TIME_OUTSIDE_OF_PLAYER_LOOP;GFXDEVICE_WAITFOREVENT_MESSAGEPUMP;PLATFORM_INITIALIZES_MEMORY_MANAGER_EXPLICITLY;ENABLE_MONO;NET_STANDARD_2_0;NET_STANDARD;NET_STANDARD_2_1;NETSTANDARD;NETSTANDARD2_1;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_LEGACY_INPUT_MANAGER;TEXTCORE_FONT_ENGINE_1_5_OR_NEWER;UNITY_PHYSICS_CUSTOM;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER prompt 4 0169,0649 - False + True False @@ -41,2326 +41,2741 @@ false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ARModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ARModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AccessibilityModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AccessibilityModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AndroidJNIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AndroidJNIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AnimationModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AnimationModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AssetBundleModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AssetBundleModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AudioModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AudioModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClothModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClothModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClusterInputModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClusterRendererModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ContentLoadModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CoreModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CoreModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CrashReportingModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CrashReportingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DSPGraphModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DSPGraphModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DirectorModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DirectorModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GameCenterModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GameCenterModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GridModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GridModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.HotReloadModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.HotReloadModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.IMGUIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.IMGUIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ImageConversionModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ImageConversionModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputLegacyModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputLegacyModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.JSONSerializeModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.JSONSerializeModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.LocalizationModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.LocalizationModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ParticleSystemModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ParticleSystemModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PerformanceReportingModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PerformanceReportingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PhysicsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PhysicsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.Physics2DModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.Physics2DModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ProfilerModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ProfilerModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PropertiesModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ScreenCaptureModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ScreenCaptureModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SharedInternalsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SharedInternalsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteMaskModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteMaskModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteShapeModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteShapeModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.StreamingModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.StreamingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubstanceModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubstanceModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubsystemsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubsystemsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TLSModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TLSModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainPhysicsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainPhysicsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreFontEngineModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreFontEngineModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreTextEngineModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreTextEngineModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextRenderingModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextRenderingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TilemapModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TilemapModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsModule.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsNativeModule.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIWidgetsModule.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UNETModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UmbraModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UmbraModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsCommonModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsCommonModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityConnectModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityConnectModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityCurlModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityCurlModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityTestProtocolModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityTestProtocolModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAssetBundleModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAssetBundleModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAudioModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAudioModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestTextureModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestTextureModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestWWWModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestWWWModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VFXModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VFXModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VRModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VRModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VehiclesModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VehiclesModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VideoModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VideoModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VirtualTexturingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.WindModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.WindModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.XRModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.XRModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.CoreModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.CoreModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DeviceSimulatorModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DeviceSimulatorModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DiagnosticsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DiagnosticsModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.EditorToolbarModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.GraphViewModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.GraphViewModule.dll - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.PackageManagerUIModule.dll + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.PresetsUIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.QuickSearchModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.QuickSearchModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneTemplateModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneTemplateModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneViewModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreFontEngineModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreFontEngineModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreTextEngineModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreTextEngineModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIBuilderModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIBuilderModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsSamplesModule.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIServiceModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsSamplesModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UnityConnectModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UnityConnectModule.dll - D:\myproject\JisolGame\JNFrame\Assets\Packages\BepuUtilities.2.3.4\lib\netstandard2.0\BepuUtilities.dll - - - D:\myproject\JisolGame\JNFrame\Assets\Packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - D:\myproject\JisolGame\JNFrame\Assets\Packages\BepuPhysics.2.3.4\lib\netstandard2.0\BepuPhysics.dll + D:\Jisol\JisolGame\JNFrame\Assets\Plugins\JNGame\BepuPhysics\Core\BepuPhysics2\BepuUtilities.2.3.4\lib\netstandard2.0\BepuUtilities.dll - D:\myproject\JisolGame\JNFrame\Assets\Packages\Newtonsoft.Json.13.0.3\lib\netstandard2.0\Newtonsoft.Json.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Runtime\VisualScripting.Flow\Dependencies\NCalc\Unity.VisualScripting.Antlr3.Runtime.dll + D:\Jisol\JisolGame\JNFrame\Assets\Packages\Newtonsoft.Json.13.0.3\lib\netstandard2.0\Newtonsoft.Json.dll - D:\myproject\JisolGame\JNFrame\Assets\Packages\Google.Protobuf.3.19.6\lib\netstandard2.0\Google.Protobuf.dll + D:\Jisol\JisolGame\JNFrame\Assets\Packages\Google.Protobuf.3.19.6\lib\netstandard2.0\Google.Protobuf.dll - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.testtools.codecoverage@1.2.4\lib\ReportGenerator\ReportGeneratorMerged.dll + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.testtools.codecoverage@1.2.4\lib\ReportGenerator\ReportGeneratorMerged.dll + + + D:\Jisol\JisolGame\JNFrame\Assets\Packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll + + + D:\Jisol\JisolGame\JNFrame\Assets\Plugins\JNGame\BepuPhysics\Core\BepuPhysics2\BepuPhysics.2.3.4\lib\netstandard2.0\BepuPhysics.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Runtime\VisualScripting.Flow\Dependencies\NCalc\Unity.VisualScripting.Antlr3.Runtime.dll - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Types.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Types.dll - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Gradle.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Gradle.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.GradleProject.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\ref\2.1.0\netstandard.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\ref\2.1.0\netstandard.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\Microsoft.Win32.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\Microsoft.Win32.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.AppContext.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.AppContext.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Buffers.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Buffers.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Concurrent.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Concurrent.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.NonGeneric.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.NonGeneric.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Specialized.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Specialized.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.EventBasedAsync.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.EventBasedAsync.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.TypeConverter.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.TypeConverter.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Console.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Console.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Data.Common.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Data.Common.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Contracts.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Contracts.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Debug.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Debug.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.FileVersionInfo.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.FileVersionInfo.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Process.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Process.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.StackTrace.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.StackTrace.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TextWriterTraceListener.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TextWriterTraceListener.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tools.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tools.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TraceSource.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TraceSource.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tracing.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tracing.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Drawing.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Drawing.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Dynamic.Runtime.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Dynamic.Runtime.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Calendars.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Calendars.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.ZipFile.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.ZipFile.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.DriveInfo.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.DriveInfo.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Watcher.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Watcher.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.IsolatedStorage.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.IsolatedStorage.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.MemoryMappedFiles.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.MemoryMappedFiles.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Pipes.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Pipes.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.UnmanagedMemoryStream.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.UnmanagedMemoryStream.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Expressions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Expressions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Parallel.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Parallel.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Queryable.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Queryable.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Memory.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Memory.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Http.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Http.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NameResolution.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NameResolution.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NetworkInformation.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NetworkInformation.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Ping.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Ping.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Requests.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Requests.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Security.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Security.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Sockets.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Sockets.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebHeaderCollection.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebHeaderCollection.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.Client.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.Client.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Numerics.Vectors.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Numerics.Vectors.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ObjectModel.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ObjectModel.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.DispatchProxy.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.DispatchProxy.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.ILGeneration.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.ILGeneration.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.Lightweight.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.Lightweight.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Reader.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Reader.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.ResourceManager.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.ResourceManager.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Writer.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Writer.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.CompilerServices.VisualC.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.CompilerServices.VisualC.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Handles.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Handles.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.RuntimeInformation.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.RuntimeInformation.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Numerics.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Numerics.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Formatters.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Formatters.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Json.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Json.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Xml.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Xml.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Claims.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Claims.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Algorithms.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Algorithms.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Csp.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Csp.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Encoding.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Encoding.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.X509Certificates.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.X509Certificates.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Principal.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Principal.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.SecureString.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.SecureString.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.RegularExpressions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.RegularExpressions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Overlapped.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Overlapped.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Parallel.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Parallel.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Thread.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Thread.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.ThreadPool.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.ThreadPool.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Timer.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Timer.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ValueTuple.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ValueTuple.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.ReaderWriter.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.ReaderWriter.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XDocument.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XDocument.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlDocument.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlDocument.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlSerializer.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlSerializer.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.XDocument.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.XDocument.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\Extensions\2.0.0\System.Runtime.InteropServices.WindowsRuntime.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\Extensions\2.0.0\System.Runtime.InteropServices.WindowsRuntime.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\mscorlib.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\mscorlib.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ComponentModel.Composition.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ComponentModel.Composition.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Core.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Core.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Data.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Data.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Drawing.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Drawing.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.IO.Compression.FileSystem.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.IO.Compression.FileSystem.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Net.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Net.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Numerics.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Numerics.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Runtime.Serialization.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Runtime.Serialization.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ServiceModel.Web.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ServiceModel.Web.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Transactions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Transactions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Web.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Web.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Windows.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Windows.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Linq.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Linq.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Serialization.dll - - - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.Flow.Editor.dll - - - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VSCode.Editor.dll - - - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.Shared.Editor.dll - - - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TextMeshPro.Editor.dll - - - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualStudio.Editor.dll - - - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Performance.Profile-Analyzer.Editor.dll - - - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TestTools.CodeCoverage.Editor.OpenCover.Model.dll - - - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Timeline.Editor.dll - - - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Timeline.dll - - - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.Core.Editor.dll - - - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TextMeshPro.dll - - - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.State.Editor.dll - - - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.SettingsProvider.Editor.dll - - - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TestTools.CodeCoverage.Editor.OpenCover.Mono.Reflection.dll - - - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.Flow.dll - - - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEditor.UI.dll - - - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.PlasticSCM.Editor.dll - - - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Rider.Editor.dll - - - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TestTools.CodeCoverage.Editor.dll - - - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEngine.UI.dll - - - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.State.dll - - - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.Core.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Serialization.dll - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.EditorCoroutines.Editor.dll + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.EditorCoroutines.Editor.dll + + + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.AI.Navigation.dll + + + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.PlasticSCM.Editor.dll + + + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Timeline.Editor.dll + + + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.Shared.Editor.dll + + + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualStudio.Editor.dll + + + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEditor.UI.dll + + + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.Core.dll + + + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEngine.UI.dll + + + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.Core.Editor.dll + + + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Rider.Editor.dll + + + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.Flow.dll + + + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.Flow.Editor.dll + + + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Timeline.dll + + + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TestTools.CodeCoverage.Editor.OpenCover.Mono.Reflection.dll + + + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.SettingsProvider.Editor.dll + + + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.Performance.Profile-Analyzer.Editor.dll + + + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TestTools.CodeCoverage.Editor.dll + + + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TestTools.CodeCoverage.Editor.OpenCover.Model.dll + + + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.AI.Navigation.Updater.dll + + + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.State.Editor.dll + + + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TextMeshPro.dll + + + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TextMeshPro.Editor.dll + + + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.AI.Navigation.Editor.dll + + + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VisualScripting.State.dll + + + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.AI.Navigation.Editor.ConversionSystem.dll + + + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.VSCode.Editor.dll - - {4b964c85-7c9d-2d07-a2e0-8595262e4e96} - UniTask.TextMeshPro - - - {99c4c7d2-ca96-1038-95e0-77e225df2b06} - UniTask.DOTween - - - {39f5acb9-cdbb-9f48-497c-14159a0afd38} - UniTask - {6d8bd378-3e5b-6997-5e5e-288243f0f72b} UniTask.Addressables @@ -2369,6 +2784,18 @@ {7f60f694-1f75-f2f0-5fde-36ccb7fd82d1} UniTask.Linq + + {39f5acb9-cdbb-9f48-497c-14159a0afd38} + UniTask + + + {4b964c85-7c9d-2d07-a2e0-8595262e4e96} + UniTask.TextMeshPro + + + {99c4c7d2-ca96-1038-95e0-77e225df2b06} + UniTask.DOTween + tail + + if (count == array.Length) + { + //Resize + //TODO: Better shift-resize + T[] oldArray = array; + array = new T[Math.Max(4, oldArray.Length * 2)]; + //Copy the old first-end to the first part of the new array. + Array.Copy(oldArray, firstIndex, array, 0, oldArray.Length - firstIndex); + //Copy the old begin-first to the second part of the new array. + Array.Copy(oldArray, 0, array, oldArray.Length - firstIndex, firstIndex); + firstIndex = 0; + lastIndex = count - 1; + } + + + lastIndex++; + if (lastIndex == array.Length) + lastIndex = 0; + array[lastIndex] = item; + count++; + } + finally + { + locker.Exit(); + } + } + + /// + /// Tries to dequeue the first element of the queue with locking. + /// + /// Dequeued element, if any. + /// True if an element could be dequeued, false otherwise. + public bool TryDequeueFirst(out T item) + { + //bool taken = false; + //locker.Enter(ref taken); + locker.Enter(); + + try + { + if (count > 0) + { + item = array[firstIndex]; + array[firstIndex] = default(T); + firstIndex++; + if (firstIndex == array.Length) + firstIndex = 0; + count--; + return true; + } + item = default(T); + return false; + } + finally + { + locker.Exit(); + //locker.Exit(); + } + } + + /// + /// Tries to dequeue the last element of the queue with locking. + /// + /// Dequeued element, if any. + /// True if an element could be dequeued, false otherwise. + public bool TryDequeueLast(out T item) + { + //bool taken = false; + //locker.Enter(ref taken); + locker.Enter(); + + try + { + if (count > 0) + { + item = array[lastIndex]; + array[lastIndex] = default(T); + lastIndex--; + if (lastIndex < 0) + lastIndex += array.Length; + count--; + return true; + } + item = default(T); + return false; + } + finally + { + locker.Exit(); + //locker.Exit(); + } + } + + /// + /// Tries to dequeue the first element of the queue without locking. + /// + /// Dequeued element, if any. + /// True if an element could be dequeued, false otherwise. + public bool TryUnsafeDequeueFirst(out T item) + { + if (count > 0) + { + item = array[firstIndex]; + array[firstIndex] = default(T); + firstIndex++; + if (firstIndex == array.Length) + firstIndex = 0; + count--; + return true; + } + item = default(T); + return false; + } + + /// + /// Tries to dequeue the last element of the queue without locking. + /// + /// Dequeued element, if any. + /// True if an element could be dequeued, false otherwise. + public bool TryUnsafeDequeueLast(out T item) + { + if (count > 0) + { + item = array[lastIndex]; + array[lastIndex] = default(T); + lastIndex--; + if (lastIndex < 0) + lastIndex += array.Length; + count--; + return true; + } + item = default(T); + return false; + } + + /// + /// Enqueues an element onto the tail of the deque without locking. + /// + /// Element to enqueue. + public void UnsafeEnqueue(T item) + { + //Enqueues go to the tail only; it's like a queue. + //head ----> tail + + if (count == array.Length) + { + //TODO: if it's always powers of 2, then resizing is quicker. + //Resize + T[] oldArray = array; + array = new T[oldArray.Length * 2]; + //Copy the old first-end to the first part of the new array. + Array.Copy(oldArray, firstIndex, array, 0, oldArray.Length - firstIndex); + //Copy the old begin-first to the second part of the new array. + Array.Copy(oldArray, 0, array, oldArray.Length - firstIndex, firstIndex); + firstIndex = 0; + lastIndex = count - 1; + } + + + lastIndex++; + if (lastIndex == array.Length) + lastIndex = 0; + array[lastIndex] = item; + count++; + } + } +} \ No newline at end of file diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ConcurrentDeque.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ConcurrentDeque.cs.meta new file mode 100644 index 00000000..067f75c6 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ConcurrentDeque.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 47a91e8cd0c043a41877b9f788987629 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ObservableDictionary.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ObservableDictionary.cs new file mode 100644 index 00000000..705ea7be --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ObservableDictionary.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; + +namespace BEPUutilities.DataStructures +{ + /// + /// Dictionary that provides events when the inner dictionary is changed. + /// + ///Type of the keys in the dictionary. + ///Type of the values in the dictionary. + public class ObservableDictionary + { + /// + /// Gets or sets the dictionary wrapped by the observable dictionary. + /// While the inner dictionary can be changed, making modifications to it will + /// not trigger any changed events. + /// + public Dictionary WrappedDictionary { get; private set; } + + /// + /// Constructs a new observable dictionary. + /// + public ObservableDictionary() + { + WrappedDictionary = new Dictionary(); + } + + /// + /// Adds a pair to the dictionary. + /// + ///Key of the element. + ///Value of the element. + public void Add(TKey key, TValue value) + { + WrappedDictionary.Add(key, value); + OnChanged(); + } + + /// + /// Removes a key and its associated value from the dictionary, if present. + /// + ///Key of the element to remove. + ///Whether or not the object was found. + public bool Remove(TKey key) + { + if (WrappedDictionary.Remove(key)) + { + OnChanged(); + return true; + } + return false; + } + + /// + /// Clears the dictionary of all elements. + /// + public void Clear() + { + WrappedDictionary.Clear(); + OnChanged(); + } + + /// + /// Fires when the dictionary's elements are changed using the wrapping functions. + /// + public event Action Changed; + + protected void OnChanged() + { + if (Changed != null) + { + Changed(); + } + } + + + } +} diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ObservableDictionary.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ObservableDictionary.cs.meta new file mode 100644 index 00000000..959383af --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ObservableDictionary.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 66a5f16b190e1d74996d4d6119099cb3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ObservableList.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ObservableList.cs new file mode 100644 index 00000000..4912b396 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ObservableList.cs @@ -0,0 +1,200 @@ +using System; +using System.Collections.Generic; +using System.Collections; + +namespace BEPUutilities.DataStructures +{ + /// + /// List of objects which fires events when it is changed. + /// + ///Type of elements in the list. + public class ObservableList : IList + { + /// + /// Gets the list wrapped by the observable list. Adds and removes made to this list directly will not trigger events. + /// + public RawList WrappedList { get; private set; } + + /// + /// Fires when elements in the list are changed. + /// + public event Action> Changed; + + /// + /// Constructs a new observable list. + /// + ///List to copy into the internal wrapped list. + public ObservableList(IList list) + { + this.WrappedList = new RawList(list.Count); + list.CopyTo(this.WrappedList.Elements, 0); + } + + /// + /// Constructs an empty observable list. + /// + public ObservableList() + { + WrappedList = new RawList(); + } + + /// + /// Constructs an empty observable list with a given capacity. + /// + ///Initial allocated storage in the list. + public ObservableList(int initialCapacity) + { + WrappedList = new RawList(initialCapacity); + } + + protected void OnChanged() + { + if (Changed != null) + Changed(this); + } + + + /// + /// Determines the index of a specific item in the . + /// + /// + /// The index of if found in the list; otherwise, -1. + /// + /// The object to locate in the . + public int IndexOf(T item) + { + return WrappedList.IndexOf(item); + } + + /// + /// Inserts an item to the at the specified index. + /// + /// The zero-based index at which should be inserted.The object to insert into the . is not a valid index in the .The is read-only. + public void Insert(int index, T item) + { + WrappedList.Insert(index, item); + } + + /// + /// Removes the item at the specified index. + /// + /// The zero-based index of the item to remove. is not a valid index in the .The is read-only. + public void RemoveAt(int index) + { + WrappedList.RemoveAt(index); + } + + /// + /// Gets or sets the element at the specified index. + /// + /// + /// The element at the specified index. + /// + /// The zero-based index of the element to get or set. is not a valid index in the .The property is set and the is read-only. + public T this[int index] + { + get + { + return WrappedList[index]; + } + set + { + WrappedList[index] = value; + OnChanged(); + } + } + + /// + /// Adds an item to the . + /// + /// The object to add to the .The is read-only. + public void Add(T item) + { + WrappedList.Add(item); + OnChanged(); + } + + /// + /// Removes all items from the . + /// + /// The is read-only. + public void Clear() + { + WrappedList.Clear(); + OnChanged(); + } + + /// + /// Determines whether the contains a specific value. + /// + /// + /// true if is found in the ; otherwise, false. + /// + /// The object to locate in the . + public bool Contains(T item) + { + return WrappedList.Contains(item); + } + + /// + /// Copies the elements of the to an , starting at a particular index. + /// + /// The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing.The zero-based index in at which copying begins. is null. is less than 0. is multidimensional.-or-The number of elements in the source is greater than the available space from to the end of the destination .-or-Type cannot be cast automatically to the type of the destination . + public void CopyTo(T[] array, int arrayIndex) + { + Array.Copy(WrappedList.Elements, 0, array, 0, WrappedList.Count); + } + + /// + /// Gets the number of elements contained in the . + /// + /// + /// The number of elements contained in the . + /// + public int Count + { + get { return WrappedList.Count; } + } + + bool ICollection.IsReadOnly + { + get { return (WrappedList as ICollection).IsReadOnly; } + } + + /// + /// Removes the first occurrence of a specific object from the . + /// + /// + /// true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . + /// + /// The object to remove from the .The is read-only. + public bool Remove(T item) + { + if (WrappedList.Remove(item)) + { + OnChanged(); + return true; + } + return false; + } + + /// + /// Gets an enumerator for the list. + /// + ///Enumerator for the list. + public RawList.Enumerator GetEnumerator() + { + return WrappedList.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return WrappedList.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return WrappedList.GetEnumerator(); + } + } +} diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ObservableList.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ObservableList.cs.meta new file mode 100644 index 00000000..20243c57 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ObservableList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c79ccd4b6d1189f4ea6624cd8edea775 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickDictionary.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickDictionary.cs new file mode 100644 index 00000000..24645f03 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickDictionary.cs @@ -0,0 +1,467 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using BEPUutilities.ResourceManagement; +#if FORCEINLINE +using System.Runtime.CompilerServices; +#endif + +namespace BEPUutilities.DataStructures +{ + /// + /// Container supporting constant time adds and removes of key-value pairs while preserving fast iteration times. + /// Offers very direct access to information at the cost of safety. + /// + /// Be very careful when using this type. It has sacrificed a lot upon the altar of performance; a few notable issues include: + /// it is a value type and copying it around will break things without extreme care, it cannot be validly default-constructed, + /// it exposes internal structures to user modification, it is particularly vulnerable to bad hash functions, + /// it rarely checks input for errors, and the enumerator doesn't check for mid-enumeration modification. + /// Note that the implementation is extremely simple. It uses single-step linear probing under the assumption of very low collision rates. + /// A generous table capacity is recommended; this trades some memory for simplicity and runtime performance. + /// Type of key held by the container. + /// Type of value held by the container. + public struct QuickDictionary : IDisposable, IEnumerable> where TKey : IEquatable + { + private int count; + /// + /// Gets the number of elements in the set. + /// + public int Count + { + get { return count; } + } + + private int[] table; + + /// + /// Gets the backing array containing the keys of the dictionary. + /// Indices from 0 to Count-1 hold actual data. All other data is undefined. + /// + public readonly TKey[] Keys; + + + /// + /// Gets the backing array containing the values of the dictionary. + /// Indices from 0 to Count-1 hold actual data. All other data is undefined. + /// + public readonly TValue[] Values; + + + + private readonly BufferPool tablePool; + private readonly BufferPool keyPool; + private readonly BufferPool valuePool; + + /// + /// Gets or sets a key-value pair at the given index in the list representation. + /// + /// Index to grab a pair from. + /// Pair at the given index in the list. + public KeyValuePair this[int index] + { + //You would think that such a trivial accessor would inline without any external suggestion. + //Sometimes, yes. Sometimes, no. :( +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + get + { + Debug.Assert(index >= 0 && index < count, "Index should be within the list's size."); + return new KeyValuePair(Keys[index], Values[index]); + } +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + set + { + Debug.Assert(index >= 0 && index < count, "Index should be within the list's size."); + Keys[index] = value.Key; + Values[index] = value.Value; + } + } + + private int pairPoolIndex; + private int tablePoolIndex; + private int tableMask; + + /// + /// Creates a new set. + /// + /// Pool from which to retrieve integer arrays. + /// Pool from which to retrieve TKey arrays. + /// Pool from which to retrieve TValue arrays. + /// Initial pool index to pull the object buffer from. The size of the initial buffer will be 2^initialElementPoolIndex. + /// Initial pool index to pull the object buffer from. The size of the initial table buffer will be 2^(initialElementPoolIndex + tableSizePower). + public QuickDictionary(BufferPool keyPool, BufferPool valuePool, BufferPool tablePool, int initialElementPoolIndex = 2, int tableSizePower = 3) + { + if (tableSizePower <= 0) + throw new ArgumentException("The hash table must be larger than the element array.", "tableSizePower"); + if (initialElementPoolIndex < 0) + throw new ArgumentException("Initial pool index must be nonnegative.", "initialElementPoolIndex"); + this.tablePool = tablePool; + this.keyPool = keyPool; + this.valuePool = valuePool; + + pairPoolIndex = initialElementPoolIndex; + tablePoolIndex = initialElementPoolIndex + tableSizePower; + Keys = keyPool.TakeFromPoolIndex(pairPoolIndex); + Values = valuePool.TakeFromPoolIndex(pairPoolIndex); + table = tablePool.TakeFromPoolIndex(tablePoolIndex); + //Pooled buffers are not guaranteed to be cleared. The dictionary and set require clean tables, 0 means untaken. + Array.Clear(table, 0, table.Length); + count = 0; + tableMask = table.Length - 1; + + + } + + private void Resize(int newObjectPoolIndex, int newTablePoolIndex) + { + //Just double the size of the set. + var oldSet = this; + this = new QuickDictionary(keyPool, valuePool, tablePool, newObjectPoolIndex, newTablePoolIndex - newObjectPoolIndex); + for (int i = oldSet.count - 1; i >= 0; --i) + { + Add(oldSet.Keys[i], oldSet.Values[i]); + } + oldSet.Dispose(); + } + + /// + /// Gets the index of the element in the table. + /// + /// Element to look up. + /// Index of the element in the redirect table, or if it is not present, the index of where it would be added. + /// The index of the element in the element arrays, if it exists; -1 otherwise. + /// True if the element is present in the set, false if it is not. +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private bool GetIndices(TKey element, out int tableIndex, out int elementIndex) + { + //The table lengths are guaranteed to be a power of 2, so the modulo is a simple binary operation. + //TODO: forcing an inline on this function would be useful on platforms where it is possible. + tableIndex = element.GetHashCode() & tableMask; + //0 in the table means 'not taken'; all other values are offset by 1 upward. That is, 1 is actually index 0, 2 is actually index 1, and so on. + //This is preferred over using a negative number for flagging since clean buffers will contain all 0's. + while ((elementIndex = table[tableIndex]) > 0) + { + //This table index is taken. Is this the specified element? + //Remember to decode the object index. + if (Keys[--elementIndex].Equals(element)) + { + return true; + } + tableIndex = (tableIndex + 1) & tableMask; + } + elementIndex = -1; + return false; + } + + /// + /// Gets the index of the key in the dictionary values list if it exists. + /// + /// Key to get the index of. + /// The index of the key if the key exists in the dictionary, -1 otherwise. + public int IndexOf(TKey key) + { + Validate(); + int tableIndex, objectIndex; + GetIndices(key, out tableIndex, out objectIndex); + return objectIndex; + } + + /// + /// Checks if a given key already belongs to the set. + /// + /// Key to test for. + /// True if the key already belongs to the set, false otherwise. + public bool ContainsKey(TKey key) + { + Validate(); + int tableIndex, objectIndex; + return GetIndices(key, out tableIndex, out objectIndex); + } + + /// + /// Tries to retrieve the value associated with a key if it exists. + /// + /// Key to look up. + /// Value associated with the specified key. + /// True if a value was found, false otherwise. + public bool TryGetValue(TKey key, out TValue value) + { + Validate(); + int tableIndex, elementIndex; + if (GetIndices(key, out tableIndex, out elementIndex)) + { + value = Values[elementIndex]; + return true; + } + value = default(TValue); + return false; + } + + /// + /// Adds a pair to the set. If a version of the key (same hash code, 'equal' by comparer) is already present, + /// the existing pair is replaced by the given version. + /// + /// Key of the pair to add. + /// Value of the pair to add. + /// True if the pair was added to the set, false if the key was already present and its pair was replaced. + public bool AddAndReplace(TKey key, TValue value) + { + Validate(); + if (count == Keys.Length) + { + //There's no room left; resize. + Resize(pairPoolIndex + 1, tablePoolIndex + 1); + + //Note that this is tested before any indices are found. + //If we resized only after determining that it was going to be added, + //the potential resize would invalidate the computed indices. + } + + int tableIndex, elementIndex; + if (GetIndices(key, out tableIndex, out elementIndex)) + { + //Already present! + Keys[elementIndex] = key; + Values[elementIndex] = value; + return false; + } + + + //It wasn't in the set. Add it! + Keys[count] = key; + Values[count] = value; + //Use the encoding- all indices are offset by 1 since 0 represents 'empty'. + table[tableIndex] = ++count; + return true; + } + + + /// + /// Adds a pair to the set if it is not already present. + /// + /// Key of the pair to add. + /// Value of the pair to add. + /// True if the pair was added to the set, false if the key was already present. + public bool Add(TKey key, TValue value) + { + Validate(); + + if (count == Keys.Length) + { + //There's no room left; resize. + Resize(pairPoolIndex + 1, tablePoolIndex + 1); + + //Note that this is tested before any indices are found. + //If we resized only after determining that it was going to be added, + //the potential resize would invalidate the computed indices. + } + + int tableIndex, elementIndex; + if (GetIndices(key, out tableIndex, out elementIndex)) + { + //Already present! + return false; + } + + + //It wasn't in the set. Add it! + Keys[count] = key; + Values[count] = value; + //Use the encoding- all indices are offset by 1 since 0 represents 'empty'. + table[tableIndex] = ++count; + return true; + } + + //Note: the reason this is named "FastRemove" instead of just "Remove" despite it being the only remove present is that + //there may later exist an order preserving "Remove". That would be a very sneaky breaking change. + + /// + /// Removes a pair associated with a key from the set if belongs to the set. + /// Does not preserve the order of elements in the set. + /// + /// Key of the pair to remove. + /// True if the key was found and removed, false otherwise. + public bool FastRemove(TKey key) + { + Validate(); + //Find it. + int tableIndex, elementIndex; + if (GetIndices(key, out tableIndex, out elementIndex)) + { + //We found the object! + //Add and remove must both maintain a property: + //All items are either at their desired index (as defined by the hash), or they are contained in a contiguous block clockwise from the desired index. + //Removals seek to fill the gap they create by searching clockwise to find items which can be moved backward. + //Search clockwise for an item to fill this slot. The search must continue until a gap is found. + int moveCandidateIndex; + int gapIndex = tableIndex; + //Search clockwise. + while ((moveCandidateIndex = table[tableIndex = (tableIndex + 1) & tableMask]) > 0) + { + //This slot contains something. What is its actual index? + --moveCandidateIndex; + int desiredIndex = Keys[moveCandidateIndex].GetHashCode() & tableMask; + + //Would this element be closer to its actual index if it was moved to the gap? + //To find out, compute the clockwise distance from the gap and the clockwise distance from the ideal location. + + var distanceFromGap = (tableIndex - gapIndex) & tableMask; + var distanceFromIdeal = (tableIndex - desiredIndex) & tableMask; + if (distanceFromGap <= distanceFromIdeal) + { + //The distance to the gap is less than or equal the distance to the ideal location, so just move to the gap. + table[gapIndex] = table[tableIndex]; + gapIndex = tableIndex; + } + + } + //Clear the table gap left by the removal. + table[gapIndex] = 0; + //Swap the final element into the removed object's element array index, if the removed object wasn't the last object. + --count; + if (elementIndex < count) + { + Keys[elementIndex] = Keys[count]; + Values[elementIndex] = Values[count]; + //Locate the swapped object in the table and update its index. + int oldObjectIndex; + GetIndices(Keys[elementIndex], out tableIndex, out oldObjectIndex); + table[tableIndex] = elementIndex + 1; //Remember the encoding! all indices offset by 1. + } + //Clear the final slot in the elements set. + Keys[count] = default(TKey); + Values[count] = default(TValue); + + return true; + } + return false; + } + + + /// + /// Shrinks the internal buffers to the smallest acceptable size and releases the old buffers to the pools. + /// + public void Compact() + { + Validate(); + var minimumRequiredPoolIndex = BufferPool.GetPoolIndex(count); + if (minimumRequiredPoolIndex != pairPoolIndex) + Resize(minimumRequiredPoolIndex, minimumRequiredPoolIndex + (tablePoolIndex - pairPoolIndex)); + } + + /// + /// Removes all elements from the dictionary. + /// + public void Clear() + { + //While it may be appealing to remove individual elements from the set when the set is sparse, + //using a brute force clear over the entire table is almost always faster. And it's a lot simpler! + Array.Clear(table, 0, table.Length); + Array.Clear(Keys, 0, count); + Array.Clear(Values, 0, count); + count = 0; + } + + /// + /// Removes all elements from the dictionary without modifying the contents of the keys or values arrays. Be careful about using this with reference types. + /// + public void FastClear() + { + Array.Clear(table, 0, table.Length); + count = 0; + } + + public Enumerator GetEnumerator() + { + Validate(); + return new Enumerator(Keys, Values, Count); + } + + IEnumerator> IEnumerable>.GetEnumerator() + { + return GetEnumerator(); + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public struct Enumerator : IEnumerator> + { + private readonly TKey[] keys; + private readonly TValue[] values; + private readonly int count; + private int index; + + public Enumerator(TKey[] keys, TValue[] values, int count) + { + this.keys = keys; + this.values = values; + this.count = count; + + index = -1; + } + + public KeyValuePair Current + { + get { return new KeyValuePair(keys[index], values[index]); } + } + + public void Dispose() + { + } + + object System.Collections.IEnumerator.Current + { + get { return Current; } + } + + public bool MoveNext() + { + return ++index < count; + } + + public void Reset() + { + index = -1; + } + } + + [Conditional("DEBUG")] + private void Validate() + { + Debug.Assert(table != null, "The QuickDictionary must have its internal buffers and pools available; default-constructed or disposed QuickSets should not be used."); + } + + /// + /// Clears and returns the set's buffers to the pools. + /// + public void Dispose() + { + //We must clean out the table before returning it to the pool in case the array contains reference types which would otherwise leak. + //The user may have already manually cleared it. To avoid doing redundant work, check the count first. + //The user may have chosen to leave reference types in the list if they did a fast clear, but that's not for us to worry about. + if (count > 0) + { + Clear(); + } + + tablePool.GiveBack(table, tablePoolIndex); + keyPool.GiveBack(Keys, pairPoolIndex); + valuePool.GiveBack(Values, pairPoolIndex); +#if DEBUG + table = null; +#endif + } + + + + + } +} diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickDictionary.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickDictionary.cs.meta new file mode 100644 index 00000000..ade1af5a --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickDictionary.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6995b35209c86b844a19f09b5e19e04c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickList.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickList.cs new file mode 100644 index 00000000..23c5ca58 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickList.cs @@ -0,0 +1,541 @@ +using System; +using System.Diagnostics; +using BEPUutilities.ResourceManagement; +using System.Collections.Generic; +#if FORCEINLINE +using System.Runtime.CompilerServices; +#endif + +namespace BEPUutilities.DataStructures +{ + /// + /// Container supporting list-like behaviors built on top of pooled arrays. + /// + /// Be very careful when using this type. It has sacrificed a lot upon the altar of performance; a few notable issues include: + /// it is a value type and copying it around will break things without extreme care, it cannot be validly default-constructed, + /// it exposes internal structures to user modification, it rarely checks input for errors, and the enumerator doesn't check for mid-enumeration modification. + /// Type of the elements in the list. + public struct QuickList : IDisposable, IList + { + private int poolIndex; + private BufferPool pool; + /// + /// Gets the pool used by the quick list. + /// + public BufferPool Pool { get { return pool; } } + + /// + /// Gets the backing array containing the elements of the list. + /// Indices from 0 to Count-1 hold actual data. All other data is undefined. + /// + public readonly T[] Elements; + + private int count; + /// + /// Gets or sets the number of elements in the list. + /// + public int Count + { + get { return count; } + set + { + Debug.Assert(value >= 0 && value <= Elements.Length, "Count should fit in the current backing array length."); + count = value; + } + } + + + /// + /// Gets an element at the given index in the list. + /// + /// Index to grab an element from. + /// Element at the given index in the list. + public T this[int index] + { + //You would think that such a trivial accessor would inline without any external suggestion. + //Sometimes, yes. Sometimes, no. :( +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + get + { + ValidateIndex(index); + return Elements[index]; + } +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + set + { + ValidateIndex(index); + Elements[index] = value; + } + } + + /// + /// Creates a new list. + /// + /// Pool from which to retrieve typed arrays. + /// Initial pool index to pull the backing array from. The size of the initial buffer will be 2^initialPoolIndex. + public QuickList(BufferPool pool, int initialPoolIndex = 5) + { + this.pool = pool; + poolIndex = initialPoolIndex; + Elements = pool.TakeFromPoolIndex(poolIndex); + + count = 0; + + } + + /// + /// Ensures that the quick list has enough room to hold the specified number of elements. + /// + /// Number of elements to hold. + public void EnsureCapacity(int count) + { + if (count > Elements.Length) + { + Resize(BufferPool.GetPoolIndex(count)); + } + } + + private void Resize(int newPoolIndex) + { + Debug.Assert(Count <= (1 << newPoolIndex), "New pool index must contain all elements in the list."); + var oldList = this; + this = new QuickList(pool, newPoolIndex); + Count = oldList.Count; + Array.Copy(oldList.Elements, Elements, Count); + oldList.Dispose(); + } + + /// + /// Adds the element to the list. + /// + /// Item to add. +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void Add(T element) + { + Validate(); + if (Count == Elements.Length) + Resize(poolIndex + 1); + Elements[Count] = element; + ++Count; + } + + /// + /// Adds the element to the list without checking the count against the capacity. + /// + /// Item to add. +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void AddUnsafely(T element) + { + Validate(); + Elements[Count] = element; + ++Count; + } + + /// + /// Adds the element to the list. + /// + /// Element to add. +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void Add(ref T element) + { + Validate(); + if (Count == Elements.Length) + Resize(poolIndex + 1); + Elements[Count] = element; + ++Count; + } + + /// + /// Adds the element to the list without checking the count against the capacity. + /// + /// Element to add. +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void AddUnsafely(ref T element) + { + Validate(); + Elements[Count] = element; + ++Count; + } + + /// + /// Gets the index of the element in the list, if present. + /// + /// Element to find. + /// Index of the element in the list if present, -1 otherwise. +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public int IndexOf(T element) + { + Validate(); + return Array.IndexOf(Elements, element, 0, Count); + } + + /// + /// Gets the index of the element in the list, if present. + /// + /// Element to find. + /// Index of the element in the list if present, -1 otherwise. +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public int IndexOf(ref T element) + { + Validate(); + return Array.IndexOf(Elements, element, 0, Count); + } + + /// + /// Removes an element from the list. Preserves the order of elements. + /// + /// Element to remove from the list. + /// True if the element was present and was removed, false otherwise. +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public bool Remove(T element) + { + Validate(); + var index = IndexOf(element); + if (index >= 0) + { + RemoveAt(index); + return true; + } + return false; + } + + /// + /// Removes an element from the list. Preserves the order of elements. + /// + /// Element to remove from the list. + /// True if the element was present and was removed, false otherwise. +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public bool Remove(ref T element) + { + Validate(); + var index = IndexOf(element); + if (index >= 0) + { + RemoveAt(index); + return true; + } + return false; + } + + /// + /// Removes an element from the list. Does not preserve the order of elements. + /// + /// Element to remove from the list. + /// True if the element was present and was removed, false otherwise. +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public bool FastRemove(T element) + { + Validate(); + var index = IndexOf(element); + if (index >= 0) + { + FastRemoveAt(index); + return true; + } + return false; + } + + /// + /// Removes an element from the list. Does not preserve the order of elements. + /// + /// Element to remove from the list. + /// True if the element was present and was removed, false otherwise. +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public bool FastRemove(ref T element) + { + Validate(); + var index = IndexOf(element); + if (index >= 0) + { + FastRemoveAt(index); + return true; + } + return false; + } + + /// + /// Removes an element from the list at the given index. Preserves the order of elements. + /// + /// Index of the element to remove from the list. +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void RemoveAt(int index) + { + Validate(); + ValidateIndex(index); + --Count; + if (index < Count) + { + //Copy everything from the removal point onward backward one slot. + Array.Copy(Elements, index + 1, Elements, index, Count - index); + } + //Clear out the former last slot. + Elements[Count] = default(T); + } + + /// + /// Removes an element from the list at the given index. Does not preserve the order of elements. + /// + /// Index of the element to remove from the list. +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void FastRemoveAt(int index) + { + Validate(); + ValidateIndex(index); + --Count; + if (index < Count) + { + //Put the final element in the removed slot. + Elements[index] = Elements[Count]; + } + //Clear out the former last slot. + Elements[Count] = default(T); + } + + + /// + /// Removes and outputs the last element in the list if it exists. + /// + /// Last element of the list. + /// True if the element existed and was removed, false otherwise. +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public bool TryPop(out T element) + { + Validate(); + if (Count > 0) + { + Count--; + element = Elements[Count]; + return true; + } + element = default(T); + return false; + } + + /// + /// Inserts an item to the at the specified index. + /// + /// The zero-based index at which should be inserted. + /// The object to insert into the . + /// is not a valid index in the . +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void Insert(int index, T element) + { + Validate(); + if (Count == Elements.Length) + Resize(poolIndex + 1); + Array.Copy(Elements, index, Elements, index + 1, count - index); + Elements[index] = element; + ++Count; + } + + /// + /// Inserts an item to the at the specified index. + /// + /// The zero-based index at which should be inserted. + /// The object to insert into the . + /// is not a valid index in the . +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void Insert(int index, ref T element) + { + Validate(); + if (Count == Elements.Length) + Resize(poolIndex + 1); + Array.Copy(Elements, index, Elements, index + 1, count - index); + Elements[index] = element; + ++Count; + } + + + /// + /// Determines whether the contains a specific value. + /// + /// + /// true if is found in the ; otherwise, false. + /// + /// The object to locate in the . +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public bool Contains(T element) + { + return IndexOf(element) >= 0; + } + + /// + /// Determines whether the contains a specific value. + /// + /// + /// true if is found in the ; otherwise, false. + /// + /// The object to locate in the . +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public bool Contains(ref T element) + { + return IndexOf(ref element) >= 0; + } + + /// + /// Copies the elements of the to an , starting at a particular index. + /// + /// The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing.The zero-based index in at which copying begins. is null. is less than 0.The number of elements in the source is greater than the available space from to the end of the destination . +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void CopyTo(T[] array, int arrayIndex) + { + Array.Copy(Elements, 0, array, arrayIndex, Count); + } + + + /// + /// Clears the list by setting the count to zero and explicitly setting all relevant indices in the backing array to default values. + /// +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void Clear() + { + Validate(); + Array.Clear(Elements, 0, Count); + Count = 0; + } + + /// + /// Compacts the internal buffer to the minimum size required for the number of elements in the list. + /// + public void Compact() + { + Validate(); + var newPoolIndex = BufferPool.GetPoolIndex(Count); + if (newPoolIndex != poolIndex) + Resize(newPoolIndex); + } + + /// + /// Clears and returns the list's buffers. + /// + public void Dispose() + { + Clear(); + pool.GiveBack(Elements, poolIndex); +#if DEBUG + pool = null; +#endif + } + + [Conditional("DEBUG")] + void ValidateIndex(int index) + { + Debug.Assert(index >= 0 && index < Count, "Index must be nonnegative and less than the number of elements in the list."); + } + + + [Conditional("DEBUG")] + private void Validate() + { + Debug.Assert(pool != null, "Should not use a default-constructed or disposed QuickList."); + } + + public Enumerator GetEnumerator() + { + return new Enumerator(Elements, Count); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public struct Enumerator : IEnumerator + { + private readonly T[] backingArray; + private readonly int count; + private int index; + + public Enumerator(T[] backingArray, int count) + { + this.backingArray = backingArray; + this.count = count; + index = -1; + } + + public T Current + { + get { return backingArray[index]; } + } + + public void Dispose() + { + } + + object System.Collections.IEnumerator.Current + { + get { return Current; } + } + + public bool MoveNext() + { + return ++index < count; + } + + public void Reset() + { + index = -1; + } + } + + + + /// + /// Gets a value indicating whether the is read-only. + /// + /// + /// true if the is read-only; otherwise, false. + /// + bool ICollection.IsReadOnly + { + get { return false; } + } + } +} diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickList.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickList.cs.meta new file mode 100644 index 00000000..fce4577b --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d26b0de60752d694ebea6280e025210d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickQueue.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickQueue.cs new file mode 100644 index 00000000..71a65601 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickQueue.cs @@ -0,0 +1,435 @@ +using System; +using System.Diagnostics; +using BEPUutilities.ResourceManagement; +using System.Collections.Generic; +#if FORCEINLINE +using System.Runtime.CompilerServices; +#endif + +namespace BEPUutilities.DataStructures +{ + /// + /// Container supporting double ended queue behaviors built on top of pooled arrays. + /// + /// Be very careful when using this type. It has sacrificed a lot upon the altar of performance; a few notable issues include: + /// it is a value type and copying it around will break things without extreme care, it cannot be validly default-constructed, + /// it exposes internal structures to user modification, it rarely checks input for errors, and the enumerator doesn't check for mid-enumeration modification. + /// Type of the elements in the queue. + public struct QuickQueue : IDisposable, IEnumerable + { + private int poolIndex; + private BufferPool pool; + int capacityMask; + + + /// + /// Gets the backing array containing the elements of the queue. + /// Indices from FirstIndex to LastIndex inclusive hold actual data. All other data is undefined. + /// Watch out for wrap around; LastIndex can be less than FirstIndex even when count > 0! + /// + public readonly T[] Elements; + + int firstIndex; + /// + /// Gets the index of the first element in the queue. + /// + public int FirstIndex + { + get + { + return firstIndex; + } + } + + int lastIndex; + /// + /// Gets the index of the last element in the queue. + /// + public int LastIndex + { + get + { + return lastIndex; + } + } + + private int count; + /// + /// Gets the number of elements in the queue. + /// + public int Count + { + get { return count; } + } + + + + /// + /// Gets an element at the given index in the queue. + /// 0 gets the element at the FirstIndex. Count-1 would get the element at LastIndex. + /// + /// Index to grab an element from. + /// Element at the given index in the queue. + public T this[int index] + { + //You would think that such a trivial accessor would inline without any external suggestion. + //Sometimes, yes. Sometimes, no. :( +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + get + { + ValidateIndex(index); + return Elements[(FirstIndex + index) & capacityMask]; + } +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + set + { + ValidateIndex(index); + Elements[(FirstIndex + index) & capacityMask] = value; + } + } + + /// + /// Creates a new queue. + /// + /// Pool from which to retrieve typed arrays. + /// Initial pool index to pull the backing array from. The size of the initial buffer will be 2^initialPoolIndex. + public QuickQueue(BufferPool pool, int initialPoolIndex = 5) + { + this.pool = pool; + poolIndex = initialPoolIndex; + Elements = pool.TakeFromPoolIndex(poolIndex); + count = 0; + capacityMask = Elements.Length - 1; + firstIndex = 0; + lastIndex = capacityMask; //length - 1 + + } + + private void Resize(int newPoolIndex) + { + Debug.Assert(count <= (1 << newPoolIndex), "New pool index must contain all elements in the queue."); + var oldQueue = this; + this = new QuickQueue(pool, newPoolIndex); + count = oldQueue.Count; + //Copy the old first-end to the first part of the new array. + Array.Copy(oldQueue.Elements, oldQueue.firstIndex, Elements, 0, oldQueue.Elements.Length - oldQueue.firstIndex); + //Copy the old begin-first to the second part of the new array. + Array.Copy(oldQueue.Elements, 0, Elements, oldQueue.Elements.Length - oldQueue.firstIndex, oldQueue.firstIndex); + + firstIndex = 0; + lastIndex = count - 1; + + oldQueue.Dispose(); + } + + /// + /// Enqueues the element to the end of the queue, incrementing the last index. + /// + /// Item to enqueue. +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void Enqueue(T element) + { + Validate(); + if (count == Elements.Length) + Resize(poolIndex + 1); + Elements[(lastIndex = ((lastIndex + 1) & capacityMask))] = element; + ++count; + } + + /// + /// Enqueues the element to the start of the queue, decrementing the first index. + /// + /// Item to enqueue. +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void EnqueueFirst(T element) + { + Validate(); + if (count == Elements.Length) + Resize(poolIndex + 1); + Elements[(firstIndex = ((firstIndex - 1) & capacityMask))] = element; + ++count; + } + + /// + /// Enqueues the element to the end of the queue, incrementing the last index. + /// + /// Item to enqueue. +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void Enqueue(ref T element) + { + Validate(); + if (count == Elements.Length) + Resize(poolIndex + 1); + Elements[(lastIndex = ((lastIndex + 1) & capacityMask))] = element; + ++count; + } + + /// + /// Enqueues the element to the start of the queue, decrementing the first index. + /// + /// Item to enqueue. +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void EnqueueFirst(ref T element) + { + Validate(); + if (count == Elements.Length) + Resize(poolIndex + 1); + Elements[(firstIndex = ((firstIndex - 1) & capacityMask))] = element; + ++count; + } + + /// + /// Dequeues an element from the start of the queue, incrementing the first index. + /// + /// Element removed from the queue. +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public T Dequeue() + { + Validate(); + if (count == 0) + throw new InvalidOperationException("The queue is empty."); + var element = Elements[firstIndex]; + Elements[firstIndex] = default(T); + firstIndex = (firstIndex + 1) & capacityMask; + --count; + return element; + + } + + /// + /// Dequeues an element from the end of the queue, decrementing the last index. + /// + /// Element removed from the queue. +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public T DequeueLast() + { + Validate(); + if (count == 0) + throw new InvalidOperationException("The queue is empty."); + var element = Elements[lastIndex]; + Elements[lastIndex] = default(T); + lastIndex = (lastIndex - 1) & capacityMask; + --count; + return element; + + } + + /// + /// Attempts to dequeue an element from the start of the queue, incrementing the first index. + /// + /// Element removed from the queue, if any. + /// True if an element was available to remove, false otherwise. +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public bool TryDequeue(out T element) + { + Validate(); + if (count > 0) + { + element = Elements[firstIndex]; + Elements[firstIndex] = default(T); + firstIndex = (firstIndex + 1) & capacityMask; + --count; + return true; + } + element = default(T); + return false; + + } + + /// + /// Attempts to dequeue an element from the end of the queue, decrementing the last index. + /// + /// Element removed from the queue, if any. + /// True if an element was available to remove, false otherwise. +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public bool TryDequeueLast(out T element) + { + Validate(); + if (count > 0) + { + element = Elements[lastIndex]; + Elements[lastIndex] = default(T); + lastIndex = (lastIndex - 1) & capacityMask; + --count; + return true; + } + element = default(T); + return false; + + } + + /// + /// Copies the elements of the to an , starting at a particular index. + /// + /// The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing.The zero-based index in at which copying begins. is null. is less than 0.The number of elements in the source is greater than the available space from to the end of the destination . +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void CopyTo(T[] array, int arrayIndex) + { + if (count > 0) + { + if (firstIndex <= lastIndex) + { + Array.Copy(Elements, firstIndex, array, arrayIndex, count); + } + else + { + //Copy the old first-end to the first part of the new array. + Array.Copy(Elements, firstIndex, array, arrayIndex, Elements.Length - firstIndex); + //Copy the old begin-last to the second part of the new array. + Array.Copy(Elements, 0, array, arrayIndex + Elements.Length - firstIndex, lastIndex + 1); + } + } + } + + /// + /// Clears the queue by setting the count to zero and explicitly setting all relevant indices in the backing array to default values. + /// +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void Clear() + { + Validate(); + if (lastIndex >= firstIndex) + { + Array.Clear(Elements, firstIndex, count); + } + else if (count > 0) + { + Array.Clear(Elements, firstIndex, Elements.Length - firstIndex); + Array.Clear(Elements, 0, lastIndex + 1); + } + count = 0; + firstIndex = 0; + lastIndex = capacityMask; //length - 1 + } + + /// + /// Clears the queue without changing any of the values in the backing array. Be careful about using this if the queue contains reference types. + /// +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void FastClear() + { + count = 0; + firstIndex = 0; + lastIndex = capacityMask; + } + + /// + /// Compacts the internal buffer to the minimum size required for the number of elements in the queue. + /// + public void Compact() + { + Validate(); + var newPoolIndex = BufferPool.GetPoolIndex(Count); + if (newPoolIndex != poolIndex) + Resize(newPoolIndex); + } + + /// + /// Clears and returns the queue's buffers. + /// + public void Dispose() + { + Clear(); + pool.GiveBack(Elements, poolIndex); +#if DEBUG + pool = null; +#endif + } + + [Conditional("DEBUG")] + void ValidateIndex(int index) + { + Debug.Assert(index >= 0 && index < Count, "Index must be nonnegative and less than the number of elements in the queue."); + } + + + [Conditional("DEBUG")] + private void Validate() + { + Debug.Assert(pool != null, "Should not use a default-constructed or disposed QuickQueue."); + } + + public Enumerator GetEnumerator() + { + return new Enumerator(Elements, count, firstIndex); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public struct Enumerator : IEnumerator + { + private readonly T[] backingArray; + private readonly int count; + private readonly int firstIndex; + private readonly int capacityMask; + private int index; + + public Enumerator(T[] backingArray, int count, int firstIndex) + { + this.backingArray = backingArray; + this.count = count; + this.firstIndex = firstIndex; + this.capacityMask = backingArray.Length - 1; + index = -1; + } + + public T Current + { + get { return backingArray[(firstIndex + index) & capacityMask]; } + } + + public void Dispose() + { + } + + object System.Collections.IEnumerator.Current + { + get { return Current; } + } + + public bool MoveNext() + { + return ++index < count; + } + + public void Reset() + { + index = -1; + } + } + } +} diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickQueue.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickQueue.cs.meta new file mode 100644 index 00000000..5a736f9c --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickQueue.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3ec780f922c4fd545b855d6432b8068a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickSet.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickSet.cs new file mode 100644 index 00000000..2791dfbd --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickSet.cs @@ -0,0 +1,424 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using BEPUutilities.ResourceManagement; +#if FORCEINLINE +using System.Runtime.CompilerServices; +#endif + +namespace BEPUutilities.DataStructures +{ + /// + /// Container supporting constant time adds and removes while preserving fast iteration times. + /// Offers very direct access to information at the cost of safety. + /// + /// Be very careful when using this type. It has sacrificed a lot upon the altar of performance; a few notable issues include: + /// it is a value type and copying it around will break things without extreme care, it cannot be validly default-constructed, + /// it exposes internal structures to user modification, it is particularly vulnerable to bad hash functions, + /// it rarely checks input for errors, and the enumerator doesn't check for mid-enumeration modification. + /// Note that the implementation is extremely simple. It uses single-step linear probing under the assumption of very low collision rates. + /// A generous table capacity is recommended; this trades some memory for simplicity and runtime performance. + /// Type of element held by the container. + public struct QuickSet : IDisposable, IEnumerable where T : IEquatable + { + private int count; + /// + /// Gets the number of elements in the set. + /// + public int Count + { + get { return count; } + } + + private int[] table; + + /// + /// Gets the backing array containing the elements of the set. + /// Indices from 0 to Count-1 hold actual data. All other data is undefined. + /// + public readonly T[] Elements; + + + + private readonly BufferPool tablePool; + private readonly BufferPool elementPool; + + /// + /// Gets or sets an element at the given index in the list representation. + /// + /// Index to grab an element from. + /// Element at the given index in the list. + public T this[int index] + { + //You would think that such a trivial accessor would inline without any external suggestion. + //Sometimes, yes. Sometimes, no. :( +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + get + { + Debug.Assert(index >= 0 && index < count, "Index should be within the list's size."); + return Elements[index]; + } +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + set + { + Debug.Assert(index >= 0 && index < count, "Index should be within the list's size."); + Elements[index] = value; + } + } + + private int elementPoolIndex; + private int tablePoolIndex; + private int tableMask; + + + + /// + /// Creates a new set. + /// + /// Pool from which to retrieve integer arrays. + /// Pool from which to retrieve typed arrays. + /// Initial pool index to pull the object buffer from. The size of the initial buffer will be 2^initialElementPoolIndex. + /// Initial pool index to pull the object buffer from. The size of the initial table buffer will be 2^(initialElementPoolIndex + tableSizePower). + public QuickSet(BufferPool elementPool, BufferPool tablePool, int initialElementPoolIndex = 2, int tableSizePower = 3) + { + if (tableSizePower <= 0) + throw new ArgumentException("The hash table must be larger than the element array.", "tableSizePower"); + if (initialElementPoolIndex < 0) + throw new ArgumentException("Initial pool index must be nonnegative.", "initialElementPoolIndex"); + this.tablePool = tablePool; + this.elementPool = elementPool; + + elementPoolIndex = initialElementPoolIndex; + tablePoolIndex = initialElementPoolIndex + tableSizePower; + Elements = elementPool.TakeFromPoolIndex(elementPoolIndex); + table = tablePool.TakeFromPoolIndex(tablePoolIndex); + //Correctness requires a clean table. '0' means 'not taken'. + Array.Clear(table, 0, table.Length); + count = 0; + tableMask = table.Length - 1; + + } + + private void Resize(int newObjectPoolIndex, int newTablePoolIndex) + { + //Just double the size of the set. + var oldSet = this; + this = new QuickSet(elementPool, tablePool, newObjectPoolIndex, newTablePoolIndex - newObjectPoolIndex); + for (int i = oldSet.count - 1; i >= 0; --i) + { + Add(oldSet.Elements[i]); + } + oldSet.Dispose(); + } + + /// + /// Gets the index of the element in the table. + /// + /// Element to look up. + /// Index of the element in the redirect table, or if it is not present, the index of where it would be added. + /// The index of the element in the elements array, if it exists; -1 otherwise. + /// True if the element is present in the set, false if it is not. +#if FORCEINLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private bool GetIndices(T element, out int tableIndex, out int elementIndex) + { + //The table lengths are guaranteed to be a power of 2, so the modulo is a simple binary operation. + //TODO: forcing an inline on this function would be useful on platforms where it is possible. + tableIndex = element.GetHashCode() & tableMask; + //0 in the table means 'not taken'; all other values are offset by 1 upward. That is, 1 is actually index 0, 2 is actually index 1, and so on. + //This is preferred over using a negative number for flagging since clean buffers will contain all 0's. + while ((elementIndex = table[tableIndex]) > 0) + { + //This table index is taken. Is this the specified element? + //Remember to decode the object index. + if (Elements[--elementIndex].Equals(element)) + { + return true; + } + tableIndex = (tableIndex + 1) & tableMask; + } + elementIndex = -1; + return false; + } + + /// + /// Gets the index of the element in the list if it exists. + /// + /// Element to get the index of. + /// The index of the element if the element exists in the list, -1 otherwise. + public int IndexOf(T element) + { + Validate(); + int tableIndex, objectIndex; + GetIndices(element, out tableIndex, out objectIndex); + return objectIndex; + } + + /// + /// Checks if a given element already belongs to the set. + /// + /// Element to test for. + /// True if the element already belongs to the set, false otherwise. + public bool Contains(T element) + { + Validate(); + int tableIndex, objectIndex; + return GetIndices(element, out tableIndex, out objectIndex); + } + + /// + /// Adds an element to the set. If a version of the element (same hash code, 'equal' by comparer) is already present, + /// it is replaced by the given version. + /// + /// Element to add. + /// True if the element was added to the set, false if the element was already present and was instead replaced. + public bool AddAndReplace(T element) + { + Validate(); + if (count == Elements.Length) + { + //There's no room left; resize. + Resize(elementPoolIndex + 1, tablePoolIndex + 1); + + //Note that this is tested before any indices are found. + //If we resized only after determining that it was going to be added, + //the potential resize would invalidate the computed indices. + } + + int tableIndex, elementIndex; + if (GetIndices(element, out tableIndex, out elementIndex)) + { + //Already present! + Elements[elementIndex] = element; + return false; + } + + + //It wasn't in the set. Add it! + Elements[count] = element; + //Use the encoding- all indices are offset by 1 since 0 represents 'empty'. + table[tableIndex] = ++count; + return true; + } + + + /// + /// Adds an element to the set if it is not already present. + /// + /// Element to add. + /// True if the element was added to the set, false if the element was already present. + public bool Add(T element) + { + Validate(); + + if (count == Elements.Length) + { + //There's no room left; resize. + Resize(elementPoolIndex + 1, tablePoolIndex + 1); + + //Note that this is tested before any indices are found. + //If we resized only after determining that it was going to be added, + //the potential resize would invalidate the computed indices. + } + + int tableIndex, elementIndex; + if (GetIndices(element, out tableIndex, out elementIndex)) + { + //Already present! + return false; + } + + + //It wasn't in the set. Add it! + Elements[count] = element; + //Use the encoding- all indices are offset by 1 since 0 represents 'empty'. + table[tableIndex] = ++count; + return true; + } + + //Note: the reason this is named "FastRemove" instead of just "Remove" despite it being the only remove present is that + //there may later exist an order preserving "Remove". That would be a very sneaky breaking change. + + /// + /// Removes an element from the set if belongs to the set. + /// Does not preserve the order of elements in the set. + /// + /// Element to remove. + /// True if the element was found and removed, false otherwise. + public bool FastRemove(T element) + { + Validate(); + //Find it. + int tableIndex, objectIndex; + if (GetIndices(element, out tableIndex, out objectIndex)) + { + //We found the object! + //Add and remove must both maintain a property: + //All items are either at their desired index (as defined by the hash), or they are contained in a contiguous block clockwise from the desired index. + //Removals seek to fill the gap they create by searching clockwise to find items which can be moved backward. + //Search clockwise for an item to fill this slot. The search must continue until a gap is found. + int moveCandidateIndex; + int gapIndex = tableIndex; + //Search clockwise. + while ((moveCandidateIndex = table[tableIndex = (tableIndex + 1) & tableMask]) > 0) + { + //This slot contains something. What is its actual index? + --moveCandidateIndex; + int desiredIndex = Elements[moveCandidateIndex].GetHashCode() & tableMask; + + //Would this element be closer to its actual index if it was moved to the gap? + //To find out, compute the clockwise distance from the gap and the clockwise distance from the ideal location. + + var distanceFromGap = (tableIndex - gapIndex) & tableMask; + var distanceFromIdeal = (tableIndex - desiredIndex) & tableMask; + if (distanceFromGap <= distanceFromIdeal) + { + //The distance to the gap is less than or equal the distance to the ideal location, so just move to the gap. + table[gapIndex] = table[tableIndex]; + gapIndex = tableIndex; + } + + } + //Clear the table gap left by the removal. + table[gapIndex] = 0; + //Swap the final element into the removed object's element array index, if the removed object wasn't the last object. + --count; + if (objectIndex < count) + { + Elements[objectIndex] = Elements[count]; + //Locate the swapped object in the table and update its index. + int oldObjectIndex; + GetIndices(Elements[objectIndex], out tableIndex, out oldObjectIndex); + table[tableIndex] = objectIndex + 1; //Remember the encoding! all indices offset by 1. + } + //Clear the final slot in the elements set. + Elements[count] = default(T); + + return true; + } + return false; + } + + + /// + /// Shrinks the internal buffers to the smallest acceptable size and releases the old buffers to the pools. + /// + public void Compact() + { + Validate(); + var minimumRequiredPoolIndex = BufferPool.GetPoolIndex(count); + if (minimumRequiredPoolIndex != elementPoolIndex) + Resize(minimumRequiredPoolIndex, minimumRequiredPoolIndex + (tablePoolIndex - elementPoolIndex)); + } + + /// + /// Removes all elements from the set. + /// + public void Clear() + { + //While it may be appealing to remove individual elements from the set when the set is sparse, + //using a brute force clear over the entire table is almost always faster. And it's a lot simpler! + Array.Clear(table, 0, table.Length); + Array.Clear(Elements, 0, count); + count = 0; + } + + /// + /// Removes all elements from the set without modifying the contents of the elements array. Be careful about using this with reference types. + /// + public void FastClear() + { + Array.Clear(table, 0, table.Length); + count = 0; + } + + public Enumerator GetEnumerator() + { + Validate(); + return new Enumerator(Elements, Count); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public struct Enumerator : IEnumerator + { + private readonly T[] backingArray; + private readonly int count; + private int index; + + public Enumerator(T[] backingArray, int count) + { + this.backingArray = backingArray; + this.count = count; + + index = -1; + } + + public T Current + { + get { return backingArray[index]; } + } + + public void Dispose() + { + } + + object System.Collections.IEnumerator.Current + { + get { return Current; } + } + + public bool MoveNext() + { + return ++index < count; + } + + public void Reset() + { + index = -1; + } + } + + [Conditional("DEBUG")] + private void Validate() + { + Debug.Assert(table != null, "The QuickSet must have its internal buffers and pools available; default-constructed or disposed QuickSets should not be used."); + } + + /// + /// Clears and returns the set's buffers to the pools. + /// + public void Dispose() + { + //We must clean out the table before returning it to the pool in case the array contains reference types which would otherwise leak. + //The user may have already manually cleared it. To avoid doing redundant work, check the count first. + //The user may have chosen to leave reference types in the list if they did a fast clear, but that's not for us to worry about. + if (count > 0) + { + Clear(); + } + + tablePool.GiveBack(table, tablePoolIndex); + elementPool.GiveBack(Elements, elementPoolIndex); +#if DEBUG + table = null; +#endif + } + + + + } +} diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickSet.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickSet.cs.meta new file mode 100644 index 00000000..12062f15 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/QuickSet.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8c7ebc89a6870394a9d1664e421a6ffb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/RawList.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/RawList.cs new file mode 100644 index 00000000..3604835a --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/RawList.cs @@ -0,0 +1,433 @@ +using System; +using System.Collections.Generic; + +namespace BEPUutilities.DataStructures +{ + /// + /// No-frills list that wraps an accessible array. + /// + ///Type of elements contained by the list. + public class RawList : IList + { + /// + /// Direct access to the elements owned by the raw list. + /// Be careful about the operations performed on this list; + /// use the normal access methods if in doubt. + /// + public T[] Elements; + + /// + /// Gets the number of elements contained in the . + /// Can also be set; setting the count is a direct change to the count integer and does not change the state of the array. + /// + /// + /// The number of elements contained in the . + /// + public int Count { get; set; } + + /// + /// Constructs an empty list. + /// + public RawList() + { + Elements = new T[4]; + } + /// + /// Constructs an empty list. + /// + ///Initial capacity to allocate for the list. + ///Thrown when the initial capacity is zero or negative. + public RawList(int initialCapacity) + { + if (initialCapacity <= 0) + throw new ArgumentException("Initial capacity must be positive."); + Elements = new T[initialCapacity]; + } + + /// + /// Constructs a raw list from another list. + /// + ///List to copy. + public RawList(IList elements) + : this(Math.Max(elements.Count, 4)) + { + elements.CopyTo(Elements, 0); + Count = elements.Count; + } + + /// + /// Removes an element from the list. + /// + /// Index of the element to remove. + public void RemoveAt(int index) + { + if (index >= Count) + { + throw new ArgumentOutOfRangeException("index"); + } + Count--; + if (index < Count) + Array.Copy(Elements, index + 1, Elements, index, Count - index); + + Elements[Count] = default(T); + } + + /// + /// Removes an element from the list without maintaining order. + /// + /// Index of the element to remove. + public void FastRemoveAt(int index) + { + if (index >= Count) + { + throw new ArgumentOutOfRangeException("index"); + } + Count--; + if (index < Count) + { + Elements[index] = Elements[Count]; + } + Elements[Count] = default(T); + + } + + /// + /// Gets or sets the current size allocated for the list. + /// If the new capacity is less than the current Count, the excess elements are truncated. + /// + public int Capacity + { + get + { + return Elements.Length; + } + set + { + T[] newArray = new T[value]; + Array.Copy(Elements, newArray, Math.Min(value, Count)); + Elements = newArray; + } + } + + /// + /// Adds an item to the . + /// + /// The object to add to the .The is read-only. + public void Add(T item) + { + if (Count == Elements.Length) + { + Capacity = Elements.Length * 2; + } + Elements[Count++] = item; + + } + + /// + /// Adds a range of elements to the list from another list. + /// + ///Elements to add. + public void AddRange(RawList items) + { + int neededLength = Count + items.Count; + if (neededLength > Elements.Length) + { + int newLength = Elements.Length * 2; + if (newLength < neededLength) + newLength = neededLength; + Capacity = newLength; + } + Array.Copy(items.Elements, 0, Elements, Count, items.Count); + Count = neededLength; + + } + + /// + /// Adds a range of elements to the list from another list. + /// + ///Elements to add. + public void AddRange(List items) + { + int neededLength = Count + items.Count; + if (neededLength > Elements.Length) + { + int newLength = Elements.Length * 2; + if (newLength < neededLength) + newLength = neededLength; + Capacity = newLength; + } + items.CopyTo(0, Elements, Count, items.Count); + Count = neededLength; + + } + + /// + /// Adds a range of elements to the list from another list. + /// + ///Elements to add. + public void AddRange(IList items) + { + int neededLength = Count + items.Count; + if (neededLength > Elements.Length) + { + int newLength = Elements.Length * 2; + if (newLength < neededLength) + newLength = neededLength; + Capacity = newLength; + } + items.CopyTo(Elements, 0); + Count = neededLength; + + } + + /// + /// Removes all items from the . + /// + /// The is read-only. + public void Clear() + { + Array.Clear(Elements, 0, Count); + Count = 0; + } + + /// + /// Removes the first occurrence of a specific object from the . + /// + /// + /// true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . + /// + /// The object to remove from the .The is read-only. + public bool Remove(T item) + { + int index = IndexOf(item); + if (index == -1) + return false; + RemoveAt(index); + return true; + } + + /// + /// Removes the first occurrence of a specific object from the collection without maintaining element order. + /// + /// + /// true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . + /// + /// The object to remove from the .The is read-only. + public bool FastRemove(T item) + { + int index = IndexOf(item); + if (index == -1) + return false; + FastRemoveAt(index); + return true; + } + + /// + /// Determines the index of a specific item in the . + /// + /// + /// The index of if found in the list; otherwise, -1. + /// + /// The object to locate in the . + public int IndexOf(T item) + { + return Array.IndexOf(Elements, item, 0, Count); + } + + /// + /// Copies the elements from the list into an array. + /// + /// An array containing the elements in the list. + public T[] ToArray() + { + var toReturn = new T[Count]; + Array.Copy(Elements, toReturn, Count); + return toReturn; + } + + + #region IList Members + + + /// + /// Inserts the element at the specified index. + /// + /// Index to insert the item. + /// Element to insert. + public void Insert(int index, T item) + { + if (index < Count) + { + if (Count == Elements.Length) + { + Capacity = Elements.Length * 2; + } + + Array.Copy(Elements, index, Elements, index + 1, Count - index); + Elements[index] = item; + Count++; + } + else + Add(item); + } + /// + /// Inserts the element at the specified index without maintaining list order. + /// + /// Index to insert the item. + /// Element to insert. + public void FastInsert(int index, T item) + { + if (index < Count) + { + if (Count == Elements.Length) + { + Capacity = Elements.Length * 2; + } + + Array.Copy(Elements, index, Elements, index + 1, Count - index); + Elements[Count] = Elements[index]; + Elements[index] = item; + Count++; + } + else + Add(item); + } + + /// + /// Gets or sets the element of the list at the given index. + /// + /// Index in the list. + /// Element at the given index. + public T this[int index] + { + get + { + if (index < Count && index >= 0) + return Elements[index]; + else + throw new IndexOutOfRangeException("Index is outside of the list's bounds."); + } + set + { + if (index < Count && index >= 0) + Elements[index] = value; + else + throw new IndexOutOfRangeException("Index is outside of the list's bounds."); + } + } + + #endregion + + #region ICollection Members + + /// + /// Determines if an item is present in the list. + /// + /// Item to be tested. + /// Whether or not the item was contained by the list. + public bool Contains(T item) + { + return IndexOf(item) != -1; + } + + /// + /// Copies the list's contents to the array. + /// + /// Array to receive the list's contents. + /// Index in the array to start the dump. + public void CopyTo(T[] array, int arrayIndex) + { + Array.Copy(Elements, 0, array, arrayIndex, Count); + } + + + bool ICollection.IsReadOnly + { + get { return false; } + } + + #endregion + + #region IEnumerable Members + + /// + /// Gets an enumerator for the list. + /// + ///Enumerator for the list. + public Enumerator GetEnumerator() + { + return new Enumerator(this); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return new Enumerator(this); + } + + #endregion + + #region IEnumerable Members + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return new Enumerator(this); + } + + #endregion + + + + /// + /// Sorts the list. + /// + ///Comparer to use to sort the list. + public void Sort(IComparer comparer) + { + Array.Sort(Elements, 0, Count, comparer); + } + + + /// + /// Enumerator for the RawList. + /// + public struct Enumerator : IEnumerator + { + RawList list; + int index; + /// + /// Constructs a new enumerator. + /// + /// + public Enumerator(RawList list) + { + index = -1; + this.list = list; + } + public T Current + { + get { return list.Elements[index]; } + } + + public void Dispose() + { + } + + object System.Collections.IEnumerator.Current + { + get { return list.Elements[index]; } + } + + public bool MoveNext() + { + return ++index < list.Count; + } + + public void Reset() + { + index = -1; + } + } + + + } +} diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/RawList.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/RawList.cs.meta new file mode 100644 index 00000000..1f327703 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/RawList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 935e6c6fd428ab349b2f8ed9765b6ccb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/RawValueList.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/RawValueList.cs new file mode 100644 index 00000000..6fa56f96 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/RawValueList.cs @@ -0,0 +1,131 @@ +using System; + +namespace BEPUutilities.DataStructures +{ + //THIS SHOULD ONLY BE USED ON VALUE TYPES WHICH HAVE NO REFERENCES TO HEAP OBJECTS. + /// + /// No-frills list used for value types that contain no reference types. + /// + ///Type of the elements in the list. + public class RawValueList where T : struct + { + /// + /// Directly accessible array of elements in the list. + /// Be careful about which operations are applied to the array; + /// if in doubt, use the regular access methods. + /// + public T[] Elements; + + /// + /// Gets the number of elements contained in the . + /// Can also be set; setting the count is a direct change to the count integer and does not change the state of the array. + /// + /// + /// The number of elements contained in the . + /// + public int Count { get; set; } + + /// + /// Constructs an empty list. + /// + public RawValueList() + { + Elements = new T[4]; + } + /// + /// Constructs an empty list. + /// + ///Initial capacity of the list. + ///Thrown when the initial capcity is less than or equal to zero. + public RawValueList(int initialCapacity) + { + if (initialCapacity <= 0) + throw new ArgumentException("Initial capacity must be positive."); + Elements = new T[initialCapacity]; + } + + + /// + /// Removes an element from the list. + /// + ///Index of the element to remove. + ///Thrown when the index is not present in the list. + public void RemoveAt(int index) + { + if (index >= Count) + { + throw new ArgumentOutOfRangeException("index"); + } + Count--; + if (index < Count) + { + Elements[index] = Elements[Count]; + } + + } + + /// + /// Gets or sets the current size allocated for the list. + /// + public int Capacity + { + get + { + return Elements.Length; + } + set + { + T[] newArray = new T[value]; + Array.Copy(Elements, newArray, Count); + Elements = newArray; + } + } + + /// + /// Adds an element to the list. + /// + ///Item to add. + public void Add(ref T item) + { + if (Count == Elements.Length) + { + Capacity = Elements.Length * 2; + } + Elements[Count++] = item; + + } + + /// + /// Clears the list of all elements. + /// + public void Clear() + { + Count = 0; + } + + /// + /// Removes an element from the list. + /// + ///Item to remove. + ///Whether or not the item was present in the list. + public bool Remove(ref T item) + { + int index = IndexOf(ref item); + if (index == -1) + return false; + RemoveAt(index); + return true; + } + + /// + /// Gets the index of an element in the list. + /// + ///Item to search for. + ///Index of the searched element. + public int IndexOf(ref T item) + { + return Array.IndexOf(Elements, item); + } + + } +} diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/RawValueList.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/RawValueList.cs.meta new file mode 100644 index 00000000..c9336355 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/RawValueList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 88000ee6b931f754eadac98434817816 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ReadOnlyDictionary.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ReadOnlyDictionary.cs new file mode 100644 index 00000000..f2a65aae --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ReadOnlyDictionary.cs @@ -0,0 +1,131 @@ +using System.Collections; +using System.Collections.Generic; + +namespace BEPUutilities.DataStructures +{ + //TODO: This could be handled better. + + /// + /// Wraps a dictionary in a read only collection. + /// + ///Type of keys in the dictionary. + ///Type of values in the dictionary. + public struct ReadOnlyDictionary : IEnumerable> + { + private readonly IDictionary dictionary; + + /// + /// Constructs a new read-only wrapper dictionary. + /// + /// Internal dictionary to use. + public ReadOnlyDictionary(IDictionary dictionary) + { + this.dictionary = dictionary; + } + + /// + /// Gets the number of elements in the dictionary. + /// + public int Count + { + get { return dictionary.Count; } + } + + /// + /// Gets whether or not this dictionary is read-only. + /// + public bool IsReadOnly + { + get { return true; } + } + + /// + /// Gets the value associated with the key in the dictionary. + /// + /// Key to look for in the dictionary. + /// Value associated with the key. + public TValue this[TKey key] + { + get { return dictionary[key]; } + } + + /// + /// Gets an enumerable set of keys in the dictionary. + /// + public IEnumerable Keys + { + get { return new ReadOnlyEnumerable(dictionary.Keys); } + } + + /// + /// Gets an enumerable set of values in the dictionary. + /// + public IEnumerable Values + { + get { return new ReadOnlyEnumerable(dictionary.Values); } + } + + #region IEnumerable> Members + + /// + /// Gets an enumerator for key-value pairs in the dictionary. + /// + /// Enumerator for the dictionary. + IEnumerator> IEnumerable>.GetEnumerator() + { + return dictionary.GetEnumerator(); + } + + /// + /// Gets an enumerator for key-value pairs in the dictionary. + /// + /// Enumerator for the dictionary. + IEnumerator IEnumerable.GetEnumerator() + { + return dictionary.GetEnumerator(); + } + + #endregion + + /// + /// Determines if the dictionary contains a key-value pair. + /// + /// Key-value pair to look for. + /// Whether or not the key-value pair is present. + public bool Contains(KeyValuePair item) + { + return dictionary.Contains(item); + } + + /// + /// Determines if the dictionary contains a given key. + /// + /// Key to check for. + /// Whether or not the key is contained. + public bool ContainsKey(TKey key) + { + return dictionary.ContainsKey(key); + } + + /// + /// Copies the key-value pairs of the dictionary into an array. + /// + /// Target array. + /// The zero-based index at which copying begins. + public void CopyTo(KeyValuePair[] array, int arrayIndex) + { + dictionary.CopyTo(array, arrayIndex); + } + + /// + /// Tries to retrieve a value from the dictionary using a key. + /// + /// Key to look for. + /// Value associated with the key. + /// Whether or not the key exists. + public bool TryGetValue(TKey key, out TValue value) + { + return dictionary.TryGetValue(key, out value); + } + } +} \ No newline at end of file diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ReadOnlyDictionary.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ReadOnlyDictionary.cs.meta new file mode 100644 index 00000000..d91f0e1f --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ReadOnlyDictionary.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0e7381fdd2fb931499e322ea5fd43fea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ReadOnlyEnumerable.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ReadOnlyEnumerable.cs new file mode 100644 index 00000000..374bb238 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ReadOnlyEnumerable.cs @@ -0,0 +1,44 @@ +using System.Collections; +using System.Collections.Generic; + +namespace BEPUutilities.DataStructures +{ + /// + /// Wraps an enumerable in a temporary enumeration struct. + /// + ///Type of the enumerable being iterated. + public struct ReadOnlyEnumerable : IEnumerable + { + private readonly IEnumerable enumerable; + + /// + /// Constructs a new read only enumerable. + /// + ///Enumerable to wrap. + public ReadOnlyEnumerable(IEnumerable enumerable) + { + this.enumerable = enumerable; + } + + #region IEnumerable Members + + /// + /// Returns an enumerator that iterates through the collection. + /// + /// + /// A that can be used to iterate through the collection. + /// + /// 1 + public IEnumerator GetEnumerator() + { + return enumerable.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return enumerable.GetEnumerator(); + } + + #endregion + } +} \ No newline at end of file diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ReadOnlyEnumerable.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ReadOnlyEnumerable.cs.meta new file mode 100644 index 00000000..96a4a72c --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ReadOnlyEnumerable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a556047a9b0315448973adbd1d78da6f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ReadOnlyList.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ReadOnlyList.cs new file mode 100644 index 00000000..30e4376d --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ReadOnlyList.cs @@ -0,0 +1,192 @@ +using System; +using System.Collections.Generic; + +namespace BEPUutilities.DataStructures +{ + /// + /// Wraps a list in an enumerable struct. + /// + /// Type contained by the list. + public struct ReadOnlyList : IList + { + IList wrappedList; + + /// + /// Constructs a new read-only list. + /// + /// List wrapped by the read-only list. + public ReadOnlyList(IList wrappedList) + { + this.wrappedList = wrappedList; + } + + + /// + /// Determines the index of a specific item in the . + /// + /// + /// The index of if found in the list; otherwise, -1. + /// + /// The object to locate in the . + public int IndexOf(T item) + { + return wrappedList.IndexOf(item); + } + + void IList.Insert(int index, T item) + { + throw new NotSupportedException("The list is read-only."); + } + + void IList.RemoveAt(int index) + { + throw new NotSupportedException("The list is read-only."); + } + + /// + /// Gets the element at the specified index. + /// + /// + /// The element at the specified index. + /// + /// The zero-based index of the element to get. is not a valid index in the .The property is set and the is read-only. + public T this[int index] + { + get { return wrappedList[index]; } + set + { + throw new NotSupportedException("The list is read-only."); + } + } + + void ICollection.Add(T item) + { + throw new NotSupportedException("The list is read-only."); + } + + void ICollection.Clear() + { + throw new NotSupportedException("The list is read-only."); + } + + /// + /// Determines whether the contains a specific value. + /// + /// + /// true if is found in the ; otherwise, false. + /// + /// The object to locate in the . + public bool Contains(T item) + { + return wrappedList.Contains(item); + } + + /// + /// Copies the elements of the to an , starting at a particular index. + /// + /// The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing.The zero-based index in at which copying begins. is null. is less than 0. is multidimensional.-or-The number of elements in the source is greater than the available space from to the end of the destination .-or-Type cannot be cast automatically to the type of the destination . + public void CopyTo(T[] array, int arrayIndex) + { + wrappedList.CopyTo(array, arrayIndex); + } + + /// + /// Gets the number of elements contained in the . + /// + /// + /// The number of elements contained in the . + /// + public int Count + { + get { return wrappedList.Count; } + } + + bool ICollection.IsReadOnly + { + get { return true; } + } + + bool ICollection.Remove(T item) + { + throw new NotSupportedException("The list is read-only."); + } + + public Enumerator GetEnumerator() + { + return new Enumerator(wrappedList); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return wrappedList.GetEnumerator(); + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return wrappedList.GetEnumerator(); + } + + /// + /// Enumerates the read only list. + /// + public struct Enumerator : IEnumerator + { + private IList wrappedList; + int index; + /// + /// Constructs an enumerator. + /// + ///Collection to which the enumerator belongs. + public Enumerator(IList wrappedList) + { + this.wrappedList = wrappedList; + index = -1; + } + + /// + /// Gets the element in the collection at the current position of the enumerator. + /// + /// + /// The element in the collection at the current position of the enumerator. + /// + public T Current + { + get { return wrappedList[index]; } + } + + /// + /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + /// + /// 2 + public void Dispose() + { + } + + object System.Collections.IEnumerator.Current + { + get { return Current; } + } + + /// + /// Advances the enumerator to the next element of the collection. + /// + /// + /// true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the collection. + /// + /// The collection was modified after the enumerator was created. 2 + public bool MoveNext() + { + return ++index < wrappedList.Count; + } + + /// + /// Sets the enumerator to its initial position, which is before the first element in the collection. + /// + /// The collection was modified after the enumerator was created. 2 + public void Reset() + { + index = -1; + } + } + } +} diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ReadOnlyList.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ReadOnlyList.cs.meta new file mode 100644 index 00000000..de389d72 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/ReadOnlyList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4a7d2a8d4475f2c4481cfcc9e0e97e53 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/TinyList.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/TinyList.cs new file mode 100644 index 00000000..69213797 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/TinyList.cs @@ -0,0 +1,278 @@ +using System; + +namespace BEPUutilities.DataStructures +{ + /// + /// Special datatype used for heapless lists without unsafe/stackalloc. + /// Designed for object types or reference-sized structs (int, float...). + /// Stores a maximum of 8 entries. + /// + /// Struct type to use. + public struct TinyList where T : IEquatable + { + private T entry1; + private T entry2; + private T entry3; + private T entry4; + + private T entry5; + private T entry6; + private T entry7; + private T entry8; + + internal int count; + + /// + /// Gets the current number of elements in the list. + /// + public int Count + { + get { return count; } + } + + /// + /// Gets the item at the specified index. + /// + /// Index to retrieve. + /// Retrieved item. + public T this[int index] + { + get + { + //Get + if (index > count - 1 || index < 0) + { + return default(T); + } + switch (index) + { + case 0: + return entry1; + case 1: + return entry2; + case 2: + return entry3; + case 3: + return entry4; + case 4: + return entry5; + case 5: + return entry6; + case 6: + return entry7; + case 7: + return entry8; + default: + //Curious! + return default(T); + } + } + set + { + //Replace + if (index > count - 1 || index < 0) + { + return; + } + switch (index) + { + case 0: + entry1 = value; + break; + case 1: + entry2 = value; + break; + case 2: + entry3 = value; + break; + case 3: + entry4 = value; + break; + case 4: + entry5 = value; + break; + case 5: + entry6 = value; + break; + case 6: + entry7 = value; + break; + case 7: + entry8 = value; + break; + } + } + } + + /// + /// Creates a string representation of the list. + /// + /// String representation of the list. + public override string ToString() + { + return "TinyList<" + typeof (T) + ">, Count: " + count; + } + + /// + /// Tries to add an element to the list. + /// + /// Item to add. + /// Whether or not the item could be added. + /// Will return false when the list is full. + public bool Add(T item) + { + switch (count) + { + case 0: + entry1 = item; + break; + case 1: + entry2 = item; + break; + case 2: + entry3 = item; + break; + case 3: + entry4 = item; + break; + case 4: + entry5 = item; + break; + case 5: + entry6 = item; + break; + case 6: + entry7 = item; + break; + case 7: + entry8 = item; + break; + default: + return false; + } + count++; + return true; + } + + /// + /// Clears the list. + /// + public void Clear() + { + //Things aren't guaranteed to be structs in this list. + //It would be bad if we kept a reference around, hidden. + count = 0; + entry1 = default(T); + entry2 = default(T); + entry3 = default(T); + entry4 = default(T); + entry5 = default(T); + entry6 = default(T); + entry7 = default(T); + entry8 = default(T); + } + + /// + /// Gets the index of the item in the list, if it is present. + /// + /// Item to look for. + /// Index of the item, if present. -1 otherwise. + public int IndexOf(T item) + { + //This isn't a super fast operation. + if (entry1.Equals(item)) + return 0; + else if (entry2.Equals(item)) + return 1; + else if (entry3.Equals(item)) + return 2; + else if (entry4.Equals(item)) + return 3; + else if (entry5.Equals(item)) + return 4; + else if (entry6.Equals(item)) + return 5; + else if (entry7.Equals(item)) + return 6; + else if (entry8.Equals(item)) + return 7; + return -1; + } + + /// + /// Tries to remove an element from the list. + /// + /// Item to remove. + /// Whether or not the item existed in the list. + public bool Remove(T item) + { + //Identity-based removes aren't a super high priority feature, so can be a little slower. + int index = IndexOf(item); + if (index != -1) + { + RemoveAt(index); + return true; + } + return false; + } + + /// + /// Removes the item at the specified index. + /// + /// Index of the element to remove. + /// Whether or not the item could be removed. + /// Returns false if the index is out of bounds. + public bool RemoveAt(int index) + { + if (index > count - 1 || index < 0) + return false; + switch (index) + { + case 0: + entry1 = entry2; + entry2 = entry3; + entry3 = entry4; + entry4 = entry5; + entry5 = entry6; + entry6 = entry7; + entry7 = entry8; + break; + case 1: + entry2 = entry3; + entry3 = entry4; + entry4 = entry5; + entry5 = entry6; + entry6 = entry7; + entry7 = entry8; + break; + case 2: + entry3 = entry4; + entry4 = entry5; + entry5 = entry6; + entry6 = entry7; + entry7 = entry8; + break; + case 3: + entry4 = entry5; + entry5 = entry6; + entry6 = entry7; + entry7 = entry8; + break; + case 4: + entry5 = entry6; + entry6 = entry7; + entry7 = entry8; + break; + case 5: + entry6 = entry7; + entry7 = entry8; + break; + case 6: + entry7 = entry8; + break; + } + count--; + return true; + } + } +} \ No newline at end of file diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/TinyList.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/TinyList.cs.meta new file mode 100644 index 00000000..6663c6f8 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/TinyList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 244903b30ebec9a4496d854512d7d6d2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/TinyStructList.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/TinyStructList.cs new file mode 100644 index 00000000..ff21ac4b --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/TinyStructList.cs @@ -0,0 +1,288 @@ +using System; + +namespace BEPUutilities.DataStructures +{ + /// + /// Special datatype used for heapless lists without unsafe/stackalloc. + /// Since reference types would require heap-side allocation and + /// do not match well with this structure's ref-parameter based access, + /// only structs are allowed. + /// Stores a maximum of 8 entries. + /// + /// Struct type to use. + public struct TinyStructList where T : struct, IEquatable + { + private T entry1; + private T entry2; + private T entry3; + private T entry4; + + private T entry5; + private T entry6; + private T entry7; + private T entry8; + + internal int count; + + /// + /// Gets the current number of elements in the list. + /// + public int Count + { + get { return count; } + } + + /// + /// Creates a string representation of the list. + /// + /// String representation of the list. + public override string ToString() + { + return "TinyStructList<" + typeof (T) + ">, Count: " + count; + } + + /// + /// Tries to add an element to the list. + /// + /// Item to add. + /// Whether or not the item could be added. + /// Will return false when the list is full. + public bool Add(ref T item) + { + switch (count) + { + case 0: + entry1 = item; + break; + case 1: + entry2 = item; + break; + case 2: + entry3 = item; + break; + case 3: + entry4 = item; + break; + case 4: + entry5 = item; + break; + case 5: + entry6 = item; + break; + case 6: + entry7 = item; + break; + case 7: + entry8 = item; + break; + default: + return false; + } + count++; + return true; + } + + /// + /// Clears the list. + /// + public void Clear() + { + //Everything is a struct in this kind of list, so not much work to do! + count = 0; + } + + /// + /// Gets the item at the specified index. + /// + /// Index to retrieve. + /// Retrieved item. + /// Whether or not the index was valid. + public bool Get(int index, out T item) + { + if (index > count - 1 || index < 0) + { + item = default(T); + return false; + } + switch (index) + { + case 0: + item = entry1; + return true; + case 1: + item = entry2; + return true; + case 2: + item = entry3; + return true; + case 3: + item = entry4; + return true; + case 4: + item = entry5; + return true; + case 5: + item = entry6; + return true; + case 6: + item = entry7; + return true; + case 7: + item = entry8; + return true; + default: + //Curious! + item = default(T); + return false; + } + } + + /// + /// Gets the index of the item in the list, if it is present. + /// + /// Item to look for. + /// Index of the item, if present. -1 otherwise. + public int IndexOf(ref T item) + { + //This isn't a super fast operation. + if (entry1.Equals(item)) + return 0; + if (entry2.Equals(item)) + return 1; + if (entry3.Equals(item)) + return 2; + if (entry4.Equals(item)) + return 3; + if (entry5.Equals(item)) + return 4; + if (entry6.Equals(item)) + return 5; + if (entry7.Equals(item)) + return 6; + if (entry8.Equals(item)) + return 7; + return -1; + } + + /// + /// Tries to remove an element from the list. + /// + /// Item to remove. + /// Whether or not the item existed in the list. + public bool Remove(ref T item) + { + //Identity-based removes aren't a super high priority feature, so can be a little slower. + int index = IndexOf(ref item); + if (index != -1) + { + RemoveAt(index); + return true; + } + return false; + } + + /// + /// Removes the item at the specified index. + /// + /// Index of the element to remove. + /// Whether or not the item could be removed. + /// Returns false if the index is out of bounds. + public bool RemoveAt(int index) + { + if (index > count - 1 || index < 0) + return false; + switch (index) + { + case 0: + entry1 = entry2; + entry2 = entry3; + entry3 = entry4; + entry4 = entry5; + entry5 = entry6; + entry6 = entry7; + entry7 = entry8; + break; + case 1: + entry2 = entry3; + entry3 = entry4; + entry4 = entry5; + entry5 = entry6; + entry6 = entry7; + entry7 = entry8; + break; + case 2: + entry3 = entry4; + entry4 = entry5; + entry5 = entry6; + entry6 = entry7; + entry7 = entry8; + break; + case 3: + entry4 = entry5; + entry5 = entry6; + entry6 = entry7; + entry7 = entry8; + break; + case 4: + entry5 = entry6; + entry6 = entry7; + entry7 = entry8; + break; + case 5: + entry6 = entry7; + entry7 = entry8; + break; + case 6: + entry7 = entry8; + break; + } + count--; + return true; + } + + /// + /// Tries to add an element to the list. + /// + /// Index to replace. + /// Item to add. + /// Whether or not the item could be replaced. + /// Returns false if the index is invalid. + public bool Replace(int index, ref T item) + { + if (index > count - 1 || index < 0) + { + return false; + } + switch (index) + { + case 0: + entry1 = item; + break; + case 1: + entry2 = item; + break; + case 2: + entry3 = item; + break; + case 3: + entry4 = item; + break; + case 4: + entry5 = item; + break; + case 5: + entry6 = item; + break; + case 6: + entry7 = item; + break; + case 7: + entry8 = item; + break; + default: + return false; + } + return true; + } + } +} \ No newline at end of file diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/TinyStructList.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/TinyStructList.cs.meta new file mode 100644 index 00000000..f161567a --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/DataStructures/TinyStructList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 76494d5674bbc184187fe77d18b517ef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Int2.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Int2.cs new file mode 100644 index 00000000..cc52519b --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Int2.cs @@ -0,0 +1,51 @@ +using System; + +namespace BEPUutilities +{ + /// + /// Provides simple 2d cell hashing. + /// + public struct Int2 : IEquatable + { + public int X; + public int Y; + + public Int2(int x, int y) + { + X = x; + Y = y; + } + + public override bool Equals(object obj) + { + return Equals((Int2)obj); + } + + public bool Equals(Int2 other) + { + return X == other.X && Y == other.Y; + } + + public static bool operator ==(Int2 lhs, Int2 rhs) + { + return lhs.X == rhs.X && lhs.Y == rhs.Y; + } + + public static bool operator !=(Int2 lhs, Int2 rhs) + { + return lhs.X != rhs.X || lhs.Y != rhs.Y; + } + + public override int GetHashCode() + { + return (X * 533000401) ^ (Y * 920419813); + } + + public override string ToString() + { + return "{" + X + ", " + Y + "}"; + } + + + } +} diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Int2.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Int2.cs.meta new file mode 100644 index 00000000..c0db75fb --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Int2.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 323e285654868b349a0784d3759e8b72 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/MathChecker.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/MathChecker.cs new file mode 100644 index 00000000..8a09c5c2 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/MathChecker.cs @@ -0,0 +1,178 @@ +using System; +using System.Diagnostics; + +namespace BEPUutilities +{ + /// + /// Contains conditional extensions to check for bad values in various structures. + /// + public static class MathChecker + { + /// + /// Checks a single float for validity. Separate from the extension method to avoid throwing exceptions deep in a call tree. + /// + /// Value to validate. + /// True if the value is invalid, false if it is valid. + private static bool IsInvalid(float f) + { + return float.IsNaN(f) || float.IsInfinity(f); + } + + /// + /// Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown. + /// This is only run when the CHECKMATH symbol is defined. + /// + [Conditional("CHECKMATH")] + public static void Validate(this float f) + { + if (IsInvalid(f)) + { + throw new NotFiniteNumberException("Invalid value."); + } + } + + /// + /// Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown. + /// This is only run when the CHECKMATH symbol is defined. + /// + [Conditional("CHECKMATH")] + public static void Validate(this Vector3 v) + { + if (IsInvalid(v.LengthSquared())) + { + throw new NotFiniteNumberException("Invalid value."); + } + } + + /// + /// Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown. + /// This is only run when the CHECKMATH symbol is defined. + /// + [Conditional("CHECKMATH")] + public static void Validate(this Matrix2x2 m) + { + if (IsInvalid(m.M11) || IsInvalid(m.M12) || + IsInvalid(m.M21) || IsInvalid(m.M22)) + { + throw new NotFiniteNumberException("Invalid value."); + } + } + + /// + /// Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown. + /// This is only run when the CHECKMATH symbol is defined. + /// + [Conditional("CHECKMATH")] + public static void Validate(this Matrix3x2 m) + { + if (IsInvalid(m.M11) || IsInvalid(m.M12) || + IsInvalid(m.M21) || IsInvalid(m.M22) || + IsInvalid(m.M31) || IsInvalid(m.M32)) + { + throw new NotFiniteNumberException("Invalid value."); + } + } + + /// + /// Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown. + /// This is only run when the CHECKMATH symbol is defined. + /// + [Conditional("CHECKMATH")] + public static void Validate(this Matrix2x3 m) + { + if (IsInvalid(m.M11) || IsInvalid(m.M12) || IsInvalid(m.M13) || + IsInvalid(m.M21) || IsInvalid(m.M22) || IsInvalid(m.M23)) + { + throw new NotFiniteNumberException("Invalid value."); + } + } + + /// + /// Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown. + /// This is only run when the CHECKMATH symbol is defined. + /// + [Conditional("CHECKMATH")] + public static void Validate(this Matrix3x3 m) + { + m.Right.Validate(); + m.Up.Validate(); + m.Backward.Validate(); + } + + /// + /// Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown. + /// This is only run when the CHECKMATH symbol is defined. + /// + [Conditional("CHECKMATH")] + public static void Validate(this Matrix m) + { + m.Right.Validate(); + m.Up.Validate(); + m.Backward.Validate(); + m.Translation.Validate(); + if (IsInvalid(m.M14) || IsInvalid(m.M24) || IsInvalid(m.M34) || IsInvalid(m.M44)) + { + throw new NotFiniteNumberException("Invalid value."); + } + } + + /// + /// Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown. + /// This is only run when the CHECKMATH symbol is defined. + /// + [Conditional("CHECKMATH")] + public static void Validate(this Quaternion q) + { + if (IsInvalid(q.LengthSquared())) + { + throw new NotFiniteNumberException("Invalid value."); + } + } + + /// + /// Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown. + /// This is only run when the CHECKMATH symbol is defined. + /// + [Conditional("CHECKMATH")] + public static void Validate(this RigidTransform r) + { + r.Position.Validate(); + r.Orientation.Validate(); + } + + /// + /// Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown. + /// This is only run when the CHECKMATH symbol is defined. + /// + [Conditional("CHECKMATH")] + public static void Validate(this AffineTransform a) + { + a.LinearTransform.Validate(); + a.Translation.Validate(); + } + + /// + /// Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown. + /// This is only run when the CHECKMATH symbol is defined. + /// + [Conditional("CHECKMATH")] + public static void Validate(this BoundingBox b) + { + b.Min.Validate(); + b.Max.Validate(); + } + + /// + /// Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown. + /// This is only run when the CHECKMATH symbol is defined. + /// + [Conditional("CHECKMATH")] + public static void Validate(this BoundingSphere b) + { + b.Center.Validate(); + if (IsInvalid(b.Radius)) + throw new NotFiniteNumberException("Invalid value."); + } + + } +} diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/MathChecker.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/MathChecker.cs.meta new file mode 100644 index 00000000..f0e08e3e --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/MathChecker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6ec99cd11fd9afb469ad5d9f9c87076a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/MathHelper.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/MathHelper.cs new file mode 100644 index 00000000..ba84aab6 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/MathHelper.cs @@ -0,0 +1,110 @@ +using System; + +namespace BEPUutilities +{ + /// + /// Contains helper math methods. + /// + public static class MathHelper + { + /// + /// Approximate value of Pi. + /// + public const float Pi = 3.141592653589793239f; + + /// + /// Approximate value of Pi multiplied by two. + /// + public const float TwoPi = 6.283185307179586477f; + + /// + /// Approximate value of Pi divided by two. + /// + public const float PiOver2 = 1.570796326794896619f; + + /// + /// Approximate value of Pi divided by four. + /// + public const float PiOver4 = 0.785398163397448310f; + + /// + /// Reduces the angle into a range from -Pi to Pi. + /// + /// Angle to wrap. + /// Wrapped angle. + public static float WrapAngle(float angle) + { + angle = (float)System.Math.IEEERemainder(angle, TwoPi); + if (angle < -Pi) + { + angle += TwoPi; + return angle; + } + if (angle >= Pi) + { + angle -= TwoPi; + } + return angle; + + } + + /// + /// Clamps a value between a minimum and maximum value. + /// + /// Value to clamp. + /// Minimum value. If the value is less than this, the minimum is returned instead. + /// Maximum value. If the value is more than this, the maximum is returned instead. + /// Clamped value. + public static float Clamp(float value, float min, float max) + { + if (value < min) + return min; + else if (value > max) + return max; + return value; + } + + + /// + /// Returns the higher value of the two parameters. + /// + /// First value. + /// Second value. + /// Higher value of the two parameters. + public static float Max(float a, float b) + { + return a > b ? a : b; + } + + /// + /// Returns the lower value of the two parameters. + /// + /// First value. + /// Second value. + /// Lower value of the two parameters. + public static float Min(float a, float b) + { + return a < b ? a : b; + } + + /// + /// Converts degrees to radians. + /// + /// Degrees to convert. + /// Radians equivalent to the input degrees. + public static float ToRadians(float degrees) + { + return degrees * (Pi / 180f); + } + + /// + /// Converts radians to degrees. + /// + /// Radians to convert. + /// Degrees equivalent to the input radians. + public static float ToDegrees(float radians) + { + return radians * (180f / Pi); + } + } +} diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/MathHelper.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/MathHelper.cs.meta new file mode 100644 index 00000000..4e4776fc --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/MathHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b2b3136e3202a254bb609d022ed19db8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix.cs new file mode 100644 index 00000000..8eee6ad7 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix.cs @@ -0,0 +1,1389 @@ +using System; + +namespace BEPUutilities +{ + /// + /// Provides XNA-like 4x4 matrix math. + /// + public struct Matrix + { + /// + /// Value at row 1, column 1 of the matrix. + /// + public float M11; + + /// + /// Value at row 1, column 2 of the matrix. + /// + public float M12; + + /// + /// Value at row 1, column 3 of the matrix. + /// + public float M13; + + /// + /// Value at row 1, column 4 of the matrix. + /// + public float M14; + + /// + /// Value at row 2, column 1 of the matrix. + /// + public float M21; + + /// + /// Value at row 2, column 2 of the matrix. + /// + public float M22; + + /// + /// Value at row 2, column 3 of the matrix. + /// + public float M23; + + /// + /// Value at row 2, column 4 of the matrix. + /// + public float M24; + + /// + /// Value at row 3, column 1 of the matrix. + /// + public float M31; + + /// + /// Value at row 3, column 2 of the matrix. + /// + public float M32; + + /// + /// Value at row 3, column 3 of the matrix. + /// + public float M33; + + /// + /// Value at row 3, column 4 of the matrix. + /// + public float M34; + + /// + /// Value at row 4, column 1 of the matrix. + /// + public float M41; + + /// + /// Value at row 4, column 2 of the matrix. + /// + public float M42; + + /// + /// Value at row 4, column 3 of the matrix. + /// + public float M43; + + /// + /// Value at row 4, column 4 of the matrix. + /// + public float M44; + + /// + /// Constructs a new 4 row, 4 column matrix. + /// + /// Value at row 1, column 1 of the matrix. + /// Value at row 1, column 2 of the matrix. + /// Value at row 1, column 3 of the matrix. + /// Value at row 1, column 4 of the matrix. + /// Value at row 2, column 1 of the matrix. + /// Value at row 2, column 2 of the matrix. + /// Value at row 2, column 3 of the matrix. + /// Value at row 2, column 4 of the matrix. + /// Value at row 3, column 1 of the matrix. + /// Value at row 3, column 2 of the matrix. + /// Value at row 3, column 3 of the matrix. + /// Value at row 3, column 4 of the matrix. + /// Value at row 4, column 1 of the matrix. + /// Value at row 4, column 2 of the matrix. + /// Value at row 4, column 3 of the matrix. + /// Value at row 4, column 4 of the matrix. + public Matrix(float m11, float m12, float m13, float m14, + float m21, float m22, float m23, float m24, + float m31, float m32, float m33, float m34, + float m41, float m42, float m43, float m44) + { + this.M11 = m11; + this.M12 = m12; + this.M13 = m13; + this.M14 = m14; + + this.M21 = m21; + this.M22 = m22; + this.M23 = m23; + this.M24 = m24; + + this.M31 = m31; + this.M32 = m32; + this.M33 = m33; + this.M34 = m34; + + this.M41 = m41; + this.M42 = m42; + this.M43 = m43; + this.M44 = m44; + } + + /// + /// Gets or sets the translation component of the transform. + /// + public Vector3 Translation + { + get + { + return new Vector3() + { + X = M41, + Y = M42, + Z = M43 + }; + } + set + { + M41 = value.X; + M42 = value.Y; + M43 = value.Z; + } + } + + /// + /// Gets or sets the backward vector of the matrix. + /// + public Vector3 Backward + { + get + { +#if !WINDOWS + Vector3 vector = new Vector3(); +#else + Vector3 vector; +#endif + vector.X = M31; + vector.Y = M32; + vector.Z = M33; + return vector; + } + set + { + M31 = value.X; + M32 = value.Y; + M33 = value.Z; + } + } + + /// + /// Gets or sets the down vector of the matrix. + /// + public Vector3 Down + { + get + { +#if !WINDOWS + Vector3 vector = new Vector3(); +#else + Vector3 vector; +#endif + vector.X = -M21; + vector.Y = -M22; + vector.Z = -M23; + return vector; + } + set + { + M21 = -value.X; + M22 = -value.Y; + M23 = -value.Z; + } + } + + /// + /// Gets or sets the forward vector of the matrix. + /// + public Vector3 Forward + { + get + { +#if !WINDOWS + Vector3 vector = new Vector3(); +#else + Vector3 vector; +#endif + vector.X = -M31; + vector.Y = -M32; + vector.Z = -M33; + return vector; + } + set + { + M31 = -value.X; + M32 = -value.Y; + M33 = -value.Z; + } + } + + /// + /// Gets or sets the left vector of the matrix. + /// + public Vector3 Left + { + get + { +#if !WINDOWS + Vector3 vector = new Vector3(); +#else + Vector3 vector; +#endif + vector.X = -M11; + vector.Y = -M12; + vector.Z = -M13; + return vector; + } + set + { + M11 = -value.X; + M12 = -value.Y; + M13 = -value.Z; + } + } + + /// + /// Gets or sets the right vector of the matrix. + /// + public Vector3 Right + { + get + { +#if !WINDOWS + Vector3 vector = new Vector3(); +#else + Vector3 vector; +#endif + vector.X = M11; + vector.Y = M12; + vector.Z = M13; + return vector; + } + set + { + M11 = value.X; + M12 = value.Y; + M13 = value.Z; + } + } + + /// + /// Gets or sets the up vector of the matrix. + /// + public Vector3 Up + { + get + { +#if !WINDOWS + Vector3 vector = new Vector3(); +#else + Vector3 vector; +#endif + vector.X = M21; + vector.Y = M22; + vector.Z = M23; + return vector; + } + set + { + M21 = value.X; + M22 = value.Y; + M23 = value.Z; + } + } + + + /// + /// Computes the determinant of the matrix. + /// + /// + public float Determinant() + { + //Compute the re-used 2x2 determinants. + float det1 = M33 * M44 - M34 * M43; + float det2 = M32 * M44 - M34 * M42; + float det3 = M32 * M43 - M33 * M42; + float det4 = M31 * M44 - M34 * M41; + float det5 = M31 * M43 - M33 * M41; + float det6 = M31 * M42 - M32 * M41; + return + (M11 * ((M22 * det1 - M23 * det2) + M24 * det3)) - + (M12 * ((M21 * det1 - M23 * det4) + M24 * det5)) + + (M13 * ((M21 * det2 - M22 * det4) + M24 * det6)) - + (M14 * ((M21 * det3 - M22 * det5) + M23 * det6)); + } + + /// + /// Transposes the matrix in-place. + /// + public void Transpose() + { + float intermediate = M12; + M12 = M21; + M21 = intermediate; + + intermediate = M13; + M13 = M31; + M31 = intermediate; + + intermediate = M14; + M14 = M41; + M41 = intermediate; + + intermediate = M23; + M23 = M32; + M32 = intermediate; + + intermediate = M24; + M24 = M42; + M42 = intermediate; + + intermediate = M34; + M34 = M43; + M43 = intermediate; + } + + /// + /// Creates a matrix representing the given axis and angle rotation. + /// + /// Axis around which to rotate. + /// Angle to rotate around the axis. + /// Matrix created from the axis and angle. + public static Matrix CreateFromAxisAngle(Vector3 axis, float angle) + { + Matrix toReturn; + CreateFromAxisAngle(ref axis, angle, out toReturn); + return toReturn; + } + + /// + /// Creates a matrix representing the given axis and angle rotation. + /// + /// Axis around which to rotate. + /// Angle to rotate around the axis. + /// Matrix created from the axis and angle. + public static void CreateFromAxisAngle(ref Vector3 axis, float angle, out Matrix result) + { + float xx = axis.X * axis.X; + float yy = axis.Y * axis.Y; + float zz = axis.Z * axis.Z; + float xy = axis.X * axis.Y; + float xz = axis.X * axis.Z; + float yz = axis.Y * axis.Z; + + float sinAngle = (float)Math.Sin(angle); + float oneMinusCosAngle = 1 - (float)Math.Cos(angle); + + result.M11 = 1 + oneMinusCosAngle * (xx - 1); + result.M21 = -axis.Z * sinAngle + oneMinusCosAngle * xy; + result.M31 = axis.Y * sinAngle + oneMinusCosAngle * xz; + result.M41 = 0; + + result.M12 = axis.Z * sinAngle + oneMinusCosAngle * xy; + result.M22 = 1 + oneMinusCosAngle * (yy - 1); + result.M32 = -axis.X * sinAngle + oneMinusCosAngle * yz; + result.M42 = 0; + + result.M13 = -axis.Y * sinAngle + oneMinusCosAngle * xz; + result.M23 = axis.X * sinAngle + oneMinusCosAngle * yz; + result.M33 = 1 + oneMinusCosAngle * (zz - 1); + result.M43 = 0; + + result.M14 = 0; + result.M24 = 0; + result.M34 = 0; + result.M44 = 1; + } + + /// + /// Creates a rotation matrix from a quaternion. + /// + /// Quaternion to convert. + /// Rotation matrix created from the quaternion. + public static void CreateFromQuaternion(ref Quaternion quaternion, out Matrix result) + { + float qX2 = quaternion.X + quaternion.X; + float qY2 = quaternion.Y + quaternion.Y; + float qZ2 = quaternion.Z + quaternion.Z; + float XX = qX2 * quaternion.X; + float YY = qY2 * quaternion.Y; + float ZZ = qZ2 * quaternion.Z; + float XY = qX2 * quaternion.Y; + float XZ = qX2 * quaternion.Z; + float XW = qX2 * quaternion.W; + float YZ = qY2 * quaternion.Z; + float YW = qY2 * quaternion.W; + float ZW = qZ2 * quaternion.W; + + result.M11 = 1 - YY - ZZ; + result.M21 = XY - ZW; + result.M31 = XZ + YW; + result.M41 = 0; + + result.M12 = XY + ZW; + result.M22 = 1 - XX - ZZ; + result.M32 = YZ - XW; + result.M42 = 0; + + result.M13 = XZ - YW; + result.M23 = YZ + XW; + result.M33 = 1 - XX - YY; + result.M43 = 0; + + result.M14 = 0; + result.M24 = 0; + result.M34 = 0; + result.M44 = 1; + } + + /// + /// Creates a rotation matrix from a quaternion. + /// + /// Quaternion to convert. + /// Rotation matrix created from the quaternion. + public static Matrix CreateFromQuaternion(Quaternion quaternion) + { + Matrix toReturn; + CreateFromQuaternion(ref quaternion, out toReturn); + return toReturn; + } + + /// + /// Multiplies two matrices together. + /// + /// First matrix to multiply. + /// Second matrix to multiply. + /// Combined transformation. + public static void Multiply(ref Matrix a, ref Matrix b, out Matrix result) + { + float resultM11 = a.M11 * b.M11 + a.M12 * b.M21 + a.M13 * b.M31 + a.M14 * b.M41; + float resultM12 = a.M11 * b.M12 + a.M12 * b.M22 + a.M13 * b.M32 + a.M14 * b.M42; + float resultM13 = a.M11 * b.M13 + a.M12 * b.M23 + a.M13 * b.M33 + a.M14 * b.M43; + float resultM14 = a.M11 * b.M14 + a.M12 * b.M24 + a.M13 * b.M34 + a.M14 * b.M44; + + float resultM21 = a.M21 * b.M11 + a.M22 * b.M21 + a.M23 * b.M31 + a.M24 * b.M41; + float resultM22 = a.M21 * b.M12 + a.M22 * b.M22 + a.M23 * b.M32 + a.M24 * b.M42; + float resultM23 = a.M21 * b.M13 + a.M22 * b.M23 + a.M23 * b.M33 + a.M24 * b.M43; + float resultM24 = a.M21 * b.M14 + a.M22 * b.M24 + a.M23 * b.M34 + a.M24 * b.M44; + + float resultM31 = a.M31 * b.M11 + a.M32 * b.M21 + a.M33 * b.M31 + a.M34 * b.M41; + float resultM32 = a.M31 * b.M12 + a.M32 * b.M22 + a.M33 * b.M32 + a.M34 * b.M42; + float resultM33 = a.M31 * b.M13 + a.M32 * b.M23 + a.M33 * b.M33 + a.M34 * b.M43; + float resultM34 = a.M31 * b.M14 + a.M32 * b.M24 + a.M33 * b.M34 + a.M34 * b.M44; + + float resultM41 = a.M41 * b.M11 + a.M42 * b.M21 + a.M43 * b.M31 + a.M44 * b.M41; + float resultM42 = a.M41 * b.M12 + a.M42 * b.M22 + a.M43 * b.M32 + a.M44 * b.M42; + float resultM43 = a.M41 * b.M13 + a.M42 * b.M23 + a.M43 * b.M33 + a.M44 * b.M43; + float resultM44 = a.M41 * b.M14 + a.M42 * b.M24 + a.M43 * b.M34 + a.M44 * b.M44; + + result.M11 = resultM11; + result.M12 = resultM12; + result.M13 = resultM13; + result.M14 = resultM14; + + result.M21 = resultM21; + result.M22 = resultM22; + result.M23 = resultM23; + result.M24 = resultM24; + + result.M31 = resultM31; + result.M32 = resultM32; + result.M33 = resultM33; + result.M34 = resultM34; + + result.M41 = resultM41; + result.M42 = resultM42; + result.M43 = resultM43; + result.M44 = resultM44; + } + + + /// + /// Multiplies two matrices together. + /// + /// First matrix to multiply. + /// Second matrix to multiply. + /// Combined transformation. + public static Matrix Multiply(Matrix a, Matrix b) + { + Matrix result; + Multiply(ref a, ref b, out result); + return result; + } + + + /// + /// Scales all components of the matrix. + /// + /// Matrix to scale. + /// Amount to scale. + /// Scaled matrix. + public static void Multiply(ref Matrix matrix, float scale, out Matrix result) + { + result.M11 = matrix.M11 * scale; + result.M12 = matrix.M12 * scale; + result.M13 = matrix.M13 * scale; + result.M14 = matrix.M14 * scale; + + result.M21 = matrix.M21 * scale; + result.M22 = matrix.M22 * scale; + result.M23 = matrix.M23 * scale; + result.M24 = matrix.M24 * scale; + + result.M31 = matrix.M31 * scale; + result.M32 = matrix.M32 * scale; + result.M33 = matrix.M33 * scale; + result.M34 = matrix.M34 * scale; + + result.M41 = matrix.M41 * scale; + result.M42 = matrix.M42 * scale; + result.M43 = matrix.M43 * scale; + result.M44 = matrix.M44 * scale; + } + + /// + /// Multiplies two matrices together. + /// + /// First matrix to multiply. + /// Second matrix to multiply. + /// Combined transformation. + public static Matrix operator *(Matrix a, Matrix b) + { + Matrix toReturn; + Multiply(ref a, ref b, out toReturn); + return toReturn; + } + + /// + /// Scales all components of the matrix by the given value. + /// + /// First matrix to multiply. + /// Scaling value to apply to all components of the matrix. + /// Product of the multiplication. + public static Matrix operator *(Matrix m, float f) + { + Matrix result; + Multiply(ref m, f, out result); + return result; + } + + /// + /// Scales all components of the matrix by the given value. + /// + /// First matrix to multiply. + /// Scaling value to apply to all components of the matrix. + /// Product of the multiplication. + public static Matrix operator *(float f, Matrix m) + { + Matrix result; + Multiply(ref m, f, out result); + return result; + } + + /// + /// Transforms a vector using a matrix. + /// + /// Vector to transform. + /// Transform to apply to the vector. + /// Transformed vector. + public static void Transform(ref Vector4 v, ref Matrix matrix, out Vector4 result) + { + float vX = v.X; + float vY = v.Y; + float vZ = v.Z; + float vW = v.W; + result.X = vX * matrix.M11 + vY * matrix.M21 + vZ * matrix.M31 + vW * matrix.M41; + result.Y = vX * matrix.M12 + vY * matrix.M22 + vZ * matrix.M32 + vW * matrix.M42; + result.Z = vX * matrix.M13 + vY * matrix.M23 + vZ * matrix.M33 + vW * matrix.M43; + result.W = vX * matrix.M14 + vY * matrix.M24 + vZ * matrix.M34 + vW * matrix.M44; + } + + /// + /// Transforms a vector using a matrix. + /// + /// Vector to transform. + /// Transform to apply to the vector. + /// Transformed vector. + public static Vector4 Transform(Vector4 v, Matrix matrix) + { + Vector4 toReturn; + Transform(ref v, ref matrix, out toReturn); + return toReturn; + } + + /// + /// Transforms a vector using the transpose of a matrix. + /// + /// Vector to transform. + /// Transform to tranpose and apply to the vector. + /// Transformed vector. + public static void TransformTranspose(ref Vector4 v, ref Matrix matrix, out Vector4 result) + { + float vX = v.X; + float vY = v.Y; + float vZ = v.Z; + float vW = v.W; + result.X = vX * matrix.M11 + vY * matrix.M12 + vZ * matrix.M13 + vW * matrix.M14; + result.Y = vX * matrix.M21 + vY * matrix.M22 + vZ * matrix.M23 + vW * matrix.M24; + result.Z = vX * matrix.M31 + vY * matrix.M32 + vZ * matrix.M33 + vW * matrix.M34; + result.W = vX * matrix.M41 + vY * matrix.M42 + vZ * matrix.M43 + vW * matrix.M44; + } + + /// + /// Transforms a vector using the transpose of a matrix. + /// + /// Vector to transform. + /// Transform to tranpose and apply to the vector. + /// Transformed vector. + public static Vector4 TransformTranspose(Vector4 v, Matrix matrix) + { + Vector4 toReturn; + TransformTranspose(ref v, ref matrix, out toReturn); + return toReturn; + } + + /// + /// Transforms a vector using a matrix. + /// + /// Vector to transform. + /// Transform to apply to the vector. + /// Transformed vector. + public static void Transform(ref Vector3 v, ref Matrix matrix, out Vector4 result) + { + result.X = v.X * matrix.M11 + v.Y * matrix.M21 + v.Z * matrix.M31 + matrix.M41; + result.Y = v.X * matrix.M12 + v.Y * matrix.M22 + v.Z * matrix.M32 + matrix.M42; + result.Z = v.X * matrix.M13 + v.Y * matrix.M23 + v.Z * matrix.M33 + matrix.M43; + result.W = v.X * matrix.M14 + v.Y * matrix.M24 + v.Z * matrix.M34 + matrix.M44; + } + + /// + /// Transforms a vector using a matrix. + /// + /// Vector to transform. + /// Transform to apply to the vector. + /// Transformed vector. + public static Vector4 Transform(Vector3 v, Matrix matrix) + { + Vector4 toReturn; + Transform(ref v, ref matrix, out toReturn); + return toReturn; + } + + /// + /// Transforms a vector using the transpose of a matrix. + /// + /// Vector to transform. + /// Transform to tranpose and apply to the vector. + /// Transformed vector. + public static void TransformTranspose(ref Vector3 v, ref Matrix matrix, out Vector4 result) + { + result.X = v.X * matrix.M11 + v.Y * matrix.M12 + v.Z * matrix.M13 + matrix.M14; + result.Y = v.X * matrix.M21 + v.Y * matrix.M22 + v.Z * matrix.M23 + matrix.M24; + result.Z = v.X * matrix.M31 + v.Y * matrix.M32 + v.Z * matrix.M33 + matrix.M34; + result.W = v.X * matrix.M41 + v.Y * matrix.M42 + v.Z * matrix.M43 + matrix.M44; + } + + /// + /// Transforms a vector using the transpose of a matrix. + /// + /// Vector to transform. + /// Transform to tranpose and apply to the vector. + /// Transformed vector. + public static Vector4 TransformTranspose(Vector3 v, Matrix matrix) + { + Vector4 toReturn; + TransformTranspose(ref v, ref matrix, out toReturn); + return toReturn; + } + + /// + /// Transforms a vector using a matrix. + /// + /// Vector to transform. + /// Transform to apply to the vector. + /// Transformed vector. + public static void Transform(ref Vector3 v, ref Matrix matrix, out Vector3 result) + { + float vX = v.X; + float vY = v.Y; + float vZ = v.Z; + result.X = vX * matrix.M11 + vY * matrix.M21 + vZ * matrix.M31 + matrix.M41; + result.Y = vX * matrix.M12 + vY * matrix.M22 + vZ * matrix.M32 + matrix.M42; + result.Z = vX * matrix.M13 + vY * matrix.M23 + vZ * matrix.M33 + matrix.M43; + } + + /// + /// Transforms a vector using the transpose of a matrix. + /// + /// Vector to transform. + /// Transform to tranpose and apply to the vector. + /// Transformed vector. + public static void TransformTranspose(ref Vector3 v, ref Matrix matrix, out Vector3 result) + { + float vX = v.X; + float vY = v.Y; + float vZ = v.Z; + result.X = vX * matrix.M11 + vY * matrix.M12 + vZ * matrix.M13 + matrix.M14; + result.Y = vX * matrix.M21 + vY * matrix.M22 + vZ * matrix.M23 + matrix.M24; + result.Z = vX * matrix.M31 + vY * matrix.M32 + vZ * matrix.M33 + matrix.M34; + } + + /// + /// Transforms a vector using a matrix. + /// + /// Vector to transform. + /// Transform to apply to the vector. + /// Transformed vector. + public static void TransformNormal(ref Vector3 v, ref Matrix matrix, out Vector3 result) + { + float vX = v.X; + float vY = v.Y; + float vZ = v.Z; + result.X = vX * matrix.M11 + vY * matrix.M21 + vZ * matrix.M31; + result.Y = vX * matrix.M12 + vY * matrix.M22 + vZ * matrix.M32; + result.Z = vX * matrix.M13 + vY * matrix.M23 + vZ * matrix.M33; + } + + /// + /// Transforms a vector using a matrix. + /// + /// Vector to transform. + /// Transform to apply to the vector. + /// Transformed vector. + public static Vector3 TransformNormal(Vector3 v, Matrix matrix) + { + Vector3 toReturn; + TransformNormal(ref v, ref matrix, out toReturn); + return toReturn; + } + + /// + /// Transforms a vector using the transpose of a matrix. + /// + /// Vector to transform. + /// Transform to tranpose and apply to the vector. + /// Transformed vector. + public static void TransformNormalTranspose(ref Vector3 v, ref Matrix matrix, out Vector3 result) + { + float vX = v.X; + float vY = v.Y; + float vZ = v.Z; + result.X = vX * matrix.M11 + vY * matrix.M12 + vZ * matrix.M13; + result.Y = vX * matrix.M21 + vY * matrix.M22 + vZ * matrix.M23; + result.Z = vX * matrix.M31 + vY * matrix.M32 + vZ * matrix.M33; + } + + /// + /// Transforms a vector using the transpose of a matrix. + /// + /// Vector to transform. + /// Transform to tranpose and apply to the vector. + /// Transformed vector. + public static Vector3 TransformNormalTranspose(Vector3 v, Matrix matrix) + { + Vector3 toReturn; + TransformNormalTranspose(ref v, ref matrix, out toReturn); + return toReturn; + } + + + /// + /// Transposes the matrix. + /// + /// Matrix to transpose. + /// Matrix to transpose. + public static void Transpose(ref Matrix m, out Matrix transposed) + { + float intermediate = m.M12; + transposed.M12 = m.M21; + transposed.M21 = intermediate; + + intermediate = m.M13; + transposed.M13 = m.M31; + transposed.M31 = intermediate; + + intermediate = m.M14; + transposed.M14 = m.M41; + transposed.M41 = intermediate; + + intermediate = m.M23; + transposed.M23 = m.M32; + transposed.M32 = intermediate; + + intermediate = m.M24; + transposed.M24 = m.M42; + transposed.M42 = intermediate; + + intermediate = m.M34; + transposed.M34 = m.M43; + transposed.M43 = intermediate; + + transposed.M11 = m.M11; + transposed.M22 = m.M22; + transposed.M33 = m.M33; + transposed.M44 = m.M44; + } + + /// + /// Inverts the matrix. + /// + /// Matrix to invert. + /// Inverted version of the matrix. + public static void Invert(ref Matrix m, out Matrix inverted) + { + float s0 = m.M11 * m.M22 - m.M21 * m.M12; + float s1 = m.M11 * m.M23 - m.M21 * m.M13; + float s2 = m.M11 * m.M24 - m.M21 * m.M14; + float s3 = m.M12 * m.M23 - m.M22 * m.M13; + float s4 = m.M12 * m.M24 - m.M22 * m.M14; + float s5 = m.M13 * m.M24 - m.M23 * m.M14; + + float c5 = m.M33 * m.M44 - m.M43 * m.M34; + float c4 = m.M32 * m.M44 - m.M42 * m.M34; + float c3 = m.M32 * m.M43 - m.M42 * m.M33; + float c2 = m.M31 * m.M44 - m.M41 * m.M34; + float c1 = m.M31 * m.M43 - m.M41 * m.M33; + float c0 = m.M31 * m.M42 - m.M41 * m.M32; + + float inverseDeterminant = 1.0f / (s0 * c5 - s1 * c4 + s2 * c3 + s3 * c2 - s4 * c1 + s5 * c0); + + float m11 = m.M11; + float m12 = m.M12; + float m13 = m.M13; + float m14 = m.M14; + float m21 = m.M21; + float m22 = m.M22; + float m23 = m.M23; + float m31 = m.M31; + float m32 = m.M32; + float m33 = m.M33; + + float m41 = m.M41; + float m42 = m.M42; + + inverted.M11 = (m.M22 * c5 - m.M23 * c4 + m.M24 * c3) * inverseDeterminant; + inverted.M12 = (-m.M12 * c5 + m.M13 * c4 - m.M14 * c3) * inverseDeterminant; + inverted.M13 = (m.M42 * s5 - m.M43 * s4 + m.M44 * s3) * inverseDeterminant; + inverted.M14 = (-m.M32 * s5 + m.M33 * s4 - m.M34 * s3) * inverseDeterminant; + + inverted.M21 = (-m.M21 * c5 + m.M23 * c2 - m.M24 * c1) * inverseDeterminant; + inverted.M22 = (m11 * c5 - m13 * c2 + m14 * c1) * inverseDeterminant; + inverted.M23 = (-m.M41 * s5 + m.M43 * s2 - m.M44 * s1) * inverseDeterminant; + inverted.M24 = (m.M31 * s5 - m.M33 * s2 + m.M34 * s1) * inverseDeterminant; + + inverted.M31 = (m21 * c4 - m22 * c2 + m.M24 * c0) * inverseDeterminant; + inverted.M32 = (-m11 * c4 + m12 * c2 - m14 * c0) * inverseDeterminant; + inverted.M33 = (m.M41 * s4 - m.M42 * s2 + m.M44 * s0) * inverseDeterminant; + inverted.M34 = (-m31 * s4 + m32 * s2 - m.M34 * s0) * inverseDeterminant; + + inverted.M41 = (-m21 * c3 + m22 * c1 - m23 * c0) * inverseDeterminant; + inverted.M42 = (m11 * c3 - m12 * c1 + m13 * c0) * inverseDeterminant; + inverted.M43 = (-m41 * s3 + m42 * s1 - m.M43 * s0) * inverseDeterminant; + inverted.M44 = (m31 * s3 - m32 * s1 + m33 * s0) * inverseDeterminant; + } + + /// + /// Inverts the matrix. + /// + /// Matrix to invert. + /// Inverted version of the matrix. + public static Matrix Invert(Matrix m) + { + Matrix inverted; + Invert(ref m, out inverted); + return inverted; + } + + /// + /// Inverts the matrix using a process that only works for affine transforms (3x3 linear transform and translation). + /// Ignores the M14, M24, M34, and M44 elements of the input matrix. + /// + /// Matrix to invert. + /// Inverted version of the matrix. + public static void InvertAffine(ref Matrix m, out Matrix inverted) + { + //Invert the upper left 3x3 linear transform. + + //Compute the upper left 3x3 determinant. Some potential for microoptimization here. + float determinantInverse = 1 / + (m.M11 * m.M22 * m.M33 + m.M12 * m.M23 * m.M31 + m.M13 * m.M21 * m.M32 - + m.M31 * m.M22 * m.M13 - m.M32 * m.M23 * m.M11 - m.M33 * m.M21 * m.M12); + + float m11 = (m.M22 * m.M33 - m.M23 * m.M32) * determinantInverse; + float m12 = (m.M13 * m.M32 - m.M33 * m.M12) * determinantInverse; + float m13 = (m.M12 * m.M23 - m.M22 * m.M13) * determinantInverse; + + float m21 = (m.M23 * m.M31 - m.M21 * m.M33) * determinantInverse; + float m22 = (m.M11 * m.M33 - m.M13 * m.M31) * determinantInverse; + float m23 = (m.M13 * m.M21 - m.M11 * m.M23) * determinantInverse; + + float m31 = (m.M21 * m.M32 - m.M22 * m.M31) * determinantInverse; + float m32 = (m.M12 * m.M31 - m.M11 * m.M32) * determinantInverse; + float m33 = (m.M11 * m.M22 - m.M12 * m.M21) * determinantInverse; + + inverted.M11 = m11; + inverted.M12 = m12; + inverted.M13 = m13; + + inverted.M21 = m21; + inverted.M22 = m22; + inverted.M23 = m23; + + inverted.M31 = m31; + inverted.M32 = m32; + inverted.M33 = m33; + + //Translation component + var vX = m.M41; + var vY = m.M42; + var vZ = m.M43; + inverted.M41 = -(vX * inverted.M11 + vY * inverted.M21 + vZ * inverted.M31); + inverted.M42 = -(vX * inverted.M12 + vY * inverted.M22 + vZ * inverted.M32); + inverted.M43 = -(vX * inverted.M13 + vY * inverted.M23 + vZ * inverted.M33); + + //Last chunk. + inverted.M14 = 0; + inverted.M24 = 0; + inverted.M34 = 0; + inverted.M44 = 1; + } + + /// + /// Inverts the matrix using a process that only works for affine transforms (3x3 linear transform and translation). + /// Ignores the M14, M24, M34, and M44 elements of the input matrix. + /// + /// Matrix to invert. + /// Inverted version of the matrix. + public static Matrix InvertAffine(Matrix m) + { + Matrix inverted; + InvertAffine(ref m, out inverted); + return inverted; + } + + /// + /// Inverts the matrix using a process that only works for rigid transforms. + /// + /// Matrix to invert. + /// Inverted version of the matrix. + public static void InvertRigid(ref Matrix m, out Matrix inverted) + { + //Invert (transpose) the upper left 3x3 rotation. + float intermediate = m.M12; + inverted.M12 = m.M21; + inverted.M21 = intermediate; + + intermediate = m.M13; + inverted.M13 = m.M31; + inverted.M31 = intermediate; + + intermediate = m.M23; + inverted.M23 = m.M32; + inverted.M32 = intermediate; + + inverted.M11 = m.M11; + inverted.M22 = m.M22; + inverted.M33 = m.M33; + + //Translation component + var vX = m.M41; + var vY = m.M42; + var vZ = m.M43; + inverted.M41 = -(vX * inverted.M11 + vY * inverted.M21 + vZ * inverted.M31); + inverted.M42 = -(vX * inverted.M12 + vY * inverted.M22 + vZ * inverted.M32); + inverted.M43 = -(vX * inverted.M13 + vY * inverted.M23 + vZ * inverted.M33); + + //Last chunk. + inverted.M14 = 0; + inverted.M24 = 0; + inverted.M34 = 0; + inverted.M44 = 1; + } + + /// + /// Inverts the matrix using a process that only works for rigid transforms. + /// + /// Matrix to invert. + /// Inverted version of the matrix. + public static Matrix InvertRigid(Matrix m) + { + Matrix inverse; + InvertRigid(ref m, out inverse); + return inverse; + } + + /// + /// Gets the 4x4 identity matrix. + /// + public static Matrix Identity + { + get + { + Matrix toReturn; + toReturn.M11 = 1; + toReturn.M12 = 0; + toReturn.M13 = 0; + toReturn.M14 = 0; + + toReturn.M21 = 0; + toReturn.M22 = 1; + toReturn.M23 = 0; + toReturn.M24 = 0; + + toReturn.M31 = 0; + toReturn.M32 = 0; + toReturn.M33 = 1; + toReturn.M34 = 0; + + toReturn.M41 = 0; + toReturn.M42 = 0; + toReturn.M43 = 0; + toReturn.M44 = 1; + return toReturn; + } + } + + /// + /// Creates a right handed orthographic projection. + /// + /// Leftmost coordinate of the projected area. + /// Rightmost coordinate of the projected area. + /// Bottom coordinate of the projected area. + /// Top coordinate of the projected area. + /// Near plane of the projection. + /// Far plane of the projection. + /// The resulting orthographic projection matrix. + public static void CreateOrthographicRH(float left, float right, float bottom, float top, float zNear, float zFar, out Matrix projection) + { + float width = right - left; + float height = top - bottom; + float depth = zFar - zNear; + projection.M11 = 2f / width; + projection.M12 = 0; + projection.M13 = 0; + projection.M14 = 0; + + projection.M21 = 0; + projection.M22 = 2f / height; + projection.M23 = 0; + projection.M24 = 0; + + projection.M31 = 0; + projection.M32 = 0; + projection.M33 = -1f / depth; + projection.M34 = 0; + + projection.M41 = (left + right) / -width; + projection.M42 = (top + bottom) / -height; + projection.M43 = zNear / -depth; + projection.M44 = 1f; + + } + + /// + /// Creates a right-handed perspective matrix. + /// + /// Field of view of the perspective in radians. + /// Width of the viewport over the height of the viewport. + /// Near clip plane of the perspective. + /// Far clip plane of the perspective. + /// Resulting perspective matrix. + public static void CreatePerspectiveFieldOfViewRH(float fieldOfView, float aspectRatio, float nearClip, float farClip, out Matrix perspective) + { + float h = 1f / ((float)Math.Tan(fieldOfView * 0.5f)); + float w = h / aspectRatio; + perspective.M11 = w; + perspective.M12 = 0; + perspective.M13 = 0; + perspective.M14 = 0; + + perspective.M21 = 0; + perspective.M22 = h; + perspective.M23 = 0; + perspective.M24 = 0; + + perspective.M31 = 0; + perspective.M32 = 0; + perspective.M33 = farClip / (nearClip - farClip); + perspective.M34 = -1; + + perspective.M41 = 0; + perspective.M42 = 0; + perspective.M44 = 0; + perspective.M43 = nearClip * perspective.M33; + + } + + /// + /// Creates a right-handed perspective matrix. + /// + /// Field of view of the perspective in radians. + /// Width of the viewport over the height of the viewport. + /// Near clip plane of the perspective. + /// Far clip plane of the perspective. + /// Resulting perspective matrix. + public static Matrix CreatePerspectiveFieldOfViewRH(float fieldOfView, float aspectRatio, float nearClip, float farClip) + { + Matrix perspective; + CreatePerspectiveFieldOfViewRH(fieldOfView, aspectRatio, nearClip, farClip, out perspective); + return perspective; + } + + /// + /// Creates a view matrix pointing from a position to a target with the given up vector. + /// + /// Position of the camera. + /// Target of the camera. + /// Up vector of the camera. + /// Look at matrix. + public static void CreateLookAtRH(ref Vector3 position, ref Vector3 target, ref Vector3 upVector, out Matrix viewMatrix) + { + Vector3 forward; + Vector3.Subtract(ref target, ref position, out forward); + CreateViewRH(ref position, ref forward, ref upVector, out viewMatrix); + } + + /// + /// Creates a view matrix pointing from a position to a target with the given up vector. + /// + /// Position of the camera. + /// Target of the camera. + /// Up vector of the camera. + /// Look at matrix. + public static Matrix CreateLookAtRH(Vector3 position, Vector3 target, Vector3 upVector) + { + Matrix lookAt; + Vector3 forward; + Vector3.Subtract(ref target, ref position, out forward); + CreateViewRH(ref position, ref forward, ref upVector, out lookAt); + return lookAt; + } + + + /// + /// Creates a view matrix pointing in a direction with a given up vector. + /// + /// Position of the camera. + /// Forward direction of the camera. + /// Up vector of the camera. + /// Look at matrix. + public static void CreateViewRH(ref Vector3 position, ref Vector3 forward, ref Vector3 upVector, out Matrix viewMatrix) + { + Vector3 z; + float length = forward.Length(); + Vector3.Divide(ref forward, -length, out z); + Vector3 x; + Vector3.Cross(ref upVector, ref z, out x); + x.Normalize(); + Vector3 y; + Vector3.Cross(ref z, ref x, out y); + + viewMatrix.M11 = x.X; + viewMatrix.M12 = y.X; + viewMatrix.M13 = z.X; + viewMatrix.M14 = 0f; + viewMatrix.M21 = x.Y; + viewMatrix.M22 = y.Y; + viewMatrix.M23 = z.Y; + viewMatrix.M24 = 0f; + viewMatrix.M31 = x.Z; + viewMatrix.M32 = y.Z; + viewMatrix.M33 = z.Z; + viewMatrix.M34 = 0f; + Vector3.Dot(ref x, ref position, out viewMatrix.M41); + Vector3.Dot(ref y, ref position, out viewMatrix.M42); + Vector3.Dot(ref z, ref position, out viewMatrix.M43); + viewMatrix.M41 = -viewMatrix.M41; + viewMatrix.M42 = -viewMatrix.M42; + viewMatrix.M43 = -viewMatrix.M43; + viewMatrix.M44 = 1f; + + } + + /// + /// Creates a view matrix pointing looking in a direction with a given up vector. + /// + /// Position of the camera. + /// Forward direction of the camera. + /// Up vector of the camera. + /// Look at matrix. + public static Matrix CreateViewRH(Vector3 position, Vector3 forward, Vector3 upVector) + { + Matrix lookat; + CreateViewRH(ref position, ref forward, ref upVector, out lookat); + return lookat; + } + + + + /// + /// Creates a world matrix pointing from a position to a target with the given up vector. + /// + /// Position of the transform. + /// Forward direction of the transformation. + /// Up vector which is crossed against the forward vector to compute the transform's basis. + /// World matrix. + public static void CreateWorldRH(ref Vector3 position, ref Vector3 forward, ref Vector3 upVector, out Matrix worldMatrix) + { + Vector3 z; + float length = forward.Length(); + Vector3.Divide(ref forward, -length, out z); + Vector3 x; + Vector3.Cross(ref upVector, ref z, out x); + x.Normalize(); + Vector3 y; + Vector3.Cross(ref z, ref x, out y); + + worldMatrix.M11 = x.X; + worldMatrix.M12 = x.Y; + worldMatrix.M13 = x.Z; + worldMatrix.M14 = 0f; + worldMatrix.M21 = y.X; + worldMatrix.M22 = y.Y; + worldMatrix.M23 = y.Z; + worldMatrix.M24 = 0f; + worldMatrix.M31 = z.X; + worldMatrix.M32 = z.Y; + worldMatrix.M33 = z.Z; + worldMatrix.M34 = 0f; + + worldMatrix.M41 = position.X; + worldMatrix.M42 = position.Y; + worldMatrix.M43 = position.Z; + worldMatrix.M44 = 1f; + + } + + + /// + /// Creates a world matrix pointing from a position to a target with the given up vector. + /// + /// Position of the transform. + /// Forward direction of the transformation. + /// Up vector which is crossed against the forward vector to compute the transform's basis. + /// World matrix. + public static Matrix CreateWorldRH(Vector3 position, Vector3 forward, Vector3 upVector) + { + Matrix lookat; + CreateWorldRH(ref position, ref forward, ref upVector, out lookat); + return lookat; + } + + + + /// + /// Creates a matrix representing a translation. + /// + /// Translation to be represented by the matrix. + /// Matrix representing the given translation. + public static void CreateTranslation(ref Vector3 translation, out Matrix translationMatrix) + { + translationMatrix = new Matrix + { + M11 = 1, + M22 = 1, + M33 = 1, + M44 = 1, + M41 = translation.X, + M42 = translation.Y, + M43 = translation.Z + }; + } + + /// + /// Creates a matrix representing a translation. + /// + /// Translation to be represented by the matrix. + /// Matrix representing the given translation. + public static Matrix CreateTranslation(Vector3 translation) + { + Matrix translationMatrix; + CreateTranslation(ref translation, out translationMatrix); + return translationMatrix; + } + + /// + /// Creates a matrix representing the given axis aligned scale. + /// + /// Scale to be represented by the matrix. + /// Matrix representing the given scale. + public static void CreateScale(ref Vector3 scale, out Matrix scaleMatrix) + { + scaleMatrix = new Matrix + { + M11 = scale.X, + M22 = scale.Y, + M33 = scale.Z, + M44 = 1 + }; + } + + /// + /// Creates a matrix representing the given axis aligned scale. + /// + /// Scale to be represented by the matrix. + /// Matrix representing the given scale. + public static Matrix CreateScale(Vector3 scale) + { + Matrix scaleMatrix; + CreateScale(ref scale, out scaleMatrix); + return scaleMatrix; + } + + /// + /// Creates a matrix representing the given axis aligned scale. + /// + /// Scale along the x axis. + /// Scale along the y axis. + /// Scale along the z axis. + /// Matrix representing the given scale. + public static void CreateScale(float x, float y, float z, out Matrix scaleMatrix) + { + scaleMatrix = new Matrix + { + M11 = x, + M22 = y, + M33 = z, + M44 = 1 + }; + } + + /// + /// Creates a matrix representing the given axis aligned scale. + /// + /// Scale along the x axis. + /// Scale along the y axis. + /// Scale along the z axis. + /// Matrix representing the given scale. + public static Matrix CreateScale(float x, float y, float z) + { + Matrix scaleMatrix; + CreateScale(x, y, z, out scaleMatrix); + return scaleMatrix; + } + + /// + /// Creates a string representation of the matrix. + /// + /// A string representation of the matrix. + public override string ToString() + { + return "{" + M11 + ", " + M12 + ", " + M13 + ", " + M14 + "} " + + "{" + M21 + ", " + M22 + ", " + M23 + ", " + M24 + "} " + + "{" + M31 + ", " + M32 + ", " + M33 + ", " + M34 + "} " + + "{" + M41 + ", " + M42 + ", " + M43 + ", " + M44 + "}"; + } + } +} diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix.cs.meta new file mode 100644 index 00000000..44bffbbe --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d8289bc14cf27ae4c9ba83c7235593e4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix2x2.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix2x2.cs new file mode 100644 index 00000000..5ecc60b5 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix2x2.cs @@ -0,0 +1,358 @@ + + + + +namespace BEPUutilities +{ + /// + /// 2 row, 2 column matrix. + /// + public struct Matrix2x2 + { + /// + /// Value at row 1, column 1 of the matrix. + /// + public float M11; + + /// + /// Value at row 1, column 2 of the matrix. + /// + public float M12; + + /// + /// Value at row 2, column 1 of the matrix. + /// + public float M21; + + /// + /// Value at row 2, column 2 of the matrix. + /// + public float M22; + + + /// + /// Constructs a new 2 row, 2 column matrix. + /// + /// Value at row 1, column 1 of the matrix. + /// Value at row 1, column 2 of the matrix. + /// Value at row 2, column 1 of the matrix. + /// Value at row 2, column 2 of the matrix. + public Matrix2x2(float m11, float m12, float m21, float m22) + { + M11 = m11; + M12 = m12; + M21 = m21; + M22 = m22; + } + + /// + /// Gets the 2x2 identity matrix. + /// + public static Matrix2x2 Identity + { + get { return new Matrix2x2(1, 0, 0, 1); } + } + + /// + /// Adds the two matrices together on a per-element basis. + /// + /// First matrix to add. + /// Second matrix to add. + /// Sum of the two matrices. + public static void Add(ref Matrix2x2 a, ref Matrix2x2 b, out Matrix2x2 result) + { + float m11 = a.M11 + b.M11; + float m12 = a.M12 + b.M12; + + float m21 = a.M21 + b.M21; + float m22 = a.M22 + b.M22; + + result.M11 = m11; + result.M12 = m12; + + result.M21 = m21; + result.M22 = m22; + } + + /// + /// Adds the two matrices together on a per-element basis. + /// + /// First matrix to add. + /// Second matrix to add. + /// Sum of the two matrices. + public static void Add(ref Matrix a, ref Matrix2x2 b, out Matrix2x2 result) + { + float m11 = a.M11 + b.M11; + float m12 = a.M12 + b.M12; + + float m21 = a.M21 + b.M21; + float m22 = a.M22 + b.M22; + + result.M11 = m11; + result.M12 = m12; + + result.M21 = m21; + result.M22 = m22; + } + + /// + /// Adds the two matrices together on a per-element basis. + /// + /// First matrix to add. + /// Second matrix to add. + /// Sum of the two matrices. + public static void Add(ref Matrix2x2 a, ref Matrix b, out Matrix2x2 result) + { + float m11 = a.M11 + b.M11; + float m12 = a.M12 + b.M12; + + float m21 = a.M21 + b.M21; + float m22 = a.M22 + b.M22; + + result.M11 = m11; + result.M12 = m12; + + result.M21 = m21; + result.M22 = m22; + } + + /// + /// Adds the two matrices together on a per-element basis. + /// + /// First matrix to add. + /// Second matrix to add. + /// Sum of the two matrices. + public static void Add(ref Matrix a, ref Matrix b, out Matrix2x2 result) + { + float m11 = a.M11 + b.M11; + float m12 = a.M12 + b.M12; + + float m21 = a.M21 + b.M21; + float m22 = a.M22 + b.M22; + + result.M11 = m11; + result.M12 = m12; + + result.M21 = m21; + result.M22 = m22; + } + + /// + /// Constructs a uniform scaling matrix. + /// + /// Value to use in the diagonal. + /// Scaling matrix. + public static void CreateScale(float scale, out Matrix2x2 matrix) + { + matrix.M11 = scale; + matrix.M22 = scale; + + matrix.M12 = 0; + matrix.M21 = 0; + } + + + /// + /// Inverts the given matix. + /// + /// Matrix to be inverted. + /// Inverted matrix. + public static void Invert(ref Matrix2x2 matrix, out Matrix2x2 result) + { + float determinantInverse = 1 / (matrix.M11 * matrix.M22 - matrix.M12 * matrix.M21); + float m11 = matrix.M22 * determinantInverse; + float m12 = -matrix.M12 * determinantInverse; + + float m21 = -matrix.M21 * determinantInverse; + float m22 = matrix.M11 * determinantInverse; + + result.M11 = m11; + result.M12 = m12; + + result.M21 = m21; + result.M22 = m22; + } + + /// + /// Multiplies the two matrices. + /// + /// First matrix to multiply. + /// Second matrix to multiply. + /// Product of the multiplication. + public static void Multiply(ref Matrix2x2 a, ref Matrix2x2 b, out Matrix2x2 result) + { + float resultM11 = a.M11 * b.M11 + a.M12 * b.M21; + float resultM12 = a.M11 * b.M12 + a.M12 * b.M22; + + float resultM21 = a.M21 * b.M11 + a.M22 * b.M21; + float resultM22 = a.M21 * b.M12 + a.M22 * b.M22; + + result.M11 = resultM11; + result.M12 = resultM12; + + result.M21 = resultM21; + result.M22 = resultM22; + } + + /// + /// Multiplies the two matrices. + /// + /// First matrix to multiply. + /// Second matrix to multiply. + /// Product of the multiplication. + public static void Multiply(ref Matrix2x2 a, ref Matrix b, out Matrix2x2 result) + { + float resultM11 = a.M11 * b.M11 + a.M12 * b.M21; + float resultM12 = a.M11 * b.M12 + a.M12 * b.M22; + + float resultM21 = a.M21 * b.M11 + a.M22 * b.M21; + float resultM22 = a.M21 * b.M12 + a.M22 * b.M22; + + result.M11 = resultM11; + result.M12 = resultM12; + + result.M21 = resultM21; + result.M22 = resultM22; + } + + /// + /// Multiplies the two matrices. + /// + /// First matrix to multiply. + /// Second matrix to multiply. + /// Product of the multiplication. + public static void Multiply(ref Matrix a, ref Matrix2x2 b, out Matrix2x2 result) + { + float resultM11 = a.M11 * b.M11 + a.M12 * b.M21; + float resultM12 = a.M11 * b.M12 + a.M12 * b.M22; + + float resultM21 = a.M21 * b.M11 + a.M22 * b.M21; + float resultM22 = a.M21 * b.M12 + a.M22 * b.M22; + + result.M11 = resultM11; + result.M12 = resultM12; + + result.M21 = resultM21; + result.M22 = resultM22; + } + + /// + /// Multiplies the two matrices. + /// + /// First matrix to multiply. + /// Second matrix to multiply. + /// Product of the multiplication. + public static void Multiply(ref Matrix2x3 a, ref Matrix3x2 b, out Matrix2x2 result) + { + result.M11 = a.M11 * b.M11 + a.M12 * b.M21 + a.M13 * b.M31; + result.M12 = a.M11 * b.M12 + a.M12 * b.M22 + a.M13 * b.M32; + + result.M21 = a.M21 * b.M11 + a.M22 * b.M21 + a.M23 * b.M31; + result.M22 = a.M21 * b.M12 + a.M22 * b.M22 + a.M23 * b.M32; + } + + /// + /// Negates every element in the matrix. + /// + /// Matrix to negate. + /// Negated matrix. + public static void Negate(ref Matrix2x2 matrix, out Matrix2x2 result) + { + float m11 = -matrix.M11; + float m12 = -matrix.M12; + + float m21 = -matrix.M21; + float m22 = -matrix.M22; + + + result.M11 = m11; + result.M12 = m12; + + result.M21 = m21; + result.M22 = m22; + } + + /// + /// Subtracts the two matrices from each other on a per-element basis. + /// + /// First matrix to subtract. + /// Second matrix to subtract. + /// Difference of the two matrices. + public static void Subtract(ref Matrix2x2 a, ref Matrix2x2 b, out Matrix2x2 result) + { + float m11 = a.M11 - b.M11; + float m12 = a.M12 - b.M12; + + float m21 = a.M21 - b.M21; + float m22 = a.M22 - b.M22; + + result.M11 = m11; + result.M12 = m12; + + result.M21 = m21; + result.M22 = m22; + } + + /// + /// Transforms the vector by the matrix. + /// + /// Vector2 to transform. + /// Matrix to use as the transformation. + /// Product of the transformation. + public static void Transform(ref Vector2 v, ref Matrix2x2 matrix, out Vector2 result) + { + float vX = v.X; + float vY = v.Y; +#if !WINDOWS + result = new Vector2(); +#endif + result.X = vX * matrix.M11 + vY * matrix.M21; + result.Y = vX * matrix.M12 + vY * matrix.M22; + } + + /// + /// Computes the transposed matrix of a matrix. + /// + /// Matrix to transpose. + /// Transposed matrix. + public static void Transpose(ref Matrix2x2 matrix, out Matrix2x2 result) + { + float m21 = matrix.M12; + + result.M11 = matrix.M11; + result.M12 = matrix.M21; + + result.M21 = m21; + result.M22 = matrix.M22; + } + + /// + /// Transposes the matrix in-place. + /// + public void Transpose() + { + float m21 = M21; + M21 = M12; + M12 = m21; + } + + /// + /// Creates a string representation of the matrix. + /// + /// A string representation of the matrix. + public override string ToString() + { + return "{" + M11 + ", " + M12 + "} " + + "{" + M21 + ", " + M22 + "}"; + } + + /// + /// Calculates the determinant of the matrix. + /// + /// The matrix's determinant. + public float Determinant() + { + return M11 * M22 - M12 * M21; + } + } +} \ No newline at end of file diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix2x2.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix2x2.cs.meta new file mode 100644 index 00000000..45b1e959 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix2x2.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fe4fd4edece2e6b458e0fddead819823 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix2x3.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix2x3.cs new file mode 100644 index 00000000..e4f79177 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix2x3.cs @@ -0,0 +1,248 @@ + + + + +namespace BEPUutilities +{ + /// + /// 2 row, 3 column matrix. + /// + public struct Matrix2x3 + { + /// + /// Value at row 1, column 1 of the matrix. + /// + public float M11; + + /// + /// Value at row 1, column 2 of the matrix. + /// + public float M12; + + /// + /// Value at row 1, column 2 of the matrix. + /// + public float M13; + + /// + /// Value at row 2, column 1 of the matrix. + /// + public float M21; + + /// + /// Value at row 2, column 2 of the matrix. + /// + public float M22; + + /// + /// Value at row 2, column 3 of the matrix. + /// + public float M23; + + + /// + /// Constructs a new 2 row, 2 column matrix. + /// + /// Value at row 1, column 1 of the matrix. + /// Value at row 1, column 2 of the matrix. + /// Value at row 1, column 3 of the matrix. + /// Value at row 2, column 1 of the matrix. + /// Value at row 2, column 2 of the matrix. + /// Value at row 2, column 3 of the matrix. + public Matrix2x3(float m11, float m12, float m13, float m21, float m22, float m23) + { + M11 = m11; + M12 = m12; + M13 = m13; + M21 = m21; + M22 = m22; + M23 = m23; + } + + /// + /// Adds the two matrices together on a per-element basis. + /// + /// First matrix to add. + /// Second matrix to add. + /// Sum of the two matrices. + public static void Add(ref Matrix2x3 a, ref Matrix2x3 b, out Matrix2x3 result) + { + float m11 = a.M11 + b.M11; + float m12 = a.M12 + b.M12; + float m13 = a.M13 + b.M13; + + float m21 = a.M21 + b.M21; + float m22 = a.M22 + b.M22; + float m23 = a.M23 + b.M23; + + result.M11 = m11; + result.M12 = m12; + result.M13 = m13; + + result.M21 = m21; + result.M22 = m22; + result.M23 = m23; + } + + + /// + /// Multiplies the two matrices. + /// + /// First matrix to multiply. + /// Second matrix to multiply. + /// Product of the multiplication. + public static void Multiply(ref Matrix2x3 a, ref Matrix3x3 b, out Matrix2x3 result) + { + float resultM11 = a.M11 * b.M11 + a.M12 * b.M21 + a.M13 * b.M31; + float resultM12 = a.M11 * b.M12 + a.M12 * b.M22 + a.M13 * b.M32; + float resultM13 = a.M11 * b.M13 + a.M12 * b.M23 + a.M13 * b.M33; + + float resultM21 = a.M21 * b.M11 + a.M22 * b.M21 + a.M23 * b.M31; + float resultM22 = a.M21 * b.M12 + a.M22 * b.M22 + a.M23 * b.M32; + float resultM23 = a.M21 * b.M13 + a.M22 * b.M23 + a.M23 * b.M33; + + result.M11 = resultM11; + result.M12 = resultM12; + result.M13 = resultM13; + + result.M21 = resultM21; + result.M22 = resultM22; + result.M23 = resultM23; + } + + /// + /// Multiplies the two matrices. + /// + /// First matrix to multiply. + /// Second matrix to multiply. + /// Product of the multiplication. + public static void Multiply(ref Matrix2x3 a, ref Matrix b, out Matrix2x3 result) + { + float resultM11 = a.M11 * b.M11 + a.M12 * b.M21 + a.M13 * b.M31; + float resultM12 = a.M11 * b.M12 + a.M12 * b.M22 + a.M13 * b.M32; + float resultM13 = a.M11 * b.M13 + a.M12 * b.M23 + a.M13 * b.M33; + + float resultM21 = a.M21 * b.M11 + a.M22 * b.M21 + a.M23 * b.M31; + float resultM22 = a.M21 * b.M12 + a.M22 * b.M22 + a.M23 * b.M32; + float resultM23 = a.M21 * b.M13 + a.M22 * b.M23 + a.M23 * b.M33; + + result.M11 = resultM11; + result.M12 = resultM12; + result.M13 = resultM13; + + result.M21 = resultM21; + result.M22 = resultM22; + result.M23 = resultM23; + } + + /// + /// Negates every element in the matrix. + /// + /// Matrix to negate. + /// Negated matrix. + public static void Negate(ref Matrix2x3 matrix, out Matrix2x3 result) + { + float m11 = -matrix.M11; + float m12 = -matrix.M12; + float m13 = -matrix.M13; + + float m21 = -matrix.M21; + float m22 = -matrix.M22; + float m23 = -matrix.M23; + + result.M11 = m11; + result.M12 = m12; + result.M13 = m13; + + result.M21 = m21; + result.M22 = m22; + result.M23 = m23; + } + + /// + /// Subtracts the two matrices from each other on a per-element basis. + /// + /// First matrix to subtract. + /// Second matrix to subtract. + /// Difference of the two matrices. + public static void Subtract(ref Matrix2x3 a, ref Matrix2x3 b, out Matrix2x3 result) + { + float m11 = a.M11 - b.M11; + float m12 = a.M12 - b.M12; + float m13 = a.M13 - b.M13; + + float m21 = a.M21 - b.M21; + float m22 = a.M22 - b.M22; + float m23 = a.M23 - b.M23; + + result.M11 = m11; + result.M12 = m12; + result.M13 = m13; + + result.M21 = m21; + result.M22 = m22; + result.M23 = m23; + } + + + /// + /// Transforms the vector by the matrix. + /// + /// Vector2 to transform. Considered to be a row vector for purposes of multiplication. + /// Matrix to use as the transformation. + /// Row vector product of the transformation. + public static void Transform(ref Vector2 v, ref Matrix2x3 matrix, out Vector3 result) + { +#if !WINDOWS + result = new Vector3(); +#endif + result.X = v.X * matrix.M11 + v.Y * matrix.M21; + result.Y = v.X * matrix.M12 + v.Y * matrix.M22; + result.Z = v.X * matrix.M13 + v.Y * matrix.M23; + } + + /// + /// Transforms the vector by the matrix. + /// + /// Vector2 to transform. Considered to be a column vector for purposes of multiplication. + /// Matrix to use as the transformation. + /// Column vector product of the transformation. + public static void Transform(ref Vector3 v, ref Matrix2x3 matrix, out Vector2 result) + { +#if !WINDOWS + result = new Vector2(); +#endif + result.X = matrix.M11 * v.X + matrix.M12 * v.Y + matrix.M13 * v.Z; + result.Y = matrix.M21 * v.X + matrix.M22 * v.Y + matrix.M23 * v.Z; + } + + + /// + /// Computes the transposed matrix of a matrix. + /// + /// Matrix to transpose. + /// Transposed matrix. + public static void Transpose(ref Matrix2x3 matrix, out Matrix3x2 result) + { + result.M11 = matrix.M11; + result.M12 = matrix.M21; + + result.M21 = matrix.M12; + result.M22 = matrix.M22; + + result.M31 = matrix.M13; + result.M32 = matrix.M23; + } + + + /// + /// Creates a string representation of the matrix. + /// + /// A string representation of the matrix. + public override string ToString() + { + return "{" + M11 + ", " + M12 + ", " + M13 + "} " + + "{" + M21 + ", " + M22 + ", " + M23 + "}"; + } + } +} \ No newline at end of file diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix2x3.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix2x3.cs.meta new file mode 100644 index 00000000..4409330d --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix2x3.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b3f46c547ed992c498524cd6566324fe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix3x2.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix3x2.cs new file mode 100644 index 00000000..503958e9 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix3x2.cs @@ -0,0 +1,256 @@ + + + +namespace BEPUutilities +{ + /// + /// 3 row, 2 column matrix. + /// + public struct Matrix3x2 + { + /// + /// Value at row 1, column 1 of the matrix. + /// + public float M11; + + /// + /// Value at row 1, column 2 of the matrix. + /// + public float M12; + + /// + /// Value at row 2, column 1 of the matrix. + /// + public float M21; + + /// + /// Value at row 2, column 2 of the matrix. + /// + public float M22; + + /// + /// Value at row 3, column 1 of the matrix. + /// + public float M31; + + /// + /// Value at row 3, column 2 of the matrix. + /// + public float M32; + + + /// + /// Constructs a new 3 row, 2 column matrix. + /// + /// Value at row 1, column 1 of the matrix. + /// Value at row 1, column 2 of the matrix. + /// Value at row 2, column 1 of the matrix. + /// Value at row 2, column 2 of the matrix. + /// Value at row 2, column 1 of the matrix. + /// Value at row 2, column 2 of the matrix. + public Matrix3x2(float m11, float m12, float m21, float m22, float m31, float m32) + { + M11 = m11; + M12 = m12; + M21 = m21; + M22 = m22; + M31 = m31; + M32 = m32; + } + + + /// + /// Adds the two matrices together on a per-element basis. + /// + /// First matrix to add. + /// Second matrix to add. + /// Sum of the two matrices. + public static void Add(ref Matrix3x2 a, ref Matrix3x2 b, out Matrix3x2 result) + { + float m11 = a.M11 + b.M11; + float m12 = a.M12 + b.M12; + + float m21 = a.M21 + b.M21; + float m22 = a.M22 + b.M22; + + float m31 = a.M31 + b.M31; + float m32 = a.M32 + b.M32; + + result.M11 = m11; + result.M12 = m12; + + result.M21 = m21; + result.M22 = m22; + + result.M31 = m31; + result.M32 = m32; + } + + /// + /// Multiplies the two matrices. + /// + /// First matrix to multiply. + /// Second matrix to multiply. + /// Product of the multiplication. + public static void Multiply(ref Matrix3x3 a, ref Matrix3x2 b, out Matrix3x2 result) + { + float resultM11 = a.M11 * b.M11 + a.M12 * b.M21 + a.M13 * b.M31; + float resultM12 = a.M11 * b.M12 + a.M12 * b.M22 + a.M13 * b.M32; + + float resultM21 = a.M21 * b.M11 + a.M22 * b.M21 + a.M23 * b.M31; + float resultM22 = a.M21 * b.M12 + a.M22 * b.M22 + a.M23 * b.M32; + + float resultM31 = a.M31 * b.M11 + a.M32 * b.M21 + a.M33 * b.M31; + float resultM32 = a.M31 * b.M12 + a.M32 * b.M22 + a.M33 * b.M32; + + result.M11 = resultM11; + result.M12 = resultM12; + + result.M21 = resultM21; + result.M22 = resultM22; + + result.M31 = resultM31; + result.M32 = resultM32; + } + + /// + /// Multiplies the two matrices. + /// + /// First matrix to multiply. + /// Second matrix to multiply. + /// Product of the multiplication. + public static void Multiply(ref Matrix a, ref Matrix3x2 b, out Matrix3x2 result) + { + float resultM11 = a.M11 * b.M11 + a.M12 * b.M21 + a.M13 * b.M31; + float resultM12 = a.M11 * b.M12 + a.M12 * b.M22 + a.M13 * b.M32; + + float resultM21 = a.M21 * b.M11 + a.M22 * b.M21 + a.M23 * b.M31; + float resultM22 = a.M21 * b.M12 + a.M22 * b.M22 + a.M23 * b.M32; + + float resultM31 = a.M31 * b.M11 + a.M32 * b.M21 + a.M33 * b.M31; + float resultM32 = a.M31 * b.M12 + a.M32 * b.M22 + a.M33 * b.M32; + + result.M11 = resultM11; + result.M12 = resultM12; + + result.M21 = resultM21; + result.M22 = resultM22; + + result.M31 = resultM31; + result.M32 = resultM32; + } + + /// + /// Negates every element in the matrix. + /// + /// Matrix to negate. + /// Negated matrix. + public static void Negate(ref Matrix3x2 matrix, out Matrix3x2 result) + { + float m11 = -matrix.M11; + float m12 = -matrix.M12; + + float m21 = -matrix.M21; + float m22 = -matrix.M22; + + float m31 = -matrix.M31; + float m32 = -matrix.M32; + + result.M11 = m11; + result.M12 = m12; + + result.M21 = m21; + result.M22 = m22; + + result.M31 = m31; + result.M32 = m32; + } + + /// + /// Subtracts the two matrices from each other on a per-element basis. + /// + /// First matrix to subtract. + /// Second matrix to subtract. + /// Difference of the two matrices. + public static void Subtract(ref Matrix3x2 a, ref Matrix3x2 b, out Matrix3x2 result) + { + float m11 = a.M11 - b.M11; + float m12 = a.M12 - b.M12; + + float m21 = a.M21 - b.M21; + float m22 = a.M22 - b.M22; + + float m31 = a.M31 - b.M31; + float m32 = a.M32 - b.M32; + + result.M11 = m11; + result.M12 = m12; + + result.M21 = m21; + result.M22 = m22; + + result.M31 = m31; + result.M32 = m32; + } + + /// + /// Transforms the vector by the matrix. + /// + /// Vector2 to transform. Considered to be a column vector for purposes of multiplication. + /// Matrix to use as the transformation. + /// Column vector product of the transformation. + public static void Transform(ref Vector2 v, ref Matrix3x2 matrix, out Vector3 result) + { +#if !WINDOWS + result = new Vector3(); +#endif + result.X = matrix.M11 * v.X + matrix.M12 * v.Y; + result.Y = matrix.M21 * v.X + matrix.M22 * v.Y; + result.Z = matrix.M31 * v.X + matrix.M32 * v.Y; + } + + /// + /// Transforms the vector by the matrix. + /// + /// Vector2 to transform. Considered to be a row vector for purposes of multiplication. + /// Matrix to use as the transformation. + /// Row vector product of the transformation. + public static void Transform(ref Vector3 v, ref Matrix3x2 matrix, out Vector2 result) + { +#if !WINDOWS + result = new Vector2(); +#endif + result.X = v.X * matrix.M11 + v.Y * matrix.M21 + v.Z * matrix.M31; + result.Y = v.X * matrix.M12 + v.Y * matrix.M22 + v.Z * matrix.M32; + } + + + /// + /// Computes the transposed matrix of a matrix. + /// + /// Matrix to transpose. + /// Transposed matrix. + public static void Transpose(ref Matrix3x2 matrix, out Matrix2x3 result) + { + result.M11 = matrix.M11; + result.M12 = matrix.M21; + result.M13 = matrix.M31; + + result.M21 = matrix.M12; + result.M22 = matrix.M22; + result.M23 = matrix.M32; + } + + + /// + /// Creates a string representation of the matrix. + /// + /// A string representation of the matrix. + public override string ToString() + { + return "{" + M11 + ", " + M12 + "} " + + "{" + M21 + ", " + M22 + "} " + + "{" + M31 + ", " + M32 + "}"; + } + } +} \ No newline at end of file diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix3x2.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix3x2.cs.meta new file mode 100644 index 00000000..006cf53e --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix3x2.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eb7404c2f0c4b8f488db821f12bcb8d8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix3x3.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix3x3.cs new file mode 100644 index 00000000..f2b312f4 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix3x3.cs @@ -0,0 +1,1414 @@ +using System; + + + +namespace BEPUutilities +{ + /// + /// 3 row, 3 column matrix. + /// + public struct Matrix3x3 + { + /// + /// Value at row 1, column 1 of the matrix. + /// + public float M11; + + /// + /// Value at row 1, column 2 of the matrix. + /// + public float M12; + + /// + /// Value at row 1, column 3 of the matrix. + /// + public float M13; + + /// + /// Value at row 2, column 1 of the matrix. + /// + public float M21; + + /// + /// Value at row 2, column 2 of the matrix. + /// + public float M22; + + /// + /// Value at row 2, column 3 of the matrix. + /// + public float M23; + + /// + /// Value at row 3, column 1 of the matrix. + /// + public float M31; + + /// + /// Value at row 3, column 2 of the matrix. + /// + public float M32; + + /// + /// Value at row 3, column 3 of the matrix. + /// + public float M33; + + /// + /// Constructs a new 3 row, 3 column matrix. + /// + /// Value at row 1, column 1 of the matrix. + /// Value at row 1, column 2 of the matrix. + /// Value at row 1, column 3 of the matrix. + /// Value at row 2, column 1 of the matrix. + /// Value at row 2, column 2 of the matrix. + /// Value at row 2, column 3 of the matrix. + /// Value at row 3, column 1 of the matrix. + /// Value at row 3, column 2 of the matrix. + /// Value at row 3, column 3 of the matrix. + public Matrix3x3(float m11, float m12, float m13, float m21, float m22, float m23, float m31, float m32, float m33) + { + M11 = m11; + M12 = m12; + M13 = m13; + M21 = m21; + M22 = m22; + M23 = m23; + M31 = m31; + M32 = m32; + M33 = m33; + } + + /// + /// Gets the 3x3 identity matrix. + /// + public static Matrix3x3 Identity + { + get { return new Matrix3x3(1, 0, 0, 0, 1, 0, 0, 0, 1); } + } + + + /// + /// Gets or sets the backward vector of the matrix. + /// + public Vector3 Backward + { + get + { +#if !WINDOWS + Vector3 vector = new Vector3(); +#else + Vector3 vector; +#endif + vector.X = M31; + vector.Y = M32; + vector.Z = M33; + return vector; + } + set + { + M31 = value.X; + M32 = value.Y; + M33 = value.Z; + } + } + + /// + /// Gets or sets the down vector of the matrix. + /// + public Vector3 Down + { + get + { +#if !WINDOWS + Vector3 vector = new Vector3(); +#else + Vector3 vector; +#endif + vector.X = -M21; + vector.Y = -M22; + vector.Z = -M23; + return vector; + } + set + { + M21 = -value.X; + M22 = -value.Y; + M23 = -value.Z; + } + } + + /// + /// Gets or sets the forward vector of the matrix. + /// + public Vector3 Forward + { + get + { +#if !WINDOWS + Vector3 vector = new Vector3(); +#else + Vector3 vector; +#endif + vector.X = -M31; + vector.Y = -M32; + vector.Z = -M33; + return vector; + } + set + { + M31 = -value.X; + M32 = -value.Y; + M33 = -value.Z; + } + } + + /// + /// Gets or sets the left vector of the matrix. + /// + public Vector3 Left + { + get + { +#if !WINDOWS + Vector3 vector = new Vector3(); +#else + Vector3 vector; +#endif + vector.X = -M11; + vector.Y = -M12; + vector.Z = -M13; + return vector; + } + set + { + M11 = -value.X; + M12 = -value.Y; + M13 = -value.Z; + } + } + + /// + /// Gets or sets the right vector of the matrix. + /// + public Vector3 Right + { + get + { +#if !WINDOWS + Vector3 vector = new Vector3(); +#else + Vector3 vector; +#endif + vector.X = M11; + vector.Y = M12; + vector.Z = M13; + return vector; + } + set + { + M11 = value.X; + M12 = value.Y; + M13 = value.Z; + } + } + + /// + /// Gets or sets the up vector of the matrix. + /// + public Vector3 Up + { + get + { +#if !WINDOWS + Vector3 vector = new Vector3(); +#else + Vector3 vector; +#endif + vector.X = M21; + vector.Y = M22; + vector.Z = M23; + return vector; + } + set + { + M21 = value.X; + M22 = value.Y; + M23 = value.Z; + } + } + + /// + /// Adds the two matrices together on a per-element basis. + /// + /// First matrix to add. + /// Second matrix to add. + /// Sum of the two matrices. + public static void Add(ref Matrix3x3 a, ref Matrix3x3 b, out Matrix3x3 result) + { + float m11 = a.M11 + b.M11; + float m12 = a.M12 + b.M12; + float m13 = a.M13 + b.M13; + + float m21 = a.M21 + b.M21; + float m22 = a.M22 + b.M22; + float m23 = a.M23 + b.M23; + + float m31 = a.M31 + b.M31; + float m32 = a.M32 + b.M32; + float m33 = a.M33 + b.M33; + + result.M11 = m11; + result.M12 = m12; + result.M13 = m13; + + result.M21 = m21; + result.M22 = m22; + result.M23 = m23; + + result.M31 = m31; + result.M32 = m32; + result.M33 = m33; + } + + /// + /// Adds the two matrices together on a per-element basis. + /// + /// First matrix to add. + /// Second matrix to add. + /// Sum of the two matrices. + public static void Add(ref Matrix a, ref Matrix3x3 b, out Matrix3x3 result) + { + float m11 = a.M11 + b.M11; + float m12 = a.M12 + b.M12; + float m13 = a.M13 + b.M13; + + float m21 = a.M21 + b.M21; + float m22 = a.M22 + b.M22; + float m23 = a.M23 + b.M23; + + float m31 = a.M31 + b.M31; + float m32 = a.M32 + b.M32; + float m33 = a.M33 + b.M33; + + result.M11 = m11; + result.M12 = m12; + result.M13 = m13; + + result.M21 = m21; + result.M22 = m22; + result.M23 = m23; + + result.M31 = m31; + result.M32 = m32; + result.M33 = m33; + } + + /// + /// Adds the two matrices together on a per-element basis. + /// + /// First matrix to add. + /// Second matrix to add. + /// Sum of the two matrices. + public static void Add(ref Matrix3x3 a, ref Matrix b, out Matrix3x3 result) + { + float m11 = a.M11 + b.M11; + float m12 = a.M12 + b.M12; + float m13 = a.M13 + b.M13; + + float m21 = a.M21 + b.M21; + float m22 = a.M22 + b.M22; + float m23 = a.M23 + b.M23; + + float m31 = a.M31 + b.M31; + float m32 = a.M32 + b.M32; + float m33 = a.M33 + b.M33; + + result.M11 = m11; + result.M12 = m12; + result.M13 = m13; + + result.M21 = m21; + result.M22 = m22; + result.M23 = m23; + + result.M31 = m31; + result.M32 = m32; + result.M33 = m33; + } + + /// + /// Adds the two matrices together on a per-element basis. + /// + /// First matrix to add. + /// Second matrix to add. + /// Sum of the two matrices. + public static void Add(ref Matrix a, ref Matrix b, out Matrix3x3 result) + { + float m11 = a.M11 + b.M11; + float m12 = a.M12 + b.M12; + float m13 = a.M13 + b.M13; + + float m21 = a.M21 + b.M21; + float m22 = a.M22 + b.M22; + float m23 = a.M23 + b.M23; + + float m31 = a.M31 + b.M31; + float m32 = a.M32 + b.M32; + float m33 = a.M33 + b.M33; + + result.M11 = m11; + result.M12 = m12; + result.M13 = m13; + + result.M21 = m21; + result.M22 = m22; + result.M23 = m23; + + result.M31 = m31; + result.M32 = m32; + result.M33 = m33; + } + + /// + /// Creates a skew symmetric matrix M from vector A such that M * B for some other vector B is equivalent to the cross product of A and B. + /// + /// Vector to base the matrix on. + /// Skew-symmetric matrix result. + public static void CreateCrossProduct(ref Vector3 v, out Matrix3x3 result) + { + result.M11 = 0; + result.M12 = -v.Z; + result.M13 = v.Y; + result.M21 = v.Z; + result.M22 = 0; + result.M23 = -v.X; + result.M31 = -v.Y; + result.M32 = v.X; + result.M33 = 0; + } + + /// + /// Creates a 3x3 matrix from an XNA 4x4 matrix. + /// + /// Matrix to extract a 3x3 matrix from. + /// Upper 3x3 matrix extracted from the XNA matrix. + public static void CreateFromMatrix(ref Matrix matrix4X4, out Matrix3x3 matrix3X3) + { + matrix3X3.M11 = matrix4X4.M11; + matrix3X3.M12 = matrix4X4.M12; + matrix3X3.M13 = matrix4X4.M13; + + matrix3X3.M21 = matrix4X4.M21; + matrix3X3.M22 = matrix4X4.M22; + matrix3X3.M23 = matrix4X4.M23; + + matrix3X3.M31 = matrix4X4.M31; + matrix3X3.M32 = matrix4X4.M32; + matrix3X3.M33 = matrix4X4.M33; + } + /// + /// Creates a 3x3 matrix from an XNA 4x4 matrix. + /// + /// Matrix to extract a 3x3 matrix from. + /// Upper 3x3 matrix extracted from the XNA matrix. + public static Matrix3x3 CreateFromMatrix(Matrix matrix4X4) + { + Matrix3x3 matrix3X3; + matrix3X3.M11 = matrix4X4.M11; + matrix3X3.M12 = matrix4X4.M12; + matrix3X3.M13 = matrix4X4.M13; + + matrix3X3.M21 = matrix4X4.M21; + matrix3X3.M22 = matrix4X4.M22; + matrix3X3.M23 = matrix4X4.M23; + + matrix3X3.M31 = matrix4X4.M31; + matrix3X3.M32 = matrix4X4.M32; + matrix3X3.M33 = matrix4X4.M33; + return matrix3X3; + } + + /// + /// Constructs a uniform scaling matrix. + /// + /// Value to use in the diagonal. + /// Scaling matrix. + public static void CreateScale(float scale, out Matrix3x3 matrix) + { + matrix = new Matrix3x3 {M11 = scale, M22 = scale, M33 = scale}; + } + + /// + /// Constructs a uniform scaling matrix. + /// + /// Value to use in the diagonal. + /// Scaling matrix. + public static Matrix3x3 CreateScale(float scale) + { + var matrix = new Matrix3x3 {M11 = scale, M22 = scale, M33 = scale}; + return matrix; + } + + /// + /// Constructs a non-uniform scaling matrix. + /// + /// Values defining the axis scales. + /// Scaling matrix. + public static void CreateScale(ref Vector3 scale, out Matrix3x3 matrix) + { + matrix = new Matrix3x3 {M11 = scale.X, M22 = scale.Y, M33 = scale.Z}; + } + + /// + /// Constructs a non-uniform scaling matrix. + /// + /// Values defining the axis scales. + /// Scaling matrix. + public static Matrix3x3 CreateScale(ref Vector3 scale) + { + var matrix = new Matrix3x3 {M11 = scale.X, M22 = scale.Y, M33 = scale.Z}; + return matrix; + } + + + /// + /// Constructs a non-uniform scaling matrix. + /// + /// Scaling along the x axis. + /// Scaling along the y axis. + /// Scaling along the z axis. + /// Scaling matrix. + public static void CreateScale(float x, float y, float z, out Matrix3x3 matrix) + { + matrix = new Matrix3x3 {M11 = x, M22 = y, M33 = z}; + } + + /// + /// Constructs a non-uniform scaling matrix. + /// + /// Scaling along the x axis. + /// Scaling along the y axis. + /// Scaling along the z axis. + /// Scaling matrix. + public static Matrix3x3 CreateScale(float x, float y, float z) + { + var matrix = new Matrix3x3 {M11 = x, M22 = y, M33 = z}; + return matrix; + } + + /// + /// Inverts the given matix. + /// + /// Matrix to be inverted. + /// Inverted matrix. + public static void Invert(ref Matrix3x3 matrix, out Matrix3x3 result) + { + float determinantInverse = 1 / matrix.Determinant(); + float m11 = (matrix.M22 * matrix.M33 - matrix.M23 * matrix.M32) * determinantInverse; + float m12 = (matrix.M13 * matrix.M32 - matrix.M33 * matrix.M12) * determinantInverse; + float m13 = (matrix.M12 * matrix.M23 - matrix.M22 * matrix.M13) * determinantInverse; + + float m21 = (matrix.M23 * matrix.M31 - matrix.M21 * matrix.M33) * determinantInverse; + float m22 = (matrix.M11 * matrix.M33 - matrix.M13 * matrix.M31) * determinantInverse; + float m23 = (matrix.M13 * matrix.M21 - matrix.M11 * matrix.M23) * determinantInverse; + + float m31 = (matrix.M21 * matrix.M32 - matrix.M22 * matrix.M31) * determinantInverse; + float m32 = (matrix.M12 * matrix.M31 - matrix.M11 * matrix.M32) * determinantInverse; + float m33 = (matrix.M11 * matrix.M22 - matrix.M12 * matrix.M21) * determinantInverse; + + result.M11 = m11; + result.M12 = m12; + result.M13 = m13; + + result.M21 = m21; + result.M22 = m22; + result.M23 = m23; + + result.M31 = m31; + result.M32 = m32; + result.M33 = m33; + } + + /// + /// Inverts the given matix. + /// + /// Matrix to be inverted. + /// Inverted matrix. + public static Matrix3x3 Invert(Matrix3x3 matrix) + { + Matrix3x3 toReturn; + Invert(ref matrix, out toReturn); + return toReturn; + } + + /// + /// Inverts the largest nonsingular submatrix in the matrix, excluding 2x2's that involve M13 or M31, and excluding 1x1's that include nondiagonal elements. + /// + /// Matrix to be inverted. + /// Inverted matrix. + public static void AdaptiveInvert(ref Matrix3x3 matrix, out Matrix3x3 result) + { + int submatrix; + float determinantInverse = 1 / matrix.AdaptiveDeterminant(out submatrix); + float m11, m12, m13, m21, m22, m23, m31, m32, m33; + switch (submatrix) + { + case 0: //Full matrix. + m11 = (matrix.M22 * matrix.M33 - matrix.M23 * matrix.M32) * determinantInverse; + m12 = (matrix.M13 * matrix.M32 - matrix.M33 * matrix.M12) * determinantInverse; + m13 = (matrix.M12 * matrix.M23 - matrix.M22 * matrix.M13) * determinantInverse; + + m21 = (matrix.M23 * matrix.M31 - matrix.M21 * matrix.M33) * determinantInverse; + m22 = (matrix.M11 * matrix.M33 - matrix.M13 * matrix.M31) * determinantInverse; + m23 = (matrix.M13 * matrix.M21 - matrix.M11 * matrix.M23) * determinantInverse; + + m31 = (matrix.M21 * matrix.M32 - matrix.M22 * matrix.M31) * determinantInverse; + m32 = (matrix.M12 * matrix.M31 - matrix.M11 * matrix.M32) * determinantInverse; + m33 = (matrix.M11 * matrix.M22 - matrix.M12 * matrix.M21) * determinantInverse; + break; + case 1: //Upper left matrix, m11, m12, m21, m22. + m11 = matrix.M22 * determinantInverse; + m12 = -matrix.M12 * determinantInverse; + m13 = 0; + + m21 = -matrix.M21 * determinantInverse; + m22 = matrix.M11 * determinantInverse; + m23 = 0; + + m31 = 0; + m32 = 0; + m33 = 0; + break; + case 2: //Lower right matrix, m22, m23, m32, m33. + m11 = 0; + m12 = 0; + m13 = 0; + + m21 = 0; + m22 = matrix.M33 * determinantInverse; + m23 = -matrix.M23 * determinantInverse; + + m31 = 0; + m32 = -matrix.M32 * determinantInverse; + m33 = matrix.M22 * determinantInverse; + break; + case 3: //Corners, m11, m31, m13, m33. + m11 = matrix.M33 * determinantInverse; + m12 = 0; + m13 = -matrix.M13 * determinantInverse; + + m21 = 0; + m22 = 0; + m23 = 0; + + m31 = -matrix.M31 * determinantInverse; + m32 = 0; + m33 = matrix.M11 * determinantInverse; + break; + case 4: //M11 + m11 = 1 / matrix.M11; + m12 = 0; + m13 = 0; + + m21 = 0; + m22 = 0; + m23 = 0; + + m31 = 0; + m32 = 0; + m33 = 0; + break; + case 5: //M22 + m11 = 0; + m12 = 0; + m13 = 0; + + m21 = 0; + m22 = 1 / matrix.M22; + m23 = 0; + + m31 = 0; + m32 = 0; + m33 = 0; + break; + case 6: //M33 + m11 = 0; + m12 = 0; + m13 = 0; + + m21 = 0; + m22 = 0; + m23 = 0; + + m31 = 0; + m32 = 0; + m33 = 1 / matrix.M33; + break; + default: //Completely singular. + m11 = 0; m12 = 0; m13 = 0; m21 = 0; m22 = 0; m23 = 0; m31 = 0; m32 = 0; m33 = 0; + break; + } + + result.M11 = m11; + result.M12 = m12; + result.M13 = m13; + + result.M21 = m21; + result.M22 = m22; + result.M23 = m23; + + result.M31 = m31; + result.M32 = m32; + result.M33 = m33; + } + + /// + /// Computes the adjugate transpose of a matrix. + /// The adjugate transpose A of matrix M is: det(M) * transpose(invert(M)) + /// This is necessary when transforming normals (bivectors) with general linear transformations. + /// + /// Matrix to compute the adjugate transpose of. + /// Adjugate transpose of the input matrix. + public static void AdjugateTranspose(ref Matrix3x3 matrix, out Matrix3x3 result) + { + //Despite the relative obscurity of the operation, this is a fairly straightforward operation which is actually faster than a true invert (by virtue of cancellation). + //Conceptually, this is implemented as transpose(det(M) * invert(M)), but that's perfectly acceptable: + //1) transpose(invert(M)) == invert(transpose(M)), and + //2) det(M) == det(transpose(M)) + //This organization makes it clearer that the invert's usual division by determinant drops out. + + float m11 = (matrix.M22 * matrix.M33 - matrix.M23 * matrix.M32); + float m12 = (matrix.M13 * matrix.M32 - matrix.M33 * matrix.M12); + float m13 = (matrix.M12 * matrix.M23 - matrix.M22 * matrix.M13); + + float m21 = (matrix.M23 * matrix.M31 - matrix.M21 * matrix.M33); + float m22 = (matrix.M11 * matrix.M33 - matrix.M13 * matrix.M31); + float m23 = (matrix.M13 * matrix.M21 - matrix.M11 * matrix.M23); + + float m31 = (matrix.M21 * matrix.M32 - matrix.M22 * matrix.M31); + float m32 = (matrix.M12 * matrix.M31 - matrix.M11 * matrix.M32); + float m33 = (matrix.M11 * matrix.M22 - matrix.M12 * matrix.M21); + + //Note transposition. + result.M11 = m11; + result.M12 = m21; + result.M13 = m31; + + result.M21 = m12; + result.M22 = m22; + result.M23 = m32; + + result.M31 = m13; + result.M32 = m23; + result.M33 = m33; + } + + /// + /// Computes the adjugate transpose of a matrix. + /// The adjugate transpose A of matrix M is: det(M) * transpose(invert(M)) + /// This is necessary when transforming normals (bivectors) with general linear transformations. + /// + /// Matrix to compute the adjugate transpose of. + /// Adjugate transpose of the input matrix. + public static Matrix3x3 AdjugateTranspose(Matrix3x3 matrix) + { + Matrix3x3 toReturn; + AdjugateTranspose(ref matrix, out toReturn); + return toReturn; + } + + /// + /// Multiplies the two matrices. + /// + /// First matrix to multiply. + /// Second matrix to multiply. + /// Product of the multiplication. + public static Matrix3x3 operator *(Matrix3x3 a, Matrix3x3 b) + { + Matrix3x3 result; + Matrix3x3.Multiply(ref a, ref b, out result); + return result; + } + + /// + /// Scales all components of the matrix by the given value. + /// + /// First matrix to multiply. + /// Scaling value to apply to all components of the matrix. + /// Product of the multiplication. + public static Matrix3x3 operator *(Matrix3x3 m, float f) + { + Matrix3x3 result; + Multiply(ref m, f, out result); + return result; + } + + /// + /// Scales all components of the matrix by the given value. + /// + /// First matrix to multiply. + /// Scaling value to apply to all components of the matrix. + /// Product of the multiplication. + public static Matrix3x3 operator *(float f, Matrix3x3 m) + { + Matrix3x3 result; + Multiply(ref m, f, out result); + return result; + } + + /// + /// Multiplies the two matrices. + /// + /// First matrix to multiply. + /// Second matrix to multiply. + /// Product of the multiplication. + public static void Multiply(ref Matrix3x3 a, ref Matrix3x3 b, out Matrix3x3 result) + { + float resultM11 = a.M11 * b.M11 + a.M12 * b.M21 + a.M13 * b.M31; + float resultM12 = a.M11 * b.M12 + a.M12 * b.M22 + a.M13 * b.M32; + float resultM13 = a.M11 * b.M13 + a.M12 * b.M23 + a.M13 * b.M33; + + float resultM21 = a.M21 * b.M11 + a.M22 * b.M21 + a.M23 * b.M31; + float resultM22 = a.M21 * b.M12 + a.M22 * b.M22 + a.M23 * b.M32; + float resultM23 = a.M21 * b.M13 + a.M22 * b.M23 + a.M23 * b.M33; + + float resultM31 = a.M31 * b.M11 + a.M32 * b.M21 + a.M33 * b.M31; + float resultM32 = a.M31 * b.M12 + a.M32 * b.M22 + a.M33 * b.M32; + float resultM33 = a.M31 * b.M13 + a.M32 * b.M23 + a.M33 * b.M33; + + result.M11 = resultM11; + result.M12 = resultM12; + result.M13 = resultM13; + + result.M21 = resultM21; + result.M22 = resultM22; + result.M23 = resultM23; + + result.M31 = resultM31; + result.M32 = resultM32; + result.M33 = resultM33; + } + + /// + /// Multiplies the two matrices. + /// + /// First matrix to multiply. + /// Second matrix to multiply. + /// Product of the multiplication. + public static void Multiply(ref Matrix3x3 a, ref Matrix b, out Matrix3x3 result) + { + float resultM11 = a.M11 * b.M11 + a.M12 * b.M21 + a.M13 * b.M31; + float resultM12 = a.M11 * b.M12 + a.M12 * b.M22 + a.M13 * b.M32; + float resultM13 = a.M11 * b.M13 + a.M12 * b.M23 + a.M13 * b.M33; + + float resultM21 = a.M21 * b.M11 + a.M22 * b.M21 + a.M23 * b.M31; + float resultM22 = a.M21 * b.M12 + a.M22 * b.M22 + a.M23 * b.M32; + float resultM23 = a.M21 * b.M13 + a.M22 * b.M23 + a.M23 * b.M33; + + float resultM31 = a.M31 * b.M11 + a.M32 * b.M21 + a.M33 * b.M31; + float resultM32 = a.M31 * b.M12 + a.M32 * b.M22 + a.M33 * b.M32; + float resultM33 = a.M31 * b.M13 + a.M32 * b.M23 + a.M33 * b.M33; + + result.M11 = resultM11; + result.M12 = resultM12; + result.M13 = resultM13; + + result.M21 = resultM21; + result.M22 = resultM22; + result.M23 = resultM23; + + result.M31 = resultM31; + result.M32 = resultM32; + result.M33 = resultM33; + } + + /// + /// Multiplies the two matrices. + /// + /// First matrix to multiply. + /// Second matrix to multiply. + /// Product of the multiplication. + public static void Multiply(ref Matrix a, ref Matrix3x3 b, out Matrix3x3 result) + { + float resultM11 = a.M11 * b.M11 + a.M12 * b.M21 + a.M13 * b.M31; + float resultM12 = a.M11 * b.M12 + a.M12 * b.M22 + a.M13 * b.M32; + float resultM13 = a.M11 * b.M13 + a.M12 * b.M23 + a.M13 * b.M33; + + float resultM21 = a.M21 * b.M11 + a.M22 * b.M21 + a.M23 * b.M31; + float resultM22 = a.M21 * b.M12 + a.M22 * b.M22 + a.M23 * b.M32; + float resultM23 = a.M21 * b.M13 + a.M22 * b.M23 + a.M23 * b.M33; + + float resultM31 = a.M31 * b.M11 + a.M32 * b.M21 + a.M33 * b.M31; + float resultM32 = a.M31 * b.M12 + a.M32 * b.M22 + a.M33 * b.M32; + float resultM33 = a.M31 * b.M13 + a.M32 * b.M23 + a.M33 * b.M33; + + result.M11 = resultM11; + result.M12 = resultM12; + result.M13 = resultM13; + + result.M21 = resultM21; + result.M22 = resultM22; + result.M23 = resultM23; + + result.M31 = resultM31; + result.M32 = resultM32; + result.M33 = resultM33; + } + + + /// + /// Multiplies a transposed matrix with another matrix. + /// + /// Matrix to be multiplied. + /// Matrix to be transposed and multiplied. + /// Product of the multiplication. + public static void MultiplyTransposed(ref Matrix3x3 transpose, ref Matrix3x3 matrix, out Matrix3x3 result) + { + float resultM11 = transpose.M11 * matrix.M11 + transpose.M21 * matrix.M21 + transpose.M31 * matrix.M31; + float resultM12 = transpose.M11 * matrix.M12 + transpose.M21 * matrix.M22 + transpose.M31 * matrix.M32; + float resultM13 = transpose.M11 * matrix.M13 + transpose.M21 * matrix.M23 + transpose.M31 * matrix.M33; + + float resultM21 = transpose.M12 * matrix.M11 + transpose.M22 * matrix.M21 + transpose.M32 * matrix.M31; + float resultM22 = transpose.M12 * matrix.M12 + transpose.M22 * matrix.M22 + transpose.M32 * matrix.M32; + float resultM23 = transpose.M12 * matrix.M13 + transpose.M22 * matrix.M23 + transpose.M32 * matrix.M33; + + float resultM31 = transpose.M13 * matrix.M11 + transpose.M23 * matrix.M21 + transpose.M33 * matrix.M31; + float resultM32 = transpose.M13 * matrix.M12 + transpose.M23 * matrix.M22 + transpose.M33 * matrix.M32; + float resultM33 = transpose.M13 * matrix.M13 + transpose.M23 * matrix.M23 + transpose.M33 * matrix.M33; + + result.M11 = resultM11; + result.M12 = resultM12; + result.M13 = resultM13; + + result.M21 = resultM21; + result.M22 = resultM22; + result.M23 = resultM23; + + result.M31 = resultM31; + result.M32 = resultM32; + result.M33 = resultM33; + } + + /// + /// Multiplies a matrix with a transposed matrix. + /// + /// Matrix to be multiplied. + /// Matrix to be transposed and multiplied. + /// Product of the multiplication. + public static void MultiplyByTransposed(ref Matrix3x3 matrix, ref Matrix3x3 transpose, out Matrix3x3 result) + { + float resultM11 = matrix.M11 * transpose.M11 + matrix.M12 * transpose.M12 + matrix.M13 * transpose.M13; + float resultM12 = matrix.M11 * transpose.M21 + matrix.M12 * transpose.M22 + matrix.M13 * transpose.M23; + float resultM13 = matrix.M11 * transpose.M31 + matrix.M12 * transpose.M32 + matrix.M13 * transpose.M33; + + float resultM21 = matrix.M21 * transpose.M11 + matrix.M22 * transpose.M12 + matrix.M23 * transpose.M13; + float resultM22 = matrix.M21 * transpose.M21 + matrix.M22 * transpose.M22 + matrix.M23 * transpose.M23; + float resultM23 = matrix.M21 * transpose.M31 + matrix.M22 * transpose.M32 + matrix.M23 * transpose.M33; + + float resultM31 = matrix.M31 * transpose.M11 + matrix.M32 * transpose.M12 + matrix.M33 * transpose.M13; + float resultM32 = matrix.M31 * transpose.M21 + matrix.M32 * transpose.M22 + matrix.M33 * transpose.M23; + float resultM33 = matrix.M31 * transpose.M31 + matrix.M32 * transpose.M32 + matrix.M33 * transpose.M33; + + result.M11 = resultM11; + result.M12 = resultM12; + result.M13 = resultM13; + + result.M21 = resultM21; + result.M22 = resultM22; + result.M23 = resultM23; + + result.M31 = resultM31; + result.M32 = resultM32; + result.M33 = resultM33; + } + + /// + /// Scales all components of the matrix. + /// + /// Matrix to scale. + /// Amount to scale. + /// Scaled matrix. + public static void Multiply(ref Matrix3x3 matrix, float scale, out Matrix3x3 result) + { + result.M11 = matrix.M11 * scale; + result.M12 = matrix.M12 * scale; + result.M13 = matrix.M13 * scale; + + result.M21 = matrix.M21 * scale; + result.M22 = matrix.M22 * scale; + result.M23 = matrix.M23 * scale; + + result.M31 = matrix.M31 * scale; + result.M32 = matrix.M32 * scale; + result.M33 = matrix.M33 * scale; + } + + /// + /// Negates every element in the matrix. + /// + /// Matrix to negate. + /// Negated matrix. + public static void Negate(ref Matrix3x3 matrix, out Matrix3x3 result) + { + result.M11 = -matrix.M11; + result.M12 = -matrix.M12; + result.M13 = -matrix.M13; + + result.M21 = -matrix.M21; + result.M22 = -matrix.M22; + result.M23 = -matrix.M23; + + result.M31 = -matrix.M31; + result.M32 = -matrix.M32; + result.M33 = -matrix.M33; + } + + /// + /// Subtracts the two matrices from each other on a per-element basis. + /// + /// First matrix to subtract. + /// Second matrix to subtract. + /// Difference of the two matrices. + public static void Subtract(ref Matrix3x3 a, ref Matrix3x3 b, out Matrix3x3 result) + { + float m11 = a.M11 - b.M11; + float m12 = a.M12 - b.M12; + float m13 = a.M13 - b.M13; + + float m21 = a.M21 - b.M21; + float m22 = a.M22 - b.M22; + float m23 = a.M23 - b.M23; + + float m31 = a.M31 - b.M31; + float m32 = a.M32 - b.M32; + float m33 = a.M33 - b.M33; + + result.M11 = m11; + result.M12 = m12; + result.M13 = m13; + + result.M21 = m21; + result.M22 = m22; + result.M23 = m23; + + result.M31 = m31; + result.M32 = m32; + result.M33 = m33; + } + + /// + /// Creates a 4x4 matrix from a 3x3 matrix. + /// + /// 3x3 matrix. + /// Created 4x4 matrix. + public static void ToMatrix4X4(ref Matrix3x3 a, out Matrix b) + { +#if !WINDOWS + b = new Matrix(); +#endif + b.M11 = a.M11; + b.M12 = a.M12; + b.M13 = a.M13; + + b.M21 = a.M21; + b.M22 = a.M22; + b.M23 = a.M23; + + b.M31 = a.M31; + b.M32 = a.M32; + b.M33 = a.M33; + + b.M44 = 1; + b.M14 = 0; + b.M24 = 0; + b.M34 = 0; + b.M41 = 0; + b.M42 = 0; + b.M43 = 0; + } + + /// + /// Creates a 4x4 matrix from a 3x3 matrix. + /// + /// 3x3 matrix. + /// Created 4x4 matrix. + public static Matrix ToMatrix4X4(Matrix3x3 a) + { +#if !WINDOWS + Matrix b = new Matrix(); +#else + Matrix b; +#endif + b.M11 = a.M11; + b.M12 = a.M12; + b.M13 = a.M13; + + b.M21 = a.M21; + b.M22 = a.M22; + b.M23 = a.M23; + + b.M31 = a.M31; + b.M32 = a.M32; + b.M33 = a.M33; + + b.M44 = 1; + b.M14 = 0; + b.M24 = 0; + b.M34 = 0; + b.M41 = 0; + b.M42 = 0; + b.M43 = 0; + return b; + } + + /// + /// Transforms the vector by the matrix. + /// + /// Vector3 to transform. + /// Matrix to use as the transformation. + /// Product of the transformation. + public static void Transform(ref Vector3 v, ref Matrix3x3 matrix, out Vector3 result) + { + float vX = v.X; + float vY = v.Y; + float vZ = v.Z; +#if !WINDOWS + result = new Vector3(); +#endif + result.X = vX * matrix.M11 + vY * matrix.M21 + vZ * matrix.M31; + result.Y = vX * matrix.M12 + vY * matrix.M22 + vZ * matrix.M32; + result.Z = vX * matrix.M13 + vY * matrix.M23 + vZ * matrix.M33; + } + + + /// + /// Transforms the vector by the matrix. + /// + /// Vector3 to transform. + /// Matrix to use as the transformation. + /// Product of the transformation. + public static Vector3 Transform(Vector3 v, Matrix3x3 matrix) + { + Vector3 result; +#if !WINDOWS + result = new Vector3(); +#endif + float vX = v.X; + float vY = v.Y; + float vZ = v.Z; + + result.X = vX * matrix.M11 + vY * matrix.M21 + vZ * matrix.M31; + result.Y = vX * matrix.M12 + vY * matrix.M22 + vZ * matrix.M32; + result.Z = vX * matrix.M13 + vY * matrix.M23 + vZ * matrix.M33; + return result; + } + + /// + /// Transforms the vector by the matrix's transpose. + /// + /// Vector3 to transform. + /// Matrix to use as the transformation transpose. + /// Product of the transformation. + public static void TransformTranspose(ref Vector3 v, ref Matrix3x3 matrix, out Vector3 result) + { + float vX = v.X; + float vY = v.Y; + float vZ = v.Z; +#if !WINDOWS + result = new Vector3(); +#endif + result.X = vX * matrix.M11 + vY * matrix.M12 + vZ * matrix.M13; + result.Y = vX * matrix.M21 + vY * matrix.M22 + vZ * matrix.M23; + result.Z = vX * matrix.M31 + vY * matrix.M32 + vZ * matrix.M33; + } + + /// + /// Transforms the vector by the matrix's transpose. + /// + /// Vector3 to transform. + /// Matrix to use as the transformation transpose. + /// Product of the transformation. + public static Vector3 TransformTranspose(Vector3 v, Matrix3x3 matrix) + { + float vX = v.X; + float vY = v.Y; + float vZ = v.Z; + Vector3 result; +#if !WINDOWS + result = new Vector3(); +#endif + result.X = vX * matrix.M11 + vY * matrix.M12 + vZ * matrix.M13; + result.Y = vX * matrix.M21 + vY * matrix.M22 + vZ * matrix.M23; + result.Z = vX * matrix.M31 + vY * matrix.M32 + vZ * matrix.M33; + return result; + } + + /// + /// Computes the transposed matrix of a matrix. + /// + /// Matrix to transpose. + /// Transposed matrix. + public static void Transpose(ref Matrix3x3 matrix, out Matrix3x3 result) + { + float m21 = matrix.M12; + float m31 = matrix.M13; + float m12 = matrix.M21; + float m32 = matrix.M23; + float m13 = matrix.M31; + float m23 = matrix.M32; + + result.M11 = matrix.M11; + result.M12 = m12; + result.M13 = m13; + result.M21 = m21; + result.M22 = matrix.M22; + result.M23 = m23; + result.M31 = m31; + result.M32 = m32; + result.M33 = matrix.M33; + } + + /// + /// Computes the transposed matrix of a matrix. + /// + /// Matrix to transpose. + /// Transposed matrix. + public static void Transpose(ref Matrix matrix, out Matrix3x3 result) + { + float m21 = matrix.M12; + float m31 = matrix.M13; + float m12 = matrix.M21; + float m32 = matrix.M23; + float m13 = matrix.M31; + float m23 = matrix.M32; + + result.M11 = matrix.M11; + result.M12 = m12; + result.M13 = m13; + result.M21 = m21; + result.M22 = matrix.M22; + result.M23 = m23; + result.M31 = m31; + result.M32 = m32; + result.M33 = matrix.M33; + } + + /// + /// Transposes the matrix in-place. + /// + public void Transpose() + { + float intermediate = M12; + M12 = M21; + M21 = intermediate; + + intermediate = M13; + M13 = M31; + M31 = intermediate; + + intermediate = M23; + M23 = M32; + M32 = intermediate; + } + + + /// + /// Creates a string representation of the matrix. + /// + /// A string representation of the matrix. + public override string ToString() + { + return "{" + M11 + ", " + M12 + ", " + M13 + "} " + + "{" + M21 + ", " + M22 + ", " + M23 + "} " + + "{" + M31 + ", " + M32 + ", " + M33 + "}"; + } + + /// + /// Calculates the determinant of the matrix. + /// + /// The matrix's determinant. + public float Determinant() + { + return M11 * M22 * M33 + M12 * M23 * M31 + M13 * M21 * M32 - + M31 * M22 * M13 - M32 * M23 * M11 - M33 * M21 * M12; + } + + /// + /// Calculates the determinant of largest nonsingular submatrix, excluding 2x2's that involve M13 or M31, and excluding all 1x1's that involve nondiagonal elements. + /// + /// Represents the submatrix that was used to compute the determinant. + /// 0 is the full 3x3. 1 is the upper left 2x2. 2 is the lower right 2x2. 3 is the four corners. + /// 4 is M11. 5 is M22. 6 is M33. + /// The matrix's determinant. + internal float AdaptiveDeterminant(out int subMatrixCode) + { + //Try the full matrix first. + float determinant = M11 * M22 * M33 + M12 * M23 * M31 + M13 * M21 * M32 - + M31 * M22 * M13 - M32 * M23 * M11 - M33 * M21 * M12; + if (determinant != 0) //This could be a little numerically flimsy. Fortunately, the way this method is used, that doesn't matter! + { + subMatrixCode = 0; + return determinant; + } + //Try m11, m12, m21, m22. + determinant = M11 * M22 - M12 * M21; + if (determinant != 0) + { + subMatrixCode = 1; + return determinant; + } + //Try m22, m23, m32, m33. + determinant = M22 * M33 - M23 * M32; + if (determinant != 0) + { + subMatrixCode = 2; + return determinant; + } + //Try m11, m13, m31, m33. + determinant = M11 * M33 - M13 * M12; + if (determinant != 0) + { + subMatrixCode = 3; + return determinant; + } + //Try m11. + if (M11 != 0) + { + subMatrixCode = 4; + return M11; + } + //Try m22. + if (M22 != 0) + { + subMatrixCode = 5; + return M22; + } + //Try m33. + if (M33 != 0) + { + subMatrixCode = 6; + return M33; + } + //It's completely singular! + subMatrixCode = -1; + return 0; + } + + /// + /// Creates a 3x3 matrix representing the orientation stored in the quaternion. + /// + /// Quaternion to use to create a matrix. + /// Matrix representing the quaternion's orientation. + public static void CreateFromQuaternion(ref Quaternion quaternion, out Matrix3x3 result) + { + float qX2 = quaternion.X + quaternion.X; + float qY2 = quaternion.Y + quaternion.Y; + float qZ2 = quaternion.Z + quaternion.Z; + float XX = qX2 * quaternion.X; + float YY = qY2 * quaternion.Y; + float ZZ = qZ2 * quaternion.Z; + float XY = qX2 * quaternion.Y; + float XZ = qX2 * quaternion.Z; + float XW = qX2 * quaternion.W; + float YZ = qY2 * quaternion.Z; + float YW = qY2 * quaternion.W; + float ZW = qZ2 * quaternion.W; + + result.M11 = 1 - YY - ZZ; + result.M21 = XY - ZW; + result.M31 = XZ + YW; + + result.M12 = XY + ZW; + result.M22 = 1 - XX - ZZ; + result.M32 = YZ - XW; + + result.M13 = XZ - YW; + result.M23 = YZ + XW; + result.M33 = 1 - XX - YY; + } + + /// + /// Creates a 3x3 matrix representing the orientation stored in the quaternion. + /// + /// Quaternion to use to create a matrix. + /// Matrix representing the quaternion's orientation. + public static Matrix3x3 CreateFromQuaternion(Quaternion quaternion) + { + Matrix3x3 result; + CreateFromQuaternion(ref quaternion, out result); + return result; + } + + /// + /// Computes the outer product of the given vectors. + /// + /// First vector. + /// Second vector. + /// Outer product result. + public static void CreateOuterProduct(ref Vector3 a, ref Vector3 b, out Matrix3x3 result) + { + result.M11 = a.X * b.X; + result.M12 = a.X * b.Y; + result.M13 = a.X * b.Z; + + result.M21 = a.Y * b.X; + result.M22 = a.Y * b.Y; + result.M23 = a.Y * b.Z; + + result.M31 = a.Z * b.X; + result.M32 = a.Z * b.Y; + result.M33 = a.Z * b.Z; + } + + /// + /// Creates a matrix representing a rotation of a given angle around a given axis. + /// + /// Axis around which to rotate. + /// Amount to rotate. + /// Matrix representing the rotation. + public static Matrix3x3 CreateFromAxisAngle(Vector3 axis, float angle) + { + Matrix3x3 toReturn; + CreateFromAxisAngle(ref axis, angle, out toReturn); + return toReturn; + } + + /// + /// Creates a matrix representing a rotation of a given angle around a given axis. + /// + /// Axis around which to rotate. + /// Amount to rotate. + /// Matrix representing the rotation. + public static void CreateFromAxisAngle(ref Vector3 axis, float angle, out Matrix3x3 result) + { + float xx = axis.X * axis.X; + float yy = axis.Y * axis.Y; + float zz = axis.Z * axis.Z; + float xy = axis.X * axis.Y; + float xz = axis.X * axis.Z; + float yz = axis.Y * axis.Z; + + float sinAngle = (float)System.Math.Sin(angle); + float oneMinusCosAngle = 1 - (float)System.Math.Cos(angle); + + result.M11 = 1 + oneMinusCosAngle * (xx - 1); + result.M21 = -axis.Z * sinAngle + oneMinusCosAngle * xy; + result.M31 = axis.Y * sinAngle + oneMinusCosAngle * xz; + + result.M12 = axis.Z * sinAngle + oneMinusCosAngle * xy; + result.M22 = 1 + oneMinusCosAngle * (yy - 1); + result.M32 = -axis.X * sinAngle + oneMinusCosAngle * yz; + + result.M13 = -axis.Y * sinAngle + oneMinusCosAngle * xz; + result.M23 = axis.X * sinAngle + oneMinusCosAngle * yz; + result.M33 = 1 + oneMinusCosAngle * (zz - 1); + } + + + + + + + } +} \ No newline at end of file diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix3x3.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix3x3.cs.meta new file mode 100644 index 00000000..934f6b2f --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Matrix3x3.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: db9474621f28c84448267e157c587d9e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/PermutationMapper.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/PermutationMapper.cs new file mode 100644 index 00000000..31cc9abb --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/PermutationMapper.cs @@ -0,0 +1,129 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BEPUutilities +{ + /// + /// Maps indices to permuted versions of the indices. + /// + public class PermutationMapper + { + /// + /// Constructs a new permutation mapper. + /// + public PermutationMapper() + { + PermutationIndex = 0; + } + + private long permutationIndex; + + /// + /// Gets or sets the permutation index used by the solver. If the simulation is restarting from a given frame, + /// setting this index to be consistent is required for deterministic results. + /// + public long PermutationIndex + { + get + { + return permutationIndex; + } + set + { + permutationIndex = value < 0 ? value + long.MaxValue + 1 : value; + currentPrime = primes[permutationIndex % primes.Length]; + + currentOffset = currentPrime * permutationIndex; + + if (currentOffset < 0) + currentOffset = currentOffset + long.MaxValue + 1; + + } + } + + + long currentOffset; + long currentPrime; + static long[] primes = { + + 818660357, 878916037, 844828463, 706609493, 478906601, 707908823, 938052293, 630235027, 984165979, 522311087, + 533822657, 647031821, 756030427, 649614073, 988123237, 367570499, 906500941, 996040853, 783408599, 547916219, + 874973537, 895987171, 993400939, 370087031, 796455917, 681976277, 952539209, 787319591, 693639263, 400306397, + 464911147, 632819419, 535101863, 989444723, 758640511, 838280689, 368828611, 587720411, 564588593, 967023193, + 667720633, 806896583, 423056789, 517196051, 932791141, 859241111, 560735977, 636693319, 439523569, 486546097, + 607018589, 809508331, 743003231, 658666247, 468722633, 915685681, 880227137, 819967303, 901242241, 778194047, + 741702719, 482725577, 926205001, 927520481, 402832763, 886794539, 452206037, 753430547, 876291181, 485272951, + 998674531, 648322789, 761247251, 804290869, 864486559, 410411999, 812125621, 801673849, 425581939, 934104421, + 462373111, 643151417, 685862539, 550475501, 770369947, 635404883, 884166113, 863178133, 852689941, 833050909, + 956490817, 527424127, 671607571, 759943181, 553033951, 519748331, 871040311, 481451183, 457284019, 387695681, + 733904803, 782106799, 736506781, 949902923, 484000151, 948584543, 386437679, 928838927, 771671671, 405356321, + 436988143, 412937689, 723496063, 965703469, 650905219, 438255473, 772975039, 698824649, 491646619, 728694209, + 351253391, 573576683, 897302563, 383915503, 524866219, 793842233, 970974217, 986803099, 589008533, 670310803, + 521029501, 661249651, 678087929, 381394511, 523586243, 654784799, 892050463, 727394567, 414200539, 823889863, + 595433441, 951221021, 429383393, 789927269, 726096121, 881542477, 776892307, 697527421, 453478561, 461099827, + 722198021, 504411067, 994722161, 700123451, 385176713, 510802769, 890732693, 696225749, 749524037, 662541689, + 974934083, 394001009, 657371381, 443321381, 865796509, 748217497, 702715747, 684569971, 774280471, 992083457, + 537661367, 382653827, 622495889, 631525019, 480174977, 391478107, 495469771, 442056463, 616040899, 618625193, + 358782341, 586434157, 869729963, 473817257, 939368383, 363804941, 665132051, 969657991, 985485797, 357526417, + 763851047, 528702827, 968340739, 715704307, 840899977, 554317237, 603155899, 976257697, 914373869, 972295381, + 506966203, 428116781, 919629439, 458558563, 909124627, 683276981, 843515081, 659956823, 567155357, 982852639, + 366315427, 786014507, 421791619, 471267781, 644447959, 711804833, 513360119, 545353273, 501854377, 846137323, + 430651127, 732601613, 694931981, 765159553, 565870867, 361296113, 407881267, 910434589, 805593809, 918318551, + 754734557, 509521151, 515920621, 627653659, 469997687, 913055509, 641857133, 746917957, 555602107, 580002967, + 500573561, 990762767, 731298989, 350000041, 977572727, 959119229, 445860881, 835666891, 404093659, 467452939, + 388955857, 417993047, 817348793, 415462661, 882852679, 752128019, 705313919, 508244797, 877605947, 894672263, + 614753233, 924890411, 851377763, 621205957, 569722943, 836976167, 605729783, 750824423, 997360631, 719601319, + 399047321, 735204647, 978895943, 899934323, 674196121, 434451827, 352509701, 687156553, 779500681, 581290511, + 898615969, 556885871, 839592911, 656079659, 861868031, 672901241, 653492839, 449666827, 740406013, 680680703, + 544070951, 499298507, 850065869, 612177563, 936733703, 559452917, 463639243, 435719233, 769068361, 476365079, + 675495157, 645738493, 831744161, 625074937, 406619023, 601868711, 419260421, 902559319, 701418559, 800370419, + 757334933, 356270183, 704014501, 610886447, 980214871, 424321201, 420528029, 532542931, 745611751, 856617583, + 512081189, 526147967, 360037807, 609597161, 541503811, 888105241, 868419913, 676791293, 953855899, 477635657, + 945954917, 889419229, 922256729, 617333111, 872353393, 571010317, 689747717, 540223237, 594146089, 583856813, + 596715221, 784713949, 720899299, 943323247, 931473479, 531262091, 791230073, 558167293, 619913999, 847450421, + 472541753, 930158309, 652199311, 893358073, 955169563, 498021431, 634111459, 542787121, 448395943, 494196701, + 737807227, 714400243, 923575657, 568439609, 822581623, 829125467, 397785029, 392735821, 724793233, 762545383, + 691041023, 853997549, 903872867, 487820351, 574863577, 710504833, 780803633, 378881311, 640566593, 981532709, + 431916809, 608306243, 375114847, 433186519, 964385563, 371347091, 549197707, 365063081, 663835979, 713100181, + 885483343, 489099293, 409146953, 447130181, 827817959, 857928371, 816045233, 496745537, 454747417, 411672083, + 459827497, 717003281, 813433657, 860554531, 503134721, 591574051, 373863263, 538942241, 637982731, 578719403, + 766467371, 599295517, 848757323, 466181593, 396524683, 426850301, 688452473, 826508399, 585146633, 814739587, + 623787599, 380139107, 744307493, 372605839, 855307913, 577432501, 808205117, 810815693, 626368511, 709205743, + 916999177, 598005553, 944636591, 590290153, 905189147, 730000753, 830433151, 492922333, 957803549, 718302763, + 973615067, 376372811, 669017941, 444590423, 960432989, 592860803, 582574117, 940688839, 377628311, 788628949, + 536379929, 963067373, 907810073, 600582071, 792537247, 395258257, 961750859, 795149801, 362549689, 873662401, + 797757101, 546635237, 834358871, 935417807, 613460527, 456014303, 604437347, 551755871, 562018817, 639275389, + 529981651, 505691939, 842209411, 821274059, 799060477, 563302513, 666426347, 572296079, 355016209, 514641793, + 942005767, 825202369, 739107877, 867110077, 440788573, 911746061, 628943891, 518470987, 775583663, 767767657, + 576150287, 353763589, 416727907, 390218303, 920939597, 692337133, 450937237, 679382051, 802984639, 947268481, + 490370093, 401570791, 475092199, + + + }; + + + /// + /// Gets a remapped index. + /// + /// Original index of an element in the set to be redirected to a shuffled position. + /// Size of the set being permuted. Must be smaller than 350000041. + /// The remapped index. + public long GetMappedIndex(long index, int setSize) + { + return (index * currentPrime + currentOffset) % setSize; + } + + /// + /// Gets a remapped index. + /// + /// Original index of an element in the set to be redirected to a shuffled position. + /// Size of the set being permuted. Must be smaller than 350000041. + /// The remapped index. + public int GetMappedIndex(int index, int setSize) + { + return (int)((index * currentPrime + currentOffset) % setSize); + } + } +} diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/PermutationMapper.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/PermutationMapper.cs.meta new file mode 100644 index 00000000..4b99afb4 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/PermutationMapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 598efeb102d30c24299c5f80f20d85d3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Plane.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Plane.cs new file mode 100644 index 00000000..37530a60 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Plane.cs @@ -0,0 +1,75 @@ +namespace BEPUutilities +{ + /// + /// Provides XNA-like plane functionality. + /// + public struct Plane + { + /// + /// Normal of the plane. + /// + public Vector3 Normal; + /// + /// Negative distance to the plane from the origin along the normal. + /// + public float D; + + + /// + /// Constructs a new plane. + /// + /// A point on the plane. + /// The normal of the plane. + public Plane(ref Vector3 position, ref Vector3 normal) + { + float d; + Vector3.Dot(ref position, ref normal, out d); + D = -d; + Normal = normal; + } + + + /// + /// Constructs a new plane. + /// + /// A point on the plane. + /// The normal of the plane. + public Plane(Vector3 position, Vector3 normal) + : this(ref position, ref normal) + { + + } + + + /// + /// Constructs a new plane. + /// + /// Normal of the plane. + /// Negative distance to the plane from the origin along the normal. + public Plane(Vector3 normal, float d) + : this(ref normal, d) + { + } + + /// + /// Constructs a new plane. + /// + /// Normal of the plane. + /// Negative distance to the plane from the origin along the normal. + public Plane(ref Vector3 normal, float d) + { + this.Normal = normal; + this.D = d; + } + + /// + /// Gets the dot product of the position offset from the plane along the plane's normal. + /// + /// Position to compute the dot product of. + /// Dot product. + public void DotCoordinate(ref Vector3 v, out float dot) + { + dot = Normal.X * v.X + Normal.Y * v.Y + Normal.Z * v.Z + D; + } + } +} diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Plane.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Plane.cs.meta new file mode 100644 index 00000000..3d362985 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Plane.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 693fe0b8a524f364f9bf1ba3a3c5f147 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Quaternion.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Quaternion.cs new file mode 100644 index 00000000..c5f39030 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Quaternion.cs @@ -0,0 +1,866 @@ +using System; + +namespace BEPUutilities +{ + /// + /// Provides XNA-like quaternion support. + /// + public struct Quaternion : IEquatable + { + /// + /// X component of the quaternion. + /// + public float X; + + /// + /// Y component of the quaternion. + /// + public float Y; + + /// + /// Z component of the quaternion. + /// + public float Z; + + /// + /// W component of the quaternion. + /// + public float W; + + /// + /// Constructs a new Quaternion. + /// + /// X component of the quaternion. + /// Y component of the quaternion. + /// Z component of the quaternion. + /// W component of the quaternion. + public Quaternion(float x, float y, float z, float w) + { + this.X = x; + this.Y = y; + this.Z = z; + this.W = w; + } + + /// + /// Adds two quaternions together. + /// + /// First quaternion to add. + /// Second quaternion to add. + /// Sum of the addition. + public static void Add(ref Quaternion a, ref Quaternion b, out Quaternion result) + { + result.X = a.X + b.X; + result.Y = a.Y + b.Y; + result.Z = a.Z + b.Z; + result.W = a.W + b.W; + } + + /// + /// Multiplies two quaternions. + /// + /// First quaternion to multiply. + /// Second quaternion to multiply. + /// Product of the multiplication. + public static void Multiply(ref Quaternion a, ref Quaternion b, out Quaternion result) + { + float x = a.X; + float y = a.Y; + float z = a.Z; + float w = a.W; + float bX = b.X; + float bY = b.Y; + float bZ = b.Z; + float bW = b.W; + result.X = x * bW + bX * w + y * bZ - z * bY; + result.Y = y * bW + bY * w + z * bX - x * bZ; + result.Z = z * bW + bZ * w + x * bY - y * bX; + result.W = w * bW - x * bX - y * bY - z * bZ; + } + + /// + /// Scales a quaternion. + /// + /// Quaternion to multiply. + /// Amount to multiply each component of the quaternion by. + /// Scaled quaternion. + public static void Multiply(ref Quaternion q, float scale, out Quaternion result) + { + result.X = q.X * scale; + result.Y = q.Y * scale; + result.Z = q.Z * scale; + result.W = q.W * scale; + } + + /// + /// Multiplies two quaternions together in opposite order. + /// + /// First quaternion to multiply. + /// Second quaternion to multiply. + /// Product of the multiplication. + public static void Concatenate(ref Quaternion a, ref Quaternion b, out Quaternion result) + { + float aX = a.X; + float aY = a.Y; + float aZ = a.Z; + float aW = a.W; + float bX = b.X; + float bY = b.Y; + float bZ = b.Z; + float bW = b.W; + + result.X = aW * bX + aX * bW + aZ * bY - aY * bZ; + result.Y = aW * bY + aY * bW + aX * bZ - aZ * bX; + result.Z = aW * bZ + aZ * bW + aY * bX - aX * bY; + result.W = aW * bW - aX * bX - aY * bY - aZ * bZ; + + + } + + /// + /// Multiplies two quaternions together in opposite order. + /// + /// First quaternion to multiply. + /// Second quaternion to multiply. + /// Product of the multiplication. + public static Quaternion Concatenate(Quaternion a, Quaternion b) + { + Quaternion result; + Concatenate(ref a, ref b, out result); + return result; + } + + /// + /// Quaternion representing the identity transform. + /// + public static Quaternion Identity + { + get + { + return new Quaternion(0, 0, 0, 1); + } + } + + + + + /// + /// Constructs a quaternion from a rotation matrix. + /// + /// Rotation matrix to create the quaternion from. + /// Quaternion based on the rotation matrix. + public static void CreateFromRotationMatrix(ref Matrix3x3 r, out Quaternion q) + { + float trace = r.M11 + r.M22 + r.M33; +#if !WINDOWS + q = new Quaternion(); +#endif + if (trace >= 0) + { + var S = (float)Math.Sqrt(trace + 1.0) * 2; // S=4*qw + var inverseS = 1 / S; + q.W = 0.25f * S; + q.X = (r.M23 - r.M32) * inverseS; + q.Y = (r.M31 - r.M13) * inverseS; + q.Z = (r.M12 - r.M21) * inverseS; + } + else if ((r.M11 > r.M22) & (r.M11 > r.M33)) + { + var S = (float)Math.Sqrt(1.0 + r.M11 - r.M22 - r.M33) * 2; // S=4*qx + var inverseS = 1 / S; + q.W = (r.M23 - r.M32) * inverseS; + q.X = 0.25f * S; + q.Y = (r.M21 + r.M12) * inverseS; + q.Z = (r.M31 + r.M13) * inverseS; + } + else if (r.M22 > r.M33) + { + var S = (float)Math.Sqrt(1.0 + r.M22 - r.M11 - r.M33) * 2; // S=4*qy + var inverseS = 1 / S; + q.W = (r.M31 - r.M13) * inverseS; + q.X = (r.M21 + r.M12) * inverseS; + q.Y = 0.25f * S; + q.Z = (r.M32 + r.M23) * inverseS; + } + else + { + var S = (float)Math.Sqrt(1.0 + r.M33 - r.M11 - r.M22) * 2; // S=4*qz + var inverseS = 1 / S; + q.W = (r.M12 - r.M21) * inverseS; + q.X = (r.M31 + r.M13) * inverseS; + q.Y = (r.M32 + r.M23) * inverseS; + q.Z = 0.25f * S; + } + } + + /// + /// Creates a quaternion from a rotation matrix. + /// + /// Rotation matrix used to create a new quaternion. + /// Quaternion representing the same rotation as the matrix. + public static Quaternion CreateFromRotationMatrix(Matrix3x3 r) + { + Quaternion toReturn; + CreateFromRotationMatrix(ref r, out toReturn); + return toReturn; + } + + /// + /// Constructs a quaternion from a rotation matrix. + /// + /// Rotation matrix to create the quaternion from. + /// Quaternion based on the rotation matrix. + public static void CreateFromRotationMatrix(ref Matrix r, out Quaternion q) + { + Matrix3x3 downsizedMatrix; + Matrix3x3.CreateFromMatrix(ref r, out downsizedMatrix); + CreateFromRotationMatrix(ref downsizedMatrix, out q); + } + + /// + /// Creates a quaternion from a rotation matrix. + /// + /// Rotation matrix used to create a new quaternion. + /// Quaternion representing the same rotation as the matrix. + public static Quaternion CreateFromRotationMatrix(Matrix r) + { + Quaternion toReturn; + CreateFromRotationMatrix(ref r, out toReturn); + return toReturn; + } + + + /// + /// Ensures the quaternion has unit length. + /// + /// Quaternion to normalize. + /// Normalized quaternion. + public static Quaternion Normalize(Quaternion quaternion) + { + Quaternion toReturn; + Normalize(ref quaternion, out toReturn); + return toReturn; + } + + /// + /// Ensures the quaternion has unit length. + /// + /// Quaternion to normalize. + /// Normalized quaternion. + public static void Normalize(ref Quaternion quaternion, out Quaternion toReturn) + { + float inverse = (float)(1 / Math.Sqrt(quaternion.X * quaternion.X + quaternion.Y * quaternion.Y + quaternion.Z * quaternion.Z + quaternion.W * quaternion.W)); + toReturn.X = quaternion.X * inverse; + toReturn.Y = quaternion.Y * inverse; + toReturn.Z = quaternion.Z * inverse; + toReturn.W = quaternion.W * inverse; + } + + /// + /// Scales the quaternion such that it has unit length. + /// + public void Normalize() + { + float inverse = (float)(1 / Math.Sqrt(X * X + Y * Y + Z * Z + W * W)); + X *= inverse; + Y *= inverse; + Z *= inverse; + W *= inverse; + } + + /// + /// Computes the squared length of the quaternion. + /// + /// Squared length of the quaternion. + public float LengthSquared() + { + return X * X + Y * Y + Z * Z + W * W; + } + + /// + /// Computes the length of the quaternion. + /// + /// Length of the quaternion. + public float Length() + { + return (float)Math.Sqrt(X * X + Y * Y + Z * Z + W * W); + } + + + /// + /// Blends two quaternions together to get an intermediate state. + /// + /// Starting point of the interpolation. + /// Ending point of the interpolation. + /// Amount of the end point to use. + /// Interpolated intermediate quaternion. + public static void Slerp(ref Quaternion start, ref Quaternion end, float interpolationAmount, out Quaternion result) + { + double cosHalfTheta = start.W * end.W + start.X * end.X + start.Y * end.Y + start.Z * end.Z; + if (cosHalfTheta < 0) + { + //Negating a quaternion results in the same orientation, + //but we need cosHalfTheta to be positive to get the shortest path. + end.X = -end.X; + end.Y = -end.Y; + end.Z = -end.Z; + end.W = -end.W; + cosHalfTheta = -cosHalfTheta; + } + // If the orientations are similar enough, then just pick one of the inputs. + if (cosHalfTheta > (1.0 - 1e-12)) + { + result.W = start.W; + result.X = start.X; + result.Y = start.Y; + result.Z = start.Z; + return; + } + // Calculate temporary values. + double halfTheta = Math.Acos(cosHalfTheta); + double sinHalfTheta = Math.Sqrt(1.0 - cosHalfTheta * cosHalfTheta); + + double aFraction = Math.Sin((1 - interpolationAmount) * halfTheta) / sinHalfTheta; + double bFraction = Math.Sin(interpolationAmount * halfTheta) / sinHalfTheta; + + //Blend the two quaternions to get the result! + result.X = (float)(start.X * aFraction + end.X * bFraction); + result.Y = (float)(start.Y * aFraction + end.Y * bFraction); + result.Z = (float)(start.Z * aFraction + end.Z * bFraction); + result.W = (float)(start.W * aFraction + end.W * bFraction); + + + + + } + + /// + /// Blends two quaternions together to get an intermediate state. + /// + /// Starting point of the interpolation. + /// Ending point of the interpolation. + /// Amount of the end point to use. + /// Interpolated intermediate quaternion. + public static Quaternion Slerp(Quaternion start, Quaternion end, float interpolationAmount) + { + Quaternion toReturn; + Slerp(ref start, ref end, interpolationAmount, out toReturn); + return toReturn; + } + + + /// + /// Computes the conjugate of the quaternion. + /// + /// Quaternion to conjugate. + /// Conjugated quaternion. + public static void Conjugate(ref Quaternion quaternion, out Quaternion result) + { + result.X = -quaternion.X; + result.Y = -quaternion.Y; + result.Z = -quaternion.Z; + result.W = quaternion.W; + } + + /// + /// Computes the conjugate of the quaternion. + /// + /// Quaternion to conjugate. + /// Conjugated quaternion. + public static Quaternion Conjugate(Quaternion quaternion) + { + Quaternion toReturn; + Conjugate(ref quaternion, out toReturn); + return toReturn; + } + + + + /// + /// Computes the inverse of the quaternion. + /// + /// Quaternion to invert. + /// Result of the inversion. + public static void Inverse(ref Quaternion quaternion, out Quaternion result) + { + float inverseSquaredNorm = quaternion.X * quaternion.X + quaternion.Y * quaternion.Y + quaternion.Z * quaternion.Z + quaternion.W * quaternion.W; + result.X = -quaternion.X * inverseSquaredNorm; + result.Y = -quaternion.Y * inverseSquaredNorm; + result.Z = -quaternion.Z * inverseSquaredNorm; + result.W = quaternion.W * inverseSquaredNorm; + } + + /// + /// Computes the inverse of the quaternion. + /// + /// Quaternion to invert. + /// Result of the inversion. + public static Quaternion Inverse(Quaternion quaternion) + { + Quaternion result; + Inverse(ref quaternion, out result); + return result; + + } + + /// + /// Tests components for equality. + /// + /// First quaternion to test for equivalence. + /// Second quaternion to test for equivalence. + /// Whether or not the quaternions' components were equal. + public static bool operator ==(Quaternion a, Quaternion b) + { + return a.X == b.X && a.Y == b.Y && a.Z == b.Z && a.W == b.W; + } + + /// + /// Tests components for inequality. + /// + /// First quaternion to test for equivalence. + /// Second quaternion to test for equivalence. + /// Whether the quaternions' components were not equal. + public static bool operator !=(Quaternion a, Quaternion b) + { + return a.X != b.X || a.Y != b.Y || a.Z != b.Z || a.W != b.W; + } + + /// + /// Negates the components of a quaternion. + /// + /// Quaternion to negate. + /// Negated result. + public static void Negate(ref Quaternion a, out Quaternion b) + { + b.X = -a.X; + b.Y = -a.Y; + b.Z = -a.Z; + b.W = -a.W; + } + + /// + /// Negates the components of a quaternion. + /// + /// Quaternion to negate. + /// Negated result. + public static Quaternion Negate(Quaternion q) + { + Negate(ref q, out var result); + return result; + } + + /// + /// Negates the components of a quaternion. + /// + /// Quaternion to negate. + /// Negated result. + public static Quaternion operator -(Quaternion q) + { + Negate(ref q, out var result); + return result; + } + + /// + /// Indicates whether the current object is equal to another object of the same type. + /// + /// + /// true if the current object is equal to the parameter; otherwise, false. + /// + /// An object to compare with this object. + public bool Equals(Quaternion other) + { + return X == other.X && Y == other.Y && Z == other.Z && W == other.W; + } + + /// + /// Indicates whether this instance and a specified object are equal. + /// + /// + /// true if and this instance are the same type and represent the same value; otherwise, false. + /// + /// Another object to compare to. 2 + public override bool Equals(object obj) + { + if (obj is Quaternion) + { + return Equals((Quaternion)obj); + } + return false; + } + + /// + /// Returns the hash code for this instance. + /// + /// + /// A 32-bit signed integer that is the hash code for this instance. + /// + /// 2 + public override int GetHashCode() + { + return X.GetHashCode() + Y.GetHashCode() + Z.GetHashCode() + W.GetHashCode(); + } + + /// + /// Transforms the vector using a quaternion. + /// + /// Vector to transform. + /// Rotation to apply to the vector. + /// Transformed vector. + public static void Transform(ref Vector3 v, ref Quaternion rotation, out Vector3 result) + { + //This operation is an optimized-down version of v' = q * v * q^-1. + //The expanded form would be to treat v as an 'axis only' quaternion + //and perform standard quaternion multiplication. Assuming q is normalized, + //q^-1 can be replaced by a conjugation. + float x2 = rotation.X + rotation.X; + float y2 = rotation.Y + rotation.Y; + float z2 = rotation.Z + rotation.Z; + float xx2 = rotation.X * x2; + float xy2 = rotation.X * y2; + float xz2 = rotation.X * z2; + float yy2 = rotation.Y * y2; + float yz2 = rotation.Y * z2; + float zz2 = rotation.Z * z2; + float wx2 = rotation.W * x2; + float wy2 = rotation.W * y2; + float wz2 = rotation.W * z2; + //Defer the component setting since they're used in computation. + float transformedX = v.X * (1f - yy2 - zz2) + v.Y * (xy2 - wz2) + v.Z * (xz2 + wy2); + float transformedY = v.X * (xy2 + wz2) + v.Y * (1f - xx2 - zz2) + v.Z * (yz2 - wx2); + float transformedZ = v.X * (xz2 - wy2) + v.Y * (yz2 + wx2) + v.Z * (1f - xx2 - yy2); + result.X = transformedX; + result.Y = transformedY; + result.Z = transformedZ; + + } + + /// + /// Transforms the vector using a quaternion. + /// + /// Vector to transform. + /// Rotation to apply to the vector. + /// Transformed vector. + public static Vector3 Transform(Vector3 v, Quaternion rotation) + { + Vector3 toReturn; + Transform(ref v, ref rotation, out toReturn); + return toReturn; + } + + /// + /// Transforms a vector using a quaternion. Specialized for x,0,0 vectors. + /// + /// X component of the vector to transform. + /// Rotation to apply to the vector. + /// Transformed vector. + public static void TransformX(float x, ref Quaternion rotation, out Vector3 result) + { + //This operation is an optimized-down version of v' = q * v * q^-1. + //The expanded form would be to treat v as an 'axis only' quaternion + //and perform standard quaternion multiplication. Assuming q is normalized, + //q^-1 can be replaced by a conjugation. + float y2 = rotation.Y + rotation.Y; + float z2 = rotation.Z + rotation.Z; + float xy2 = rotation.X * y2; + float xz2 = rotation.X * z2; + float yy2 = rotation.Y * y2; + float zz2 = rotation.Z * z2; + float wy2 = rotation.W * y2; + float wz2 = rotation.W * z2; + //Defer the component setting since they're used in computation. + float transformedX = x * (1f - yy2 - zz2); + float transformedY = x * (xy2 + wz2); + float transformedZ = x * (xz2 - wy2); + result.X = transformedX; + result.Y = transformedY; + result.Z = transformedZ; + + } + + /// + /// Transforms a vector using a quaternion. Specialized for 0,y,0 vectors. + /// + /// Y component of the vector to transform. + /// Rotation to apply to the vector. + /// Transformed vector. + public static void TransformY(float y, ref Quaternion rotation, out Vector3 result) + { + //This operation is an optimized-down version of v' = q * v * q^-1. + //The expanded form would be to treat v as an 'axis only' quaternion + //and perform standard quaternion multiplication. Assuming q is normalized, + //q^-1 can be replaced by a conjugation. + float x2 = rotation.X + rotation.X; + float y2 = rotation.Y + rotation.Y; + float z2 = rotation.Z + rotation.Z; + float xx2 = rotation.X * x2; + float xy2 = rotation.X * y2; + float yz2 = rotation.Y * z2; + float zz2 = rotation.Z * z2; + float wx2 = rotation.W * x2; + float wz2 = rotation.W * z2; + //Defer the component setting since they're used in computation. + float transformedX = y * (xy2 - wz2); + float transformedY = y * (1f - xx2 - zz2); + float transformedZ = y * (yz2 + wx2); + result.X = transformedX; + result.Y = transformedY; + result.Z = transformedZ; + + } + + /// + /// Transforms a vector using a quaternion. Specialized for 0,0,z vectors. + /// + /// Z component of the vector to transform. + /// Rotation to apply to the vector. + /// Transformed vector. + public static void TransformZ(float z, ref Quaternion rotation, out Vector3 result) + { + //This operation is an optimized-down version of v' = q * v * q^-1. + //The expanded form would be to treat v as an 'axis only' quaternion + //and perform standard quaternion multiplication. Assuming q is normalized, + //q^-1 can be replaced by a conjugation. + float x2 = rotation.X + rotation.X; + float y2 = rotation.Y + rotation.Y; + float z2 = rotation.Z + rotation.Z; + float xx2 = rotation.X * x2; + float xz2 = rotation.X * z2; + float yy2 = rotation.Y * y2; + float yz2 = rotation.Y * z2; + float wx2 = rotation.W * x2; + float wy2 = rotation.W * y2; + //Defer the component setting since they're used in computation. + float transformedX = z * (xz2 + wy2); + float transformedY = z * (yz2 - wx2); + float transformedZ = z * (1f - xx2 - yy2); + result.X = transformedX; + result.Y = transformedY; + result.Z = transformedZ; + + } + + + /// + /// Multiplies two quaternions. + /// + /// First quaternion to multiply. + /// Second quaternion to multiply. + /// Product of the multiplication. + public static Quaternion operator *(Quaternion a, Quaternion b) + { + Quaternion toReturn; + Multiply(ref a, ref b, out toReturn); + return toReturn; + } + + /// + /// Creates a quaternion from an axis and angle. + /// + /// Axis of rotation. + /// Angle to rotate around the axis. + /// Quaternion representing the axis and angle rotation. + public static Quaternion CreateFromAxisAngle(Vector3 axis, float angle) + { + double halfAngle = angle * 0.5; + double s = Math.Sin(halfAngle); + Quaternion q; + q.X = (float)(axis.X * s); + q.Y = (float)(axis.Y * s); + q.Z = (float)(axis.Z * s); + q.W = (float)Math.Cos(halfAngle); + return q; + } + + /// + /// Creates a quaternion from an axis and angle. + /// + /// Axis of rotation. + /// Angle to rotate around the axis. + /// Quaternion representing the axis and angle rotation. + public static void CreateFromAxisAngle(ref Vector3 axis, float angle, out Quaternion q) + { + double halfAngle = angle * 0.5; + double s = Math.Sin(halfAngle); + q.X = (float)(axis.X * s); + q.Y = (float)(axis.Y * s); + q.Z = (float)(axis.Z * s); + q.W = (float)Math.Cos(halfAngle); + } + + /// + /// Constructs a quaternion from yaw, pitch, and roll. + /// + /// Yaw of the rotation. + /// Pitch of the rotation. + /// Roll of the rotation. + /// Quaternion representing the yaw, pitch, and roll. + public static Quaternion CreateFromYawPitchRoll(float yaw, float pitch, float roll) + { + Quaternion toReturn; + CreateFromYawPitchRoll(yaw, pitch, roll, out toReturn); + return toReturn; + } + + /// + /// Constructs a quaternion from yaw, pitch, and roll. + /// + /// Yaw of the rotation. + /// Pitch of the rotation. + /// Roll of the rotation. + /// Quaternion representing the yaw, pitch, and roll. + public static void CreateFromYawPitchRoll(float yaw, float pitch, float roll, out Quaternion q) + { + double halfRoll = roll * 0.5; + double halfPitch = pitch * 0.5; + double halfYaw = yaw * 0.5; + + double sinRoll = Math.Sin(halfRoll); + double sinPitch = Math.Sin(halfPitch); + double sinYaw = Math.Sin(halfYaw); + + double cosRoll = Math.Cos(halfRoll); + double cosPitch = Math.Cos(halfPitch); + double cosYaw = Math.Cos(halfYaw); + + double cosYawCosPitch = cosYaw * cosPitch; + double cosYawSinPitch = cosYaw * sinPitch; + double sinYawCosPitch = sinYaw * cosPitch; + double sinYawSinPitch = sinYaw * sinPitch; + + q.X = (float)(cosYawSinPitch * cosRoll + sinYawCosPitch * sinRoll); + q.Y = (float)(sinYawCosPitch * cosRoll - cosYawSinPitch * sinRoll); + q.Z = (float)(cosYawCosPitch * sinRoll - sinYawSinPitch * cosRoll); + q.W = (float)(cosYawCosPitch * cosRoll + sinYawSinPitch * sinRoll); + + } + + /// + /// Computes the angle change represented by a normalized quaternion. + /// + /// Quaternion to be converted. + /// Angle around the axis represented by the quaternion. + public static float GetAngleFromQuaternion(ref Quaternion q) + { + float qw = Math.Abs(q.W); + if (qw > 1) + return 0; + return 2 * (float)Math.Acos(qw); + } + + /// + /// Computes the axis angle representation of a normalized quaternion. + /// + /// Quaternion to be converted. + /// Axis represented by the quaternion. + /// Angle around the axis represented by the quaternion. + public static void GetAxisAngleFromQuaternion(ref Quaternion q, out Vector3 axis, out float angle) + { +#if !WINDOWS + axis = new Vector3(); +#endif + float qw = q.W; + if (qw > 0) + { + axis.X = q.X; + axis.Y = q.Y; + axis.Z = q.Z; + } + else + { + axis.X = -q.X; + axis.Y = -q.Y; + axis.Z = -q.Z; + qw = -qw; + } + + float lengthSquared = axis.LengthSquared(); + if (lengthSquared > 1e-14f) + { + Vector3.Divide(ref axis, (float)Math.Sqrt(lengthSquared), out axis); + angle = 2 * (float)Math.Acos(MathHelper.Clamp(qw, -1, 1)); + } + else + { + axis = Toolbox.UpVector; + angle = 0; + } + } + + /// + /// Computes the quaternion rotation between two normalized vectors. + /// + /// First unit-length vector. + /// Second unit-length vector. + /// Quaternion representing the rotation from v1 to v2. + public static void GetQuaternionBetweenNormalizedVectors(ref Vector3 v1, ref Vector3 v2, out Quaternion q) + { + float dot; + Vector3.Dot(ref v1, ref v2, out dot); + //For non-normal vectors, the multiplying the axes length squared would be necessary: + //float w = dot + (float)Math.Sqrt(v1.LengthSquared() * v2.LengthSquared()); + if (dot < -0.9999f) //parallel, opposing direction + { + //If this occurs, the rotation required is ~180 degrees. + //The problem is that we could choose any perpendicular axis for the rotation. It's not uniquely defined. + //The solution is to pick an arbitrary perpendicular axis. + //Project onto the plane which has the lowest component magnitude. + //On that 2d plane, perform a 90 degree rotation. + float absX = Math.Abs(v1.X); + float absY = Math.Abs(v1.Y); + float absZ = Math.Abs(v1.Z); + if (absX < absY && absX < absZ) + q = new Quaternion(0, -v1.Z, v1.Y, 0); + else if (absY < absZ) + q = new Quaternion(-v1.Z, 0, v1.X, 0); + else + q = new Quaternion(-v1.Y, v1.X, 0, 0); + } + else + { + Vector3 axis; + Vector3.Cross(ref v1, ref v2, out axis); + q = new Quaternion(axis.X, axis.Y, axis.Z, dot + 1); + } + q.Normalize(); + } + + //The following two functions are highly similar, but it's a bit of a brain teaser to phrase one in terms of the other. + //Providing both simplifies things. + + /// + /// Computes the rotation from the start orientation to the end orientation such that end = Quaternion.Concatenate(start, relative). + /// + /// Starting orientation. + /// Ending orientation. + /// Relative rotation from the start to the end orientation. + public static void GetRelativeRotation(ref Quaternion start, ref Quaternion end, out Quaternion relative) + { + Quaternion startInverse; + Conjugate(ref start, out startInverse); + Concatenate(ref startInverse, ref end, out relative); + } + + + /// + /// Transforms the rotation into the local space of the target basis such that rotation = Quaternion.Concatenate(localRotation, targetBasis) + /// + /// Rotation in the original frame of reference. + /// Basis in the original frame of reference to transform the rotation into. + /// Rotation in the local space of the target basis. + public static void GetLocalRotation(ref Quaternion rotation, ref Quaternion targetBasis, out Quaternion localRotation) + { + Quaternion basisInverse; + Conjugate(ref targetBasis, out basisInverse); + Concatenate(ref rotation, ref basisInverse, out localRotation); + } + + /// + /// Gets a string representation of the quaternion. + /// + /// String representing the quaternion. + public override string ToString() + { + return "{ X: " + X + ", Y: " + Y + ", Z: " + Z + ", W: " + W + "}"; + } + } +} diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Quaternion.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Quaternion.cs.meta new file mode 100644 index 00000000..d3d9450f --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Quaternion.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c21bcbaf733f058438fdea9536a89825 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Ray.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Ray.cs new file mode 100644 index 00000000..8e5dcc27 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Ray.cs @@ -0,0 +1,188 @@ +using System; + +namespace BEPUutilities +{ + /// + /// Provides XNA-like ray functionality. + /// + public struct Ray + { + /// + /// Starting position of the ray. + /// + public Vector3 Position; + /// + /// Direction in which the ray points. + /// + public Vector3 Direction; + + + /// + /// Constructs a new ray. + /// + /// Starting position of the ray. + /// Direction in which the ray points. + public Ray(Vector3 position, Vector3 direction) + { + this.Position = position; + this.Direction = direction; + } + + + + /// + /// Determines if and when the ray intersects the bounding box. + /// + /// Bounding box to test against. + /// The length along the ray to the impact, if any impact occurs. + /// True if the ray intersects the target, false otherwise. + public bool Intersects(ref BoundingBox boundingBox, out float t) + { + float tmin = 0, tmax = float.MaxValue; + if (Math.Abs(Direction.X) < Toolbox.Epsilon) + { + if (Position.X < boundingBox.Min.X || Position.X > boundingBox.Max.X) + { + //If the ray isn't pointing along the axis at all, and is outside of the box's interval, then it + //can't be intersecting. + t = 0; + return false; + } + } + else + { + var inverseDirection = 1 / Direction.X; + var t1 = (boundingBox.Min.X - Position.X) * inverseDirection; + var t2 = (boundingBox.Max.X - Position.X) * inverseDirection; + if (t1 > t2) + { + float temp = t1; + t1 = t2; + t2 = temp; + } + tmin = Math.Max(tmin, t1); + tmax = Math.Min(tmax, t2); + if (tmin > tmax) + { + t = 0; + return false; + } + } + if (Math.Abs(Direction.Y) < Toolbox.Epsilon) + { + if (Position.Y < boundingBox.Min.Y || Position.Y > boundingBox.Max.Y) + { + //If the ray isn't pointing along the axis at all, and is outside of the box's interval, then it + //can't be intersecting. + t = 0; + return false; + } + } + else + { + var inverseDirection = 1 / Direction.Y; + var t1 = (boundingBox.Min.Y - Position.Y) * inverseDirection; + var t2 = (boundingBox.Max.Y - Position.Y) * inverseDirection; + if (t1 > t2) + { + float temp = t1; + t1 = t2; + t2 = temp; + } + tmin = Math.Max(tmin, t1); + tmax = Math.Min(tmax, t2); + if (tmin > tmax) + { + t = 0; + return false; + } + } + if (Math.Abs(Direction.Z) < Toolbox.Epsilon) + { + if (Position.Z < boundingBox.Min.Z || Position.Z > boundingBox.Max.Z) + { + //If the ray isn't pointing along the axis at all, and is outside of the box's interval, then it + //can't be intersecting. + t = 0; + return false; + } + } + else + { + var inverseDirection = 1 / Direction.Z; + var t1 = (boundingBox.Min.Z - Position.Z) * inverseDirection; + var t2 = (boundingBox.Max.Z - Position.Z) * inverseDirection; + if (t1 > t2) + { + float temp = t1; + t1 = t2; + t2 = temp; + } + tmin = Math.Max(tmin, t1); + tmax = Math.Min(tmax, t2); + if (tmin > tmax) + { + t = 0; + return false; + } + } + t = tmin; + return true; + } + + /// + /// Determines if and when the ray intersects the bounding box. + /// + /// Bounding box to test against. + /// The length along the ray to the impact, if any impact occurs. + /// True if the ray intersects the target, false otherwise. + public bool Intersects(BoundingBox boundingBox, out float t) + { + return Intersects(ref boundingBox, out t); + } + + /// + /// Determines if and when the ray intersects the plane. + /// + /// Plane to test against. + /// The length along the ray to the impact, if any impact occurs. + /// True if the ray intersects the target, false otherwise. + public bool Intersects(ref Plane plane, out float t) + { + float velocity; + Vector3.Dot(ref Direction, ref plane.Normal, out velocity); + if (Math.Abs(velocity) < Toolbox.Epsilon) + { + t = 0; + return false; + } + float distanceAlongNormal; + Vector3.Dot(ref Position, ref plane.Normal, out distanceAlongNormal); + distanceAlongNormal += plane.D; + t = -distanceAlongNormal / velocity; + return t >= -Toolbox.Epsilon; + } + + /// + /// Determines if and when the ray intersects the plane. + /// + /// Plane to test against. + /// The length along the ray to the impact, if any impact occurs. + /// True if the ray intersects the target, false otherwise. + public bool Intersects(Plane plane, out float t) + { + return Intersects(ref plane, out t); + } + + /// + /// Computes a point along a ray given the length along the ray from the ray position. + /// + /// Length along the ray from the ray position in terms of the ray's direction. + /// Point along the ray at the given location. + public void GetPointOnRay(float t, out Vector3 v) + { + Vector3.Multiply(ref Direction, t, out v); + Vector3.Add(ref v, ref Position, out v); + } + } +} diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Ray.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Ray.cs.meta new file mode 100644 index 00000000..a6e24b35 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Ray.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 270ef40bcd0b8eb46abfceb17b1f2e2b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/RayHit.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/RayHit.cs new file mode 100644 index 00000000..1f60e95a --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/RayHit.cs @@ -0,0 +1,22 @@ +namespace BEPUutilities +{ + /// + /// Contains ray hit data. + /// + public struct RayHit + { + /// + /// Location of the ray hit. + /// + public Vector3 Location; + /// + /// Normal of the ray hit. + /// + public Vector3 Normal; + /// + /// T parameter of the ray hit. + /// The ray hit location is equal to the ray origin added to the ray direction multiplied by T. + /// + public float T; + } +} diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/RayHit.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/RayHit.cs.meta new file mode 100644 index 00000000..0e90286a --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/RayHit.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 482da2f1913e8a44c8f72c1d66cac172 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement.meta new file mode 100644 index 00000000..79de9c03 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d43d22a341d51184aa62ac19213b84de +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/BufferPool.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/BufferPool.cs new file mode 100644 index 00000000..f1b2f39f --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/BufferPool.cs @@ -0,0 +1,165 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; + +namespace BEPUutilities.ResourceManagement +{ + /// + /// Provides storage for reusable arrays with power-of-2 lengths. + /// + /// Type of resource contained in the buffers. + /// This is designed for use with unsafe code. It often sacrifices safety for performance or simplicity. + /// Running with DEBUG defined will catch some misuse, but otherwise many invalid usages will be allowed. + public class BufferPool + { + /// + /// Defines the maximum buffer size. Maximum length is 2^MaximumPoolIndex. + /// + private const int MaximumPoolIndex = 30; + private Stack[] pools = new Stack[MaximumPoolIndex + 1]; +#if DEBUG + private HashSet outstandingResources = new HashSet(); +#endif + + /// + /// Constructs a new resource buffer pool. + /// + public BufferPool() + { + for (int i = 0; i < pools.Length; ++i) + { + pools[i] = new Stack(); + } + } + + /// + /// Gets the exponent associated with the buffer pool which would hold the given count of elements. + /// + /// Element count to compute the batch index of. + /// Exponent associated with the buffer pool which would hold the given count of elements. + public static int GetPoolIndex(int count) + { + Debug.Assert(count >= 0 && count < (1 << MaximumPoolIndex), "Count must be from 0 to " + ((1 << MaximumPoolIndex) - 1) + ", inclusive."); + //We want the buffer which would fully contain the count, so it should be effectively Ceiling(Log(count)). + //Doubling the value (and subtracting one, to avoid the already-a-power-of-two case) takes care of this. + count = ((count > 0 ? count : 1) << 1) - 1; + int log = 0; + if ((count & 0xFFFF0000) > 0) + { + count >>= 16; + log |= 16; + } + if ((count & 0xFF00) > 0) + { + count >>= 8; + log |= 8; + } + if ((count & 0xF0) > 0) + { + count >>= 4; + log |= 4; + } + if ((count & 0xC) > 0) + { + count >>= 2; + log |= 2; + } + if ((count & 0x2) > 0) + { + log |= 1; + } + return log; + } + + /// + /// Takes a buffer from the given pool index. + /// + /// Pool to grab a buffer from. + /// Pool of the requested size. + public virtual T[] TakeFromPoolIndex(int poolIndex) + { + Debug.Assert(poolIndex >= 0 && poolIndex <= MaximumPoolIndex, "Pool index should be from 0 to " + MaximumPoolIndex + " inclusive."); + T[] toReturn; + if (pools[poolIndex].Count > 0) + { + toReturn = pools[poolIndex].Pop(); + } + else + toReturn = new T[1 << poolIndex]; +#if DEBUG + outstandingResources.Add(toReturn); +#endif + return toReturn; + } + + /// + /// Grabs a buffer of sufficient size to hold the given number of elements. + /// + /// Number of elements that must be able to fit in the buffer. + /// Buffer of sufficient size to hold the given number of elements. + public T[] Take(int minimumSize) + { + return TakeFromPoolIndex(GetPoolIndex(minimumSize)); + } + + + /// + /// Releases a buffer back to the pool without clearing it out. + /// + /// Buffer to return to the pool. + /// Pool index associated with the buffer. + public virtual void GiveBack(T[] buffer, int poolIndex) + { +#if DEBUG + Debug.Assert(outstandingResources.Remove(buffer), "The buffer being returned must come from this pool, and buffers should only be returned once."); + if (CheckIfReturnedBuffersAreClean) + { + for (int i = 0; i < buffer.Length; ++i) + { + Debug.Assert(EqualityComparer.Default.Equals(buffer[i], default(T)), "Buffers being returned to the pool should be clean. Every index should hold default(T)."); + } + } +#endif + pools[poolIndex].Push(buffer); + } + + /// + /// Gives a buffer back to the pool without clearing it out. + /// + /// Buffer to return to the pool. + public void GiveBack(T[] buffer) + { + GiveBack(buffer, GetPoolIndex(buffer.Length)); + } + + /// + /// Ensures that there are at least the specified number of buffers allocated for the given batch index. + /// + /// Pool index to ensure the count of. + /// Minimum number of elements that need to exist in the specified pool. + public void EnsureBufferCount(int poolIndex, int count) + { + while (pools[poolIndex].Count < count) + pools[poolIndex].Push(new T[1 << poolIndex]); + } + + /// + /// Drops all references held by the pool. + /// + public void Clear() + { + for (int i = 0; i <= MaximumPoolIndex; ++i) + { + pools[i].Clear(); + } + } + + +#if DEBUG + /// + /// Gets or sets whether to check buffers for cleanliness when they are returned when compiled in debug mode. A clean buffer is defined as one that contains all default values. + /// + public bool CheckIfReturnedBuffersAreClean { get; set; } +#endif + } +} diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/BufferPool.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/BufferPool.cs.meta new file mode 100644 index 00000000..e2ccee66 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/BufferPool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ee245a510b5caad45a0a7e0299c8510a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/BufferPools.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/BufferPools.cs new file mode 100644 index 00000000..22493a17 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/BufferPools.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BEPUutilities.ResourceManagement +{ + /// + /// Contains locking and thread static buffer pools for the specified type. + /// + /// Type of element in the buffers stored in the pools. + public static class BufferPools + { + /// + /// Gets a buffer pool for this type which provides thread safe resource acquisition and return. + public static LockingBufferPool Locking { get; private set; } + + [ThreadStatic] + private static BufferPool threadPool; + /// + /// Gets the pool associated with this thread. + /// + public static BufferPool Thread + { + get { return threadPool ?? (threadPool = new BufferPool()); } + } + + static BufferPools() + { + Locking = new LockingBufferPool(); + } + } +} diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/BufferPools.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/BufferPools.cs.meta new file mode 100644 index 00000000..e17f075c --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/BufferPools.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3ba00303bfc80c84fb3c06f52c00f5b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/CommonResources.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/CommonResources.cs new file mode 100644 index 00000000..0ec0baf7 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/CommonResources.cs @@ -0,0 +1,132 @@ +using System.Collections.Generic; +using BEPUutilities.DataStructures; +using BEPUutilities; + +namespace BEPUutilities.ResourceManagement +{ + /// + /// Handles allocation and management of commonly used resources. + /// + public static class CommonResources + { + static CommonResources() + { + ResetPools(); + } + + public static void ResetPools() + { + SubPoolIntList = new LockingResourcePool>(); + SubPoolIntSet = new LockingResourcePool>(); + SubPoolFloatList = new LockingResourcePool>(); + SubPoolVectorList = new LockingResourcePool>(); + SubPoolRayHitList = new LockingResourcePool>(); + + } + + static LockingResourcePool> SubPoolRayHitList; + static LockingResourcePool> SubPoolIntList; + static LockingResourcePool> SubPoolIntSet; + static LockingResourcePool> SubPoolFloatList; + static LockingResourcePool> SubPoolVectorList; + + /// + /// Retrieves a ray hit list from the resource pool. + /// + /// Empty ray hit list. + public static RawList GetRayHitList() + { + return SubPoolRayHitList.Take(); + } + + /// + /// Returns a resource to the pool. + /// + /// List to return. + public static void GiveBack(RawList list) + { + list.Clear(); + SubPoolRayHitList.GiveBack(list); + } + + + + /// + /// Retrieves a int list from the resource pool. + /// + /// Empty int list. + public static RawList GetIntList() + { + return SubPoolIntList.Take(); + } + + /// + /// Returns a resource to the pool. + /// + /// List to return. + public static void GiveBack(RawList list) + { + list.Clear(); + SubPoolIntList.GiveBack(list); + } + + /// + /// Retrieves a int hash set from the resource pool. + /// + /// Empty int set. + public static HashSet GetIntSet() + { + return SubPoolIntSet.Take(); + } + + /// + /// Returns a resource to the pool. + /// + /// Set to return. + public static void GiveBack(HashSet set) + { + set.Clear(); + SubPoolIntSet.GiveBack(set); + } + + /// + /// Retrieves a float list from the resource pool. + /// + /// Empty float list. + public static RawList GetFloatList() + { + return SubPoolFloatList.Take(); + } + + /// + /// Returns a resource to the pool. + /// + /// List to return. + public static void GiveBack(RawList list) + { + list.Clear(); + SubPoolFloatList.GiveBack(list); + } + + /// + /// Retrieves a Vector3 list from the resource pool. + /// + /// Empty Vector3 list. + public static RawList GetVectorList() + { + return SubPoolVectorList.Take(); + } + + /// + /// Returns a resource to the pool. + /// + /// List to return. + public static void GiveBack(RawList list) + { + list.Clear(); + SubPoolVectorList.GiveBack(list); + } + + + } +} \ No newline at end of file diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/CommonResources.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/CommonResources.cs.meta new file mode 100644 index 00000000..d325b90b --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/CommonResources.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d7900f96bda861a4890932249e16db27 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/LockingBufferPool.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/LockingBufferPool.cs new file mode 100644 index 00000000..1ea9b752 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/LockingBufferPool.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; + +namespace BEPUutilities.ResourceManagement +{ + /// + /// Provides storage for reusable arrays with power-of-2 lengths. + /// Provides thread safe TakeFromPoolIndex, Take, and GiveBack implementations. + /// + /// Type of resource contained in the buffers. + public class LockingBufferPool : BufferPool + { + private SpinLock locker = new SpinLock(); + + /// + /// Takes a buffer from the given pool index. + /// + /// Pool to grab a buffer from. + /// Pool of the requested size. + public override T[] TakeFromPoolIndex(int poolIndex) + { + locker.Enter(); + var toReturn = base.TakeFromPoolIndex(poolIndex); + locker.Exit(); + return toReturn; + } + + /// + /// Releases a buffer back to the pool without clearing it out. + /// + /// Buffer to return to the pool. + /// Pool index associated with the buffer. + public override void GiveBack(T[] buffer, int poolIndex) + { + locker.Enter(); + base.GiveBack(buffer, poolIndex); + locker.Exit(); + } + + + } +} diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/LockingBufferPool.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/LockingBufferPool.cs.meta new file mode 100644 index 00000000..cbd425bc --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/LockingBufferPool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9c69104028f6f4f4f8711a4ef7e131b8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/LockingResourcePool.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/LockingResourcePool.cs new file mode 100644 index 00000000..7345c4a8 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/LockingResourcePool.cs @@ -0,0 +1,115 @@ +using System; +using BEPUutilities.DataStructures; + +namespace BEPUutilities.ResourceManagement +{ + /// + /// Uses a spinlock to safely access resources. + /// + /// Type of object to store in the pool. + public class LockingResourcePool : ResourcePool where T : class, new() + { + private readonly ConcurrentDeque stack; + + /// + /// Constructs a new thread-unsafe resource pool. + /// + /// Number of resources to include in the pool by default. + /// Function to initialize new instances in the resource pool with. + public LockingResourcePool(int initialResourceCount, Action initializer) + { + InstanceInitializer = initializer; + stack = new ConcurrentDeque(initialResourceCount); + Initialize(initialResourceCount); + } + + /// + /// Constructs a new thread-unsafe resource pool. + /// + /// Number of resources to include in the pool by default. + public LockingResourcePool(int initialResourceCount) + : this(initialResourceCount, null) + { + } + + /// + /// Constructs a new thread-unsafe resource pool. + /// + public LockingResourcePool() + : this(10) + { + } + + /// + /// Gets the number of resources in the pool. + /// Even if the resource count hits 0, resources + /// can still be requested; they will be allocated + /// dynamically. + /// + public override int Count + { + get { return stack.Count; } + } + + /// + /// Gives an item back to the resource pool. + /// + /// Item to return. + public override void GiveBack(T item) + { + stack.Enqueue(item); + } + + + /// + /// Initializes the pool with some resources. + /// Throws away excess resources. + /// + /// Number of resources to include. + public override void Initialize(int initialResourceCount) + { + while (stack.Count > initialResourceCount) + { + T toRemove; + stack.TryUnsafeDequeueFirst(out toRemove); + } + int length = stack.lastIndex - stack.firstIndex + 1; //lastIndex is inclusive, so add 1. + if (InstanceInitializer != null) + for (int i = 0; i < length; i++) + { + InstanceInitializer(stack.array[(stack.firstIndex + i) % stack.array.Length]); + } + while (stack.Count < initialResourceCount) + { + stack.UnsafeEnqueue(CreateNewResource()); + } + } + + /// + /// Takes an item from the resource pool. + /// + /// Item to take. + public override T Take() + { + T toTake; + if (stack.TryDequeueFirst(out toTake)) + { + return toTake; + } + + return CreateNewResource(); + } + + /// + /// Clears out the resource pool. + /// + public override void Clear() + { + while (stack.Count > 0) + { + T item; + stack.TryDequeueFirst(out item); + } + } + } +} \ No newline at end of file diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/LockingResourcePool.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/LockingResourcePool.cs.meta new file mode 100644 index 00000000..635b5b10 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/LockingResourcePool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cda910c2e03273c4c95b98437c5df540 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/ResourcePool.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/ResourcePool.cs new file mode 100644 index 00000000..cecf462d --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/ResourcePool.cs @@ -0,0 +1,62 @@ +using System; + +namespace BEPUutilities.ResourceManagement +{ + /// + /// Manages a cache of a type of resource. + /// + /// Type of object to pool. + public abstract class ResourcePool where T : class, new() + { + /// + /// Gets the number of resources in the pool. + /// Even if the resource count hits 0, resources + /// can still be requested; they will be allocated + /// dynamically. + /// + public abstract int Count { get; } + + /// + /// Gets or sets the function that configures new instances. + /// This is only called once per object created for the resource pool. + /// + public Action InstanceInitializer { get; set; } + + /// + /// Gives an item back to the resource pool. + /// + /// Item to return. + public abstract void GiveBack(T item); + + /// + /// Initializes the pool with some resources. + /// Throws away excess resources. + /// + /// Number of resources to include. + public abstract void Initialize(int initialResourceCount); + + /// + /// Takes an item from the resource pool. + /// + /// Item to take. + public abstract T Take(); + + /// + /// Creates and returns a new resource. + /// + /// New resource. + protected T CreateNewResource() + { + var toReturn = new T(); + if (InstanceInitializer != null) + InstanceInitializer(toReturn); + return toReturn; + } + + /// + /// Removes all elements from the pool. + /// + public abstract void Clear(); + + } +} \ No newline at end of file diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/ResourcePool.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/ResourcePool.cs.meta new file mode 100644 index 00000000..9e280831 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/ResourcePool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c47161f69307edc47bb5621c53df1318 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/UnsafeResourcePool.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/UnsafeResourcePool.cs new file mode 100644 index 00000000..a68c825a --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/UnsafeResourcePool.cs @@ -0,0 +1,111 @@ +using System; +using System.Collections.Generic; + +namespace BEPUutilities.ResourceManagement +{ + /// + /// Manages a resource type, but performs no locking to handle asynchronous access. + /// + /// Type of object to store in the pool. + public class UnsafeResourcePool : ResourcePool where T : class, new() + { + private readonly Stack stack; + + /// + /// Constructs a new locking resource pool. + /// + /// Number of resources to include in the pool by default. + /// Function to initialize new instances in the resource pool with. + public UnsafeResourcePool(int initialResourceCount, Action initializer) + { + InstanceInitializer = initializer; + stack = new Stack(initialResourceCount); + Initialize(initialResourceCount); + } + + + /// + /// Constructs a new locking resource pool. + /// + /// Number of resources to include in the pool by default. + public UnsafeResourcePool(int initialResourceCount) + : this(initialResourceCount, null) + { + } + + /// + /// Constructs a new locking resource pool. + /// + public UnsafeResourcePool() + : this(10) + { + } + + /// + /// Gets the number of resources in the pool. + /// Even if the resource count hits 0, resources + /// can still be requested; they will be allocated + /// dynamically. + /// + public override int Count + { + get { return stack.Count; } + } + + /// + /// Gives an item back to the resource pool. + /// + /// Item to return. + public override void GiveBack(T item) + { + stack.Push(item); + } + + + /// + /// Initializes the pool with some resources. + /// Throws away excess resources. + /// + /// Number of resources to include. + public override void Initialize(int initialResourceCount) + { + while (stack.Count > initialResourceCount) + { + stack.Pop(); + } + if (InstanceInitializer != null) + foreach (T t in stack) + { + InstanceInitializer(t); + } + while (stack.Count < initialResourceCount) + { + stack.Push(CreateNewResource()); + } + } + + /// + /// Takes an item from the resource pool. + /// + /// Item to take. + public override T Take() + { + if (stack.Count > 0) + { + return stack.Pop(); + } + else + { + return CreateNewResource(); + } + } + + /// + /// Clears out the resource pool. + /// + public override void Clear() + { + stack.Clear(); + } + } +} \ No newline at end of file diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/UnsafeResourcePool.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/UnsafeResourcePool.cs.meta new file mode 100644 index 00000000..1a3d19f2 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/ResourceManagement/UnsafeResourcePool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e9612326a6af6cc41825252b66c1108d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/RigidTransform.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/RigidTransform.cs new file mode 100644 index 00000000..ed075173 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/RigidTransform.cs @@ -0,0 +1,160 @@ + + +namespace BEPUutilities +{ + /// + /// Transform composed of a rotation and translation. + /// + public struct RigidTransform + { + /// + /// Translation component of the transform. + /// + public Vector3 Position; + /// + /// Rotation component of the transform. + /// + public Quaternion Orientation; + + /// + /// Constructs a new rigid transform. + /// + ///Translation component of the transform. + ///Rotation component of the transform. + public RigidTransform(Vector3 position, Quaternion orientation) + { + Position = position; + Orientation = orientation; + } + + /// + /// Constructs a new rigid transform. + /// + ///Translation component of the transform. + public RigidTransform(Vector3 position) + { + Position = position; + Orientation = Quaternion.Identity; + } + + /// + /// Constructs a new rigid transform. + /// + ///Rotation component of the transform. + public RigidTransform(Quaternion orienation) + { + Position = new Vector3(); + Orientation = orienation; + } + + /// + /// Gets the orientation matrix created from the orientation of the rigid transform. + /// + public Matrix OrientationMatrix + { + get + { + Matrix toReturn; + Matrix.CreateFromQuaternion(ref Orientation, out toReturn); + return toReturn; + } + } + /// + /// Gets the 4x4 matrix created from the rigid transform. + /// + public Matrix Matrix + { + get + { + Matrix toReturn; + Matrix.CreateFromQuaternion(ref Orientation, out toReturn); + toReturn.Translation = Position; + return toReturn; + } + } + + + + /// + /// Gets the identity rigid transform. + /// + public static RigidTransform Identity + { + get + { + var t = new RigidTransform {Orientation = Quaternion.Identity, Position = new Vector3()}; + return t; + } + } + + /// + /// Inverts a rigid transform. + /// + /// Transform to invert. + /// Inverse of the transform. + public static void Invert(ref RigidTransform transform, out RigidTransform inverse) + { + Quaternion.Conjugate(ref transform.Orientation, out inverse.Orientation); + Quaternion.Transform(ref transform.Position, ref inverse.Orientation, out inverse.Position); + Vector3.Negate(ref inverse.Position, out inverse.Position); + } + + /// + /// Concatenates a rigid transform with another rigid transform. + /// + ///The first rigid transform. + ///The second rigid transform. + ///Concatenated rigid transform. + public static void Multiply(ref RigidTransform a, ref RigidTransform b, out RigidTransform combined) + { + Vector3 intermediate; + Quaternion.Transform(ref a.Position, ref b.Orientation, out intermediate); + Vector3.Add(ref intermediate, ref b.Position, out combined.Position); + Quaternion.Concatenate(ref a.Orientation, ref b.Orientation, out combined.Orientation); + + } + + /// + /// Concatenates a rigid transform with another rigid transform's inverse. + /// + ///The first rigid transform. + ///The second rigid transform whose inverse will be concatenated to the first. + ///Combined rigid transform. + public static void MultiplyByInverse(ref RigidTransform a, ref RigidTransform b, out RigidTransform combinedTransform) + { + Invert(ref b, out combinedTransform); + Multiply(ref a, ref combinedTransform, out combinedTransform); + } + + /// + /// Transforms a position by a rigid transform. + /// + ///Position to transform. + ///Transform to apply. + ///Transformed position. + public static void Transform(ref Vector3 position, ref RigidTransform transform, out Vector3 result) + { + Vector3 intermediate; + Quaternion.Transform(ref position, ref transform.Orientation, out intermediate); + Vector3.Add(ref intermediate, ref transform.Position, out result); + } + + + /// + /// Transforms a position by a rigid transform's inverse. + /// + ///Position to transform. + ///Transform to invert and apply. + ///Transformed position. + public static void TransformByInverse(ref Vector3 position, ref RigidTransform transform, out Vector3 result) + { + Quaternion orientation; + Vector3 intermediate; + Vector3.Subtract(ref position, ref transform.Position, out intermediate); + Quaternion.Conjugate(ref transform.Orientation, out orientation); + Quaternion.Transform(ref intermediate, ref orientation, out result); + } + + + } +} diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/RigidTransform.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/RigidTransform.cs.meta new file mode 100644 index 00000000..e8e05ec5 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/RigidTransform.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 800f4e9e7c9b950439566e719f59f584 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/SpinLock.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/SpinLock.cs new file mode 100644 index 00000000..b5f98aa8 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/SpinLock.cs @@ -0,0 +1,73 @@ +using System; +using System.Threading; + + +namespace BEPUutilities +{ + /// + /// Synchronizes using a busy wait. Take care when using this; if the critical section is long or there's any doubt about the use of a busy wait, consider using Monitor locks or other approaches instead. + /// Replaces the .NET SpinLock on PC and provides its functionality on the Xbox360. + /// + public class SpinLock + { + private const int MaximumSpinWait = 15; + private const int SleepInterval = 10; + private int owner = -1; + + + /// + /// Enters the critical section. A thread cannot attempt to enter the spinlock if it already owns the spinlock. + /// + public void Enter() + { + int count = 0; + while (Interlocked.CompareExchange(ref owner, 0, -1) != -1) + { + //Lock is owned by someone else. + count++; + WaitBriefly(ref count); + } + //It's my lock now! + } + + /// + /// Attempts to enters the critical section. A thread cannot attempt to enter the spinlock if it already owns the spinlock. + /// + public bool TryEnter() + { + return Interlocked.CompareExchange(ref owner, 0, -1) == -1; + } + + /// + /// Exits the critical section. This can only be safely called from the same + /// thread of execution after a corresponding Enter. + /// + public void Exit() + { + //To be safe, technically should check the identity of the exiter. + //But since this is a very low-level, restricted access class, + //assume that enter has to succeed before exit is tried. + owner = -1; + } + + internal void WaitBriefly(ref int attempt) + { + if (attempt == SleepInterval) + { +#if WINDOWS + Thread.Yield(); +#else + Thread.Sleep(0); +#endif + //TODO: Thread.Yield on windows? + //Check multithreaded bookmarks performance conscious + //and .netspinlock + attempt -= SleepInterval; + } + else + { + Thread.SpinWait(Math.Min(3 << attempt, MaximumSpinWait)); + } + } + } +} \ No newline at end of file diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/SpinLock.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/SpinLock.cs.meta new file mode 100644 index 00000000..63c5330e --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/SpinLock.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b8376e993acea2248aa1d63bd605b4a2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Threading.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Threading.meta new file mode 100644 index 00000000..7ac4078d --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Threading.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a98a4a212f1acbd4d8fb9b87f36c3d8a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Threading/IParallelLooper.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Threading/IParallelLooper.cs new file mode 100644 index 00000000..882e8924 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Threading/IParallelLooper.cs @@ -0,0 +1,31 @@ +using System; + +namespace BEPUutilities.Threading +{ + + /// + /// Provides a multithreaded for loop interface. + /// + public interface IParallelLooper + { + + /// + /// Loops from the starting index (inclusive) to the ending index (exclusive), calling the loopBody at each iteration. + /// The forLoop function will not return until all iterations are complete. + /// This is meant to be used in a 'fork-join' model; only a single thread should be running a forLoop + /// at any time. + /// + /// Inclusive starting index. + /// Exclusive ending index. + /// Function that handles an individual iteration of the loop. + void ForLoop(int startIndex, int endIndex, Action loopBody); + + /// + /// Gets the number of threads available to the loop. + /// This is used to configure job sizes where applicable. + /// It does not have to be exactly correct; an estimate will work. + /// Better estimates should result in better performance. + /// + int ThreadCount { get; } + } +} \ No newline at end of file diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Threading/IParallelLooper.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Threading/IParallelLooper.cs.meta new file mode 100644 index 00000000..eb969f3f --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Threading/IParallelLooper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2a0b42350215cc446b9338e3d630e7a4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Threading/ParallelLoopWorker.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Threading/ParallelLoopWorker.cs new file mode 100644 index 00000000..558031a0 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Threading/ParallelLoopWorker.cs @@ -0,0 +1,100 @@ +using System; +using System.Threading; + +namespace BEPUutilities.Threading +{ + internal class ParallelLoopWorker : IDisposable + { + private readonly ParallelLooper manager; + internal bool disposed; + internal object disposedLocker = new object(); + internal int finalIndex; + + internal AutoResetEvent getToWork; + + internal int iterationsPerSteal; + private Thread thread; + private Action threadStart; + + internal ParallelLoopWorker(ParallelLooper manager, Action threadStart) + { + this.manager = manager; + this.threadStart = threadStart; + + getToWork = new AutoResetEvent(false); + + thread = new Thread(Work) { IsBackground = true }; + thread.Start(); + } + + + + + + internal void Work() + { + if (threadStart != null) + { + threadStart(); + } + threadStart = null; + + while (true) + { + //When the owning ParallelLooper is told to start a loop, it will notify the worker via this signal. + getToWork.WaitOne(); + if (manager.currentLoopBody == null) + { + //Woops, looks like it's time for me to die. + manager.OnWorkerFinish(); + return; + } + + while (manager.jobIndex <= manager.maxJobIndex) + { + //Claim a piece of job. + int jobIndex = Interlocked.Increment(ref manager.jobIndex); + //The job interval. + int endIndex = jobIndex * iterationsPerSteal; + int beginIndex = endIndex - iterationsPerSteal; + + //Do the job piece. Make sure you don't do more than exists in the list itself. + for (int i = beginIndex; i < endIndex && i < finalIndex; i++) + { + manager.currentLoopBody(i); + } + } //this is not 'thread safe' but the result of the unsafety is a quick fail in the worst case. + + manager.OnWorkerFinish(); + } + } + + + + /// + /// Disposes the worker. + /// + public void Dispose() + { + lock (disposedLocker) + { + if (!disposed) + { + disposed = true; + getToWork.Dispose(); + getToWork = null; + thread = null; + GC.SuppressFinalize(this); + } + } + } + + /// + /// Releases resources used by the object. + /// + ~ParallelLoopWorker() + { + Dispose(); + } + } +} \ No newline at end of file diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Threading/ParallelLoopWorker.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Threading/ParallelLoopWorker.cs.meta new file mode 100644 index 00000000..e4d1cde2 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Threading/ParallelLoopWorker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8722fcc3d5292474d8bbc43f90a276ca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Threading/ParallelLooper.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Threading/ParallelLooper.cs new file mode 100644 index 00000000..87b24f59 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Threading/ParallelLooper.cs @@ -0,0 +1,187 @@ +using System; +using System.Collections.Generic; +using System.Threading; + +namespace BEPUutilities.Threading +{ + /// + /// Manages parallel for loops. + /// Cannot handle general task-based parallelism. + /// + public class ParallelLooper : IParallelLooper, IDisposable + { + private readonly AutoResetEvent loopFinished; + private int workerCount; + + internal List workers = new List(); + + internal int currentBeginIndex, currentEndIndex; + internal Action currentLoopBody; + internal int iterationsPerSteal; + + /// + /// Gets or sets the minimum number of tasks to be allocated to each thread + /// per loop. + /// + public int MinimumTasksPerThread + { + get { return minimumTasksPerThread; } + set { minimumTasksPerThread = value; } + } + + /// + /// Gets or sets the maximum number of loop iterations + /// per individual task. + /// + public int MaximumIterationsPerTask + { + get { return maximumIterationsPerTask; } + set { maximumIterationsPerTask = value; } + } + +#if WINDOWS + private int minimumTasksPerThread = 3; + private int maximumIterationsPerTask = 80; +#else + int minimumTasksPerThread = 3; + int maximumIterationsPerTask = 80; +#endif + internal int jobIndex; + internal int maxJobIndex; + + /// + /// Constructs a new parallel loop manager. + /// + public ParallelLooper() + { + loopFinished = new AutoResetEvent(false); + } + + /// + /// Gets the number of threads used by the looper. + /// + public int ThreadCount + { + get { return workers.Count; } + } + + /// + /// Adds a thread to the manager. + /// + public void AddThread() + { + AddThread(null); + } + + /// + /// Adds a thread to the manager. + /// + /// Initialization to run on the worker thread. + public void AddThread(Action threadStart) + { + workers.Add(new ParallelLoopWorker(this, threadStart)); + } + + /// + /// Removes a thread from the manager. + /// + public void RemoveThread() + { + if (workers.Count > 0) + { + lock (workers[0].disposedLocker) + { + if (!workers[0].disposed) + { + currentLoopBody = null; + workerCount = 1; + workers[0].getToWork.Set(); + loopFinished.WaitOne(); + workers[0].Dispose(); + } + } + workers.RemoveAt(0); + } + } + + /// + /// Iterates over the interval. + /// + /// Starting index of the iteration. + /// Ending index of the iteration. + /// Function to call on each iteration. + public void ForLoop(int beginIndex, int endIndex, Action loopBody) + { + //CANNOT CALL THIS WHILE BUSY!!!! ASSUME THAT IS GUARANTEED. + //Compute intervals for each worker. + + workerCount = workers.Count; + + //TODO: The job splitting could be tuned possibly. + int iterationCount = endIndex - beginIndex; + int tasksPerThread = Math.Max(minimumTasksPerThread, iterationCount / maximumIterationsPerTask); + int taskSubdivisions = workerCount * tasksPerThread; + + currentBeginIndex = beginIndex; + currentEndIndex = endIndex; + currentLoopBody = loopBody; + iterationsPerSteal = Math.Max(1, iterationCount / taskSubdivisions); + jobIndex = 0; + float maxJobs = iterationCount / (float) iterationsPerSteal; + if (maxJobs % 1 == 0) + maxJobIndex = (int) maxJobs; + else + maxJobIndex = 1 + (int) maxJobs; + + for (int i = 0; i < workers.Count; i++) + { + workers[i].finalIndex = endIndex; + workers[i].iterationsPerSteal = iterationsPerSteal; + workers[i].getToWork.Set(); + } + + loopFinished.WaitOne(); + } + + internal void OnWorkerFinish() + { + if (Interlocked.Decrement(ref workerCount) == 0) + loopFinished.Set(); + } + + + private bool disposed; + private readonly object disposedLocker = new object(); + + /// + /// Releases resources used by the object. + /// + public void Dispose() + { + lock (disposedLocker) + { + if (!disposed) + { + disposed = true; + while (workers.Count > 0) + { + RemoveThread(); + } + loopFinished.Close(); + GC.SuppressFinalize(this); + } + } + } + + /// + /// Releases resources used by the object. + /// + ~ParallelLooper() + { + Dispose(); + } + + + + } +} \ No newline at end of file diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Threading/ParallelLooper.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Threading/ParallelLooper.cs.meta new file mode 100644 index 00000000..f85abfc8 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Threading/ParallelLooper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3724cdade6aab8c4086ffdf204cc3195 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Toolbox.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Toolbox.cs new file mode 100644 index 00000000..be1e5848 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Toolbox.cs @@ -0,0 +1,1747 @@ +using System; +using System.Collections.Generic; +using BEPUphysics.CollisionTests; +using BEPUutilities.DataStructures; +using BEPUutilities.ResourceManagement; + +namespace BEPUutilities +{ + //TODO: It would be nice to split and improve this monolith into individually superior, organized components. + + + /// + /// Helper class with many algorithms for intersection testing and 3D math. + /// + public static class Toolbox + { + /// + /// Large tolerance value. Defaults to 1e-5f. + /// + public static float BigEpsilon = 1E-5f; + + /// + /// Tolerance value. Defaults to 1e-7f. + /// + public static float Epsilon = 1E-7f; + + /// + /// Represents an invalid Vector3. + /// + public static readonly Vector3 NoVector = new Vector3(-float.MaxValue, -float.MaxValue, -float.MaxValue); + + /// + /// Reference for a vector with dimensions (0,0,1). + /// + public static Vector3 BackVector = Vector3.Backward; + + /// + /// Reference for a vector with dimensions (0,-1,0). + /// + public static Vector3 DownVector = Vector3.Down; + + /// + /// Reference for a vector with dimensions (0,0,-1). + /// + public static Vector3 ForwardVector = Vector3.Forward; + + /// + /// Refers to the identity quaternion. + /// + public static Quaternion IdentityOrientation = Quaternion.Identity; + + /// + /// Reference for a vector with dimensions (-1,0,0). + /// + public static Vector3 LeftVector = Vector3.Left; + + /// + /// Reference for a vector with dimensions (1,0,0). + /// + public static Vector3 RightVector = Vector3.Right; + + /// + /// Reference for a vector with dimensions (0,1,0). + /// + public static Vector3 UpVector = Vector3.Up; + + /// + /// Matrix containing zeroes for every element. + /// + public static Matrix ZeroMatrix = new Matrix(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + + /// + /// Reference for a vector with dimensions (0,0,0). + /// + public static Vector3 ZeroVector = Vector3.Zero; + + /// + /// Refers to the rigid identity transformation. + /// + public static RigidTransform RigidIdentity = RigidTransform.Identity; + + #region Segment/Ray-Triangle Tests + + /// + /// Determines the intersection between a ray and a triangle. + /// + /// Ray to test. + /// Maximum length to travel in units of the direction's length. + /// First vertex of the triangle. + /// Second vertex of the triangle. + /// Third vertex of the triangle. + /// True if the the triangle was hit on the clockwise face, false otherwise. + /// Hit data of the ray, if any + /// Whether or not the ray and triangle intersect. + public static bool FindRayTriangleIntersection(ref Ray ray, float maximumLength, ref Vector3 a, ref Vector3 b, ref Vector3 c, out bool hitClockwise, out RayHit hit) + { + hitClockwise = false; + hit = new RayHit(); + Vector3 ab, ac; + Vector3.Subtract(ref b, ref a, out ab); + Vector3.Subtract(ref c, ref a, out ac); + + Vector3.Cross(ref ab, ref ac, out hit.Normal); + if (hit.Normal.LengthSquared() < Epsilon) + return false; //Degenerate triangle! + + float d; + Vector3.Dot(ref ray.Direction, ref hit.Normal, out d); + d = -d; + + hitClockwise = d >= 0; + + Vector3 ap; + Vector3.Subtract(ref ray.Position, ref a, out ap); + + Vector3.Dot(ref ap, ref hit.Normal, out hit.T); + hit.T /= d; + if (hit.T < 0 || hit.T > maximumLength) + return false;//Hit is behind origin, or too far away. + + Vector3.Multiply(ref ray.Direction, hit.T, out hit.Location); + Vector3.Add(ref ray.Position, ref hit.Location, out hit.Location); + + // Compute barycentric coordinates + Vector3.Subtract(ref hit.Location, ref a, out ap); + float ABdotAB, ABdotAC, ABdotAP; + float ACdotAC, ACdotAP; + Vector3.Dot(ref ab, ref ab, out ABdotAB); + Vector3.Dot(ref ab, ref ac, out ABdotAC); + Vector3.Dot(ref ab, ref ap, out ABdotAP); + Vector3.Dot(ref ac, ref ac, out ACdotAC); + Vector3.Dot(ref ac, ref ap, out ACdotAP); + + float denom = 1 / (ABdotAB * ACdotAC - ABdotAC * ABdotAC); + float u = (ACdotAC * ABdotAP - ABdotAC * ACdotAP) * denom; + float v = (ABdotAB * ACdotAP - ABdotAC * ABdotAP) * denom; + + return (u >= -Toolbox.BigEpsilon) && (v >= -Toolbox.BigEpsilon) && (u + v <= 1 + Toolbox.BigEpsilon); + + } + + /// + /// Determines the intersection between a ray and a triangle. + /// + /// Ray to test. + /// Maximum length to travel in units of the direction's length. + /// Sidedness of the triangle to test. + /// First vertex of the triangle. + /// Second vertex of the triangle. + /// Third vertex of the triangle. + /// Hit data of the ray, if any + /// Whether or not the ray and triangle intersect. + public static bool FindRayTriangleIntersection(ref Ray ray, float maximumLength, TriangleSidedness sidedness, ref Vector3 a, ref Vector3 b, ref Vector3 c, out RayHit hit) + { + hit = new RayHit(); + Vector3 ab, ac; + Vector3.Subtract(ref b, ref a, out ab); + Vector3.Subtract(ref c, ref a, out ac); + + Vector3.Cross(ref ab, ref ac, out hit.Normal); + if (hit.Normal.LengthSquared() < Epsilon) + return false; //Degenerate triangle! + + float d; + Vector3.Dot(ref ray.Direction, ref hit.Normal, out d); + d = -d; + switch (sidedness) + { + case TriangleSidedness.DoubleSided: + if (d <= 0) //Pointing the wrong way. Flip the normal. + { + Vector3.Negate(ref hit.Normal, out hit.Normal); + d = -d; + } + break; + case TriangleSidedness.Clockwise: + if (d <= 0) //Pointing the wrong way. Can't hit. + return false; + + break; + case TriangleSidedness.Counterclockwise: + if (d >= 0) //Pointing the wrong way. Can't hit. + return false; + + Vector3.Negate(ref hit.Normal, out hit.Normal); + d = -d; + break; + } + + Vector3 ap; + Vector3.Subtract(ref ray.Position, ref a, out ap); + + Vector3.Dot(ref ap, ref hit.Normal, out hit.T); + hit.T /= d; + if (hit.T < 0 || hit.T > maximumLength) + return false;//Hit is behind origin, or too far away. + + Vector3.Multiply(ref ray.Direction, hit.T, out hit.Location); + Vector3.Add(ref ray.Position, ref hit.Location, out hit.Location); + + // Compute barycentric coordinates + Vector3.Subtract(ref hit.Location, ref a, out ap); + float ABdotAB, ABdotAC, ABdotAP; + float ACdotAC, ACdotAP; + Vector3.Dot(ref ab, ref ab, out ABdotAB); + Vector3.Dot(ref ab, ref ac, out ABdotAC); + Vector3.Dot(ref ab, ref ap, out ABdotAP); + Vector3.Dot(ref ac, ref ac, out ACdotAC); + Vector3.Dot(ref ac, ref ap, out ACdotAP); + + float denom = 1 / (ABdotAB * ACdotAC - ABdotAC * ABdotAC); + float u = (ACdotAC * ABdotAP - ABdotAC * ACdotAP) * denom; + float v = (ABdotAB * ACdotAP - ABdotAC * ABdotAP) * denom; + + return (u >= -Toolbox.BigEpsilon) && (v >= -Toolbox.BigEpsilon) && (u + v <= 1 + Toolbox.BigEpsilon); + + } + + /// + /// Finds the intersection between the given segment and the given plane defined by three points. + /// + /// First endpoint of segment. + /// Second endpoint of segment. + /// First vertex of a triangle which lies on the plane. + /// Second vertex of a triangle which lies on the plane. + /// Third vertex of a triangle which lies on the plane. + /// Intersection point. + /// Whether or not the segment intersects the plane. + public static bool GetSegmentPlaneIntersection(Vector3 a, Vector3 b, Vector3 d, Vector3 e, Vector3 f, out Vector3 q) + { + Plane p; + p.Normal = Vector3.Cross(e - d, f - d); + p.D = Vector3.Dot(p.Normal, d); + float t; + return GetSegmentPlaneIntersection(a, b, p, out t, out q); + } + + /// + /// Finds the intersection between the given segment and the given plane. + /// + /// First endpoint of segment. + /// Second enpoint of segment. + /// Plane for comparison. + /// Intersection point. + /// Whether or not the segment intersects the plane. + public static bool GetSegmentPlaneIntersection(Vector3 a, Vector3 b, Plane p, out Vector3 q) + { + float t; + return GetLinePlaneIntersection(ref a, ref b, ref p, out t, out q) && t >= 0 && t <= 1; + } + + /// + /// Finds the intersection between the given segment and the given plane. + /// + /// First endpoint of segment. + /// Second endpoint of segment. + /// Plane for comparison. + /// Interval along segment to intersection. + /// Intersection point. + /// Whether or not the segment intersects the plane. + public static bool GetSegmentPlaneIntersection(Vector3 a, Vector3 b, Plane p, out float t, out Vector3 q) + { + return GetLinePlaneIntersection(ref a, ref b, ref p, out t, out q) && t >= 0 && t <= 1; + } + + /// + /// Finds the intersection between the given line and the given plane. + /// + /// First endpoint of segment defining the line. + /// Second endpoint of segment defining the line. + /// Plane for comparison. + /// Interval along line to intersection (A + t * AB). + /// Intersection point. + /// Whether or not the line intersects the plane. If false, the line is parallel to the plane's surface. + public static bool GetLinePlaneIntersection(ref Vector3 a, ref Vector3 b, ref Plane p, out float t, out Vector3 q) + { + Vector3 ab; + Vector3.Subtract(ref b, ref a, out ab); + float denominator; + Vector3.Dot(ref p.Normal, ref ab, out denominator); + if (denominator < Epsilon && denominator > -Epsilon) + { + //Surface of plane and line are parallel (or very close to it). + q = new Vector3(); + t = float.MaxValue; + return false; + } + float numerator; + Vector3.Dot(ref p.Normal, ref a, out numerator); + t = (p.D - numerator) / denominator; + //Compute the intersection position. + Vector3.Multiply(ref ab, t, out q); + Vector3.Add(ref a, ref q, out q); + return true; + } + + /// + /// Finds the intersection between the given ray and the given plane. + /// + /// Ray to test against the plane. + /// Plane for comparison. + /// Interval along line to intersection (A + t * AB). + /// Intersection point. + /// Whether or not the line intersects the plane. If false, the line is parallel to the plane's surface. + public static bool GetRayPlaneIntersection(ref Ray ray, ref Plane p, out float t, out Vector3 q) + { + float denominator; + Vector3.Dot(ref p.Normal, ref ray.Direction, out denominator); + if (denominator < Epsilon && denominator > -Epsilon) + { + //Surface of plane and line are parallel (or very close to it). + q = new Vector3(); + t = float.MaxValue; + return false; + } + float numerator; + Vector3.Dot(ref p.Normal, ref ray.Position, out numerator); + t = (p.D - numerator) / denominator; + //Compute the intersection position. + Vector3.Multiply(ref ray.Direction, t, out q); + Vector3.Add(ref ray.Position, ref q, out q); + return t >= 0; + } + + #endregion + + #region Point-Triangle Tests + + /// + /// Determines the closest point on a triangle given by points a, b, and c to point p. + /// + /// First vertex of triangle. + /// Second vertex of triangle. + /// Third vertex of triangle. + /// Point for comparison. + /// Closest point on tetrahedron to point. + /// Voronoi region containing the closest point. + public static VoronoiRegion GetClosestPointOnTriangleToPoint(ref Vector3 a, ref Vector3 b, ref Vector3 c, ref Vector3 p, out Vector3 closestPoint) + { + float v, w; + Vector3 ab; + Vector3.Subtract(ref b, ref a, out ab); + Vector3 ac; + Vector3.Subtract(ref c, ref a, out ac); + //Vertex region A? + Vector3 ap; + Vector3.Subtract(ref p, ref a, out ap); + float d1; + Vector3.Dot(ref ab, ref ap, out d1); + float d2; + Vector3.Dot(ref ac, ref ap, out d2); + if (d1 <= 0 && d2 < 0) + { + closestPoint = a; + return VoronoiRegion.A; + } + //Vertex region B? + Vector3 bp; + Vector3.Subtract(ref p, ref b, out bp); + float d3; + Vector3.Dot(ref ab, ref bp, out d3); + float d4; + Vector3.Dot(ref ac, ref bp, out d4); + if (d3 >= 0 && d4 <= d3) + { + closestPoint = b; + return VoronoiRegion.B; + } + //Edge region AB? + float vc = d1 * d4 - d3 * d2; + if (vc <= 0 && d1 >= 0 && d3 <= 0) + { + v = d1 / (d1 - d3); + Vector3.Multiply(ref ab, v, out closestPoint); + Vector3.Add(ref closestPoint, ref a, out closestPoint); + return VoronoiRegion.AB; + } + //Vertex region C? + Vector3 cp; + Vector3.Subtract(ref p, ref c, out cp); + float d5; + Vector3.Dot(ref ab, ref cp, out d5); + float d6; + Vector3.Dot(ref ac, ref cp, out d6); + if (d6 >= 0 && d5 <= d6) + { + closestPoint = c; + return VoronoiRegion.C; + } + //Edge region AC? + float vb = d5 * d2 - d1 * d6; + if (vb <= 0 && d2 >= 0 && d6 <= 0) + { + w = d2 / (d2 - d6); + Vector3.Multiply(ref ac, w, out closestPoint); + Vector3.Add(ref closestPoint, ref a, out closestPoint); + return VoronoiRegion.AC; + } + //Edge region BC? + float va = d3 * d6 - d5 * d4; + if (va <= 0 && (d4 - d3) >= 0 && (d5 - d6) >= 0) + { + w = (d4 - d3) / ((d4 - d3) + (d5 - d6)); + Vector3.Subtract(ref c, ref b, out closestPoint); + Vector3.Multiply(ref closestPoint, w, out closestPoint); + Vector3.Add(ref closestPoint, ref b, out closestPoint); + return VoronoiRegion.BC; + } + //Inside triangle? + float denom = 1 / (va + vb + vc); + v = vb * denom; + w = vc * denom; + Vector3 abv; + Vector3.Multiply(ref ab, v, out abv); + Vector3 acw; + Vector3.Multiply(ref ac, w, out acw); + Vector3.Add(ref a, ref abv, out closestPoint); + Vector3.Add(ref closestPoint, ref acw, out closestPoint); + return VoronoiRegion.ABC; + } + + /// + /// Determines the closest point on a triangle given by points a, b, and c to point p and provides the subsimplex whose voronoi region contains the point. + /// + /// First vertex of triangle. + /// Second vertex of triangle. + /// Third vertex of triangle. + /// Point for comparison. + /// The source of the voronoi region which contains the point. + /// Closest point on tetrahedron to point. + [Obsolete("Used for simplex tests; consider using the PairSimplex and its variants instead for simplex-related testing.")] + public static void GetClosestPointOnTriangleToPoint(ref Vector3 a, ref Vector3 b, ref Vector3 c, ref Vector3 p, RawList subsimplex, out Vector3 closestPoint) + { + subsimplex.Clear(); + float v, w; + Vector3 ab; + Vector3.Subtract(ref b, ref a, out ab); + Vector3 ac; + Vector3.Subtract(ref c, ref a, out ac); + //Vertex region A? + Vector3 ap; + Vector3.Subtract(ref p, ref a, out ap); + float d1; + Vector3.Dot(ref ab, ref ap, out d1); + float d2; + Vector3.Dot(ref ac, ref ap, out d2); + if (d1 <= 0 && d2 < 0) + { + subsimplex.Add(a); + closestPoint = a; + return; + } + //Vertex region B? + Vector3 bp; + Vector3.Subtract(ref p, ref b, out bp); + float d3; + Vector3.Dot(ref ab, ref bp, out d3); + float d4; + Vector3.Dot(ref ac, ref bp, out d4); + if (d3 >= 0 && d4 <= d3) + { + subsimplex.Add(b); + closestPoint = b; + return; + } + //Edge region AB? + float vc = d1 * d4 - d3 * d2; + if (vc <= 0 && d1 >= 0 && d3 <= 0) + { + subsimplex.Add(a); + subsimplex.Add(b); + v = d1 / (d1 - d3); + Vector3.Multiply(ref ab, v, out closestPoint); + Vector3.Add(ref closestPoint, ref a, out closestPoint); + return; + } + //Vertex region C? + Vector3 cp; + Vector3.Subtract(ref p, ref c, out cp); + float d5; + Vector3.Dot(ref ab, ref cp, out d5); + float d6; + Vector3.Dot(ref ac, ref cp, out d6); + if (d6 >= 0 && d5 <= d6) + { + subsimplex.Add(c); + closestPoint = c; + return; + } + //Edge region AC? + float vb = d5 * d2 - d1 * d6; + if (vb <= 0 && d2 >= 0 && d6 <= 0) + { + subsimplex.Add(a); + subsimplex.Add(c); + w = d2 / (d2 - d6); + Vector3.Multiply(ref ac, w, out closestPoint); + Vector3.Add(ref closestPoint, ref a, out closestPoint); + return; + } + //Edge region BC? + float va = d3 * d6 - d5 * d4; + if (va <= 0 && (d4 - d3) >= 0 && (d5 - d6) >= 0) + { + subsimplex.Add(b); + subsimplex.Add(c); + w = (d4 - d3) / ((d4 - d3) + (d5 - d6)); + Vector3.Subtract(ref c, ref b, out closestPoint); + Vector3.Multiply(ref closestPoint, w, out closestPoint); + Vector3.Add(ref closestPoint, ref b, out closestPoint); + return; + } + //Inside triangle? + subsimplex.Add(a); + subsimplex.Add(b); + subsimplex.Add(c); + float denom = 1 / (va + vb + vc); + v = vb * denom; + w = vc * denom; + Vector3 abv; + Vector3.Multiply(ref ab, v, out abv); + Vector3 acw; + Vector3.Multiply(ref ac, w, out acw); + Vector3.Add(ref a, ref abv, out closestPoint); + Vector3.Add(ref closestPoint, ref acw, out closestPoint); + } + + /// + /// Determines the closest point on a triangle given by points a, b, and c to point p and provides the subsimplex whose voronoi region contains the point. + /// + /// Simplex containing triangle for testing. + /// Index of first vertex of triangle. + /// Index of second vertex of triangle. + /// Index of third vertex of triangle. + /// Point for comparison. + /// The source of the voronoi region which contains the point, enumerated as a = 0, b = 1, c = 2. + /// Barycentric coordinates of the point on the triangle. + /// Closest point on tetrahedron to point. + [Obsolete("Used for simplex tests; consider using the PairSimplex and its variants instead for simplex-related testing.")] + public static void GetClosestPointOnTriangleToPoint(RawList q, int i, int j, int k, ref Vector3 p, RawList subsimplex, RawList baryCoords, out Vector3 closestPoint) + { + subsimplex.Clear(); + baryCoords.Clear(); + float v, w; + Vector3 a = q[i]; + Vector3 b = q[j]; + Vector3 c = q[k]; + Vector3 ab; + Vector3.Subtract(ref b, ref a, out ab); + Vector3 ac; + Vector3.Subtract(ref c, ref a, out ac); + //Vertex region A? + Vector3 ap; + Vector3.Subtract(ref p, ref a, out ap); + float d1; + Vector3.Dot(ref ab, ref ap, out d1); + float d2; + Vector3.Dot(ref ac, ref ap, out d2); + if (d1 <= 0 && d2 < 0) + { + subsimplex.Add(i); + baryCoords.Add(1); + closestPoint = a; + return; //barycentric coordinates (1,0,0) + } + //Vertex region B? + Vector3 bp; + Vector3.Subtract(ref p, ref b, out bp); + float d3; + Vector3.Dot(ref ab, ref bp, out d3); + float d4; + Vector3.Dot(ref ac, ref bp, out d4); + if (d3 >= 0 && d4 <= d3) + { + subsimplex.Add(j); + baryCoords.Add(1); + closestPoint = b; + return; //barycentric coordinates (0,1,0) + } + //Edge region AB? + float vc = d1 * d4 - d3 * d2; + if (vc <= 0 && d1 >= 0 && d3 <= 0) + { + subsimplex.Add(i); + subsimplex.Add(j); + v = d1 / (d1 - d3); + baryCoords.Add(1 - v); + baryCoords.Add(v); + Vector3.Multiply(ref ab, v, out closestPoint); + Vector3.Add(ref closestPoint, ref a, out closestPoint); + return; //barycentric coordinates (1-v, v, 0) + } + //Vertex region C? + Vector3 cp; + Vector3.Subtract(ref p, ref c, out cp); + float d5; + Vector3.Dot(ref ab, ref cp, out d5); + float d6; + Vector3.Dot(ref ac, ref cp, out d6); + if (d6 >= 0 && d5 <= d6) + { + subsimplex.Add(k); + baryCoords.Add(1); + closestPoint = c; + return; //barycentric coordinates (0,0,1) + } + //Edge region AC? + float vb = d5 * d2 - d1 * d6; + if (vb <= 0 && d2 >= 0 && d6 <= 0) + { + subsimplex.Add(i); + subsimplex.Add(k); + w = d2 / (d2 - d6); + baryCoords.Add(1 - w); + baryCoords.Add(w); + Vector3.Multiply(ref ac, w, out closestPoint); + Vector3.Add(ref closestPoint, ref a, out closestPoint); + return; //barycentric coordinates (1-w, 0, w) + } + //Edge region BC? + float va = d3 * d6 - d5 * d4; + if (va <= 0 && (d4 - d3) >= 0 && (d5 - d6) >= 0) + { + subsimplex.Add(j); + subsimplex.Add(k); + w = (d4 - d3) / ((d4 - d3) + (d5 - d6)); + baryCoords.Add(1 - w); + baryCoords.Add(w); + Vector3.Subtract(ref c, ref b, out closestPoint); + Vector3.Multiply(ref closestPoint, w, out closestPoint); + Vector3.Add(ref closestPoint, ref b, out closestPoint); + return; //barycentric coordinates (0, 1 - w ,w) + } + //Inside triangle? + subsimplex.Add(i); + subsimplex.Add(j); + subsimplex.Add(k); + float denom = 1 / (va + vb + vc); + v = vb * denom; + w = vc * denom; + baryCoords.Add(1 - v - w); + baryCoords.Add(v); + baryCoords.Add(w); + Vector3 abv; + Vector3.Multiply(ref ab, v, out abv); + Vector3 acw; + Vector3.Multiply(ref ac, w, out acw); + Vector3.Add(ref a, ref abv, out closestPoint); + Vector3.Add(ref closestPoint, ref acw, out closestPoint); + //return a + ab * v + ac * w; //barycentric coordinates (1 - v - w, v, w) + } + + /// + /// Determines if supplied point is within the triangle as defined by the provided vertices. + /// + /// A vertex of the triangle. + /// A vertex of the triangle. + /// A vertex of the triangle. + /// The point for comparison against the triangle. + /// Whether or not the point is within the triangle. + public static bool IsPointInsideTriangle(ref Vector3 vA, ref Vector3 vB, ref Vector3 vC, ref Vector3 p) + { + float u, v, w; + GetBarycentricCoordinates(ref p, ref vA, ref vB, ref vC, out u, out v, out w); + //Are the barycoords valid? + return (u > -Epsilon) && (v > -Epsilon) && (w > -Epsilon); + } + + /// + /// Determines if supplied point is within the triangle as defined by the provided vertices. + /// + /// A vertex of the triangle. + /// A vertex of the triangle. + /// A vertex of the triangle. + /// The point for comparison against the triangle. + /// Extra area on the edges of the triangle to include. Can be negative. + /// Whether or not the point is within the triangle. + public static bool IsPointInsideTriangle(ref Vector3 vA, ref Vector3 vB, ref Vector3 vC, ref Vector3 p, float margin) + { + float u, v, w; + GetBarycentricCoordinates(ref p, ref vA, ref vB, ref vC, out u, out v, out w); + //Are the barycoords valid? + return (u > -margin) && (v > -margin) && (w > -margin); + } + + #endregion + + #region Point-Line Tests + + /// + /// Determines the closest point on the provided segment ab to point p. + /// + /// First endpoint of segment. + /// Second endpoint of segment. + /// Point for comparison. + /// Closest point on the edge to p. + public static void GetClosestPointOnSegmentToPoint(ref Vector3 a, ref Vector3 b, ref Vector3 p, out Vector3 closestPoint) + { + Vector3 ab; + Vector3.Subtract(ref b, ref a, out ab); + Vector3 ap; + Vector3.Subtract(ref p, ref a, out ap); + float t; + Vector3.Dot(ref ap, ref ab, out t); + if (t <= 0) + { + closestPoint = a; + } + else + { + float denom = ab.X * ab.X + ab.Y * ab.Y + ab.Z * ab.Z; + if (t >= denom) + { + closestPoint = b; + } + else + { + t = t / denom; + Vector3 tab; + Vector3.Multiply(ref ab, t, out tab); + Vector3.Add(ref a, ref tab, out closestPoint); + } + } + } + + /// + /// Determines the closest point on the provided segment ab to point p. + /// + /// First endpoint of segment. + /// Second endpoint of segment. + /// Point for comparison. + /// The source of the voronoi region which contains the point. + /// Closest point on the edge to p. + [Obsolete("Used for simplex tests; consider using the PairSimplex and its variants instead for simplex-related testing.")] + public static void GetClosestPointOnSegmentToPoint(ref Vector3 a, ref Vector3 b, ref Vector3 p, List subsimplex, out Vector3 closestPoint) + { + subsimplex.Clear(); + Vector3 ab; + Vector3.Subtract(ref b, ref a, out ab); + Vector3 ap; + Vector3.Subtract(ref p, ref a, out ap); + float t; + Vector3.Dot(ref ap, ref ab, out t); + if (t <= 0) + { + //t = 0;//Don't need this for returning purposes. + subsimplex.Add(a); + closestPoint = a; + } + else + { + float denom = ab.X * ab.X + ab.Y * ab.Y + ab.Z * ab.Z; + if (t >= denom) + { + //t = 1;//Don't need this for returning purposes. + subsimplex.Add(b); + closestPoint = b; + } + else + { + t = t / denom; + subsimplex.Add(a); + subsimplex.Add(b); + Vector3 tab; + Vector3.Multiply(ref ab, t, out tab); + Vector3.Add(ref a, ref tab, out closestPoint); + } + } + } + + /// + /// Determines the closest point on the provided segment ab to point p. + /// + /// List of points in the containing simplex. + /// Index of first endpoint of segment. + /// Index of second endpoint of segment. + /// Point for comparison. + /// The source of the voronoi region which contains the point, enumerated as a = 0, b = 1. + /// Barycentric coordinates of the point. + /// Closest point on the edge to p. + [Obsolete("Used for simplex tests; consider using the PairSimplex and its variants instead for simplex-related testing.")] + public static void GetClosestPointOnSegmentToPoint(List q, int i, int j, ref Vector3 p, List subsimplex, List baryCoords, out Vector3 closestPoint) + { + Vector3 a = q[i]; + Vector3 b = q[j]; + subsimplex.Clear(); + baryCoords.Clear(); + Vector3 ab; + Vector3.Subtract(ref b, ref a, out ab); + Vector3 ap; + Vector3.Subtract(ref p, ref a, out ap); + float t; + Vector3.Dot(ref ap, ref ab, out t); + if (t <= 0) + { + subsimplex.Add(i); + baryCoords.Add(1); + closestPoint = a; + } + else + { + float denom = ab.X * ab.X + ab.Y * ab.Y + ab.Z * ab.Z; + if (t >= denom) + { + subsimplex.Add(j); + baryCoords.Add(1); + closestPoint = b; + } + else + { + t = t / denom; + subsimplex.Add(i); + subsimplex.Add(j); + baryCoords.Add(1 - t); + baryCoords.Add(t); + Vector3 tab; + Vector3.Multiply(ref ab, t, out tab); + Vector3.Add(ref a, ref tab, out closestPoint); + } + } + } + + + /// + /// Determines the shortest squared distance from the point to the line. + /// + /// Point to check against the line. + /// First point on the line. + /// Second point on the line. + /// Shortest squared distance from the point to the line. + public static float GetSquaredDistanceFromPointToLine(ref Vector3 p, ref Vector3 a, ref Vector3 b) + { + Vector3 ap, ab; + Vector3.Subtract(ref p, ref a, out ap); + Vector3.Subtract(ref b, ref a, out ab); + float e; + Vector3.Dot(ref ap, ref ab, out e); + return ap.LengthSquared() - e * e / ab.LengthSquared(); + } + + #endregion + + #region Line-Line Tests + + /// + /// Computes closest points c1 and c2 betwen segments p1q1 and p2q2. + /// + /// First point of first segment. + /// Second point of first segment. + /// First point of second segment. + /// Second point of second segment. + /// Closest point on first segment. + /// Closest point on second segment. + public static void GetClosestPointsBetweenSegments(Vector3 p1, Vector3 q1, Vector3 p2, Vector3 q2, out Vector3 c1, out Vector3 c2) + { + float s, t; + GetClosestPointsBetweenSegments(ref p1, ref q1, ref p2, ref q2, out s, out t, out c1, out c2); + } + + /// + /// Computes closest points c1 and c2 betwen segments p1q1 and p2q2. + /// + /// First point of first segment. + /// Second point of first segment. + /// First point of second segment. + /// Second point of second segment. + /// Distance along the line to the point for first segment. + /// Distance along the line to the point for second segment. + /// Closest point on first segment. + /// Closest point on second segment. + public static void GetClosestPointsBetweenSegments(ref Vector3 p1, ref Vector3 q1, ref Vector3 p2, ref Vector3 q2, + out float s, out float t, out Vector3 c1, out Vector3 c2) + { + //Segment direction vectors + Vector3 d1; + Vector3.Subtract(ref q1, ref p1, out d1); + Vector3 d2; + Vector3.Subtract(ref q2, ref p2, out d2); + Vector3 r; + Vector3.Subtract(ref p1, ref p2, out r); + //distance + float a = d1.LengthSquared(); + float e = d2.LengthSquared(); + float f; + Vector3.Dot(ref d2, ref r, out f); + + if (a <= Epsilon && e <= Epsilon) + { + //These segments are more like points. + s = t = 0.0f; + c1 = p1; + c2 = p2; + return; + } + if (a <= Epsilon) + { + // First segment is basically a point. + s = 0.0f; + t = MathHelper.Clamp(f / e, 0.0f, 1.0f); + } + else + { + float c = Vector3.Dot(d1, r); + if (e <= Epsilon) + { + // Second segment is basically a point. + t = 0.0f; + s = MathHelper.Clamp(-c / a, 0.0f, 1.0f); + } + else + { + float b = Vector3.Dot(d1, d2); + float denom = a * e - b * b; + + // If segments not parallel, compute closest point on L1 to L2, and + // clamp to segment S1. Else pick some s (here .5f) + if (denom != 0.0f) + s = MathHelper.Clamp((b * f - c * e) / denom, 0.0f, 1.0f); + else //Parallel, just use .5f + s = .5f; + + + t = (b * s + f) / e; + + if (t < 0) + { + //Closest point is before the segment. + t = 0; + s = MathHelper.Clamp(-c / a, 0, 1); + } + else if (t > 1) + { + //Closest point is after the segment. + t = 1; + s = MathHelper.Clamp((b - c) / a, 0, 1); + } + } + } + + Vector3.Multiply(ref d1, s, out c1); + Vector3.Add(ref c1, ref p1, out c1); + Vector3.Multiply(ref d2, t, out c2); + Vector3.Add(ref c2, ref p2, out c2); + } + + + /// + /// Computes closest points c1 and c2 betwen lines p1q1 and p2q2. + /// + /// First point of first segment. + /// Second point of first segment. + /// First point of second segment. + /// Second point of second segment. + /// Distance along the line to the point for first segment. + /// Distance along the line to the point for second segment. + /// Closest point on first segment. + /// Closest point on second segment. + public static void GetClosestPointsBetweenLines(ref Vector3 p1, ref Vector3 q1, ref Vector3 p2, ref Vector3 q2, + out float s, out float t, out Vector3 c1, out Vector3 c2) + { + //Segment direction vectors + Vector3 d1; + Vector3.Subtract(ref q1, ref p1, out d1); + Vector3 d2; + Vector3.Subtract(ref q2, ref p2, out d2); + Vector3 r; + Vector3.Subtract(ref p1, ref p2, out r); + //distance + float a = d1.LengthSquared(); + float e = d2.LengthSquared(); + float f; + Vector3.Dot(ref d2, ref r, out f); + + if (a <= Epsilon && e <= Epsilon) + { + //These segments are more like points. + s = t = 0.0f; + c1 = p1; + c2 = p2; + return; + } + if (a <= Epsilon) + { + // First segment is basically a point. + s = 0.0f; + t = MathHelper.Clamp(f / e, 0.0f, 1.0f); + } + else + { + float c = Vector3.Dot(d1, r); + if (e <= Epsilon) + { + // Second segment is basically a point. + t = 0.0f; + s = MathHelper.Clamp(-c / a, 0.0f, 1.0f); + } + else + { + float b = Vector3.Dot(d1, d2); + float denom = a * e - b * b; + + // If segments not parallel, compute closest point on L1 to L2, and + // clamp to segment S1. Else pick some s (here .5f) + if (denom != 0f) + s = (b * f - c * e) / denom; + else //Parallel, just use .5f + s = .5f; + + + t = (b * s + f) / e; + } + } + + Vector3.Multiply(ref d1, s, out c1); + Vector3.Add(ref c1, ref p1, out c1); + Vector3.Multiply(ref d2, t, out c2); + Vector3.Add(ref c2, ref p2, out c2); + } + + + + #endregion + + + #region Point-Plane Tests + + /// + /// Determines if vectors o and p are on opposite sides of the plane defined by a, b, and c. + /// + /// First point for comparison. + /// Second point for comparison. + /// First vertex of the plane. + /// Second vertex of plane. + /// Third vertex of plane. + /// Whether or not vectors o and p reside on opposite sides of the plane. + public static bool ArePointsOnOppositeSidesOfPlane(ref Vector3 o, ref Vector3 p, ref Vector3 a, ref Vector3 b, ref Vector3 c) + { + Vector3 ab, ac, ap, ao; + Vector3.Subtract(ref b, ref a, out ab); + Vector3.Subtract(ref c, ref a, out ac); + Vector3.Subtract(ref p, ref a, out ap); + Vector3.Subtract(ref o, ref a, out ao); + Vector3 q; + Vector3.Cross(ref ab, ref ac, out q); + float signp; + Vector3.Dot(ref ap, ref q, out signp); + float signo; + Vector3.Dot(ref ao, ref q, out signo); + if (signp * signo <= 0) + return true; + return false; + } + + /// + /// Determines the distance between a point and a plane.. + /// + /// Point to project onto plane. + /// Normal of the plane. + /// Point located on the plane. + /// Distance from the point to the plane. + public static float GetDistancePointToPlane(ref Vector3 point, ref Vector3 normal, ref Vector3 pointOnPlane) + { + Vector3 offset; + Vector3.Subtract(ref point, ref pointOnPlane, out offset); + float dot; + Vector3.Dot(ref normal, ref offset, out dot); + return dot / normal.LengthSquared(); + } + + /// + /// Determines the location of the point when projected onto the plane defined by the normal and a point on the plane. + /// + /// Point to project onto plane. + /// Normal of the plane. + /// Point located on the plane. + /// Projected location of point onto plane. + public static void GetPointProjectedOnPlane(ref Vector3 point, ref Vector3 normal, ref Vector3 pointOnPlane, out Vector3 projectedPoint) + { + float dot; + Vector3.Dot(ref normal, ref point, out dot); + float dot2; + Vector3.Dot(ref pointOnPlane, ref normal, out dot2); + float t = (dot - dot2) / normal.LengthSquared(); + Vector3 multiply; + Vector3.Multiply(ref normal, t, out multiply); + Vector3.Subtract(ref point, ref multiply, out projectedPoint); + } + + /// + /// Determines if a point is within a set of planes defined by the edges of a triangle. + /// + /// Point for comparison. + /// Edge planes. + /// A point known to be inside of the planes. + /// Whether or not the point is within the edge planes. + public static bool IsPointWithinFaceExtrusion(Vector3 point, List planes, Vector3 centroid) + { + foreach (Plane plane in planes) + { + float centroidPlaneDot; + plane.DotCoordinate(ref centroid, out centroidPlaneDot); + float pointPlaneDot; + plane.DotCoordinate(ref point, out pointPlaneDot); + if (!((centroidPlaneDot <= Epsilon && pointPlaneDot <= Epsilon) || (centroidPlaneDot >= -Epsilon && pointPlaneDot >= -Epsilon))) + { + //Point's NOT the same side of the centroid, so it's 'outside.' + return false; + } + } + return true; + } + + + #endregion + + #region Tetrahedron Tests + //Note: These methods are unused in modern systems, but are kept around for verification. + + /// + /// Determines the closest point on a tetrahedron to a provided point p. + /// + /// First vertex of the tetrahedron. + /// Second vertex of the tetrahedron. + /// Third vertex of the tetrahedron. + /// Fourth vertex of the tetrahedron. + /// Point for comparison. + /// Closest point on the tetrahedron to the point. + public static void GetClosestPointOnTetrahedronToPoint(ref Vector3 a, ref Vector3 b, ref Vector3 c, ref Vector3 d, ref Vector3 p, out Vector3 closestPoint) + { + // Start out assuming point inside all halfspaces, so closest to itself + closestPoint = p; + Vector3 pq; + Vector3 q; + float bestSqDist = float.MaxValue; + // If point outside face abc then compute closest point on abc + if (ArePointsOnOppositeSidesOfPlane(ref p, ref d, ref a, ref b, ref c)) + { + GetClosestPointOnTriangleToPoint(ref a, ref b, ref c, ref p, out q); + Vector3.Subtract(ref q, ref p, out pq); + float sqDist = pq.X * pq.X + pq.Y * pq.Y + pq.Z * pq.Z; + // Update best closest point if (squared) distance is less than current best + if (sqDist < bestSqDist) + { + bestSqDist = sqDist; + closestPoint = q; + } + } + // Repeat test for face acd + if (ArePointsOnOppositeSidesOfPlane(ref p, ref b, ref a, ref c, ref d)) + { + GetClosestPointOnTriangleToPoint(ref a, ref c, ref d, ref p, out q); + Vector3.Subtract(ref q, ref p, out pq); + float sqDist = pq.X * pq.X + pq.Y * pq.Y + pq.Z * pq.Z; + if (sqDist < bestSqDist) + { + bestSqDist = sqDist; + closestPoint = q; + } + } + // Repeat test for face adb + if (ArePointsOnOppositeSidesOfPlane(ref p, ref c, ref a, ref d, ref b)) + { + GetClosestPointOnTriangleToPoint(ref a, ref d, ref b, ref p, out q); + Vector3.Subtract(ref q, ref p, out pq); + float sqDist = pq.X * pq.X + pq.Y * pq.Y + pq.Z * pq.Z; + if (sqDist < bestSqDist) + { + bestSqDist = sqDist; + closestPoint = q; + } + } + // Repeat test for face bdc + if (ArePointsOnOppositeSidesOfPlane(ref p, ref a, ref b, ref d, ref c)) + { + GetClosestPointOnTriangleToPoint(ref b, ref d, ref c, ref p, out q); + Vector3.Subtract(ref q, ref p, out pq); + float sqDist = pq.X * pq.X + pq.Y * pq.Y + pq.Z * pq.Z; + if (sqDist < bestSqDist) + { + closestPoint = q; + } + } + } + + /// + /// Determines the closest point on a tetrahedron to a provided point p. + /// + /// First vertex of the tetrahedron. + /// Second vertex of the tetrahedron. + /// Third vertex of the tetrahedron. + /// Fourth vertex of the tetrahedron. + /// Point for comparison. + /// The source of the voronoi region which contains the point. + /// Closest point on the tetrahedron to the point. + [Obsolete("This method was used for older GJK simplex tests. If you need simplex tests, consider the PairSimplex class and its variants.")] + public static void GetClosestPointOnTetrahedronToPoint(ref Vector3 a, ref Vector3 b, ref Vector3 c, ref Vector3 d, ref Vector3 p, RawList subsimplex, out Vector3 closestPoint) + { + // Start out assuming point inside all halfspaces, so closest to itself + subsimplex.Clear(); + subsimplex.Add(a); //Provides a baseline; if the object is not outside of any planes, then it's inside and the subsimplex is the tetrahedron itself. + subsimplex.Add(b); + subsimplex.Add(c); + subsimplex.Add(d); + closestPoint = p; + Vector3 pq; + Vector3 q; + float bestSqDist = float.MaxValue; + // If point outside face abc then compute closest point on abc + if (ArePointsOnOppositeSidesOfPlane(ref p, ref d, ref a, ref b, ref c)) + { + GetClosestPointOnTriangleToPoint(ref a, ref b, ref c, ref p, subsimplex, out q); + Vector3.Subtract(ref q, ref p, out pq); + float sqDist = pq.X * pq.X + pq.Y * pq.Y + pq.Z * pq.Z; + // Update best closest point if (squared) distance is less than current best + if (sqDist < bestSqDist) + { + bestSqDist = sqDist; + closestPoint = q; + } + } + // Repeat test for face acd + if (ArePointsOnOppositeSidesOfPlane(ref p, ref b, ref a, ref c, ref d)) + { + GetClosestPointOnTriangleToPoint(ref a, ref c, ref d, ref p, subsimplex, out q); + Vector3.Subtract(ref q, ref p, out pq); + float sqDist = pq.X * pq.X + pq.Y * pq.Y + pq.Z * pq.Z; + if (sqDist < bestSqDist) + { + bestSqDist = sqDist; + closestPoint = q; + } + } + // Repeat test for face adb + if (ArePointsOnOppositeSidesOfPlane(ref p, ref c, ref a, ref d, ref b)) + { + GetClosestPointOnTriangleToPoint(ref a, ref d, ref b, ref p, subsimplex, out q); + Vector3.Subtract(ref q, ref p, out pq); + float sqDist = pq.X * pq.X + pq.Y * pq.Y + pq.Z * pq.Z; + if (sqDist < bestSqDist) + { + bestSqDist = sqDist; + closestPoint = q; + } + } + // Repeat test for face bdc + if (ArePointsOnOppositeSidesOfPlane(ref p, ref a, ref b, ref d, ref c)) + { + GetClosestPointOnTriangleToPoint(ref b, ref d, ref c, ref p, subsimplex, out q); + Vector3.Subtract(ref q, ref p, out pq); + float sqDist = pq.X * pq.X + pq.Y * pq.Y + pq.Z * pq.Z; + if (sqDist < bestSqDist) + { + closestPoint = q; + } + } + } + + /// + /// Determines the closest point on a tetrahedron to a provided point p. + /// + /// List of 4 points composing the tetrahedron. + /// Point for comparison. + /// The source of the voronoi region which contains the point, enumerated as a = 0, b = 1, c = 2, d = 3. + /// Barycentric coordinates of p on the tetrahedron. + /// Closest point on the tetrahedron to the point. + [Obsolete("This method was used for older GJK simplex tests. If you need simplex tests, consider the PairSimplex class and its variants.")] + public static void GetClosestPointOnTetrahedronToPoint(RawList tetrahedron, ref Vector3 p, RawList subsimplex, RawList baryCoords, out Vector3 closestPoint) + { + var subsimplexCandidate = CommonResources.GetIntList(); + var baryCoordsCandidate = CommonResources.GetFloatList(); + Vector3 a = tetrahedron[0]; + Vector3 b = tetrahedron[1]; + Vector3 c = tetrahedron[2]; + Vector3 d = tetrahedron[3]; + closestPoint = p; + Vector3 pq; + float bestSqDist = float.MaxValue; + subsimplex.Clear(); + subsimplex.Add(0); //Provides a baseline; if the object is not outside of any planes, then it's inside and the subsimplex is the tetrahedron itself. + subsimplex.Add(1); + subsimplex.Add(2); + subsimplex.Add(3); + baryCoords.Clear(); + Vector3 q; + bool baryCoordsFound = false; + + // If point outside face abc then compute closest point on abc + if (ArePointsOnOppositeSidesOfPlane(ref p, ref d, ref a, ref b, ref c)) + { + GetClosestPointOnTriangleToPoint(tetrahedron, 0, 1, 2, ref p, subsimplexCandidate, baryCoordsCandidate, out q); + Vector3.Subtract(ref q, ref p, out pq); + float sqDist = pq.LengthSquared(); + // Update best closest point if (squared) distance is less than current best + if (sqDist < bestSqDist) + { + bestSqDist = sqDist; + closestPoint = q; + subsimplex.Clear(); + baryCoords.Clear(); + for (int k = 0; k < subsimplexCandidate.Count; k++) + { + subsimplex.Add(subsimplexCandidate[k]); + baryCoords.Add(baryCoordsCandidate[k]); + } + //subsimplex.AddRange(subsimplexCandidate); + //baryCoords.AddRange(baryCoordsCandidate); + baryCoordsFound = true; + } + } + // Repeat test for face acd + if (ArePointsOnOppositeSidesOfPlane(ref p, ref b, ref a, ref c, ref d)) + { + GetClosestPointOnTriangleToPoint(tetrahedron, 0, 2, 3, ref p, subsimplexCandidate, baryCoordsCandidate, out q); + Vector3.Subtract(ref q, ref p, out pq); + float sqDist = pq.LengthSquared(); + if (sqDist < bestSqDist) + { + bestSqDist = sqDist; + closestPoint = q; + subsimplex.Clear(); + baryCoords.Clear(); + for (int k = 0; k < subsimplexCandidate.Count; k++) + { + subsimplex.Add(subsimplexCandidate[k]); + baryCoords.Add(baryCoordsCandidate[k]); + } + //subsimplex.AddRange(subsimplexCandidate); + //baryCoords.AddRange(baryCoordsCandidate); + baryCoordsFound = true; + } + } + // Repeat test for face adb + if (ArePointsOnOppositeSidesOfPlane(ref p, ref c, ref a, ref d, ref b)) + { + GetClosestPointOnTriangleToPoint(tetrahedron, 0, 3, 1, ref p, subsimplexCandidate, baryCoordsCandidate, out q); + Vector3.Subtract(ref q, ref p, out pq); + float sqDist = pq.LengthSquared(); + if (sqDist < bestSqDist) + { + bestSqDist = sqDist; + closestPoint = q; + subsimplex.Clear(); + baryCoords.Clear(); + for (int k = 0; k < subsimplexCandidate.Count; k++) + { + subsimplex.Add(subsimplexCandidate[k]); + baryCoords.Add(baryCoordsCandidate[k]); + } + //subsimplex.AddRange(subsimplexCandidate); + //baryCoords.AddRange(baryCoordsCandidate); + baryCoordsFound = true; + } + } + // Repeat test for face bdc + if (ArePointsOnOppositeSidesOfPlane(ref p, ref a, ref b, ref d, ref c)) + { + GetClosestPointOnTriangleToPoint(tetrahedron, 1, 3, 2, ref p, subsimplexCandidate, baryCoordsCandidate, out q); + Vector3.Subtract(ref q, ref p, out pq); + float sqDist = pq.LengthSquared(); + if (sqDist < bestSqDist) + { + closestPoint = q; + subsimplex.Clear(); + baryCoords.Clear(); + for (int k = 0; k < subsimplexCandidate.Count; k++) + { + subsimplex.Add(subsimplexCandidate[k]); + baryCoords.Add(baryCoordsCandidate[k]); + } + //subsimplex.AddRange(subsimplexCandidate); + //baryCoords.AddRange(baryCoordsCandidate); + baryCoordsFound = true; + } + } + if (!baryCoordsFound) + { + //subsimplex is the entire tetrahedron, can only occur when objects intersect! Determinants of each of the tetrahedrons based on triangles composing the sides and the point itself. + //This is basically computing the volume of parallelepipeds (triple scalar product). + //Could be quicker just to do it directly. + float abcd = (new Matrix(tetrahedron[0].X, tetrahedron[0].Y, tetrahedron[0].Z, 1, + tetrahedron[1].X, tetrahedron[1].Y, tetrahedron[1].Z, 1, + tetrahedron[2].X, tetrahedron[2].Y, tetrahedron[2].Z, 1, + tetrahedron[3].X, tetrahedron[3].Y, tetrahedron[3].Z, 1)).Determinant(); + float pbcd = (new Matrix(p.X, p.Y, p.Z, 1, + tetrahedron[1].X, tetrahedron[1].Y, tetrahedron[1].Z, 1, + tetrahedron[2].X, tetrahedron[2].Y, tetrahedron[2].Z, 1, + tetrahedron[3].X, tetrahedron[3].Y, tetrahedron[3].Z, 1)).Determinant(); + float apcd = (new Matrix(tetrahedron[0].X, tetrahedron[0].Y, tetrahedron[0].Z, 1, + p.X, p.Y, p.Z, 1, + tetrahedron[2].X, tetrahedron[2].Y, tetrahedron[2].Z, 1, + tetrahedron[3].X, tetrahedron[3].Y, tetrahedron[3].Z, 1)).Determinant(); + float abpd = (new Matrix(tetrahedron[0].X, tetrahedron[0].Y, tetrahedron[0].Z, 1, + tetrahedron[1].X, tetrahedron[1].Y, tetrahedron[1].Z, 1, + p.X, p.Y, p.Z, 1, + tetrahedron[3].X, tetrahedron[3].Y, tetrahedron[3].Z, 1)).Determinant(); + abcd = 1 / abcd; + baryCoords.Add(pbcd * abcd); //u + baryCoords.Add(apcd * abcd); //v + baryCoords.Add(abpd * abcd); //w + baryCoords.Add(1 - baryCoords[0] - baryCoords[1] - baryCoords[2]); //x = 1-u-v-w + } + CommonResources.GiveBack(subsimplexCandidate); + CommonResources.GiveBack(baryCoordsCandidate); + } + + #endregion + + + + + + #region Miscellaneous + + /// + /// Tests a ray against a sphere. + /// + ///Ray to test. + ///Position of the sphere. + ///Radius of the sphere. + ///Maximum length of the ray in units of the ray direction's length. + ///Hit data of the ray, if any. + ///Whether or not the ray hits the sphere. + public static bool RayCastSphere(ref Ray ray, ref Vector3 spherePosition, float radius, float maximumLength, out RayHit hit) + { + Vector3 normalizedDirection; + float length = ray.Direction.Length(); + Vector3.Divide(ref ray.Direction, length, out normalizedDirection); + maximumLength *= length; + hit = new RayHit(); + Vector3 m; + Vector3.Subtract(ref ray.Position, ref spherePosition, out m); + float b = Vector3.Dot(m, normalizedDirection); + float c = m.LengthSquared() - radius * radius; + + if (c > 0 && b > 0) + return false; + float discriminant = b * b - c; + if (discriminant < 0) + return false; + + hit.T = -b - (float)Math.Sqrt(discriminant); + if (hit.T < 0) + hit.T = 0; + if (hit.T > maximumLength) + return false; + hit.T /= length; + Vector3.Multiply(ref normalizedDirection, hit.T, out hit.Location); + Vector3.Add(ref hit.Location, ref ray.Position, out hit.Location); + Vector3.Subtract(ref hit.Location, ref spherePosition, out hit.Normal); + hit.Normal.Normalize(); + return true; + } + + + /// + /// Computes the velocity of a point as if it were attached to an object with the given center and velocity. + /// + /// Point to compute the velocity of. + /// Center of the object to which the point is attached. + /// Linear velocity of the object. + /// Angular velocity of the object. + /// Velocity of the point. + public static void GetVelocityOfPoint(ref Vector3 point, ref Vector3 center, ref Vector3 linearVelocity, ref Vector3 angularVelocity, out Vector3 velocity) + { + Vector3 offset; + Vector3.Subtract(ref point, ref center, out offset); + Vector3.Cross(ref angularVelocity, ref offset, out velocity); + Vector3.Add(ref velocity, ref linearVelocity, out velocity); + } + + /// + /// Computes the velocity of a point as if it were attached to an object with the given center and velocity. + /// + /// Point to compute the velocity of. + /// Center of the object to which the point is attached. + /// Linear velocity of the object. + /// Angular velocity of the object. + /// Velocity of the point. + public static Vector3 GetVelocityOfPoint(Vector3 point, Vector3 center, Vector3 linearVelocity, Vector3 angularVelocity) + { + Vector3 toReturn; + GetVelocityOfPoint(ref point, ref center, ref linearVelocity, ref angularVelocity, out toReturn); + return toReturn; + } + + /// + /// Expands a bounding box by the given sweep. + /// + /// Bounding box to expand. + /// Sweep to expand the bounding box with. + public static void ExpandBoundingBox(ref BoundingBox boundingBox, ref Vector3 sweep) + { + if (sweep.X > 0) + boundingBox.Max.X += sweep.X; + else + boundingBox.Min.X += sweep.X; + + if (sweep.Y > 0) + boundingBox.Max.Y += sweep.Y; + else + boundingBox.Min.Y += sweep.Y; + + if (sweep.Z > 0) + boundingBox.Max.Z += sweep.Z; + else + boundingBox.Min.Z += sweep.Z; + } + + /// + /// Computes the bounding box of three points. + /// + /// First vertex of the triangle. + /// Second vertex of the triangle. + /// Third vertex of the triangle. + /// Bounding box of the triangle. + public static void GetTriangleBoundingBox(ref Vector3 a, ref Vector3 b, ref Vector3 c, out BoundingBox aabb) + { +#if !WINDOWS + aabb = new BoundingBox(); +#endif + //X axis + if (a.X > b.X && a.X > c.X) + { + //A is max + aabb.Max.X = a.X; + aabb.Min.X = b.X > c.X ? c.X : b.X; + } + else if (b.X > c.X) + { + //B is max + aabb.Max.X = b.X; + aabb.Min.X = a.X > c.X ? c.X : a.X; + } + else + { + //C is max + aabb.Max.X = c.X; + aabb.Min.X = a.X > b.X ? b.X : a.X; + } + //Y axis + if (a.Y > b.Y && a.Y > c.Y) + { + //A is max + aabb.Max.Y = a.Y; + aabb.Min.Y = b.Y > c.Y ? c.Y : b.Y; + } + else if (b.Y > c.Y) + { + //B is max + aabb.Max.Y = b.Y; + aabb.Min.Y = a.Y > c.Y ? c.Y : a.Y; + } + else + { + //C is max + aabb.Max.Y = c.Y; + aabb.Min.Y = a.Y > b.Y ? b.Y : a.Y; + } + //Z axis + if (a.Z > b.Z && a.Z > c.Z) + { + //A is max + aabb.Max.Z = a.Z; + aabb.Min.Z = b.Z > c.Z ? c.Z : b.Z; + } + else if (b.Z > c.Z) + { + //B is max + aabb.Max.Z = b.Z; + aabb.Min.Z = a.Z > c.Z ? c.Z : a.Z; + } + else + { + //C is max + aabb.Max.Z = c.Z; + aabb.Min.Z = a.Z > b.Z ? b.Z : a.Z; + } + } + + + + + + + /// + /// Updates the quaternion using RK4 integration. + /// + /// Quaternion to update. + /// Local-space inertia tensor of the object being updated. + /// Angular momentum of the object. + /// Time since last frame, in seconds. + /// New orientation quaternion. + public static void UpdateOrientationRK4(ref Quaternion q, ref Matrix3x3 localInertiaTensorInverse, ref Vector3 angularMomentum, float dt, out Quaternion newOrientation) + { + //TODO: This is a little goofy + //Quaternion diff = differentiateQuaternion(ref q, ref localInertiaTensorInverse, ref angularMomentum); + Quaternion d1; + DifferentiateQuaternion(ref q, ref localInertiaTensorInverse, ref angularMomentum, out d1); + Quaternion s2; + Quaternion.Multiply(ref d1, dt * .5f, out s2); + Quaternion.Add(ref q, ref s2, out s2); + + Quaternion d2; + DifferentiateQuaternion(ref s2, ref localInertiaTensorInverse, ref angularMomentum, out d2); + Quaternion s3; + Quaternion.Multiply(ref d2, dt * .5f, out s3); + Quaternion.Add(ref q, ref s3, out s3); + + Quaternion d3; + DifferentiateQuaternion(ref s3, ref localInertiaTensorInverse, ref angularMomentum, out d3); + Quaternion s4; + Quaternion.Multiply(ref d3, dt, out s4); + Quaternion.Add(ref q, ref s4, out s4); + + Quaternion d4; + DifferentiateQuaternion(ref s4, ref localInertiaTensorInverse, ref angularMomentum, out d4); + + Quaternion.Multiply(ref d1, dt / 6, out d1); + Quaternion.Multiply(ref d2, dt / 3, out d2); + Quaternion.Multiply(ref d3, dt / 3, out d3); + Quaternion.Multiply(ref d4, dt / 6, out d4); + Quaternion added; + Quaternion.Add(ref q, ref d1, out added); + Quaternion.Add(ref added, ref d2, out added); + Quaternion.Add(ref added, ref d3, out added); + Quaternion.Add(ref added, ref d4, out added); + Quaternion.Normalize(ref added, out newOrientation); + } + + + /// + /// Finds the change in the rotation state quaternion provided the local inertia tensor and angular velocity. + /// + /// Orienatation of the object. + /// Local-space inertia tensor of the object being updated. + /// Angular momentum of the object. + /// Change in quaternion. + public static void DifferentiateQuaternion(ref Quaternion orientation, ref Matrix3x3 localInertiaTensorInverse, ref Vector3 angularMomentum, out Quaternion orientationChange) + { + Quaternion normalizedOrientation; + Quaternion.Normalize(ref orientation, out normalizedOrientation); + Matrix3x3 tempRotMat; + Matrix3x3.CreateFromQuaternion(ref normalizedOrientation, out tempRotMat); + Matrix3x3 tempInertiaTensorInverse; + Matrix3x3.MultiplyTransposed(ref tempRotMat, ref localInertiaTensorInverse, out tempInertiaTensorInverse); + Matrix3x3.Multiply(ref tempInertiaTensorInverse, ref tempRotMat, out tempInertiaTensorInverse); + Vector3 halfspin; + Matrix3x3.Transform(ref angularMomentum, ref tempInertiaTensorInverse, out halfspin); + Vector3.Multiply(ref halfspin, .5f, out halfspin); + var halfspinQuaternion = new Quaternion(halfspin.X, halfspin.Y, halfspin.Z, 0); + Quaternion.Multiply(ref halfspinQuaternion, ref normalizedOrientation, out orientationChange); + } + + + /// + /// Gets the barycentric coordinates of the point with respect to a triangle's vertices. + /// + /// Point to compute the barycentric coordinates of. + /// First vertex in the triangle. + /// Second vertex in the triangle. + /// Third vertex in the triangle. + /// Weight of the first vertex. + /// Weight of the second vertex. + /// Weight of the third vertex. + public static void GetBarycentricCoordinates(ref Vector3 p, ref Vector3 a, ref Vector3 b, ref Vector3 c, out float aWeight, out float bWeight, out float cWeight) + { + Vector3 ab, ac; + Vector3.Subtract(ref b, ref a, out ab); + Vector3.Subtract(ref c, ref a, out ac); + Vector3 triangleNormal; + Vector3.Cross(ref ab, ref ac, out triangleNormal); + float x = triangleNormal.X < 0 ? -triangleNormal.X : triangleNormal.X; + float y = triangleNormal.Y < 0 ? -triangleNormal.Y : triangleNormal.Y; + float z = triangleNormal.Z < 0 ? -triangleNormal.Z : triangleNormal.Z; + + float numeratorU, numeratorV, denominator; + if (x >= y && x >= z) + { + //The projection of the triangle on the YZ plane is the largest. + numeratorU = (p.Y - b.Y) * (b.Z - c.Z) - (b.Y - c.Y) * (p.Z - b.Z); //PBC + numeratorV = (p.Y - c.Y) * (c.Z - a.Z) - (c.Y - a.Y) * (p.Z - c.Z); //PCA + denominator = triangleNormal.X; + } + else if (y >= z) + { + //The projection of the triangle on the XZ plane is the largest. + numeratorU = (p.X - b.X) * (b.Z - c.Z) - (b.X - c.X) * (p.Z - b.Z); //PBC + numeratorV = (p.X - c.X) * (c.Z - a.Z) - (c.X - a.X) * (p.Z - c.Z); //PCA + denominator = -triangleNormal.Y; + } + else + { + //The projection of the triangle on the XY plane is the largest. + numeratorU = (p.X - b.X) * (b.Y - c.Y) - (b.X - c.X) * (p.Y - b.Y); //PBC + numeratorV = (p.X - c.X) * (c.Y - a.Y) - (c.X - a.X) * (p.Y - c.Y); //PCA + denominator = triangleNormal.Z; + } + + if (denominator < -1e-9 || denominator > 1e-9) + { + denominator = 1 / denominator; + aWeight = numeratorU * denominator; + bWeight = numeratorV * denominator; + cWeight = 1 - aWeight - bWeight; + } + else + { + //It seems to be a degenerate triangle. + //In that case, pick one of the closest vertices. + //MOST of the time, this will happen when the vertices + //are all very close together (all three points form a single point). + //Sometimes, though, it could be that it's more of a line. + //If it's a little inefficient, don't worry- this is a corner case anyway. + + float distance1, distance2, distance3; + Vector3.DistanceSquared(ref p, ref a, out distance1); + Vector3.DistanceSquared(ref p, ref b, out distance2); + Vector3.DistanceSquared(ref p, ref c, out distance3); + if (distance1 < distance2 && distance1 < distance3) + { + aWeight = 1; + bWeight = 0; + cWeight = 0; + } + else if (distance2 < distance3) + { + aWeight = 0; + bWeight = 1; + cWeight = 0; + } + else + { + aWeight = 0; + bWeight = 0; + cWeight = 1; + } + } + + + } + + + + + #endregion + } +} \ No newline at end of file diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Toolbox.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Toolbox.cs.meta new file mode 100644 index 00000000..0c0254f7 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Toolbox.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4576e4aa4adad6f47a86e8adf70c54f0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/TriangleSidedness.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/TriangleSidedness.cs new file mode 100644 index 00000000..ef49a080 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/TriangleSidedness.cs @@ -0,0 +1,22 @@ +namespace BEPUutilities +{ + /// + /// Sidedness of a triangle or mesh. + /// A triangle can be double sided, or allow one of its sides to let interacting objects through. + /// + public enum TriangleSidedness + { + /// + /// The triangle will interact with objects coming from both directions. + /// + DoubleSided, + /// + /// The triangle will interact with objects from which the winding of the triangle appears to be clockwise. + /// + Clockwise, + /// + /// The triangle will interact with objects from which the winding of the triangle appears to be counterclockwise.. + /// + Counterclockwise + } +} diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/TriangleSidedness.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/TriangleSidedness.cs.meta new file mode 100644 index 00000000..c92f4985 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/TriangleSidedness.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8fc881aa0d066024f9e27c02bcc8cc65 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Vector2.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Vector2.cs new file mode 100644 index 00000000..f56d634f --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Vector2.cs @@ -0,0 +1,451 @@ +using System; + +namespace BEPUutilities +{ + /// + /// Provides XNA-like 2D vector math. + /// + public struct Vector2 : IEquatable + { + /// + /// X component of the vector. + /// + public float X; + /// + /// Y component of the vector. + /// + public float Y; + + /// + /// Constructs a new two dimensional vector. + /// + /// X component of the vector. + /// Y component of the vector. + public Vector2(float x, float y) + { + this.X = x; + this.Y = y; + } + + /// + /// Computes the squared length of the vector. + /// + /// Squared length of the vector. + public float LengthSquared() + { + return X * X + Y * Y; + } + + /// + /// Computes the length of the vector. + /// + /// Length of the vector. + public float Length() + { + return (float)System.Math.Sqrt(X * X + Y * Y); + } + + /// + /// Gets a string representation of the vector. + /// + /// String representing the vector. + public override string ToString() + { + return "{" + X + ", " + Y + "}"; + } + + /// + /// Adds two vectors together. + /// + /// First vector to add. + /// Second vector to add. + /// Sum of the two vectors. + public static void Add(ref Vector2 a, ref Vector2 b, out Vector2 sum) + { + sum.X = a.X + b.X; + sum.Y = a.Y + b.Y; + } + + /// + /// Subtracts two vectors. + /// + /// Vector to subtract from. + /// Vector to subtract from the first vector. + /// Result of the subtraction. + public static void Subtract(ref Vector2 a, ref Vector2 b, out Vector2 difference) + { + difference.X = a.X - b.X; + difference.Y = a.Y - b.Y; + } + + /// + /// Scales a vector. + /// + /// Vector to scale. + /// Amount to scale. + /// Scaled vector. + public static void Multiply(ref Vector2 v, float scale, out Vector2 result) + { + result.X = v.X * scale; + result.Y = v.Y * scale; + } + + /// + /// Multiplies two vectors on a per-component basis. + /// + /// First vector to multiply. + /// Second vector to multiply. + /// Result of the componentwise multiplication. + public static void Multiply(ref Vector2 a, ref Vector2 b, out Vector2 result) + { + result.X = a.X * b.X; + result.Y = a.Y * b.Y; + } + + /// + /// Divides a vector's components by some amount. + /// + /// Vector to divide. + /// Value to divide the vector's components. + /// Result of the division. + public static void Divide(ref Vector2 v, float divisor, out Vector2 result) + { + float inverse = 1 / divisor; + result.X = v.X * inverse; + result.Y = v.Y * inverse; + } + + /// + /// Computes the dot product of the two vectors. + /// + /// First vector of the dot product. + /// Second vector of the dot product. + /// Dot product of the two vectors. + public static void Dot(ref Vector2 a, ref Vector2 b, out float dot) + { + dot = a.X * b.X + a.Y * b.Y; + } + + /// + /// Computes the dot product of the two vectors. + /// + /// First vector of the dot product. + /// Second vector of the dot product. + /// Dot product of the two vectors. + public static float Dot(Vector2 a, Vector2 b) + { + return a.X * b.X + a.Y * b.Y; + } + + /// + /// Gets the zero vector. + /// + public static Vector2 Zero + { + get + { + return new Vector2(); + } + } + + /// + /// Gets a vector pointing along the X axis. + /// + public static Vector2 UnitX + { + get { return new Vector2 { X = 1 }; } + } + + /// + /// Gets a vector pointing along the Y axis. + /// + public static Vector2 UnitY + { + get { return new Vector2 { Y = 1 }; } + } + + + /// + /// Normalizes the vector. + /// + /// Vector to normalize. + /// Normalized copy of the vector. + public static Vector2 Normalize(Vector2 v) + { + Vector2 toReturn; + Vector2.Normalize(ref v, out toReturn); + return toReturn; + } + + /// + /// Normalizes the vector. + /// + /// Vector to normalize. + /// Normalized vector. + public static void Normalize(ref Vector2 v, out Vector2 result) + { + float inverse = (float)(1 / System.Math.Sqrt(v.X * v.X + v.Y * v.Y)); + result.X = v.X * inverse; + result.Y = v.Y * inverse; + } + + /// + /// Negates the vector. + /// + /// Vector to negate. + /// Negated version of the vector. + public static void Negate(ref Vector2 v, out Vector2 negated) + { + negated.X = -v.X; + negated.Y = -v.Y; + } + + /// + /// Computes the absolute value of the input vector. + /// + /// Vector to take the absolute value of. + /// Vector with nonnegative elements. + public static void Abs(ref Vector2 v, out Vector2 result) + { + if (v.X < 0) + result.X = -v.X; + else + result.X = v.X; + if (v.Y < 0) + result.Y = -v.Y; + else + result.Y = v.Y; + } + + /// + /// Computes the absolute value of the input vector. + /// + /// Vector to take the absolute value of. + /// Vector with nonnegative elements. + public static Vector2 Abs(Vector2 v) + { + Vector2 result; + Abs(ref v, out result); + return result; + } + + /// + /// Creates a vector from the lesser values in each vector. + /// + /// First input vector to compare values from. + /// Second input vector to compare values from. + /// Vector containing the lesser values of each vector. + public static void Min(ref Vector2 a, ref Vector2 b, out Vector2 min) + { + min.X = a.X < b.X ? a.X : b.X; + min.Y = a.Y < b.Y ? a.Y : b.Y; + } + + /// + /// Creates a vector from the lesser values in each vector. + /// + /// First input vector to compare values from. + /// Second input vector to compare values from. + /// Vector containing the lesser values of each vector. + public static Vector2 Min(Vector2 a, Vector2 b) + { + Vector2 result; + Min(ref a, ref b, out result); + return result; + } + + + /// + /// Creates a vector from the greater values in each vector. + /// + /// First input vector to compare values from. + /// Second input vector to compare values from. + /// Vector containing the greater values of each vector. + public static void Max(ref Vector2 a, ref Vector2 b, out Vector2 max) + { + max.X = a.X > b.X ? a.X : b.X; + max.Y = a.Y > b.Y ? a.Y : b.Y; + } + + /// + /// Creates a vector from the greater values in each vector. + /// + /// First input vector to compare values from. + /// Second input vector to compare values from. + /// Vector containing the greater values of each vector. + public static Vector2 Max(Vector2 a, Vector2 b) + { + Vector2 result; + Max(ref a, ref b, out result); + return result; + } + + /// + /// Normalizes the vector. + /// + public void Normalize() + { + float inverse = (float)(1 / System.Math.Sqrt(X * X + Y * Y)); + X *= inverse; + Y *= inverse; + } + + /// + /// Scales a vector. + /// + /// Vector to scale. + /// Amount to scale. + /// Scaled vector. + public static Vector2 operator *(Vector2 v, float f) + { + Vector2 toReturn; + toReturn.X = v.X * f; + toReturn.Y = v.Y * f; + return toReturn; + } + /// + /// Scales a vector. + /// + /// Vector to scale. + /// Amount to scale. + /// Scaled vector. + public static Vector2 operator *(float f, Vector2 v) + { + Vector2 toReturn; + toReturn.X = v.X * f; + toReturn.Y = v.Y * f; + return toReturn; + } + + /// + /// Multiplies two vectors on a per-component basis. + /// + /// First vector to multiply. + /// Second vector to multiply. + /// Result of the componentwise multiplication. + public static Vector2 operator *(Vector2 a, Vector2 b) + { + Vector2 result; + Multiply(ref a, ref b, out result); + return result; + } + + /// + /// Divides a vector. + /// + /// Vector to divide. + /// Amount to divide. + /// Divided vector. + public static Vector2 operator /(Vector2 v, float f) + { + Vector2 toReturn; + f = 1 / f; + toReturn.X = v.X * f; + toReturn.Y = v.Y * f; + return toReturn; + } + + /// + /// Subtracts two vectors. + /// + /// Vector to be subtracted from. + /// Vector to subtract from the first vector. + /// Resulting difference. + public static Vector2 operator -(Vector2 a, Vector2 b) + { + Vector2 v; + v.X = a.X - b.X; + v.Y = a.Y - b.Y; + return v; + } + + /// + /// Adds two vectors. + /// + /// First vector to add. + /// Second vector to add. + /// Sum of the addition. + public static Vector2 operator +(Vector2 a, Vector2 b) + { + Vector2 v; + v.X = a.X + b.X; + v.Y = a.Y + b.Y; + return v; + } + + /// + /// Negates the vector. + /// + /// Vector to negate. + /// Negated vector. + public static Vector2 operator -(Vector2 v) + { + v.X = -v.X; + v.Y = -v.Y; + return v; + } + + /// + /// Tests two vectors for componentwise equivalence. + /// + /// First vector to test for equivalence. + /// Second vector to test for equivalence. + /// Whether the vectors were equivalent. + public static bool operator ==(Vector2 a, Vector2 b) + { + return a.X == b.X && a.Y == b.Y; + } + /// + /// Tests two vectors for componentwise inequivalence. + /// + /// First vector to test for inequivalence. + /// Second vector to test for inequivalence. + /// Whether the vectors were inequivalent. + public static bool operator !=(Vector2 a, Vector2 b) + { + return a.X != b.X || a.Y != b.Y; + } + + /// + /// Indicates whether the current object is equal to another object of the same type. + /// + /// + /// true if the current object is equal to the parameter; otherwise, false. + /// + /// An object to compare with this object. + public bool Equals(Vector2 other) + { + return X == other.X && Y == other.Y; + } + + /// + /// Indicates whether this instance and a specified object are equal. + /// + /// + /// true if and this instance are the same type and represent the same value; otherwise, false. + /// + /// Another object to compare to. 2 + public override bool Equals(object obj) + { + if (obj is Vector2) + { + return Equals((Vector2)obj); + } + return false; + } + + /// + /// Returns the hash code for this instance. + /// + /// + /// A 32-bit signed integer that is the hash code for this instance. + /// + /// 2 + public override int GetHashCode() + { + return X.GetHashCode() + Y.GetHashCode(); + } + + + } +} diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Vector2.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Vector2.cs.meta new file mode 100644 index 00000000..db0c0d44 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Vector2.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7698ffa174740944faabde217274e3d2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Vector3.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Vector3.cs new file mode 100644 index 00000000..62f41b16 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Vector3.cs @@ -0,0 +1,746 @@ +using System; + +namespace BEPUutilities +{ + /// + /// Provides XNA-like 3D vector math. + /// + public struct Vector3 : IEquatable + { + /// + /// X component of the vector. + /// + public float X; + /// + /// Y component of the vector. + /// + public float Y; + /// + /// Z component of the vector. + /// + public float Z; + + /// + /// Constructs a new 3d vector. + /// + /// X component of the vector. + /// Y component of the vector. + /// Z component of the vector. + public Vector3(float x, float y, float z) + { + this.X = x; + this.Y = y; + this.Z = z; + } + + /// + /// Constructs a new 3d vector. + /// + /// X and Y components of the vector. + /// Z component of the vector. + public Vector3(Vector2 xy, float z) + { + this.X = xy.X; + this.Y = xy.Y; + this.Z = z; + } + + /// + /// Constructs a new 3d vector. + /// + /// X component of the vector. + /// Y and Z components of the vector. + public Vector3(float x, Vector2 yz) + { + this.X = x; + this.Y = yz.X; + this.Z = yz.Y; + } + + /// + /// Computes the squared length of the vector. + /// + /// Squared length of the vector. + public float LengthSquared() + { + return X * X + Y * Y + Z * Z; + } + + /// + /// Computes the length of the vector. + /// + /// Length of the vector. + public float Length() + { + return (float)Math.Sqrt(X * X + Y * Y + Z * Z); + } + + /// + /// Normalizes the vector. + /// + public void Normalize() + { + float inverse = (float)(1 / Math.Sqrt(X * X + Y * Y + Z * Z)); + X *= inverse; + Y *= inverse; + Z *= inverse; + } + + /// + /// Gets a string representation of the vector. + /// + /// String representing the vector. + public override string ToString() + { + return "{" + X + ", " + Y + ", " + Z + "}"; + } + + /// + /// Computes the dot product of two vectors. + /// + /// First vector in the product. + /// Second vector in the product. + /// Resulting dot product. + public static float Dot(Vector3 a, Vector3 b) + { + return a.X * b.X + a.Y * b.Y + a.Z * b.Z; + } + + /// + /// Computes the dot product of two vectors. + /// + /// First vector in the product. + /// Second vector in the product. + /// Resulting dot product. + public static void Dot(ref Vector3 a, ref Vector3 b, out float product) + { + product = a.X * b.X + a.Y * b.Y + a.Z * b.Z; + } + /// + /// Adds two vectors together. + /// + /// First vector to add. + /// Second vector to add. + /// Sum of the two vectors. + public static void Add(ref Vector3 a, ref Vector3 b, out Vector3 sum) + { + sum.X = a.X + b.X; + sum.Y = a.Y + b.Y; + sum.Z = a.Z + b.Z; + } + /// + /// Subtracts two vectors. + /// + /// Vector to subtract from. + /// Vector to subtract from the first vector. + /// Result of the subtraction. + public static void Subtract(ref Vector3 a, ref Vector3 b, out Vector3 difference) + { + difference.X = a.X - b.X; + difference.Y = a.Y - b.Y; + difference.Z = a.Z - b.Z; + } + /// + /// Scales a vector. + /// + /// Vector to scale. + /// Amount to scale. + /// Scaled vector. + public static void Multiply(ref Vector3 v, float scale, out Vector3 result) + { + result.X = v.X * scale; + result.Y = v.Y * scale; + result.Z = v.Z * scale; + } + + /// + /// Multiplies two vectors on a per-component basis. + /// + /// First vector to multiply. + /// Second vector to multiply. + /// Result of the componentwise multiplication. + public static void Multiply(ref Vector3 a, ref Vector3 b, out Vector3 result) + { + result.X = a.X * b.X; + result.Y = a.Y * b.Y; + result.Z = a.Z * b.Z; + } + + /// + /// Divides a vector's components by some amount. + /// + /// Vector to divide. + /// Value to divide the vector's components. + /// Result of the division. + public static void Divide(ref Vector3 v, float divisor, out Vector3 result) + { + float inverse = 1 / divisor; + result.X = v.X * inverse; + result.Y = v.Y * inverse; + result.Z = v.Z * inverse; + } + /// + /// Scales a vector. + /// + /// Vector to scale. + /// Amount to scale. + /// Scaled vector. + public static Vector3 operator *(Vector3 v, float f) + { + Vector3 toReturn; + toReturn.X = v.X * f; + toReturn.Y = v.Y * f; + toReturn.Z = v.Z * f; + return toReturn; + } + + /// + /// Scales a vector. + /// + /// Vector to scale. + /// Amount to scale. + /// Scaled vector. + public static Vector3 operator *(float f, Vector3 v) + { + Vector3 toReturn; + toReturn.X = v.X * f; + toReturn.Y = v.Y * f; + toReturn.Z = v.Z * f; + return toReturn; + } + + /// + /// Multiplies two vectors on a per-component basis. + /// + /// First vector to multiply. + /// Second vector to multiply. + /// Result of the componentwise multiplication. + public static Vector3 operator *(Vector3 a, Vector3 b) + { + Vector3 result; + Multiply(ref a, ref b, out result); + return result; + } + + /// + /// Divides a vector's components by some amount. + /// + /// Vector to divide. + /// Value to divide the vector's components. + /// Result of the division. + public static Vector3 operator /(Vector3 v, float f) + { + Vector3 toReturn; + f = 1 / f; + toReturn.X = v.X * f; + toReturn.Y = v.Y * f; + toReturn.Z = v.Z * f; + return toReturn; + } + /// + /// Subtracts two vectors. + /// + /// Vector to subtract from. + /// Vector to subtract from the first vector. + /// Result of the subtraction. + public static Vector3 operator -(Vector3 a, Vector3 b) + { + Vector3 v; + v.X = a.X - b.X; + v.Y = a.Y - b.Y; + v.Z = a.Z - b.Z; + return v; + } + /// + /// Adds two vectors together. + /// + /// First vector to add. + /// Second vector to add. + /// Sum of the two vectors. + public static Vector3 operator +(Vector3 a, Vector3 b) + { + Vector3 v; + v.X = a.X + b.X; + v.Y = a.Y + b.Y; + v.Z = a.Z + b.Z; + return v; + } + + + /// + /// Negates the vector. + /// + /// Vector to negate. + /// Negated vector. + public static Vector3 operator -(Vector3 v) + { + v.X = -v.X; + v.Y = -v.Y; + v.Z = -v.Z; + return v; + } + /// + /// Tests two vectors for componentwise equivalence. + /// + /// First vector to test for equivalence. + /// Second vector to test for equivalence. + /// Whether the vectors were equivalent. + public static bool operator ==(Vector3 a, Vector3 b) + { + return a.X == b.X && a.Y == b.Y && a.Z == b.Z; + } + /// + /// Tests two vectors for componentwise inequivalence. + /// + /// First vector to test for inequivalence. + /// Second vector to test for inequivalence. + /// Whether the vectors were inequivalent. + public static bool operator !=(Vector3 a, Vector3 b) + { + return a.X != b.X || a.Y != b.Y || a.Z != b.Z; + } + + /// + /// Indicates whether the current object is equal to another object of the same type. + /// + /// + /// true if the current object is equal to the parameter; otherwise, false. + /// + /// An object to compare with this object. + public bool Equals(Vector3 other) + { + return X == other.X && Y == other.Y && Z == other.Z; + } + + /// + /// Indicates whether this instance and a specified object are equal. + /// + /// + /// true if and this instance are the same type and represent the same value; otherwise, false. + /// + /// Another object to compare to. 2 + public override bool Equals(object obj) + { + if (obj is Vector3) + { + return Equals((Vector3)obj); + } + return false; + } + + /// + /// Returns the hash code for this instance. + /// + /// + /// A 32-bit signed integer that is the hash code for this instance. + /// + /// 2 + public override int GetHashCode() + { + return X.GetHashCode() + Y.GetHashCode() + Z.GetHashCode(); + } + + + /// + /// Computes the squared distance between two vectors. + /// + /// First vector. + /// Second vector. + /// Squared distance between the two vectors. + public static void DistanceSquared(ref Vector3 a, ref Vector3 b, out float distanceSquared) + { + float x = a.X - b.X; + float y = a.Y - b.Y; + float z = a.Z - b.Z; + distanceSquared = x * x + y * y + z * z; + } + + /// + /// Computes the squared distance between two vectors. + /// + /// First vector. + /// Second vector. + /// Squared distance between the two vectors. + public static float DistanceSquared(Vector3 a, Vector3 b) + { + float x = a.X - b.X; + float y = a.Y - b.Y; + float z = a.Z - b.Z; + return x * x + y * y + z * z; + } + + + /// + /// Computes the distance between two two vectors. + /// + /// First vector. + /// Second vector. + /// Distance between the two vectors. + public static void Distance(ref Vector3 a, ref Vector3 b, out float distance) + { + float x = a.X - b.X; + float y = a.Y - b.Y; + float z = a.Z - b.Z; + distance = (float)Math.Sqrt(x * x + y * y + z * z); + } + /// + /// Computes the distance between two two vectors. + /// + /// First vector. + /// Second vector. + /// Distance between the two vectors. + public static float Distance(Vector3 a, Vector3 b) + { + float toReturn; + Distance(ref a, ref b, out toReturn); + return toReturn; + } + + /// + /// Gets the zero vector. + /// + public static Vector3 Zero + { + get + { + return new Vector3(); + } + } + + /// + /// Gets the up vector (0,1,0). + /// + public static Vector3 Up + { + get + { + return new Vector3() + { + X = 0, + Y = 1, + Z = 0 + }; + } + } + + /// + /// Gets the down vector (0,-1,0). + /// + public static Vector3 Down + { + get + { + return new Vector3() + { + X = 0, + Y = -1, + Z = 0 + }; + } + } + + /// + /// Gets the right vector (1,0,0). + /// + public static Vector3 Right + { + get + { + return new Vector3() + { + X = 1, + Y = 0, + Z = 0 + }; + } + } + + /// + /// Gets the left vector (-1,0,0). + /// + public static Vector3 Left + { + get + { + return new Vector3() + { + X = -1, + Y = 0, + Z = 0 + }; + } + } + + /// + /// Gets the forward vector (0,0,-1). + /// + public static Vector3 Forward + { + get + { + return new Vector3() + { + X = 0, + Y = 0, + Z = -1 + }; + } + } + + /// + /// Gets the back vector (0,0,1). + /// + public static Vector3 Backward + { + get + { + return new Vector3() + { + X = 0, + Y = 0, + Z = 1 + }; + } + } + + /// + /// Gets a vector pointing along the X axis. + /// + public static Vector3 UnitX + { + get { return new Vector3 { X = 1 }; } + } + + /// + /// Gets a vector pointing along the Y axis. + /// + public static Vector3 UnitY + { + get { return new Vector3 { Y = 1 }; } + } + + /// + /// Gets a vector pointing along the Z axis. + /// + public static Vector3 UnitZ + { + get { return new Vector3 { Z = 1 }; } + } + + /// + /// Computes the cross product between two vectors. + /// + /// First vector. + /// Second vector. + /// Cross product of the two vectors. + public static Vector3 Cross(Vector3 a, Vector3 b) + { + Vector3 toReturn; + Vector3.Cross(ref a, ref b, out toReturn); + return toReturn; + } + /// + /// Computes the cross product between two vectors. + /// + /// First vector. + /// Second vector. + /// Cross product of the two vectors. + public static void Cross(ref Vector3 a, ref Vector3 b, out Vector3 result) + { + float resultX = a.Y * b.Z - a.Z * b.Y; + float resultY = a.Z * b.X - a.X * b.Z; + float resultZ = a.X * b.Y - a.Y * b.X; + result.X = resultX; + result.Y = resultY; + result.Z = resultZ; + } + + /// + /// Normalizes the given vector. + /// + /// Vector to normalize. + /// Normalized vector. + public static Vector3 Normalize(Vector3 v) + { + Vector3 toReturn; + Vector3.Normalize(ref v, out toReturn); + return toReturn; + } + + /// + /// Normalizes the given vector. + /// + /// Vector to normalize. + /// Normalized vector. + public static void Normalize(ref Vector3 v, out Vector3 result) + { + float inverse = (float)(1 / System.Math.Sqrt(v.X * v.X + v.Y * v.Y + v.Z * v.Z)); + result.X = v.X * inverse; + result.Y = v.Y * inverse; + result.Z = v.Z * inverse; + } + + /// + /// Negates a vector. + /// + /// Vector to negate. + /// Negated vector. + public static void Negate(ref Vector3 v, out Vector3 negated) + { + negated.X = -v.X; + negated.Y = -v.Y; + negated.Z = -v.Z; + } + + /// + /// Computes the absolute value of the input vector. + /// + /// Vector to take the absolute value of. + /// Vector with nonnegative elements. + public static void Abs(ref Vector3 v, out Vector3 result) + { + if (v.X < 0) + result.X = -v.X; + else + result.X = v.X; + if (v.Y < 0) + result.Y = -v.Y; + else + result.Y = v.Y; + if (v.Z < 0) + result.Z = -v.Z; + else + result.Z = v.Z; + } + + /// + /// Computes the absolute value of the input vector. + /// + /// Vector to take the absolute value of. + /// Vector with nonnegative elements. + public static Vector3 Abs(Vector3 v) + { + Vector3 result; + Abs(ref v, out result); + return result; + } + + /// + /// Creates a vector from the lesser values in each vector. + /// + /// First input vector to compare values from. + /// Second input vector to compare values from. + /// Vector containing the lesser values of each vector. + public static void Min(ref Vector3 a, ref Vector3 b, out Vector3 min) + { + min.X = a.X < b.X ? a.X : b.X; + min.Y = a.Y < b.Y ? a.Y : b.Y; + min.Z = a.Z < b.Z ? a.Z : b.Z; + } + + /// + /// Creates a vector from the lesser values in each vector. + /// + /// First input vector to compare values from. + /// Second input vector to compare values from. + /// Vector containing the lesser values of each vector. + public static Vector3 Min(Vector3 a, Vector3 b) + { + Vector3 result; + Min(ref a, ref b, out result); + return result; + } + + + /// + /// Creates a vector from the greater values in each vector. + /// + /// First input vector to compare values from. + /// Second input vector to compare values from. + /// Vector containing the greater values of each vector. + public static void Max(ref Vector3 a, ref Vector3 b, out Vector3 max) + { + max.X = a.X > b.X ? a.X : b.X; + max.Y = a.Y > b.Y ? a.Y : b.Y; + max.Z = a.Z > b.Z ? a.Z : b.Z; + } + + /// + /// Creates a vector from the greater values in each vector. + /// + /// First input vector to compare values from. + /// Second input vector to compare values from. + /// Vector containing the greater values of each vector. + public static Vector3 Max(Vector3 a, Vector3 b) + { + Vector3 result; + Max(ref a, ref b, out result); + return result; + } + + /// + /// Computes an interpolated state between two vectors. + /// + /// Starting location of the interpolation. + /// Ending location of the interpolation. + /// Amount of the end location to use. + /// Interpolated intermediate state. + public static Vector3 Lerp(Vector3 start, Vector3 end, float interpolationAmount) + { + Vector3 toReturn; + Lerp(ref start, ref end, interpolationAmount, out toReturn); + return toReturn; + } + /// + /// Computes an interpolated state between two vectors. + /// + /// Starting location of the interpolation. + /// Ending location of the interpolation. + /// Amount of the end location to use. + /// Interpolated intermediate state. + public static void Lerp(ref Vector3 start, ref Vector3 end, float interpolationAmount, out Vector3 result) + { + float startAmount = 1 - interpolationAmount; + result.X = start.X * startAmount + end.X * interpolationAmount; + result.Y = start.Y * startAmount + end.Y * interpolationAmount; + result.Z = start.Z * startAmount + end.Z * interpolationAmount; + } + + /// + /// Computes an intermediate location using hermite interpolation. + /// + /// First position. + /// Tangent associated with the first position. + /// Second position. + /// Tangent associated with the second position. + /// Amount of the second point to use. + /// Interpolated intermediate state. + public static void Hermite(ref Vector3 value1, ref Vector3 tangent1, ref Vector3 value2, ref Vector3 tangent2, float interpolationAmount, out Vector3 result) + { + float weightSquared = interpolationAmount * interpolationAmount; + float weightCubed = interpolationAmount * weightSquared; + float value1Blend = 2 * weightCubed - 3 * weightSquared + 1; + float tangent1Blend = weightCubed - 2 * weightSquared + interpolationAmount; + float value2Blend = -2 * weightCubed + 3 * weightSquared; + float tangent2Blend = weightCubed - weightSquared; + result.X = value1.X * value1Blend + value2.X * value2Blend + tangent1.X * tangent1Blend + tangent2.X * tangent2Blend; + result.Y = value1.Y * value1Blend + value2.Y * value2Blend + tangent1.Y * tangent1Blend + tangent2.Y * tangent2Blend; + result.Z = value1.Z * value1Blend + value2.Z * value2Blend + tangent1.Z * tangent1Blend + tangent2.Z * tangent2Blend; + } + /// + /// Computes an intermediate location using hermite interpolation. + /// + /// First position. + /// Tangent associated with the first position. + /// Second position. + /// Tangent associated with the second position. + /// Amount of the second point to use. + /// Interpolated intermediate state. + public static Vector3 Hermite(Vector3 value1, Vector3 tangent1, Vector3 value2, Vector3 tangent2, float interpolationAmount) + { + Vector3 toReturn; + Hermite(ref value1, ref tangent1, ref value2, ref tangent2, interpolationAmount, out toReturn); + return toReturn; + } + } +} diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Vector3.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Vector3.cs.meta new file mode 100644 index 00000000..487c659d --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Vector3.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8137b0462ba3416458a34dc1c261c194 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Vector4.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Vector4.cs new file mode 100644 index 00000000..c2b01e3c --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Vector4.cs @@ -0,0 +1,707 @@ +using System; + +namespace BEPUutilities +{ + /// + /// Provides XNA-like 4-component vector math. + /// + public struct Vector4 : IEquatable + { + /// + /// X component of the vector. + /// + public float X; + /// + /// Y component of the vector. + /// + public float Y; + /// + /// Z component of the vector. + /// + public float Z; + /// + /// W component of the vector. + /// + public float W; + + /// + /// Constructs a new 3d vector. + /// + /// X component of the vector. + /// Y component of the vector. + /// Z component of the vector. + /// W component of the vector. + public Vector4(float x, float y, float z, float w) + { + this.X = x; + this.Y = y; + this.Z = z; + this.W = w; + } + + /// + /// Constructs a new 3d vector. + /// + /// X, Y, and Z components of the vector. + /// W component of the vector. + public Vector4(Vector3 xyz, float w) + { + this.X = xyz.X; + this.Y = xyz.Y; + this.Z = xyz.Z; + this.W = w; + } + + + /// + /// Constructs a new 3d vector. + /// + /// X component of the vector. + /// Y, Z, and W components of the vector. + public Vector4(float x, Vector3 yzw) + { + this.X = x; + this.Y = yzw.X; + this.Z = yzw.Y; + this.W = yzw.Z; + } + + /// + /// Constructs a new 3d vector. + /// + /// X and Y components of the vector. + /// Z component of the vector. + /// W component of the vector. + public Vector4(Vector2 xy, float z, float w) + { + this.X = xy.X; + this.Y = xy.Y; + this.Z = z; + this.W = w; + } + + /// + /// Constructs a new 3d vector. + /// + /// X component of the vector. + /// Y and Z components of the vector. + /// W component of the vector. + public Vector4(float x, Vector2 yz, float w) + { + this.X = x; + this.Y = yz.X; + this.Z = yz.Y; + this.W = w; + } + + /// + /// Constructs a new 3d vector. + /// + /// X component of the vector. + /// Y and Z components of the vector. + /// W component of the vector. + public Vector4(float x, float y, Vector2 zw) + { + this.X = x; + this.Y = y; + this.Z = zw.X; + this.W = zw.Y; + } + + /// + /// Constructs a new 3d vector. + /// + /// X and Y components of the vector. + /// Z and W components of the vector. + public Vector4(Vector2 xy, Vector2 zw) + { + this.X = xy.X; + this.Y = xy.Y; + this.Z = zw.X; + this.W = zw.Y; + } + + + /// + /// Computes the squared length of the vector. + /// + /// Squared length of the vector. + public float LengthSquared() + { + return X * X + Y * Y + Z * Z + W * W; + } + + /// + /// Computes the length of the vector. + /// + /// Length of the vector. + public float Length() + { + return (float)System.Math.Sqrt(X * X + Y * Y + Z * Z + W * W); + } + + /// + /// Normalizes the vector. + /// + public void Normalize() + { + float inverse = (float)(1 / System.Math.Sqrt(X * X + Y * Y + Z * Z + W * W)); + X *= inverse; + Y *= inverse; + Z *= inverse; + W *= inverse; + } + + /// + /// Gets a string representation of the vector. + /// + /// String representing the vector. + public override string ToString() + { + return "{" + X + ", " + Y + ", " + Z + ", " + W + "}"; + } + + /// + /// Computes the dot product of two vectors. + /// + /// First vector in the product. + /// Second vector in the product. + /// Resulting dot product. + public static float Dot(Vector4 a, Vector4 b) + { + return a.X * b.X + a.Y * b.Y + a.Z * b.Z + a.W * b.W; + } + + /// + /// Computes the dot product of two vectors. + /// + /// First vector in the product. + /// Second vector in the product. + /// Resulting dot product. + public static void Dot(ref Vector4 a, ref Vector4 b, out float product) + { + product = a.X * b.X + a.Y * b.Y + a.Z * b.Z + a.W * b.W; + } + /// + /// Adds two vectors together. + /// + /// First vector to add. + /// Second vector to add. + /// Sum of the two vectors. + public static void Add(ref Vector4 a, ref Vector4 b, out Vector4 sum) + { + sum.X = a.X + b.X; + sum.Y = a.Y + b.Y; + sum.Z = a.Z + b.Z; + sum.W = a.W + b.W; + } + /// + /// Subtracts two vectors. + /// + /// Vector to subtract from. + /// Vector to subtract from the first vector. + /// Result of the subtraction. + public static void Subtract(ref Vector4 a, ref Vector4 b, out Vector4 difference) + { + difference.X = a.X - b.X; + difference.Y = a.Y - b.Y; + difference.Z = a.Z - b.Z; + difference.W = a.W - b.W; + } + /// + /// Scales a vector. + /// + /// Vector to scale. + /// Amount to scale. + /// Scaled vector. + public static void Multiply(ref Vector4 v, float scale, out Vector4 result) + { + result.X = v.X * scale; + result.Y = v.Y * scale; + result.Z = v.Z * scale; + result.W = v.W * scale; + } + + + /// + /// Multiplies two vectors on a per-component basis. + /// + /// First vector to multiply. + /// Second vector to multiply. + /// Result of the componentwise multiplication. + public static void Multiply(ref Vector4 a, ref Vector4 b, out Vector4 result) + { + result.X = a.X * b.X; + result.Y = a.Y * b.Y; + result.Z = a.Z * b.Z; + result.W = a.W * b.W; + } + + + /// + /// Divides a vector's components by some amount. + /// + /// Vector to divide. + /// Value to divide the vector's components. + /// Result of the division. + public static void Divide(ref Vector4 v, float divisor, out Vector4 result) + { + float inverse = 1 / divisor; + result.X = v.X * inverse; + result.Y = v.Y * inverse; + result.Z = v.Z * inverse; + result.W = v.W * inverse; + } + /// + /// Scales a vector. + /// + /// Vector to scale. + /// Amount to scale. + /// Scaled vector. + public static Vector4 operator *(Vector4 v, float f) + { + Vector4 toReturn; + toReturn.X = v.X * f; + toReturn.Y = v.Y * f; + toReturn.Z = v.Z * f; + toReturn.W = v.W * f; + return toReturn; + } + /// + /// Scales a vector. + /// + /// Vector to scale. + /// Amount to scale. + /// Scaled vector. + public static Vector4 operator *(float f, Vector4 v) + { + Vector4 toReturn; + toReturn.X = v.X * f; + toReturn.Y = v.Y * f; + toReturn.Z = v.Z * f; + toReturn.W = v.W * f; + return toReturn; + } + + + /// + /// Multiplies two vectors on a per-component basis. + /// + /// First vector to multiply. + /// Second vector to multiply. + /// Result of the componentwise multiplication. + public static Vector4 operator *(Vector4 a, Vector4 b) + { + Vector4 result; + Multiply(ref a, ref b, out result); + return result; + } + + + /// + /// Divides a vector's components by some amount. + /// + /// Vector to divide. + /// Value to divide the vector's components. + /// Result of the division. + public static Vector4 operator /(Vector4 v, float f) + { + Vector4 toReturn; + f = 1 / f; + toReturn.X = v.X * f; + toReturn.Y = v.Y * f; + toReturn.Z = v.Z * f; + toReturn.W = v.W * f; + return toReturn; + } + /// + /// Subtracts two vectors. + /// + /// Vector to subtract from. + /// Vector to subtract from the first vector. + /// Result of the subtraction. + public static Vector4 operator -(Vector4 a, Vector4 b) + { + Vector4 v; + v.X = a.X - b.X; + v.Y = a.Y - b.Y; + v.Z = a.Z - b.Z; + v.W = a.W - b.W; + return v; + } + /// + /// Adds two vectors together. + /// + /// First vector to add. + /// Second vector to add. + /// Sum of the two vectors. + public static Vector4 operator +(Vector4 a, Vector4 b) + { + Vector4 v; + v.X = a.X + b.X; + v.Y = a.Y + b.Y; + v.Z = a.Z + b.Z; + v.W = a.W + b.W; + return v; + } + + + /// + /// Negates the vector. + /// + /// Vector to negate. + /// Negated vector. + public static Vector4 operator -(Vector4 v) + { + v.X = -v.X; + v.Y = -v.Y; + v.Z = -v.Z; + v.W = -v.W; + return v; + } + /// + /// Tests two vectors for componentwise equivalence. + /// + /// First vector to test for equivalence. + /// Second vector to test for equivalence. + /// Whether the vectors were equivalent. + public static bool operator ==(Vector4 a, Vector4 b) + { + return a.X == b.X && a.Y == b.Y && a.Z == b.Z && a.W == b.W; + } + /// + /// Tests two vectors for componentwise inequivalence. + /// + /// First vector to test for inequivalence. + /// Second vector to test for inequivalence. + /// Whether the vectors were inequivalent. + public static bool operator !=(Vector4 a, Vector4 b) + { + return a.X != b.X || a.Y != b.Y || a.Z != b.Z || a.W != b.W; + } + + /// + /// Indicates whether the current object is equal to another object of the same type. + /// + /// + /// true if the current object is equal to the parameter; otherwise, false. + /// + /// An object to compare with this object. + public bool Equals(Vector4 other) + { + return X == other.X && Y == other.Y && Z == other.Z && W == other.W; + } + + /// + /// Indicates whether this instance and a specified object are equal. + /// + /// + /// true if and this instance are the same type and represent the same value; otherwise, false. + /// + /// Another object to compare to. 2 + public override bool Equals(object obj) + { + if (obj is Vector4) + { + return Equals((Vector4)obj); + } + return false; + } + + /// + /// Returns the hash code for this instance. + /// + /// + /// A 32-bit signed integer that is the hash code for this instance. + /// + /// 2 + public override int GetHashCode() + { + return X.GetHashCode() + Y.GetHashCode() + Z.GetHashCode() + W.GetHashCode(); + } + + /// + /// Computes the squared distance between two vectors. + /// + /// First vector. + /// Second vector. + /// Squared distance between the two vectors. + public static void DistanceSquared(ref Vector4 a, ref Vector4 b, out float distanceSquared) + { + float x = a.X - b.X; + float y = a.Y - b.Y; + float z = a.Z - b.Z; + float w = a.W - b.W; + distanceSquared = x * x + y * y + z * z + w * w; + } + + /// + /// Computes the distance between two two vectors. + /// + /// First vector. + /// Second vector. + /// Distance between the two vectors. + public static void Distance(ref Vector4 a, ref Vector4 b, out float distance) + { + float x = a.X - b.X; + float y = a.Y - b.Y; + float z = a.Z - b.Z; + float w = a.W - b.W; + distance = (float)System.Math.Sqrt(x * x + y * y + z * z + w * w); + } + /// + /// Computes the distance between two two vectors. + /// + /// First vector. + /// Second vector. + /// Distance between the two vectors. + public static float Distance(Vector4 a, Vector4 b) + { + float toReturn; + Distance(ref a, ref b, out toReturn); + return toReturn; + } + + /// + /// Gets the zero vector. + /// + public static Vector4 Zero + { + get + { + return new Vector4(); + } + } + + /// + /// Gets a vector pointing along the X axis. + /// + public static Vector4 UnitX + { + get { return new Vector4 { X = 1 }; } + } + + /// + /// Gets a vector pointing along the Y axis. + /// + public static Vector4 UnitY + { + get { return new Vector4 { Y = 1 }; } + } + + /// + /// Gets a vector pointing along the Z axis. + /// + public static Vector4 UnitZ + { + get { return new Vector4 { Z = 1 }; } + } + + /// + /// Gets a vector pointing along the W axis. + /// + public static Vector4 UnitW + { + get { return new Vector4 { W = 1 }; } + } + + /// + /// Normalizes the given vector. + /// + /// Vector to normalize. + /// Normalized vector. + public static Vector4 Normalize(Vector4 v) + { + Vector4 toReturn; + Vector4.Normalize(ref v, out toReturn); + return toReturn; + } + + /// + /// Normalizes the given vector. + /// + /// Vector to normalize. + /// Normalized vector. + public static void Normalize(ref Vector4 v, out Vector4 result) + { + float inverse = (float)(1 / System.Math.Sqrt(v.X * v.X + v.Y * v.Y + v.Z * v.Z + v.W * v.W)); + result.X = v.X * inverse; + result.Y = v.Y * inverse; + result.Z = v.Z * inverse; + result.W = v.W * inverse; + } + + /// + /// Negates a vector. + /// + /// Vector to negate. + /// Negated vector. + public static void Negate(ref Vector4 v, out Vector4 negated) + { + negated.X = -v.X; + negated.Y = -v.Y; + negated.Z = -v.Z; + negated.W = -v.W; + } + + + /// + /// Computes the absolute value of the input vector. + /// + /// Vector to take the absolute value of. + /// Vector with nonnegative elements. + public static void Abs(ref Vector4 v, out Vector4 result) + { + if (v.X < 0) + result.X = -v.X; + else + result.X = v.X; + if (v.Y < 0) + result.Y = -v.Y; + else + result.Y = v.Y; + if (v.Z < 0) + result.Z = -v.Z; + else + result.Z = v.Z; + if (v.W < 0) + result.W = -v.W; + else + result.W = v.W; + } + + /// + /// Computes the absolute value of the input vector. + /// + /// Vector to take the absolute value of. + /// Vector with nonnegative elements. + public static Vector4 Abs(Vector4 v) + { + Vector4 result; + Abs(ref v, out result); + return result; + } + + /// + /// Creates a vector from the lesser values in each vector. + /// + /// First input vector to compare values from. + /// Second input vector to compare values from. + /// Vector containing the lesser values of each vector. + public static void Min(ref Vector4 a, ref Vector4 b, out Vector4 min) + { + min.X = a.X < b.X ? a.X : b.X; + min.Y = a.Y < b.Y ? a.Y : b.Y; + min.Z = a.Z < b.Z ? a.Z : b.Z; + min.W = a.W < b.W ? a.W : b.W; + } + + /// + /// Creates a vector from the lesser values in each vector. + /// + /// First input vector to compare values from. + /// Second input vector to compare values from. + /// Vector containing the lesser values of each vector. + public static Vector4 Min(Vector4 a, Vector4 b) + { + Vector4 result; + Min(ref a, ref b, out result); + return result; + } + + + /// + /// Creates a vector from the greater values in each vector. + /// + /// First input vector to compare values from. + /// Second input vector to compare values from. + /// Vector containing the greater values of each vector. + public static void Max(ref Vector4 a, ref Vector4 b, out Vector4 max) + { + max.X = a.X > b.X ? a.X : b.X; + max.Y = a.Y > b.Y ? a.Y : b.Y; + max.Z = a.Z > b.Z ? a.Z : b.Z; + max.W = a.W > b.W ? a.W : b.W; + } + + /// + /// Creates a vector from the greater values in each vector. + /// + /// First input vector to compare values from. + /// Second input vector to compare values from. + /// Vector containing the greater values of each vector. + public static Vector4 Max(Vector4 a, Vector4 b) + { + Vector4 result; + Max(ref a, ref b, out result); + return result; + } + + /// + /// Computes an interpolated state between two vectors. + /// + /// Starting location of the interpolation. + /// Ending location of the interpolation. + /// Amount of the end location to use. + /// Interpolated intermediate state. + public static Vector4 Lerp(Vector4 start, Vector4 end, float interpolationAmount) + { + Vector4 toReturn; + Lerp(ref start, ref end, interpolationAmount, out toReturn); + return toReturn; + } + /// + /// Computes an interpolated state between two vectors. + /// + /// Starting location of the interpolation. + /// Ending location of the interpolation. + /// Amount of the end location to use. + /// Interpolated intermediate state. + public static void Lerp(ref Vector4 start, ref Vector4 end, float interpolationAmount, out Vector4 result) + { + float startAmount = 1 - interpolationAmount; + result.X = start.X * startAmount + end.X * interpolationAmount; + result.Y = start.Y * startAmount + end.Y * interpolationAmount; + result.Z = start.Z * startAmount + end.Z * interpolationAmount; + result.W = start.W * startAmount + end.W * interpolationAmount; + } + + /// + /// Computes an intermediate location using hermite interpolation. + /// + /// First position. + /// Tangent associated with the first position. + /// Second position. + /// Tangent associated with the second position. + /// Amount of the second point to use. + /// Interpolated intermediate state. + public static void Hermite(ref Vector4 value1, ref Vector4 tangent1, ref Vector4 value2, ref Vector4 tangent2, float interpolationAmount, out Vector4 result) + { + float weightSquared = interpolationAmount * interpolationAmount; + float weightCubed = interpolationAmount * weightSquared; + float value1Blend = 2 * weightCubed - 3 * weightSquared + 1; + float tangent1Blend = weightCubed - 2 * weightSquared + interpolationAmount; + float value2Blend = -2 * weightCubed + 3 * weightSquared; + float tangent2Blend = weightCubed - weightSquared; + result.X = value1.X * value1Blend + value2.X * value2Blend + tangent1.X * tangent1Blend + tangent2.X * tangent2Blend; + result.Y = value1.Y * value1Blend + value2.Y * value2Blend + tangent1.Y * tangent1Blend + tangent2.Y * tangent2Blend; + result.Z = value1.Z * value1Blend + value2.Z * value2Blend + tangent1.Z * tangent1Blend + tangent2.Z * tangent2Blend; + result.W = value1.W * value1Blend + value2.W * value2Blend + tangent1.W * tangent1Blend + tangent2.W * tangent2Blend; + } + /// + /// Computes an intermediate location using hermite interpolation. + /// + /// First position. + /// Tangent associated with the first position. + /// Second position. + /// Tangent associated with the second position. + /// Amount of the second point to use. + /// Interpolated intermediate state. + public static Vector4 Hermite(Vector4 value1, Vector4 tangent1, Vector4 value2, Vector4 tangent2, float interpolationAmount) + { + Vector4 toReturn; + Hermite(ref value1, ref tangent1, ref value2, ref tangent2, interpolationAmount, out toReturn); + return toReturn; + } + } +} diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Vector4.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Vector4.cs.meta new file mode 100644 index 00000000..c16e23d6 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/Vector4.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2c5096a196ecd7d46aa5e5d4b50d8d4c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/VoronoiRegion.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/VoronoiRegion.cs new file mode 100644 index 00000000..bece8a29 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/VoronoiRegion.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BEPUphysics.CollisionTests +{ + public enum VoronoiRegion + { + A, + B, + C, + AB, + AC, + BC, + ABC + } +} diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/VoronoiRegion.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/VoronoiRegion.cs.meta new file mode 100644 index 00000000..d6d40d98 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1/BEPUutilities/VoronoiRegion.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ed0828d510451bb4d9db97ef4e16ee93 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2.meta new file mode 100644 index 00000000..7cda5d77 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dfe12dffa595bc64088bb5739185d66d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4.meta new file mode 100644 index 00000000..2545dc79 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 31356a43a7579d34d9b102dbfe1b77e4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/.signature.p7s b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/.signature.p7s new file mode 100644 index 0000000000000000000000000000000000000000..c2799fa81732300d78d1b5e753d9b89eecf14e1a GIT binary patch literal 9472 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 bu_Kcn;TweuU-gN64^Y+l5tOInE}8OQS^i2a literal 0 HcmV?d00001 diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/BepuPhysics.nuspec b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/BepuPhysics.nuspec new file mode 100644 index 00000000..12630556 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/BepuPhysics.nuspec @@ -0,0 +1,21 @@ + + + + BepuPhysics + 2.3.4 + Ross Nordby + Apache-2.0 + https://licenses.nuget.org/Apache-2.0 + bepuphysicslogo256.png + https://github.com/bepu/bepuphysics2 + Speedy real time physics simulation library. + © Bepu Entertainment LLC + physics 3d rigid body real time simulation + + + + + + + + \ No newline at end of file diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/BepuPhysics.nuspec.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/BepuPhysics.nuspec.meta new file mode 100644 index 00000000..041213a1 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/BepuPhysics.nuspec.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 267f4a03f7790b745967bfbd68e0095d +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/bepuphysicslogo256.png b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/bepuphysicslogo256.png new file mode 100644 index 0000000000000000000000000000000000000000..5d395e1f79c681f031bbf7044f73e5ad13bee417 GIT binary patch literal 42285 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 Ug61;AFds)wT3M<}!sN&Q0sO3crvLx| literal 0 HcmV?d00001 diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/bepuphysicslogo256.png.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/bepuphysicslogo256.png.meta new file mode 100644 index 00000000..003416bb --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/bepuphysicslogo256.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: eedc788daf73e8b46ad39b7553f7df0b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/lib.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/lib.meta new file mode 100644 index 00000000..df201d68 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/lib.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f1d65185644671f4c9a60dbc6733303c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/lib/netstandard2.0.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/lib/netstandard2.0.meta new file mode 100644 index 00000000..e60863f9 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/lib/netstandard2.0.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5ce6ef99def540a43a92f3be35cca4cd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/lib/netstandard2.0/BepuPhysics.dll b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/lib/netstandard2.0/BepuPhysics.dll new file mode 100644 index 0000000000000000000000000000000000000000..838097e47e468fc2de2e784b6dee98b7058fa55d GIT binary patch literal 731648 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�hKuSfKfw#L4`59> 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

`py(W1F=d}%*FWF&vL zj#gujBwt|UJX?wlj;Q^#JNCg>}B_bQ zsUWYpFDGAT?>7S@H2PNynh%-Jqqgn5ocxH9U#y;APkzQoqm}R-jVyo6gl2Y+EMcWm590VP zmHioQ30=JsC&j5Qx2>|&DPW|?a?Uuo)f0S9vKG}D2=U2kJ_EhZPDiGxwr#MB6Ebp) zwWwZB86%#x)e4OiSBq=oThgIUe?~sG5)N}J89B(xGaLw&^lP10oj2SW#56r^Nw>h3Bbxgq3ibMxM12HUJ^cV>IW*UV}5yrP0Nw#Zn5T zW;l}=xhjV2=q^O6n{?~Gz?KCf7@2Czex^naf5zl>J`m!(`UXMX^Uik`bE=E2H@?6*i|cEpt*?uKP<>sf z>*7Q2BIjJLuh7=lMb1*@bC@mrMb0IRd}hmjiE}w4#fyzRS7>C6E&DYp+zEs@AFMg|^zU?Tj!Frwa)T^9lnC397NXs~3weuY3eoP<;_Sc+m znC3&xr?dBx^DXn~ZpSSz;qz4FwR#OOoYy*8Mz&mRkXJRb%+}!hKu8;X{~;1^-%}76My`O620^3u6t&u&gJ%0;?@>;6xd6ECEvk~*blDE3~ z4H_qW=TtDVWQsw4075>hz!OBNpEc4ghUA!LNDQfDF&nJ ziJax7MxH#~Acwh&8R-Jc6q=)e5a;b+nS{&=j&jdqnvaVN&C%{(7}?KqUgTcP z$ZMAK$?j#0R9VjF0wK=3YtD;xVUd?PuPV%CB(HbfR~eZc zL*8QK@TgR=*PUq|wi1?jJs9b`i78j;RWMR#B`otcW@dhx> zIxAsUZxcoivl905He+O#m9WCwl95xbgd2NXG3TSSgb$5mHjWHi2&BMERQ#sX>HdU=R zjgcoFGJM8r99Ozxid_K6;@R{fRosp+4a=3S`Pb;@;HPYW;M!q=IAkE$lT=wOfbFDfG z2wB3XrwWZyCwlk#iG)&r~TW}M2mNP%A)P+MMO_1w|lo{>X#G^s*=3L~djBVO1U0Gwj6`BJ6)dD$?5uC4yA>^Zy^n#wHA>^90L8_68kON<467bnfBlQ;9 z0*Hd1hb|SFOVmgp)Ru3$&Xi)bKZlWlumrKytu?X&r!@rGMk9sVlhms5{#-8UF7W(9 zGtr;VdR}7N=?)sfy?;!j)DHepoXS1dq}sthhReQi7gLHq`X@2+<4p$H%Rf0Fzj5|% zl4^z8$3KPn%&;EmKp@8@6{?)4E{OdTcORYVh z;9nmkkyp<>m;}4+C;2x>DwK=<)v8m0P%AhKIuvBFe;XsaUvH4J{M#A19k~n5U;I0m z&!<>95#$2@9;P`2enXIp{U@1bjBUA>0-?OVwC(G1AY_@RJz{itx&IW`;4E8%R{|lL z^Q_mp(qF;ITI;p0(#TiVYyDj#f6y(iR$Zr&t+n;ms^uE_-XgbZWRUeycWY!ni#!B` zjQbi}gHHkJ2niS28hl=-+IE~N*IJDXu-5Vh5YooK_AwfJ+h5Hsceb_X_kd8@?}5g| zGC%NNWJJ9fAuqGWzP7#0hyKfKEtBB=C{>C2*nce`FS_~!lh=3t56ovKUK10}KLR0R zT7HeBQtBr^nIh!RF~mucJP+HR@h9I+Q7K-y+Hh7uifLZ4G|8ZlX=W}lG)_>OqV}G> z%phLSk@H#(>m_-VN(Gq|wSw<#&zK52;jVf3>P}usI{|ZE29MK&YhOT&2`AtEi=P2SVQF&=@kBX&#Ir zV_3o_SRJMMF4a94%jG%>euEI40}sY=s-rbRoX0b=mx7_yL&i5M|n3O(22g8X9{c{YZez{q6ShM_r~k*Sc!AQv&RON{1PM%);mTN$|` zhTO@B6HE0VBY%i-ew2|Pp?QoV%Mn?M)@&eb+?x-E2*(Vqhyu^IU ziy}U2*)k8`BtqU|nk6=`&4Ra>^F^>R$!oLVZAMOp-!RBKoa$%HCI~?<9K6fOG@Yte z4G-SuRQtj*CDq8_V@4j>F+x6PnMcEC63srr$lyz+>1N9{GWZwM)Y@{548G;Ow$k#{ zs*%C>jP$wQ$TKon$9(#3Z}J+gk)c+HqXShyEqA<@5U0F?1S6-tVEBvuq7i?tycdSY{f{ErP(bQ#mEwi>>Z3|WRyi_1!Fj`8EEff35N$`nPzCI$?Nc7 zG9yJ+!j@n4M#lJ@&d5hG&WLgT8zY~`kY$XF*dA~1VH`=R{=xQh z2kL_U)v7ashZs35FvvNlQgU1-@In{8!C|JYD=6^HDlHeUi z9>d5}QY{HSV&n(3N3>fSV(h_#poG@<|-g$;eVQL zkZXccMtYxTkQ;yypPhP(%q!GCf{sixbCRLCRU>0AH^^;4XQnxJY=m?zq#kxY>OykA zBk0OBqpVi%3VJZ|1KN(z+!G8dq_ML^3= zc(66|soKHtSs6@WJ`-V?lGiiAPK*>-%|9FL$;fIe;j_X1jCdQHRL=*q3aKrhfwoM1 zO4OQQHr~F(D#WWMuQkEELh?4H7`f5ETJ=(JIP+O*^Lj-iM_PGa4;C^_A4~IQa9SaG zfDd++yl`K6a1J9gc8ien80i*6E@Y&tFrvAHk!vvKCz*-Q)tnby2qW5fGx!H1r@+Dm zc{{j?kp~Ym$h*PKT&^o@EBG*Yj`iHx>iM(adCu#*$tJHag4L|C8CGLo1ZxUuH0aM2 zniBOz@D3vljvzyez72lFX+WIl(4|;h{9SK_w$U?IC<>)h|I6BZF=2BvL~e`P#O)WU7{tb8I_Jrp7b! ziEXETYAPd7*i=QSnT%{vY^=8^H5(Gn8Us&{nn|c>TVwr`L(iY4)YBZQJl%wj?T}E< zG1kq7?gbG#b)?;W3GSZfP#XM&ZZ%HHzQ@=t`(o7#Az#s(0xMw+zSG%TQhMKqw1#*5J~Y_k zo52~qxv$2O%p7})rE4!X!Y+q~cI31NY$v++)#V8N$k^q3gDZMHU+wY-yvxTSA0D%m zL*!r69C`y-IYJ3#@=e%sBve$6KiT>{tsO~C$$gu`SCO9Qe{ae==UkDnNw%v%7$c3p$Du1;l`}TJ8uEqkOQ`85VqD&l>jO4PR+mscFwBb&Af{QITaE z+lbrv9&eczkB?2W?IzR?Hnie?r5*skx&x^vjk8i`PAVor5ju5?_oKTUSzNvi)FdO>8hVH%+?=^GU-Io}Tv>)o@ zO~#IZzxxm&UtMK28F`-*tRKq0ffQVh5Ae={g!aVD|Nc&t_F|hhd5N)?iGMSpk)NB; z$FG~TD=n9#<^1%MCN@=v_Z6A*t2>)KF0r}YGr{oN1TOSB_9g3`Zzp^bT*VzBL9Zv9YXPN+ZI+W(skeSlUgmUF>fO3mlA zyQ0+|&7sE;`ZGele^GzoQn!HCxwfbx%N_(fl~6ylZV44Hl8~?7*u#V(d)W_dMr!7Y z?@VZf^^V31#B*Dlg&Vyy&fHflyB zo&1RjeTVize#loH(2^x~|GQ1CMphE#Ms1pO>Z=g_Z`AgiSo)4gdmM*|i_kp=>->%} zdUuhmGocDlzqnf}&kiClU@XE>QSIM>{&%YZoI=|MZaWw&F^zM;jmZRILeJ zYD0^*G;~+mP=l5Iquidy4O(5dKo>ON+?;lp+XI~T3&mw{AA@7XaD zc{8bxD=~+Wn!d(zUa`69C20jvV)wK@@e6Ak$4y3VgNXBA!LNiv(Wu}X*hNTKtZj`( zJL(FoZovSwG70UolL=jc)|e6Y2}JqbZC%4y=wtcV33x1tCX8Ewll2GR~O< z&U-N3(VrY-!{hG;A`jAc3N z4Wr4qHWZa88ecs>!|3XS2_|&x_a+o!KQA=c2gpP8d=6UZ^IK5Kb5EObQY|w! z%`hHjeq=+`@-V}-y(G;mzT?=U0uM4l_E^Qf0JbJ)nQMI$K8kKj)W z;V}~GIJ9Y!9-$3-q>a&L`g4l?|7t?x@GKblD+!SwlF*4GOz3K~1@U#!e1>XOW`R*( zLG>%x-|T3lvC7lMq3*DG+y)7r=GX@idWl2l;$|nwt;e4XmqFkn*51R;N$w>s z$kA83B34!nzC;QMkq%@QO*)X-BI!V|4?3C97v&~&aW@k>wWovUE5khm1rN9P!~U;)P37gim|5|KlzDGd(B#tcDwtGr2Q;ix7SSUURoOo zHQ2`PzC`A*zoop*kO!kfExoTcR7x4S_1vCPoPL2B>7U)#gihMXgnp_pp_>sabGkbb zE1{nKP3U#Bec^X7yq?4!g_;)3K`CX980AKEIhNpo2b9``Lvx_#Asp(q!lby*O7)19 zYGdRp{7$yg7xgn(Xk|Xg(v1cek)dh_IUi{`e{bdc z#mYCs#;&}}NOj3eCKUO|*^uF2qI}k>(vKASYjbc0ONU{GJ3BKH*o+)<2dY0JsYI?)< z`*+x>*i}?=!o-@Q@}6Y-fPH%#S*YYf*IvE_=szU(Pp}OMorbg&itBzi&`C|NX~)7S zR?0@P5{jfc)y59cwu{o@PC9=*9 zOSNGQMRvMjT}2lA-;?wmc!k#1M3~fmRBzAQQ3lnP#71=#*;QK`iq}?qdijf$;5HkI zEW14oQ3{cOQnZ%z8H^spnjGtWmSG$rSbKIq+4|E3HdNosq&P{3eytplCZqb@a5*A9 zM>QR3{P&k5vd-UMqR}Y%-qWd-y@GZrp^MS>CDa$=P6xC|^s}0N7-qLZqwKBQ3(jPR&RwuD|O~+R$i;V%I-f`U^&B zzh%6(XU{~NQQD_yZz5@XGE=O`ykY4hE;B5@$l9YikN6RtaE|kw<$iU_Z>trM!_;k)-Xl07@aUMDj&4pJlyXdp?n*kNn?+UGn{3Bz;>?7`Kh9 zM;Kc>*M=fXq*$>!ij`1glfU4snqUu|Z(<3P5d~oqdIUYO=w(PZ6WS5`>=GMki0DKc zL?Bn20X7tAoKi^JrxX&R6ryoT@t@RvG&`PcXAac%MZRd> z7|oN3PP9gJB8%~GGGCS0NPkhU8?}H9TSR+W+oBy^MQyr0tx<~Bx{BKLhAsBDO4?rS zKX#8ff3VvoCe-w}3B7QZ3DGLHoLJcQbF)@pb}n3%+)^-Cc^{Y+ufuB%-QZn~4Mmni zSnKk(H|P8Wqe!WvXqFJwQB-ejXAZtHvrnu_>XpxUTZsCF9oy;OqTYaFTla5KA8@Jd zIqPkRB<+7#zCUg2Mdjp_l+Eyq%NO}|*PONaF)(Q|vT zyA}Liy1THFqU-H9a*k3wU(z=1Um)oT^Qmk_EylM~DO>w?Dy3kQVvS89`aAp~tWYr) z>G=m}LnI~6LPt6%I3mAhNLQtd?U<*v46t~8M3T~N6#uTwl=i-zrUqK zbRWk5y==tgzgDHzEzqIN9Ov$6x z{lC=#wfOaG<3H2l|I-?Z+W!A5U6DWdEn3^KKQJQ{Uqz#ls7*&>i4AC8F>Ha_3 z&IL@Ts{Q|KKj&v=p3^+fFiCP4qLfLJQ#FcEM3F;IQzSV~4ml+=W||x(hcKvd2#G>s zWJFOkR8ECZgCQoQP%1I%|Gn3}*4__#-{0?juit;JtE=Vn-0NQVy7#?~d+ohBMQpXn zI7OOwn3}&ff2CCPoPp$SeffX3;GfE+ypznl(`1UQr_{A&{Oej$Tm8@KOF8~^&FRjpR@{48Pzw;1V@Zb81TJ3-9HOl+H@gK?kC!WN&w2lD%&urhd9;a0d&mKM)rf2mQqxO64uT~FC{lULp2mJeAtvz^a=iORCT6du=xqtfA zT7y}A1j+Gk8SVJ<9c|LWDJqRq|MaV+&(dO*Yi!4p7OzroapFr(Sx+pv#F)1FG|Lc` zGQ_PoO-0|pF+>?N^|g5}h~BNhCobs(4r~4=wsFn1a)x*g`u>_kn%f~2HVSMd3(8T&JZVhtB%!=~8i;L?&v`-4CEr-Wzs`Xt`PUjZ z>69f$U%|Q}wLJQh-dz}X0B?7hLR#p#y9AliXN8#Y3D_j;ES8hM>a)K%J6OySW{B&b ze6foip9pcY%+X*kMiQC24Jmq0xJy()su88+xg|Pl)jqw(F(HP$MyZ;)Iz{h!VMgy* zqLfRtSNkP6>xcV|d!!Ez-JnxHVXu^*2s*!8pVN;U!zbq-OZS%7r@~57IENu7-LF&c znW;Y?&}Y=ALGB|eH|m5{>lMt}r_=M?^lSTcdXAe@^!zrb=(%l~S1d8lh4<>GE&aK^ zPA%`wa)xLGKbJtCUASQVPe>V}K6YWbmiPUvQ*-faw`t^!iRd8P z|1a`Z2>#z{+57)ZUrb0_O7F)lo<>)no@1eu-F)H@Czn6f&!t*tC2xlu`5Dj7sS|^S zxZzFRejAu)B|j>s+eZlP_j_o@$-N(SUTV{)Bx}=FpTp}1_OoOipzjZ)T;etJ*+}cj zQ|p8?eIbjV*lg7oU&WkGIbQlsh`(g2#O#|UK(iaI9=$hGL8J_kpz0BQK0A!Iz*f0c zn|25<#(+Jtz6&1Yltb*n`xW^#Jy^$ib!kg?e!6 z-)M>*RYnS0VkZ7^YdFcJ%Mp%_nV~USO+{+ zD^mm8>y*Bi;1YeXugv3l-B0lC2`N{+NvCME|6Vfs)xCi9(XX7cemw-u)OvW&oZE-B zhpg{Iv`>G2Aj`E+@13pN(Z3&sXtd%dp!9g;67=2zem-S+Wqdt!5tX|-NvFzG)2SNf zuYXn1Y;9GY>Vh-KY-z4JZ>rfykAvHW>(oOdb=xOj@zY)Aj3;W0Z;aUJ4_n%&*Dlnl zS3lFK{zG&scaTnvhbJiqKbOTR>+I@3J(*)Yn`S-xK;In0Kn^W5Bcs_Do?f}Z5QC&< zdiNyH!{}{|^lYD9zMF5D{FR=`q~|{IeDZkqhFz?{HGdJm;!B>&FNRoMAjDY7y3f~7 z{nnVn^G@sOF1skVUx=qBQ{Gz-;kj*@!!Wh1gqEKrt7hiC7y1Sx2kx&T$N9ySYPy5R zis+fD70>4UG|Km1K8r6cFCpL0Mr))LX3{}DGFhXVHK*Q-91$tE2sx6Fif%JjX>)K= zf_r{ib#RJS9h`crl8&Kn>&!PHprx!tyjf3&*v0l#ZZmcI0ii*j;U9lU5HDUYoCAj*W8vndb zoyWM!EDq}rPIblD!KvR4a*BHfVlMGdPjXc-pBc3x!g>bl7PDV#*c@Mqky@(Pbr5|-&xd!*M1j}ieCHC>Yd-GV0qVC z$Lr_Rt$A^@Pj%mE7tP>F8tv`k+$KHlKaIZbzXqB4 z=bqqS+o!KoDLgYZTj!{3rYKH%4o7jyspS=Q>ds0!6*A{*mCV$gW~#24B0uvil6v$7 zN2x~izN;lNb?_VgESYsZbUU*AVi$`)#S_EF$XBaTSz5Cj;^wpLT|<;tDSQ|FEjE;gawB<*_U@N^9wida$1#!8pdLAyswCTF=n0JbR^I zIc43i&?^V*mzdAOlgD}HMjq$X=Oc9FSp86WTva|1b^J!1nlV;eK<{R00vmaxyH?+S zr{#I6kF4U9rR86hYvuUY_4v=N|0i!)S}eb8Pt;fIxS84s>-k#Jn`-#F{VVHvZb9|s z83mQgu}d}Qwm_xvSsb!}Q>2ftG+j$e3#a~*ysdwwD@Yb_-hZ;-UzKa+<&;&fWuNt= z9*tWk@s*DE)L#JF8rv*wBDi+Kl^-jB2d?>NWvF6d)d;Y$J|ITrpN>eP_0+M4-k{qWoqx|W*#&fu7G!}VUMwoPSL!Wm`jX! zT&HsKbQuFMKj3&-ToJpoQjXqxwC_#2Mpg`UH|HDw^sAXS%9gl#m;p&!J~UHXRmvr- zT?l&f5|@_K17*t5z?xlK`y2msEv>6yT}zT%fW35=u=H7F(7K!JOQ(hTJz3VC0`20k zcja4*Y~+JfnhVI(POMX&izCgGwqmX#Q-?9DA0< zEGJ?uh0@Y>4x_P7>9r)zv!W;Dev+Pm=alwtbS_{fXX^DhMe_|xMdu(n)<<%j z(({t`=}lX3?6yz;Y?h8<-HzHon-JNF`5)k|WJnp}e?vNQE>CmJG=G!1QYFdov<0~= z$#Y6(AG~8T@Sk{I$rOXo>o9F%q>{;-ggqM&yBMoT0SG=n0>?(u!M87JOD_bnb zO5#1VUA&jFI?0q67gDi{0TLEfB+2%?d<^gVz;#Fv$wWl9=QLVvZAt1$lHvIkH zE17nPlg7|fMzm051PEDJMzmuhYjH1fl@$d{#P|Vt>kG(DVz(ki>#%YGsVH)4Q0W-^wy$Ad?Sri)bTBw&>VUh|fW)i^y#xlPRX5Ud13a z#EX(-i_~KF;jO}76Cy^o$U(cI(r**>h#=Q*CAg*zctkv^$c0w$A4o0noXnLgrlA*4 z1i4d;Q{-SZ+`$8>Elx_3AsRk`ciDj4B`%lqK59|37Dc1Mw?Kpqh(cUdwc zL0XHVC^8GAohYaS8Pse11iV2GGdqGEjj)a#qgcv~pQ3*w9ic zZuCf^OBAULk|_$JNJEhEA{o&}nty=it{_uHsU*3Q3;>xfsyAZIB$Ej;OTG(+$|5ow zWRBPtC9?`-p=f?Da-qz*xcmA8$U7pR2wFk4kI+Uv_^yMfcps5$QRY+l4`hW%L=R7O zZ#svs=}Ix52x9EgXB_h@Ma>kF$rQB;n7l7?6d8iDsO7E_=OoD%dj_z~YLV8Ma%GFx zVDraF<%{EroWwo^<;s`uh9a54N@k6i@&M=hya(r6BdR_Kg8t`L)k~}qk6%MR5Cg9v zYsKPgNP*ZvMD_E3q3-KMu_U=-;#iyz!0c(gDBpx+a>eHr4RJTf29c`BFNm54K|T@% zQKTctr^3;cbCFCRkV4TVii`pIQY=wKAlBxA>=G3p;#@@5g6tJ3QDhg$L6I6oNY zaf%E^uHQk9ioH?96N7KeiAXcnOfqFbPKwkhQUm0Sn6Jn@$kYQlD=tQnhe3W7iOpFL z$#envL)42ReL*gXZjxksnqnlP@#~7{rARk5HeC@Dn8;pzBy#;F-cx!$9ETno#BOY7 z8L<}eL($?k3R>WQQPcJRiR3c(zdwzxwGaysRxK9yZM=jGvpxwUJ;sIkUcdFM;rVPeXkS#DFc}rMwckk z4CD@Di6UP-jgy@qwT<11tOe-{V~#rHWCPvM6 zq$g7x#ZJ>rAkB@7l4J|=Dv^hc4VY)p2tsq4h9E7C^6i<>+=fUSV>%J|`DJ*u8%R5& zNXZ;T+nE5;-Z9&c+r+E`P(Mi%}i%M=~@PkW5#j zHxXP5?7S(IH5lkf+CJ#eqg^|ug&U@Q}tTb$hQEHV_$6%%d^1hJ}Mf!lOGO9^mUXg-#8FODAyXJJ7SCCkYp&=2gW!e@cdz%S)q}7ts!s?h+MjXNr5q3k(WN@ zma@($Qlz|UJL`;lp%F7ELyzX`jHig87B;N5X%(=}7^ujACLGV}jC7eRSKRk1W-+j5 zoiR(1?y3)fP+8gH#i3YN#S5{?xY(P?#^*7k2KmGo-iOIMAY(v2 zHCpxs!EA?C0SiDj8=ihdcwJBcvejrv1e()f;Z~3@jW$Z=ILe}4Vwdq5%g8o(9x}U( z=E@XFL$Lk;*>5BbV9ietV)C7lE(u@L#~^dWa13P4zo5tN2l9iFMg;Y$Sco%i zAg7HYMQC+19pq=DW*W(4$o0+~kn=_pNvxLphp~hR=Cog7Hkc2Yi^diua|p3<89!b! zlHqYG>kmaP8##*T)?I3xC!)sF9nf>dFi@Z9Il$jWjcbUo-Ae@hp`L*lwx){c8Hi!) z$3$M8v(Rj_ZI>iNe1dlBjNm_8)?m_;AxbV{CIjNKCBwgDb4)Ls8wK&$n&5hqjK7#? zxiPjzFEE+&CzDv)mSGm5)*WY~=l&?y*!e8uvmGD7PZek zro1irWg?m4YqUHg2_v^1YMT$5SX>3ax4-x9w5Ovk73enV-6Ga{aX>RL?K1Iun18Hf?nrM+- zAdlJNUIh_TMb$^~?KqGQwsw-_itcFsU8`Y!Y&$TCWMB`-Ga%h;!O29j<*JR|>D}G7 zWD1c?5szBX8m*_TRFOi&A(39TmQzV)ny8wNh`U9I-nQb`h-3;{H__cBwH*h z=8>_#t+yijDi5%2lB7_4l!nn9dIs8#5y6Z)Za40fOH!)HyNK($AkQPt=&#U8I|KKD z46=Er10a_sLu{3#2zzsT;^B zTN{}x*HcfC(Y78c7tL{~6^yZ^DWdB&#x`2!Dlw=Qy`g7}?PW!%tTd2x+YFhD+ZS0l z);2dvW)fsFZ7ZaVWnq?*VGCzK=4IOknTstX@``Pj%B3wFZ!1znTR7f!O6Fn<=ONd4 z+j&LE!nZ*t*o+xh`!L5ALquJ#&mi-vt(=sxES#id*uw3QnQW^rbFqa)rrH{+T-w5E zw&sdx3#Zwhkh$2xZ;)%6t*atr;bD;Jw*E2~`|xLwTw9hT*4liQZCjMg?~s{oJ8+H6 z>o!}iRa19$A>Ob>Bw;_ zV8d34BqT%gu|>9JiqzVG)&`lkZAC;>tWE`4VoRAV2`$&;p56*u4@Gi+z@1dcyk{Gy z$iZXWhp)74Q{)l!qF+PiecN`7^wdrVyvZ`FZ5I{Uqe#9j3H2eF|mKqHu~Nr^(_z)=OOcntyGa-Xj_$U!~6&Tr@ulc&4^lo6xtqN4uCk+WUDRh8nVr{ zh)C4<^|_5sXi&dOxl&Qqm$vgPW6tMy*suYGKP!HA+HRGEV{9-=-(^dQA~Qg~wrwMV zQHEwai$M0-lHMadnZoGB^NjZ8a3xq~^~jZM7Bo1#={l zIc000NEsz_%J!flXS?uT%4yppio|rK-383hZ0!`unanaj+PWyR2!v#Qv^}Fp&q*wE z#@1hvbP$p`V;jyy*8LgO>nGd8`BaNc(X#wy+LgD;U5sm5U;JnD)V;i zJkVO0OC_-i3Xs`GM$z;m8-!aIPwbbk_=%W$0=y8Xul+h)e0)w6L&%nTHK~j&`u#!$$sNCq_VyKHKdBY9}(EB z=Kx9ebxP(!Dt1I_;XgY`*i}2N1Pg9aq|iw2h*>UVYMA6UkUAi@nWPd(V~|?c=}9(a zNKbRf(0w2(tI!}lZ9wieiPqCV67(^?)ff-EL8hTeb}Q1zBunmN8M-q>e}%q{irlA( zb9o+SU(j>EN$TM$4Fq|>B*PSGYLXL(P?BkGl9&P}kC_DYwWybB3E1cad~xe#ow44egx9d?$`wxjA%oj72*q!&i3Re zasi~feMuB)k&GP=`wEQEI#*YaXYIvA)Kwk~(%0VaE0W0&JF%OQ0W#3OO_8EB%n$Fx z+|PdQYnJ&I77`g|PugRVx*((NLx`Z|l2`kIjI|f-WkOyh@``=$J|^TCi|sv&SVl+7QhVYdCOTS{ z*_SAyqvbt&;$f1>_6)wr(YwmtMv>8qthSGnq{ORRLB4&HBDxi!tvlP)b ze{A0^iDmOfyXPn}ixRK4d6PXw5pDA)_Th?Xn?JR$l*F=mv;CwZ+U70xipNNEwx`Q| zT(8gU9TiDaq|iP^602TYudCM=_FKPaJzEx`m%w%Z!d_dF49`~}eI;qAWNv>8s~?ar z?GGxM`XIw4X{luNo&D|hc1lLy+23yOs$?7(2ge}S4*N4oCJ6GfBm|ZLGnINA^vRBDG^%U-{gY2~z zDVa2oU6PzoGSAJ$o)*YH`%g;dWso9CepfOlkn4MpZ|r|5ncqN8N#Z`v*Ypis!E+${ z?Eys^jNwsezrCy^8J-p(v?sIQUQx;H#5MgLxenN?E1AO}rIOsKW$N+HX!a@ggF#B{yCumKfzNo~@09)L zlO)4)l68x9$T_<>&3dRuBJzv9 zo+5`Z!Vt}t=)H*iZa049TycGwT(s9wvhIAu<9a=qMn9c~oT_wt1`uMq6NDMp*F8AjrfmC-?yda5;4VoX; za5Ru4Q$Ck44>Gqp+9>kM!&uRR+~!!Ji1uMk2Wi1<$Ej;!5vm2*eEU^0A45;=tH@^{ zcbSB8?EtykB&3;gHN1*Yu0|#)I*xnGAorQ%^-8$rAP+j$lg-$NEI$bMPwQfz&9Rw@ ztb42^dt|-%)KEi^W{#tZeAb-zcA7a(Ns{3y1|g3%bNr%Y9!5max~aM2k|JF}NT#_X z{x|YZwkLZq%d~KmQ)Dp+$+U3PWFmg<&iiZ+J6<9}`e~|D#x`L*@y` z86xNtI)M~|ba15nNhDKv3b}82(&4$nBx^5|&W_`XoIA|>5?vfk{$iQNLoi#!%&Ds* zN0Fl-{Xx1p>ix|!he2Kk>EWn@#Ru;Biu{3S%OJfSJ!v_j$d@2}9GOw%8<2jENs7=t zR+1UuSQJG_Ce5)@6271EBgh~}936dwX4(hv*25`6M{X1;2QtjDD2mhp8R6I)MH+*Q zayaako>m~E9VtSxa#2q* z-_ZnZkFLAk6JFrxsfgYaUgX#&Nw)ZM8`>5$FLu;Nze8R%KIiqt5=V1INQTz%(sO59Cd(ZgB*~O#gecbvM`fH;APYC4=gvZ|m5wfw zSf_?oIUG1QOnRE4?a)5|fA3CxEEYo`z&Z%LK zV}qj}?m^O;sP1~?0@>uqQY5hvA`WD;v4J7!~NoaWe(;XEffRe|XYR|#cd`=Tn^EpRFv1s1@`y)WYrT9Yx**iE)mLBFjMHoX4Zchaf?xt(v9h3y`og z!o)nuli-|A1f%CUv=16(5}d0P(PwfJoW+XhGdT%P|1DCpJgrd#%?ZxRictSdq>Qt! zBKizWS!YWo<{6koXS$M^`xIgaxe}cpE27W9lymN7B1b&~eMdQG#p+aghCI# z+b9>Gxg|YSohgctg+!`3-<2do*fX%Q1G&XnEJ>!A@(M;FkXxNyYO)?0iN=H6?u@&g z3HfIl$Q{lhijWT%f+RbO6rnzxNNs1=J2+QLE9@VF)N%GwM9Tc zQ*dY2d9g9+;TdcKNRD&R15EZp=40fa;(U=v)Eah*Gx8wGJPInWsr^Kss&2%OZ zfuFzqkt1Q2^Cm@J!c31mKg(HN=E@K+!9PrzD{^W8PL!dnSgT-2{p zS@WI6is-&~f%B{)dUmnES-ClDrhD0Ip?RURr6ibZZNv^1$Xm`vEl4IqG)7rRK$bcu zNHSF%MC(2SvfQ~rks+8T*c-!2XPt-H9vV~b0$J;9@d&N0riohhuzChr=j;+i9t8Q& zxd?qT#U(|foyhe=*Z+Hkn;n15IlME=OvDvz1M;2oj3Rwe7RelQR_sDD*B}KQt?4J{EPA0aG!Grl_oU7`i;2L(&vCuJL9TPo(x+I@DUjbmesy;2!DJQ4tq+1a z^PXWc8HC2Bi_Ut_GMS5OO6LFRTqa3|SPIe)xh^>)y;+6`$&@K zYc~bQmwL8}aYhdFOkoD*`j8AdXh zg7)I7fi!TvINT!lgWT^bl_XorbOd?8l{|uEvc+?o(9eN1b0v->k|Cy}Uh6?xxspd& zGK$yCMhCF5Uo1bLEX?nNC;%Q5+6&HOb_%?mmGw z3Ynp<-I8PrA`~sdT^E$h9mSjrB#U$9jAk;zwd7^ioC+Bl3r4yYj$@h2hHQLf#J z&{Zaq?rJ_BGU_T{MCmWPToZ^)mDkJD3@yP`ort>b^lZok*AhimAbyfSUUik7NHW>t zt$n;2o$RV7Nrs@^)FzOb;+mgBGMSR}0-5Pbd6mk_75OEw4kXW&Lj-y#*9?&Pu1!*g z$=e`rxeiE~4Dswv^t~WUT~j7gE}W3e#hR%(Rsyc-Q<*%Hf%pR1;A;LFlTEO>Daa;Q z&1pokMFw=t1o_OBHG^d+o|l7cb@k2#!Pre?Gst$=r6}?h$Szl4rqtu&1mksO?bn{^{Dbn8{J(B67)<{x%cc(_VJ%kR;pm zPpRu$CZ>N%U1yj`|13sXS6nYGAwAhhv44bnks{hZ!rkZ{meKyPxzi+J|CBb}TCO#TzIdysPO11q?!zY)(vLCU++Ruah;r68FgH@Q(w{1rOaKgrjfp8aD&v)nfz zljJUvxk|jxVAqIZteU%+2v$j+RIEnp5;?=fpta|Fh@ookl=r2K5db*|JvH33h@cjq zq4dWv3%T8$x{3%tpE4AruKNv1aLyC8mCil7PtR~G|cZ#0}+>MA}eyA;c zz?~vxEDIlSw`5{k_<(zxB4pw3D66Tvc|P0Y-HKL;6><=;z%RKOizy z&@(mffV6ktwU%Yb=8r+1bhp$5HWTUQ-b^IQ=BM3XvW#i-)9zhT#{pCcE26k}G!$ zmw`-kZ_qMy-9hr)zY~eFdA|EEmN9Lf@3w6q8O!GR?jRG>=K1a%MabsRW0+C9<36%% z?hEp^JNaWGe3i37R=WF2!jYK=lJCya1Qrr0aQ{st%EAq9&qmV2v3e9T8{CgeV#Vqv zcY7jHHg9tGWMbO9$-P7ove|`xVYB-j>yeR}2C~(?=o8E4c_3f8TYgG}ZKknjzxzc^ zU^9^-cf-w8y49MFx*sGG)tZjFn@JhVt4H1Kn3xtGbuUqbEUb(E?zp>@^+*e!2RZ33 z++x|219IMdMibaWJO)YBzlS!p_cnDNF|Tsb7djyAyU=zFp;S1Rm0Ox%H)bx2XPl2GBrFG z6`?-Li`iZ+&yp`lPp)YFG|m=+)b&*Vk_qk4cLcfL(=&=>fVA+;m4svCQ;>F^)sk4z z+upO5NL2K;_iSNe*1f&Qvt7!_UaJ^-I(garam6WB~-fM@JZ(riWVAkPFMsOg(?aPI=Eq(Po}itJNluxGU*pC~fK^MxWS6&dO| ztVoF>FL*8z!8*6-1&^Gs2MTFURx^PVSeFXhS=2QW%k?g$@wx)8xtuC*H;1=-+P zv`>~LTlZyh(3%V@PAG2VPh3I&xu2_)d{caU=7NeYy{1th^+^IImf$1}OXdq$Cs$Q9QaGd=H+ zB9?I>*Ha)#-r$LJ{?6J-oF;%lPz+v8_owsXV7`>vf!<(sQNf+jPY) zx_5X96N;!&AYHt7{=kGRB$DcFqzLu2D?xgC9Ve9xY$loKywwzGay< zkWB9~O<*CBSG;jQk_?_ePc+1Qkcr+;iHM_y3uGn8B<~JMEYDB%?vuGJo2PmYN*OCQ zrg~2@F>RjeO+7=JIW}C~@wAS&h={Ve3COJLY<|-_?kAR^7DqO}<^7pRR3t3*{?0OH ztSb>5(%a-5mrkv+TPoJ?-a6-5 zM)x*5ud{idw}52Ok5O!lK(2${M!&EgU5jHn4xQwA@^gt-jt)`R;*@s*<%+r%XS~ZL zv985g?;0kas^4N31M#!o&5G0pDI>{INpj`h;3n8}&U=N3>eaV_ocBh4C6X)Xoew)f ze)Tp|#PH(%s35<2hbVGCG?#$<;oT{T6$z!@uZcuOZ>hJKi5Ur{-pUuGjEvsuPvPvG zw+j&!39UiwF~=q0)kHGJgV-4RZ!AOc{2XNbF^Q7!YGOD@D5js5L9~!eV$3umQPFZ^ z%o{9YM$3&c^Q4RwEjPw2V`AETV~qHn^lbxfFLOnX|#l$A1;J*{Js zn3(pojv1#2wYbaB{CLbcsfSzKP3Udg$E07fENlbPB_`=I5%y{yke=7s{A^5)l5xRi zlIe3@E&9jwEWNrGX)&l2{&>WHAGs_--k^Ik!%Z3T29Z%F8C@6i2#}XzgoE z`pL4aIY36tB1x<{Kvv8)Mf4nCQp^EKtU186n5-*gvo!~p9h3YQ6Fmo*6H}y!o&&rY zv+Zw|(Q|+$G3ml4_2@ak@|e2~BGw#WRZI#I#0Jd)w)VuGqnO@Orch8#X-<+KW3yeI z>%$lz%4J5vhcSLBV@1M;G3A+*6bVVoh>F!C zAcZlhP9hu$@x8Dw8k6W^8MI4!wDhn&L_P*N9dkU2IG@FSW=v17B~u0D z&zRCE(gnnbogTw7?>voh8^jZPCW_Eq`PkSlv6jq3e)N8^+Z3T5`!mRdV(}oq^bhse zUx9>UTPi{_hd>fyheXMo0x282Op$o>>c4^95PO#odaxGxK7sE6Rfuh@$axSNQ!2!^ zQDnhv9(Qhz?WV|T5R$n$w!b7i?gV=aQ89Kr%g9~XZK+uK#=fO;{fgNljbBw_^A+)8 z-bZ?>#BL!H6=O-U+oX&YV@a`lnV2z_6norHwcy_Gew2PotO!aya_z7X?@LRkG&V9UhI5L5K%-L#Wsv5%~nLE#6CzQ%EFY`W>UtoFeSDf6Vt+!*zJl? zE2#b)?)S$w30oF^4bm+3WP)X3Im{Z{#1@xf8H)LuAnjt$XaWm~bc{6;Aroa`mstE0 zf85tCfs92+&lZqgrVRCUMEb^hr5>wiON)(@#Om47VzVT%dbYu_OBB&P+vwN=Nvxi2 zY;3<9$U>`U8yA~Yj*0Hsa$<`V(LLLg*yQpoqkFcQv57Y^(LGyU>=j9@p6$(8PX)-R zp6xr-?akOHn3%oR!q`qkqUJ3NV|z0(uh+uZVnyhB1^NlGIJV2pteNJAy+PiIeXb%C z@@gi?>ew7jP%@FVv9&8vSyue4k8MCCDt^|--X~?O_*oy@l8I^0`q+F$$euIM{Bdl> z%9cI#`{P-c*c+-?_Ot`}GPaQ>u!qR5*k6f6*|R71GRv6$*%SM>l(FpD6C0OAxk^lX z_QYl>LiQ|y=5Jy}RVp2C?MTP06Xe_2JVlzKb=Mt$UNqKIjb$F)i@65K53$V^X>|}@ z1^Fp9M-slL@CnGp*e17dE}DlIff#YaB;l6(JBTZ8mL{kvk(jvF)yZbd^Zq#e6Mx(; zstiQGY7)AFjX=s;1bT?vXc8J3JA&LC*FkEwT1u6;E|OR+rAl1BBvwnQ7I#1q-BOa{ zPD*06l)K|*)gYU#meMe;<*iI~OSwNz+{Q$=ln3J~)?}hv%ENKz6wxiEb=*g{lZ@3; z+Qn@nqFPFeG{i?-+#Re(&jH%Uy(5X0t4rJ}A~*@A-viSnZljdRmNO>0JJ}`f3KP#= z^?9G9Yn-zdY0mcS_(2n&BJYjSBteo4&n}QBF&1=Hp5Nlr`z_r}a#rQ)7FU7w$Tw3_ zE-h2&q_@7zK)t$~S1A7rRWW+TTjkP(V(cE7cq@BY7N61{6Q#w2fHhwnG!8gG)Z z^D){#kNYVmX>@n?#N>m_vSI5*@vtnM6nL=O)q7yW1o>diTZgZfc>SBlFw14#fzl zsCX_mbJ3i37-~@*w?`}X=*P0Li?bSf zPQ*Pc$#l^j^Og~)*U7jnBBDgTS%_lnbe!)_$~9eFLN6f(Vb?w`S&`<5ghY_v<5Gzr zmyQIRZ+C4Xh4NiP6q!!nth<=#$n^LM>JZ_x&0oVFzwhz8S!TSt79n4nBKqn?d~Znd zz0fgM)|W3yiF~qyBD0+D91$Z+?p1z==&a!DQkMzEMj~oj-M5km_A_-H-tJ4jhl!5E zdwhxYnCLi6@#WMfJsEPJGG(w35BWR|SVl+YBfdx@COR^o@a0Id*{0*LgRkzrBxChI zoqQ=o)Li{jXzt{jEs3=%>E@dwb6Mk8H{UWQ=J?gkcTN!+zfMEXQ@(olk!BuuQik9@ ztS>Qz2+tUYf~5K6&2o?>5wt&$VZKU@ITywJJdhE-nwsFc6B*;XLL_P=dfDfEK;|;X z+?Rb`B2jaamwky$Oq*Z!EmDMRP8^E$jPD}rk+a-SKyrLJO-M7_d>&+muT@i7mc0M& zegWqpeZ4h-g+%81x;;dtTVv${AO4BILg(Nu*pY>dNqol>g5<=P0c%=dyKlxsW4av!hgOT4;X@Ak&g$wbBcx8}9b5oHm5 zb-wkjRGKNqjzaUdz5+!k#(n|$&R3`iMekoAhkUygq0y?v2;3*~9calmQ_JlEQsQgg zN)faRBBy-6Ns=vhMFxSK@s)d&Y(8pa-GLcC$XQ=iNvyW>i!WIc%VWRzBCTajL}z9CDTQS8vayYmeRNe^L?h*k6#j$uHYr zl*cOgpC*|ok5%yN_O4^Bg8$kUSHV9(X(o@|I0_!|zn}pGe zoFtaV>iSc=kPPpE{ES@n{U3ED%~p)v>p!aqd8`yN_jBE&JeK1BgJhySmU5lPQvBEU zEh&C`H!h1jb_4!P@y9Ac9!mmg?7u+~@>nv+gZ?B%$YY&An)sKcvL5o-V33ynAx|j+ zj}d9@Kld~d_SjgE$Nl4bfWTv~*1@<8@`Qi7B$mfI`tu~QJl4_Qr6=WLkDWoT&i;ze za9I>%mq5DvyD35*^Nhw5D_r*|kM;2PBAFsdwMLn1@{ zkMt(OKKvMDgntwf^5N|`PYN>HKTZ@Mk?ox!8wwU&36?pV5cQ(movL z->3-runA-)`nNJM=RZ0AFNj3>Fy}fST15LW$N!DeOg`)b%{l(VijWV7g1qWKqX_vh z17x!Qg3eWeb4~G=DndRigv?ZbTz{?w`S2*n>;3{w;6oyF{ksQ{4Eyj`kOltw1F05A zjVZOz(_)Rf*#D3umJi?Yw~@s1;XD2p(`4OcU)LA8mit#d&!uZ0zVAP$2>EaXWb*wN znV3FY7W zYn?w?5%S>?$b9HOFoZRe4=;gi_AeW%2z*Fnt3NV~2>UQD9eY;(cZtA<)9%DBGRQ7} zfh3j>_xLwSV)<~7KWPNz;yBDgu5bL)Msiu&hu`|YQiOc?8e|Un4>B=*c-UV=B+7?} zuk+#I>w3S#{*y{G`LF<*5Btw4LO$FKa>W0aBILteAV>YKQEVa2geliCe^3$f;YE<| z{cT=i8S-H`12YhR^D&CRheXc#OVf$4537P)@PCp40w3nyg`NcDqJO6(mJdt)5Wrud zoSFBBj79X!{4Z0c`%#>ag3RCk1EdG*i_>*+-9e1Nrm;kF#fO*;UIuXl4rDT!pok}s zmu2OuJr?Iz0v%swnFWw(3la!4$!0Q0k#Im;NY`r=WXft{t`rhAagK*qUxtiDDA#0= z8?=m>tDGh>*KEj?3nac`LoImqNB0MB3^WgU4c45Ll`RmGuy0dIa8AgzR|?q~~>|KNDETGNxCb32Yz|<<(~b z+ms&i>Hz3@Ca_x(^5F=OUe{^v9k_Ou+dFVr5&2s!Y3qAbgt2M5SXe6d8`S@uUag`#{%^g zAs+@n#$Bg*!gWzMA<#_aB72gMYeJy4B4l$dkcrpn$q95InJE9{1iDLN`6nmPM-lQ* zI`m8q3|E@TKeP)mE%3P_RMsTO%m{p?2-!0mBsXyFT4rY8Aj_EknHe}lB+5TC1E-W8 z^3O)-nHe~*2u0l&AhQC0DncIH2QvG*vfj8Z>fZPV8TVAa$`p0KLeCq41VyM8o^g1l zC~%V^RMRlX-0Sqr3sfbUD6h^7+%Adb)p>z>ijY@(LeGLg6Qx;4-QvIqMX0Pnka;_h zp$OSC8f3|Jr7sPPXBpG0O9QVGiSp{wz-*<5y!txyEDgM=2>I|Wkaw=ryzIKDTNZdv z7MU6kVAo<)0ohFjL7l8a79`_EyQAw9|O&&D;dnAz5w|pFkF$9!_ZPD;F<*- zGgyY^*tdch!6}MRSBsi3C?_8I(02q+IZTB2?DLAQgi( zXR@C5yRicbQZ=|t5h^`yA}k2@oW(L!dIOL1K{JsVLC-waLz*)|W(QwXgfuS#nHO9@1oxm%zr^q1d@J~l zB-U3!-wNilj6AbM@9|h1Oq@@er^@%meFr^DgQ=3_%CB(#3bG>jwj|kNbsxmoB%G!T zeyT{TVt5`TKe%6!E%jLDgWxZU+^l2@f}S_I7R?SIQjqJzU|&hHMJdXK>>J=^yjk zi@SpRCCQLq`sfVJyMn=mB$FXrHyVP-*TH^@(0ZsJ$i85#KL>w_BJ@1$`C!?_EORS*Bzg$pFr%RF{x-R5X1eb#4-zJ$tq4iu2URpw>^VD)OSd8hR9w44&o0L5y3U3cZO^R z35L>^v&_*%L;MC(Ayg_!wjgrzRGg*@)mcF@Oqzn+6G~Hr^z;Tv37v@|uYf!pN_vkq zf3+3+OdyYi3M9!EJKstt6u4K)m=U0%fp_Nf2<~3*!;qw-P6pLooJHNAghq;Rg)B^ z@%vJyhBit)*`E9R@%`NCp{gQc$U;fdBq=d;94-ir zk$OrD9fylTla&k+y2@{d<}0G(aH+n6z83Y_&+mrx`xq^v_W>-T_jW9z*WDJ;Ya)xt z9ed2xEh6`yuOf0c^(vB6AiW{|T#CBC8`{D|oJr+z=lxL8Iw>RO7vPy$+__&B>bZeQ z?Lv%r@aF2!c10Q=)}-D?Ec4W7njBE1KO%v14gZ*Brhw2jT^*XG$gn|7@QCdxGO?m&|VX&LqzqfG*4I?N>wsPF~-%LftU`>XBjd5 zJM6`QtPd^O%$jvO-5Bz0xmwSrP(>mrYb46*i(H#S{XesEkv)Z>bRrnhE~Mft1Y`G{e0Z^(BG0|c}60B$Uoado*g?eF)vpvECyAw}Qv5bWw4NIA7j|B) zr)GTCuB-LbiqDb6(o-wGND-~)p7@o!uh!GxI(zPoPx*>vbiMA4pQVV_(=>j|*H`Ol zew{s!#G{({EA(|b&3&Ckc0~+1f|$g4e*=DJkws|tV8|@YkF_4>fngXiK^`*+-Mh&F zX={?lk286~B&0bPG9BXE?ID|wde5C=dpgB)-+R>COWD&Yo=+`ih%tU1Q#!?WpNOyqN06i5-@@$Y0oT=QK>U#? zJ%^xRVEhF|bWPLZ>+R!OP`%=3W1lvDs3dIjjUdC~$0KO^ zo(b{e6w!Ke;$Q#vYCV(U7b&9kOo?AfB+8!G;)j37MC+Lzzw_|bdUE3rD5CYuia$;S zF}Cwh^v$sF_4s;6h)fli|G){9*D-gA&s5}hkhUO;<5x<;UzeB#vNS%an973^_hDr*zSPx0r7sM7m_T#jFVi3sy-JqIWg#t3PaPIHN};eJG*$JYUCuLba0cst9;9-s-x&EX{m<-&Xw z@!SifO89_H>JgtD!`vC>uwvw?vqJgL@nM#F8YEm%lw2FREwD&BLdo2+fus371MTRh%uxwSa}K!poeLYpQr~6i$jQ#9hvC zj+@DIUGQWg$P?k}9uUOF*mbz;u?Y7N!!P=Xlo)!}-6Ndnr(7H@Jt6Z;J6lDzyZd1Sh{F`@A%^oL znJPBd$D9|f`>pV9BJdc^ZRSDG;&AUutjB}veiUR``1Z=Ahrie;Kvss^5J9f6^7Gno zjw0>9L*%}V``O|0Raj;WJYNxHeRxU|5%@=4!H>c#ZzaNUXrNvj!#4Uf9@+(cKZU;L z@M*ZZ{8*kPvnAY7%4Cae&tlb&TwBBA6v;h;93b1m88ciVOic5dK5vVw-6< z<4`z}KJbSzj%GWLL*{V!IYq{xhoGID;_z@qbYFKY{F?kMAnT!b^L`)R&P0Aa(+01e z2&W{I=3H?wB$=t=)jo)erC3dbJJ#l0nIK1y>$h+| z5#*wE!F$krDJC;h6=`b{ z{%~QY&|iUZM((_u%Hs84nRiG}6CzP7ad)H{6LZhO9qB1^O%?l!aS{``ypi3CBp$`d zN07LPqb_NlDh?mSOa~+w$s>a3ZEy_xlptjyb>wFgxlg#|U7Wy)xacE^QT=ndNbM*> z{qs$cZbYK`)te(DqzqrLyP>C2WW1EIW?xkz?p6^YQB?Qz`)+wkN|q(zj>TxhNyNoQj2UECfS zB0ubiT-Xn<*a%}~WQ!ux6iJShPobLPYYv!8ltNGK$T>ykZQ`qZS7dr)meG3-cSTYj zAd+eB#@`j$Bni(PC^qhj^nH+Q#vUy89H{PhMMfyn=>SHwWw^%^$&n;e&Kz2S+#Ok{ z2<`lL2dN*~t;jQo_hBISMS@L8GrkM_B<9y3_eVM^a%)5MvLGpuZIa+E&6uU+fjkuX zL6K@Tm^6!cnsP1l7gd@^cukZkGSay251VB4x4iH7aAb(eMKUX(`H_fti1qXY*#gok zlCH=|)bvM?){*VaSmxV-*!jk8&f}3K@&lR~;w(s6N$Rv@9h{#XCg;EnnQMs z%$Foryow#g7O=2$WCxL`6-T!S{z=41Z=|R1e_c)JYsgPUN@XsN=a)fxM5a6OJ$mk;hvSvF^h3jdUl1maE@>-#3z_h`xK$Ke9~b;Tv0@qH9Qj2>guwFM-qvsvZxlrBeS9i)pTU!k|H#s(S4cGk;tQz%lcy4OOZN6 zu-ZCy9Ai@*v>DT5dK?@Vc~Ht^d-SgLgvcY3WO?+i^@K<}C8Kw(Cq}v`8NF*gQEA@d zJoN@*3}azVq&Mf1Zy0V4GUqCpp&%P7Dd`61$Y zoJ%LtM3Od&$kAMq(kSvI$mvL8Th2xIfSv|96KO&OGjqBhw-w}UByniDS>A<95J4ObO%aIF2Fq7Gjak)Ool}JHHA{@Psf{28_6_Gt8h&>^u z6Uk(XvFITOfVdKp6=|u6JE0?ysL|Y$kn|+wnkqu*C1xX+Cn2pflX2*6>b{Sn5}J2o za_5U^Hz4H`Hgso_y%Vh-q)Nidr;>)APo}QJwxQEanxyuZ$O$P43~suCa=ayc2< zn`LgX8)6Dbzl0)5_*zi3ypWLe9La1E)KaJwypZr!AB#}inUDYh{1rMg_MsMQa9<{& zSjylX+93Tv7AIu&<+4`qWtsOA-jRgMqIunhgdIe11-muF`5@%_IH8DT%vJWrgv5TN z$Fgu!LaHQ|g_{!Y9dNaUdlRIA%EBYid?KNxlwk{R`~W>p!YoOS8kP2;Z9(R8!X}oH z?TftOD&rYwX(n&D%3NDkxiYiTuD0;DGR2Zu7T#8-E%5;=6 zR!yHQGyj@gPnNk5MaZ7MWoiy4%~Qn_FX4{sTI`0EX*2``(c5(^){7unWwMAshVIB8 zLET?5OQ&3~V16^xBu$X(W01ur88{0k(?M35|1ad~~;dhnSl zkIT!is60D2uND)j3Q_+?Ptj)dq;%#`yyg|jq7Ma)yZ-_h!53S@^GsJoEmr zEoV=`x5?-Su&-_f~9v8Ik$kPQGXQ0O?zCkRVDk2gq3!$6c;8|G`b^#Zcc1 zDlQg8X-)?+vZDJ4rMVv#;7%Z8D+UXqG*wTc-7A(_nuB3&_69PkA~iCQ=PDqNR*Vy5 zzSjZP=2;-qE2d}DOvOyQV)H9CuWKRmvp{B7$f;n=Zrncg2Neei%|eg8Ao4WEuZsO| zW-3M21@dVQvOAEk>hbxZq6<@bSD2f+;!G)MeyCV~ydqD)_C5gQe-*uMvB-N^otutU ztQ>F~krAdFYW_eV%__U!PDFEmbp}@ODzoMJ21s2F(gM9@gGzamJ*!-sRStegIUj`F zp90Nhl{-AH$Zz{#WS9v*ymE>~s6U4S*}HP*CzR&ZmY%sC$bOZZKdHzCXyMO+9A3GY z2>S8~;4|hqcyX0GKczJ11BqjdA5>X6&GJF+2Lc&ZIo%@9&%p=`qghA0ptT+UEC9AEWqbo(BFu>hIv6% z_s@uoFiTNCX9GE{s_kM$;wZ%@K!#OKvk}kdtaZAdlrBCjyyPuk16cCjFukJ`cNk z2WVzi&09)jv^nMmoYtI;)tsvJe^q3{yRd~o-mF?`kr#km0c38~l;FCdZX>{cEEq_jG}O<$gnbhLkO< z2e%~W(dL%Jv62iVRh?QR$ZNZ~Si8vK+zrTPImiGY+f--HcpL#fBk_h&^_Ml|Gfd7J zO$N;l)k|v?nYuns*8URuK(z9T#)AV*ds3I5H9tPj0tHxIs@L(29(LghKdA(0N3V3!Z60)+BB17tvkhVnEA zpR=n+NnU}sGram+L1q|tB4~JZ<_wI@>*DHB>7eX)gU`j)6D`8L-T*SPy0R`P`)@$5 zuKt1u%0A^{*cSAS@zrK6MLHnWp+F{7x3b6`dq7?w_g3#9$U@JReM+VjoB?fxxzn@^ z^4;CI2hPK(kLvx`W9|z*M>D<%2rzw61|yXFDXVASh<4c_Bigc*BH ztDT6bU$+~OzBP*l8DR#ak9G$#u%_3}%u7r9(te5+>HKm<3 z_b1oHTp2Xi*6g2!+yLaJnimAQ!t7X!`%r=0UegwzZl}!jJj0)1^sGtjtH?bmc#A;p ztJz(UE6iGuc~>BlYi<`rWq$N?_((Ytz60dh9ONe;FV*zzLC&Mi0qB*jmf)t#nn@O! zcr@0qfxKCB+!0E1Sbs&{soA}!%JUg=-xDeXpy_WfNciyNzML8 zYO0o_VGDtLUeoF*MXuTp-WTY;uQ~ePKrrgv0OU#_q1s6nng1eIcY(C7T|fl&6aEqB z>%PRhWVNG?QDpmhI9Uv2liGPiET7APY*Cv(>g`lJ;CQAAM!lVCFF!#MH|lk)#mD7^ zhI+_RuXF7*B3Yx}p|!7B#Ep7~*DkV%8}*K^EkBW|0?U6ATATl7l(`eFr#U1t_Y#ak zuv(|px-*=PreE!2CsCe-9%=Ue3Tr8~ZbWl5{cE4jqB$Hi{cBy1b2I~LpUe}6B!eve z0jpd<&e1ybaBrBEd8pPH5GV7{+7E3>Df1gB>CoEGEJB$V139nu8;elp(ATgVwZB+| zGFJdOzc$oITafZ>1muF+5{s}DI|I3}b`6WL6hwyC)(SGrQ0CKsTvWUE$*PB!BImP! zT%y{NRf@~%mEy8mXR%p|@kn)9?WW`djbbUD0&;onHWpziUI#Lwwu41j3L+zG_pk^{ zu>i;wwfkCxrT7lWsMO@&T$4duTU=AS z4^u&AmZAqzT~m9YMOccHfm~aAm_=BMp+Lsg{>vgP#g#y=t3AOYEX6HAuFupDOYtC( z8){FrG%N*?akXa%qNSkRH`Z=*s+NK^x(LY4_1fZ=4B|?0OC~RtqV!uxP`fkv*tVzw za%=5g7GWvY1#(;M{uW^=h}>S=#Ud=l7C`REaAqlX05TziuoOh@tnDeOv=j#dnOOTM z5m>f&@zfo^yKD1jC6h9IxVq9GG?Qwl+uVtK0_5Qwn%H+3iR$rrCWmGV&^%K+xSy7t zdWrUJ;3^-6I}o28PwuDr#N@|ZSlM^K*8 z=8!>{0RcIsjTuQq>*oc?Js_uCp92}3gOnK0oL{dkE@_jxmwZN;pHJ5{qD$KJvB)AI zTO-vKZ63A=*Xs@ga&4QBSwrMvxK)6CRxy{2CnSzz2 zLp;ws)@J92l+R>vz6;1pZKgb|$n}rF?qY3pcAK@Q5YdueiWSxG+tfa*oZVW}uQ?^X z2Q-mHwm!cIq%_f2Qt50Wj@8?iiFPx|d6=2?s4*!ZYbM4MLAx)#0lQB?suB-d8txsR z1*A=)?Q@z+c9VhBCB7trw)pI1>{S9;H}SI~MTfwjrJt}tA~s8DPJ#Ee2s9fcDv4M> ziZiJV6GH_VW;mzb9_!SbCMH{&=l-SdKy96Hcl)?oh_^|+EHv}IJ}AXMk!qX7yB2u^ zr8pW$`@|;}xeGha1A%l%{FsGY0c5vC(lL4vmq z4@|Urfiw#}cS`V(#MTz!-a6kyJT!4I5xhMV?FXCTp{FGNWs!0qc!3(oDHa)loJrFy zG1wwwfsm$K;xdbDV)-1FxXvQ&ET6*?6BUtNs*hU0`X^=+L7TFbKSW87NOXCT$U<*h z?7j2LvPUIeAOcNbo0g-Fj!rCinaDzKyY*n7fcz(M$194sRz4viz9_sD*A~4K_X*8> z?-t~>3&y$LiN`JSE_iH%-^qy=h(Mk)Xm>Xt{Sw}P72!7yi1bf5Pk7qf>Uj=GIQ!G5 zmul32gq}IkQ)f4~f(1xyXZg^xIu3jWCiW6!p*Q3)zH7x?T8WNczzL59Vhw%nNLZV{&~HzrO{M6_jQPt0KxLx^PQ#`wfoK?41`HL+Mz zWwhmv#LRanVW2H{Cq8>u5vMJav`w?L<^IICLKA4q{fXZ!;rOk7~<TOO~cEsrOEQE3;y6J9ZJCc?rzD~T6KW3^=v zXkJOYYY}S87$C1EHvT|qs4e#ac`I=i5y-R0xzJ1??<6j;$Vvah2^1jjC9bqckDu{2 zGm!a-@yaK@CB|;f^%f>33C-yEW5>dNqplYwW?H2G@eWy}h`IWG=%LWG{*bxrD6=b& zMTxdq$i6^6OB_H1r(*U<;eB%;pC=Bt$f@1n5eRa;MIP*mQ%-{Pw@3=Pv*&)EI8Tss zMSD*ank$q>kkf#Ck+>-fso4>GK#2#4WSzzOI`ON};JX8_VE%zrUniO^po9xOoO6gbwUd>L0^}i%=E;8$ zL5;cozDe>>MKV6X=Ei(zMm*(=L2k=?C~iPJ>ZNs zjzl-^?3nB&G=UGWV{)KHoDZ-|a+pP&5704rWfnpopi}ZDi#Q)(-{fRLv<2@+{T!T} zt%#h#n+c>#a<9)+=5yPj#{oGkImRN~i+l%2kL27enoocnm8@KhRA|$RF*rd1E(hk6>bPqO4I z(gbG$`y>;B1gCKOBzG1>OF9&M`XoCOf&Fs( zDSQI&Vqo&&ugT|J@jw=V=Jez%->A&aCpjzmr69owG90@lviy9{024 zl^JEmCCx9&XJHqdf@_8uNAfa@a2zC`+mg3igd=*WLZfrWb3k)Xa{d3Qgfcb(xj&ih?c4|C z;pD-jfjk|CV&xymqsb#Ia{90M4mOY}$zB%e`3t;LAXAg4E9dxm)@OSrd4Wav?*Drj z3!X`iSH%1PU2WamGc%H9zcR03nSGF%$+m)wF!z9FJZPRv9_>d!Gs28L3-9=rd*+Q~ z-;g5XL30R@*~vvwBBRY@(2Qx}nYqbH<%(?B13Oee<|jL?86XC;yM@W4vye7GK1*Ih z1RBLrrUQ^Kl5bjsqf93tUnM`1R6(!&IvHzC&Vd*Ab#hIMI4|z&~sgTE!aRV(89pqG+$<18;Oocfp01pOTMC% zzhbE~iC8agC`wwIy3r!kULs|we4oEr%JnbTo0_HWyb%JTOH3%rxfV~3G48dY@1Y>MGi+^n*d3q zDlBpqdJ1V$Dsz_4pH5}>f{vg`r&3IX+F(yP5Xf4o{VhT-?nEH#r&^>n_ovWP&IPh@ zs>UL5(2N4IX=;6oEJ9DYAIO#|){enWgtLCzrUbx#rE9?eq3z`yt$l{ZY0Hio#LfP8 z${?&U&f|8;Amqb&_Z}I9z69spoiYehao)Xe4#F|_K!=pMwSq$(5^;V)fH*tfB}3y% z(KUlGueVVf-E)vHf%J4pCa-@vBy#ue@S5Jo8T$-!Es(t@W2Yg5kY=l|Ft^MgPM+f( zQs%~j6EcX?-V7q&-{HJ6K-dfJ2GYx=icp^)26AEs;e44iCuI;ftL@{EGNh_oSy1p5w}utMrwd))UfzJFv_&V8}DbO23zD%AQgg`I%=kll^X#$ zJ2gEExpHUh!lXv7B{XK2&(&8SntIqGlQ4h312jWZ1J@?a!i;}-Ug`oOkdXC!AUL0w zT4WKnMRy?Qr!H70pg9i6@RV6s^K!n##i{su!a3uMUY2Slh%yewo1kkP4E z*4I?@JSQ!{$&gf^4V1I?>7zUaNsp(k=>v>{ofkpaZy@h-xrrK?+oQaUnJ*hqx84f;7b#Lk-K?2|S-jv)u zi&}LS;J(x?LNnj{1hWA4_xnkDMj$_@7Fc8uyzWUr zeo39b9chNeKd*wlgqQMb>ROAq*7-Gcvmis`9k$c6J-?9^G5mgb5Rw11g2GQz*<5n3d^I~gEthVbOIXZ-Xtno7P)#dAcF^xGDB(58x}Kefo6 zK$t3SInRi&e?0@FBnNpBNNM_ilIrOYY32ec&(P2se*>g-4#ImRYtlvSQ9l?5KU^Q{ zT0oK+8u#9DT?ScHt+#Ci$ZPPZS&FqXG%WiQDEivz4agaO!qT&pX6^K$^8jSMo3l=O zN2QVbqxJ-!b<&*$(f6`>-e%qO7|VzAxK``nEdCkbY)3;Ij z1dBMCH%eb-5hwG;=@%{HWZoqGl^|+YnfoSb^>(I<2g^3yEQ7c<-6H*q<>OkXZ92Sz z%0q;$vvvANL7w(q>ui_4+|sz#*(p6g3t{W*p8ipgK%TwQ{*L4v$kQp^T9AOIb9%iz zntkiZynlKZp_w7`L2A^2>CRaQWj-i`XfO!_gAqBab)^`f&>yC zov!SlGP@c(CVjLZLGJ%a_sK$-`|;`5EaGzSo>kVeY4bpd9FW23i!8$4P2`;Py%xC`cH;wBlA-C@7I8i9yma|4%BRKC zD)V{iy)1IyQ;G~r54MQY-t*HBTjca{SYt$9=ciBHRrpA`P^spEbUz{(9h{$eVfuVQ zf?3H$>4};uGb_0?{laeK6U<7kNFTeqBF?A1GA%QOtXavJbRVG!W+h|Nr(49$O0G>0 zCt_zMVZ6yUE`6Ov=#LS(F`Yjvxk>ZF2>~lWFFnp8 z^RTu|ng_HLS+kPK={rb+vdiu*XeOs0vIu7-X9IaC{gg#GE4doTl=SnK^V8>I_ZG<1 z^cxoW9&5`}flNz(V3B!0<9#9^GtyrPqWv_2vGDnH<(`^5EfV*nUP=!ZB+!ljrl$yk zZ%?B(Qb_e$diGwdjbQy}PI|Asi3Gawe)>X-INg|^b~`?9%w3QkDKvp@EJ$Bx5vLm; zrzaAzx^WzGU!0zA5$Xn!&+F;Nl6tzaq@HdpNmq7K&Roe^6ZP{&`jCATp|;TP{WAS; zK}MTdpyBt#zfPZPktg7#^g-_5rEj-Lav)Fld*-L~f-GbLkYCf~oyj@Sx=>xd))m$D z{Re5ZojB7%P5P8zIR z_mD;0NrUz4rd!0FG}yTAHRU6>chVo*qHcjj+}qq+)O~Fc_n!C`bR zgGjJSvsK+rg6P`L?kMS2b^BWyuJ&|=AKBK@jE--d^2|P<*}CpDp&1=-XOV5|F0iR~ zIzUH|?ds4prt|U0ZW-Z)cQM{K7f-|5V0p;AeksGS+3+$=cM#UGn7(G1(&=-^T#PY@ z_`O(VWBT_`=5xplJ)fZ`@#W>dIbxjh{komv8*IzaH;W{!FQ4-D&3n(1E@b8$$uMlb zYQuaYW+#*$Z%dl3FitQZC;#W;@d)|@Z(#@v)GY|%znb4Lj$wbq{0H?(e&=-6_-R7t zo9BK!F_X-q(`|wR{Ct5d~Qa5F63V>zjZDoeaM`N z*&^kcZ0m>dlvm{p=v9u8@iB^%{s0Ms`0QtYp#cx!h*^7T#Cj|}0v zKdH~#eMK~c8zl?lKIA#Ls_}Rq?YCK~>2yBY`S}9$8>~sWpcgd_^LuJ|!#Hn$WV%A} zZ4(-={38YVZ({W~zn+Mb|KcXZvp$|~uX47x^?lTbd=8l{MIXcF1l#}ag-1osnqSCh zyM)d9(}|-W7Kk6wnyDhDO`E3EvEI)~EkC_)Vx}mao9>l&_*}R=KZ)ESTduH_i{&{R za#QjWkvn9RE^O%{1?l>vm@aJTBbGkeDE$wTE@IO~ZMs+{-MzK61Lz;0k-xJGzL|wp zK0a%I3Z9P@d*zw!5^6sRg=#M_>$P^qh3AM}fsem8?Wb>^Lr6Pv8v1>9sCLcA+BMOT zwKrB zS#;#bdRIOn%O{+}XIb&t^00o?z6a%Y@rs8E)<=FiCx3oA$Iq3E;~3@xIr6%CX1Vj@ zU3nD`<)mXdvvG2E<2%Q1#_M<)vg2adj>8et-;U>wPRGrV(eXH(8IP%d{Lht-b~1SO z%n!hEA%=1~e%h%B{90Y%X<<)+we95`W z+9&!?qZ zE`LgTl<*6g>&0Iy6p#JX3YGUbjKAc!i5>T<#D2m*wf<&9AFJj;J^fPV zhZEptn$3^x%yi6$>69*zYd7#OBp2&b=~XWBzuL;B^2HmJkLA~LhHW_`Hvg#Q7qfE4 zg&*^$9F&v#PdT-mx#cF`EzwS5&)|R2oDQtZ>zB^O^NN#rJ3^R_~ToC zAm?A`Nb{2BFnE>_?1IPoj!JjKhJSG`GT z@%es&^AEN}|6@95zga(QCpSORd|f+xro}1BFF$1cvM1Aiu|0L13Y#L#`-m{V{CKuE z$2k|znpHj_%O`C41oOTvj#YY<%Qv@U_Am0E&Coa3*=OJSzqz4r&V7J%A#2wHyPKXi0XA5jK&O@Ca^444#92rR9bN$N0(kQ-wdyz{$8$xSdtLsA(zd8!^1qK>l%au&f^h zenKHVVfym&sH7_|kF9jN!J=Qmc)0(8S{_$E);H_zveOubZTTWrZ=+UkurhD?_(^(?jL^ivOzcEMSi zM*NX{J~vCd268!j@A|D9AM&4FzrARj%I6PgSk6NE<>RZGAN@h<*Q%1wl|SE(sUCV6 z`#kq~tp``0>~eDCYI!F0)He?mF$|esuv3+dpKIq84bjp6AN;uTck*oX2%m%bl#aI% zyUrNcZP$)!moWZXJ9XcbW!q6#k1iYrdP;t}^%t*^=UjfI(0|ymvGj{D52Bo9c6~x| z?6OQH?we+F8G7cL7xa09rx=FJI#xejJLZRKH+*ydV$#DiXwT3$-`Z!5hb~zCbo5FW zGKbl5-t}u|hepbH81Qrb)$!Bkz|Jdu&<;u$F;iu{4#tbV(tf__WXFHy6ZjALeDm{l z`8)k;EOdI}_&9&;Q5kn4nQ?vCPFjC%-t?KRf0Z|Ec9i;a^ik6t^JUhzqgT3+EmzoR z`iN=u9_gYseat*Ina^>XZ&8MimdiH>NxuzQJZzM2#PW6Hyl>X9PxVm zavRo3NXPXj+VP9zIartC{FZvea?vl@N7gSrp=UascL(vGpW{%grPO)!q<&%bthnf1;y#FWd=tRr3v`SZ)m`4rbr>5r(KQ7H%ITV8r6 zFYA%zQNH=}ew?V6@yIum@eYM67yZEX#;F{xzy48ljpgU!Id9;2&UT|7IRDMXHx@d* zFaLt&bb6?M-5=Qx8tb=>#TV+=jip=O_&+M2<&{h4N4|Mk{Fjg!yM*l-Hoxq}Fk-g3 zm7&gCsVOhK#OIJ%Px@t8;>*h;l8*B_rsKR$`Jso(`mS$=%e*XPnjs&q?_}FgHy$}X z`lFtgCC3&bw`W|)bqw|w+6Cz^Jt!@{s(lValy8*Q%ZM~X%mc@>oDt*v6SqE=zdoe& zfq%kuT<7e0KEt@VN!p>v3`4sxzvbhD(^9ZY{EugWDY@nsGH1&=d|3Q?w)67PQ4(FZ z^39s!mxL@|yw{KUEc01V#n8v@mg&UinwzEG%NI=}zHBS;TTYOkU5f7PD~ z$&FsrtIE9@AF=CfQG0G9W@g|tBh$Ni66eFzSGWH5iR=^jW-FP;=z0eAe-=(Vxsd7I zJok*E>D~HmD4C&}UP@ZhMj_5~3-2RZtyW-C(kEUn8%#}aj zn@z`Zx_xCQNB;BaR*$!-ro5qyyiLXTPcdD%V7jKp&lf(CM)~B^>3WxM+FSN`L%nhJLOlCyB8rw(E~B%*XT3894t&{rO-X;^uSD+IgxNg{rup6c7(?IeC1EHt zA6s&z;$vl844Lbsp5TuPUBuEyEq%*0JnZ7=sE%5d! z>pP#H${jXctXx_T7`KH_AXjVng_LV!vDd{`&XSCrn$9<0p*`3?)DH~HJ}UEd_4|UY zH|H-NF;40CJcgnAjoIV9vwu48$2xS*dPZO$CoW`q>>G+b!8@@s4h84mT>M4jNEfVQ zxcO;5|KIbO<8SW1zdJ7x;2byd=~%D2Zx=SViJzhLEVtqz!I_f%lsMPb*iYDh$bMh@{V)12y8n&$cI^CL^Ktp%9G>Wr8-MZr3%h=qO-DKC_fRtWFSOGx z9qH*mQBH?v%k9dwyyx)p_xtueQuA*oA$mAC_o23e88>lX~$p{$NA?Eywj6;ZO3vhT=Ky(eGuw(Ldxq z1nGl+I2mon4~86H=%2Fv)sMoPbz^N#^c9X2y%JxkNqPv>$7_-p&r_fs9N z{MA0t4vofn4$fa&$$AgoL6q|ye&%^&%ww2u`vaI);8$nw@3VfE4$<`^U8XK81wFN?hnn}ypezkTd{ zMCA!tKRj&f2`BkmY5MOg7{XrEFbw17C9PM-$BoB>@J0gZ=(n@}AHg~=^>5_COy}%W z&~Kgn(ROp^PvDvTd1dx-=O)lds6vpsOu?|!<{3o7X6M$ z{jeYC`K*|E0_EcV_~9rIH+Qf4xjX#6>HX=FVk@*Ec5wndL5ra zc0D6(j*;;O=fkXB*7#r?A-=5fkMY^-Kd!!=p1d)Q@`i1Hj2P9cXhyHJ|3U7zNEb3! zS$*j%p<6G)`AFykH9_qJ&X);2?5ykyMNDVuZ`!YTj(q#6q{cp$)ibxwp`mZ~>_mQ; zzt3VA?C&X#{Yt@u^E(_D=x?%I)X!h7ecVv^;Jl=@Kl{Ock#8J+F8R_fvmdR2afEum z?>-D;=06J1AOuKzoJE~NadaXsG{vi=wBsH{I?9Z$y9sMTMbN1UMfDm~^0 zGLHyZdiCRIe}>+vbgVDeUpUT@o_0pl=k_P=i)g-K>$e4bPJUuWgHNW8f3FjyMBz}+~_OGwV*SU;pec4rhI`Tzr=L zJ6pr!>^ha&LHH}S|GV=Fo6ER|{b@T+x^S&qnBKSgU*G;~d86i9u@kY3eQ#}+d zyAbaDVXZ&6&lC%~@`ZcrzYVRY`AIUf0PjmG!BF%K3J$HxwQ5gq9nfI>T`eZgv{%*a(t$)8| z{YBaXwyUlqMa&uV_#CzG&*20QyS(tPp*TtdO2k&yRXr`Sk0;5bxhXpLzcNLJ4C=^NCA7T<85g z^_@Ads`k#VuT`zj`TiN}v1~i`N1Q8vQTyeJ^!Jr1|7I!XTV(AT-uJL}Enn|%5jwp8 zBJmM3Mb=MnPFvPp(einAE}y*|kFD$d6wwKlMue;}scKSGNB3 zy?5V^+aYsh1?AEAh3Nlp3%kX6A?=u0t~~wCr&oSa%P(fy6&Szs(><7^U+waV8QM$w z5!5645y!0pKJ33LUvcJr{`~rDs$8_+fxRxad`mKXzk$C-zv9obSNZ)k*Y6Dck3x1S zzn|vUQ+|9?_E%`v`5rA>^zH7fzmWL=A@S|5<8ys{w%B{cN!Qr(6wn9t9+G^R?gZ#H z@dfbnnD6c4Ph%fL+6nJX{Ym3WemgZ*&&!H$sGO>YI&RYc(E6!gAK7%Qsa0v0=|^e( zY*zRDS38JfC7c6r1BWVZD?z z>i=vY^G>YWiXRj$=+`>GrVzb*@6NrK=+37&e9n)QD`fc9CyrZZFJ>4q$Nj`GY7Uez zX5ZI~o1f(TRgrm9)?cFCAYZ<_GKN^uLF=+AaDy)SvA261V@W zeh=0uVgFc97r_289~ZCvyMDaV`<6Z!@714*n8WP4koHgC_Rso!&V!t^q_n53XO%N- z)L-*#I#^0Ozgd;z#;Vi{X9o-E4dXd}{>QEdeNxMM#yuBj7RDL#cP{VB$p7v*)(`ga zr!fp!yP)?QaU9d}J}Toq?=jf&bmkV9{(*b+?6_WR=NBbX?;M|5?;M|5?;M{w@8I~X z<94|nw_Dh8yQLks*RbPuEAvkox7Yl`$8F}jvg0=W0hW{g0R0ozBmEQd)paAC7qK3- z9~U*rKUiM9E<{gB=;t$D{cz8`zpv`SesdIe_pI@rFVgXu`;qS1`R`mm=DwEBFT>VP zi^#edQ~pu?O8xJ6#-Gu9YkYGm>>b-9e>_opiT6rn{-^6Xw2!*Z7m{+Y{j|NbJZwL% z^U>aCr(+G|^IKhR9cSFVa1GUmTfe8CG}W)w_r_v&{Vr&4Hy-4-Lm|8&c?#*PlareC zv-Agj-;a7ly{Dc~F7ChUy+>~SW7U+4dg;p5m>%=KpKSWZ^mKXaUFQu!y}S1aoqR68 zhH%y&?FHr2c{sr7 z%NJ!I59>NLswYj=*X5aaFu$7yGvBabejKlvAML%aUj*}){QkEh`<(0tZrpundzQ;L z<0Qm68H~e>&-T|TAJ=>G{b;VgBrp%*`pbnF$C&Pnml*oy+I|c}_`(^{uubpoU5Z-& zKW5X%GwEHvn(nWkFU!sPQ@f+%JWIU1cw_!fWAXX^kgi*WtzQ(e>)^pXh|d3V>y_oa zJ|5+G^J)L~KEU%6~;nnk@y!{MqufL96cH^a!tFifzJOAqT z)&2I`ZyXvk30#)c0-i9>X-!MUCDYPM;PNR4;&t9svWdHK~GLV1eJ zy%H9i3-k67b^kHACsg+vBSzCj?Y?8orpG)=(idgg%h?-kAMDFK!~DYbo}-Ap=O}7g z^(F3^ld(R+8guPC&3<1&+Y|Q+%lq3=bHD79#>}2Skv?wk|1Yxbk8<2aJgDb~CEwt= zsr#dP&qa_<-(L>iS8?sA-w~*fH?^NQK7aT9RacJ2%6*T0pC^AmHosrG{x#H6taAnfVfrbFC7O_t6Waf4!@w zS3Xh8CuaG?EuSJ&EBuNrzY-IX{piw6e{uDfZAY^8cvaa$_ddiy_WKtu-$MG$uRYPO zFZS0{EaIB$8tDXM>ev>m-4{h0n7&*jly=X+H2 z=XlPU{_B7CQMueY&mTQ6a_b20+>h>)E&sV6J^viD-;40XujaU}^A6oVW6yBwC~m!> z(0QPI|F|*wKf2zuo*MV}|AToN?dAXp>(|5b%nPV7%(s51-|NW6kDR4+xnV$;i{rbY zLjT9avp-xUrNDdTKBW$syYJ=fuHDPg);qv>L$ zOdql7qc(j^(sRH4=`!*u5maXRGUxdK9c1uBg3QU5~5lF?+q7{eD&S zYqeAL{h)k*bdlU=g8LliupRK-ISJi;d%pG4LiWA);CrL$cNLB=#J8b-;?8*$@(Z)$ zoxi7kn3GfIMNHpRKd;bvHfN8Q*UxkQT)y3PxU;uSm9MdLG)~Tj#s${Hvf@{Tel^sN zO=&-8@ACb3*RF1S%?$%R&evb32QFMuxtbiXd7O>kev|JC{^G;ej~ zE#!|D(o2`FP`tYbTKf_9@$9-q{=Lr{AI`+DXgcMCdq8YH%kxZor04yD_Z5d#(3*rz zGyA?G>xb(RymylCLvVkb>k4`fxX8X2RBX@J={g%J*gvUZ%0Fb^o6!5>xn7~~2Su&D z#Qi{$U*qZYJVyO=w7bkt`KUk7a;W_7Jet1G$8{CHN7NKK`{BGZ_ZKzan3Xr4k=N~O zYrW|?&g^{E{|~-f`K;7qQ133C${Dux9I^Erwe=jc^_=^@RYUSSK3cyKk#|{iTCRZ3 z)uXnbdyh!pbKtrk>3PngQ2n|5wcgyhD{U{z;p%Jm1+4#ozmC`VZYk=AF}ttD&^ITp z!!Y;#ey*qK`)SLjqr5tv>wEodcQZR5P+g-=``uQlIu;m}I=^NG) zmM7mY(D&fNwjA#LkzD<3s2&RCdm-8-cuym4^D8PSKhGW0{x?>StUuOwp?Xt23)}n} zuczGp8`O)|2fim{-#gUuO<4zw?qB+8}*#EyYB?+&~l!r>H1KJKD$3<>yM+? zddz=cv2gplbgIXJo+_W*bZmdsGqq2wFHPr5`S{+FYsY-P`R$k=ujLBb*~RCVr%<~& zdRGojhkNftZ*%Pg<#y*sxc|s|l{drv!o06>O?%JqIkNxi+k3!qkKlpSe|MfFBHxK2 zAKgFA{eBGf{;S@kclVAvK1$Dho~Fj1WWS5d{8_*6V4Yw5symdw-go9(9N&Rx1kdJ2 z`>6N*q2A^G3C}Q|<6Q1NfDPl>-=}f+;_3Z_*hiH2VuO3?mW|_lp6mzXJr)UbpD9tH zd%T~W7~Eq@y6pQQS-usy|1qBr?f2RC{zG@qA)nd4?moHv@60&d-81LDlj!uy;T*5B zzb_CGef8}3cNTm!q+SDm(S1i8s>G$i4GxggPer!*bBbG_$+C|$T zB=to5*-y^7MvSSUlu>gT+KGNsC#l!^^?Y^}%M-Tr5z|AS>(eP;rE995@!k%~ZE$bL z;q4jHJ~Q-fyEa^ZuDl!%UAo=((sb^7>MmS!uHxFCJoD^N`mFRJ({UW11Kd3;Uq2J? zp7r}xA^ZI*d}sRzriVXi&#?`+_lP^W{weya_sVnp(D4dynqSIvzR8!v;T^{@-q``q zmebJ(&-wBwze4fBxa-E>LZP!OPLBIfK8`mR$vq}s=DYIE2dSJ-+jhIk>XG9+>NCa% z_v)``{X2Vj@ig+&@6qyJ=f^Q#@gD6B@cj{fU#{v##(SpEI1Tf^U+U^#?{jtEt#b8@ zdzi%kfFE+2rq}PsdqzWi-&V>WGD|;ayz@s~dKcE`b5u9d<6hvq7{X3UIqKiLntLBs z{diZeE_C0^nr!#Y-Sd`qySxfdn~9y&b}dwIg>csAJ+Qqlq(10-`MSQs`3TqVIFIk#p7~;)ZpTBH zZh4hniES*~Co&v`%g!2BC<0)_cIZ)n{$Mw(0;6Kvu*-+*;Q8THQcueMdoKN(^J=Hvywkc4? z6s1p>Ku-^@1==e~dluy{acLw=I%o6kiu4msQ zb~9$a7kv54G3Rvh!FsI7S!BGc`CM!^+ndss*#1^(+M!>UmzSAW<$eF<%ZL7}mM3mB zzan$8$dC1Q$+twx;o<%v&9}_>($AaOe4DROzJ=O}_Yz(w>tyxYi#XeT+3gmV^lTwr zCl1=1>1n4LYDemW=Ii)JYg#{ZD^wf`}2RNsy;k)t;Q>k z??hqWfb>o-^}7PO)jtkpz9Z)Rc=azsGVW2&>SVkP(z*DU%+GPZ4d&;}CqI2|d_?$B zpY^+h_)fujOci`*nd@85o-tqAyX^Ro+m;b2ag}y|>-1 zZ=qi8xuZQEVLZ+k$-FRZW(yuM2MHcE-;ZZ}AWw&$d=B!x(0&i>;910@cHR-o%+vDw zjn4P*eXv7GAF=bh`swc6j`5z+b4)@0u79e(7`Evnc7BNW17~Qu{Csoi1Ac|dqxt>^*P1uY}_+ zzfZz?<#*YMxc+qDKU99V-sJGyb)kSh7Z2Ncg62!Ul%py6JNxYHw)3MkbmKr^$4SR^ z_9yJPqV40`aRT;5^bO;fv~$F^OEh!tA%DJ|KOcAf)U9Xiw}|!PzHg2130}zOV4WhL zU!nDme7hcS(RG#j>m<6);~S?(&VIW0B=gsK^2Y)9y|pR3Q|^%2TIO@u&yoJ< z<{2Te-z*p7X;**vx3*vNGZ&gLvpc#T z6_#}t%H`tKPeMJZ7SnKW@nq9(s`NhLc90)ebEcw z=zKOvz3)|&5WGOyWexR>|6Wh@^@JuZeHpchd&_k0e+p# z9|ODR=zbGFHK5byz@KpUi1jC3q zT+W|FWqjfL@aGO=EBQwK2+z{{mfo}eX|OJ@bFij1wAPA9wcupRmhfPhdw_ zjuUY{j{RyV&d1T7EUsgSac6CY_#W!I3}dFcA4BXPFJM??PQ)|UadbVn#Ed{X-d}w_ z(s5nmC-5VsTc7zA`+Cf02+kKUAHAi}&;95RD^$*{`ZL7&RjkLcy(ur-Ee1b_ z?Y4o0QS*?5p70_4OP0P!_O-&M+S2c8>CY`duXK2?7x64F{T7zUy$7%BwSk>;`}th2 zqul(SJMWqD;g@s$ljUH0xO!O4kM;T2s6R^L##6P!AvlS(A z>i10?SM?l|t_N}b{DU{yf8pQ!&Gf>sMo7npZ;!qSKA+s zk4>9zG^8(oCBOd9w$rQHU&$UH|LpPS_v$Cy$5`2U9qT>+eDr1SQ?J8zo)wXK7VDGq zYQ}J0O@H=a_>I~1oNo_TR=-PbWNu|vj%Ieg*WAwc%4NPs`Q15$Cz2|c&WFQhE%C!6 zW<(oG8Jw@xd$i-`Ygvy7&JF82b&0tgegWqlx{gq0^KB;iab1Dy2@Tc9iM7PTrbTOp z5p$J1N6lBrpX&$__#fQ&c(H~dzSkr5S8Se>_!9Fq_H8*|zg^;Wp2KUR5c z`h8>V!gx1N?k#p8B&iPoo;LaVX{>AP2qau6$sMySr{$7&VZ!aE1`+)s5 zIZqTaOT@l~?e|}C!pFvYJCZJBcC_mUx*nnD>u3j`JDS=PGgr$xLEM}!&qd~HgpA4E z?+BUg#V&=-&IoCDHrbY8)NCYS%zP?#G;WI8Gj)+^g^=gtRh|-~@|0S6%Ix|`v&?xv zEsyRCaXp9U09jw%1~x2@`);|)6%o0(?$}Y}RC#D;m&iJAk;qGV7DHa1*QeaHv!5cw zsT5o8W>((jR^DE`kJ$of5rYmjm@`%`o2%_9e4V>v^!i!rGJ;i`ajoC^;}2e=`~%{ri(Q>o#qqG zobT#2n$r4auTczf525wnmkyyk5%V$j^=PlTzDv9GBZV zjkhBnGjr##d~uPJe(Oxx$1gTp;@lonOt?Y${Tu7n%>N2J(;i-m`2zF5ME2n@?v(Hu z_ZXLHx*KHO-M980^9kfaIqnmAaR0H$gY|Lnp&U;O9yc!uUS#f=Pq~V%JS8Fz?K$8zxhUUUS3$XPo>ZR0rdIR{@14NUr=G26_3XDapX25Qxrd<0T(=INi_JHJ zmzbG?mzoiRmzg!87hI>%eU0X33h1~mdIadWFWOJ&Je#j?^9|X2G2gIqXg*P!Pt4{M zmwaf?$e-oWFt|@|N5R7;h5a1Pi@p>2qULVoOZ{=@t99HDnf}O+dZ6b(aPCW?g&|8{k8KV-d>3^UafmFUl|aS!(s6O!UD+`TciD2mKd5=&8adWck296F#^H zUie0>95E|L+;o)E6`A`z&F?6AE-_)B&!uJ;c`h^eNPIKXL!O(nlJT$H%GJWk)zZqf zMnB2QKZZqSf^DBmgine2T%JqKt@2!EzLMu=W&)nM&Z73J+zdi} z(N6V2ey}QLvCwP%Q11IbB!B4NZ4ARQFXA{hT-HaT=Gqj~#VkLJALu`%%(hcZ&;3)T zKNR7z;$IWGhT19&%tr@zi*Ka=i)G)5aBr%+H0O;VS1ipq5r~jEVS1= z$HIQhb0+l1u9x^CGfLu%<$Md*8*W>`_)>emrOb>NLhjAXSm-J3+&QiITyD?1w6N!0 zTFQABoa#60Z_D^rb{zfv<H-#?Xr+n~zRf$JCNqofeiQ4qI zuU_Kg#-(4Ge$bGf<^%sKmQe7{?c}(dqG1Flo^YP4X;#c6Dn}i_~LVul*I;FC8yKcHIK^+I^_)`-_a%QG1?G?J(^){UFX?wEc>0dzF|m(q5(J zW@*PV>kl@|oNvot7r9%;>9Em!^jsmwjWh8cmFUw)Ebrf^-KS$+hBY%#&i{nW-EZ<4 z_Z>~s`sDir;#bN!Mb9{T-s{5tq3;{u{9+~PBBm48DM)`8&cm=iUY7Ot+;p__yjO<( zQqxByJ@td>IDYbdM*4@!ugJVzO@75@h=e8PB=loaIC=E^(%(=1OJ}njzV*Z0IbpnK z`Ydt%9ysgMoiF>lmpA_&9#@{#`bRDJYqCocxAbcZ|*ra^v$vMeW#-(^vqLt zQ=f6(+NR?iu+4c^`*%R_$Zl+Q*`deQav}ZDjmf_4&L0{YRD8>9gul$l6i7 z2M#@B`?&Qri*3luH&ow2#wq6<)wFepBuVy!87h$t_vOA z-=&{?bQbH`H>cY7`P3f|o2P)&FTZmNfsq|lpR@P*NZ-&tANBri@r!-41J*T2=jLG% znV&)LQQxfpXC5Hmm^l*p)Bjo@ei+vw^&X~Tv;F>jE-~BxlOfj8<+;o(k>|gM-^==# zih5-|_h`)!eyoIHGgR=1oi9dhed9Z+w!W1f?|IvFN*~NG^V`Se(;e#!%*W}y(nT_S zv)hq$h1&6r`6@U0a@?Gf;H*@GoOXhZn*d54D!SM zB%)^#*&pJ%h3*f<4D;hUn5K98??L&=pZ#3-v%;1h_s}Ch+K(IIzR}L!i+u#@!FRF` zUu4Rf@wwQXG?!tCxkSQJbEkx5<~f9v%+;TkOUpxfRsM*%UgVEj`D0f8xRt-i%2jOT zDzWWYYUL`kay7GZHMeq=Te(_TxmsGe)>x)oY!9u6h|MophtPV6+x&`be#JIF%rkBI zwI0fBe$6C5*Z!<2-m6Ca(Dm=InV)7YMaZT~(%^d#61=YAsdQGLm+Z+s2ObnC?UQZo+gTs$wX<8m|e zme}*a|6DyUW9$C)=ViK%;@;Q&{X*V1K|6K%eyW!%nr}Xz{O8qtwSNCD{{3n>*VqpZxQy z>&t!y&P&R^W5m2F`xa5tB1LV8nRW>2$B${j=VhN?C4b%b3eHjXgr80Q(fv?-=U&!L zqUI678`r15%098quY!9i-1#AWU#tH4rjMn*eDj%vA@hZVVROE%=iw4Y%_S1*y&atA zxN~dU*!Sb~{A0){Kg{cdPsH+zT7I|(Sop++pPMgd--F@Ks}7O*BJMR8KR;}`r`WDI z|6=7?Tb^U)PRS>3$^|bnKPO3t{Vm{JUvclp@Lp`jxN{P$56&}I_FS5icb@ojI49Ab ze8YC07Lj=a=bO*h5)aNL={ejYvz5qQY}%w4Ut-2fc}i{lmD&1o=WCnW^Sb4B{?)?H zA6wdUNNdRakNSNk#wq%jk7HiKa=wi5igI<55Z_6X_w1u)IP{xxoraL@x-sVWY?t$7 zoGUg%rF}iyuD)$Y+&d@oqMSHi!**F$LVUkOLhKh~T;#mzYzd3Zwh|VbeIy?9CJ9T; zeM(qxUiSM(}Vf|*eFWcz~;fH+! zS&zm!eB8&xdMdi zC-ZYYcdF9*%Aa2^c!hHKrq5y8U$k8Kz97oQ^^WZG#FWhGJ^Kgym);ANTTYiBL$^MV zoo}{$4f$i_ysZ1BgY@`5-Y80?_vN#`v+t>1)qWjwa{9t`dDam1q#=Ev{P}uAxmW86 zTUYx7>w|j9|NgJ($&F)GKQ7pdq4q~=1kZs|U++z6f2969oH54;?%VrI>pxHHru=fp zchB4myU+B?b1x_By(#y6lCRohcwlnBp^mQsuFvE*+S)&-L*hqgm>(@x-3j zkIzrnelY1n<{Zn9_Xs;XL3>TRNq%<>VHhzF*mInegNVl0_XpfK({UX6g>3)C`(-J% z58ii#U%(iRUw*%V`8IXDWIlhi-|!{&nVIkZ1-~J?{@nK^cgDFR{-@)iFZxM+c?siu zA)GPU^wf(DWxU4zuJ{MJ@!9-zo`!jgjPoILxtwFr{^Q1d>had7ca9s>zW@)Ov*Rhx z2k)_+^uAD+p7;y!Cz<}sDcX+5;amlux&FZT?B|BYspJ2t`Dgn#te1wyFY;@u|I*ZP zE?e&?cfK4=;X`?Ou7u^IT_hjfpAE@-YK(W|jM`hzEU(`)bQbH=H(MUS{}=Xq^!q^Y z3%anj3Xf|}o~Dd@Y|&-;InEAJPaFCk2jyV7Sufe^T=~x{n-5D&KaZi)%L6;J-qfy1 zJIQ_|)@#-#8Zt>455wjS(eH>^I)ixBEPRLQV&<4H8OF`|NXPRhXG*$a^DX)n*GK%v zS*}u}=dp3`_)kplo3-H=vR~dWd_CzO#7Re7`xEZvxA}f4a!1XC#~5F~zct$+7uRP! z|HW}f`)kB(Bjb6)>9gtPKwlfmNBM+}i!U_Jul7T=AFiISP>UMw_l(K+C+Lr`A2wv) z^T!8LX4`wFYpOkN%ppHBgXN~ix%D2m&O?8jcJ%G_ z8L$4gd*(QCf}~TN=^dSurzztA`Tic`75O%{PSXBaQu$`Lt}LHB@9G(MU%Bd+d&YSY z-1p7$yK~Rk&)M}sob^GvLhZtsLi+3UaCzJ7_gHtM{2N$5I=jDQ`)RqjXSyHG()%)Q zu$;N^>L2Fgd~T}0v^@1f`RRAD<(Bt6v|C@x{*DCs@jF?C{INo~)Fb>i%Axz#>c4Sc zOY0|M-n@tL>gVOt6~a00YJF>Za@bwYtpt9$#^d{Gc3o~+@tj|BoOXQJj+$QEt&kk6 zq8zW_y+r2EdT{v@(fYx?3kBpS?);A+o$4Ly(S3LIBJ@YbJO9Fk>emI|D{#+lp5^R- z^Z#6YE}pwy&wM(L)BL!uKsng2*>7|n5Uks~cpbNJufMFn7G9@x^lB$?jt=XUtbbhx z*7a-V@91_AJB|H6S=ZC`YZuS<9gFs+T)&*4^4?>=gXY47eI`Gqb9Rg06=%uZyyH4N zlhfz2-i+_x=JCl+$CQ6mJ^ol=z1P)GWA#WmUHfsI$gju7%GFrBtA~7j>o|_}8MI?# z`qNlBvdi0eIdt9W_iU$?mDlxO{a#m~m&c!~dP)9b8KAe+@0;!XN9!TbTh;5J|2O=c ztIyO3?RR+pN&0L3eUpa#P^Qyzul#-r^@aRaCLgBP^`PHxKc%sCg{Jt4PEOjZ?0G(0 zmgO%rPjKl-x2$!BhWIXvzA5=~eoMOS@xD-d<&vg=I^;WF-Dt?BgM8Q@)y_M6MZ3as z|NplC_)$-_*E$}0=Av<0FD^V+{2bp@r_~S1el9XwVx{a9obo>fH_V)Z+htC{4Kk;g zq`A_pgK%B^HZzy{TbQY!oNBf*BmJ$+Xuqww2EXh5t<6pN-Rf@xx^3}mXD0YNo29th zZmHP~&wJswxB1!cgx@~+9boE0hnenPchki?9KRmO=LmDT*VD|7A89s^9cjLeA8#J^ zPB1TcCn4;M@HG7T;nyF(0r(BX?<_MqbT-nTZz}x@P0Ak*K9`wx{^j^xjXZ8JOYr+T zbd&ixG~W2(@g^F+%`^+&VOrx?9iC|F!greu@!K?fuh}Mizv+PAuHgqwr|`q(0Q?RK zKW2J_A2-L~cYJuNIVC*J48rfM@H1vu_*ru)ej~%P%r)T`%}w~-8h*vx9e&L`h~J~( zH_f#0Y%>eLm%{IuH^cMHlJI=bT@C;=-%E@_#G4N z?DdZB>-EELQ1k%roamw6@MstBQv8NTyLls{hk2v%yC&M*yB@!rqKA98;x{4M!@C>5 z`=UL)2l0CpzbB$cdNc5w75$g@5`M2n|Lx7eZ!UfxM33=4#cxUUIPYuxzK-cD|8oxyRDz6T|b@AIUKE~S=zb)fed)vgX^*Z3UD}H;#$9kRc+c$ol zcR>6GuN!_n@H;9#&N~Lb&2wJLpXCkkpZ7+GUiSL>ui*Edw}0$?Z$NAwe)IAB z0KX6MTY%q3_$|cmbFW9y67Q&@FYx=xyR_(MZ)DL@Z)VZ|@cR|NX8!)Ma({HFwf}9r z((f5d`db#K{QetZ1Az5i}}d*D0xmwO%kLB)Ic zXBF@1pHtk)A6~q#e@*d0{u9Lq<9CQZqqvLzYH?Tp&EjtUoZ`d$xy9Z64~h@>7Z&&M ze=a`4_e*;E(UK$m;*z8MW+ngfTbCT|SC{ExFqNpyV3= z(~@ibB_(71?@O-pOYsZiH?Qb=l>Y|Q)i{5Ef1@8Sxe@qHeqHI!{<@{(@jM>SxA>cu z-s*2zdY8XV={=~QNk~5l_#~vi7j-uobd&M?pucg+L;kL%5BqzRPVtW^eFFFsz@PMc zmrnIhDV>JDpO)XeqUi{yBmE5I{VejH>2Fvv6WB~(&q1bH;PnR5zX9w`e?sY7{@tas z@jM&PZ~G6H&Ov$J@gFTMG7mgx%o7;oT4es(MgHOoG|PQHyZ zf3?cQwla&bUO>85=EO?RoQl7;FvV{fGf=SSFq=CEe|65J?Vd^7J(HqyM$+zCf4O`I znrYZWy9`{qn}DDDYj1NlJjt68JHiaZU+>|sUS_u{&#V_R=ITsteKVYUW&S!N^ViVK zUpJcn4Kd~{q`lFwhWOXjQbVl2zGf5nr~K>UOo~yNvW?2ZoP1Y{e5|2+&Bk@c@Oaz3 zX0yy+EwF#6*p?ZrRR){2j>eA7a2}ue>k%m%wQgbtd(K=p&zN~(WBzL%#ft97_^Ve& z=C?(HUx0mLJ}QR48ZqW=k%idXhO+2ilturdEczE^;a^{w4<3SEAnjM8Yunde~iu4>Fb%lt~SlLQ{5P4ejRMgIHY|y6FbVh z)*JFl+M*7|JSv=>mMqT5w>Tr!0<&R-XXb)#X(o1QCU&WD<#;{Q`eDzdDD_;4N1#-C=ebZOohU*ObfjuNK~V#~SmEV4GfO%>N|C z<|rFewD2}W+Gcn^+w;oM9&G8K4FA&B_li7o0AhbK{OfT1)yi|0@D9=4*3jKM%!6|@ zw|fm`Ik=SA8?Yru;jh3v;z9qx9Iy_1fxDPh3C=Q zYFgINl^KlMeurTSZY-sR-^+--Lv%>%nVk8T=S{|}nVhS<&ryy8no|~*=wJA2ZI5e_ zaoC}?J$`L_t8)I;2I~~mu)WP%sBv2FjXh_Z*7janUt_nB+MtbSo2mP?<*(y~3)|yJ z{M9xq?J-9iqp|#pvD;<1?BKcnw!3#y4`Uug>_J|iUaI%I2wiWyadFW9WADwQt0?mS z@9Iw9n*@Tuy*D9|fFSK2SI`lS2-+@a)Is8c1_5aoG>$Sv8ONxg?Se!dOSI7#$hnD2n=fS9gEj;dzed`^@*uoac|{JRClsdgW7lbyam$ zb>Dl91%FWLJWwU`t=WuZZZ9{c{9UO9QH^9WZSrJ{e=Ebeumf|jbaxNbclmwD6~uRMu* z;By?y)Rf2L-d|T@-z8~2;}x8T9L_2gyd%y~4QIwLP`t9#Su96Uj1V9acoj zk;+Lnse&|yR7rA3RitWC4ap_dlIlqHB#+cUY9ck0d{PUkmDENGNUKSmq%KlO>LK-# zHj%76wjU`+Dks^b3ep%-CCMRGk*Y~GB$rf6sw35tJW>OxiPTK;NiC#SQX45CttNGn zx=10Zhtx~jM6xWlA1OyFC)uP5(il=D$stvds!25@msCrtBh`~UQUj@p)J*b8Eu>ab z8z~^ICUshJKku?+M(?t=z?+|UVQtrCz4NM44}n64>xts(xwFgK68F$(jbt4&MX7a| zcYCbE&&E9;F?y_{LE~&ql5(#lvu%$hv+^eEqJ84sQx8+AFvQknU4%JNuMR_otB7V0 zeUIvm%5n+v=w*;Vjy74#0R$Lb@wmvvb}@xG#DJH5-=A8(xM9nf{^>2s7C23whN z>O7@(#G0ern2BA7UO|-^U#-L4KeAnYdA#O|TU=lL-l!g}@a<(DGopLXdh~-C(S7E3 zdAP%-CKkr4`kGWr|9HLOvNh_J)VG1uLdvmSI%%tA+!^YIH*h!HLFcC1RA2KM(SGJf ztUGH`dUWryBX$IgQ6JfK`8-m6O0WN>BU}T+HKnA-+PvFWl5F1hD@paKfq2@fujPy= zoGw9q>W2^F@zKnb>r?uA=yvf)K6CR^a(&&Xe7c=$Np4C;Pc6x1T$gccX{)8}x@gQS zK`q@VU)^77Ni8hj1dbGs?b5>j?6F3zjL}B&*aiW^jp1rDpl^jCd;8U_+iI41HS4yT zDfe1(BH~5$&}S&CS^61jlDVmeHSc0e zcCmb2EJ1IoeN{Zyg;A^NvzuOPQ*&(F#C)x^?vwhehAdT4`e-*EA4Ta+NX0`vthCfO zWFEP+^vPUWN?J~`N#zVzu^CB>corDGi#}cW;I#O3AwFl=9%FM1%Qq%1^Y|F1Jcj96 zq#R?ElPtz4PfLF;PfOp;(U#lHCbLupQ>mbDMOu8zNwcGq9laZyt=`0aM(>Fmc(p3o zl9g;-i*Z*OhhjGKch#pj<+GJ~5H!*-E>Y@>h|cMZX_dNnWPENh*qDX3();AWMicH3 zUo*zmyXoEW;iKXm%SI*VARCpOer$|V(WfpW4V`ivL+`uyh~nz>_6L<2CnPg)Ra(vk zs?vHNRf5@~D*fIJ+>avK^YysDRHa|MBi=7mr8j`S!R%9&-s(=V?E{K!S%w?OaIo^ zS!8SJR_eQm^iDmsyG}*-@z__VHyF06bk{k!A4T*xJawFp7^wMhBe7}PEAl-Ddrm#u zPEtF57N5dar60w9THC79)0QZOLV#v<$5*f_{XBfXisJ6Q8e=e`xuj1Y6WepoBbCVa z+*gDa-;DQm_CTGD0Qbfbph;@+F}QC>Hoa@pw(9igGvfVkb<~UX2}X6g1h(Br<9-y` z=AcGyL zP@!|sy*kj&@u`{~jSbAVfu(9lo1bEJh}@c3`X=Vq%oxqgt$8!wbW*!<1vD0tKEzw-l9CF?Khv z?61@#$YVmZDxEe#P8J^r)#YD=mehNk3DK#GK80PTDljhB9H__OVvNDHpo!)sBhfn} zIvc*4mf`!C;&4mVp!ac4Mz5F@rJ~QwCz<+W`-jM;R}cD1Pcrq{wRMmteciNguch}m zdVZP05_qhU$JS`rjHF!}*y0uW`l*6Wr78atoQtl*4BpJ1-IOo0V^jWP@X<4RGy7Uo ze$DdO)|7wfJ9w6W5KZ|fXRx-2XxNrQ?>vju%|z|{7-)A;bN(;$;vJCB7H?+XZRRy^ z$={+Z&Z8y&hpi;H12G%vS*4kMyeWUcWTh5HdHjSq_BK!}Q)!FpR(}|t8nJF|tXmuF z7O-w@tXmuF)|P)6^3Zi_%Wpnfsl`!xQjgWFN5FanEI}vh(aCzW+)w}LGu!5WAuz=WR-r}r=Pa$1~QDZ)?*b3+7#7I z--U7o5@Uv`d)WTy=QB*bKGkGId;34)t}`q0jn}7jSf5@Q*<>9%+th32Php#F>fF8s ztyN1v>PY>BxN5j=Rkn_4q)@^OHiag^eT`IkboEwqOV?L;gFHHY#09eccRWn^TpV zygjZ_q132?;VNlcs~nV|yBha1`nvR8#g%zIeepyLqgy`_YhXB^zH8OaxLSWW9%F{S zLFD@^+N-VbGjyBxBl_twrAklGPluqDw!&#A;(CKR3two)(ZR^tC)O zBHdrU0a^W|)$D%Kx?^aoqOFFuI@&zinrUmHEugKFwjSCx(U$8k`P%)ZES0p4=`Srg zroXi0nEuj!75#PlJvs{3Dvb>7GDt)g!&b35O>3s>}+ zQ}hUMaDCqZ)ic~IQ$N4_9{p{$x)`H7es4tYLp3!q6`wKMXuHmA{F73*&%!yOc@M6U zo+GX^FNAGbWYgEEH6neD+Cd9Amn?{88XaSSDLdf>rruA-Ha(`NpP|#!SM?mwf@o&A z7_^#Y>59stduJ!xw3BVx$uCPzn9!!0IyXyC+SDqND>%})8MDlvF(>4T zNA~&wel> z-A~IfmWl>QFDWyMur||Y=H39QQS$&9t1S$-n!bjy5%a&kPlpWG%W%0ZB$bLSB$di7 zB)1y+*3s9auTS3~^40yIlfJ$5%?*@ZVh@y*oq>|COW!*BHqp10z5#tZ>Dx7ML7>#@ zSk;CDhYiPi7j4xua1LyTg1QD?vkv_SzP$s_1)T-z8aV48@lJSC6nDfWSidmbCi->_ zoPbmw#Jsa9qB#hc8z3oLgLJ-^!M2(yTZ43N7rl00$)go*~~HrV@8q%ufKS{|jc z2rYsdgtJ`?u*ZEItS;kR_eK{(HgXM z(H0JVc4Ztcq^*bHdT8sVt(Ues{Gg~!mMb~QI z)X7S18Ihbo<}y?7jL#Tznd1=e8%zX6nVEl&uVpzYml=gmvUfzjvIZ{C2-%q}v74BI zlq)j(Ex~96jmd-@ZA7VmORZm61Jh zbw+ki)tR?nj8AK;Gd4~yxBLrMZkfjJcz0Kwk#oK3%xkN#R)%j)Ms}ptnSF3i-ad-4 z6KIc!Mu93L+7G|kpi5evIVz!=jLf#xnah_eb$Jv{ubQ8aXdULY??_u+r{ikh(?L}k z*)cCOGi8RlKk{9J(ywH=4Inq8*Ce`^)RO8*Ze}6+ZN>H4SE!EUW=?_c5s|M@9c}fQ z^>4&G!!dl~RG%rrim}(ke9AT*!zaOC8l@=dPL2B1`A3vWpBFc=4Lt6_nrZV%Eg3m$ z3HfX%Ox2);j%~sTU*?y2aame2eKu*`_}$f7gj=LuOZxaCJ_~G(dZIqlTEyqh51SqL zU^Ryrtr`7XQlB3@Y|i^M?%Ay@ODoIQ8nvl@CfAaYCnh1EI5lVFe8?xYFy9u&4f$lM zB_mH;o``mk-VORbt!os3)*Jc+L!T@b^^>#6)htVA=CAwUPI@EeQRse67Ck*dNXpz38Q-G5xInCzxsajv%rBQpEWCakJJPIk^mO3lO?q0HEKF|PRlZQE8E(VDO! zdR7^~$EcsA55XK$mDT&6%OcXdotPdN5mN)-UMw@tz?>GJ+|6DeQ%&}#@A2*+;+7ek z(6976hGoV!7shLlGGpjx@!qc{`!9r>jBtigik1KISV=Z)_Ei4_^!8I>D>Di(qI4=X z*}rX6>K)XmCOa50Zbsai>_u~tFT#zTw_f3{>yMefSOj)R!Li#appxTN$-n# zd<_WVx@;kr?c!#y&&8|e+Nd>7ybZl4t6L)`-5Q$W`Wg}G8f^n|v+ZHLhp5ed&>B-* z`WH~Dxb%OBV(8MJxkTG^S+bzItjq#+Ss7(@Ss5vHSv@=IC%5%k8T)=}%kFq)@Mvpb zxF*geO<9>wTlfUJiBE3Z_*}A$C*@6i{@cWH-qbgKHw!0anPlqsUgHx(eZCu$ek)ef z?C5<*{rqxLwClj+3X+rKNzu+Lw&}Q8+`pSyBR~5GtVq{HHldcRULWXpY+5!8CuM1k zeD$o?n$5_?ugtzK+0B5dW4-h_I;%ehi`B8mwEA+DWY#LuTf8S!EC%+hHyRE z8&_dfAJH91PtU-0yn;R1T7=UrZslZ+)JxyGthQ<2p6ui#Tv1NOU@xz99jPb#IQpM) zua2SnpN<BU!C_x8D1E%ih;{f1DGm3Ov-Y<03u46(NEpV za}uMHF)DHeCGjU;DstD93oXV|bNv~Zirifzibt4^)$rbx9TL)|0*Z4D8C`YiEA=Ha^v;V&ACbx%{eV#WVOm+*260HdoUfkMp|d z8tHkhHX{A*U~NwB3$;198`MTM*Rxb}R#y5R=Y!^~Jn8asdal#YL_DVAb8fF^zi)_g z(=%p6PR2)5PTH@D^{D5aq&}KOb;=Da%LG1oY-U`a`8F`OHr}HeIQIRNev?wakLj~r z{FJ8jqBP2fHy%<0e1EJqIub9bPh>Uk~98Tiek7L4JBz82zj^ZWV+XE;A9m0pd+r%Zai zwoy&k1|@w&pE0h&3Qa$Y>CIV4xpW0q!z6rK2Ul62Pg=#|n=79G7T)7oiFu>=RtHZ# zKri!&q8<6x!d6i%vu#DO%K zGNF9ROw9~2cWZkaU{P7BYF7nVT_@-jLevVTa$y7>@!CNIrrMY+k z#=d$=hkIazgxj6rZm7YNxX4#Oi-}X&EAcHe=Ahr|ok(->!x#&zP^0GJfs5icXfEEG zH1`XoE^gChmd{Z&7q=XSwMA3{-4hRZ8os<*KBl(?Y&o(i)Nyf;e1P%P;TKr`1syA_uD(Neg{$;4@R&W=*mZWdRcC>?a2PUW3Xl{yK&9#5@Y)}ua3Z#nX* zW6JeW%5OzB$)i3>`PaxM<%@R&`qP;e#j+ErDiLZb*}pcPPn%0FNBN#Z3H*}g40fZR zXgUWo%|Q|A7C$ng_HW`Ce#v>4;2ny{rq6s&iKq;t_Uwq(4UMU(MEBDxKE_Ci=q^$_ z$S*nN{CFqqmz)dw6XG_Pe2DAO0E*jX0!q~y)%-@-TG^7VQGFkUEr@)Fg}9e7ToCy> zkxjRT4p&<&pOdRCmQTWUmdO0v$t&1dB0VQ$uj`?&VGP0jXy4D#&l%3k$QffTuiK`m zEEghNFH5y4D%H)AO-i*Y`mC>BPp&c!9~IAas|>x<)V4LzJ>{k8n)K)y`vp#7hR9f0 z6YXK&{!;tuxVk5<;eK_EsrRN|M!tHy>2T$YJImBh&2Ro%k4t@;;)CoV*Wi^LegCzG z$f&S~$XKw4=rZdOP+fBDS8+e6j>eImduxWgj4P;T;F=*fpl|5sk~Ks0T&zD4Su;e> zr_ow;NCo^No+;Nez4|DX zj}Weo>3O8t=1n*|toRq&pI2rz$%x*L)-!PD5IHI893tmtokQf@EM$yXrhdOzKcDU$ zBE7hGh|GVRhUi_^2`QW$3|Z*ME5S`emf>vu5!kF!?fWLEs8r72bEV%ckKZ~dDqZ__ z{EllC`+YgXmD9I(h^+7J($nW-{er$_m&!@LT`Kw7r7N$3FPsCQ2x z=kXri-{MbZ$KNHO-*eN{Mc<7|&sQH{pJ*6+|A4a$e6Gf0jXc)KV~sr4sDU+VV2v7B zqY8s}5|)0AsaJy6;+e`UQ@8!ipythd5QrPsaPF!a;)_)51RH~ks>E?&znUdt|C%PwBakk>NgwG4SJdpOE^ILdly z>!r=lN{hSs`sz=>3BS)B{U(;wD%`97@lI|-$DiF6U)-nPr+ z^Y(U`ey2n4vF$QFJL;=YK^ntwm1T0WQ&}eEtHc9=xO_3`@;PPGR>jXW-ROG~a+r6j zn4S?m;V8y6t}c^#t-4I+wdyjN*Q(28UaKjSd99{Q=CztKnb%yVT+8%onO-f^t7Up$ zM(Yhd2G>XQjKV%SqBDo$H&3I_`eLA{!K5oUGq7_D^OkLxSh1yZ5{|W zrM@(+LjAYOi^ExYI$V(|v=(4|;TI{b*uI+;#~)+G@%OfL`~p>-_#dD6*ChU>Y3-j; zE7LlDMm-(51!_Y659lWasy2TCYE+=k$*&%--9P2W`PApf`42AGnAP#NDTwWN6_nUI z+_J=7mAEe??z;sqV9XV$g2F9uc2c0m6uuF;rx$+ud;Ry#g&W3ccXeUE$=bF0Jrud) z`yEoP|MvR59=Q+oJNHzq0`T(rHT7M@Otto-OLn()RU)dS=9zHXqtPDnrTZyu48|8OqWs5a_PSWRFJ+FJr}O(d6Q_4*R$_Vn9yf08xGS{%{M;a{8qw~#eXrE+54o@5X4F~5as2hg-$ecDyJFqHQfm7WU9Oa> zC^`Rn?e11`LFA4pxe#uF+OH&z_xqB#|JNpepH&j)b52QIPwZ%;@%5*YxL)-oalJ;A z#%@_zoK9s~=N)>yjxSpaw?H)|_M6M%behZJbe5FG>G)-F{CmrE`xL2{%lw12` zyl)w&yW5s={4qo0zxN&*|6MsWPH+6sI6Y@*oZg{BtxbNORWXt%k%4Q_#|9Imem=7ZsJ`d1E*^SgO?oPTrj_maf_jl|xW*xya; zy~B0>7@u3k<@wWAarykM;_ItM#OdWm=<*jSd&Eh2GF_y$A2Abdfm(b(d>xh^@b=aE zI*&at4u4_fqTeR&`ouo_;JBYWad4c^(+Br!it2yxK)40!=fmQ0I`;7P#rp3r50C%e zp-TUqQ7;^!)6d|&_c))QkBIw|aimVCK&2A*x})^pm`{Hnhg&o$4!3Ml{P%0g-ybA@ z&zc;UYu#iWZzRS}R_PYq4)V!ZO}juk#!kd9jA?q6^!(UyiS4PeyC<|_?60`T>2UXt z?M~>cZ38KrCn=96O#sCye*(HSbrVL+2KpK}J&1j?ptw|{Ne(CzwSh}&q_33{ z-z+GJOPWlYLuw=~0cFj0q_u*!_Q=))TL*0$NZGXHVT0mQji$|^Z8B|hNR1>5E6g}< zBPcHOQc&CmD`@K=Z6H}#*u-(OprpQ}$)q`?M$!sW2WbOo4pvQZdX1zNqz=*sQWoo} zqy(hNq?w?&Mw9zXxH+Uo(h5=sX#*)+BymTRCX;4@;@&iewnowlQU_@RDLa5ElO~he zK}qS+SL0gFAvKa#^bt<4;&9J{;!=G=%EKBXwq-$axXGkO(h5=sX#**nmAIoxlSy+( zjieQ%4$=lvHplcxlSy+(jieQ%4$=lv7H51(k03RYI!Nvi>BSz&Ck3RCWR*$`o8*vO zl1K7M0VyO|WlWFckX({S@<{=y8x+qVA#D~;(v$g$8WV^bJTM$r>hQ$%5jzHf;{cC3&PqP#nXjZ3S%s zZ5_0Qv~8fx8qN}clD9qC@CpzqiJ(#n?qY8$*1oM+B!%ZNRBPJ%>l)^HIkNs z;<4p3+zR@xqHhOn>u58!k+@k73DNlQUVk6^e}v~@7tI@&hSW^FI! z8x4xfr=RS^G#wO=^LeBd^zGKRXuZ3EHnoG;Y*1YD(V#fJ4W#UjV$jsK*8$n;2zN6_op1zZ5 zn@*bxiqrE*D;O@It%J68ptyBI`s!_9+*URyPA?#Zq!GJHTx&N8XOjXFz5+bSV+3hD zX*$UTC8a0%q!pmJg#z02ck9HqkhTr9W%m$Y8x*JPkX+InhVy6}IaDfx~kO()GGEg`J{ z#ieSet(!D`Kcp9(QDnzSxH+WJ`-^P@X~lT4%{f4*9TfM;Zqf$&W)GBbqe+uVD@Yqi zSw~__Cd~uIC2gc_32p794*GV}Hu@k*uaUHYbl|~q6()n?w)*4{v5h`dY?Dc&C(=e* za=4VQ{r5sECP}ys(!9yiR!d0jq;66Oibo2*MoLB_X*|gR#o?yYHjm`dcL{Cnq;8Tr zhIx=igOdJC+hp3N(>9N^gw#&zCaGhY2WixC($1cy0e53H@%$9A%{)QKJ40&eldLnv zW|Lf!M+!++t;BFi9?2(#B#&+DIkR;{X5NZZy!M# zPnu4eM_NKME|7M1=1B=$k~Lp!Hp#k#Hj+aMNzSDb&Lf2+|1$BlE*J7i))iv2t`xFK zOKy=exA)Pl(gx!f3x!K0uC-LiCOIUR7TFV$DkK~iO zLCH0uO}!_!5v1{?>7;q2C8TyzH%YzE^tz-}BS3M!<4Nt^V(TWUbz(C}BS<4j-Jc;` zbf309mpp9J1kkMmsy@c|wtOMs>@OvpLvl&&UrRV|y@c~g0m=WT_y(kqWNi>%o8*wZ z@5R?A1*8$bND0Q1rjzE8mTHRjtE)&eeihq1ycZVxE+Ms(x=Bkcgp1nG$D5$>tQ_L) zwU`{dSr(H|3Q0CTVHW$kB##u3LXv~mT9O!eYbhp=6p--Qlf>7;dy{cE{p|!vTvC8H zieg(x^6-hj*yfW0Qb@A!22he7$;MN~*oLRk;!E;K!OryEUC1K^q>$w8CEDPB%c(JLXuS}F#=LZviB2Thvbobk~L1kxg?(ylDr8L&L=qs zh|MK=B%c(J+=C>BN3stVn?rI*9?2&Khe?c(WF0Oxo8(uC%{@XWI7%oa*~g2`A-N>` z1p1O(l1K7M;fWH%tr7A_OF;4H_GxRUt(&B#N;n6U^mdX*@=4A~3`g=v_B8QzNG{1E z+0z-01@`UU@x?gM#$t8KDaJhtY9~1IOJ}Dqsk4re4PkG zbx0n`Cs|)eIGf~NNgS{JXmbbAwvG4Le@kf7e9{}uem%@NU|o0uS@bsA;~(L;Yc1SBw2W&Fxk71 zT#`rfNmjMQut^@tCj}(y7{(wuB%c(LtYaC2DB#-2i0+M^0#PCT0DJ0paOE`z*k~~r{i{Z`? za!DR3Bn4+mxR7Mkip?k4=ZnoDxg`4n`jT9db&2@eB!?8>N2lYFZ2v{bB?Tn^I`Iui zA<4d8d>xWY@RB%c(J{3j(wKnh9rQ{wB8T#`o$+9X^^vY!^4Lvl&> zGxQ~SB%c(Jyk{kbPYOv^yZG9qkYueAUx(z9Jd*pog!4!~DI{5egtJKw$$LS3eNsrW z{wlsU$$E)4l0))HJ}DrDByBNCNXT1|GC%#Qb@AC5MS#{A-j+ME;ff0ens2YLN3W8`J{jp zlDuyuu1^X`A<6oOgtJKjDI{6nG91Yvxg={n!;u`4OY%rQ$@!yA8 zj6n)WA;~fsj^vPBl1K7M0Vyn$RIGkNHpwBmB#-2i0#Zn_`b&Bq$tMM*kYp7}44dST zT#`rfNdYM&Sp%3J$sxI21*DK<4P#uALvl$T z$tT&vC9XqqNggRASzAdAo8*vOl1K7M0VyO|BbXk^Ck3RCWQ}ADl0$My9?2&Kq>yB7 z&GbkP$t8s(YZPOU9Fj}&NIoebg(S;ndL)PBl01^N4P%fTl1uVPJ}DrDBx_ryM{-Cm z$s_rsfE1Ff?U)|P-(GA1DI{4th_5wP$R;@?m*kN`lC=-xk{pst3P>Tz+Lv)j4#_12 zq>yA)GA_wEKx{6_Bl)C&6q2k1C9dTN*(8VLl01@isKoI4XrkDx!$^kH;`XuiR+DOisVsmPRT#|K`*g}%`2eJ7i`)si}B#-2iLXvfk z#Bk>bc_g0{kV2AGCovq7OY%rQDIi(rN?e=dkX({a3P>TzIZsk?Nj@ncg(Q2f#BfN~ z1!A*FJ}Dqs^$bUHNFK>21$}g(#I-IGvPljpm?ys0d?B0UkUUR(15!w`E)!pe-^Be_?KZ`el*#O7W_S|}9uQG?jrt4V(m@~#sKNa6Kjvm1q+CLxdH z-ypWIk8Ts2b-R#FvhJgeTzdYtKz9Fj}&NIoebg(T|TLg(T~B#vlc6h%F@9YsBV| zT#`=;NFm93lW|Ed$s+|Mt3zVgB!}dYd{RIPNkJ!5c}vJ4xqbAu_y(kqWW6K4F3BVL zq>$vUl^7l=AcZ9BJqhQKT#`rfNg>I4U*g&%m*kTIQb@A9B(6hpNgm1hK*9wd3fUhC zxuk&PcZ+X8vet>sCV3>E6q2luC5A(CNg>JqM8X9mI~1Ek@<=|({#3&Gp9uw|kmP?Z zzRnjyF3BeaB^{Lz7n!YF3BT>B&$baxFnzC{zH6&KKfQ{A<0@VHjfmN ztbdBHP4Yj|gmXwP$s+|M=SPX*lLC_cllX?e2sytBxg@WTl$D%Wh9nDLeVCkMl01@6 z3P_eIF}yq>pA?cTOMGpTOY%rQDIi%X#w9r* z++D>M_R(%)b9WaCNFmAELwv2#LN3W8`6O$MgtJKw$s<{NF&xPyc_g0{lC0k`F3BNz zB%c(Jti2_!Lvl$TDIkR;YplezNiNAF`J{m4?jvzMl1~aqA<5ZSVz?x)k1EACBw723 z%_eyypA?YnaT3EJxg?(yknH^#gXEF|Qb@AKON`(Ep^#)BC^m=Wl6+D?3Q3m3xFnb4 zkphx+ki@V_4#^|=q<|EX3RGHMUv4P;ItHXLad%DJ-4l0@#GRP9_(GB>Jifdma?efN z^AdM%;^GTBBLDLf7hgRQ{e4g3;tM09zaLKAM-%s{#BER97ZUfC#Kl)NMDgBETznlt z^mljSeww)W*nVWkNAM$eQ{v)d_0iw>hYQU1z|T_bU~O5Blf3lMJCO5&c7xF;rVP2x^X+>;V_TH;Pm+!={`a^lWRTsLt~N!(Kt_l(4? zP2BSm_s@xYVdBn9-1&)nN#b5%qJi*lVd6F<_Qu3*O57U~_r}D%DRFO3+(n6dOXA*| zxXp=sXX4(SxDO=meC`#=oCZI_{>Fj{9>;$NeP*rGAaGV0! z`B9j{C``X7O#ie_ttbjPAdN4gQd^{thaMP(?8NF+skhR)Ja0#_-iczp8|k%??|V_m z&m#Uj;$>LLqDJ{T*8TZV>Yd2)Zhj?dGY!%W$wRA5$x~_pj^m5Mv;Ig$}X|@+{;Rh>wf55i%&F)C|Z%$Rm)qAh|4l^$s!@@+{;R z$Pi2kdqUI>N&x2i)Re}XhY9)r9O>4p3ZDcl2X0U116scRtj zK~_UPg={?rzu*f=?Wxqhkn!+ zSqItr2+TZ?H;%;kJPPdt>4A*;J?abD1les8t`%fGWSgVWzaURS-hqsqj5v@NAsZnl zRpS@QAln>+azTED{P|eSU679gI(FS=7GW+V#s|3;@(Scf$Sx--bva}`WSeP9T?KgtGI~0`S7-*(g**r8 zg&cD-<{ZdpkkXmxw~+H8qg?#j7UV2QBP4|Ea0;$HeK874}8de;Tm5{wp zN4+80S-9SiuOZ{kK>CmYXDYQ135 zc>=6UHoLuk%qB$RU5mIDxFa0OhPlJ{RJ8UxdC4Ird`o-+8Fh ze9VK8!b>neK=y~sfZPfB08)4Oe?6u22u;T7;@qhhzpqq`3vM9kf~214algcFb_eNwV|v}D|P%c zn5Q7c?I_DCjIrmjUV)4Ya2+7~zKC{tNvXqLM!g^hzk+!Oa^$OMi@)L8LFPf;f*kWY z>Im864U7TEd2gaUA(wT+_BO`%I~ebfJ>NweL-e=L-Tyv*uov7s#SdQP$6p&*zwHzQ7y;sfIK_F8@2~3mNkj`W^4FO1RevBvoU<$;7hp-ncS z&qEeqPgQ0Z>Ql%Ld4^h#?PY1oQ2Rr!hkOg!DsABR?hN$~ynjrTx4AX}B+8S&@AfnI|M&do{y(I%1JbER`lmO? z?jZ=T|JLbiSI5`xf_-E6zSDHRDU`dvO5qtq0e0SnYAAkzYM3ffTd5&x1io8#J5{cB zgk@*^b%+|Nrl@VzNwCgTd#lsbST#%Sqs~y{)F0IT>TES$)vF1p|G{b=LSK$wZoEPr zrmj+lt83H|>RNRacJ-6gb!xI|RL7_r(Q3D=TjRk5uqe1OrT%&d~u2p*)*QtGsMsR>`7a8s9V&ge=sSzm8_^Z0!cu6%HFRL4kSJX|$ zYwBj>b+yQNL)~huQO!oDT5P?a z^&Zq%XBfuEhG~3aMb<=C;Nu=61%Z z=Jv+v<_^Xg=8nc}b0?$DtT4_qcQ!6GcQNLfyBhP&-Hc1j-Hpr5J&Y^O(Z&LEjB%B@ zr?Jr7%V;ovXIyRWZCqoHHLf-HHU47mXIy9QZ(MIqFdEGRjV9AEZZL86Ok6$l5aVX^ zP-Brf(YVDt%(&G&+-NqdjK$^=#!~Yr;|_DOai@8#;hV=9cbQX+yUiNoUURC^Voo<6 zGF@Y(d8+Z4d7AOKd4}x{rW*LcA^&v?l^-+0Ze zH~wbMGdj%q##^Rmylq})yklNzylXBn)|yut@0nK{@0-_P%w2*z=d&gz1$EhTSo1~H zb`4g$5e>Xn=&_Hn$}Q00uDBTc@Q5zNtn+e2Co|mQ5t!Nf>u_^E!u>)|H!8INcgu)| z9xt{u!rd6z?w*PJQ$%y8U}Y3h&33qtM%0aP4@Pv)2e=1D^yJ=>%Gzy(W?`m$Hu4>Y z*(A>QHk7n}kS>9y%ShKmbUo(gxb&Ag5~Hskb9%6vi|TeT?qf0arM%60u?52@k`S$6Bf}qQ0vz3Tul+kxl<*`Rx(e%dsAh=o?(O z`yzU<6?>+L`mW`zSi7u@Y_HG2T{fZxx8c4V(MH%_jOY=R;I)X3;8oobYq^fd7P6gn z`#rIzF6qv7SjFz8N%x2?Dm57sr8Vxr{XcH2`{oFhVhW6}$8S+zFImFt@moEj@B03o zc?`oHIL_@x+@oW9mRGBfuHu#Hv-Od#+s@;4J^o#r!M<_(*HX*nSP{h~=%dwR#a1*O z`-Q`G9{*pqefhc6_y3Jr9*i|^JWKtzbNip`@f_C1H=e4mWg4rnxCAdRlClh_5&Cya z^*`tKzfYxa=K6{KZ#}QfPw4G&KkdtR18sfu@8 zD`V?-r9%4m|Kjoc4bCg#`|1PJa2gY(qVHwLHR|-9KNq|7h>qYa@ZYAsHtnn1X!g#I zoRO4o@Rw5N3$tRo>kF|BqOGqDbi2g0>{}o7t-hYVL~7nwBVF?|@7Fc&3)dI-gEJ(? zrsE{#zC8N!{jGM^DR2FtPPy-T{I}@{T*0^>{1)})_V4=k#pt8HxDOz=xWD}GY1aAD zk^$FY|7}}eng0{&>m|RH%0)Q2ihEe!U2^1ka_@d36zZj|FWg_(N*mO1gx<|{XJ5Ym zN!-2I$6q~7so&xJN~sIbi({IKUD3snt>pylY$AGc3eJrqvJoz>+i%sfuO5A6{;eAI z)nftc*0)yvPwLiJg1++g(QlQducZ5-mMz%p;rZNeT*2Lj%RZnlk8xOc$MfV(XG**D z%@!-?iS0=4ShVk(*xTYPbgcOP&!y^XtN(qB-E6ay2P!HpkgF)&MXcK?s!(IqopjP0`g+ZznTA!*F!nYrEfm&(w zgZ)ux{e33=!H?sehyt9}6d`0z4S+ohJxH|~TfqJlG|oEJK-i0+3)IubAoxB5ZK~7N zVEE30E>O=J8Q9yQO`O4HVOeG5V0jMO#A#eHI50|Je;(RY7vfxRkhqjU(qe84%LC9RP71dJKWJ_b`*LU#=Y~7L z^02uhEDu4OI6>SAdJ#?{O|??(3jHX4X3UYrVa4u=6kD*QVwb~c@ z8?_(wKX68As(;~x(!iPCf#4IM4V>#81g?QL@Q%hI;FF*YobgQrPlqHvd=}}HIUAfc=Rg;m=R%j5a}jb#q|40nVJU?+)KK#R@RpID zZe9qUXo`U{U-qXwsR7_ZIYvdGA2Kl(!aoP2T&^ zZ{~df{ZZaW&|l@PgYL=u1o~fjpF)41_c`>hd0#>+>nrF&>uczK)<2*JTkD}S)&{iO z2nG^lt)HRyv3`Z#*D^4N9bn}_A84hZCt3N>)2u@1=~jQ} zS=IpP^R0n+>hou4TrX=dxE|V67h75IJZQ8Ge)0w_V-116$|{3iXbpwF(HaJQhqV>- zoz_U``>avW_gmXQKVoeMy~5f7`gv<7=rz{P&>hyU(4E%q&~I6zk;~iAxPsQ6(C^~s zX3!?qSm;b@U+8RVKj`w*{?Nlx6QH+E9SFT$>LBQyQinkAk(vm-SL$%+eNsn2k4qf| zeQ;_L^dYIq(1)gufu5K;4*Iy%6zJnqCqhq2O@%%oH4Xao)C}lZshQAcq)vf8Gj$sD z`KejZe@>kVeL?Ch==#*z&{w5qLoZCtfo@2h3w?EJE_8G1eCWlg3!raHT?l=9>SE~S zsrk?krY?nkD0Lb1!>KEv+fxgmSEUw0KbN{1`uWtg(C?1EKV^!?BU=?9<(rXPeJlztd` zaC!xFae5_mN%}G9A?YWeho+x`-a7p>^r-Z+&~|zi^mggzp|?-J0KHTCMd&@!FGG(` zzY0Aj{TlS%>DQshrq@94lkR{XmwpTSp!7S?2dCFUACi6_`mpo|(1)i#f<7|64*Hn% zC(u*UpF&@r{v18z3TRWkkp2?-uj#L#Urc`u`y1(hfM1XFn)G^D-h@UUOK$*oLZgqR zzXQJwjXswC9{eseS~a~9dR_V_SU!d})#vG-p}$D~3jJl;FirLMbRP6q=@fKNIv@J$ zbRqON>Hg6FNDqKc=MOZo9)L#M<_`uJLYr#m{4De?`NhzC<`041E58hSLjF+b1M-JK zAD+JzbXERH=p*t+L7$Vq4fI9%+d;3+-vRo){GFiR&)*sP$NXKPf6Ct-dQ<*r=%4fV zg#IP}chI?lvB$H1AS28xzI-z&V@dz@OB zyP($=-UIz!;WFqC3-5;x3m-t3p27#gUqyOD;ltn`3RggHEL;iwbKzsqdHtS%?$_@r z=>GqQx%U8%tGf2L&x~csR&l`v(;@q&+}Vr?X}CtI==EL=*-HWLlc$1fHqbB5;~{yIcT!- zSI|Y3zlNqOe*;}o`8(pX6iUiez63p~@(<9HEB^#Nz4BG)IhC(NFRuJEba~~Q(3O>M zLswP41HG~GUFeT0{|;SU`97iD4yA-teh7WK@}JPxD*pw2z48-m*Fvd5m7gKM0i_02 zegXZYGB$vgq-p?kql;fKI3y44qO{1>LEt2D)3-P-tz{aA;%I2xwE) zDCnH3^`VDWZ2(PGZ3N9!Z36A6+6>xRwZ(viLA-1<{p65AQwDt=>G`4-!6BS3tW>x*7;)Gat)vqc}ja^ptyNZiq4^_QiesSz) zRmqBf#SR~`%iw>-GDCJ7{Bi8WA$vei9b+WW%y^YTaZ7C{Sf){ z*zL%l$L>JhJ-+3z(Ph)(#|~RqH9dafuw>Of@l%JTs=gDyU|4(A%=op#da9b@&kQ>k z`s}bvtLDUik31*-GV+1(zYTk{YF_+kAF1movH=#Plvr*br6N)?^OrK%Z9&S z)fT^c_;%H8@oR_g0KIPbr0T=t_YL0<`oQo;=tIL3)l1?Z4L=3?@$m0fA0OX*y=$P~ zSnvAkQ{#))+YWm8dOJWf>rJXYH~z!*-mX3`{^)w2RG%OJ{d!e37sTINucqdE@tsGk z58ZXd2GHF{Y*e!>e(Z=Tqn5>wAF(s^#1XqfPad&5^wbfb4_^^qHDcVT74e%!OdfT0 z{DBdTHCM+U8gT&hkr4^#qa)_jToZq0#9ZjJBj!V&A8}C4wedIbb#44De65UsKBA>& zB@I~$8XwsXEgPAxxh_6rU=R+SDd11{R@h3-K4E@>2 zOQBDXyu9YV_~-b#kM3~tsQcq1N4;5de|+?)x1nQ3y#w8F)Vnng#J3#vcj&i9y${`b z)Q2^X$FCfTLw*x~Wb}OKqoWUk zK0f-8A-|13J9_<^-^QOGy#e%v(Hqrl#1wjOa6C8@TnMfJa(@0k@F3zh<|?K1uh0xl*6T-FJG13s@{zma{}T|fgk4cq{J4xR_U1FwO%!3SVv70;{T zWYaLh01Lp&VE*tRXaQ~D1h5=j4|ZCQQ^cTQ1gFnNvTFz49z{GxbCL^e3-$s{APtTM z7lIqWz2I5!XYeW5Xno=d7J^g2jo_EypI~EFbZbEyI1AhXUIW862!h=~5}XQd1iu8I zfo(SABp5gnEC-K(x4`I)IA9Fg!CBx(;MZWl#zC+(m;rL&GH@?=1ypRp2|sWESOTs9 z4}iBpz#8)?ur1gNG=XElrQk>4mtZXzx>*ox31)yL;5@JjJPFWc7&sDK1a1RQfmgs6VDvW$A9RB|z~f@xlHGLh z3-ASKBL~t577hDQn0$YwF|G{QE5XN}?OyU$Q*b~eL?}C8c z_bK2vUd3;j$k%e489M}-3_;3@7+1k2%ZN!>_K_h zlRVms(-7cV@D7OW&2vFJI2)W$52leu`;sT%Bfw#)U>4{De*xe94tC(j;CJBa{V1p4 z0q`F9(f*_f*;P|L<4vh{1qe*B>vzD z@Fo~Imy^EWdhkQ=1}K}yY0df6J+KBWS-|-ju;d_4tAHPahrp|#{1A2`z#HK2Aa*Eb z@F@5LcmsR{MlPg%0KMP@a6XV#`RfnEPcjH9!G>T8xE%Zt+zFlluY>KIIRy*$2M2>* za4&csyae6>gIj3Rzzg6bFu0Yn4_*LODe4;79E=D1gCp489k$&Ca@aZ2c8BWg3rM=N7BcDTfhV03Ggg< z1q?olXMsJy{@^BXA9xHr1O5mqj;8GgyMgb3Rp1`*Q}8r+8H_lF`UAEC3qTsY3(AkB zE`Tv$YtRVhfh0H!TmiN`jufWwYK4HykJ0}H_-a0FNZR)I&rJ7DN3 zgaNhy2ZIzi1>6Fj0?&h&z=%^x53m)O1?GcJa5h*4egf_R?}1OiMyGM29UKf&pc7mR zZU(o5KY_Qv7hu!VDTAN^%m$}}^TCh6GvGZ?_FdBV9MT0m1zrNLgLlA(V5f6QZ?Hd@ z4;F(HzzXmKP<9@tqCpcl7^FZaxbyiod1~Bk@oX`W4zfaiU-DSM%mE0~_LE8o%0FQ&efGO8d zp25ptEx7wy@@OS(5oo=Rz5_f4J_eJoC*43VI2}yBf%XX;3^L$;@ErIjsQv-BB*4XB z;41oD@FCdiM#g5~A@C%45qtoq+(iAnnfCzqgJ-~t;B|1tt=t3wNBxkp{}a;Twt$LC z9|HCQ=Yp%j@Y_jGkONnO`@t{3_G@^LJ7_DwQt%eI`A*^kj=76>y_bBvkGutE-cOx= z06a+fdWiA}eh*#)3m?YcqlEVu@Beece3qL5FOZkN#te@5Eq(OwXkT8&9T@rt#wOt6 zKT^-YO7P7;QBGf>jRI@IdtlpFsjr~=HTn$D3KqQ1dw?^*(zV})J7oG^Z{d;52;6B@;|79pyQvU z0eI~r&KP`5|N05#4&3$yc^SmWNKUnbC%_k=qMQ@_;AZd`_yyROQ~C#h=fMh2>E8@G zIjMg>yO&8$;ok@@GWg}-kK6@#KX@<6_i#-s#KlUJaIQCHN5%5Ip z@z|5#De#Nf)3Im3o3S@yZ-KYLU%)%yui#w}#J`BeKpYGJWndr}8XpoL21dn4#z%wo z!5FXsbVINa*ckIB&`sf+fpPJ%@yYQ?@m=CO$9IeG8s8mSAFqo~1&R3VcoUcd=Ee_< z9~(a=er0@Fd^xxZ{5bxj`0er4@q6NT$L|GC#2=4838a*47@RLfhTq0s+SE#8$nBL| zh~1cAYVhtMQp!atKfvftwzl-*!MoCi^E=l|mjqk4ie^l3v-%b3Rx8nm2NyqWZ0`&f z9crYzy>zdYXcvRI*BaaVz3u_4qt^*`vbIlnzfXDT=U)1SmtOI2^sU$fQpt$b)?V7) zOXIxM5_^aCO5B|pb7^p9%%#EER!17d{y_>!qMjWaZd2%7wUwvb6T4;`(@NYETc2@* zxVtAdyjkqVu)<<&MKZP`iR}QjJ@7f>?g8)a0q^bs@9u$^bN6)YZ@#VO_-!3`G2J@uV!CzQ#FW0x+ivS^x3#uog6*xXNbWthS6g|H?c*+fBsR?9yhkPS&8+(_#|x^7|nU6PWfP)#K z%6q&rKwT>CKGu34YrT&*ypK1$k2k!JH@uHGypOlMkGH&!x4e(HypOlMkG~DLVjp=UZsrcC zw5|Ln1569d9C3ha`9Jfz&#aDF{(#fgGwJvFfCG`Fwf%g+hNDgTeLkRWLrDYC(E*Zv zB3-pHOnzm~Z&2p^24&7~Q0Dv+fb|=cIlpo5H}3t$z2CU^8~1+W-fx-rTju?idB0`e zZ<+U7=KYp?zvbR*JIMPTb$PGrE^}k49K-Nem>W-}k!jd)<{@ccm?zV}dKop8bxA>6JdbtIA}AC*|d;vh`-0 zH@eEZyQ=I>#;5W|SCwtSxK3KztE^wvDKummA6~6xT;g)Af9|#Zxz}o4kQBOB-AQ=Y zmfgx~iukzB`?${gxX$~y&ilB|`?$gTxWW6l!TY$u`?$gTSmk}J@;+91AFI5NRn`aV zuVp7*Z{l~8_j{A~dy}o_i~uwgd83;&6iK0*Y&~aG;Qij>{odmJ-s1h<;{D#@+lX7s zzIn0f8*eSUp;zL>n-DqpNF?dDa zS9+#b%093&ptU}&*7~$s>+@)>&!e?vJKthTB0eaS<-}@jS<5Werd4`P$0cKeH~hQ3 z<;(b6ng%i|c+0=rTmIeN^6&N+btftGf%p4?uOA;+TcSVEq$KNI1J4{`dfn=Qqc*|@ zzeB7}B%@>Pe4xZ$Y&RZg`dX1pUn`RIu#(~%50oB9`st0;hxF6vkV#T1VC#2fEzad*Bt%ODL=d4wTuQ~L}t%^QZO3Bss zxwISpxg*NW9F{#`FRkyT4ZO6Gmo~A|7{1Bj{BBilV#SJ+m$vcJ4DYVdO9yyqj+f?o zX}*^Z@}V5!rKFcyyp%0>>jy`8Det8RE1d0igKoP@(vP**K~A^BU?+XoOLu$eek+X$ zhE{&DT6~V-oRpJRR!P4vE&s|YH`ln{>#p~@8@=vEue;gnZuYu6t0fc(@6KvB@44IS z?)JKSz3yJGyWi{X_qqqY?m@46*y|qlx}SR8PrdFjuY1huSXHiZbC*48+}vd^FV)s$ zG=*IZ+n2+ijRbU zTEad}bS|dtL){$qIPdN_@9sDs=M%i`3EuVuZ+nWjJ;mFe;%!g!wx@a9)4c7O-u6sy zd#1Ie)$=KSy_bIAr5mlpE}*8B^nTCzH~*E_{mScp=b!tMP2DlUABL{ax`q699Cp8s z$k=VQ(wJb{FxRR~8)jM+@?)4QIgMUQcxkSe=6mU&Vba%1o*y(!dV9(9gN8|OFL{2@ zFxRuU3_IjhamSwJu;)O5UOdtDYUiyKTZuQcgRvHuBKkU=1!qb5T&$LkaIxxBoy6)S@9q>UaU#Oo9x&2{m+;a-BVBk0jdbB1qB;q$ z-MdR$iBkpMHak+vskl4BOS_G7&)CCD`*^9rODB2h6fd1N%EjfhQ7$guRh>Lzg?D$2 zl^8);TejXu4YDKEHD0>YOAmVKVK4pEN@If8eaL_I(umRSJw|zHD=&T9OOw2`qnGMO zyL6eR(p`gZpt@dACUk6Y2o3TK?t#(9s(eA&{!9sl2b6xI z^iSn-$l&=3_Rf`FP*y!iLf%{H9O&wx7rI92>fjiag|5~xR|i)hC)963Z4>J97H$S` zc4V~Bn^e9->ElYz3a+YTcRt=$BQ&Elr*x@O34c-iXq8WZt_j3;O(3>w0`avb5MOKf zrkzl6lTbGab(2sx33ZcDHwksKRZP-kJEaXu6S2L9$-4+$qcmY??0GcHgR_TAid_ih z9o3Db&o6$`k~TKl*UGhzCvk@(h*8GP`a7Y zt(0!3bb`{Ilv|VY3(!A0>rN=2fMd_JJ&sTb>(q&4oQThX= zw<=w&^lqgODt%1p&y_x>^fyZXp!9Xl~iP#fLf2~wXU?LFB zqWF{F5?e##-u)gkB9zC>^UgI3xI-YQ%O~@TVOl_odV=*Alf{OVM&I;mfsL zEiKz+A}gacgC=v{xuy>K@qirkwNayYM zuOZ)4_678oGKt#{mEKmi%Wh&@r*uE1O-c_@+6G;v&m9}ALQW{Xr)<#f@|00~aAv1` z8)!o1<+h!94b9TBo%Tc@dqwFR&^5tFNMW@Z>=f^58?+1s`+(lvphkc~9ty;BuwkNQ(SRrLD~(e+YfGd_*f}-;}N_ zpNhOZ5V|7RIVE)BBB9?%OW7EDxXAy6e!Jo`=r&4MmWyV&>WM=}+^ki4bq6;CDlW>B zwn|r)Ka9LQ5Sp$y{RpAUpexITE)Rq*3vO1uynDXl9ps)0k$Wm69eUJPpUQn!7TaaP zcXL9|ReCXWc_86a(?`lvB*oI|Ygupywkv|y@G{2^o^s0 zu02}l_+y2pjuU$9@#6l%6NFw4T@gH_@~=;nID7(K9t=21=%vtWt0taIT~>Ns)efi7 z7c0HCYAy0ArPo#c^iB!XW+uT{;ApyeXY3lBOPIwSZCG!fh2VxgNs zmjzov*94+j6No0Eazf>F#eM4LN$3h&>Yh_sa&1}g8S*!V$kV^2G+lAtCGyr%iw6&W z6uCy}P^HU)f1w#Zc=V;>cec_6(B;8lO52p4qWYgh*B|_n%4?x3w05ruqa+hizQhJZlN0i>D^iiez43>6ahSIr8=PNx#X;SH8rAH|}X7FXpIFUN| zCg|lVU#{}9;KUUY^V6Vw-{ERW&tXbc4n*!M|Hn0wQ~$hHde}QwvX)gj`Z{^{!=YPL zcB$M0eSYXM&;!e)gp3{{`fsYsXH~x}I2p~i)%~VJE<*l5Q+vD0Um$N+`5WjCmFr(G z`Fjy`%n&J8iP-zdi9qPtl~3Iu8fh8UXi6rO9yo0D52PduT^6)Lmj@y@YfOGSRARER zhW4O_zoE+M3UNdDN~On4Xurv`(2NcCSS9pb=w&rq+$bUM3w^chS?HSJkI>ah6T$eK z#II;thfPOrQ#xATZl(4?tJTdKr56l5|7K3;j`|$>n$pQyH(xD_-74XiLze{;pv!gK zexTa!uXIIl9r}60B!%axrg@l*F%B6lW%cHml&hO#ZL2v&FkI-^Kqw<~XtR#GZ;nYj zc|z5oH9~iXF6TdKxG_*ACF(ay(-l8`RO0Xy^e5Vvjn(=%R_o(f?O|_@Ne$hmT58Q$ zr4y9)RY)7Mi^{tx-AieM(iut*P=mgOTR}e^zAbcYkc1|bE(^ANRbnXh zaYb+%@-gc71f?e_Jx%GS!w+~}{AQrcL7*#Czf$Rnz_b9byeZ+l4_zL}JFZarn7VmF z=~LGI*uRTy>OGFiXnBm3C)*8(4ul0nyy$0?Nhoa zF8MW9-Hg>XZESEbr<)U&O5Zv*5MN_8gcVAc1-o$Sc|~v*bXl+)r=7PhzZ1H$d}B^K zca?twdRY0s(A!6~L2pxfhth|XKA`jwr6-P(w>Vkp=}OOt?ZL_D1;eI7&x&QCyJ;=h zL+LqM0(VuHyDME5+=QD~%kG56IAP1pch<>HWL5OO>Vb-~s&aTax3(+b6`YG5guB7G zsSG}jR|SKrsyO}2w}+~#;Wa@kUmCivnr{wO4TbZip(?&IR6PtnJh+Ij3f))Dm%*z> zAdlob)uS+v!aN$zH-)O!hp!Lk%wsiQ6sp<)zG2WE-;l63f^P)h7``!l6Zj_ZO>ws= zd^6l`hP*j^^I%o51$>L(u7EEGRedwaRc?uS%b>byYxp)`Td1I$#sH?R>t3mgDuE8ZKp0DcfS7#yOQQhq3WAvg>q z6;sNa;VqyQq!iyNZ-cjkMIa3h2aCzi4Cnxz!5QV9yhk=Tr#uVq3ZAU)f*%oFP<{kF z7d%~^gXhWjZqNgkfTh9Oilyj#gUUg@@V?;L>OT09!3)(#1;4F68hiPQ`!PX$&@u31 z!Ev}f4t_kh?2m_^08S)6Ck9LSLy-HbPvQ#A9N1pb19eS!p}p09(j5J{339% zqPOA__$561Quw98%hi{`FAH9&z8wBNMQ_Cw@GFSd_u=0U)>bcrFT>51@a2l$imTvP z5ocPNYDTrySHrIk{#tzv{8~kC#Y*@}-sd{_b-{bp*Tb*J%?bEezh52px+wi}j|4Xo7z&r4F;D3ex75*;# zUHISNe}n%W{&)C$@b}>F!{3L02>%fN5BNWVc+EfId?%^qBlt%_dCkAz|AK!E|2U|u z`6T%Lpig-2rq3M1-v45PURr@Aig^>7(O_5S7l}F3{cCz6I54K!K-6`99#{r ziRFSJ=!PHXwux8UF6oxUA=2-I>8|Gw(2(QgCa26x-Sx5d02d^_B2kGt)0Hx~0)^yA>; zaJK_|2h8K)<8e0ucN1_o5%Wa!li-tZHyJ(|^N#QxaW@5bQ*gIa?2g#Z=yt|#7x*r? z-IaOQuGsB{c{lXC!*}PM_K00Mcn|b@V%`(|Uhutezc=ppMqi7$7JVJO4)^uAuSY*M z_OsYDbkpJc!1skWz`w(@_fymc`;*2qV%t{DjLoW;iJwO78)IcvjpWNLzEjnL|5l#U3QwU=@s4fqHvG5ooc7pjpf*?(TTrzK zp2lq&emHSijN8S?8J?Meci_GQ-pRXWK^HheL4O0!VV94sSJO?{-N-%o>wz!9yac|K zxGsesNw`PCkHY>a_|ce;h986dG4NwC9}7PY`{UrpV?G{!0_GFoC&tc;od`dP^f?)v zg8ix3oyK!c$NXJzMr>#PgQ1qYALqr+iftJ`n|D4N`*Yyu;Qn0rx%fE`eqQX#>hsZE z5F1@{A?6Et_lsiP@r%JF;8JiIxEy>>QOh?rHjjTFECW}fTMn)QE5Oy@8gOl_H@*^F z2d)P<#4Z`|1F#C*NWH%)_Q8Og;kSTW!4JWYXiI(^JGA`A#Qi7mpTKV;PPfJWTCp0w zI`&@0?eN=UpI5AbuZewJaR>Yk?C*r%iTz#hyRg3-emC~_#5SzChj8wVZCZ0L{Jz*X zYVL#IkNJN11F>(_JOF<%wr$OW@P}gKY94|=jQL^sBlv#={!`rl6#gjwAB8`L`7!w8 z_;QL^Mp8>y&O{{sA{CF1o=itx5pN}0@ z@jU!j@L$1SfWH9$HT>7`7vV3$f5UtICidRo-(vnP=HFrd9bx<){(JaK=wCwrGW=!u zAK-t0|0zaa1%Czp3j9_0tMJ$H_j;_i;?J1>jQNe&Yvpgi--N#j=bl*kTX61*@f9-q zE8P7B{to;d_+R0Fg})1b7ydWG`y1iC4}Ty2A^H!||AX-U0sklA{1g5!?Ei)RC)j_2 z`BUsag@14_`k%u5t`~14VDe zhVTt})+X>x;G4lWBmB+bn`8b4{2Tb$622w+Z^6HXc^mjP@a^H-!*_u10G|k-2%k(` zCiCna;XA^oz^A}>g6{<1nXq>OyMo=oo{HLFulNUp_6D_tQyVXGeIMm1r7kS2`2%Xz#MQOm>a*ZaxQ-65s!KB`SAJh z1@Hy%gWw0j4~8EMKLmaV{80Fz@P+V&@WbGT!ISVLycymMZ-KYKTj8zn6g&lQgSWxk z;qCB6@I~-6JPkh_emHzFd@(!&&%it29q>+gCp-(!!n@*?)m`u-;&7=_r(vk=Y+01e)s7z@v6@h9wIr46PW6hT zHn0RVXL}D+rS&*|`~)n)5|Hmswk)2NO?P&u2sy|l`x-i1(=DkyhQ_wGe5xBE>x4*@ zg0@t$yC;`wXq`uBPM$wL*nL(m)s@VpzLRav@7ca^VQouGPe)HC*`1n|Oy}y8EsIi3 zeO;;gY)@x*{^&_NF2u{8EejV;P3OBZ$-eqbGM}HalV}r}RH{pY5UXrHH8-1EoXR!j zlDuO+nVFr+_hbk{9Zz>L7#}orboFHNsqw+oR9E++@j+cPOiWli#?Y+bfDO!M)9CQv$?8z0nXJ4v(d@j;6dI+DGT+7n3a z37Rz%#`9Ock+dqvqXMhK?8C}tA5xo`fX_bUg4~)A&8-P8w8w5$nz(Z zXsI^Ef$Nvqk7 zZe~v=lWfk2b;GnHu(O7l$y_eGbk?F|UacrP6h4Xy?hfclw=6!OC)J}i_1O+7RJqxy zHWx-F-Q8EDo}SH3qkxHvx?C!`Se_E<#4)9=RU=!M>{f?~u4E_fYg?owh{u`PPI7ih zs<*K-RhMn;o0ZERo+`C%T1pWqw&m6H6e zxQ)m?L2lbye)3ZG}Ny>EwU|)&Ck?&4*NgkmgIZO57 zqx!Y>@4il->vmC}&1BN8QlJ{CqnTva^mJ!yDo1SUdfM7lP$zkck(MoEm&+zwwRq1? z_J!(1T3bY%7OI!h;O(34miA7Hrv`zGVwHb?Q=a8*T!q^=+1Z*=e>gJMTABNGq7}h} zANre>OLtJ)m(W6+D#t6T!zKzsLSndoD%sW~c_D94+zQMDS70U@B%Gv*!~+jf(Hi+-qq&a&Mp4y0``5w?XY?C)A_Pn4I}!8Ru^(C`ucY!y=QGElck*`RTJqW zQ}O`m9P3an7K3|OY553kXQc9rB+9Pjh>b0w#p*B*o09p(Hl4-&3_9R+H!Vc6HPtG~ zlIy0BNZBa1Or$beX3+Z%+`7|-e*d)ksmh4s>1U|23y8j8%{ZEK?{}aBl`=8*uf782BGF{es#RNAV-~q{ADZky5 zCb~{}qU)3=26fT{r90axaSc>~WM_-%Hzx*(E-E~Qt0mJT4y3whk2*1!o=JCQQu%yD zbzm~nlWOWgeb~gHVc%>=ww+R%?a8}ZuhjxOQxw!>x;&g077wk{g^ilJ30seTUAPBH zq>6n@+3HWLxj+ zrnM_i=K3)B!lcO*ElkAB6sC#6J}K#`yXn*=Q?g4_xyClakwN7|Q^asg5u50X*u-e* zn&`{U#K5!_`Y;&)xH9Aw6I~hd1!s~gIFo{P<*~`tNj}jeVKl>}t{x_O)9{!iEzGG& zCIf83W5TgbhUq<>no@a!5Ov{*rNA~E0DOs~e#Q~&2&BIVl#UUio^AAe^JydWWlro! zA?kz~fz-P&33ziYIgv6mDJ(OZve7a_I+-#v$&`*srgTj5qFfflQ6XvJ!msU>kA6)I~JSyrTHs z{V+tU#f}BlWnFgtRXG^|`5;_shY2eIi`J$DJ-A8I9fRW18L={6Y$`?c-b<;KZ@Tn> z(KOo8rIFf1(`H94CKIMeeU6ODw5Uw6@&3|Ro?;3%bFefcqQj;H`+R4=qQ+apk%xxW z$iL8(u=1$0Xsn5psXRUa*E&Xg?Ie+m`r66)Qk&?zszL``_DwaV*4nU%m6(Amy9NiNZqO10JoO&C+1-PUBol_iOS2u0#k8`R4) zSVc6f$yIwawnHUU9SKO5BQsWGy-(@k$(C$$I?!>vqi?#VXl$}GO%FPHJNE6<+`nC@&Vgqu07Q~JH-+g^Of1z zZXK8Flh{G*P3Ns>+_@-QWm~c(H8Y#*NM=X}iIJ_?PA4VIti#pUHg>Wi?9H`xh32|? zF;5ke6w)lDMM-jMw%Y`#w#@~`=9U8E(sXwxO_uu0kS_UdT^$s&9lVK{H{&=FDGM`G z?X20fen-nt5?yDp!sb`#!jw00J0lHYOirN54#u;MxirOI(@?4pQ_*CmK*s|M%-N_1 zNuR0doLR6T`3p->#3q{96bK%ZB?_tyjkQtSVk6~Bv$ZK(8`x!| z#?J0+eX@(~+r)uLi3U>(sH=&FrYuTlcJ?;Lp#!h5X(&}PI*Rt0VFuM~7Eq+>Ny1dF zt|>d+8=@9cox6-1X?Ap3S!a;=k@-oUKv|V(N!ilM+8-MMre>+k6n}~6GM4LW*Cq35 z(Md73at)xc~!&N2n-_@*(pvX(L{ z)8s7FHdq>0XWx%5ZGthy%r?1AS(~qYL{uB!ek^Rc>&M0x#C~kjrVlR&U((h!jwTl2 z!|gLdg$+7XEV0eG?^z3bzq+tHuC3EFhPmz-v9LQ9vv$XI(e6w-VH5@Zb6wa!*9Fbk z))n;5bp^e%f6Tr#MMp}3$(Yu*Ag+<9)|sB#K9s;*PmRX*)F?G~rKc7LK6X|?r(LIA zcU=(ax{0grx?Ko_8Ft+TK@knH(dX3pKHa{$jhvJ&t1)7O(UwxbiH+-Q@vVy~P1$-=#k9Kne3G`CA*#tF zdOv9-jiF9kPbb^b=z1;lFxfDulU}P%dM%z*+-uo)iS$wO;NpHv6THApq#rXy+4oi@ z=^U|f6(rgp)fM$Vbw#}o8DG%*5MylxLU*=eh7P^LriqlUXfH%M6dEJFkY8W3y;8w8 zmXs9fe|WZT@0tFmF0!{p&_#VwU8FCf5NRL8J6LY=S~?z^6WSNq!sa_6GShWJ)=ElG z9qV>F>X+VzcMN+Qay#1F)CEhkxlF6+7brCh{-*h%naMt9XA6k-9QIMpD$?&DBrg8L7tk)s#NUeaO%(TJuZCn> zF70n@3t{E3Z>kGQ`z9V!(l^N))5TG}!vUOG(WndTh_a-MsdGcier&9tb@X)J=Q{08 z9q1=uTlV|0v6Z188xxpo{YoluN&D!Fbf0gf3VVLZn`K3XlX5Hnflo%GcQ({tGl2D%J6Crvetxou@J+PF=PMrdjz zLQ{P-rj|rwY9ty{qtOrpaq#wiQ(ddaNPeR1DovQ$I2}hRrtY#=9O_!KIh`S}4V7q! z7C$v=9TKS_KQlQ~ioOgon_T^GV(E-cuiEYfsa&=xm^)W9V^${F=_YdX%=?>Oq;{TL z!kwpmi=Eb^mKL&Zp7v$hr_2j-75#1(KN>+OpDILv<;sZ zh&h){x8~8bSB;sMZEBUgW9|HcESm4KXnsK!&8OgMXE2j70$!|1`xifUK)(cNX3h^YbH2Qj z?eARhbp^p=a+ygGn3mLwCzq-7WuL4w-^SX&90m{b<_GiV2MY+nF)Gvr++=8Nv zTM#T*;Ie8#wAlF!D$p(nIv4m9U*NOWBrySL5-$joctL3rFDOZ3iJz}wYF&`F1REx% zT1SngY0E3i_9OqE)shTalXeA67Y|!&*$iftm5E??s>zm1)vg1RD`1h!BCV~LC5}w!G8oY+>+IPGEHGzehUzSB%p1E>G+QQseUja5 z%sP{FEKW{a7j>zwo>`0f^68fRIKQ+$HPvlap+c3cLFdP@`W|krN+;=d;O!ZV-M=!p zaCdZesGmAQkWgodwKAU#zA}u+viN@;J!L z@t-F`wDbA8Z;zjU_q8Yf-z);_E@ZU{~|GWr9hn8RW?eX*P7J;_E@ZU{~FDU|Urm#JN z&#Z3l}C6_;BOD<}* zE>*>?0_B_zS1#L}DzwT#E!muG4yN^{T3B{LgVg%5E(H5>7xkK~A+sE8N`Bxa>@Vj!8A;)>LemvsY?4hM5OyV+K4 z<+y%x(A~`0uVhQm+!E9?*zZnF?dwc-q@9U$;S`(GCHlB^(V+_pW^EzQw4X%?ac-7e z%=Xy~JtE3^=%n1{s?X-Ttwt6@_G6;hA+vE730krpsnBd95SnXSTe&?Inj7+=Y}}gY zh1$;4(oA1yBmj1iofuE%Yh3$kd)7- zn=^7%Fx|m2QmZa-!sH=(9HLc2x1wlualxAF{@wWoLL(t;DXy6y6g3 zK6-RqPa(Q;Z$ra}E#6kaLIpXRYMq|W<@LNRuhT6jJ6eOJKkFGZhhm4leHUt2MNNe! zo*f$6+@f(HXM+h-<~Xp~DXwsKvLJ>`HRj?df-K?psb!Kl=;1bdWrHG1Db`haO1PZp z_Aa=q+11^TZ9xuG9PBQy=7$*Vp=%KfoQ7#BRx}_5g`?0`ihhQ&Q>ZNnPNp{!5H(Vm zZ7T|{uLQ}~)`d*})Iig(o&?$QD@;C0mra<*-S*Q=BHc*fO(=#Cd|v>e^y1)oJbJu-Po`ChNI5t82+{ z6av5DQVFYj9GcbYX||~6+jF!L)dHt-Ybnm$YOjSjGbOsT!<><9=RJE`Q_huL3=TH} z^xR~@UaH&33EkAzagy;X-01nrLN_hRLUXdY&}&j|$O> zb%c5?l3kfTa=BA4J)2g|-uJ>|2ZfSCZ0>(ymQriCndx|>0LaxeENtoR*G@diX~llr z7pv1@h+SsrLfE3@XtXp~8Ueoqo0nRrYWw(pY#KYYEV)|S%6_UUq-lyO3(b+*Nol32 z@^5JCtkdcf^`d57iZZQtTU;z%qnp=Ziw_}eIGjaoK2LMVC95Y$)ODz!EpL8(5B+`3#$r*&&4E~aCnRn9NsT6TXSnT>-| z8bu0(NO0~1H*-WX{+}Q2k&L?-Obt+XUmC84^O^3B+J4ypGN4i~$-0Bi=T@JOA zT(_ez4GV5*m4;TkG`U!YeWf<~$%Otaniwfb&(_tSr5VJRhUU|vd;er#wx_$1`|KTL zRX-1wuKz0?ndfK*N=2uja@(l%vC{3ZQ>G(ZxeZ+ELK-R8)b(diTfh)AU+R%)(n^-< zwRZQXH{$^v@|5}_ePq(I4qJ{0%E6H^5hDdzlB+a4Ti_e=942Wk_4gGXbo6EGN-QDh@c4V}M|BtqB|C{mq4^z%h*Z(gj z-@h5TQs=(B+D10dK-%k!&?2X;1HIH&*CV2-ksNSnlMkM73fWG+!lNE!pELzcS#RZc zQ{2`_Hs|fw#8&5CQIPwD6SXk&M+x0){aY1>W2S4~U5AUOR&trJ>Ck{%(0NY0w4_3f zzAT|J3*>xR)Fv-C9{aUv>CbsaJ`Uj@B+W|y!xNpMuggjomDXX|*6(OX&SFbztM{_Q z=gSaHj%NAeTC-F3V=kc^?K4ATUcNdM8f`1?`p^6vhJQNsH7QwStzAKp6B{!ZLcdPJ z?!^oMW4SePr9aLYXnnKGU4=@&s^rxTX0b~@+#w%k@fLMyZgHEgi}_ObqO6ScT^ccr zOrzlIPf`b3nO+C=%*^;6L!C?rYul4)rU@8pr&DkW?DEBy+CZk%oxHUyeUcAqp2gRT zW~XF~L%uK?Sz^?3phfNJLk~17F6MM3t&r0zmm#?qh>gk;QFo}SFtYtxN8+pYZSq3I zkT;~5+1Wj3Pthha9MSZPh&-E*Q^@hBEWLMDtP)-6&PEyrx%r?K%{C#v;yJTj4RKA3 zJ2vahyttRm_}Lpx>*bBDE=aT1=suSrH&x7Pg4aY&m3ken%rKC;!*?|#>aIBqHQ{72 z)V0U~Bb`8oIu`>PVY%b!Lv(FasL>GR#E~5K3f07>P~pCB!{S@$YPPO8(b(EPBecPP ze`=kfGTqm)Uq9YxqDz8``YCvT1QIHwGKZ#|e`QHmT~6ZYO@_Oc^6?{0-Gp9*p?ECL zF3m4aM{Fc}q~w^B)Rc713q4kC4btl*^p;1^;0m}kHx-#>TvwzbW#}ZOY86>@+XIL$ zXtohtsG-OMQ(P%@HnX$Y?$DI;`n-*vEPb$|W~#pXq=($f3ct-Tv3H^>%=bPfscddG zOzbtL=w}=v)_lq#;&HOd-s$AtBE^oqI~KZ_(mO>Jo8>+rb zqI+zoRx@8|w<o&ejoS~8%CMrgyGChLPnX;=gWmWl7DU4K8 z4%+gCC**cUVfLV$n>F+9eCI$~e4P#P;UKee=k#uYQF4fFf^=ISjj3BBb^`+Tvsgh? zCp^xLr>({`nc*Nhl~aeh$kCF_bNh~vrI%BIMqfX9rrlmPC!-wO*?M=yx@ml;k099D zN_L7s6uxAAIAGYwL0{?78d~#=Qb;&6$91heO4DITdl1xWORplGdWz-r7U|o`4Hl%h zHR;wuWLTAKO(ffRnOt9DX|hWqobO*fmyc!HHKPJ=Oq~~t*AhFs;WwLaWwL<7RJ5Zj z&F9_Z(4}0d7&oUgFHg?1Lnir?ayuKwkXMyPw^fDB)S6pDQ8I$9jcL6t zCQMtqB1d{Tsjpx2&~v;LQaU&@?3Kd97@9Xsb;%aCW{=wkqdMCDS`$#5>LN;0)*KEu zju~pEdJ9!LiJ`?Y4s;x03u;i;*KIC{vl62ZXZC3qIgEK)N0)p_vp}bVAQ{FOC*Ib# z5>DU6h~LOE*5#dy!A^R@_t7~BV{c<^SGpoAVn)x{vS`WI=w;`MZ?ei{+y!B-iyG^h z*=|~>$U3v`9q7v%XQ8=Eb{W*BV7QYvx`IKE)g?<0P8!EyYm>J(0Id(1-rH<6E@_&I zRqT`(t6GYDwV2#ut=F{Rvg)g|C0+jwn3-`AB8#prMayjE6yq^%y5t6H{qz}nD?|Mo zDNkQuq(rt&KlNebZms)M60~gh7#DVf&4xi8=Z@?mW75xM7%_4w-OVa|>(P}@XZUa- zw=QU}I19jGgw(XCG8Hv2@}v={ZD%c>ZT}^#d*}1UucnV{hx>Do*GDi|&F19W3p}n# z=82{r`cZzs32WB}1kDjy>wr!Kf(GfIvU&BLXkl|if|0&dcfsUXcYQk7VuO~(Cf#Bx ztlV{u7<3G2ZET}10~o7uBXb=EP?@co(j$(fk+m8#Q7UK|bXJs!tQuRV6tYe!5YZ2t zS*x(TSw%Z#Luy56FJ8^Aztzc(xSj&AW;2|Qc#;}q?G{luND?z}4l7G*9g6|z%}bQ( zqiYb>sZ@VDU>aT7=XXlox~7;frZLy%rJ=LHihY@Mh8OSGiB?IvRqv;TNlIukk+#ir zL4*r+#vNUXnFQqvoR+958GO#$ygmiP%gsh5>F*8`$o&Dj5J|s&wRReAoLEoB(4Zz@Q$2OUosv_t9e+4)kppsSJ*SgdAfwe*HJOi_7%@6kRE@?_B^pP*cq*}I z@%pA zjc;h6GypQv)>}97aW-VqI&55KFwZpK64a1*4?Du}+obLZ%H1?ObZ69N@h(g#7fOLA zG1T%U*#gT3QOI1hNG~5r?%zh{kV`dSSsgCuf%0{IYSAtE+1N?>k>RvfSm9=>9mupU z!Daoh&e#);tlsw0R-2U=8OPhMa8BNJD~;hdCFIDK?QEz;=D?DuBw@oXcWq@NMz<8_ zMh4RRMy$z6Gj|AEh9Va-fcN7H#;*QiW6&Im5{JmJRU;8KcZR19gMN++b9A)$Qct9I z=*q4g-MO}~-hcYQS%e=$a2ng2IAe!dwsS`JO$+};A6iRR{+u;i0U5sFET8%-P|^3u z#|@n>S!k?FC*2r2XpYDln)8!3UzgI1llD-LA(_)oYMh;JPq(U+^Ah=FZW6cZ>XEUP z{SUt1D7$>B(EUD@aISkIYFH|}BP!|4P$gMI$QY-3Em+0boIK9S*fc{&AtNMOYBOMz z!tEsKi)Hv?Rss`t;BqxbN;2UGnD~jFKeOVl{`} zi`4Y%87{)-i_{E!TFsUr>x?#L>@&+}^;!4Vuk42wEjroPnX?Reu=alRc%-ZzdJV~O zc#poRT|1C|MP~zUYAGq^X5%u(r)!rXUDR6sa->sI%Po(l0(LCS@p75XrJ{#}^%Lt- zk=+qXs*WstgnDV!sr4)v;)uH8WvYTv>JTxIQ-;hW`(z1IE;7`1Gpy!AlT3>{np3Tu zK@K$y>^$31Q>c_CMb-oD7$E9?jx-bLwzSz8<#Vq-?5U~dp7wUphdLLNrgV2yZN}7k z7*NVl=sr>iLuEr}D7yfs6TJgzk|?jGmJOY4QX5TSUZ*Rbr6+gPU1=bZe_9DGr>5GH z?5WQndHK^H|LXd|{An3o$CX(}KD07Psn3wF751tWv3D=TFibwV5PEbLGAE$l;fs*| zaSi#|tPMAIa`xQoLg%a?c1A4ha)88xXE!r*?T*;m6YJXd=}1_m*~z75t{tja^fv}` z`NYUeWbCZ4Ql_YI+ zdLZkzGKLPn5~-%r(U_U*t0jG|v=R|bbHT(iVv(0wn0m6)342Szg|j5heoa(oo$+NR zcIn&InZ#A!OHDF!2~ClfGE|BOH>9>XB{?l`Y5o*S8djd58rCjwucFK<#SwcF6cmw4 z&eQ1{8kglY?PQCp=x)3lW9P@Y^#-|_t}DU+VR&}&;lCA}nV0;xLZeXHUCIAih<4}l zzZD+aEd@cD!Ib35y0*ij7H(-)dsVY%p4XBBX>3EwE(V-dL$>w;U0PI${<3&8FpveH z{w!toXIEg{bp`V|U-oULF<856Ku4 z$X=+~)@f*K%JwjYz^v1iNQWdXEa#@@Cgq+$P@mG}NLkL&!Hu+odXif$X)#N+Mf-oY zj}-R=Lj0L$HTB409v`Sn^iVC%WW8xdGPl@jr!rv^PxKBt)-;WxT|>34h_@_mJDaky z+TmO=(IzR98KTDZF{hQSRM`jDHlK|SySF5nBU(Sqva>=rr<6y@)+SEO5l3e-jiZ(r zv2-6v}Y={jA+87Fzu%CZTn_pd1Pp&2sP%+ zvqPon>cSVz%d*D0tqW~+ONv_E&>8yBHE+$is5UK?KdOj4(XPFPuWI`Ow`NvgFFo6r z+1sx1%bcW3HXXy*OG?kcfgI%T=N^h#oc|Jg`}ltSYEmaNGF%BCNT!4aGyV?ErrQn8 zCi7;dbd}AdSGO+~(@A4LuQZmnq#A?SqBC;8x$X|P87F=i#NZ&3S$3=?<)F}g!8u*p zS!v#NiA+wF>ZXIe!^RGbs(dS9jOJZ+Q$ki_jj}X3jh?}k4vHe_Y%EL)7KEq|E37l& z`xuwLMoR~6RL$xw!RN1+s$^FGwB--vppE%7wGN-bMY<&c4qStnYg;W1)Dl7em|Ha+%re?<{+*vC3EcMsK_6_eu3%FPkE#cat$ zG&V@2q`H%!TByITom85|rzf?^;@SY<0+#!J0Dq zmn-(nF4wU5t1W+a)0oI_mOogFV;xV<=oqbEE8@F^b``}~Y1k7g;Jw4Cs7!c%WjiQl8l7iHs_0lbYy`fW4!2wv72bBs+~$j?Ug^+Q!{Vq<&tTPen*fc9cHurUJEKYH#ttngFZmH0PLS? z&W4(J`QeegqMn$OJtawQRMLM$2ONa)oQfg?|TP-Pjf_e7Raa|4XfK z|LWkbkK41f##gZ$NuH=5jhlafPHnA;T-J(DM;dB$BF?H!sBAHtZ=n+_ElM-pktOXw z2GlDF0TAaC$lk9BF$sbE+_&b0+r!PbEv`!YWdd&GB+r$*L zIIM4|6K`vbq`lKNn|W*3RaJzdsZVu=W(}jB^(`Mimt=G;fhJ;Jq-gus zikS;f)Fu{mGlBGul4%VxiYHwpi=};_xzUbMWxG$p*V2uRTkMb>O1ti%#}&+yBNw%G z=pwhW87;~}K?9p_Mr);RJv6II+33SgkASIUrm!lu)2N46yfxH_v04AFSsjuZW^QlV zRn;~4W%h`&OP(dc${&4dfGTjzqk~ibq;!Yc`qEH(cU(PvnZ1T?ceKCE9mig|iq79- zC^HiP8CHi|gnTpFemI>I5#zP8Zq$o{3CR(1ag;BwQO&9<&La<+;Ius6yZ z%;qGb6g+dZgI=JMQCx}2wh*qY+KoXij$L|uNLHBf>iYQ9QZw3S5yLE)*y#jjJEhmX zTt-t;w)}Apuhfs3usXzFR`C%3DHB5B)TnpG5>BR7!syg?MlQK%a7nIpG8Ci-R@y8y zWk1&=viegcjpz9B6UJ*7VPqP1{KwBXIfUe1C99H`RzA(hLlvgqHm zSdq`qr1Ms0kj)xQI6CxSJ+4djF$#(-V6X-xF7^M}$nR1cszkp^yP;BQmk+lBY~WH3 z7*knOv=#9)Jb#Lq_9^;Iic(-7H~dYz9Co%}CF!7gd9I|7m0I{*EgX9awnPsXnJojXkZ>Y$F*FG{s6 z=9Wo*k(^j==#-{0+sU;6vq5f+GVArtJuABEhEb1PxMAZv;!1Y3tTAVtQCFE@f@WbZp+5W90H0 zr7E4SNvESn&2iHbk&D;%7mR|yrbftjuowJ-d5F?6p?p+6Yzm09KvfGh+HUwa^K@JzF7R znxT$vMl=31t2}|60Fw?}4x))8;w5JpsZ0gha2Y6&t6Z`bJhjJqNn7u!RyuT+giJs> zu81mRV%jA7>!?}MHTp-Y`o~`~G>@L&`I_-@ukybTFX_)+@c)CD`45l$UrMg887Wzkp&yREwakrJ zo{}S1bEtzduS(iSO25m#DPi)@QCS=Z$X{F_dyKt-okVCG1^?HFX)qrj>q8Wp>} zYg!0dmf&iXu1A{x@^rhuRu^4nwJJHs#gQoEM_OG|aqY>`@b-mHSl4A2`t$4P?$$=c zU#T67NO&#POL%rMT?(h|ehY&95^Foo=+CDF98I!7m;KjO<;+W(vJe)RuHrt@WC>C__5{iIzkwMX>2z0lYxO9Y$*DzLJj=QgVc>#%fD zEb?mn$k4XfU*sdBMSe8q#m;T`_Ag)jTUxa|px7#WK(UQJpja6?k0gpqEc?GM{;}kQ z|92R#jBFhhyVoZcD{C15(NNfkKt~yLCDVUviyJ!gpP#6Q3Gi?ShliGM^m&Kn4^cJ>r!o8*y+bIrzZdwuG4-W+3nIlw{)$JZh*AC=$0EC_RMGS`9Q9D7}6qqWc{gMAsv z7b?9|vlUus=>sfO=L??dMrZ{CKzajRT-OPZ92)UsFnd^vpB*s8Qw}wtW0446C3TYu~>2Q~D^gF6=jl4E5Xg25?xIMwq zY-wY41S@%AOGuNwoZGKmcp0|9ns8~(q#z`7k>hw_*rZu#pxoO@ZoxOy&AFLKO!$N@ z6JIjl{}-ga=+C#}nEKHR>e{$dcFAt8GvxJjoijDrg8&5XR1*JWx>E|DQ>Dz81HuYX z(lV1o9i)_Rx=R{n>%e>(UsIIXd{Y)lK0zT{@LVa7#R6S#wUZO%TJ z!n z=JucY3U54<1gu(UKieqVBgrmyMq~p{wmCV`$<8wO`(&|83~c=w!G1rEyUnb-?3=>M zOmA(s6>dmz*Hd<+Xjf9LcDd}!+!Q%+Uqp|DQsjbiKufC^c#3Qii#eRm5}bUZqR2|4 zL|3J^AmrP|rn6;jBAe#}OnPqD>9o`28%zaC7q23b2}pg4`;MhsKrK|d|Cq6BWww8mfr|8#lq>!Iy&kwB z0ucjmY(l1j$T6f@*{(p3$H{pha~4QaN{_}xR0LeCI>LR>vN2~a@&~43XfKz{u}WlMT0j@4wheiFumwD`M_L5=w{W>S$F5qa zkZ*4k=}b3U=*aZAUMH=%9wauOyW!i66bTAJf;-1n)ogi_Eus>4i36D#S>P$O3_Hw1 zy|hB%@^zt|OmNp_=f6TA3m}Ew$SA)FEeG_{q**3au+`_j3sI;vn^}cA^G>o-S){ic zKZROqN})p9ZF78Fj**(8BNf!77{$(B@YGhfF4avPva{HB=~>uguD1`ee`{|p$MUBI zPVE*=1FmD4g9d>)WWfG`UDVMtq-0RZ%BH&-{zCXmDHq zUei>f(MfBG_V8p&mTTVf2|7KO!bdQo$5a^D7Z~#eCaQeFSzp@_bG#+++ikk}hJv!= zu71jP92zqX(JxPEBGJr>+I{K5ln*W_wBS&d;^nNfOqoslX|2;=Zmm-c>ohOlGPbh& z4u&<_I%7>)(*apif2B6OHem;7d~?v05DKXs4%&;i;gJ8Uow{ub?rCPS{LzAZ$xz$e z{sOT!-Ve=Lsq?7PyQBjoWMXPkGE$UF1Na(lX<}%m%|{qa2kC>MfUL{P?Y`RAaD5pK zz3mlsR%Vy!gQ&I4&%9pBMA7Hyg9e+O-cgZR5+WxXSVek1f!9`~%9^6!Lt;Db|6}g` zW30ZiJh5*Tuj)OD2lc)M7-$22-G(+ZO?wJAp15b|9%$okn8j^q7dy1ptEQ*|!*l`F zRN2PUw)VZMS3eA%6+7!mh-76MEfcX4f3O=Od9$8~RlG{C#;dRqQ9O}X=~lc6(K?D( zawJbglzcwt$G!La-Ye{$ws&F|-*@l1zs^1P+;h)8_k8cy!y+G&xK5k|pi?IS?1wl= zq9etqzLQskohuYL85=(dRSIt#i{cA~@dRHzhMUT1dn+`6VA{|$E-ik!j%ddrqWKNiz-c9DmMc|XWAFA>UyWSL~{By4W}TtJy(zuZ>a zeA#z=f+-z3L4Z%6v|wC@3_us9jx<{D4Y)sHA3-pUi{&_elY`eUP(k7{pJr2S;p~|M zaM$Yw*UyC|^-L$>xZvX)K<}sGGK1|5B&C@%I#ZO>LdL|^(TXz3Ec7AQe%llTKx|u& zN31MXU@F2`fB7XnHJyhtFz^*`i3uqI327&QJEb&V%r%w!)CA@mZWH$RVMHjydy&wQ zuF$8U6LimI#iqS3i$D3~URkIts&mnsNK;N|vrkb3$hqsYa8shuPEGdk*i#M3qV|4< z#n@dOP`ME-=CKf_jD>Iy36?B0fr|n}#TA_facViPipWcbNy0OH^&+g2ymBx}Tp|VT z=aXr+Ku#|jDCGdyx5j?#5x8D>aL<&7Oz4F;aP}k|@OTgi>78`pj(FVYK%$Dlh_eq7 z)goQ(bR&Er(LA==(hTaFU0bSFyF_9a?^{=KIRm;@)g{3&fHv2)L?_$|cxMZpYy+Zj z8^n5~-fdQt>=usYWx25gC_&iVSY(7R+ge!pJ_TSsNu#Qbju)Zyh4jjt{e!!iCHQ!> z!wv6tun$cX)m9IB-T~8v(z_5hIWlhzEQ+Uvopj!afgMHL3>dV?Dh4DL#caYfZS|8W zighOttv3P0ZlyqLB>|!BBo?`>fG-(DXArdn3+|7kiQ{N#bbsrbGXl?ris-y1(^Iz> z_M%XRuQ(+4>tWV&29I$`|5zuOlY% zMXU+ru%X4ZI=$dk> zTXyQRu-aQ;pAzUD_n5JhxD^$MqIy`uWPFxNA6v2{E+f$@tnwXPq@ki0p^tTiexoaN zXA#QpA{HU4hJ=Ny(4JY(5+8(OSxXl;gkp-^sGz z=-g0*N7TC%lJ>j6_Y|BQiWRo|ITTZk?V~e5*W~C3&^0+a0d!4vpNFoAkJ(^%O?1zP zu8Hpa&^0l3=)U!b1Frk!irwp)Yq~IlpAQSE=mFFdxebJnk{!3KlI z;8a5#&j45KY)BC*DGD{3s?ZX_=*O_BaJHkRAaVVx4-pUrs8$jME#B?_Ocvd4nSvSB zl#waWLSC6v^jpCWO>&@Pxh#FjGodbb2g!cC)1BQ;k$j7~TrB2-kZe}JO@(L@*cw%aP04}sV*?Tk&E=Oi>;+nAS2(d@Ulb>jZcKiV0OeEToh<@ zNZ{r4o^^`GI*(vu@q*av;qZP6eQ|j58mFw`4j+TbU#nyGVUIvQ^ zs>UtJf>E0Pn8-;jd&=;Fcz|7G50RCT(0GWt?vs9`$ieAg*X6AhwW1O}z=10Apd}(Pxt5oG>7aounEI z-~Ez1=6J+T(+gyYCZjvNrh`pm;&SaXM+5&zVoY@NNB0c=v9l?D*L3uZ)R?XxBS6)9 zY7B+Wj>?x7L)>1M2yxSSLVQa3PKkipWQnJdL{1LW2f(242jhvA!<6un4W+~Fa|VFw zFM5_mgFVRNoC)%Rsl{odQWo00!aZB#OaEqb~-p4N;vBayY}mF?H@%^giOD1j_)^`%ag;$ zIv}!|dvdz}b=b(0P@Bnj0ibKUM`M*~CUU0dI0?lO#&-7-l}osu<)uFMjV`3@RZ4P2B{LBWow#s_nWr#*I`v~S!eZD+T%F5jG) zlGhHqWft3gw**;Rx+R3wtXra$qG_gEvXLU1L+_I*T6yo2DH=n&Wf~0|r$})X=5U~J zlNHSkA&jFNGhr2sV4a38Tt_DME$dO246sCCDbg2}WBryt0LGL#Lfn>???;!a)V(S@ zWp=gJ!=#KrU3hlZF_mVs zPeP<1X#DJ53Yt>!B^8^hU{?Y=60V9)Qk#LrO;I~0C7#7+Be75cqZiPr7xjnzJvD}% z2(G3IOPoc8CdVx@p;^pirLrGt6fZbYFJTN1wyCHk3?U>l)_UlDwoG#S6LM)uIKPet z(Wb@0ec1o1QG+I7M2_lUP=qNclG@)Ikeqat=Z7Q;!-UOS@E&YW0V2gQ zjRaEW;}z{wey2AySE{W1EQ{R{26Un5s7o0(xoS!hpfg2KGHn|JY$nek2XfQQ1mRtb za=z)2ad_o1WR)|(5S!vzVu*?1H^ipAc1&uRjqLRiBL4zg)wlbyaoz$umF@cW&L90~ z`s68?Md|VX%sIS*qSuq*t7d>ceQFHvtKgfhu*>0IK)YK=T+H0nM3yI5&Tv${ByT;yP$RDef{FsvHI^B_9bzD zj#=ZC2MMfrv=9?UmP(+Aa+U`V1VqL{2s;FDAUskq*@$@9B|%^yDum@mQ&g15WC;iZ zZz`4LIc7zVPrh*QBtCaE#*2Au`xiwVfIQX#`9=q1XN1syA;zrJiGM;zn&>wX>PO%*^&`05 zCn2U3j+EL;S(;-(`4J1olk>Jx@o=dvA^IQ0S_;jJOzKFp=Gziu^KA*1osyv~B_h_A z5RboN<1urDIdR1$AcCWBL4-y0+A>FH*I9SQCgkS6HKOyM>0srYWItS~;gL_CB`d2#WyIN1BE!<psj8ilpj*KZWub@osdup-nk(>Nuvu9l^1D(a?I9sX{Xs1 z2Y)Z%=uo~dfJ^1+#&hf}(#KTXMVet7AkIOM7O58zYM1+xANBM8NA=KBrc%7M(oR40 z;%{hg;Or`AQ_alZv$YT(>J7I_twGO5^)5rDizCEk?$jAM7U3hFL4*v+Z*s zPe`PakAo1_=NmXZ!p6=@JUiTuDe>f;Y4;QmxM=%4jK|y@k%J>zAd(Mc8LZojN~lP8 zuediEht=3Dc@0sxIfQkpeZ(QtR`e9n?>18?UcFm9O9L}spyl8g~d8#aBPJua_M zYYu&FTBMDieunhoQs|p4ok6JDHeVuT?4T@#svkuPQ5vf}OyOn@NI@snPAzx(g?0+2 z*x-O(bkPP|!=eH|vWOmC7_@^hFvAlIOfM8U1@CkUSC{*o3I3%9A&woTSnCekW{YEj>qm+u4q6?Wt_Q*GZP}W941&$>KBcsJn*zVqEVmp@1a|{a}$9@L%^Ye+(@l!8ANazpFI9aWlfn?RQpg3=gzC4xb5l;x|g<6

Rsp970DS37W-F!p=|3DF8JADh2mUt7!lqLV*#;BY|cC zq7wqq_$5R{#GE(2cN&&MSx*six83QCpMnD5Me!^`0G-F{AQ@yI?wl5}4<6#%t75@! zvvK%P%C*I0HXad^dnp7I4F-Z0~tNA+q>Ru4T1v)wB8Xl0YUbv}Q6$>8IkI`9-;=+RJ;-8(=5-;fwWYTv}O~aEKHxd+tMVEUB9)0EvBqTEm zarlk0-y22D*q;-E6C>Gg9UrG6HqHH`d;~}ALHx3bUAD>N0G9}w)@D1>E3z~Ri@`L$ z^MMBmVJaEqww@Goq0zg>JO!NAb{mm(@=3K3=_o^~tl?uACa9y_AmVsK77d%l00(gJVn~59t_kLi#xXE};h>o5~eF zU?P)_Z|Lz;bT~OTPdCiO02CE9#4L*ynACFiDLYPREFm~NIuAjN3h779Z3PZESv^cS zKH+g~V0wEgW*&ByQ`5RWm{7=cx8r2&2(u(BSxW>rL}j;hpw&@EP5gywR4{}2^_GYI&>Cd{N?IC= zq{qQD=q$~;W-7}iRa9|uPj5tGitOAH{XN5}npg`8Q#cr`;+Y1_M1qGO6m)v77cGRy z9#>B<^le!Gq5OW{ZMCn>UvP6vbd3z~AGmw5NrvEzs_l=yIC^S=mc;;>#!f{1n1H)Y zNny0niIC+4M3;QuBtU-O>q{?aP(8vM*bk+T1Ip(0UMh{ZZ9vl`wWn#e$+HwDI7^;* z+4tjCA-?wk{f9awtJiI=%Ey~= z+i!Ipk5P_Cj7|719Xm#Khn7KL^Z0h_$#ZAV2m(A7(7O3a*Dhc=RMs4mg==yY1_w3X z!Ke{47{CIl@kmU(Cqungk6|^DeF=xI3YzK!S(R-WZAjaoQ}VKB8}JnN;G%xVR;oaK!AC zh8okpn6**d+byB!3_86w!Ss zTfZ!V-~RTazjqE({qvzpM{n&-M!j65vqObs($&6zntTYgv(SC1(B&GFU%iH8#1qUu zU()I4V3X>9Wm2T~qx_OINQ?f5==`tFH(x*vpMlRf+kQ#X#w(vl*!#{tn;mLPkzrV> zm+rg%IaP=Cm*2ODl%vDk=T)IyuJt)p2U|&66Eql{EaF{Wk*|24VC;C% zSD@K(UDB0Pf_lz{o%~rbP790&K@v~{HrI1zcIrN&eBV|RM#QkIVWXDdCzwQy zLNkm74I?cqwjc#eNm-?)o{`W7$&UfZ9t&y%74GcN3#Z0@ETIF>e&+``Ejlj|d?T+JC#TST6qPQ%HOp@oXn=b!9LM4vk7fO_*$4d`TL8O0y z+!Fiz*N@9*Axu!l{(5OrM8l8b1SgO1;}`iNoXmNvj2;|LJceJ z{SjbCV2>Ub8T#mF$WEJVG4llX&vqn_ji+v6Ch=V!5X8Y#ZSgTZt|IW|C!(}AgL3QgvwCP9?|ZRa>gcd`{gB zy3FTOpC~g)RWL0n4SCxWbQpES*AuRSV;32OSzwI83-g-6VPG8G5mAICg>jVbIpN>} z_atyLC#?hdwon=$v!-5zNe3R>=gx>zvA^Lmf-^pt;N*FXPj@lbPo++Od7uZ05W%NQbXyih35{&?@; zajjE488kX(!YBc$$u0r-yA=tD1o0PhQ!qt?Rt#r$4Ztx-1IIvM-tng~I>uWFFB46x z%}@b6VWg*n#xT5oZmR$pG4wlT;W*26X_|p&@m3bc>af^7?@=*Kiiu9s$NWq#fpINK zqF@O>9i>Zvm+Jyd%${o6)VyliG<@h3tq!3II6(`i2GuHQw=`m)lzBBxq`y@`Hwz8! z!<$y1=`*+tV-jwG9Av91gpQ5!Rd|lOzp{YyJ`t6&eUR7hH60SZ9VEMoB#ZNb7Em^! z6NSdVgLBZS&g~hp~l?hP-9c-L!lA%q0q4UP-s|gv)14#epyR{Q}{S3yiYuf zidN1NOIF7Vjj$icpb>TLl{LKQpp+et%Xa}~xG2xkk1Nb$Gas1+lwk5=YZA*yb>j?*6m^w+S$Lqac zW(Uxi-DeZ8w{XCLvu7uzi2138;R=3%@br`nWJ2>;TRIcR;Zrl2g0XZhel#y{4&hW^ z+6PO-i##28jJ-t)kBjkYUv@%OWQ`Q1p08X}kH!~QiZ{PJ+VN4|N97~Cpy&Ab;WJaC zCyq}@_y>I1Bm(Tk<^Tw9`df(~9OvDVAz6;?&$;_G-3nsT1V->#;Z=3g&UAHo<_sD> zJNYBonPKH4LaN~){5^R?9PZPjXZDy*9mBv z$nAJ*kO5D_nE^TX2W9^$yqSWMVA&sAP+#Nsn`&Ri3l7Yo@2%TwJOz`5zNw8YQ7S?C z3(!KrU}_J^Q@pX7mX81-W5To`*T&i9xIhm(-2lYWokmSD!bi-l5MG8lg;y#=+~$IQ zuOL8;ZL!_ZH$_5%icj+o_d3U1?%C&OLvFHcTiz-02=|iK4pr7r$Y7X@1#s~uJ!6(o zNbw3$>y^?*j8xvDrR)*Srdvt@Hi?ZY?E+r9{pR1oJqIC|Arq+5J(po38;4L7n|Zm> zxd@dVMaUCgy%)|5;QfVLjbFywh;ox&NDpHwmxBeceIh=@t(Z;%V;XD}CS?a);5>Wz zaViv5>Oe`4ASFcs1i2a0tulfXJ_Y#S&Y@}QAV&0_@Vl+Co^ zg#EpB8R~hcoCsj$4sjWtqm}$I^z! zoT-VQzaR?7CA--(LSRY8cXsGO1rsxFu<;u~69}&1k&6N40^S7vgX7TNVRX}FC{%E+ zJ9q;A>Z9jEu7HZ^I3WQ`5?GgB7FE1pDaI;f%z+d!1dK$;QyflRd zDi|nv^$?d;Stc!v3Cu;4G4jCEXOHntaOzQR5DK8vp0*z^j^MolX0sc5aGlKy@buO? z_K$;TQirV6F$&EcwhX3Va(R%giX=fX~0k2!7$M8Fzy^Q!zQO&CYKY=H1bCRZhiYi}4rS%~r(^5tOe;(bNNYWlhT6X-I zY*Jc0jk14`)U4gVKY>Pp*NZ4Kftv46us`1q1hi{PxId5rQ`t#$nrJz}CWKT9cwyvTLOrJdIf)!E0ih|&c?Kc8xPulr&RW+?f`_)tu^tEf1YpFEMB+%F z1gxGt3kZ3FMDsz$=pX)7NVX(T<;or$YGsLRt20bwp_9Pm3@~Q@r(}q;6|r2l!%L7# z-gmMjnWm0jb(DVoFw#zCKd}K^s--$;NGctd-!q`5((;&$7Dsdf^>=I4u>9VL(2`hl z943)_9Bpz2I%PZO-()f&UPLL-zHc1)vnTgUEydDo{RQi3`%Laq(>F(e`y^_u12b}8 zdzmvrLr$mX4NJq}x1U6O692|fa#|?xnae&DTb)Gj&k7}RWeY;*fJ64OjuQEoR3+6% zfgQyM=LDy}j>Yq6TWQHW#Q%iVLGERmayG8zK`p0jl9MYQku>6+_CDLN%>-2Bz+V%w zl#Q~#XYl`7^tQ8g&X<>v#$TXvuO&ooCdBjpHd#9`b<$e)P=uC(IfKIr_s90 z*fyGbQH*kuO%NS+Tt$md5wb2>k*O1s{(Sb^2$Os)>ts4BUBg{IfGV3ip^roM>42~u ziVO}FrwEsb|6*SPptyeleDpkEI%*s-l`|Ya(o5%7TqZcjN2Q4=Spbfq2GT#4QWSk$ zhze)G^FW28M8vsvarS#D@`Mw{yWt%M(l3o572j+`%WMgE_94#FT$WT~JNcBXDu+ly zttD-V{i0ksg&LJZV=ZT8Y<=m=zWE)rLyE9H=2m${%t_GmNYNFVJtV}bl>LsEO!I1w zi*+qk{`*oh`$menoMR1aXpdzj8?&SUK>Wi92^xQr0n zAmlum=k$Jz+$8GYf={}T20q_a`Vu3~k9LYgh9|d>;)`CD zqxf|U58I|}&_O17y(XP3%5o_E^3zfuXFl9mWLi-OQ{1^Ij`ec>>!8QlD4N&`4m>&y|+$%*irjJT4Pa zed03V`sPnF>X%$5vZoIqmx^q!opO|-p?wKWnU>U1daJ%_?DJA*ZIMbUZa7)V7d`@< z5Ji?(L7C=IojWdY_3Yc(w@^pmm!EXD8wKV#TF~`^ZIat48Yr$*fRkS-dLu@oGNn~) zr{ajpC&dQn_SAmlR~=f_ko!?9@_;?j^F>)SC=9rEQv@Fbc{#eL&=C@ftV;nf88-Iy?DvJKSr4Zp zg#afV+hXfcKmhfJjv=MEY!wI*7LSxMqAruoJ~aY4<$S<3iA}c83S~Pgt4twDR23|u zlkWdHkC>nHnsuta%`G%l8Q2B|8oAJULKPpKn{0>c24`)$<(%A)|Xsc^?b(jvm4GH`A z(}n6;4EUbxK=u?0cV`z)GLn%US7nfU46-iORJDPmd5Ffgu5~emQ=3YSm;E)hmaTK; zfNCt2&0muivc?}5sl=I?npjAaG5pUN=f)b}7`fSlGm$)}P0*IWap02(wbQh{1?5+j zX;Jt1)BT`H%0Av76_ZXcHsENu5rfmS$oP{YS~*=fiMv}~UAT>4a-7Y+W0c>Qj1Ak; zX;1bQ_3h!GqSM-Kj+dgZA#OSNf7bZJCsB-Rf$L#P6?TCN6DiBtNGOdyoS$309hjXGzwnhGWsYf6@&bZI`^waZ@8SYx-PTd}-+xztEnVVfk;_u>9>T zTiealm;J4Fo0-!g?h;hKa{ScDq|#NVvr7kZdKYWh=T*5cw`YLFX&EBUa$T}0%1#OE zQ29_+q794N*HfY-=p-wOT{0aPdddssS;`#<&gO>iqhe}|e3B1oh$5d+chKr7n{}c^ z<7m<7r8Ht0)oDl_S`=u|q4cJSj;kEaK)SEd$)$RkpV;_LoKUXtx+b}974?3~Z%x%T z*7cp@>|kltNZRLDI!j1a&cd|+>@`S}Wq*F~D_ELv z*Zy>_f~V{-`#j@-GBUVPyXG1^6c;YS*h}ykG%I=|8Q~Z zga6=v`>($H=db>!=RbP)llttPe}3p+*M9f^Y0iE--~Y#Nzw&C&i#z_^cRtwskN&Xl z5B|}AvhNq~|2ISb^QG7RyUiQ_?+^a{x`}oF_22o)SMoppi^{t{UH$+5tFQl?LzO@M z` zXnVC<8u%X{-c>p~wCuN*m3t~)alNOuIzz=hLt86-Sx==_VI7rvc|}dpsMPYgHA8dj zD}$B1@!s0}>phi9C0{=f5iLu`#wGooThk|*`s=+tgFtzp2gS6t9hG`duOuRC4)`5~ zudg64&=`7rd3{+=E#Fuf+PbP-s^!fqXjt0S0?jKckO3GqF4gk&-zskgDiYI&ph}SZ zCs@_yTUF=F_=y6b=v;ujI zz##qO+Jkzv)?4bSp=71Dxu<`iH%G%OhI@K?yhh+Xv~_4hFL;yO*|&`&S;BMsvTYc= zeh{O#AHzNLR8L;V5L7D5>%GJnf8+v?YumE^{AmkM+wT!@$yP8?<1RUABOVtI;IUBG zBGaY*!POZN&!@>RTZLb?uB!JFn~MjK5&f$YIWS4%E~*g1Z$tiCe&K3<$eLFAU%0B# zgTUl4*)VUsTPpYDhiYImglqZ1T7HBD`^p%{ZDkM+;7WhFw~}ADQAP*)m!`t!pF z%KcL3h3j6+Flfrcpyv_m)Qu8&baCNl$fU4bhjjY$9TKA;5-sv*8v z*m3~#?k8ZXff~qzLf}-CsIcebD?vl4g>z}VjGjXZR91l=wY+tYF#Ih?uK-3uUhiYV z4NE}UigKT(A$1K{tCr8QH!P-qLl_1Y7P23dYS{9tituPHe>G|CRYs+?kiCH6t0GdG z1Jc>UkOfUlnAm|v6Xn;Jr4gnf9_p!81~Up6=Fxvc+8Opz3Zm>9MHX>_tSqO9QKQk^ zptaY)Z_JZq<2*3hX#JbZ15TQdImy39nipzmexf0KHbMd&t!1cBP#CEp2J$8V9Z|s7 zW*8CAB_nne(DfNcB0z7ThlJwq!3>kr6QpfRK$^6z%_6U5vSuSdTb5?EQm+k-OS1}% z1;{SaY)DAbfI=U5xgy*+y>hrm*iqy#7A8#VN-ao%wfRoU=ibd3CIN%X`XQ1jt_7|_ zd~^0C&iie^pE6=?{shac&3Ew!LF?-2Uv@ugN3IT;vaQV{BMQ$2TntcIa!l; z_N>l&DY1JH5LD4UNu}r@a!Bv*BU!3_J$1-o%3`bn`3QP&;Ti(F%jHtFTHTzLLDVXG zu)N%t?-ob}kbE~l6xw^&WPSNw6*?-luhsJ1c~&wY z8q^Hl5D-wja)S^hg{-ReXr;yIVT)qU4sFNE$t80u)vAB^+XI-EfHki|SpX+g@&ja% z0~n1_Ecp3BE(5h3El6~fODCcng~L^mNK68xlJ(|?`G0_7NjOYm9L`6Bv>e6i#!L!8 zj)R&VHSkX(1mkZRw2e|FMd2{8`XSl9iGYb<d#*O zU&TN_8X=;kE889@m$*1o+aA~w0JtU-Eo61ZSa?DsVSKYd{Rw#hQ5>OP)+G*=prNkM z4P|Wvd@VWRBbNaLV{1udsK6#6C`eKObMal7ai)6aI+seu@UPgi0imBFgg>cdRVGM# z*S?&T#@bq}KnhgKeGtsm{4h2e3@G~|0A?E~msA$yhp`3#4dGBtLqvr_k`yyMUS5$P zB@KOsM-2l}7>QbOxK`uveMO)~B&O4+lSbCXW!jA}x!8~O<(2s;g&OA1Ve|^_vlU7-Bn)k( zz>yq)%03UfJx(v#BIk|U7PxSuvW>e{CRyON1uooJ-jkJZ$^7XItMqaxQ+cC7Vclp{ zC~+ImR(c>vpTobSRhj)V`x>oM4co%yw(V@RRuD5wTBYlaY}PPie^lPEHg7CK1A=C6 zSwQ+0gwbGM-uM$L@r_m-Z{-95BD)vFd=`)jRv$tR!Sax)cXLm9?a;+Fn3`qGact%* z10c~ujXy>HKY`{0<*L!b0;8M!)(WC;4X~hTS5)MdTe;QQ0H|GI6|1ucWvlQiMMs>` zK$qA+0m2aUqggP=T57UB^dYcvxR*Qei@SsrUoEeS)Zp%;(Zb`xRqdei7oN*epoWfZ z?j1zk(iLzPxoU8DnN+uT87aHDcT;(JQXwg$m1>2uw?|$3(79DX_iMC z*wFThW`_~x%>j@~+8f%6)fnr-8;r@?@Wu*u0QK#l@`HSp3IY$v$N~{o0xDvWgDGb# zGz@ed)+A&l&4@D$6glid=-YM#I7zPb0fZD?9Gh1NyGp~5C|K3fk#Fw&R=K!V7LCnHGn%d%#BL~-^6BH zrtu};UtA)wXFisvhGkK1EfUhYE6-c(fKo{~Ddk>R<9Jl~M#HF>@*&)f2pR^~oo zc)lvn33*Dt=5I>)h&*4B=an^UhZgSi(9WCU#@JW8*UdW{}<~mZ$ zbtk{@e#|8?<{H@o?7<7@+l5oG_ZH z8(~_JFp{YoVYIW>Wh0Dn0lG119k6trJ~px`44u6&QOsNDtmXC2UKsaTax`?-vUKSz zQoOU4sY_>>Qn#rjvY=aMZM3u-&IJ-<2P!^VnqKIDl?)vy`Dh`pkCqne(g7Cs(b7y^ zI)F^x0d1^n2NWrNdIub-*FJWn0CA)=Yd55j;z((xZb;pUNJ*vwQf%&OAKKF9Za^+s z@R|ip)LAArV3`=SOfC;Klh8mjN$|4N1bMh16NH(j6>(;=AZubUX$}VbQsV~ch7ACP;zP3+fept_5n2tZj@(VxTfQ%6C3YT$y0!WX5_Qe#E*ixn+LYdv6F7%aC zB&1)g8%8E%WvO{>qhVw~c1STYz~$WdG%J?YPOd4G_V&=9P+B{F@nj)m((#b7t>XqK zOQU;?dB-iqI?kAPTvIs6vEzVUtb5}+Et5V9;9?f~Sj@;i8Zkmf>Gy@#3mLsR_S-YI z_gmm;zdd7nzcr)x8?n%DP4Rvs7WyqIZT+U8aV!<-q&wD&T(ySS9f7Ca@r>==QF!EE zuc)1W4es4RvCti@!n=c5=#Hecb%(2*b;oeAG3Ml9Fu!;*1PU1wqKAxaL|1s2Wmt(E zOH1)th7`xr>MAfBVUDFWk&uW%%M)pqS(|~UHzIdkM0-+|CdR6!(X5qW(94LB6(WShi*-uV#d~f_#!mF8ou^9> zCI#7^9<8j$&b#rCmsRlmFR`zFD{s7w;6LrDtXl%UUU$PN9|}mZw_rHvg`o$#i+|bHy7!EhYs?PD?L2sy1nn7l_3*0cf z!BJFI16D9`;B1)YpbC0bRV%dE;43xSZX^fMft_s~>{`ezAS=nTl{GNr=n1!E)68Ek zuVm&ldnhBNDqn(iQct{-Vp{lX|b@ zDo>#mSbUJHE6;L73IjpI3TQtlr8%|?yk+#i2D@Wrb%vuKX`nw7Ppd~@TVypA*z6K^ zt#Sb0qL&iupn)(01F_5WDiCWGvSTnY$}miUA(Fx{S;^E`-Lq26rasdiq+u+{mxjey zC{@Dfr;PK~O0)?yZVK<+?9Z01TD5T_j+j?faBBQ#X!|WWCKE)_O>zjrm}!-v?Kv#i z$o0>WO9IUPE>84%H^P`eCl&lziFd6QSPWyK+up`)&L>#Nwb*Thtk`WUb{oYcH`}`7 z#qMaaJ6h}xQmoh=D|QFP?kwvcR0H1jLAV3JvI*wrad{O9RRL6SpolYjoL`9je{)tX z%Rz>oLgjjlAsnxe2eM_tWx|FbR9%5lM}tlN!{L4v{xmYfF}rwl@G%~X@6s$wA)sd2 z#z!9bWHn^~j(|VrtmWbGMm}?@loFR5W|IRh+M-za58xpp_}}Nz&1I9oJKWr$cb}K9(A%#8s|Uy3g&O#_#|(9 zjC{z#f7{>%Bgd&YfTUBFX8nZY4#pK}0p!puI1K@uXA=Wj@De^LB3qBM=xuL*MaLD)Lr9a+OZfMRR81UM=SOM% zp%$bdzh(J^2coO9)jb28YuX-IfeVpF(3xVOB&V#91TujawpfX7R;1eGNnCV{`vP(GwS4D};1}I24d{39$`WfOs6Bi)*tA+RFiiN;Dj^*83n!?r15D=S@8cSs|x&D{Q_s z*I1kO+qm-p*Dv8%d7=hsR>{{~L&s5v(LwSGD*{QH!(QV~5A5>5UZA3KoD+HhCm57G z|GKBLVYmmL5MhdFvyi}>GoC-lgqlS1q;;vjZMbK-o$QdaIW-~LcEk$uW?hQs(4_Jm z`3~s^fW4LV!##byASmkAX1sh|$T%!HtxAm3b_^q#K5wqKo(~(L7?)%@Wt0%SoUmX? z!(gPmxg~FI!yna~<`#Kwd#Jnu9ck{AsodPf3Fl{OGQq5J9(tiy&0Y83^X)jRH>wEW3*~bXHd8=CBa(i9sqhLJBzlRw}*XNa*pk<>lxW$b|n$I1Jl9Os@g> zUNrZ~f!~H+!}|bMI{0*gG8j4@jT-8h&KGWABDyn4^9ewjyZh)!%w<#b5mr^j@mIYx z)c6Yoh8q87BNrpYIH@ZDt*rMU#!yIX!flC;!RG7b}pAA5eo~;-hftB0^krK~;jo)R91L z44E7?J9JAKh1pThc#;zw14$T%hZ$FJpeteZXSf7gDtJ%X7`#CgAXTYMV~GV<>z?p+Drg5G#PHNVkYlLvZ}qPVe?IYf z#>sw$X^9+go8N~rjW-ck!@|#TQP_#cBK+s`rc`(Yd=960ohf%2Y3j6TZj{K!lG6N` zk&6c;0`Gf7_E9b66UE=u;%^eZM&Nj&rsuTqbBw@Up9L1`64|Mdos2AMwTqbkm{+e8 z)D+h_{9wvrJ)&Izv_#zYfVTghPM& zzAQ|_GQdp*)zP5^dTy))b)_0?$QSAxYQ1G<#5R00N*s~BjMlpwS_F^tF9TfGQETJf8=gSzx5YehaN3S=-T1l<)}b; z5mF95^Hs9p3izJLe-)7OFa#1izk0YAldG5;LJxexCpd%8kNE^I;JHr{-(+x&q&>$c zhMLcvd}44ZG+$@9$(ItOgLL}=8EZ9h2CGomij)FAs!*vFf z97GL+RVKFp1l6$ytuL?8QiDB1i=R{ikw%;%U<3>g$Ds;(4>kUe-i<3gFo2hbR)R+q zi27jOS>1!p!%FDJ0v&)_IRHSOYXb8*tH_-{J z`7mSWhM*eq;?V4y;1^1gx%Hfq zjlaYSwGlrM<`6r7iN8vQD*rNX_Vr~wt2V7F4dab8)vK@26eJ2@^Gzut;%(4RC zJIu|F>W&PaQ(UN;Z_+;rYZBax2w^_VW(#6BPrqO&Vn`pNn(Fm&;x+EjHxh~#2~);AeUGBXENU79W}$0CSogyCes^2TM-wQ*S-%VFC<2BjoS2}(MlUpKx16aSgOSqLcuj3EA(tHQe z8#-S_wsSK9V`#7BxRICpseN3FmV3DgIGh4Lk_ay zo8ID0FadPBt(Y&e#0XMiF$HqEel>52&ixJ-j||HcDz0O>u>BbD-b`Cbk{cOB?BF#( z5H)W?Z-DZO)d-DB{gPeq+cw+_hgxv75J22H6$8%+yrji)2Fl{UC(94nMnSr*VKg4d zdAkCN-N~CDkCR7~yU4wRiTt!FtG>v=OUXjPU`P5GH#|m`mb2SeIn1uyEp6nJ|QI z`a0s)_U0|VjfhUOe#{9K=Qpw3;jK=*zr^zc(LY9^>0G0fm)M1C+&E|gmg=f{Qyyjz z%MpyG$cP^(4Zw-ipz##>n;+_|louU({6z;x>bAHA%R8KW7o}3l;6W@?j>cHlLI?5Y zC%PH^L^)qxt3=g@AYI)Ch`EK#qMLDTMOf7_zWgbhRZ%cd#$LT`ekkQ3>uy)D>!e{& z$~Ql>j-X?B{Saxo&Y@}~Q8Zxmpa3F!^COfH!EmrvrNFCIp=sdEq|5+Vo)PBNw-(_5 zOg(_G=P*@x*dZG=s3uMBon;6iZm9==6hm9}wTBx3QL`VBZNUfv_ydLTB!%!pBQI5g znbNAvMuEKIKV#JYE@{Mi`cG-q=X1fPmdzq;3P zbMW)bcA5J?6R-Jg&b|TY%y2%li-@xYdJoU6NoqxfNZJllT0XNIq{51#6$vlT?2_*9 zHdxK{3G6o@cJLaE?Eq}z&p@Ee3`6Gxn}GC#ScQb}XxanRaRtu|vlzbB7J;q|M9`71 z_wwk1I*Tk@kVuD&>4iVe@&{}LiSv9&$%=m}UT6BVS3mZr;P^`*#)-^9P zSFxUwZ}8v`kVau_i1B09Re3hb6nRu0pbEGd!obKdZL>3bt))QV=)KLOQH8L zlaYA_8Yrsep2e#1+R!vM$av#d2Y~sdjG-XKHkGTw0acELV;4er;elMY9;SD)Nk=AF z>-b`K1xKrrE_u4v6l>=ui)5|S)PpLeF-eXgiOP%XO3E3YEJ!jRoH?i9ez1PYyN}Ryc!bF}-+N`y(Ou=z8f-ni zsBjSL1W6|e{1v{&7!C>PB|+P(R^(kb@(T+uLu1&OVrx%Rfz?V)&U!Aj_6}w)M6_AW z>^N-BR>Sxo3v(_Dj0=d)Is6i~R?$qLCFtKMEjfuG|1l@uIM-N(qa#UF)DbrJg{V+F z1`jFo=CA1=96At)_=0=a)T+?EWad<=y;ba7l%R;{^i9=932p z5D(BI;he`T(hi&gDv~j>SD3jl(tsmDBU(q4?9iGtTrbJ5m4by#2Likp*s;D0Gg=UW zwm`LwGKCxhS+x?oehM6gVMa3Ywenh^B_+7I(7wo19uSe3{78`hpaDQ`;>MLMYy1x0 z4q|WcPq305mLe=_f$^9OwxNyw;EXI6IU|CHj6mBQdnyCRfc(RfrwfWiJx$1mvGb*o z!;UxRl&s_E&5CnkWj-@b>5eCUNG_Q7dEhZKzOlXn!;N=+4-JAtIU*p4FA5JqA;IuT zk+xsi<=9ekRLX@?t6>XiUrHzvKs@Bckvnx8jeMglC&Cz7oWm3!k`N!n{wS+Gtct@S zz7%^%RGumi@rSmG3V}D3A&O8rCbdjM8){M*#`wXC-gF=fFhH`EXMg1`f|-4MJ#Z~F zhna)erBF%TTk78=7TlQwfWU7mq(ah=b*wE9(3a{@dL3v~`DS&-x6_cim;X?0#ojoS z);40oSi`JS*E z3T^+DY0box$192YHY6@35hY+RPog+QWr>f|2CF>huFmW*!H2f~N9A?gUQV2cT@Om-&|@{}`H3h5zRMOli6E&$Qw zkEjz4T!jH)g8$Qv=?wOFP=6=Z!O#a%Q^lvS6bf|{jM3BF>x6g0x%ZL$U#c&Mu~$6cxTcKD-%JBYw758;2-*?JhY~D>1TDE* zrqWTlT*YA+lCWXY6Ux;;3{vZD)4*zwW*naby^4uZMZ{qb zo@@Z)+1#PY(jMFVmc_rtF#lnh?D4RUJ>ZIW%q=C6Ylr1{Jmh%X>U-Skc)UBeyaA@T zoMc6Xjb@P~GnY}t<8ot>-G!qN=-WaO_FZcr5tV>RjYQz_+*rv5I-hy7v@T(!tIkMQ zm4~hw4_%XOrdgwGf?ai{xt7md2LiaMiDRV$aXLQ@knY$(W&UB$2s$#PNS$^Po$gMN zYoN&WLT|5=Cf);UHJ`ar+MM*@E$_iwoC@c)8*f`T;$0ncD?=yz9d9c0Pln5lqkDDz7p! z1hfRshs^no>CRI3AqebxsJbW+={k*41%YTV=)GuIlZ|}?Zu!i6?AtZ05kL1%{#+Fl zDirt&^6&%ew7f(-^Fg80KS!rqH?cx|kk8zemc9vf(+5ES8k6AtAK~r`zsqA&9hO5b z4>zcH_{CIrZrZ{)D1x_BCWTu zh=d;IGar_=Buw(L)9+(t5*mKFK+EgaGoKXb^)cLr#(mCwlF!^j%Nww!f?_TL1P1~d z&F<6U6ZGv~VFKJsS=nmMXS31+5zAR@poEoY_0(&Y2h_lFR*siuu>&iCHY%ZJD~920 zHJ?r9mSflztyzo^GAHwL7B*aTLpjf@%4gSSVYT{0UHc~mZgQ4a5x(ePsuvy-$}LB*X;IL>?efSPZWr~)5O{A6Zz~eskm*Pv`et=T=4`(W0x++iudfUPJtC*#w(%8e0F!~ zVT=+DDC+AE!L(|XL`TIGoR6+rRgnd<)$#xw@fC7@l`f>M^XxO-^MxJ`B1|_8@j&m-{VPbxon?oa^`}CBDjIS*(C8mXa)XO+u<9uo9at-_M4C zNVf^ei=y&YLupocc0%P{w_C=cEMY(vQNpo-~*-dZ1!HJ5l;F z#*Rl+AkAi&Wk^T7oKsl&#<_1>-LqD<SL3X`m(sCbLK%A9ug39^_=n9-+i*@} zQg9=yrz*44c0z=Kh56%wVP51UqfCQ<*x|509Hcd1wo%d=S1((O6}dAP3X{KtML2V~ zFU3<%5IdlJJ%XFh*=clSHBJJgN7B`NT>s}?I>2eLhc`ySe`y&o$IcY>ufPmGzf7@N zDMY}j@OJth$Xgez6MfWbNfNF0XfFS=w%(d?v!Dof$I5TwU8YaLr;RZsiW`EZ%N(V~ zO=9pJz7!QP&;~GHC`#IX(CL7kvku3RhJE(akVDNkFc=utjgaEJ0FN8=*=b>sRW-d; zmJyhYt2{c>a$p)0bS;+vy0e{KG*(!YnY~z;*)8s8_xK9Cn9shR&tCey@`IQaGP$vb z)NQ28I??5udz2d3zwu8tmLWqrxmgYVY?H~he1EtH+p9gc``d#aK#gF*Sz48zgi%PP*9mS%cl>oF}yDiVz=a#e2EnOJiG4_$SL1*77u+J@D7~aWeKa?uJ zk`f}HeK!y}A}DN#Td=~S5ry6CJLvs~1=;zbB8f`}QB|xYgerq#`Qs?*zqN>q|3IT@ zKTPp;Ga#DJ{tTX?!6-C)$Gd$;yZxSZ`#nMTy+XI|c(>p4Zm;Lj3rL&Kexkq5qf+{l z?wx&4I%|tUs4Aa*zw}6g*awc-2a4ETL+q|peYb$v2aecXN9-Y;HC(8Zi5#d`9jW!K zrP%GdehZUIUMH^nc0!Ewp6l0BCkc=Q$@=HCiS2i%3^sAIAAUXA%*Wxixu7^CPaojW z^L+NB(pNb}alDCHMweVT8>@M$l>t(+aEYm3l3CNjfmTwdhDrY`(3^ZO)zZCG%l1+& z*-Nzwd#M)pQmuo_@>Vr()zNo2%9yQZ10BJ)OU-ijMb)N-N#Clk5=O?vZPiK0x@#Ee zzCn?rSqLOW6Guv+iM&-Sea-lW=&m=uX{q~E%igGKZ6x2cHl}>jTJPv?RCG7tVGDHM5YyQ4ImxAvm9 zRW;kG!K^C=!@yu~B;wwbMpjAQ+FAN~g3vBUXqO_i+Ys6LD(Jn`5w<5&XJWlI& zk=*&JF%HL*@zd+Xz)*NyMy5em+;}2=4Hc;3y}5GWy|BacUbvd23&3J36$#vH*5MAo0?g}* z7&TVoa$I#!jS`8>Xt|0Sn*b~M(XH@VxNl9&SlxzPg=!F^zU3O0)`rD$K(r`{t_rG> zL|4k>aSivYX$PdP5vaXvN;FliFF#76jTq6$Iak5Evfsv`OKV(N=%lgGNnxRr1r~A} zQ0rvgnt+0#$_7o(F5lFy{=4M|IP7gg8z4a`azv_si54d5n#pu7Q?dApF?s`y=37O3 z{;nFxG}zi<$MPJr|A*L<9(IEtF6-I}pA!6d3+hBfW) z-T!n&bRy-g$LdBwu7Abj4!Erc5uZXn#U<*-qprQ%{EAiE4sfJK*~w$Et2 zE}Z|mPKVbE6JXKwlh*5b>yjY07am5s&IGm=I3G%*5M5fi?#{!nqa&B7>&EHTx}<$b zHOv4rwhO4`tv5;=Y_VWR-}H{Ysa?BbGyRJ6_e!CoZ*s5m6d(JsZ16O-btP|I1?-vf zI`-7&cF@UqMAF=kWkb5Fw1_>wPaIb#&{l%N0}O$85Y(Y$ea-zQ0rndw0n(jZS3s_- zU#4SM$AnKI1Li7BShDA8T}4|@rF$-gd|C8Q@09e=XbpwPgR-D(wGSw|qXolec~*D8_>zVePgK zNUH(^2ehSi=gN1`;hz(7)EAWu8%uuVWKpp&=WEj^gbVc+GobeGq%U0zFed9A`O zujRYE)_ZviZ^mQ!{5n>zR9Ln3pcuu4JzaLVEo}N)?-x4szIMoQ53S{`pO-c!xZid8 zb64fhhsLTO3afrtkUw{QU_Q)S9|>MOZzAsazYR~FaC$Bal0JlO7jCSPuiF3^;Fyf! z4}goFP)Wz|X)P2#{P${6?xLhL`k)-v`EhQL%aS&XV-76JFz8a8$quKOL94JQT6rWG zgqC8p`<$w_K15R=sjbA3wqL=fFhU<`qdr1`rg`h*(w8to>${A!$Q?ae6}cm}KS&3x z1uAhKgmOe>Tbfg?JLujnobaZw8g*#{#Q!$p_e3nsRfAaCtZFj`txYW56R{)=a*vrL zN4q#eCWxbLW};o94nb2MkMa#A=ISPeTm@JDVb5Lm+)Ip=t$WbF;iTjG_m+r%r}oXN zh#-kqGUDL~1JZ474c?6#fQb*52UisSYwGZXWLZG4jtPS5l|#9JXe3u8gNK~Rza zz;YK4U_;HPy*v-0bt{T=tCjCpHvWYF9>I9qMzteN@)#Dpo!xJz!s~E+*^tF*sGQaE zKS>@iq-uBrR9viS^bY$KSOIH2_=Fw|*~kUDWd$hjvBOZb1fR~5qc!6 zMmYNxGJyo_sS)Af@=Ds~`56Z|NZ^AH*b3r_?Uj7|fmm01SNGtB)QlkcP84(1bW9tVv&gg^wHkrPZaNl9%E0qRm;OFxz51#Jk%} z0YMcLP;C(ZFaLUZWs;+Ch{^u z=k~^<62bIP$SI;dcPiv_`$`XCk;LnZXmSJ-nzN6NyaGX4`Bn+i4kCmlZfK5mXgy=bT!gCYVPzn+F-8x;6+sjRQxye`# zA6xR)^0~>h++--n6E|sZI+mMG%i$B2vAyX~?!1>fAIqIj%biclov&=P!-dE;64C+F zcMCZJ_@^Y%C*shM+RDVJme%K1v2Iu$?e&D(9;4qrNWSDFty06k0bSDBBK&HFolg`2 zVdj5^0c;>Zo4W>JU7Mr#?fg4B5nCpILtDE6>4wjd>#bC6aTSRn1v>Bxjh2LE30jM`^sv^O({~m?#G7R#$*PVWEIQ=9* z`n{o~yKJPpETp?!Al)00UMwc`y6p729I13U(&utQpUX}Vd_Ln%%o!($Mb{=${!?gj z8J&AG(&SA_f~&Cchh_S zw)b8F?ETx?`&-ugThjYmh2Fm%d(UFh`&-`oTe0`IV()Jyy}#wX$ER1`!Pi&3_ZIEi z`&;PlJF)kiyyx3{f2(`%Z+Y*n{(SCd?ESmw>uvV_st4G6ytEI=Gaq0PU8Ce(p=9A$dhUbBM=U0^yX&-*0BLtO((Z1g-Q9$Ccb#JR>d%KN zVuWHAeXw|5@fnDA7v%V`Ks1;I<|exk?e6`EcGrn!h~#r0m2g}Ui1vvSO#&p^C(3^J zjA-|SX!i>2_emrgiwV*0Ing9QqTP!`yBCReFCp4JC)&MyK2sSaM6+mjZn{@v=7gK( zGZ1FF3t{fvk1+R~FxFT;Un=!S!pv8VFd6`1=Bq-O`I-`DzDB~#*HXgFW9yD-$#q?d zkudW$Ba8+>nE6^D%zP~n2FU{Ef<9j}!ptMQM#U2eRnDd>4nXlc4 zFla-knKzctuP>EB7-%nOpl*ur{1zy{3fd_kxjbn8wh%?1b^5wiQ06wv$t$q)5Cs~Q zH~%)%p-wKMoBug>*P?VIi)h&M+cX6#(dHgaxos(109jeH*^ zHZL`r=a=CM)Aoo?TQa8w$+9dDE<|Pqwpf5F`aCX*1YP2MeJ;-E=VV3;(VnZY;CAFc ziU7A`^G8{5r)JrSHt+&6vK&ClI8%1GL7T24qW~CQM+*zT$|5B#rIfg z&_vh!sEV7-S!_`>KnhH--uI;Q{H|T0^SUFI$zwrwo^?o{We3VW>kd>{c{27h@DOli#J_o?w0wVC?`lB_3mQ9KBbFJJcZ!5cgLE?N{>oMgi?t zv=NS(1&KC`%a}DBe+FdC8d5;;*Pt+XBX*?`hD)|$9IjRzDePP z;7f#yC~4zkF=E4^xrBfWjRe@eOVYhd`F!EM&iPB)2t}F&**%t$QITB`M@4r=(yKRO zSKg4Wa8z`2B$C5|lqi>dEb!gK%Ze<=!eXW6#!MWLE5w)sA^~EI>jN=~_#wu^fLw_K zVnJfeQZgV{9d!m|K(59C(Vz?nzvzu}6pL5GfLvo44#>4QAlD?7Q%5&DB4#Ye0lDr2 zg6~CMM@btHi5a(m2WG?92JX|27ob^2q5Z<&N~o+gj@v#U&7@*z`WHESC`g? zu{~i$FmB=KHO}svq9ubwh&X3=sXnEP-`NmA9ioS zqpV8W>uBX+@rCJ9LsE~ume#OUM_ZTl#Mj1qBfn_ysIC}a6KfB!`}EF!jQ9AYR&4-J zwI=bjH>T+brULgq;D?E8_k__zyy|_5CSj5M{&@I|8J#nFg3l#GO_}Ii(rb9UR z>v$LCSI1+4SJESHe>kvOCzvgie8gywB(?Y!&H`+r^r8yQX6?Bip{vvq9#ZDqCH+d@ zL|H&BXwUkqu0Zt0Vs{?jS}?{jt010aCUWX??r8CMp}Gpjtc7Zz!UMra-m{^ig&MB9 z3w_T@=-UF=8Y$9k>2r01P{d0u)M7gKZpGdTUh>%JEWiS&G{IP%&4}CMN{3?INzS7W z7{|qW8LFrST__=gv9Km0nbL=}(MiT87S`xccCw>RGUm}bkyEiSTv$)~)s%`F_>o!b zjr1S)jvm!H5Zg^Fl(5bLYqX<9yLRou4P4SUGeTt+!K@BX(X5XjCXu^eW^mO98iYg1 zg&X)J5?{T+oh1gq9f3EN<3Lg~4Cus)0{5+kF?b3~H27ond^95{3Acyr=?oSp7-v{OeSCR$08Og$5 z%_1RQOS{1DHLy5;HO(R1WHCjxYv#b2g4}qBF0RDghq!eF$-5~389Tt(Ze~Jkk(b6S z@84t@G{nSeS`O<6uKHGBC=OsOy*PqoU?IO~CSPE_#iLRviNLOm1x~RsG>AKq<1bt0 zakh<{wNTjrt=>U8#Gaz0U~vtx0=X^;eaD|(p4cZ>?)2e)RlG+Agf9P9l8KD2yN*m;XQ`#vJM^tZMme? z0bU_C2#;#M{YShf@YfZ;b#<&7#bn2ul&Ijk%D&~8Uc_WzK(7T_m|zU2!|3y1k8DmC zP&;z#hX#-aIPN7SahR2;f))?p$QHCJ_NrRJh3x$N6BHlLUJ|g1YYZt07WRpJAHgkF zG?^|O!N0o@9vE`o70F4BIN=yZ&0vXT+3GJG!4*vuDh4Hcjo^aY-kxPE>bQajH&`u< zzyknR^DoGUFBV3~P&_9DvqC|m4+xG9wL!Ux4!uU3tmvc^JISj^5ity2%e*aK3BPc% zzkkyv5P=t%FN`BAo^Tq$Ttmwf{R2HrEJ+UX$HXA7{+9m`!5_E=CFFByxZYf@I7cNF z)Ljef+a@7d|mbJKnD{UT_ik^|Rq>F-7E zZWnLzilK}6m;t2k#X5<|UszJ`T?+h>kou{sq;{DXM`fBz8m{tXq2B&}^g3U_>X0v7 zXDe`3Sr7--|F6CCi?RB+^8D?l;a)=N+;8HG4)(mYw1JyZoJ@@#>_y*8E4U`E&9;qcTxTe>c3(@D}IWRtWfa-r!6Jj6YxXkYYoIx}iH+Oy=Z$uQnSC2g4B9Qg&N?BacRsKI+LD0rKG>S7+M15lA^RQk2G520b($16@VM^OCJ`~;A)k)jw9bOQl zbhN(?`ERVI9a-)K8A9I;e&YVS>;3u%Oq6U)04xe2kvI1gS#PdX?hxdx;6m+60_o9d zi*xU;8{QaBvVWh0;6h}Ci$$l>4&QI5s?o>MJJ})HIuNb>OWeAtqJ5EDnzUMWl zJE);>D4Wqh#b}>^mQAWWq5$8~no~<}IQPpYBsNyBzzV50Iz$yKQFM=0xn8uxr7ajH zZP;`6^XA;y;Ig}9bfDq*ZYc%vE{IiYktWr z<>x<@k1(nqy~4tP;g(aLDy%CByLBW>j(tgJ#aM$=WUWz!$nL4gpEt1L0FF_)nv@Ls z{EMJwaK}Y`jKl_Qh2JLupEF=ameNwuKi|PnZ5I`0bYL^1IK>!^peedi32>DAR)$U) z+}tHYI0_(>PNXI6tyV1l15;5j!RuZ7IImMxtFsg zOlVbWeE&2YvudeK&GILyG5C*h8VYM^+G;8+)sELPoWx zvOQGdsr!{VKlB8nwnu8%GcQjn$yz~xv{^#>5VH!EL)q83uQ;N+5nw`#?hUC*vA%@a zT6G!t0VNhl2?bnSoc@m3X{M6}5J>l*^8RP9JNZ~vvBASHv8 zPu|ANYHCyfgj)w%`~B(%hGtBkeJr=1%K_2}@b2J7 z0UZi|M?4ySm;pP$ZI;5M&t$+Z>?B0J5l7l*U7g$JEH(Qy?0;GRx_vGl3cl;W;LfK- zU;C`#lwMO`Poo)VwVx&Xx_8|`ZI-RW#T^_!i)PS@Zz@qmxA3Q1i-*ABBrP5?)vW58 zCf|Y1r`J`mTcJOz8x5E|u-Aj`BhVbm=B%CaETiww^e0UM)mGK-Gk(;sxkto5>1K=n zexCk*-9M?jDjGE=r#fPv(L7Rr@sN~@ZRr);H}u$O>X-|$dhU@5XJq~Y(9DE!m==)9 z;rs=i>1{QiGrc+QL-!X@1w)lLt}gqW*(%jv1R{N)bQQ1u_Qp#& z_x)LYjN1X{zu=lc${qzcf37n3r>+ikHKF)Min5o&Um< zHnltIc?@cT-#WJZvM-81ooCe?rVXKS3 zaanWlp)D(XcG{i|ij^y9M3f5CbCG9fbbFhZZc>_r7E5tfI((5FKW3%O6Q%p-cEK$) z&DpxUxS@e%Tu~cz5vl?x6kHvz_xhBC=(m;MErVi!k)XP(*dI!onM~xk`>aN(JXEs= zSFPdlay6r(vLVV>w%TWMKcN2xXq2yNZy9hnH{NhHwF%o?0bF-GnUYR3QCz0;*j?X> z06=bVvb%1U_kU0to$;NgFTXqeIQWo+Nm|qM7-yt(T_+YziTka#HfiMFukp>L?Rjwa zsZbEoAtSsck}SS!fvt~f3qluHSb>;WMY0a>=A3}`8&p~KYa&4{N=fUjC^qBfu>>%$ zD-^~2r??~A1RJW+8`00=X>BuMr4k@yc%XVP4XHcnlEnvr3 z_9ZcPdBv*HLH<@eNUu-|HEB>pRflbwxeNgn9Yyp7?gYUISbN*zt&6Q~s^Z(I&A;Ym z%mK7l)^BD}+3_fy+}&8~l~UzP*I=!oUIq2gz(OO>LW@7aU;wB>?*=`DpQHexOuN_@D^sArsI*XZ`8L{?#Q;AeLZ ztdFUc)9Fe<%febFZr`9sNvSaa9-mwpMnxWZSbLMPHSns*HCPClUnLJXVb%BsV=mi$n(+do4 zSs@{`xc6S`H(y~Wy_XtEBzsZ-vvbYn5S2xp$6k_R8ABC9^}87y?ejkCLu^oYhc{~7 z)n;PW2tZ_SrV-R$28Oy4N`N(c&>aLpu^>H}fv%OYoTWvg-UyHzc&gn<0@_f@p{(_5 zWQDw7%-EJ8arorUMQxB8t{r`>hWN8=@_-;67NtmmKUHlCoh$>#FLdVj#k1VIDp z((t$+P{~wCK(MIOwn9)rSTue0J=1bH#V)}cmK2-AND2agOF#4VuL8g^c2SYAiJk{# zXI1#fl~o}7yuS=Wq$~nocYALxrB5krKc^n0vyPUbl}JVaZ~xhsC7t=(H{q*mn$g(_ zC68e}0e{{pIBjQ_7^IPy8^&Yh-wz-3EZ!`mH*Pnh8KLj|xIU7|GIGA;BV{)Z z!d8p(IF>QM8w*3f6pOyxF{wvFJGHQ#xQk7e@kUpeSrw6yz?j@fCY*ECh*FmPUO4}t zqYtJ@C@s}|?V!`E8aX0%9dGe}*KX3yUmYmtfV_4P_-l(6lb2rj>nB^$h1=IF3I zf47~Z^WugtNZy=WfLjZ@ja=vY;Dhz15jO}`oFZaufZ2(jMr&_MVDJF}tFIkhA#h9> zaO`!$;oZ2wioL9QVwi%LZ2cDYaZX5Fsbm^m`5sx=lZ9_X<;)Nvj!6oRYdk^^l|~dT zO^QmWJh8nQG9{LOdz{>7ZGE-K*DOV^wKZ<`vf+`^Ve{LHCh4xJaf5eQZ<_tz_3t~w z$Pw8LaeHfQ4)a#(S{jiXZM zW()`&ow>E$FH3zNNcQ_425YQ*ZH3%Wuu2|psU`fCsuYLLAq)1m_THDBlJ|=D1K~A0 z$0e*TCcq#Er$LaDqD)F3DGNhG|Ng)J{gXpK{U87Fn~$1M8DPo4m-vU=#VjQ-M7U^& z{w2+6Q|tW;uaws69@1RHA-lq2+{aOMCYU$|5Z)NC%kO^OIE}9X*aL9?nZM{bP@?1e zX3H5U4>Vi)2A>sD-Wyi>M5pH~z6zU-?yTBaLqr=IGxeZnyuywW_8-_mFGfJ+0f7~t z^ce=2S!NZ~_%~xC6jhJ>$~o z{!5Wv)TGZsh-92sXyr4ksXd~mXu&)yg;37p?0={~ph4!`H|cFzF{%I?j=r>%vs)py z$dJ>R@`$4X+UxUCjZL!^$RvC6N)+VK>|7dGnuHl0GC6Y_qnj{XTRgy=Ll-w@!|n=k zKJr?`SU1iKmZvO@nHLWjQJvc!GiS8D!%YDNUqfN{C-C-$hLOPA9vWr@-at0NJR>QT zb5?us$=G*$Bk@SxmmP^yw2KFd)K!3z7q?ev`;mj5GPD*s1rw_$Nyz{1BXq>AV)wdSwSE!6*3EbyO6y-1_ww$=H4 ztMisQ&A;;Sd=|N_NS0pl@+jTzBF4H_Clj(7VPDq3A@yk0?#0(&mw(z6qjRanPpE7} z!qP2n{$p?+0(v0X-@`B7tIk+g>MZ+3zh%Jt1+8PeY=asKLvPlVjT?=-&FW0~r^r+u zZ&>lYy727@=8`EYziOEhluC=Ih0L)+C%=V0)02X>L z%CzoK3(9KM4e+!))u+ftIGy|qrshPw!3R1H%oc8GUDjH8oCOM#?NwEu1Pl?QAgM7HGN$wMyn}ndj0*eZewJ_s^ zv*UT$`H5gbQyO_<=_`guR!|!pJ_yBE&>Qs!u5cqyq9jx!2^Hi&tfL<(sKyK>gDQ-*aB`FdlAcBv~bF+t3o87l$l<%_4Esj zi}R5{Vb)(}{YE>~ZQ}UE%fx?JWNVfrh(L@OuK-!!QbuAJvc4q?wVZ5TXeL>^xus#L zQ&bRW>y$ZexifA(%O&k;^iz#opebOgHRexaZxazyMwRU3-<~xx?vzi1cT zE`uY-S9MqMKW0~5T1Eg(zanSJWr+{Js4+qnslE-aXGjd~F0p&_s!~e3@fWoXz0>KH zcGXX`#ME+k!PdE-)_+owt||TGuq^RadfP{@M+A(}`M2|~S1kDzRi>z5gOF|w5;LuW%j7n^u_9^Tu9o)x6L%| zx2`pG{c6VKo{GYp$z^~lle5q&lTj32%kAN;mh?0lLosLBj8gHrn@mB2BB-0`o&+o{ z-4zgUhg7_8wuP+6mbrPrB2^xbR%HSy8O;Ut?y~2%@~Lm;e=AaD?tAqg^r@UFkA_kY z_v!cP)e1@zK(>q(I9UxULH9_)aAwH@Uy2ewGKeCDe&`aNUC5#mv5ceIT#C>FK_jc^ zr8?G2nv?;m6+H{BR`hoyO)k{G=IMsK_b0C)w3n+OzQE93(Tgy5^@>%6xk+jntKP|* zV=q>f0jjLZLMyD&obcLT2X*7EF)GVh9-+jNzV)oif`4iAAx3qe>iRSOWX;*XyPw2$ z>z14zOUdadnZ@P_WvJ%b^;gusW3SVKGs#^vrmhs!bPY|fhhyj!VtyfNkyiUb`D?`8j>=C zgr22M+w9;-WC;0NGlYEPX0*9+1>|iLr0uWjorwfER;53Lq%3fPlO3kv84L!jSr(zG zl7onW3(j;M*U?(&$t0l>!GoFL2+w ze%7i+rEJ?DK~=A^J(HE~GRX&SH5-*8Ykw5^7#UqD5)zIO)gsYZaGhQDJa?l0wV36l zb*+UDOF_skw7&(PdTa7i~U9f|zI_KCU!)p>%hn+PSMZ_H31baf%`hm?PJet0><>-LTifQnT^E z&H-DKiw(Z0Jh6T~S--2)5U;8@zfh5?f_wJ5o88F5rO@0iu}$ZrdqoECM2E!{4mO%1 zH9KsoWQ!!!X4C*58d0Q$=DhGJd(3DQWpveSJ=ldPHHwI9y|!~hkA%vS$sNqNw@CgO zXfPjk_ppVp8|W>ouI{gIiip%o@-|@wH_Caa7*AV+vG9Bd;q8j2H!X``EykM3Rd^lS z#}~1Ed|^%Di_nREVS6V5^Y>CCPO~v(kpa@|QvIbglkwCn5uAE!ifwQ6?Da?#RveXB zDyz%-lc5f$JGjk{+W>hDx)fdr92VZO5Mt|EXE;rsLnLKh!O>q+Z1ZDwEumv(K<MF&ifZW@bLd9VfZMD5Hi` z6xf$%J={e%Au@BK*}1K@Q;TpSjtb znABxUXPm28yjeq0Q{lhbnQN(x+t$cb!(;RELg;En!7^rzj<8YL@WU)d1x0!Jw`~xg zzaCoJjhnT!ZU9OzwX{m81!dJqHg7hq^Rl+4fe~N+WtMM#8=85Si?TTSyc|t!Z0;$$ z9n+CzC_U_J;l70eX+KwEb4}+_^s%Sod;&8+4EB0z-gg$q(DC(nuCC%cqa>(mD|6$< z>#J{O;nvr@t&)eBT=MqW8s6!rpzf+nZo31#F(h0SsaR?yA>o_ED5GkmMDq&{GEbcO zuN>Q{3DD^yhcAWoiQEm-<>M?={LB^DStc+>jc-dcF}~Z;i>BCulSy0Af>WK`5VzgZ zyb4j1HQ-FgR!qQSSE(ji2Bt#)OAXDt+!V>c|GIu(@~Bqj zN`S%3&vThVP2Rh-D*OyC#V9a4c^3MNb$o&13?lL+y$#y)oj>=Rl~OQ-yGdR($SOE) z?mk$bH6>oeDj+BAmJw|BF^*ES@r?C-)}gCM7^W!It=h>_yX#+-pY>oIWuQ?5K{)Iw z2j{XuEN?v>LQr3UNE=>~20d#?M<0B}!NdG@^evr@HYdNs)i?B-$0 zW~!q}FNy3@gX|jQ7d{49a3wWg^AZN14JW-2l|>WDR%fdY#W}EA+jDg^erIb8*jD&$ zi+xpu3%{MwZ&%^BYjbJ(Nh)yQX$~mzov<8GlzrV5=AL3l4{x=^%zM0SN}h_$gtp|@WVT-Nu;Y|6OyN+i&Q_h89LA$t?Fv(?_np{Kh|g`a6ldj-Ifu$?LH%vQe>Zw_}}X6 zBm!GYajSF>h&cZ&QC{{kdfm(DW1mloR%9RpaL&7j06YW!9Wvk_o&k5q4D8G@u#-Lq zO@?P6JUiQ4ojviAaslMz%#R3#`2trCQyASbBjl=xq&EPm8G zB1Sf!;@n$Ik>l26(} zo=+-XMsjKdMM4z-!`5}>l@nT2w!i)z-ZuPrhUEvB$ zt1#F`9>ugIa@Md$)bSkyGj5cv(<*GwGgHd;5!Y|b{m=UByULdTe6G~Bj_7&wXF--+ z1=(eP&yzu_K(!|5604yW#Bu_cHux&x1|1+kf|(40eH@$|d`r@a5WhAe)lmjOrm>42 zTR;~)?BzRn#bi>(J_o#caPQk6VwVLMq=C_1>^O5xRmRHQ>J9a<`DE9gy)e_vUV(@- z=gV!zv*rzzmPl@-ol><-xUBp2?)vPi7{SrRUMIZkxizxz`eN9`( zBC?p4dnB-|RmiVrqbtx?r~p?MslZ%j68>-_+wG)l4lBPhJz0Fi-z(HptDxc2B1C2; zW8jc_4qirD;lnL|<`_fjMchh0ihzpC;QF(^0$qIGD*iCWspL3tFdG~cn0vXLO5<+@ z(;x6zL7F&WD5JoOIwP}IC=0x7 zMpx#U@shc02w0$$Ifp4QUvJu}y9P7rSL=c5^=4D20AkE=zcxjG#xG)gy&2Am^)WIk zrq`R?o+r8#ag#?wXSm31^_`hJ$O+at_;TR!$l@+{o0S2!aBJ(_>(%)ij+G_%W>IG! zva~vfr)h9zoInBDnZ=!1GNuJ*y**5>4Q6!~RkYFAVk8b=3!beHJhOqTpDw(wVYdoq zJ_Q4~W;Bd}v+R-U+0R6SjwBDpC#}wTztOd$LlVh{oresSg0QHu z0E6R{Q0EO}X*(*#-q2~$bKiWy&J>e8Nu7o_68}!m)L1PvYmV0PP|Nvjpz}tiYvTZX zo1Pe@KHXsFreX4FiS}_;rzJj(2|GLuxwX7FJ&6d?^rUn;RDw^_lMvi{dU6NrOMY73 zy<&rvL4Ir^%K)&wzLNJaC;U6x-)1*P*0OOc3Il+4>%$-Es)MwtmE6SR9e<0T_lH}9zSupg&SNf8pdDjG7bR8j$9 zQBwIaS(Z(~7bWGvy-SK#*Lhbpw)5Uf4&dy(SI3H=^WO0A%7(ra{GMHFx;RDMCm1R) zARJb}hq{>8pR*U`p1owjoey=hA}BxPMk8I%3k*+p&t9U8b)tUfEPRvs?pgg&-sG}# zR%{I-6{-+!R3+x&QwY1YxTxf^J(UD^;~WIYxLR{f!txax3B#(^uRPQ}UcpS5a~c~77@C#?fq!)$jm zbD}8+sJb@(6CGJewv5b!!#bbVzlK+vMT3^t4stQTaO_~DD8@!QRCoU{ z$!KV%lrMQzxrDcyW4HE?^*+dG*qa~fr1esF1i`9tkr~u@C%`yDa-ExIS!U3wN}rNx zWB;cI>-QJkK@!T9#-4rJlBIHau`D`@u?|a|{NrA0olbMno|n`xxUax^hRfEuS}viE zx*irgqm;ATi4}a=;$BueoPGc6^;R70{fcaw$bt$}xgj>wz)_Y-UeMaQ`>Q*-am-F5 z-H$cUemYPw#wfqj8iy$(c<3HNcpnGH!%?0CXPt`fllbGTPcQ}~% zjisW?D{MSz83G~*yT)+nd6rCydCCL^`G;>+{spnjr+IvK=lSXB^(Ss901g`slRORMC$mP964Pic^mRUL~%<#3h&#)6?P0|GH;o4J)1 z7F-A;Gpc*)g|2CA=c>1lKpGrR7)mZ*3*mwwD%U!05TRqmM$eYx?{sl8H#u74dIC>r zlE{ddxydK$_u9Y+;E;z&TSQk4_5Z@CSQboJ!!B_fq;0Dmht0;GFi7PWaT|dW)r4Z? z`a`%touI{~x*Mws)QgEqFkg-etV%f!C8BGPI#+ejv1P&V3xEBToUZ7IIaG-Z|eS6FZ+jSAQ6b3H@tzt{6*T3M9~E`I5g! zycCEcP^4b;K)E*1eK|(ZnV`k@vO2Xq9Wo_v>+?S!K{OPB77)AVt6W=XmzJxKzN){_ zM_-kQyLz`y;P_0mVm2*N=_(_@;g711J_^wC6rJP*^D71x#kK2fLaqfea{H}U356J}Ku35Q;5 zvPgA&iK?`CC{2;IS&FV&+akCXag3XE9<|zQ;|{L*v;Lb18W~zlh9J@N$h|tdWf=#QY{b>sxNJYSv+L(Q2TBcb79ZpJu?0Dh@|AVsdyS| zZItBGX0m>l&Zj2xVKN-)h@PsCi({UUfJPY%T9YTzra+cp<#s5!uxwL<97Z#+xQ$^H z|80n|h&d1kzxz;1gAauctD!A!6L);}=>A-6#soG-*8o-SA%@9x-9su2$)vy$iVS0p zF>gh@wd;*iz$}{{L=u~y#(IqIcmGs)?k) z(dGDxF3-h5jf17;;Hn)HAdJWv@wzz?m0KBI&+Z`i7$=V&Z$H;faVJ$p^*{n6sz)ih zwGB&xJ%YN+Ze(#cwVd682!;1uU}IV>qn|aahiFQ2F%A#YRgH%v;C5^L#<}gf#(;D0 zxmQqdqx1_>*NoOQgh%otK+ow~qQzahmS}MoH(kla2Ltow>U;5>P~c_$|O#%9K%N&cF}Mv%XY`$Emx7u)DQ410VKIJ_ea zwh=r0l7#FhcayAK+*im-++n>`7E>-OqiKT6O1`>=d0}0Zke;$KB1p2bbmDQhtPH`u zWu;FJLd&3PdbL#D9KO4z<`ja0L-k1QGwP2toj4c@eo>3hk+X+}R{yVu&JX?W8*e@p zczozSjkb-C-A}heC%ZAr(U8Tm^MG1xpP1&~(0SlRIb}|Z^;J7mCtz0!@z1aa%!(wH z=3L(K7Nv?vj|O{47-s7KO?8ect4a7BJ{QNe^8UGhJMtV={MTow;(CAR@828>@7MhO z=JxPbQvmMG7ehFAKo0Qz8{pJb6i?r8ZVhkZ$^Xr5{>|N=>28S?_;Y)rh5!0Jnxwuz z2=6oD{h_}*V?{hm?-lnaT`sG#bS*yV`g^-3lP6D1ji3GzpSAl2YIl8S;>4-37mm$L zOwWu@9y>a5Y-a4m7r%>!W}r6w@skrT&rDCAFq-c9?|(PeFT&#kwe2sTn3yfuIdgpa^#19ot*_0@oH+R}9((NPlQXZK zdUeO)<3}HRl^FI2X>yzW?E5dr1 zJvT#cUp+N5v3=~=#0>jSouOlqqcBwew~u}I)YQzW>4|S2n>aNyJwCO4Z11U8rzQ{o zVB++?y zSvYH#9#~Vm{>+->v-VlsW9hT(P?-Ju>35G$KR-3~LkhEY^yJ~=(-RXrj!aEi*grm8 z8++El{`vV&fCJnmNG>}+r!_1Lu+bpuh5tOdwaz$96zbOT>B}{ z7ivGo_5IqP*M7wJ_j!H~xBmTZ=pX)14eTpSFb$>mGZxBK>bzZK1rJ`&^EUw2@!B+a zCTml*32+{({j7G}fVNt!eT0tVdy??++6-{V`SO2fhpvKj0Geiin#BL-JuqD~n4RR? z|L>~3DjpEyQR03Vd`I~|LF^e)se$bTUlX+>wbL}aXuBv%iNZ0yCP_)uPXmqIig@>yC|6xTU6kVg#L`o~V!S7y`$_(G@h6@= zOU)XvQgYgkLEBW8gWl=vfR|JJS53Ny_%D*q&n>37e**4^;-5nsyZvi_NA4q@Tjj$Z zqwCKD9&t-_MZV}u+$;E7=0ic>ZsX@(@EnKcQ}A*o%U!?t;^QjvRgPEXX2Hu^ZMX6L mIZEp!bRDIhOj&K~AIJGm7JC1q9~dTNOojB%|NhBw;Qs>C6;ieU literal 0 HcmV?d00001 diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/lib/netstandard2.0/BepuPhysics.dll.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/lib/netstandard2.0/BepuPhysics.dll.meta new file mode 100644 index 00000000..d749cf27 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/lib/netstandard2.0/BepuPhysics.dll.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: b405948c0480ad843b6aa640c7ffd28a +labels: +- NuGetForUnity +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/lib/netstandard2.0/BepuPhysics.xml b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/lib/netstandard2.0/BepuPhysics.xml new file mode 100644 index 00000000..6c15177e --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/lib/netstandard2.0/BepuPhysics.xml @@ -0,0 +1,6303 @@ + + + + BepuPhysics + + + +

+ Handles the movement of constraints from higher indexed batches into lower indexed batches to avoid accumulating a bunch of unnecessary ConstraintBatches. + + + + + Gets or sets the desired number of candidates to analyze as a fraction of the total number of constraints. + + + + + Gets or sets the maximum number of constraint moves that can occur in a single execution of Compress as a fraction of the total number of constraints. + + + + + Index of the constraint batch to optimize. + + + + + Incrementally finds and applies a set of compressions to apply to the constraints in the solver's batches. + Constraints in higher index batches try to move to lower index batches whenever possible. + + + + + Index of the set owning the body reference. If the island index is 0, the body is active. + + + + + Index of the body within its owning set. If the body is active (and so the Island index is -1), this is an index into the Bodies data arrays. + If it is nonnegative, it is an index into the inactive island + + + + + Collection of all allocated bodies. + + + + + Remaps a body handle integer value to the actual array index of the body. + The backing array index may change in response to cache optimization. + + + + + The set of existing bodies. The slot at index 0 contains all active bodies. Later slots, if allocated, contain the bodies associated with inactive islands. + Note that this buffer does not necessarily contain contiguous elements. When a set is removed, a gap remains. + + + + + Gets a reference to the active set, stored in the index 0 of the Sets buffer. + + Reference to the active body set. + + + + The world transformed inertias of active bodies as of the last update. Note that this is not automatically updated for direct orientation changes or for body memory moves. + It is only updated once during the frame. It should be treated as ephemeral information. + + + + + Gets or sets the minimum constraint capacity for each body. Future resizes or allocations will obey this minimum, but changing this does not immediately resize existing lists. + + + + + Constructs a new bodies collection. Initialize must be called for the instance to be ready for use. + + Pool for the collection to pull persistent allocations from. + Shapes referenced by the collection's bodies. + Broad phase containing the body collidables. + Initial number of bodies to allocate space for in the active set. + Initial number of islands to allocate space for in the Sets buffer. + Expected number of constraint references per body to allocate space for. + + + + Initializes the bodies set. Used to complete bidirectional dependencies. + + Solver responsible for the constraints connected to the collection's bodies. + Island awakener to use when bodies undergo transitions requiring that they exist in the active set. + + + + Updates the bounds held within the broad phase for the body's current state. Does not expand the bounding box by velocity. If there is no shape associated with the body, this does nothing. + + + + + Adds a new active body to the simulation. + + Description of the body to add. + Handle of the created body. + + + + Removes an active body by its index. Any constraints connected to this body will be removed. Assumes that the input location is valid. + + Index of the active body. + + + + Removes a body from the set by its handle. If the body is inactive, all bodies in its island will be forced active. + + Handle of the body to remove. + + + + Adds a constraint to an active body's constraint list. + + Index of the body to add the constraint to. + Handle of the constraint to add. + Index of the body in the constraint. + + + + Removes a constraint from an active body's constraint list. + + Index of the active body. + Handle of the constraint to remove. + + + + Gets whether the inertia matches that of a kinematic body (that is, all inverse mass and inertia components are zero). + + Body inertia to analyze. + True if all components of inverse mass and inertia are zero, false otherwise. + + + + Gets whether the angular inertia matches that of a kinematic body (that is, all inverse inertia tensor components are zero). + + Body inertia to analyze. + True if all components of inverse mass and inertia are zero, false otherwise. + + + + Changes the local mass and inertia tensor associated with a body. Properly handles the transition between kinematic and dynamic. + If the body is becoming kinematic, any constraints which only contain kinematic bodies will be removed. + Wakes up the body. + + Handle of the body whose inertia should change. + New local inertia for the body. + + This function is only necessary when the inertia change could potentially result in a transition between dynamic and kinematic states. + If it is guaranteed to be dynamic before and after the change, the inertia can be directly modified without issue. + + + + + Changes the shape of a body. Properly handles the transition between shapeless and shapeful. If the body is inactive, it will be forced awake. + Updates the bounds of the body in the broad phase. + + Handle of the body to change the shape of. + Index of the new shape to use for the body. + + + + Applies a description to a body. Properly handles any transitions between dynamic and kinematic and between shapeless and shapeful. + If the body is becoming kinematic, any constraints which only contain kinematic bodies will be removed. Wakes up the body. + Updates the bounds of the body in the broad phase. + + Handle of the body to receive the description. + Description to apply to the body. + + + + Gets the description of a body by handle. + + Handle of the body to look up. + Description of the body. + + + + Gets a reference to a body by its handle. + + Handle of the body to grab a reference of. + Reference to the desired body. + + + + Checks whether a body handle is currently registered with the bodies set. + + Handle to check for. + True if the handle exists in the collection, false otherwise. + + + + Gathers inertia for one body bundle into an AOSOA bundle. + + Active body indices being gathered. + Number of bodies in the bundle. + Gathered inertia of body A. + Gathered inertia of body B. + + + + Gathers inertia for two body bundles into AOSOA bundles. + + Active body indices being gathered. + Number of bodies in the bundle. + Gathered inertia of body A. + Gathered inertia of body B. + + + + Gathers inertia for three body bundles into AOSOA bundles. + + Active body indices being gathered. + Number of bodies in the bundle. + Gathered inertia of body A. + Gathered inertia of body B. + Gathered inertia of body C. + + + + Gathers inertia for four body bundles into AOSOA bundles. + + Active body indices being gathered. + Number of bodies in the bundle. + Gathered inertia of body A. + Gathered inertia of body B. + Gathered inertia of body C. + Gathered inertia of body D. + + + + Gathers orientations for two body bundles into AOSOA bundles. + + Active body indices being gathered. + Number of body pairs in the bundle. + Gathered orientation of body A. + Gathered orientation of body B. + + + + Gathers orientations for one body bundles into AOSOA bundles. + + Active body indices being gathered. + Number of body pairs in the bundle. + Gathered orientation of bodies in the bundle. + + + + Gathers pose information for a body bundle into an AOSOA bundle. + + Active body indices being gathered. + Number of body pairs in the bundle. + Gathered absolute position of the body. + Gathered orientation of the body. + + + + Gathers orientations and relative positions for a two body bundle into an AOSOA bundle. + + Active body indices being gathered. + Number of body pairs in the bundle. + Gathered offsets from body A to body B. + Gathered orientation of body A. + Gathered orientation of body B. + + + + Gathers relative positions for a two body bundle into an AOSOA bundle. + + Active body indices being gathered. + Number of body pairs in the bundle. + Gathered offset from body A to of body B. + + + + Gathers relative positions for a three body bundle into an AOSOA bundle. + + Active body indices being gathered. + Number of body pairs in the bundle. + Gathered offset from body A to of body B. + Gathered offset from body A to of body C. + + + + Gathers relative positions for a four body bundle into an AOSOA bundle. + + Active body indices being gathered. + Number of body pairs in the bundle. + Gathered offset from body A to of body B. + Gathered offset from body A to of body C. + Gathered offset from body A to of body D. + + + + Gathers velocities for one body bundle and stores it into a velocity bundle. + + Active set indices of the bodies to gather velocity data for. + Number of bodies in the bundle. + Gathered velocities. + + + + Gathers velocities for two body bundles and stores it into velocity bundles. + + Active set indices of the bodies to gather velocity data for. + Number of body pairs in the bundle. + Gathered velocities of A bodies. + Gathered velocities of B bodies. + + + + Gathers velocities for three body bundles and stores it into velocity bundles. + + Active set indices of the bodies to gather velocity data for. + Number of body pairs in the bundle. + Gathered velocities of A bodies. + Gathered velocities of B bodies. + Gathered velocities of C bodies. + + + + Gathers velocities for four body bundles and stores it into velocity bundles. + + Active set indices of the bodies to gather velocity data for. + Number of body pairs in the bundle. + Gathered velocities of A bodies. + Gathered velocities of B bodies. + Gathered velocities of C bodies. + Gathered velocities of D bodies. + + + + Scatters velocities for one body bundle into the active body set. + + Velocities of body bundle A to scatter. + Active set indices of the bodies to scatter velocity data to. + Number of body pairs in the bundle. + + + + Scatters velocities for two body bundles into the active body set. + + Velocities of body bundle A to scatter. + Velocities of body bundle B to scatter. + Active set indices of the bodies to scatter velocity data to. + Number of body pairs in the bundle. + + + + Scatters velocities for three body bundles into the active body set. + + Velocities of body bundle A to scatter. + Velocities of body bundle B to scatter. + Velocities of body bundle A to scatter. + Active set indices of the bodies to scatter velocity data to. + Number of body pairs in the bundle. + + + + Scatters velocities for four body bundles into the active body set. + + Velocities of body bundle A to scatter. + Velocities of body bundle B to scatter. + Velocities of body bundle A to scatter. + Velocities of body bundle B to scatter. + Active set indices of the bodies to scatter velocity data to. + Number of body pairs in the bundle. + + + + Enumerates all the bodies connected to a given active body. + Bodies which are connected by more than one constraint will be reported multiple times. + + Type of the enumerator to execute on each connected body. + Index of the active body to enumerate the connections of. This body will not appear in the set of enumerated bodies, even if it is connected to itself somehow. + Enumerator instance to run on each connected body. + Solver from which to pull constraint body references. + + + + Enumerates all the bodies connected to a given body. + Bodies which are connected by more than one constraint will be reported multiple times. + + Type of the enumerator to execute on each connected body. + Handle of the body to enumerate the connections of. This body will not appear in the set of enumerated bodies, even if it is connected to itself somehow. + Enumerator instance to run on each connected body. + Solver from which to pull constraint body references. + + + + Clears all bodies from all sets without releasing any memory that wouldn't be released by a sequence of regular removals. + + + + + Reallocates the inertias buffer for the target capacity. Will not shrink below the size of the current active set. + + + + + Guarantees that the inertias capacity is sufficient for the given capacity. + + + + + Resizes the allocated spans for active body data. Note that this is conservative; it will never orphan existing objects. + + Target body data capacity. + + + + Resizes all active body constraint lists to meet the MinimumConstraintCapacityPerBody. Inactive bodies are untouched. + Resizes are guaranteed to never shrink a list below the current count. + + + + + Increases the size of active body buffers if needed to hold the target capacity. + + Target data capacity. + + + + Ensures all active body constraint lists can hold at least MinimumConstraintCapacityPerBody constraints. Inactive bodies are untouched. + + + + + Returns all body resources to the pool used to create them. + + The object can be reused if it is reinitialized by using EnsureCapacity or Resize. + + + + Threshold of squared velocity under which the body is allowed to go to sleep. This is compared against dot(linearVelocity, linearVelocity) + dot(angularVelocity, angularVelocity). + + + + + The number of time steps that the body must be under the sleep threshold before the body becomes a sleep candidate. + Note that the body is not guaranteed to go to sleep immediately after meeting this minimum. + + + + + Creates a body activity description. + + Threshold of squared velocity under which the body is allowed to go to sleep. This is compared against dot(linearVelocity, linearVelocity) + dot(angularVelocity, angularVelocity). + The number of time steps that the body must be under the sleep threshold before the body becomes a sleep candidate. + Note that the body is not guaranteed to go to sleep immediately after meeting this minimum. + + + + Computes a decent default speculative margin for a shape based on its minimum and maximum radii. + + Type of the shape to compute a speculative margin for. + Shape to compute a speculative margin for. + Speculative margin for the given shape. + + + + Computes a decent default activity description for a shape. + + Type of the shape to create an activity description for. + Shape to create an activity description for. + Default activity description for the given shape. + + + + Creates a dynamic body description. + + Pose of the body. + Initial velocity of the body. + Local inertia of the body. + Collidable to associate with the body. + Activity settings for the body. + Constructed description for the body. + + + + Creates a dynamic body description with zero initial velocity. + + Pose of the body. + Local inertia of the body. + Collidable to associate with the body. + Activity settings for the body. + Constructed description for the body. + + + + Creates a dynamic body description with identity orientation. + + Position of the body. + Initial velocity of the body. + Local inertia of the body. + Collidable to associate with the body. + Activity settings for the body. + Constructed description for the body. + + + + Creates a dynamic body description with zero initial velocity and identity orientation. + + Position of the body. + Local inertia of the body. + Collidable to associate with the body. + Activity settings for the body. + Constructed description for the body. + + + + Creates a dynamic body description with collidable, inertia, and activity descriptions generated from a convex shape. Adds the shape to the given shape set. + + Type of the shape to create a body for. + Pose of the body. + Initial velocity of the body. + Mass of the body. The inertia tensor will be calculated based on this mass and the shape. + Shape collection to add the shape to. + Shape to add to the shape set and to create the body from. + Constructed description for the body. + + + + Creates a dynamic body description with identity orientation and collidable, inertia, and activity descriptions generated from a convex shape. Adds the shape to the given shape set. + + Type of the shape to create a body for. + Position of the body. + Initial velocity of the body. + Mass of the body. The inertia tensor will be calculated based on this mass and the shape. + Shape collection to add the shape to. + Shape to add to the shape set and to create the body from. + Constructed description for the body. + + + + Creates a dynamic body description with zero initial velocity and collidable, inertia, and activity descriptions generated from a convex shape. Adds the shape to the given shape set. + + Type of the shape to create a body for. + Pose of the body. + Mass of the body. The inertia tensor will be calculated based on this mass and the shape. + Shape collection to add the shape to. + Shape to add to the shape set and to create the body from. + Constructed description for the body. + + + + Creates a dynamic body description with zero initial velocity, identity orientation, and collidable, inertia, and activity descriptions generated from a convex shape. Adds the shape to the given shape set. + + Type of the shape to create a body for. + Position of the body. + Mass of the body. The inertia tensor will be calculated based on this mass and the shape. + Shape collection to add the shape to. + Shape to add to the shape set and to create the body from. + Constructed description for the body. + + + + Creates a kinematic body description. + + Pose of the body. + Initial velocity of the body. + Collidable to associate with the body. + Activity settings for the body. + Constructed description for the body. + + + + Creates a kinematic body description with zero initial velocity. + + Pose of the body. + Collidable to associate with the body. + Activity settings for the body. + Constructed description for the body. + + + + Creates a kinematic body description with identity orientation. + + Position of the body. + Initial velocity of the body. + Collidable to associate with the body. + Activity settings for the body. + Constructed description for the body. + + + + Creates a kinematic body description with identity orientation and zero initial velocity. + + Position of the body. + Collidable to associate with the body. + Activity settings for the body. + Constructed description for the body. + + + + Creates a kinematic body description with collidable and activity descriptions generated from a convex shape. Adds the shape to the given shape set. + + Type of the shape to create a body for. + Pose of the body. + Initial velocity of the body. + Shape collection to add the shape to. + Shape to add to the shape set and to create the body from. + Constructed description for the body. + + + + Creates a kinematic body description with identity orientation and collidable and activity descriptions generated from a convex shape. Adds the shape to the given shape set. + + Type of the shape to create a body for. + Position of the body. + Initial velocity of the body. + Shape collection to add the shape to. + Shape to add to the shape set and to create the body from. + Constructed description for the body. + + + + Creates a kinematic body description with zero initial velocity and collidable and activity descriptions generated from a convex shape. Adds the shape to the given shape set. + + Type of the shape to create a body for. + Pose of the body. + Shape collection to add the shape to. + Shape to add to the shape set and to create the body from. + Constructed description for the body. + + + + Creates a kinematic body description with zero initial velocity, identity orientation, and collidable and activity descriptions generated from a convex shape. Adds the shape to the given shape set. + + Type of the shape to create a body for. + Position of the body. + Shape collection to add the shape to. + Shape to add to the shape set and to create the body from. + Constructed description for the body. + + + + Incrementally changes the layout of a set of bodies to minimize the cache misses associated with the solver and other systems that rely on connection following. + + + + + Gets or sets the fraction of all bodies to update each frame. + + + + + Represents a rigid transformation. + + + + + Transforms a vector by the rigid pose: v * pose.Orientation + pose.Position. + + Vector to transform. + Pose to transform the vector with. + Transformed vector. + + + + Transforms a vector by the inverse of a rigid pose: (v - pose.Position) * pose.Orientation^-1. + + Vector to transform. + Pose to invert and transform the vector with. + Transformed vector. + + + + Inverts the rigid transformation of the pose. + + Pose to invert. + Inverse of the pose. + + + + Concatenates one rigid transform with another. The resulting transform is equivalent to performing transform a followed by transform b. + + First transform to concatenate. + Second transform to concatenate. + Result of the concatenation. + + + + Threshold of squared velocity under which the body is allowed to go to sleep. This is compared against dot(linearVelocity, linearVelocity) + dot(angularVelocity, angularVelocity). + Setting this to a negative value guarantees the body cannot go to sleep without user action. + + + + + The number of time steps that the body must be under the sleep threshold before the body becomes a sleeping candidate. + Note that the body is not guaranteed to go to sleep immediately after meeting this minimum. + + + + + If the body is awake, this is the number of time steps that the body has had a velocity below the sleep threshold. + + + + + True if this body is a candidate for being slept. If all the bodies that it is connected to by constraints are also candidates, this body may go to sleep. + + + + + Convenience structure for directly referring to a body's properties. + + Note that this type makes no attempt to protect against unsafe modification of body properties, nor does modifying its properties try to wake up bodies if they are asleep. + + + + Handle of the body that this reference refers to. + + + + + The bodies collection containing the body. + + + + + Constructs a new body reference. + + Handle of the body to refer to. + Collection containing the body. + + + + Gets whether the body reference exists within the body set. True if the handle maps to a valid memory location that agrees that the handle points to it, false otherwise. + + + + + Gets a reference to the body's memory location stored in the handle to location mapping. + + + + + Gets or sets whether the body is in the active set. Setting this to true will attempt to wake the body; setting it to false will force the body and any constraint-connected bodies asleep. + + + + + Gets a reference to the body's velocity. + + + + + Gets a reference to the body's pose. + + + + + Gets a reference to the body's collidable. + + + + + Gets a reference to the body's local inertia. + + + + + Gets a reference to the body's activity state. + + + + + Gets a reference to the list of the body's connected constraints. + + + + + Gets whether the body is kinematic, meaning its inverse inertia and mass are all zero. + + + + + Gets whether the body has locked inertia, meaning its inverse inertia tensor is zero. + + + + + If the body is dynamic, turns the body kinematic by setting all inverse inertia and mass values to zero and activates it. + Any constraints connected to the body that now only contain kinematic references are removed. + If the body is kinematic, does nothing. + + + + + Sets the body's local inertia to the provided inertia. Wakes up the body and correctly handles any transition between dynamic and kinematic states. + If the body moves from dynamic to kinematic, any constraints connected to the body that now only contain kinematic references are removed. + + + + + Computes the world space inverse inertia tensor for the body based on the LocalInertia and Pose. + + + + + Gets a description of the body. + + Description of the body. + + + + Sets a body's properties according to a description. Properly handles any transitions between dynamic and kinematic and between shapeless and shapeful. + If the body is becoming kinematic, any constraints which only contain kinematic bodies will be removed. Wakes up the body and updates its bounds in the broad phase. + + Description of the body. + + + + Changes the shape of a body. Properly handles the transition between shapeless and shapeful. If the body is inactive, it will be forced awake. Updates the bounds of the body in the broad phase. + + Index of the new shape to use for the body. + + + + Gets a copy of the body's bounding box. If the body has no shape, the bounding box has a min at float.MaxValue and a max at float.MinValue. + + + + + Gets direct pointers to the body's bounding box minimum and maximum in the broad phase. Outputs null if the body has no shape. + + Pointer to the bounding box minimum in the broad phase. Null if the body has no shape. + Pointer to the bounding box maximum in the broad phase. Null if the body has no shape. + True if the body has a shape and bounds, false otherwise. + + + + Updates the body's bounds in the broad phase for its current state. Does not include velocity expansion. Does nothing if the body has no shape. + + Can be useful if you made modifications to the body's state that you want reflected in the broad phase before the next timestep. + For example, if you want to perform ray casts against the broad phase after moving objects around directly, their bounds must be updated or else the broad phase bounds will be out of date and the ray will likely miss. + + + + Applies an impulse to a body by index. Does not wake the body up. + + Pose of the body to apply impulse to. + Velocity of the body to apply impulse to. + Local inertia of the body to apply impulse to. + Impulse to apply to the body. + World space offset from the center of the body to apply the impulse at. + + + + Applies an impulse to a body by index. Does not wake the body up. + + Body set containing the body to apply an impulse to. + Index of the body in the body set. + Impulse to apply to the body. + World space offset from the center of the body to apply the impulse at. + + + + Applies an angular impulse to an angular velocity. Does not wake the body up. + + Impulse to apply to the velocity. + Inverse inertia tensor to transform the impulse with. + Angular velocity to be modified. + + + + Applies an impulse to a linear velocity. Does not wake the body up. + + Impulse to apply to the velocity. + Inverse mass to transform the impulse with. + Linear velocity to be modified. + + + + Applies an impulse to a body at the given world space position. Does not modify activity states. + + Impulse to apply to the body. + World space offset to apply the impulse at. + + + + Applies an impulse to a linear velocity. Does not wake the body up. + + Impulse to apply to the velocity. + + + + Computes the velocity of an offset point attached to the body. + + Offset from the body's center to + Effective velocity of the point if it were attached to the body. + + + + Applies an angular impulse to an angular velocity. Does not wake the body up. + + Impulse to apply to the velocity. + + + + Stores a group of bodies- either the set of active bodies, or the bodies involved in an inactive simulation island. + + + + + Remaps a body index to its handle. + + + + + The collidables owned by each body in the set. Speculative margins, continuity settings, and shape indices can be changed directly. + Shape indices cannot transition between pointing at a shape and pointing at nothing or vice versa without notifying the broad phase of the collidable addition or removal. + + + + + Activity states of bodies in the set. + + + + + List of constraints associated with each body in the set. + + + + + Gets whether this instance is backed by allocated memory. + + + + + Swaps the memory of two bodies. Indexed by memory slot, not by handle index. + + Memory slot of the first body to swap. + Memory slot of the second body to swap. + + + + Disposes the buffers, but nothing inside of the buffers. Per-body constraint lists stored in the set will not be returned. + + Pool to return the set's top level buffers to. + + + + Disposes the body set's buffers and any resources within them. + + Pool to return resources to. + + + + Expands the bounding box surrounding a shape A in the local space of some other collidable B. + + + + + Computes the bounding box of a child shape A in the local space of some other collidable B with a sweep direction representing the net linear motion. + + + + + Computes the bounding box of shape A in the local space of some other collidable B with a sweep direction representing the net linear motion. + + + + + Convenience collection that stores extra properties about bodies and statics, indexed by the body or static handle. + + Type of the data to store. + This is built for use cases relying on random access like the narrow phase. For maximum performance with sequential access, an index-aligned structure would be better. + + + + Constructs a new collection to store handle-aligned body properties. Assumes the Initialize function will be called later to provide the Bodies collection. + + Pool from which to pull internal resources. If null, uses the later Initialize-provided Bodies pool. + + + + Constructs a new collection to store handle-aligned body and static properties. + + Simulation to track. + Pool from which to pull internal resources. If null, uses the Simulation pool. + + + + Initializes the property collection if the Bodies/Statics-less constructor was used. + + Bodies collection to track. + Statics collection to track. + + + + Gets a reference to the properties associated with a body's handle. + + Body handle to retrieve the properties for. + Reference to properties associated with a body handle. + + + + Gets a reference to the properties associated with a static's handle. + + Static handle to retrieve the properties for. + Reference to properties associated with a static handle. + + + + Gets a reference to the properties associated with a collidable. + + Collidable to retrieve the properties for. + Reference to properties associated with a collidable. + + + + Ensures there is space for a given body handle and returns a reference to the used memory. + + Body handle to allocate for. + Reference to the data for the given body. + + + + Ensures there is space for a given static handle and returns a reference to the used memory. + + Static handle to allocate for. + Reference to the data for the given static. + + + + Ensures there is space for a given collidable reference and returns a reference to the used memory. + + Collidable reference to allocate for. + Reference to the data for the given collidable. + + + + Ensures that the internal structures have at least the given capacity for bodies. + + Capacity to ensure. + + + + Ensures that the internal structures have at least the given capacity for statics. + + Capacity to ensure. + + + + Compacts the memory used by the collection for bodies to a safe minimum based on the Bodies collection. + + + + + Compacts the memory used by the collection for statics to a safe minimum based on the Statics collection. + + + + + Returns all held resources. + + + + + Compound shape containing a bunch of shapes accessible through a tree acceleration structure. Useful for compounds with lots of children. + + + + + Acceleration structure for the compound children. + + + + + Buffer of children within this compound. + + + + + Creates a compound shape with an acceleration structure. + + Set of children in the compound. + Shapes set in which child shapes are allocated. + Pool to use to allocate acceleration structures. + + + + Type id of compound shapes. + + + + + Collision shape representing a solid cuboid. + + + + + Half of the box's width along its local X axis. + + + + + Half of the box's height along its local Y axis. + + + + + Half of the box's length along its local Z axis. + + + + + Gets or sets the width of the box along its local X axis. + + + + + Gets or sets the height of the box along its local Y axis. + + + + + Gets or sets the length of the box along its local Z axis. + + + + + Creates a Box shape. + + Width of the box along the local X axis. + Height of the box along the local Y axis. + Length of the box along the local Z axis. + + + + Type id of box shapes. + + + + + Collision shape representing a sphere-expanded line segment. + + + + + Spherical expansion applied to the internal line segment. + + + + + Half of the length of the internal line segment. Oriented along the local Y axis. + + + + + Gets or sets the length of the capsule's internal line segment along the local Y axis. + + + + + Creates a capsule shape. + + Radius of the capsule. + Length of the capsule's internal line segment along the local Y axis. + + + + Type id of capsule shapes. + + + + + No dedicated continuous detection is performed. Default speculative contact generation will occur within the speculative margin. + The collidable's bounding box will not be expanded by velocity beyond the speculative margin. + This is the cheapest mode, but it may miss collisions. Note that if a Discrete mode collidable is moving quickly, the fact that its bounding box is not expanded + may cause it to miss a collision even with a non-Discrete collidable. + + + + + No dedicated continuous detection is performed. Default speculative contact generation will occur within the speculative margin. + The collidable's bounding box will be expanded by velocity beyond the speculative margin if necessary. + This is useful when a collidable may move quickly and does not itself require continuous detection, but there exist other collidables with continuous modes + that should avoid missing collisions. + + + + + Collision detection will start with a sweep test to identify a likely time of impact. Speculative contacts will be generated for the predicted collision. + This mode can capture angular motion with very few ghost collisions. It can, however, miss secondary collisions that would have occurred due to the primary impact's velocity change. + + + + + The continuous collision detection mode. + + + + + If using ContinuousDetectionMode.Continuous, MinimumSweepTimestep is the minimum progress that the sweep test will make when searching for the first time of impact. + Collisions lasting less than MinimumProgress may be missed by the sweep test. Using larger values can significantly increase the performance of sweep tests. + + + + + If using ContinuousDetectionMode.Continuous, sweep tests will terminate if the time of impact region has been refined to be smaller than SweepConvergenceThreshold. + Values closer to zero will converge more closely to the true time of impact, but for speculative contact generation larger values usually work fine. + Larger values allow the sweep to terminate much earlier and can significantly improve sweep performance. + + + + + No dedicated continuous detection will be performed. Default speculative contact generation will occur within the speculative margin. + The collidable's bounding box will not be expanded by velocity beyond the speculative margin. + This is the cheapest mode, but it may miss collisions. Note that if a Discrete mode collidable is moving quickly, the fact that its bounding box is not expanded + may cause it to miss a collision even with a non-Discrete collidable. + + + + + No dedicated continuous detection is performed. Default speculative contact generation will occur within the speculative margin. + The collidable's bounding box will be expanded by velocity beyond the speculative margin if necessary. + This is useful when a collidable may move quickly and does not itself require continuous detection, but there exist other collidables with continuous modes + that should avoid missing collisions. + + + + + Collision detection will start with a sweep test to identify a likely time of impact. Speculative contacts will be generated for the predicted collision. + This mode can capture angular motion with very few ghost collisions. It can, however, miss secondary collisions that would have occurred due to the primary impact's velocity change. + + Minimum progress that the sweep test will make when searching for the first time of impact. + Collisions lasting less than MinimumProgress may be missed by the sweep test. Using larger values can significantly increase the performance of sweep tests. + Threshold against which the time of impact region is compared for sweep termination. + If the region has been refined to be smaller than SweepConvergenceThreshold, the sweep will terminate. + Values closer to zero will converge more closely to the true time of impact, but for speculative contact generation larger values usually work fine. + Larger values allow the sweep to terminate much earlier and can significantly improve sweep performance. + Settings reflecting a continuous detection mode. + + + + Description of a collidable instance living in the broad phase and able to generate collision pairs. + Collidables with a ShapeIndex that points to nothing (a default constructed TypedIndex) do not actually refer to any existing Collidable. + This can be used for a body which needs no collidable representation. + + + + + Continuous collision detection settings for this collidable. Includes the collision detection mode to use and tuning variables associated with those modes. + + + + + Index of the shape used by the body. While this can be changed, any transition from shapeless->shapeful or shapeful->shapeless must be reported to the broad phase. + If you need to perform such a transition, consider using Bodies.ChangeShape or Bodies.ApplyDescription; those functions update the relevant state. + + + + + Size of the margin around the surface of the shape in which contacts can be generated. These contacts will have negative depth and only contribute if the frame's velocities + would push the shapes of a pair into overlap. This should be positive to avoid jittering. It can also be used as a form of continuous collision detection, but excessively + high values combined with fast motion may result in visible 'ghost collision' artifacts. + For continuous collision detection with less chance of ghost collisions, use the dedicated continuous collision detection modes. + + + + + Index of the collidable in the broad phase. Used to look up the target location for bounding box scatters. Under normal circumstances, this should not be set externally. + + + + + Constructs a new collidable description. + + Shape used by the collidable. + Radius of the margin in which to allow speculative contact generation. + Continuous collision detection settings for the collidable. + + + + Constructs a new collidable description with default discrete continuity. + + Shape used by the collidable. + Radius of the margin in which to allow speculative contact generation. + + + + Marks a collidable as owned by a dynamic body. + + + + + Marks a collidable as owned by a kinematic body. + + + + + Marks the collidable as an independent immobile collidable. + + + + + Gets the mobility state of the owner of this collidable. + + + + + Gets the body handle of the owner of the collidable referred to by this instance. + + + + + Gets the static handle of the owner of the collidable referred to by this instance. + + + + + Gets the integer value of the handle of the owner of the collidable referred to by this instance. + + + + + Creates a collidable reference. + + Mobility type of the owner of the collidable. + Handle of the owner of the collidable. + + + + Creates a collidable reference for a body. + + Mobility type of the owner of the collidable. + Handle of the owner of the collidable. + + + + Creates a collidable reference for a static. + + Mobility type of the owner of the collidable. + Handle of the owner of the collidable. + + + + Minimalist compound shape containing a list of child shapes. Does not make use of any internal acceleration structure; should be used only with small groups of shapes. + + + + + Buffer of children within this compound. + + + + + Creates a compound shape with no acceleration structure. + + Set of children in the compound. + + + + Checks if a shape index. + + Shape index to analyze. + Shape collection into which the index indexes. + True if the index is valid, false otherwise. + + + + Checks if a set of children shape indices are all valid. + + Children to examine. + Shape collection into which the children index. + True if all child indices are valid, false otherwise. + + + + Type id of list based compound shapes. + + + + + Reusable convenience type for incrementally building compound shapes. + + + + + Weight associated with this child. Acts as the child's mass when interpreted as a dynamic compound. + When interpreted as kinematic with recentering, it is used as a local pose weight to compute the center of rotation. + + + + + Inertia tensor associated with the child. If inertia is all zeroes, it is interpreted as infinite. + + + + + Adds a new shape to the accumulator, creating a new shape in the shapes set. The mass used to compute the inertia tensor will be based on the given weight. + + Type of the shape to add to the accumulator and the shapes set. + Shape to add. + Pose of the shape in the compound's local space. + Weight of the shape. If the compound is interpreted as a dynamic, this will be used as the mass and scales the inertia tensor. + Otherwise, it is used for recentering. + + + + Adds a new shape to the accumulator, creating a new shape in the shapes set. Inertia is assumed to be infinite. + + Type of the shape to add to the accumulator and the shapes set. + Shape to add. + Pose of the shape in the compound's local space. + Weight of the shape. If the compound is interpreted as a dynamic, this will be used as the mass. Otherwise, it is used for recentering. + + + + Adds a new shape to the accumulator. + + Index of the shape to add. + Pose of the shape in the compound's local space. + Weight of the shape. If the compound is interpreted as a dynamic, this will be used as the mass. Otherwise, it is used for recentering. + Inverse inertia tensor of the shape being added. This is assumed to already be scaled as desired by the weight. + + + + Adds a new shape to the accumulator, assuming it has infinite inertia. + + Index of the shape to add. + Pose of the shape in the compound's local space. + Weight of the shape used for computing the center of rotation. + + + + Builds a buffer of compound children from the accumulated set for a dynamic compound. + Computes a center of mass and recenters child shapes relative to it. Does not reset the accumulator. + + List of children created from the accumulated set. + Combined inertia of the compound. + Computed center of rotation based on the poses and weights of accumulated children. + + + + Builds a buffer of compound children from the accumulated set for a dynamic compound. Does not recenter the children. Does not reset the accumulator. + + List of children created from the accumulated set. + Combined inertia of the compound. + + + + Builds a buffer of compound children from the accumulated set for a kinematic compound. + Computes a center of mass and recenters child shapes relative to it. Does not reset the accumulator. + + List of children created from the accumulated set. + Combined inertia of the compound. + Computed center of rotation based on the poses and weights of accumulated children. + + + + Builds a buffer of compound children from the accumulated set for a kinematic compound. Does not recenter children. Does not reset the accumulator. + + List of children created from the accumulated set. + Combined inertia of the compound. + Computed center of rotation based on the poses and weights of accumulated children. + + + + Empties out the accumulated children. + + + + + Returns internal resources to the pool, rendering the builder unusable. + + + + + Normal of the bounding plane. + + + + + Offset from the origin to a point on the plane along the normal. + + + + + Bundled points of the convex hull. + + + + + Bundled bounding planes of the convex hull. + + + + + Combined set of vertices used by each face. Use FaceToVertexIndicesStart to index into this for a particular face. Indices stored in counterclockwise winding in right handed space, clockwise in left handed space. + + + + + Start indices of faces in the FaceVertexIndices. + + + + + Creates a convex hull from a point set. + + Points to compute the convex hull of. + Pool in which to allocate the convex hull and any temporary resources needed to compute the hull. + Computed center of the convex hull before the hull was recentered. + + + + Computes the inertia of the convex hull. + + Mass to scale the inertia tensor with. + Inertia of the convex hull. + + + + Type id of convex hull shapes. + + + + + Provides an estimate of the scale of a shape. + + Mask of lanes which are inactive. + Approximate scale of the shape for use in epsilons. + + + + Stores references to the points composing one of a convex hull's faces. + + + + + Gets the number of vertices in the face. + + + + + Gets the index of the vertex associated with the given face vertex index in the source point set. + + Index into the face's vertex list. + Index of the vertex associated with the given face vertex index in the source point set. + + + + Raw data representing a convex hull. + + This is not yet transformed into a runtime format. It requires additional processing to be used in a ConvexHull shape; see ConvexHullHelper.ProcessHull. + + + + Mapping of points on the convex hull back to the original point set. + + + + + List of indices composing the faces of the hull. Individual faces indexed by the FaceIndices. + + + + + Starting index in the FaceVertexIndices for each face. + + + + + Helper methods to create and process convex hulls from point clouds. + + + + + Computes the convex hull of a set of points. + + Point set to compute the convex hull of. + Buffer pool to pull memory from when creating the hull. + Convex hull of the input point set. + + + + Processes hull data into a runtime usable convex hull shape. Recenters the convex hull's points around its center of mass. + + Point array into which the hull data indexes. + Raw input data to process. + Pool used to allocate resources for the hullShape. + Convex hull shape created from the input data. + Computed center of mass of the convex hull before its points were recentered onto the origin. + + + + Creates a convex hull shape out of an input point set. Recenters the convex hull's points around its center of mass. + + Points to use to create the hull. + Buffer pool used for temporary allocations and the output data structures. + Intermediate hull data that got processed into the convex hull. + Computed center of mass of the convex hull before its points were recentered onto the origin. + Convex hull shape of the input point set. + + + + Creates a convex hull shape out of an input point set. Recenters the convex hull's points around its center of mass. + + Points to use to create the hull. + Buffer pool used for temporary allocations and the output data structures. + Computed center of mass of the convex hull before its points were recentered onto the origin. + Convex hull shape of the input point set. + + + + Collision shape representing a cylinder. + + + + + Radius of the cylinder. + + + + + Half length of the cylinder along its local Y axis. + + + + + Gets or sets the length of the cylinder along its local Y axis. + + + + + Creates a cylinder shape. + + Radius of the cylinder. + Length of the cylinder along its local Y axis. + + + + Type id of cylinder shapes. + + + + + Defines a type usable as a shape by collidables. + + + + + Defines a compound shape type that has children of potentially different types. + + + + + Defines a compound shape type that has children of only one type. + + Type of the child shapes. + Type of the child shapes, formatted in AOSOA layout. + + + + Gets whether this type supports accessing its memory by lane offsets. If false, WriteSlot must be used instead of WriteFirst. + + + + + Gets the number of bytes required for allocations within the wide shape. + + + + + For types with a nonzero internal allocation size, provides memory to the shape for internal allocations. + Memory should be assumed to be stack allocated. + + Memory to use for internal allocations in the wide shape. + + + + Places the specified AOS-formatted shape into the first lane of the wide 'this' reference. + + Note that we are effectively using the TShapeWide as a stride. + The base address is offset by the user of this function, so the implementation only ever considers the first slot. + AOS-formatted shape to gather from. + + + + Places the specified AOS-formatted shape into the selected slot of the wide 'this' reference. + + Index of the slot to put the data into. + Source of the data to insert. + + + + Gets the lower bound on the number of rays to execute in a wide fashion. Ray bundles with fewer rays will fall back to the single ray code path. + + + + + Shape designed to contain a whole bunch of triangles. Triangle collisions and ray tests are one-sided; only tests which see the triangle as wound clockwise in right handed coordinates or counterclockwise in left handed coordinates will generate contacts. + + + + + Acceleration structure of the mesh. + + + + + Buffer of triangles composing the mesh. Triangles will only collide with tests which see the triangle as wound clockwise in right handed coordinates or counterclockwise in left handed coordinates. + + + + + Gets or sets the scale of the mesh. + + + + + Creates a mesh shape. + + Triangles to use in the mesh. + Scale to apply to all vertices at runtime. + Note that the scale is not baked into the triangles or acceleration structure; the same set of triangles and acceleration structure can be used across multiple Mesh instances with different scales. + Pool used to allocate acceleration structures. + + + + Loads a mesh from data stored in a byte buffer previously stored by the Serialize function. + + Data to load the mesh from. + Pool to create the mesh with. + + + + Gets the number of bytes it would take to store the given mesh in a byte buffer. + + Mesh to measure. + Number of bytes it would take to store the mesh. + + + + Writes a mesh's data to a byte buffer. + + Mesh to write into the byte buffer. + Byte buffer to store the mesh in. + + + + Casts a ray against the mesh. Executes a callback for every test candidate and every hit. + + Type of the callback to execute for every test candidate and hit. + Pose of the mesh during the ray test. + Ray to test against the mesh. + Maximum length of the ray in units of the ray direction length. + Callback to execute for every hit. + + + + Casts a bunch of rays against the mesh at the same time, executing a callback for every test candidate and every hit. + + Type of the callback to execute for every ray test candidate and every hit. + Pose of the mesh during the ray test. + Set of rays to cast against the mesh. + Callbacks to execute. + + + + Subtracts the newCenter from all points in the mesh hull. + + New center that all points will be made relative to. + + + + Computes the inertia of the mesh around its volumetric center and recenters the points of the mesh around it. + Assumes the mesh is closed and should be treated as solid. + + Mass to scale the inertia tensor with. + Inertia tensor of the closed mesh. + Center of the closed mesh. + + + + Computes the inertia of the mesh. + Assumes the mesh is closed and should be treated as solid. + + Mass to scale the inertia tensor with. + Inertia of the closed mesh. + + + + Computes the volume and center of mass of the mesh. Assumes the mesh is closed and should be treated as solid. + + Volume of the closed mesh. + Center of mass of the closed mesh. + + + + Computes the center of mass of the mesh. + Assumes the mesh is closed and should be treated as solid. + + Center of mass of the closed mesh. + + + + Computes the inertia of the mesh around its volumetric center and recenters the points of the mesh around it. + Assumes the mesh is open and should be treated as a triangle soup. + + Mass to scale the inertia tensor with. + Inertia tensor of the closed mesh. + Center of the open mesh. + + + + Computes the inertia of the mesh. + Assumes the mesh is open and should be treated as a triangle soup. + + Mass to scale the inertia tensor with. + Inertia of the open mesh. + + + + Computes the center of mass of the mesh. + Assumes the mesh is open and should be treated as a triangle soup. + + Center of mass of the open mesh. + + + + Returns the mesh's resources to a buffer pool. + + Pool to return the mesh's resources to. + + + + Type id of mesh shapes. + + + + + Defines a type capable of providing a sequence of triangles. + + + + + Gets the next triangle in the sequence, if any. + + First vertex in the triangle. + Second vertex in the triangle. + Third vertex in the triangle. + True if there was another triangle, false otherwise. + + + + Provides helpers for computing the inertia of objects with triangular surfaces. + + + + + Computes the signed volume of a tetrahedron where the fourth vertex is at the origin. + Triangles visible from outside the shape are assumed to have clockwise winding in right handed coordinates or counterclockwise winding in left handed coordinates. + + First vertex of the tetrahedron. + Second vertex of the tetrahedron. + Third vertex of the tetrahedron. + Volume of the tetrahedron. + + + + Integrates the inertia contribution of a tetrahedron with vertices at a, b, c, and (0,0,0) assuming a density of 1. + + First vertex of the tetrahedron. + Second vertex of the tetrahedron. + Third vertex of the tetrahedron. + Volume of the tetrahedron. + Inertia tensor of this tetrahedron assuming a density of 1. + + + + Computes the inertia of a closed mesh. + Triangles visible from outside the shape are assumed to have clockwise winding in right handed coordinates or counterclockwise winding in left handed coordinates. + + Type of the triangle source. + Source from which to retrieve a sequence of triangles. + Mass of the mesh to scale the inertia tensor with. + Volume of the mesh. + Inertia tensor of the mesh. + + + + Computes the inertia of a closed mesh. + Triangles visible from outside the shape are assumed to have clockwise winding in right handed coordinates or counterclockwise winding in left handed coordinates. + + Type of the triangle source. + Source from which to retrieve a sequence of triangles. + Mass of the mesh to scale the inertia tensor with. + Volume of the mesh. + Inertia tensor of the mesh. + Center of mass of the mesh. + + + + Computes the center of mass of a closed mesh. + + Type of the triangle source. + Source from which to retrieve a sequence of triangles. + Volume of the mesh. + Center of mass of the mesh. + + + + Integrates the inertia contribution from a single triangle. + + First vertex in the triangle. + Second vertex in the triangle. + Third vertex in the triangle. + Mass of the triangle. + Inertia tensor of the triangle. + + + + Computes the area of a triangle. + + First vertex in the triangle. + Second vertex in the triangle. + Third vertex in the triangle. + Area of the triangle. + + + + Integrates the inertia contribution from a single triangle assuming a density of 1. + + First vertex in the triangle. + Second vertex in the triangle. + Third vertex in the triangle. + Area of the triangle. + Inertia tensor of the triangle assuming that the density is 1. + + + + Computes the inertia of an open mesh, treating it as a triangle soup. + + Type of the triangle source. + Source from which to retrieve a sequence of triangles. + Mass of the mesh to scale the inertia tensor with. + Inertia tensor of the mesh. + + + + Computes the inertia of an open mesh, treating it as a triangle soup. + + Type of the triangle source. + Source from which to retrieve a sequence of triangles. + Mass of the mesh to scale the inertia tensor with. + Inertia tensor of the mesh. + Center of mass of the mesh. + + + + Computes the center of mass of an open mesh, treating it as a triangle soup. + + Type of the triangle source. + Source from which to retrieve a sequence of triangles. + Center of mass of the mesh. + + + + Computes an offset for an inertia tensor based on an offset frame of reference. + + Mass associated with the inertia tensor being moved. + Offset from the current inertia frame of reference to the new frame of reference. + Modification to add to the inertia tensor to move it into the new reference frame. + + + + Gets the number of shapes that the batch can currently hold without resizing. + + + + + Gets the type id of the shape type in this batch. + + + + + Gets whether this shape batch's contained type potentially contains children that require other shape batches. + + + + + Gets the size of the shape type stored in this batch in bytes. + + + + + Gets a raw untyped pointer to a shape's data. + + Index of the shape to look up. + Pointer to the indexed shape data. + Size of the shape data in bytes. + + + + Frees all shape slots without returning any resources to the pool. + + + + + Increases the size of the type batch if necessary to hold the target capacity. + + Target capacity. + + + + Changes the size of the type batch if the target capacity is different than the current capacity. Note that shrinking allocations is conservative; resizing will + never allow an existing shape to point to unallocated memory. + + Target capacity. + + + + Returns all backing resources to the pool, leaving the batch in an unusable state. + + + + + Shrinks or expands the allocation of the batch's id pool. Note that shrinking allocations is conservative; resizing will never allow any pending ids to be lost. + + Number of slots to allocate space for in the id pool. + + + + Gets a reference to the shape associated with an index. + + Index of the shape reference to retrieve. + Reference to the shape at the given index. + + + + Computes a bounding box for a single shape. + + Pose to calculate the bounding box of. + Index of the shape. + Bounding box of the specified shape with the specified pose. + + + + Removes a shape and any existing children from the shapes collection and returns their resources to the given pool. + + Index of the shape to remove. + Pool to return all shape resources to. + + + + Removes a shape from the shapes collection and returns its resources to the given pool. Does not remove or dispose any children. + + Index of the shape to remove. + Pool to return all shape resources to. + + + + Removes a shape without removing its children or disposing any resources. + + Index of the shape to remove. + + + + Clears all shapes from existing batches. Does not release any memory. + + + + + Ensures a minimum capacity for all existing shape batches. + + Capacity to ensure for all existing shape batches. + + + + Resizes all existing batches for a target capacity. Note that this is conservative; it will never orphan an existing shape. + + Capacity to target for all existing shape batches. + + + + Releases all memory from existing batches. Leaves shapes set in an unusable state. + + + + + Radius of the sphere. + + + + + Creates a sphere shape. + + Radius of the sphere. + + + + Type id of sphere shapes. + + + + + Collision shape representing an individual triangle. Triangle collisions and ray tests are one-sided; only tests which see the triangle as wound clockwise in right handed coordinates or counterclockwise in left handed coordinates will generate contacts. + + + + + First vertex of the triangle in local space. + + + + + Second vertex of the triangle in local space. + + + + + Third vertex of the triangle in local space. + + + + + Creates a triangle shape. + + First vertex of the triangle in local space. + Second vertex of the triangle in local space. + Third vertex of the triangle in local space. + + + + Type id of triangle shapes. + + + + + Provides an estimate of the scale of a shape. + + Approximate scale of the shape for use in epsilons. + + + + Minimum dot product between the detected local normal and the face normal of a triangle necessary to create contacts. + + + + + Epsilon to apply to testing triangles for degeneracy (which will be scaled by a pair-determined epsilon scale). Degenerate triangles do not have well defined normals and should not contribute + + + + + Bit packed representation of the typed index. + + + + + Gets the type index of the object. + + + + + Gets the index of the object. + + + + + Gets whether this index actually refers to anything. The Type and Index should only be used if this is true. + + + + + Gets the index of the body associated with this continuation. + + + + + Gets whether this continuation is associated with a compound's child. + + + + + Creates a bounding box calculation continuation for a given noncompound body. + + Index of the body to set the bounding box of. + + + + Creates a bounding box calculation continuation for a given compound body. + + Index of the compound body to set the bounding box of. + + + + The number of bodies to accumulate per type before executing an AABB update. The more bodies per batch, the less virtual overhead and execution divergence. + However, this should be kept low enough such that the data that has to be gathered by the bounding box update is still usually in L1. + + + + + Manages scene acceleration structures for collision detection and queries. + + + + + Collidable references contained within the . Note that values at or beyond the .LeafCount are not defined. + + + + + Collidable references contained within the . Note that values at or beyond .LeafCount are not defined. + + + + + Pool used by the broad phase. + + + + + Tree containing wakeful bodies. + + + + + Tree containing sleeping bodies and statics. + + + + + Applies updated bounds to the given leaf index in the given tree, refitting the tree to match. + + Index of the leaf in the tree to update. + Tree containing the leaf to update. + New minimum bounds for the leaf. + New maximum bounds for the leaf. + + + + Applies updated bounds to the given active leaf index, refitting the tree to match. + + Index of the leaf to update. + New minimum bounds for the leaf. + New maximum bounds for the leaf. + + + + Applies updated bounds to the given active leaf index, refitting the tree to match. + + Index of the leaf to update. + New minimum bounds for the leaf. + New maximum bounds for the leaf. + + + + Clears out the broad phase's structures without releasing any resources. + + + + + Ensures that the broad phase structures can hold at least the given number of leaves. + + Number of leaves to allocate space for in the active tree. + Number of leaves to allocate space for in the static tree. + + + + Resizes the broad phase structures to hold the given number of leaves. Note that this is conservative; it will never orphan any existing leaves. + + Number of leaves to allocate space for in the active tree. + Number of leaves to allocate space for in the static tree. + + + + Releases memory used by the broad phase. Leaves the broad phase unusable. + + + + + Finds any intersections between a ray and leaf bounding boxes. + + Type of the callback to execute on ray-leaf bounding box intersections. + Origin of the ray to cast. + Direction of the ray to cast. + Maximum length of the ray traversal in units of the direction's length. + Callback to execute on ray-leaf bounding box intersections. + User specified id of the ray. + + + + Finds any intersections between a swept bounding box and leaf bounding boxes. + + Type of the callback to execute on sweep-leaf bounding box intersections. + Minimum bounds of the box to sweep. + Maximum bounds of the box to sweep. + Direction along which to sweep the bounding box. + Maximum length of the sweep in units of the direction's length. + Callback to execute on sweep-leaf bounding box intersections. + + + + Finds any intersections between a swept bounding box and leaf bounding boxes. + + Type of the callback to execute on sweep-leaf bounding box intersections. + Bounding box to sweep. + Direction along which to sweep the bounding box. + Maximum length of the sweep in units of the direction's length. + Callback to execute on sweep-leaf bounding box intersections. + + + + Finds any overlaps between a bounding box and leaf bounding boxes. + + Type of the enumerator to call for overlaps. + Minimum bounds of the query box. + Maximum bounds of the query box. + Enumerator to call for overlaps. + + + + Finds any overlaps between a bounding box and leaf bounding boxes. + + Type of the enumerator to call for overlaps. + Query box bounds. + Enumerator to call for overlaps. + + + + Defines a type that can act as a callback for broad phase sweep tests. + + + + + Timestep duration used by pairs which rely on velocity to compute local bounding boxes for pruning. + + + + + Forces any remaining partial batches to execute and disposes the batcher. + + + + + Reports the result of a convex collision test to the callbacks and, if necessary, to any continuations for postprocessing. + + Unless you're building custom compound collision pairs or adding new contact processing continuations, you can safely ignore this. + Contacts detected for the pair. + Continuation describing the pair and what to do with it. + + + + Submits a subpair whose testing was blocked by user callback as complete to any relevant continuations. + + Unless you're building custom compound collision pairs or adding new contact processing continuations, you can safely ignore this. + Continuation describing the pair and what to do with it. + + + + Defines a type which includes information necessary to apply some form of post processing to a collision test result. + + + + + Creates a collision test continuation with the given number of slots for subpairs. + + Number of subpair slots to include in the continuation. + Pool to take resources from. + + + + Handles what to do next when the child pair has finished execution and the resulting manifold is available. + + Type of the callbacks used in the batcher. + Continuation instance being considered. + Contact manifold for the child pair. + Collision batcher processing the pair. + + + + Handles what to do next when the child pair was rejected for testing, and no manifold exists. + + Type of the callbacks used in the batcher. + Continuation instance being considered. + Collision batcher processing the pair. + + + + Checks if the parent pair is complete and should be flushed. + + Type of the callbacks used in the batcher. + Id of the pair to attempt to flush. + Collision batcher processing the pair. + True if the pair was done and got flushed, false otherwise. + + + + Describes the flow control to apply to a convex-convex pair report. + + + + + Marks a pair as requiring no further processing before being reported to the user supplied continuations. + + + + + Marks a pair as part of a set of a higher (potentially multi-manifold) pair, potentially requiring contact reduction. + + + + + Marks a pair as a part of a set of mesh-convex collisions, potentially requiring mesh boundary smoothing. + + + + + Marks a pair as a part of a set of mesh-convex collisions spawned by a mesh-compound pair, potentially requiring mesh boundary smoothing. + + + + + Provides control over subtask generated results before they are reported to the parent task. + + Id of the parent pair that spawned this child pair. + Index of the child belonging to collidable A in the subpair under consideration. + Index of the child belonging to collidable B in the subpair under consideration. + Manifold of the child pair to configure. + + + + Checks whether further collision testing should be performed for a given subtask. + + Id of the parent pair. + Index of the child belonging to collidable A in the subpair under consideration. + Index of the child belonging to collidable B in the subpair under consideration. + True if testing should proceed, false otherwise. + + + + Gets the number of tasks to batch together before executing this task. + + + + + Gets the first shape type index associated with the task. Shape pairs provided to the task for execution should be in the order defined by these type two indices. + If a collision task isn't a top level shape pair task, this should be -1. + + + + + Gets the second shape type index associated with the task. Shape pairs provided to the task for execution should be in the order defined by these type two indices. + If a collision task isn't a top level shape pair task, this should be -1. + + + + + Gets whether the task is capable of generating subtasks. Note that subtask generators cannot generate subtasks that are themselves subtask generators. + + + + + Gets the pair type that the ExecuteBatch call requires. + + + + + Executes the task on the given input. + + Type of the callbacks used to handle results of collision tasks. + Batcher responsible for the invocation. + Batch of pairs to test. + Continuations to invoke upon completion of a top level pair. + Filters to use to influence execution of the collision tasks. + + + + General pair for two shapes with full pose and flip mask, but no bounds related data. + + + + + Pair specialized for convex pairs between two shapes of the same type. + + + + + Pair specialized for two spheres, requiring no flip mask or orientations. + + + + + Pair specialized for convex pairs that involve one sphere which requires no orientation. + + + + + Pair that requires computing local bounding boxes, and so requires extra information like velocity. + + + + + Gets the nubmer of pairs which would ideally be gathered together before executing a wide test. + + + + + Defines a type that holds scalar data for the collision batcher. + + + + + Gets the enumeration type associated with this pair type. + + + + + Stores whether the types involved in pair require that the resulting contact manifold be flipped to be consistent with the user-requested pair order. + + + + + Stores whether the types involved in pair require that the resulting contact manifold be flipped to be consistent with the user-requested pair order. + + + + + Pair of objects awaiting collision processing that involves velocities for bounds calculation. + + Type of the first shape in the pair. + Type of the second shape in the pair. + + + + Gets the cache's type id. + Note that this is not the same as a constraint type id or other type ids; it only refers to the type of the caches for storage within the PairCache's structures. + + + + + Accumulates constraints to remove from multiple threads, and efficiently removes them all as a batch. + + + + + Processes enqueued constraint removals and prepares removal jobs. + + True if the constraint remover should maintain determinism at an added cost, false otherwise. + The number of removal jobs created. To complete the jobs, execute RemoveConstraintsFromTypeBatch for every index from 0 to the returned job count. + + + + Returns the handles associated with all removed constraints to the solver's handle pool. + + + + + For uses of the ConstraintRemover that fully remove a constraint from the simulation (rather than simply moving it somewhere else), + the handle->constraint mapping must be updated. This has to wait until after the multithreaded operations actually complete to avoid corrupting parallel operations. + + + + + Provides indirection for reading from and updating constraints in the narrow phase. + + This, like many other similar constructions in the engine, could conceptually be replaced by static function pointers and a few supplementary data fields. + We probably will do exactly that at some point. + + + + Extracts references to data from a contact constraint of the accessor's type. + + Type of the extractor to handle the extracted references. + Handle of the contact constraint to extract. + Solver in which the constraint lives. + Extractor to handle the extracted references. + + + + Extracts references to data from a contact constraint of the accessor's type. + + Type of the extractor to handle the extracted references. + Location of the constraint in the solver. + Solver in which the constraint lives. + Extractor to handle the extracted references. + + + + Extracts references to data from a contact constraint of the accessor's type. + + Type of the extractor to handle the extracted references. + Handle of the contact constraint to extract. + Solver in which the constraint lives. + Extractor to handle the extracted references. + + + + Extracts references to data from a contact constraint of the accessor's type. + + Type of the extractor to handle the extracted references. + Location of the constraint in the solver. + Solver in which the constraint lives. + Extractor to handle the extracted references. + + + + Information about a single contact in a nonconvex collidable pair. + Nonconvex pairs can have different surface bases at each contact point, since the contact surface is not guaranteed to be a plane. + + + + + Offset from the position of collidable A to the contact position. + + + + + Penetration depth between the two collidables at this contact. Negative values represent separation. + + + + + Surface basis of the contact. If transformed into a rotation matrix, X and Z represent tangent directions and Y represents the contact normal. Points from collidable B to collidable A. + + + + + Id of the features involved in the collision that generated this contact. If a contact has the same feature id as in a previous frame, it is an indication that the + same parts of the shape contributed to its creation. This is useful for carrying information from frame to frame. + + + + + Information about a single contact in a convex collidable pair. Convex collidable pairs share one surface basis across the manifold, since the contact surface is guaranteed to be a plane. + + + + + Offset from the position of collidable A to the contact position. + + + + + Penetration depth between the two collidables at this contact. Negative values represent separation. + + + + + Id of the features involved in the collision that generated this contact. If a contact has the same feature id as in a previous frame, it is an indication that the + same parts of the shape contributed to its creation. This is useful for carrying information from frame to frame. + + + + + Gets the number of contacts in the manifold. + + + + + Gets whether the contact manifold was created by a pair of convex objects or not. True if convex, false if nonconvex. + + + + + Retrieves the feature id associated with a requested contact. + + Index of the contact to grab the feature id of. + Feature id of the requested contact. + + + + Retrieves a copy of a contact's data. + + Index of the contact to copy data from. + Offset from the first collidable's position to the contact position. + Normal of the contact surface at the requested contact. Points from collidable B to collidable A. + Penetration depth at the requested contact. + Feature id of the requested contact. + Feature ids represent which parts of the collidables formed the contact and can be used to track unique contacts across frames. + + + + Pulls a reference to a contact's depth. + + Manifold to pull a reference from. + Contact to pull data from. + Reference to a contact's depth. + + + + Pulls a reference to a contact's normal. Points from collidable B to collidable A. For convex manifolds that share a normal, all contact indices will simply return a reference to the manifold-wide normal. + + Manifold to pull a reference from. + Contact to pull data from. + Reference to a contact's normal (or the manifold-wide normal in a convex manifold). + + + + Pulls a reference to a contact's offset. + + Manifold to pull a reference from. + Contact to pull data from. + Reference to a contact's offset. + + + + Pulls a reference to a contact's feature id. + + Manifold to pull a reference from. + Contact to pull data from. + Reference to a contact's feature id. + + + + Contains the data associated with a nonconvex contact manifold. + + + + + Offset from collidable A to collidable B. + + + + + The maximum number of contacts that can exist within a nonconvex manifold. + + + + + Retrieves a copy of a contact's data. + + Index of the contact to copy data from. + Offset from the first collidable's position to the contact position. + Normal of the contact surface at the requested contact. Points from collidable B to collidable A. + Penetration depth at the requested contact. + Feature id of the requested contact. + Feature ids represent which parts of the collidables formed the contact and can be used to track unique contacts across frames. + + + + Retrieves the feature id associated with a requested contact. + + Index of the contact to grab the feature id of. + Feature id of the requested contact. + + + + Pulls a reference to a contact's depth. + + Manifold to pull a reference from. + Contact to pull data from. + Reference to a contact's depth. + + + + Pulls a reference to a contact's normal. Points from collidable B to collidable A. + + Manifold to pull a reference from. + Contact to pull data from. + Reference to a contact's normal. + + + + Pulls a reference to a contact's offset. + + Manifold to pull a reference from. + Contact to pull data from. + Reference to a contact's offset. + + + + Pulls a reference to a contact's feature id. + + Manifold to pull a reference from. + Contact to pull data from. + Reference to a contact's feature id. + + + + Contains the data associated with a convex contact manifold. + + + + + Offset from collidable A to collidable B. + + + + + Surface normal shared by all contacts. Points from collidable B to collidable A. + + + + + Retrieves the feature id associated with a requested contact. + + Index of the contact to grab the feature id of. + Feature id of the requested contact. + + + + Retrieves a copy of a contact's data. + + Index of the contact to copy data from. + Offset from the first collidable's position to the contact position. + Normal of the contact surface at the requested contact. Points from collidable B to collidable A. + Penetration depth at the requested contact. + Feature id of the requested contact. + Feature ids represent which parts of the collidables formed the contact and can be used to track unique contacts across frames. + + + + Pulls a reference to a contact's depth. + + Manifold to pull a reference from. + Contact to pull data from. + Reference to a contact's depth. + + + + Pulls a reference to a contact manifold's normal. Points from collidable B to collidable A. Convex manifolds share a single normal across all contacts. + + Manifold to pull a reference from. + Contact to pull data from. + Reference to the contact manifold's normal. + + + + Pulls a reference to a contact's offset. + + Manifold to pull a reference from. + Contact to pull data from. + Reference to a contact's offset. + + + + Pulls a reference to a contact's feature id. + + Manifold to pull a reference from. + Contact to pull data from. + Reference to a contact's feature id. + + + + Gets the index of the continuation. + + + + + Gets the type index of the continuation. + + + + + Gets whether this index actually refers to anything. The Type and Index should only be used if this is true. + + + + + Coefficient of friction to apply for the constraint. Maximum friction force will be equal to the normal force times the friction coefficient. + + + + + Maximum relative velocity along the contact normal at which the collision constraint will recover from penetration. Clamps the velocity goal created from the spring settings. + + + + + Defines the constraint's penetration recovery spring properties. + + + + + Performs any required initialization logic after the Simulation instance has been constructed. + + Simulation that owns these callbacks. + + + + Chooses whether to allow contact generation to proceed for two overlapping collidables. + + Index of the worker that identified the overlap. + Reference to the first collidable in the pair. + Reference to the second collidable in the pair. + True if collision detection should proceed, false otherwise. + + + + Provides a notification that a manifold has been created for a pair. Offers an opportunity to change the manifold's details. + + Index of the worker thread that created this manifold. + Pair of collidables that the manifold was detected between. + Set of contacts detected between the collidables. + Material properties of the manifold. + True if a constraint should be created for the manifold, false otherwise. + + + + Chooses whether to allow contact generation to proceed for the children of two overlapping collidables in a compound-including pair. + + Parent pair of the two child collidables. + Index of the child of collidable A in the pair. If collidable A is not compound, then this is always 0. + Index of the child of collidable B in the pair. If collidable B is not compound, then this is always 0. + True if collision detection should proceed, false otherwise. + This is called for each sub-overlap in a collidable pair involving compound collidables. If neither collidable in a pair is compound, this will not be called. + For compound-including pairs, if the earlier call to AllowContactGeneration returns false for owning pair, this will not be called. Note that it is possible + for this function to be called twice for the same subpair if the pair has continuous collision detection enabled; + the CCD sweep test that runs before the contact generation test also asks before performing child pair tests. + + + + Provides a notification that a manifold has been created between the children of two collidables in a compound-including pair. + Offers an opportunity to change the manifold's details. + + Index of the worker thread that created this manifold. + Pair of collidables that the manifold was detected between. + Index of the child of collidable A in the pair. If collidable A is not compound, then this is always 0. + Index of the child of collidable B in the pair. If collidable B is not compound, then this is always 0. + Set of contacts detected between the collidables. + True if this manifold should be considered for constraint generation, false otherwise. + + + + Releases any resources held by the callbacks. Called by the owning narrow phase when it is being disposed. + + + + + Gets whether the support finder is sampling a shape with a spherical margin that should be applied after a solution is found for the core shape. + + + + + Margin associated with the shape according to this support finder. + + Shape to find the margin of. + Margin of the shape. + + + + Flag used to mark a contact as being generated by the face of a triangle in its feature id. + + + + + Minimum dot product between a triangle face and the contact normal for a collision to be considered a triangle face contact. + + + + + True if the manifold associated with this triangle has been blocked due to its detected infringement on another triangle, false otherwise. + + + + + True if the triangle did not act as a blocker for any other manifold and so can be removed if it is blocked, false otherwise. + + + + + Normal of a triangle detected as being infringed by the manifold associated with this triangle in mesh space. + + + + + Looks up the contact constraint accessor for the given constraint type id if it exists. + + Constraint type id to look up a constraint accessor for. + Accessor for the given type id. + True if the constraint type id refers to a registered accessor, false otherwise. + + + + Tries to extract contact prestep, impulse, and body reference data from the given handle. If it's not a contact constraint, returns false. + + Type of the extractor used to collect contact data from the solver. + Constraint to try to extract data from. + Extractor used to collect contact data from the solver. + True if the constraint was a contact type, false otherwise. + + + + Tries to extract prestep and impulse contact data from the given handle. If it's not a contact constraint, returns false. + + Type of the extractor used to collect contact data from the solver. + Constraint to try to extract data from. + Extractor used to collect contact data from the solver. + True if the constraint was a contact type, false otherwise. + + + + Gets whether a constraint type id maps to a contact constraint. + + Id of the constraint to check. + True if the type id refers to a contact constraint. False otherwise. + + + + Turns broad phase overlaps into contact manifolds and uses them to manage constraints in the solver. + + Type of the callbacks to use. + + When notified of a new constraint, immediately adds it to the solver. + + + + + Pair which will directly produce constraints. + + + + + Pair which samples a swept location for contacts and needs to be rewound to compute proper speculative depths in a post process. + + + + + Flushes pending constraints into the simulation without any form of synchronization. Adds occur in the order of manifold generation. + If the contact manifold generation is deterministic, then the result of this add will be deterministic. + + + + + Flushes pending constraints into the simulation without any form of synchronization. Adds occur in the order of manifold generation. + If the contact manifold generation is deterministic, then the result of this add will be deterministic. + + + + + Associated with a pair of two collidables that each are controlled by bodies. + + + + + Special type for collision pairs that do not need to store any supplementary information. + + + + + Phase one job in the awakener. JobIndex used to identify sub-job. + + + + + Sorts the constraints of a single type across all workers. Used by deterministic preflushes to schedule adds. + Accesses no buffer pools; memory is allocated and returned on main thread. + + + + + Identifies a first guess at the constraint batch to which every new constraint should be added to. + Accesses no buffer pools; memory is allocated and returned on main thread. + + + + + Adds constraints to the solver and constraint graph in an order determined by the previous sorts and with the help of the speculatively computed batch targets. Locally sequential. + Accesses main thread buffer pool when type batches are created or resized. + + + + + Adds constraints to the solver and constraint graph in an order determined by the collision detection phase. If the collision detection phase is nondeterministic due to threading, then + this will result in nondeterministic adds to the solver. + Accesses main thread buffer pool when type batches are created or resized. + + + + + Phase two job in the awakener. JobIndex used to identify sub-job. + + + + + Check the freshness bytes in a region to remove stale pairs. + + + + + Start region of a CheckFreshness or SpeculativeConstraintBatchSearch job. + + + + + End region of a CheckFreshness or SpeculativeConstraintBatchSearch job. + + + + + Narrow phase constraint type index targeted by a SpeculativeConstraintBatchSearch or SortContactConstraintType. + + + + + Index of the worker in which a range of constraints starts. + Used by SpeculativeConstraintBatchSearch. + + + + + Number of worker threads containing constraints to read in the SortContactConstraintType and NondeterministicConstraintAdd tasks. + + + + + Index of the job. Used by AwakenerPhaseOne and AwakenerPhaseTwo tasks. + + + + + Offset from the origin of the first shape's parent to the child's location in world space. If there is no parent, this is the zero vector. + + + + + Offset from the origin of the second shape's parent to the child's location in world space. If there is no parent, this is the zero vector. + + + + + A narrowphase-specific type and index into the pair cache's constraint data set. Collision pairs which have no associated constraint, either + because no contacts were generated or because the constraint was filtered, will have a nonexistent ConstraintCache. + + + + + A narrowphase-specific type and index into a batch of custom data for the pair. Many types do not use any supplementary data, but some make use of temporal coherence + to accelerate contact generation. + + + + + Per-pair 'freshness' flags set when a pair is added or updated by the narrow phase execution. Only initialized for the duration of the narrowphase's execution. + + + This stores one byte per pair. While it could be compressed to 1 bit, that requires manually ensuring thread safety. By using bytes, we rely on the + atomic setting behavior for data types no larger than the native pointer size. Further, smaller sizes actually pay a higher price in terms of increased false sharing. + Choice of data type is a balancing act between the memory bandwidth of the post analysis and the frequency of false sharing. + + + + + Flush all deferred changes from the last narrow phase execution. + + + + + Completes the addition of a constraint by filling in the narrowphase's pointer to the constraint and by distributing accumulated impulses. + + Count-specialized type containing cached accumulated impulses. + Narrow phase that triggered the constraint add. + Solver containing the constraint to set the impulses of. + Warm starting impulses to apply to the contact constraint. + Index of the constraint cache to update. + Constraint handle associated with the constraint cache being updated. + Collidable pair associated with the new constraint. + + + + Mapping from constraint handle back to collision detection pair cache locations. + + + + + Packed indirection to data associated with a pair cache entry. + + + + + Gets whether this index actually refers to anything. The Type and Index should only be used if this is true. + + + + + Gets whether this index refers to an active cache entry. If false, the entry exists in an inactive set. + + + + + Gets the index of the cache that owns the entry. + + + + + Gets the type index of the object. + + + + + Gets the index of the object within the type specific list. + + + + + Helps test the broad phase's active and static trees with a custom leaf tester. + + Type used to test rays against leaves. + + + + Constructs a ray batcher for the broad phase and initializes its backing resources. + + Pool to pull resources from. + Ray tester used to test leaves found by the broad phase tree traversals. + Maximum number of rays to execute in each traversal. + This should typically be chosen as the highest value which avoids spilling data out of L2 cache. + + + + Adds a ray to the batcher to test against the broad phase trees. + If the underlying ray batcher hits its maximum capacity, all the accumulated rays will be tested against the broad phase trees and the accumulator will be reset. + + Origin of the ray to test against the tree. + Direction of the ray to test against the tree. + Maximum distance that the ray will travel in units of the ray's length. + Identifier value for the ray. Leaf tests will have access to the id. + + + + Tests any accumulated rays against the broad phase trees and then resets the batcher. + + + + + Disposes the underlying batcher resources. + + + + + Tests batches of rays against the simulation. + + Type used to handle hits against objects in the simulation. + + + + Adds a ray to the batcher to test against the simulation. + If the underlying ray batcher hits its maximum capacity, all the accumulated rays will be tested against the simulation and the accumulator will be reset. + + Origin of the ray to test against the simulation. + Direction of the ray to test against the simulation. + Maximum distance that the ray will travel in units of the ray's length. + Identifier value for the ray. Callbacks will have access to the id. + + + + Tests any accumulated rays against the broad phase trees and then resets the batcher. + + + + + + Gets the first shape type index associated with the task. + + + + + Gets the second shape type index associated with the task. + + + + + Allocates an element in the list, initializing the backing buffer if needed. + + Number of bytes per element. + Minimum size of the backing buffer to create if this is a new allocation. + Pool to pull allocations from. + Index of the element in bytes within the list's buffer. + + + + Helper class for creating runtime specialized vectorized ray intersection tests with shapes that support broadcasting. + + + + + The cached pair data created by a single worker during the last execution of narrow phase pair processing. + + + + + The set of pair-pointer associations created by this worker that should be added to the pair mapping. + + + + + The set of pairs to remove from the pair cache generated by the worker. + + + + + Contains a set of type batches whose constraints share no body references. + + + + + Gets a type batch in the batch matching the given type id. + Requires that there exists at least one constraint in the type batch. + + Id of the TypeBatch's type to retrieve. + TypeBatch instance associated with the given type. + + + + Gets a pointer to the type batch in the batch matching the given type id. + Requires that there exists at least one constraint in the type batch. + + Id of the TypeBatch's type to retrieve. + TypeBatch instance associated with the given type. + + + + Ensures that all type batches within this constraint batch meet or exceed the size requirements of the per-type capacities defined by the solver. + + Solver to pull minimum capacities from. + + + + Applies the solver-defined minimum capacities to existing type batches. + + Solver to pull minimum capacities from. + + + + Releases all memory used by the batch. + + + + + Enumerates the bodies attached to an active constraint and removes the constraint's handle from all of the connected body constraint reference lists. + + + + + Index of the target constraint bundle to optimize. + + + + + Index of the last optimized type batch. + + + + + Index of the last optimized batch. + + + + + If true, regions are offset by a half region width. Toggled each frame. Offsets allow the sorted regions to intermix, eventually converging to a full sort. + + + + + Gets the total number of bundles across all types and batches. + + + + + Gets the total number of bundles across all types and batches. + + + + + Gets whether this constraint set is allocated. + + + + + Constrains two bodies to rotate around a local axis attached to body A at a target velocity. + + + + + Axis of rotation in body A's local space. + + + + + Target relative angular velocity around the axis. + + + + + Motor control parameters. + + + + + Angular component of a hinge. Constrains the angular degrees of freedom of two bodies such that they can only rotate relative to each other around the hinge's axis. + + + + + Hinge axis in the local space of A. + + + + + Hinge axis in the local space of B. + + + + + Spring frequency and damping parameters. + + + + + Constrains the relative angular velocity between two bodies to a target. + + + + + Target relative angular velocity between A and B, stored in A's local space. Target world space angular velocity of B is AngularVelocityA + TargetVelocityLocalA * OrientationA. + + + + + Motor control parameters. + + + + + Constrains two bodies to have a target relative rotation. + + + + + The target relative rotation from body A to body B in body A's local space. The constraint tries to maintain OrientationB = TargetRelativeRotationLocalA * OrientationA. + + + + + Spring frequency and damping parameters. + + + + + Servo control parameters. + + + + + Constrains two bodies with the angular component of a swivel hinge that allows rotation around two axes, like a laptop monitor hinge that allows flipping the screen. + + + + + Swivel axis in the local space of body A. + + + + + Hinge axis in the local space of body B. + + + + + Spring frequency and damping parameters. + + + + + Constrains the area of a triangle connecting the centers of three bodies to match a goal area. + Scaled volume computed from ||ab x ac||. + + + + + 2 times the target area of the triangle. Computed from ||ab x ac||. + + + + + Spring frequency and damping parameters. + + + + + Creates a new area constraint, initializing the target area using a set of initial positions. + + Initial position of the first body. + Initial position of the second body. + Initial position of the third body. + Spring settings to apply to the volume constraint. + + + + Handles the solve iterations of a bunch of ball socket constraints. + + + + + Constrains a point on one body to a point on another body. + + + + + Local offset from the center of body A to its attachment point. + + + + + Local offset from the center of body B to its attachment point. + + + + + Spring frequency and damping parameters. + + + + + Handles the solve iterations of a bunch of ball socket constraints. + + + + + Constrains the relative linear velocity between two bodies to a target. + Conceptually, controls the relative velocity by a virtual lever arm attached to the center of A and leading to the anchor of B. + + + + + Offset from body B to its anchor. + + + + + Target relative linear velocity between A and B, stored in A's local space. Target world space linear velocity of B is LinearVelocityA + TargetVelocityLocalA * OrientationA. + + + + + Motor control parameters. + + + + + Handles the solve iterations of a bunch of ball socket motor constraints. + + + + + Constrains a point on one body to a point on another body. + Provides speed and force configuration that the BallSocket joint does not. + + + + + Local offset from the center of body A to its attachment point. + + + + + Local offset from the center of body B to its attachment point. + + + + + Spring frequency and damping parameters. + + + + + Servo control parameters. + + + + + Handles the solve iterations of a bunch of ball socket servo constraints. + + + + + Provides shared functionality for constraints with jacobians similar to the BallSocket. + + + + + Constrains the center of two bodies to be separated by a goal distance. + + + + + Target distance between the body centers. + + + + + Spring frequency and damping parameters. + + + + + Handles the solve iterations of a bunch of distance servos. + + + + + Checks if a value is a finite number- neither infinite nor NaN. + + Value to check. + True if the value is neither infinite nor NaN, false otherwise. + + + + Checks if a value is a finite value greater than zero and not NaN. + + Value to check. + True if the value is a finite number greater than zero and not NaN, false otherwise. + + + + Checks if a value is a finite value greater than or equal to zero and not NaN. + + Value to check. + True if the value is a finite number greater than or equal to zero and not NaN, false otherwise. + + + + Checks if a value is a finite value less than zero and not NaN. + + Value to check. + True if the value is a finite number less than zero and not NaN, false otherwise. + + + + Checks if a value is a finite value less than or equal to zero and not NaN. + + Value to check. + True if the value is a finite number less than or equal to zero and not NaN, false otherwise. + + + + Handles the solve iterations of a bunch of 1-contact one body manifold constraints. + + + + + Handles the solve iterations of a bunch of 2-contact one body manifold constraints. + + + + + Handles the solve iterations of a bunch of 3-contact one body manifold constraints. + + + + + Handles the solve iterations of a bunch of 4-contact one body manifold constraints. + + + + + Handles the solve iterations of a bunch of 1-contact two body manifold constraints. + + + + + Handles the solve iterations of a bunch of 2-contact two body manifold constraints. + + + + + Handles the solve iterations of a bunch of 3-contact two body manifold constraints. + + + + + Handles the solve iterations of a bunch of 4-contact two body manifold constraints. + + + + + Handles the solve iterations of a bunch of 2-contact nonconvex two body manifold constraints. + + + + + Handles the solve iterations of a bunch of 2-contact nonconvex one body manifold constraints. + + + + + Handles the solve iterations of a bunch of 3-contact nonconvex two body manifold constraints. + + + + + Handles the solve iterations of a bunch of 3-contact nonconvex one body manifold constraints. + + + + + Handles the solve iterations of a bunch of 4-contact nonconvex two body manifold constraints. + + + + + Handles the solve iterations of a bunch of 4-contact nonconvex one body manifold constraints. + + + + + Callbacks for direct references to the solver's contact constraint data. + + + + + Provides a reference to a convex one body contact constraint. Constraint data is in the first lane of the direct reference (slot 0 of vectors). + + Type of the prestep data returned. + Type of the accumulated impulses data returned. + Body handle referenced by the constraint. + Prestep data associated with the constraint. + Accumulated impulses associated with the constraint. + + + + Provides a reference to a convex two body contact constraint. Constraint data is in the first lane of the direct reference (slot 0 of vectors). + + Type of the prestep data returned. + Type of the accumulated impulses data returned. + First body handle referenced by the constraint. + Second body handle referenced by the constraint. + Prestep data associated with the constraint. + Accumulated impulses associated with the constraint. + + + + Provides a reference to a nonconvex one body contact constraint. Constraint data is in the first lane of the direct reference (slot 0 of vectors). + + Type of the prestep data returned. + Type of the accumulated impulses data returned. + Body handle referenced by the constraint. + Prestep data associated with the constraint. + Accumulated impulses associated with the constraint. + + + + Provides a reference to a nonconvex two body contact constraint. Constraint data is in the first lane of the direct reference (slot 0 of vectors). + + Type of the prestep data returned. + Type of the accumulated impulses data returned. + First body handle referenced by the constraint. + Second body handle referenced by the constraint. + Prestep data associated with the constraint. + Accumulated impulses associated with the constraint. + + + + Callbacks for direct references to the solver's contact constraint data. Includes only prestep and impulse data. + + + + + Provides a reference to a convex one body contact constraint. Constraint data is in the first lane of the direct reference (slot 0 of vectors). + + Type of the prestep data returned. + Type of the accumulated impulses data returned. + Prestep data associated with the constraint. + Accumulated impulses associated with the constraint. + + + + Provides a reference to a convex two body contact constraint. Constraint data is in the first lane of the direct reference (slot 0 of vectors). + + Type of the prestep data returned. + Type of the accumulated impulses data returned. + Prestep data associated with the constraint. + Accumulated impulses associated with the constraint. + + + + Provides a reference to a nonconvex one body contact constraint. Constraint data is in the first lane of the direct reference (slot 0 of vectors). + + Type of the prestep data returned. + Type of the accumulated impulses data returned. + Prestep data associated with the constraint. + Accumulated impulses associated with the constraint. + + + + Provides a reference to a nonconvex two body contact constraint. Constraint data is in the first lane of the direct reference (slot 0 of vectors). + + Type of the prestep data returned. + Type of the accumulated impulses data returned. + Prestep data associated with the constraint. + Accumulated impulses associated with the constraint. + + + + Transforms an impulse from constraint space to world space, uses it to modify the cached world space velocities of the bodies. + + + + + Transforms an impulse from constraint space to world space, uses it to modify the cached world space velocities of the bodies. + + + + + Handles the tangent friction implementation. + + + + + Transforms an impulse from constraint space to world space, uses it to modify the cached world space velocities of the bodies. + + + + + Handles the tangent friction implementation for one body contact constraints. + + + + + Transforms an impulse from constraint space to world space, uses it to modify the cached world space velocities of the bodies. + + + + + Handles the tangent friction implementation. + + + + + Transforms an impulse from constraint space to world space, uses it to modify the cached world space velocities of the bodies. + + + + + Handles the tangent friction implementation. + + + + + Transforms an impulse from constraint space to world space, uses it to modify the cached world space velocities of the bodies. + + + + + Constrains points on two bodies to be separated by a distance within a range. + + + + + Local offset from the center of body A to its attachment point. + + + + + Local offset from the center of body B to its attachment point. + + + + + Minimum distance permitted between the point on A and the point on B. + + + + + Maximum distance permitted between the point on A and the point on B. + + + + + Spring frequency and damping parameters. + + + + + Creates a distance limit description. + + Local offset from the center of body A to its attachment point. + Local offset from the center of body B to its attachment point. + Minimum distance permitted between the point on A and the point on B. + Maximum distance permitted between the point on A and the point on B. + Spring frequency and damping parameters. + + + + Handles the solve iterations of a bunch of distance servos. + + + + + Constrains points on two bodies to be separated by a goal distance. + + + + + Local offset from the center of body A to its attachment point. + + + + + Local offset from the center of body B to its attachment point. + + + + + Distance that the constraint will try to reach between the attachment points. + + + + + Servo control parameters. + + + + + Spring frequency and damping parameters. + + + + + Creates a distance servo description. + + Local offset from the center of body A to its attachment point. + Local offset from the center of body B to its attachment point. + Distance that the constraint will try to reach between the attachment points. + Spring frequency and damping parameters. + Servo control parameters. + + + + Handles the solve iterations of a bunch of distance servos. + + + + + A constraint's body references. Stored separately from the iteration data since it is accessed by both the prestep and solve. + + + + + Prestep, warm start and solve iteration functions for a four body constraint type. + + Type of the prestep data used by the constraint. + Type of the accumulated impulses used by the constraint. + Type of the projection to input. + + + + Shared implementation across all four body constraints. + + + + + Constrains two bodies with a hinge. Equivalent to a BallSocket constraint and an AngularHinge constraint solved together. + + + + + Local offset from the center of body A to its attachment point. + + + + + Hinge axis in the local space of A. + + + + + Local offset from the center of body B to its attachment point. + + + + + Hinge axis in the local space of B. + + + + + Spring frequency and damping parameters. + + + + + Marks a type as a description of a constraint associated with a particular batch. + + + Note that one batch may have multiple description types associated with it, each one potentially offering a different subset of properties or translation logic. + + Type of the description object. + + + + Changes the batch-held memory at a given location to match the given description. + + Batch to modify. + Index of the target constraint's bundle. + Index of the target constraint within its bundle. + + + + Creates a description from the batch-held memory at a given location. + + Batch to read. + Index of the source constraint's bundle. + Index of the source constraint within its bundle. + Description of the constraint. + + + + Gets the type id of the constraint that this is a description of. + + + + + Gets the type of the type batch which contains described constraints. + + + + + Marks a type as a one body constraint description. + + Type of the description. + This and the other body-count aware interfaces exist to give the compiler a way to report errors when using Solver.Add with different body counts. + + + + Marks a type as a two body constraint description. + + Type of the description. + This and the other body-count aware interfaces exist to give the compiler a way to report errors when using Solver.Add with different body counts. + + + + Marks a type as a three body constraint description. + + Type of the description. + This and the other body-count aware interfaces exist to give the compiler a way to report errors when using Solver.Add with different body counts. + + + + Marks a type as a four body constraint description. + + Type of the description. + This and the other body-count aware interfaces exist to give the compiler a way to report errors when using Solver.Add with different body counts. + + + + Transforms an impulse from constraint space to world space, uses it to modify the cached world space velocities of the bodies. + + + + + Constrains points on two bodies to a range of offsets from each other along a direction anchored to body A. + + + + + Local offset from the center of body A to its attachment point. + + + + + Local offset from the center of body B to its attachment point. + + + + + Direction of the motorized axis in the local space of body A. + + + + + Minimum offset along the world axis between A and B's anchor points. + + + + + Maximum offset along the world axis between A and B's anchor points. + + + + + Spring frequency and damping parameters. + + + + + Constrains points on two bodies to move relative to each other along a direction. + + + + + Local offset from the center of body A to its attachment point. + + + + + Local offset from the center of body B to its attachment point. + + + + + Direction of the motorized axis in the local space of body A. + + + + + Target relative velocity along the world axis between A and B's anchor points. + + + + + Motor control parameters. + + + + + Constrains points on two bodies to be on a plane defined in the local space of one of the bodies. + + + + + Local offset from the center of body A to its attachment point. + + + + + Local offset from the center of body B to its attachment point. + + + + + Direction of the plane normal in the local space of body A. + + + + + Target offset from A's plane anchor to B's anchor along the plane normal. + + + + + Servo control parameters. + + + + + Spring frequency and damping parameters. + + + + + Defines some of the shared behavior across motor constraints. + + + + + Maximum amount of force the motor can apply in one unit of time. + + + + + Mass-scaled damping constant. If you want to simulate a viscous damping coefficient of D with an object of mass M, set this damping value to D / M. + + + + + Gets or sets how soft the constraint is. Values range from 0 to infinity. Softness is inverse damping; 0 is perfectly rigid, 1 is very soft, float.MaxValue is effectively nonexistent. + + + + + Checks if a settings instance has valid nonnegative values. + + Instance to examine. + True if the settings are valid, false otherwise. + + + + Defines settings for a motor constraint. + + Maximum amount of force the motor can apply in one unit of time. + Gets or sets how soft the constraint is. Values range from 0 to infinity. Softness is inverse damping; 0 is perfectly rigid, 1 is very soft, float.MaxValue is effectively nonexistent. + + + + Constrains the angular velocity of one body to the target. + + + + + Target angular velocity. + + + + + Motor control parameters. + + + + + Constrains a single body to a target orientation. + + + + + Target orientation of the constraint. + + + + + Spring frequency and damping parameters. + + + + + Servo control parameters. + + + + + Constrains a point on a body to have a target linear velocity. + + + + + Offset to the attachment point in the local space of the body. + + + + + Target velocity of the attachment point. + + + + + Motor control parameters. + + + + + Constrains a point on a body to a target location. + + + + + Offset to the attachment point in the local space of the body. + + + + + Target position. + + + + + Spring frequency and damping parameters. + + + + + Servo control parameters. + + + + + Prestep, warm start and solve iteration functions for a constraint type. + + Type of the prestep data used by the constraint. + Type of the accumulated impulses used by the constraint. + Type of the projection to input. + + + + Prestep, warm start, solve iteration, and incremental contact update functions for a one body contact constraint type. + + Type of the prestep data used by the constraint. + Type of the accumulated impulses used by the constraint. + Type of the projection to input. + + + + Shared implementation across all one body constraints. + + + + + Constrains a point on body B to be on a line attached to body A. + + + + + Local offset from the center of body A to its attachment point. + + + + + Local offset from the center of body B to its attachment point. + + + + + Direction of the line in the local space of body A. + + + + + Servo control parameters. + + + + + Spring frequency and damping parameters. + + + + + Gets settings representing a servo with unlimited force, speed, and no base speed. + + + + + Checks servo settings to ensure valid values. + + Settings to check. + True if the settings contain valid values, false otherwise. + + + + Computes springiness values for a set of constraints. + + Spring settings associated with the constraints. + Duration of the time step. + The multiplier applied to error to get bias velocity. + Scaling factor to apply to the effective mass to get the softened effective mass. + Scaling factor to apply to the accumulated impulse during the solve to soften the target velocity. + + + + Target number of undamped oscillations per unit of time, scaled by 2 * PI. + + + + + Twice the ratio of the spring's actual damping to its critical damping. + + + + + Gets or sets the target number of undamped oscillations per unit of time. + + + + + Gets or sets the ratio of the spring's actual damping to its critical damping. 0 is undamped, 1 is critically damped, and higher values are overdamped. + + + + + Checks if a spring settings instance contains valid values. + + Settings to check. + True if the spring settings are valid, false otherwise. + + + + Constructs a new spring settings instance. + + Target number of undamped oscillations per unit of time. + Ratio of the spring's actual damping to its critical damping. 0 is undamped, 1 is critically damped, and higher values are overdamped. + + + + Restricts axes attached to two bodies to fall within a maximum swing angle. + + + + + Axis attached to body A in its local space. + + + + + Axis attached to body B in its local space. + + + + + Minimum dot product between the world space A and B axes that the constraint attempts to maintain. + + + + + Spring frequency and damping parameters. + + + + + Gets or sets the maximum swing angle that the constraint allows between world axis A and B. Based on the MinimumDot field. + + + + + Constrains two bodies with a swivel hinge that allows rotation around two axes, like a laptop monitor hinge that allows flipping the screen. Equivalent to a BallSocket constraint and an AngularSwivelHinge constraint solved together. + + + + + Local offset from the center of body A to its attachment point. + + + + + Swivel axis in the local space of body A. + + + + + Local offset from the center of body B to its attachment point. + + + + + Hinge axis in the local space of body B. + + + + + Spring frequency and damping parameters. + + + + + A constraint's body references. Stored separately from the iteration data since it is accessed by both the prestep and solve. + + + + + Prestep, warm start and solve iteration functions for a three body constraint type. + + Type of the prestep data used by the constraint. + Type of the accumulated impulses used by the constraint. + Type of the projection to input. + + + + Shared implementation across all four body constraints. + + + + + Constrains two bodies' rotations around attached twist axes to a range of permitted twist angles. + + + + + Local space basis attached to body A against which to measure body B's transformed axis. Expressed as a 3x3 rotation matrix, the X axis corresponds with 0 degrees, + the Y axis corresponds to 90 degrees, and the Z axis is the twist axis. + + + + + Local space basis attached to body B that will be measured against body A's basis. + Expressed as a 3x3 rotation matrix, the transformed X axis will be measured against A's X and Y axes. The Z axis is the twist axis. + + + + + Minimum angle between B's axis to measure and A's measurement axis. + + + + + Maximum angle between B's axis to measure and A's measurement axis. + + + + + Spring frequency and damping parameters. + + + + + Constrains the twist velocity between two bodies to a target. + + + + + Local twist axis attached to body A. + + + + + Local twist axis attached to body B. + + + + + Goal relative twist velocity around the body axes. + + + + + Motor control parameters. + + + + + Constrains two bodies to maintain a target twist angle around body-attached axes. + + + + + Local space basis attached to body A against which to measure body B's transformed axis. Expressed as a 3x3 rotation matrix, the X axis corresponds with 0 degrees, + the Y axis corresponds to 90 degrees, and the -Z axis is the twist axis. When viewed along the twist axis, positive change in angle causes counterclockwise rotation in right handed coordinates. + + + + + Local space basis attached to body B that will be measured against body A's basis. + Expressed as a 3x3 rotation matrix, the transformed X axis will be measured against A's X and Y axes. The Z axis is the twist axis. + + + + + Target angle between B's axis to measure and A's measurement axis. + + + + + Spring frequency and damping parameters. + + + + + Servo control parameters. + + + + + A constraint's body references. Stored separately from the iteration data since it is accessed by both the prestep and solve. + Two address streams isn't much of a problem for prefetching. + + + + + Prestep, warm start and solve iteration functions for a two body constraint type. + + Type of the prestep data used by the constraint. + Type of the accumulated impulses used by the constraint. + Type of the projection to input. + + + + Prestep, warm start, solve iteration, and incremental contact update functions for a two body contact constraint type. + + Type of the prestep data used by the constraint. + Type of the accumulated impulses used by the constraint. + Type of the projection to input. + + + + Shared implementation across all two body constraints. + + + + + Stores the raw AOSOA formatted data associated with constraints in a type batch. + + + + + Superclass of constraint type batch processors. Responsible for interpreting raw type batches for the purposes of bookkeeping and solving. + + + This class holds no actual state of its own. A solver creates a unique type processor for each registered constraint type, and all instances are held in untyped memory. + Splitting the functionality from the data allows for far fewer GC-tracked instances and allows the raw data layout to be shared more easily. + For example, sleeping simulation islands store type batches, but they are created and used differently- and for convenience, they are stored on a per-island basis. + Using the same system but with reference type TypeBatches, tens of thousands of inactive islands would imply tens of thousands of GC-tracked objects. + That's not acceptable, so here we are. + Conceptually, you can think of the solver's array of TypeProcessors like C function pointers. + + + + + Gets the number of bodies associated with each constraint in this type processor. + + + + + Gets the number of degrees of freedom that each constraint in this type processor constrains. Equal to the number of entries in the accumulated impulses. + + + + + Allocates a slot in the batch. + + Type batch to allocate in. + Handle of the constraint to allocate. Establishes a link from the allocated constraint to its handle. + Pointer to a list of body indices (not handles!) with count equal to the type batch's expected number of involved bodies. + Allocation provider to use if the type batch has to be resized. + Index of the slot in the batch. + + + + Moves a constraint from one ConstraintBatch's TypeBatch to another ConstraintBatch's TypeBatch of the same type. + + Index of the batch that owns the type batch that is the source of the constraint transfer. + Index of the constraint to move in the current type batch. + Solver that owns the batches. + Bodies set that owns all the constraint's bodies. + Index of the ConstraintBatch in the solver to copy the constraint into. + + + + Defines a function that creates a sort key from body references in a type batch. Used by constraint layout optimization. + + + + + Overwrites all the data in the target constraint slot with source data. + + + + + Removes a constraint from the batch. + + Index of the constraint to remove. + The handle to constraint mapping used by the solver that could be modified by a swap on removal. + + + + Moves a constraint from one ConstraintBatch's TypeBatch to another ConstraintBatch's TypeBatch of the same type. + + Index of the batch that owns the type batch that is the source of the constraint transfer. + Index of the constraint to move in the current type batch. + Solver that owns the batches. + Bodies set that owns all the constraint's bodies. + Index of the ConstraintBatch in the solver to copy the constraint into. + + + + Constrains the volume of a tetrahedron connecting the centers of four bodies to match a goal volume. + Scaled volume computed from (ab x ac) * ad; the volume may be negative depending on the winding of the tetrahedron. + + + + + 6 times the target volume of the tetrahedra. Computed from (ab x ac) * ad; this may be negative depending on the winding of the tetrahedron. + + + + + Spring frequency and damping parameters. + + + + + Creates a new volume constraint, initializing the target volume using a set of initial positions. + + Initial position of the first body. + Initial position of the second body. + Initial position of the third body. + Initial position of the fourth body. + Spring settings to apply to the volume constraint. + + + + Handles the solve iterations of a bunch of volume constraints. + + + + + Constrains two bodies to maintain a relative position and orientation. All six degrees of freedom are solved simultaneously. + + + + + Offset from body A to body B in the local space of A. + + + + + Target orientation of body B in body A's local space. + + + + + Springiness of the position and orientation constraints. + + + + + Handles the solve iterations of a bunch of ball socket constraints. + + + + + Helper class to register the default types within a simulation instance. + + + + + Registers the set of constraints that are packaged in the engine. + + + + + Creates a task registry containing the default collision pair types. + + + + + Creates a task registry containing the default sweep task types. + + + + + Contains constraints that could not belong to any lower constraint batch due to their involved bodies. All of the contained constraints will be solved using a fallback solver that + trades rigidity for parallelism. + + + + + Gets the number of bodies in the fallback batch. + + + + + Unique identifier of a body belonging to a simulation's Bodies collection. + + + + + Index in the handle-to-memory mapping table used to look up the current memory location of the body. + This value will not (and must not) change during the body's lifespan, but the memory that the table points to could change. + + + + + Unique identifier of a static belonging to a simulation's Statics collection. + + + + + Index in the handle-to-memory mapping table used to look up the current memory location of the body. + This value will not (and must not) change during the body's lifespan, but the memory that the table points to could change. + + + + + Unique identifier of a constraint belonging to a simulation's Solver. + + + + + Index in the handle-to-memory mapping table used to look up the current memory location of the constraint. + This value will not (and must not) change during the constraint's lifespan, but the memory that the table points to could change. + + + + + Collects body handles associated with an active constraint as integers. + + + + + Shared miscellaneous helper functions. + + + + + Provides functionality for efficiently waking up sleeping bodies. + + + + + Wakes up a body if it is sleeping. All bodies that can be found by traversing the constraint graph from the body will also be awakened. + If the body is already awake, this does nothing. + + Handle of the body to awaken. + + + + Wakes up any sleeping bodies associated with a constraint. All bodies that can be found by traversing the constraint graph from the constraint referenced bodies will also be awakened. + If all bodies associated with the constraint are already awake, this does nothing. + + Handle of the constraint to awaken. + + + + Wakes up all bodies and constraints within a set. Doesn't do anything if the set is awake (index zero). + + Index of the set to awaken. + + + + Awakens a list of set indices. + + List of set indices to wake up. + Thread dispatcher to use when waking the bodies. Pass null to run on a single thread. + + + + Represents the constraint batch structure and all references in an island. Holds everything necessary to create and gather a full island. + + + + + Gets or sets the multiplier applied to the active body count used to calculate the number of sleep traversals in a given timestep. + + + + + Gets or sets the fraction of the active set to target as the number of bodies slept in a given frame. + This is only a goal; the actual number of slept bodies may be more or less. + + + + + Gets or sets the fraction of the active set to target as the number of bodies traversed for sleeping in a given frame. + This is only a goal; the actual number of traversed bodies may be more or less. + + + + + Traverses the active constraint graph collecting bodies that match a predicate. If any body visited during the traversal fails to match the predicate, the traversal terminates. + + Type of the predicate to test each body index with. + Pool to allocate temporary collections from. + Index of the active body to start the traversal at. + Predicate to test each traversed body with. If any body results in the predicate returning false, the traversal stops and the function returns false. + List to fill with body indices traversed during island collection. Bodies failing the predicate will not be included. + List to fill with constraint handles traversed during island collection. + True if the simulation graph was traversed without ever finding a body that made the predicate return false. False if any body failed the predicate. + The bodyIndices and constraintHandles lists will contain all traversed predicate-passing bodies and constraints. + + + + If true, this job relates to a subset of body indices. If false, this job relates to a subset of constraint handles. + + + + + Forcefully sleeps a list of bodies and all bodies that can be reached by traversing the constraint graph from those bodies. + + List of body indices to sleep. + Thread dispatcher to use for the sleep attempt, if any. If null, sleep is performed on the calling thread. + True if the sleep should produce deterministic results at higher cost, false otherwise. + + + + Forces a body and all bodies that can be found by traversing the constraint graph from that body to go to sleep. + + Index of the body to sleep in the active set. + + + + Ensures that the Bodies, Solver, and NarrowPhase can hold at least the given number of sets (BodySets for the Bodies collection, ConstraintSets for the Solver, PairSubcaches for the NarrowPhase.PairCache). + + Number of sets to guarantee space for. + + + + Ensures that the Bodies and Solver can hold the given number of sets. + If the existing allocation is smaller than the requested sets capacity, the allocation will be enlarged. + If the existing allocation is larger than both the existing potentially allocated set range and the requested sets capacity, the allocation will be shrunk. + Shrinks will never cause an existing set to be lost. + + Target number of sets to allocate space for. + + + + Delegate used by ITimesteppers for their stage callbacks. + + Time step duration. + Thread dispatcher used for this timestep. + + + + Delegate used by ITimesteppers for stage callbacks within substepping loops. + + Index of the substep executing this stage. + Time step duration. + Thread dispatcher used for this timestep. + + + + Defines a type capable of updating the simulation state for a given elapsed time. + + + + + Callbacks to execute immediately before collision detection executes. + + + + + Callbacks to execute after collision detection completes. + + + + + Performs one timestep of the given length. + + Duration of the time step. + Thread dispatcher to use for execution, if any. + + + + Defines how a pose integrator should handle angular velocity integration. + + + + + Angular velocity is directly integrated and does not change as the body pose changes. Does not conserve angular momentum. + + + + + Approximately conserves angular momentum by updating the angular velocity according to the change in orientation. Does a decent job for gyroscopes, but angular velocities will tend to drift towards a minimal inertia axis. + + + + + Approximately conserves angular momentum by including an implicit gyroscopic torque. Best option for Dzhanibekov effect simulation, but applies a damping effect that can make gyroscopes less useful. + + + + + Defines a type that handles callbacks for body pose integration. + + + + + Gets how the pose integrator should handle angular velocity integration. + + + + + Performs any required initialization logic after the Simulation instance has been constructed. + + Simulation that owns these callbacks. + + + + Called prior to integrating the simulation's active bodies. When used with a substepping timestepper, this could be called multiple times per frame with different time step values. + + Current time step duration. + + + + Callback called for each active body within the simulation during body integration. + + Index of the body being visited. + Body's current pose. + Body's current local inertia. + Index of the worker thread processing this body. + Reference to the body's current velocity to integrate. + + + + Provides helper functions for integrating body poses. + + + + + Integrates the velocity of mobile bodies over time into changes in position and orientation. Also applies gravitational acceleration to dynamic bodies. + + + This variant of the integrator uses a single global gravity. Other integrators that provide per-entity gravity could exist later. + This integrator also assumes that the bodies positions are stored in terms of single precision floats. Later on, we will likely modify the Bodies + storage to allow different representations for larger simulations. That will require changes in this integrator, the relative position calculation of collision detection, + the bounding box calculation, and potentially even in the broadphase in extreme cases (64 bit per component positions). + + + + + Updates the simulation in the order of: sleeper -> integrate body poses, velocity and bounding boxes -> collision detection -> solver -> data structure optimization. + + + + + Fires after the sleeper completes and before bodies are integrated. + + + + + Fires after bodies have had their position, velocity, and bounding boxes updated, but before collision detection begins. + + + + + Fires after all collisions have been identified, but before constraints are solved. + + + + + Fires after the solver executes and before data structures are incrementally optimized. + + + + + Updates the simulation in the order of: sleeper -> integrate velocities and update body bounding boxes -> collision detection -> solver -> integrate body poses -> data structure optimization. + + + + + Fires after the sleeper completes and before bodies are integrated. + + + + + Fires after bodies have had their velocities and bounding boxes updated, but before collision detection begins. + + + + + Fires after all collisions have been identified, but before constraints are solved. + + + + + Fires after the solver executes and before body poses are integrated. + + + + + Fires after bodies have their poses integrated and before data structures are incrementally optimized. + + + + + Orchestrates the bookkeeping and execution of a full dynamic simulation. + + + + + Gets the simulation profiler. Note that the SimulationProfiler implementation only exists when the library is compiled with the PROFILE compilation symbol; if not defined, returned times are undefined. + + + + + Gets the main memory pool used to fill persistent structures and main thread ephemeral resources across the engine. + + + + + Gets the timestepper used to update the simulation state. + + + + + Gets or sets whether to use a deterministic time step when using multithreading. When set to true, additional time is spent sorting constraint additions and transfers. + Note that this can only affect determinism locally- different processor architectures may implement instructions differently. + + + + + Constructs a simulation supporting dynamic movement and constraints with the specified narrow phase callbacks. + + Buffer pool used to fill persistent structures and main thread ephemeral resources across the engine. + Callbacks to use in the narrow phase. + Callbacks to use in the pose integrator. + Timestepper that defines how the simulation state should be updated. + Number of iterations the solver should use. + Number of synchronized batches the solver should maintain before falling back to a lower quality jacobi hybrid solver. + Allocation sizes to initialize the simulation with. If left null, default values are chosen. + New simulation. + + + + Executes the sleep stage, moving candidate + + Thread dispatcher to use for the sleeper execution, if any. + + + + Updates the position, velocity, world inertia, deactivation candidacy and bounding boxes of active bodies. + + Duration of the time step. + Thread dispatcher to use for execution, if any. + + + + Predicts the bounding boxes of active bodies by speculatively integrating velocity. Does not actually modify body velocities. Updates deactivation candidacy. + + Duration of the time step. + Thread dispatcher to use for execution, if any. + + + + Updates the velocities, world space inertias, bounding boxes, and deactivation candidacy of active bodies. + + Duration of the time step. + Thread dispatcher to use for execution, if any. + + + + Updates the velocities and world space inertias of active bodies. + + Duration of the time step. + Thread dispatcher to use for execution, if any. + + + + Updates the poses of active bodies. + + Duration of the time step. + Thread dispatcher to use for execution, if any. + + + + Updates the broad phase structure for the current body bounding boxes, finds potentially colliding pairs, and then executes the narrow phase for all such pairs. Generates contact constraints for the solver. + + Duration of the time step. + Thread dispatcher to use for execution, if any. + + + + Uses the current body velocities to incrementally update all active contact constraint penetration depths. + + Duration of the time step. + Thread dispatcher to use for execution, if any. + + + + Solves all active constraints in the simulation. + + Duration of the time step. + Thread dispatcher to use for execution, if any. + + + + Incrementally improves body and constraint storage for better performance. + + Thread dispatcher to use for execution, if any. + + + + Performs one timestep of the given length. + + + Be wary of variable timesteps. They can harm stability. Whenever possible, keep the timestep the same across multiple frames unless you have a specific reason not to. + + Duration of the time step. + Thread dispatcher to use for execution, if any. + + + + Clears the simulation of every object, only returning memory to the pool that would be returned by sequential removes. + Other persistent allocations, like those in the Bodies set, will remain. + + + + + Increases the allocation size of any buffers too small to hold the allocation target. + + + + The final size of the allocated buffers are constrained by the allocator. It is not guaranteed to be exactly equal to the target, but it is guaranteed to be at least as large. + + + This is primarily a convenience function. Everything it does internally can be done externally. + For example, if only type batches need to be resized, the solver's own functions can be used directly. + + + Allocation sizes to guarantee sufficient size for. + + + + Increases the allocation size of any buffers too small to hold the allocation target, and decreases the allocation size of any buffers that are unnecessarily large. + + + + The final size of the allocated buffers are constrained by the allocator. It is not guaranteed to be exactly equal to the target, but it is guaranteed to be at least as large. + + + This is primarily a convenience function. Everything it does internally can be done externally. + For example, if only type batches need to be resized, the solver's own functions can be used directly. + + + Allocation sizes to guarantee sufficient size for. + + + + Clears the simulation of every object and returns all pooled memory to the buffer pool. Leaves the simulation in an unusable state. + + + + + Intersects a ray against the simulation. + + Type of the callbacks to execute on ray-object intersections. + Origin of the ray to cast. + Direction of the ray to cast. + Maximum length of the ray traversal in units of the direction's length. + callbacks to execute on ray-object intersections. + User specified id of the ray. + + + + Sweeps a shape against the simulation. + + Type of the shape to sweep. + Type of the callbacks executed when a sweep impacts an object in the scene. + Shape to sweep. + Starting pose of the sweep. + Velocity of the swept shape. + Maximum length of the sweep in units of time used to integrate the velocity. + Pool to allocate any temporary resources in during execution. + Callbacks executed when a sweep impacts an object in the scene. + Simulation objects are treated as stationary during the sweep. + Minimum amount of progress in terms of t parameter that any iterative sweep tests should make for each sample. + Threshold in terms of t parameter under which iterative sweep tests are permitted to exit in collision. + Maximum number of iterations to use in iterative sweep tests. + + + + Sweeps a shape against the simulation. + + Type of the shape to sweep. + Type of the callbacks executed when a sweep impacts an object in the scene. + Shape to sweep. + Starting pose of the sweep. + Velocity of the swept shape. + Maximum length of the sweep in units of time used to integrate the velocity. + Pool to allocate any temporary resources in during execution. + Callbacks executed when a sweep impacts an object in the scene. + Simulation objects are treated as stationary during the sweep. + + + + The common set of allocation sizes for a simulation. + + + + + The number of bodies to allocate space for. + + + + + The number of statics to allocate space for. + + + + + The number of inactive islands to allocate space for. + + + + + Minimum number of shapes to allocate space for in each shape type batch. + + + + + The number of constraints to allocate bookkeeping space for. This does not affect actual type batch allocation sizes, only the solver-level constraint handle storage. + + + + + The minimum number of constraints to allocate space for in each individual type batch. + New type batches will be given enough memory for this number of constraints, and any compaction will not reduce the allocations below it. + The number of constraints can vary greatly across types- there are usually far more contacts than ragdoll constraints. + Per type estimates can be assigned within the Solver.TypeBatchAllocation if necessary. This value acts as a lower bound for all types. + + + + + The minimum number of constraints to allocate space for in each body's constraint list. + New bodies will be given enough memory for this number of constraints, and any compaction will not reduce the allocations below it. + + + + + Stores profiling information for the previous simulation execution. + + + + + Gets the time it took to complete the last execution of the given stage. If no stage matching the given object ran, returns -1. + + Stage to look up the time for. + Time it took to complete the last execution of the given stage. + + + + Checks whether the child of a collidable should be tested against a ray. Only called by shape types that can have more than one child. + + Index of the candidate in the parent collidable. + True if the child should be tested by the ray, false otherwise. + + + + Called when a ray impact has been found. + + Information about the ray associated with this hit. + Maximum distance along the ray that the traversal is allowed to go in units of ray direction length. Can be set to limit future tests. + Distance along the ray to the impact in units of ray direction length. In other words, hitLocation = ray.Origin + ray.Direction * t. + Surface normal at the hit location. + Index of the hit child. For convex shapes or other types that don't have multiple children, this is always zero. + + + + Defines a type capable of filtering ray test candidates and handling ray hit results. + + + + + Checks whether a collidable identified by the acceleration structure should be tested against a ray. + + Candidate collidable for ray testing. + True if the collidable should be tested by the ray, false otherwise. + + + + Checks whether the child of a collidable should be tested against a ray. Only called by shape types that can have more than one child. + + Parent of the candidate. + Index of the candidate in the parent collidable. + True if the child should be tested by the ray, false otherwise. + + + + Called when a ray impact has been found. + + Information about the ray associated with this hit. + Maximum distance along the ray that the traversal is allowed to go in units of ray direction length. Can be set to limit future tests. + Distance along the ray to the impact in units of ray direction length. In other words, hitLocation = ray.Origin + ray.Direction * t. + Surface normal at the hit location. + Collidable hit by the ray. + Index of the hit child. For convex shapes or other types that don't have multiple children, this is always zero. + + + + Defines a type capable of filtering sweep candidates and handling sweep results. + + + + + Checks whether to run a detailed sweep test against a target collidable. + + Collidable to check. + True if the sweep test should be attempted, false otherwise. + + + + Checks whether to run a detailed sweep test against a target collidable's child. + + Collidable to check. + Index of the child in the collidable to check. + True if the sweep test should be attempted, false otherwise. + + + + Called when a sweep test detects a hit with nonzero T value. + + Reference to maximumT passed to the traversal. + Time of impact for the sweep test. + Location of the first hit detected by the sweep. + Surface normal at the hit location. + Collidable hit by the traversal. + + + + Called when a sweep test detects a hit at T = 0, meaning that no location or normal can be computed. + + Reference to maximumT passed to the traversal. + Collidable hit by the traversal. + + + + Buffer containing all constraint sets. The first slot is dedicated to the active set; subsequent slots may be occupied by the constraints associated with inactive islands. + + + + + Gets a reference to the active set of constraints, stored in the first set slot. + + + + + Pool to retrieve constraint handles from when creating new constraints. + + + + + Gets the maximum number of solver batches to allow before resorting to a fallback solver. + If a single body is constrained by more than FallbackBatchThreshold constraints, all constraints beyond FallbackBatchThreshold are placed into a fallback batch. + The fallback batch uses a different solver that can handle multiple constraints affecting a single body in a single batch, allowing greater parallelism at the cost of convergence speed. + + + + + Gets or sets the number of solver iterations to compute per call to Update. + + + + + Gets or sets the minimum amount of space, in constraints, initially allocated in any new type batch. + + + + + Sets the minimum capacity initially allocated to a new type batch of the given type. + + Id of the constraint type to check the initial capacity of. + Minimum capacity to use for the type. + + + + Gets the minimum initial capacity for a given type. + The returned value is the larger of MinimumCapacityPerTypeBatch and the value set by SetMinimumCapacityForType for the given type id. + + Type id to retrieve the minm + Larger of MinimumCapacityPerTypeBatch and the given type's minimum set by SetMinimumCapacityForType. + + + + Resets all per-type initial capacities to zero. Leaves the minimum capacity across all constraints unchanged. + + + + + Gets the total number of constraints across all sets, batches, and types. Requires enumerating + all type batches; this can be expensive. + + + + + Gets whether the given constraint handle refers to a constraint in the solver. + + Constraint handle to check for existence in the solver. + True if the constraint handle exists in the solver, false otherwise. + + + + Gets a direct reference to the constraint associated with a handle. + The reference is temporary; any constraint removals that affect the referenced type batch may invalidate the index. + + Type of the type batch being referred to. + Handle index of the constraint. + Temporary direct reference to the type batch and index in the type batch associated with the constraint handle. + May be invalidated by constraint removals. + + + + Attempts to locate a spot for a new constraint. Does not perform allocation for the constraint. If no batch exists, returns the index just beyond the end of the existing list of batches. + + Index of the batch that the constraint would fit in. + This is used by the narrowphase's multithreaded constraint adders to locate a spot for a new constraint without requiring a lock. Only after a candidate is located + do those systems attempt an actual claim, limiting the duration of locks and increasing potential parallelism. + + + + Applies a description to a constraint slot without waking up the associated island. + + Type of the description to apply. + Reference of the constraint being updated. + Description to apply to the slot. + + + + Applies a description to a constraint slot without waking up the associated island. + + Type of the description to apply. + Handle of the constraint being updated. + Description to apply to the slot. + + + + Applies a description to a constraint slot without waking up the associated island. + + Type of the description to apply. + Handle of the constraint being updated. + Description to apply to the slot. + + + + Applies a description to a constraint slot, waking up the connected bodies if necessary. + + Type of the description to apply. + Handle of the constraint being updated. + Description to apply to the slot. + + + + Applies a description to a constraint slot, waking up the connected bodies if necessary. + + Type of the description to apply. + Handle of the constraint being updated. + Description to apply to the slot. + + + + Allocates a constraint slot and sets up a constraint with the specified description. + + Type of the constraint description to add. + Body handles used by the constraint. + Allocated constraint handle. + + + + Allocates a constraint slot and sets up a constraint with the specified description. + + Type of the constraint description to add. + Body handles referenced by the constraint. + Allocated constraint handle. + + + + Allocates a one-body constraint slot and sets up a constraint with the specified description. + + Type of the constraint description to add. + Body connected to the constraint. + Allocated constraint handle. + + + + Allocates a one-body constraint slot and sets up a constraint with the specified description. + + Type of the constraint description to add. + First body of the constraint. + Allocated constraint handle. + + + + Allocates a two-body constraint slot and sets up a constraint with the specified description. + + Type of the constraint description to add. + First body of the constraint. + Second body of the constraint. + Allocated constraint handle. + + + + Allocates a two-body constraint slot and sets up a constraint with the specified description. + + Type of the constraint description to add. + First body of the constraint. + Second body of the constraint. + Allocated constraint handle. + + + + Allocates a three-body constraint slot and sets up a constraint with the specified description. + + Type of the constraint description to add. + First body of the constraint. + Second body of the constraint. + Third body of the constraint. + Allocated constraint handle. + + + + Allocates a three-body constraint slot and sets up a constraint with the specified description. + + Type of the constraint description to add. + First body of the constraint. + Second body of the constraint. + Third body of the constraint. + Allocated constraint handle. + + + + Allocates a four-body constraint slot and sets up a constraint with the specified description. + + Type of the constraint description to add. + First body of the constraint. + Second body of the constraint. + Third body of the constraint. + Fourth body of the constraint. + Allocated constraint handle. + + + + Allocates a four-body constraint slot and sets up a constraint with the specified description. + + Type of the constraint description to add. + First body of the constraint. + Second body of the constraint. + Third body of the constraint. + Fourth body of the constraint. + Allocated constraint handle. + + + + Removes a constraint from a batch, performing any necessary batch cleanup, but does not return the constraint's handle to the pool. + + Handle of the constraint being removed. + Index of the batch to remove from. + Type id of the constraint to remove. + Index of the constraint to remove within its type batch. + + + + Removes the constraint associated with the given handle. Note that this may invalidate any outstanding direct constraint references + by reordering the constraints within the TypeBatch subject to removal. + + Handle of the constraint to remove from the solver. + + + + Changes the body references of all constraints associated with a body in response to its movement into a new slot. + Constraints associated with the body now at its old slot, if any, are left untouched. + + Memory index that the moved body used to inhabit. + Memory index that the moved body now inhabits. + + + + Changes the body references of all constraints associated with two bodies in response to them swapping slots in memory. + + First swapped body index. + Second swapped body index. + + + + Scales the accumulated impulses associated with a constraint set by a given scale. + + Set to scale. + Scale to apply to accumulated impulses. + + + + Scales all accumulated impulses in the active set. + + Scale to apply to accumulated impulses. + + + + Scales all accumulated impulses in all constraint sets. + + Scale to apply to accumulated impulses. + + + + Enumerates the accumulated impulses associated with a constraint. + + Constraint to enumerate. + Enumerator to use. + + + + Gathers the squared magnitude of the accumulated impulse for a given constraint. + + Constraint to look up the accumulated impulses of. + Squared magnitude of the accumulated impulses associated with the given constraint. + + + + Gathers the magnitude of the accumulated impulse for a given constraint. + + Constraint to look up the accumulated impulses of. + Magnitude of the accumulated impulses associated with the given constraint. + + + + Enumerates the set of bodies associated with a constraint in order of their references within the constraint. + + Constraint to enumerate. + Enumerator to use. + + + + Removes all objects from the solver. This is meant as a fast path to empty a simulation's constraints. It makes no attempt to retain synchronization with other systems + which may depend on the existence of constraints, like the per-body constraint lists. + + + + + Adjusts the size of the the solvers non-typebatch data structures. An allocation will grow if the given capacity exceeds the currently allocated capacity. + + Size of the span of body handles to allocate space for. Applies to batch referenced handle sets. + Number of constraint handles to allocate space for. Applies to the handle->constraint mapping table. + + + + Adjusts the size of the the solvers non-typebatch data structures. An allocation is allowed to shrink if it fits both all existing entries and the given capacity. + An allocation will grow if the given capacity exceeds the currently allocated capacity. + + Size of the span of body handles to allocate space for. Applies to batch referenced handle sets. + Number of constraint handles to allocate space for. Applies to the handle->constraint mapping table. + + + + Ensures all existing active type batches meet or exceed the current solver-defined minimum capacities. Type batches with capacities smaller than the minimums will be enlarged. + + + + + Applies the current solver-defined minimum capacities to existing type batches. Type batches with capacities larger than the minimums and counts less than the minimums may be shrunk. + Type batches with capacities smaller than the minimums will be enlarged. + + + + + Returns all pool-retrieved resources to the pool. + + + The solver cannot be 'rehydrated' for reuse after a disposal. If you want to return bulk data to the pool while leaving the solver in a usable state, consider using Clear instead. + + + + + Index of the first bundle in the block. + + + + + Exlusive end index of the bundle. Index of the last bundle in the block is End - 1. + + + + + Inclusive start of blocks known to be claimed by any worker. + + + + + Exclusive end of blocks known to be claimed by any worker. + + + + + Behaves like a framework SpinWait, but never voluntarily relinquishes the timeslice to off-core threads. + + There are three big reasons for using this over the regular framework SpinWait: + 1) The framework spinwait relies on spins for quite a while before resorting to any form of timeslice surrender. + Empirically, this is not ideal for the solver- if the sync condition isn't met within several nanoseconds, it will tend to be some microseconds away. + This spinwait is much more aggressive about moving to yields. + 2) After a number of yields, the framework SpinWait will resort to calling Sleep. + This widens the potential set of schedulable threads to those not native to the current core. If we permit that transition, it is likely to evict cached solver data. + (For very large simulations, the use of Sleep(0) isn't that concerning- every iteration can be large enough to evict all of cache- + but there still isn't much benefit to using it over yields in context.) + 3) After a particularly long wait, the framework SpinWait resorts to Sleep(1). This is catastrophic for the solver- worse than merely interfering with cached data, + it also simply prevents the thread from being rescheduled for an extremely long period of time (potentially most of a frame!) under the default clock resolution. + Note that this isn't an indication that the framework SpinWait should be changed, but rather that the solver's requirements are extremely specific and don't match + a general purpose solution very well. + + + + Describes the properties of a static object. When added to a simulation, static objects can collide but have no velocity and will not move in response to forces. + + + + + Position and orientation of the static. + + + + + Collidable properties of the static. + + + + + Builds a new static description. + + Position of the static. + Orientation of the static. + Collidable description for the static. + + + + Builds a new static description. + + Position of the static. + Collidable description for the static. + + + + Builds a new static description with discrete continuity. + + Position of the static. + Orientation of the static. + Index of the static's shape in the simulation shapes set. + Distance beyond the surface of the static to allow speculative contacts to be generated. + + + + Builds a new static description with discrete continuity. + + Position of the static. + Index of the static's shape in the simulation shapes set. + Distance beyond the surface of the body to allow speculative contacts to be generated. + + + + Convenience structure for directly referring to a static's properties. + + Note that this type makes no attempt to protect against unsafe modification of static properties. + + + + Handle of the static that this reference refers to. + + + + + The collection containing the static. + + + + + Constructs a new static reference. + + Handle of the static to refer to. + Collection containing the static. + + + + Gets whether the static reference exists within the static set. True if the handle maps to a valid memory location that agrees that the handle points to it, false otherwise. + + + + + Gets a the static's index in the statics collection. + + + + + Gets a reference to the static's pose. + + + + + Gets a reference to the static's collidable. + + + + + Gets a description of the static. + + Description of the static. + + + + Sets a static's properties according to a description. + + Description of the static. + + + + Changes the shape of a static. + + Index of the new shape to use for the static. + + + + Gets a copy of the static's bounding box. + + + + + Gets direct pointers to the static's bounding box minimum and maximum in the broad phase. Outputs null if the static has no shape. + + Pointer to the bounding box minimum in the broad phase. + Pointer to the bounding box maximum in the broad phase. + + + + Updates the static's bounds in the broad phase for its current state. Does not include velocity expansion. Does nothing if the static has no shape. + + Can be useful if you made modifications to the static's state that you want reflected in the broad phase before the next timestep. + For example, if you want to perform ray casts against the broad phase after moving objects around directly, their bounds must be updated or else the broad phase bounds will be out of date and the ray will likely miss. + + + + Collection of allocated static collidables. + + + + + Remaps a static handle integer value to the actual array index of the static. + The backing array index may change in response to cache optimization. + + + + + Remaps a static index to its handle. + + + + + The set of collidables owned by each static. Speculative margins, continuity settings, and shape indices can be changed directly. + Shape indices cannot transition between pointing at a shape and pointing at nothing or vice versa without notifying the broad phase of the collidable addition or removal. + + + + + Checks whether a static handle is currently registered with the statics set. + + Handle to check for. + True if the handle exists in the collection, false otherwise. + + + + Removes a static from the set by index. Any inactive bodies with bounding boxes overlapping the removed static's bounding box will be forced active. + + Index of the static to remove. + + + + Removes a static from the set. Any inactive bodies with bounding boxes overlapping the removed static's bounding box will be forced active. + + Handle of the static to remove. + + + + Updates the bounds held within the broad phase for the static's current state. + + + + + Adds a new static body to the simulation. All inactive bodies whose bounding boxes overlap the new static are forced active. + + Description of the static to add. + Handle of the new static. + + + + Changes the shape of a static and updates its bounds in the broad phase. + + Handle of the static to change the shape of. + Index of the new shape to use for the static. + + + + Applies a new description to an existing static object. All inactive bodies with bounding boxes overlapping the old or new static collidable are forced active. + Updates the bounds of the static in the broad phase. + + Handle of the static to apply the description to. + Description to apply to the static. + + + + Gets the current description of the static referred to by a given handle. + + Handle of the static to look up the description of. + Gathered description of the handle-referenced static. + + + + Gets a reference to a static by its handle. + + Handle of the static to grab a reference of. + Reference to the desired static. + + + + Clears all bodies from the set without returning any memory to the pool. + + + + + Resizes the allocated spans for static data. Note that this is conservative; it will never orphan existing objects. + + Target static data capacity. + + + + Increases the size of buffers if needed to hold the target capacity. + + Target data capacity. + + + + Returns all static resources to the pool used to create them. + + The object can be reused if it is reinitialized by using EnsureCapacity or Resize. + + + + Updates the simulation in the order of: sleeper -> predict body bounding boxes -> collision detection -> LOOP { contact data update (if on iteration > 0) -> integrate body velocities -> solver -> integrate body poses } -> data structure optimization. + Each inner loop execution simulates a sub-timestep of length dt/substepCount. + Useful for simulations with difficult to solve constraint systems that need shorter timestep durations but which don't require high frequency collision detection. + + + + + Gets or sets the number of substeps to execute during each timestep. + + + + + Fires after the sleeper completes and before bodies are integrated. + + + + + Fires after bodies have their bounding boxes updated for the frame's predicted motion and before collision detection. + + + + + Fires after all collisions have been identified, but before the substep loop begins. + + + + + Fires at the beginning of a substep. + + + + + Fires after contact constraints are incrementally updated at the beginning of substeps after the first and before velocities are integrated. + + + + + Fires after bodies have their velocities integrated and before the solver executes. + + + + + Fires after the solver executes and before body poses are integrated. + + + + + Fires after bodies have their poses integrated and before the substep ends. + + + + + Fires at the end of a substep. + + + + + Fires after all substeps are finished executing and before data structures are incrementally optimized. + + + + + Pointer to a leaf's tree location. + + The identity of a leaf is implicit in its position within the leaf array. + + + + Gets the index of the node that the leaf is directly held by. + + + + + Gets which child within the owning node the leaf is in. + + + + + 2-wide tree node. + + + + + Metadata associated with a 2-child tree node. + + + + + Cached change in cost of the tree starting at this node since the previous frame. + The local cost change is unioned with the refine flags. They're never used simultaneously. + This will be overwritten right after use, so don't expect anything meaningful here outside of refinement scheduling's scope. + + + + + Ray representation designed for quicker intersection against axis aligned bounding boxes. + + + + + Gets the number of rays in the batch. + + + + + Gets pointers to the data for a ray. + + Index of the ray to grab. + Pointer to the ray's origin and direction. Note that changing the ray's origin and direction mid-traversal will not change the path of the traversal, + but it will be visible by any future leafs impacted by this ray. + Pointer to the maximum length of the ray in units of the ray's length. + Decreasing this value will prevent the traversal from visiting more distant nodes later in the traversal. + + + + Gets a reference to the data for a ray. + + Index of the ray to grab. + Returns a reference to the ray in the ray source. + + + + Reusable structure for testing large numbers of rays against trees. + + + + + Constructs a ray batcher and initializes its backing resources. + + Pool to pull resources from. + Maximum number of rays to execute in each traversal. + This should typically be chosen as the highest value which avoids spilling data out of L2 cache. + Tree depth to preallocate ray stack space for. If a traversal finds nodes deeper than this, a dynamic resize will be triggered. + + + + Ray representation designed for quicker intersection against axis aligned bounding boxes. + + + + + Tests any batched rays against the given tree. + + Tree to test the accumulated rays against. + + + + Adds a ray to the batcher. Returns true if the batcher has reached maximum ray capacity and needs to be reset in order to continue adding rays. + + Origin of the ray to test against the tree. + Direction of the ray to test against the tree. + Maximum distance that the ray will travel in units of the ray's length. + Identifier value for the ray. Leaf tests will have access to the id. + True if the batcher is full and requires a call to ResetRays before adding any more rays, false otherwise. + + + + Resets the accumulated ray count to zero. + + + + + Disposes all the resources backing the ray batcher. + + + + + Constructs an empty tree. + + Initial number of leaves to allocate room for. + + + + Loads a tree from a byte buffer created by the Serialize function. + + Data to load into the tree. + Pool to use to create the tree. + + + + Gets the number of bytes required to store the tree. + + Tree to measure. + Number of bytes required to store the tree. + + + + Writes a tree into a byte buffer. + + Tree to write into the buffer. + Buffer to hold the tree's data. + + + + Resizes the buffers backing the tree's nodes and leaves. Will not shrink the buffers below the size needed by the currently resident nodes and leaves. + + Pool from which to take and return resources. + The desired number of available leaf slots. + + + + Resets the tree to a fresh post-construction state, clearing out leaves and nodes but leaving the backing resources intact. + + + + + Disposes the tree's backing resources, returning them to the Pool currently associated with the tree. + + Pool to return resources to. + Disposed trees can be reused if EnsureCapacity or Resize is used to rehydrate them. + + + + Tests if two tree references point to the same data. + + First tree to compare. + Second tree to compare. + True if the two trees have the same nodes and node count, false otherwise. + + + + Merges a new leaf node with an existing leaf node, producing a new internal node referencing both leaves, and then returns the index of the leaf node. + + Bounding box of the leaf being added. + Index of the parent node that the existing leaf belongs to. + Index of the child wtihin the parent node that the existing leaf belongs to. + Bounding box holding both the new and existing leaves. + Index of the leaf + + + + Adds a leaf to the tree with the given bounding box and returns the index of the added leaf. + + Extents of the leaf bounds. + Resource pool to use if resizing is required. + Index of the leaf allocated in the tree's leaf array. + + + + Attempts to swap two nodes. Aborts without changing memory if the swap is contested by another thread. + + Uses Node.RefineFlag as a lock-keeping mechanism. All refine flags should be cleared to 0 before a multithreaded processing stage that performs swaps. + First node of the swap pair. + Second node of the swap pair. + True if the nodes were swapped, false if the swap was contested. + + + + Moves the children if the specified node into the correct relative position in memory. + Takes care to avoid contested moves in multithreaded contexts. May not successfully + complete all desired moves if contested. + + Node whose children should be optimized. + True if no other threads contested the optimization or if the node is already optimized, otherwise false. + Will return true even if not all nodes are optimized if the reason was a target index outside of the node list bounds. + + + + Begins a cache optimization at the given node and proceeds all the way to the bottom of the tree. + Requires that the targeted node is already at the global optimum position. + + Node to begin the optimization process at. + + + + Prepares the jobs associated with a self test. Must be called before a dispatch over PairTest. + + Callbacks used to handle individual overlaps detected by the self test. + Number of threads to prepare jobs for. + + + + Cleans up after a multithreaded self test. + + + + + Executes a single worker of the multithreaded self test. + + Index of the worker executing this set of tests. + + + + Caches input and output for the multithreaded execution of a tree's refit and refinement operations. + + + + + Refits the bounding box of every parent of the node recursively to the root. + + Node to propagate a node change for. + + + + Removes a leaf at an index. If the index is not at the end of the leaf list, the last leaf is swapped into the removed location. + + Index of the leaf to remove. + Former index of the leaf that was moved into the removed leaf's slot, if any. + If leafIndex pointed at the last slot in the list, then this returns -1 since no leaf was moved. + + + + Prepares the jobs associated with a self test. Must be called before a dispatch over PairTest. + + Tree to test against itself. + Callbacks used to handle individual overlaps detected by the self test. + Number of threads to prepare jobs for. + + + + Cleans up after a multithreaded self test. + + + + + Executes a single worker of the multithreaded self test. + + Index of the worker executing this set of tests. + + + diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/lib/netstandard2.0/BepuPhysics.xml.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/lib/netstandard2.0/BepuPhysics.xml.meta new file mode 100644 index 00000000..8a0086bd --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/lib/netstandard2.0/BepuPhysics.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ab482ab5027a2d141a6b8234db8e5b1c +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4.meta new file mode 100644 index 00000000..c281db6d --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0c1dc29160d088b449c008c586f26c83 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/.signature.p7s b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/.signature.p7s new file mode 100644 index 0000000000000000000000000000000000000000..de7062857af12d787cd1859732e60006aef49799 GIT binary patch literal 9473 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 + + + BepuUtilities + 2.3.4 + Ross Nordby + Apache-2.0 + https://licenses.nuget.org/Apache-2.0 + bepuphysicslogo256.png + https://github.com/bepu/bepuphysics2 + Supporting utilities library for BEPUphysics v2. + © Bepu Entertainment LLC + + + + + + + + + + \ No newline at end of file diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/BepuUtilities.nuspec.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/BepuUtilities.nuspec.meta new file mode 100644 index 00000000..35f30736 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/BepuUtilities.nuspec.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 57ad12de7bd0a424b90fa6e65daca702 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/bepuphysicslogo256.png b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/bepuphysicslogo256.png new file mode 100644 index 0000000000000000000000000000000000000000..5d395e1f79c681f031bbf7044f73e5ad13bee417 GIT binary patch literal 42285 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 Ug61;AFds)wT3M<}!sN&Q0sO3crvLx| literal 0 HcmV?d00001 diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/bepuphysicslogo256.png.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/bepuphysicslogo256.png.meta new file mode 100644 index 00000000..aefe4497 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/bepuphysicslogo256.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 994c9e52f887aba4d8bd51018a243ad4 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/lib.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/lib.meta new file mode 100644 index 00000000..49c3c633 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/lib.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 13939b529f639c64c9f8ed642ae8225d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/lib/netstandard2.0.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/lib/netstandard2.0.meta new file mode 100644 index 00000000..9f621d0b --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/lib/netstandard2.0.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b3758ce5f94c47c40a26d23db7225cf7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/lib/netstandard2.0/BepuUtilities.dll b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/lib/netstandard2.0/BepuUtilities.dll new file mode 100644 index 0000000000000000000000000000000000000000..0701746e153866ee010362c20539fd5ccf3e9c0e GIT binary patch literal 128512 zcmdSC37j3*StnXuRk!Zai&TBB+p=X_vTVtf+ge-R;v|;rBz7!2yX17YLoC~o6EBHk zDGA`#O=5;64`PQk5C#Hd8zzr13_F>Sjf5eY2N*m9Oaj3K2=DQLFpoWe{Qm#{ck0xs zy0>K;k~j1EC*6C_cfS4m&QhmN)qVczw?|17MJfJ2{&*DqJihsNNS|l_cng~6wti?X z`swbkUi9-*H~;EIM_zsRsco-2dE!+kZ-33UJ8ysOYfrp>+a1TZoqWSPApY?$iH?0!6m8VM>f2QfC3-9PzLe!{Aj%vt{5ljzGpOGOyz@i& z6P34l)rHwX{dob+p4T7$y4R!rM}G<%(I#7+-X$8q$M&2&b@EOEs9UMyUw|g~I}}BS z_MAL^-w7a6*9baCXVGekqE&f>s|tef?DQma4jL z>B6{x(B3fF7e@nNp_0!>XEwFKem*MR1w%%Vm}bK};;I%W_alH)BVeb)yOQ`cQHl=& zIZlHX@Jse3(Pj7sLSEwi2jHb(E_{*BM~=k@$f6anxC^2-gIr3~n7<=VM4J{rN`59c zS))n?dPwgB;V{E9!`^o+^Q4El%ECz`q1y#@Ns*}F=sgRo8&!YXXJCq2srLIZK zq^ZP(dZy-2I%9ZEoQ%LEjnffSONS4{r&T@8TB35Ial>qQlfZLL_wjlg8NK5E(MRZ$B_;Enh5>>2Eqf-7{N}05Gjk?8a)U)V-b1xIS zOe|J2(X9@Dc`l6=X$xI}6t&(}`*d27 zr>QBi(sD;J4XAtsWcVmuJ(Iv|vTY}lhJUeS$Q*ONic4Q-nmIVlS8?Alhfj|?d={6U z=kN_Kd=~fZbNGyh!)I}6v%@#I@L9Yf9t>-e>2gWF9C_l^umlnO$~$V3g-^+sAFgTY zHM(-CCRzBDeEE4bO}$1}#tXyEL--td_y+h34S9S5qg-$I^hx;eb*E-gegGYQaAFQ6 z<@S7(DOr@^hP|*dy?6z%+QPDCg~}2521-_nh`0^9_QKv@&Y*&HSmHNy04s%*y`+~Y zz0*u#7efyLZqGUz>C@#>(<-uJd(!6xhUUuWO%)mmVKLx#SZXA}omzukHC zyw&Bnvp*RuPHj5USy-Ow6n&_%^vB+J>(T6+M015ElEtLJNWVCg?>~chBUf?`a*Lbq zl!|xV){6@`4TvytaXM9{rOHgFefWr!n7!&_(6`eSxNTpDk95_xJp2C_xaoW0>T-6? z{>LAGynCMXM|Iz^ueJ%@&0f~Nrz*?2Ior3fN$GOw>5NSo*8*9!cq@X6NF%6#FEYUv z+MQwn>9i`ynN7gjq9n_f{&;veW>*Gw51$-$7l*bESybNufPDjlMmoGAPTq$u8yAqB z4c`>6u`$u-ferB*aT0xEoE{9nwbnjgZ|6|HFnpJx+;h>?BQN>It53%>tA=&Ywu8~T zFTZDXdB@gmue|;4;WwZBTJ%^$ej7BHGBgzntVnvpE0QwC3}tH)UdZ@#IFXnfIbEAeVCpCRQ&q z(HDZ>TMlL`#U%i4|FKV9dgWy`MKjXg1zPlgJlV9=Ni^8+pFa60t-;9Kdm!0#pe^Xe zDR4)oFZKr0iwCl{y3GqPUdtt&j$E>9aPl8P+IbtMn5kkX7?@Am3(M2(Wa-oDyK%G% zndm~)R~$D?6$qZX?6c5iIVK<8wKwaSjM=V}(G6vEn=)+n;3T&6pN3b*$z^dejMFRP zbQlk}$1oLD7M4^1!d@ZlcL>`r|MJ7nTm{1R$Mzh*ZWSEhy(n5r7BDs4%ef?t5M*8} z<<@jr8Xw;n#oPbQKWx8dwHIf1-@E;D8$Nw#b%nssZMgB!W#{ty(+4k0;j-NV#b{iZ zUfdRM|D*r%jzgEt8lnNGMNW*tbR4hFbmG-nMR5DuKkaH$ZPkP&(_8zk_UJ-^e zjf`#!$>hEY&D>bA>9>+R&08G)dJocDi5wNUAX7-q2wZITxX4>f%(GXZ?uzt_7`VQ$ z6*&dRyBH`$#zTIdkCNhU7q3?IcO`CdB?U+dePC5`#uUgXZj6%c`(FFb4~tVQZ*9MH z@O{rR&UAy>U^+R3Z@g^fno6_-zIXQ1&c-H{38na0Aul#UFxQrgk{1eKPb%Zd2s&4= zDALNIWwHcVUasXV=Y4p#%vmNUmeS^C@0F~$n!KNZkBp<&qVl(NyVixr!3P@WRfg`I zkErOuf?4f6V|*D3bqI40mCFk1H9bEy9~bu_KqqJ6-XU2#_D=%(ivL>39uOLOK(#U5KyQ zcnukz_HiYSsVPM_ir27kNk{xZ853zbA~nj}SSAaUF=eGA@=3B0aR9>XnvVE^GA7Y< zME)pao=Qg)lC(!;k#t9FMhhI6j`)ExCZlvj6_U<~%+Z}kq{Q$zVjEB{#n*@*oFG>hu1q)_aGIf6Qw3fya`V3^tSB5S z`T$jlkznIU$QCRiTT#d?R#}p?yG|yRabaY!N|dC-K`o51a?m2oYtNYTgK~C5^cXJN zij(k)yEeca*~>4#r1$BYgD4Ga&dzIRH73Cs6@8{m=<>JjoC5+ zGwIPP1yGO7SD;6`to(~aOD!jq`F24ZMNm37Gn@s}$r|;ZnGbWvY)5V>87tQyrh*(Q z^_oZK2vRwzYyQbY-{dXxOP(cbiVQs{_4Hw*Q`;qB6_!qrmZlO?Pl;M7fD9C*QXp?T z4KSg5IeFJ<0JA4)KpykxarA|TFO!FUCrIT2^gcl<4dxsq&|unWFcWGp>ok~~tO2>s zZ*ZNa^1((2sWiZzD=i3;bUx^6mZ|v$r@_WhgWPE_KUo8E#qt6DvmM=pH5@d;7|iUn zPpn3jp7yzl5t;dEpQ{*{4U-AHit*WM#8~ApO|V17XnkMtJk;;)XWKa$p?V{$EB$sV z079tm6<#-zMV_tZZLCd=&v8}rRBP2Jss=L1A-1)bOWC~Lu9#6Pqi)rx8GomxXKpq) zVTS&egL%7Ca>I8ioWY~&)x_wgP}9vk%Y8#!pJ?2R6YQ3My^VV8o73<&u;A~*(9k}Y z@qLqO{9J~=Z&r<;%bDS<&a@3_b#{lf!`o;h#cIEW60ukN8A{JrsSN^ybx<-`w=DD$ z8P{FO)0MoH_m=Z4@2&)fva@4u%X) zl4#BX$qaM|)<&~jo0^mdAGJ2x6Sk$DRpEr;*PQ=d;CXiaTIp9(Kes#^)9?5M1(}EC zyc{QK3od`KnwMMAd(Ngi%tc40(UrshCpvqAEpG~K`CeyB60h{&@#(qNT)Hwdr=TCo zZdLHAk03d!v^dlb(1H}HFtpVEXvffkM9Jc0IXix9D_w3MzjZF{94AJ&lIA+N6TJ|F z)wvuK#ujy)3|52bGMK1WSIRXc=a68!oPd9bY*xy3W`KX)Wc~uLU{3VQf(iVoo5L{v zm@%99A^!m1_;XDw0+I)_duf1yh2aRWEMbCcMhvDx5OCmiU|~1{tXfnx*+OzEschho z0Be&bfsAt!0s^zSkEM$U%&B7%3>-=*7u5klC?Ozl65yJq1gcRQ9S{h-(x2YWB+D?p zwe$AsN+-v*PB+IaiN!k70E7DU>hi7qGQ4Ea4`bKILdVCYkCloKK_810j*eP5^^vct zP;4Jd6IG~mzaOaFKPPZ$f0L^SZQ#5r4RANg$E3eG$;&Gta)&7adm81c3?|JBGLO@E zpg)kyR)-8)FDP%7Zlpq3Xq1h_Z)V0KJpEH3=?TXaJk@KE=Ql z0L&>_H!xZAh2!1Te6vC+DU1M^<>vsr2@c2ykQvxUB->*M*A?IB*A=PmPbL_1?Jm9D z!`H3U9*&Hpt>Ue~wKZ}YZH=M``wF=`F%lqS1BZt|h^#%)R`ff-#lC~%+fV1y0++ei zW6~*s?0E5F)TZsUK)ZMeD%b;mDZj7-#OiFTqa}4$pKX0^2h(8n3kBeh?0UkbFzlnM8!6zOTfh!1B=MC?5`)x zP0YiI-dQ7ZQmGuUkuo(huWcNXd8ql*q%$|sFL-7TeFMq)b|vS77b9IwwKWpD1?U`tT+mF{ zB0#WYF{k;y6%d#99LM0pzw|U9$bEjU9m7X*`l_<%3{n%uD>Oa5)}*{~q!?e&e)V|! zh)ma$Laysb@lESUske_ddJ&(oKG*RW5!R^DIv!Iyd7aH; zlcjjGodSUr-{fp*N~yOyk4={1%^sKHo7Rz1Zsjci#M}2gUA`a$+)n(o-W>uaW1~exUgF0g!;2}LEoXAMZT+_%_56NlZ#h7 z7;GFD-xOLjnTuC@oQrR&EczG3EKpnCJ_g4;^_VreOtg^B4F+MCKi-UB_Ba>cR9RHU?448UW`2$3%^L4#YNA4}sjgdXY!_-n zDpS2&g9TFR;dfk2iki+MMePkKob<|-f@eK$i)X!#EuOV&Z%8p)n0~df-3xU6IFRCt zRhBzavYwoIv<05R8aa*LXJLXsH;;H1nk+Yk2-Fe46LK&}NNf<% z+4c8iT{=xpri;KKJJUsA&ohor!M@GBZd${^7@h^eg%HnzT!yb1Tukr9_lO@TFR@HC zlrLwQxH#xRI6wyo;s?rD-KQh+z~K&};`9bVXt|Ot{LpEQcjHP;=LWv5)Z;XrqP-Pt zz^cq073`tY7VW4&EoSDahb*&>JmQ zw#{JM3fd{sqaH{Z9#44E{}mTvAuOR$+}f? z;4Da$7YUA3D{aU(Ns9NDzI)qL6kSLiddYOAFl2Hwo|d80GX-;XWyT7bVuv;cAyZIS zS7xnX1ZZQ-j1`Y0O3hBDWLWKHN)_x50)rXAP3=}GN&v%fO03}CsFTG!0(0UxEpSJ= z6vo6tBXOJ>D}Bf$*jZ58CK)SzC}NzLf1qT#IUQH}cx=cxF(J`N9H%&T>f0Uc*D9^s zU6$C|=9!vRWosKZS5c&BY~`~^E^XXxMUgIT=OUx{cHSeD!rS>Yi%M>eO)p1oY(-r7 z{0I|N&yV;sC>sEoFVCQ`;s%$jIEspmC~cKBfY?~lsQ~tj+8Os8lpC0)L2BEGZb%9N z%o}BylHBO2=M~7GZP3$rIMLJ4t?Fi`dfD;VfeeCK%J)%0(vIoh4OGuznPk(jYV4fH zZ6$Th$~R$WH37IWeBAgL< z%?dcCVFjyh9(pQ1Y#0q6N+Yl1Q}m%9FwLBaKCGLJM1N{NtjBmBKCB02{ww0cZ$f|J zUwBd~xWg3OT?)o`ck|>LCVq8a%oPs-8jSSro{ZrRm<0z#recNb!iw>|75yIcS9;ylES*Qyz{vZVZtDl83y=g7xa1Itv_83&<3lMVbi>aC|Gzf%q5oCnT+KW>yRGYy zS`+oMrrUvEYoau3xo1bPV-{zZ|hLM!>8g#PtSzyhEF|0{HkvFs$)UatL=k+FK*iMFLm)@ zl-7>nV|?#jO%@gEBCP7t(hP7{?v&MNmlf+tAy>P0wH^OJif_^-<+zl3ySq}Sstz@< zg??H`if>v+O1<6fy;~}IUyOT9O@S@cCG?ou$@*-2?~|o?vn>(A9e&^BY-viVw>ytb zmg3DGm*Sh&ky3AW9%Ej_)t#Afk127^;xV;9k;f)W@n$;(0x7=9+0v9!Z+9M>EXA8W zF2y&kBcWQXaXhbmQy3*0@Wg$zDaD&TF2y&kBc!VF6-t2KHzG)pP_4ZmH zl@zv*_ff^gntX_=9CC57_Vsg&Ew#binZ;|j|H~W z+y7;K)LZIYTi1NtDGixS&h(wU#U1tg79OYP7N@rRg!%&*CxfCg;(HEu@@aOVeY4l!+b- zq^$2Tw$ui|rpG+%b#lzJcI^#YEXT&ANVgy^ffR36<@Z`2^=4J=wLU6V7JXk7s^emD z@d7I@H7ROu*utvaH~G8B{&0a~k{VtM7g0nAggnu@w#JdVn(iS-54E8s znFn^J?4t5o^%rohnr08;8B}+sERFiOCfd$+J7YwpgDh)iWib3$!eA$X&!c*)9Iel& zfLAacRkXM#;$7%)z25>}4$C*`dFL5jA!4hrp4!-Loe)uMqD}~=PKDw8x_56AE8rEF zQt8j<5PU~;$bs=*WME4`jLl;o?m&_-0%i`YZhgNr+(PCf;D}YXCa**wxpWc}B?v)C zY)vBe7Rm2?Zoz|_kqMYJEi&S+jl#G?ggXyC%~v+Z;5JbJpBL>XFO ztMRFfu+DFMDs^lCG$=!0t8&A2;;6MTGnLWjU4YQ`e#A=YRrohgs7laIHTbTNRhCvhAR1C2Xl|;iSi`n?fF*t)jht?3J zYJk9c4M7SA2&|7Uf&v5+(eO)nP{Kq62$Mww)+!CgL<9(vtq2e%iEw-5Z=Q-GoHxcE z_A_9beY)xPnF8=r0Ng~t)A~T+ry$dKc2v#mo_yX^Ev(GCuEXs(dr?JKBZ0aDo=5dm z{S;)^kRi$N0I*U}uRg(DOiNDSd&YWRwZd;Z{48%9e_9HB+F~3#uH*A%DxA2&4oU6s z=rh4iJ$f?Krwa=!+1PPr+;HQxEBjq`#kBZ1Z>ekUe|}_tFyk=nO613>_4PFIi3KGOS z3Z@9PV$C!qY;~m+YQ(}Q5lUiXC3Me9QdUYGjaV3^tdiJd2_3}7N>Wy8CfPI5C4zA; z^)U33u~VD;hp@d|lVJ^J_YXd0Yckw(m@3<+fmdtCTe!BhE9iB@_zBqMh?WO4}Z zNLUWxuBRw?2gTv>K7nNu8pWCrheswW%8si(0zIK|O&KWQm4RZRGV5s}6*C2T9eG}v zNt!xk_OI)-4HWhTk9 zPPLAv)@jz&g6WOScs{?Fa0j#dikG2s@2yGkNsUCzdAl#GoW?D)PXliEWn(?_g4EUh z+8+a)Z=GVh^@W)4VTpFs+UKW)(6;MbOcl{iwioAM^y_7r-u@DP>J2YWsbU$b+1pNb z;tg=W3PJI3$!H6x-}99fR=}HM)}6?PODQ854gHYCI97v{`o14^)c2R~>t&c#?eDT@ zY{0u}NON4hi8az3SH`kNn&XN*YxL`Jc{e)_Hox(^c#r1eUpjcj{+21DCX~rh3{fUO zu|t{M#B7)qt0+%9P5$y=hG!rZsTuXUbmhMGs$RI!xpg+J%Kg-FzpuM$ir>eZzW0X0 z)I_PSiA5({O;o})v4|#`r6v`OA&VB%9KN#g?|u%8d{FQ=lrq1GyZ4pvP^nypO656J z$W6`}j_2Q_VrFCU>mjSF*pjiaM{LR1KFjII__IdV_PNR~Wg2BR9hN$wN*1M7s8Tzp z7iu!L*)RT^^!lxmr5kRaz(~su-GA+seuKk)+uPWRHY0xv*l6){%K*&k(omnvc*Bnr z)aUYy;bg0`R%qjWAy(?(eIZ5&7+%yv7J%X863J2OSk7jv{jQaO=N1rXoyOvUbAwVY z&sOrz3Y^VZ0L#4T>P;?utH|oIZpu3fwl6zeQRDR^AVxSio!}%w7Zu&KFA4bmk&-!@ z!Ow6@>Wl;=)-?lj4qG8MC;xXi5Bnr(V@|HMyEWEn&<&J7Rm$*e4c%d%d?yQYE92{L zSZMRjH^hdMpe!-rB-bkdb8le*tj!@6uan_>R#xnY0$-zIXA`>cU#0)spa;&-V~ncu z_^fAqoHB@UsTGxR@pQcx5p&8wE%zcA#Te1(IE5;Anp!x-0}Z`j|J8ayp3}>m zs6ct+deDy)d-37U6Xj^FLbR4vp(Rd3LZJ*ttFT5T|;_wnr`?l&19Qx_w6-#}-yA8!I z_G8e!TRK#Vw`cizK}SpT4j%2l*JdKT5ouM2OaY+3kR&)}nq$PkRHDHUI&(Zk4!iM~ zP`y4DZ~SC0xWe9a@}G1fiJ~iZy0O&yj-|Kdg!Mb+ z!{X47xEz~MVTg~1c*li^DL5%ELfdqE`|nr057Z&*;wxO9 zf|DD^%VTuB77@F}t82QW6W|Sm*trt{zNjv~sHp{Zxl$$7lFVY7@coXq4nTHu&c@m> zEk1>Ud{wpc7#7?4_JyiFj-E?9@#n&8XPmel;6iKw?mqy)tTX^G@&RBT8Gw5XrA~K) z-yHjvZ7lS-UVXX8By+ToWut{4w2*hBg&?$0NTa2an?*+}`A?dLP!vX0wLdA#2Ae|Sd1^cwlVbDh#9mU8Efy+&3pEa+ym4uPv-Na z_%rq~_`S~m^$AC=tJMT4C_2PMy7H&D>>1-qPc@fe!^z8Z2A zH7AU+ehiX023fcN%G*_C2`59k&ArHgML-x02VoHq2EsvD1cd%_5QT$tdoUi8lkM6E zJPi=AG(f=709AZD5qD~kV76{Q%)QbC8w5vD$hLp!@i%`|Be>oZj@j`TrNVQISo3Ot zV42HH4G5~VI09XUw8sEsZ@I=}EsOmO3m&WE^^={pIH9Lq3B()=W6^Uc3vSs|Jyj*^ zMj)l&9LrZvgWY2Caq3}^?^UEDWj?5gO)61CqD&!Kg==EeC-CeCH?)k6d~E8tt#dO=0TUBSW+OFIJX}$YRF93+!ZoU>M%sWjhR?OB z$TkLT89_^=cU$*m`2wV*cp;#++_F$oxtXLRyu{p4snwCOi3PV(s07R9UX}TzxEG$V zrCL|-TenWe_2f^(FK{8QnU$b6Y;YvQ#jG;48VPajtQ4&VL0mtR%JLuA(5%>t<9Qv; zTBp3nAvUfJ*VAO}+Hg%xwyuWjYC6kU^4gj;M+cQybC|rwR(3E0kfWSS++79pydf<-`N0Q2s^&7u-JO-D zf{MJ8X4X|0b_1o{W51{z7ygQ24$nO#8bdJ;BJb&Pm%@r~Z3Z9&OYAC|7)7dRVi+N{ z3ktX}U@j=Qgbo7c(%!YTEzL2~C^+HWC|uvmZ+3qd*Z4xI?D|*~@%QAQH`Q=m)al)@ z1bR~+*BOc9ly`XVYPC+aLHI3Db(e;onoEchtRsI(h-+*ZV0jQA@q(*2+js6R;a-(QoD{y zqx0b}?7WQUvDsvw3I!&{MjD^(UbD0?@s@;AZinN?A#Ln7Gwf(peGaG;r!i&h4s(?d z3_MU78$)#tw@Tw)apRV--8J@kWly@ePUJl2@+ysv!%zG}PBVfwdq{{0cWZ1vR-5*2 zogP4$C~lc9sH9VS&zKmFu_05Q0CG+#&O66JSr4?bk$?<5V^2}))?{qryen(syjI4T zygXyir_`-tLGvu;p(_k(8hfpbF?p5O_&NN2c{z7{+2)S(d1mgjZaJ*AoLdNMh31yP zBeAwf1xr=VM|jFtYj(#0SNa3(8X!tYec-kLVtL(BDTP{xcAB&gC0TAQpa8> z#eVOaSPYWL+L_(1oyDqMr4b%zoe&y34b(^+Jx{Rw0pT1S=_>+A|-`C_Ga z@cNmcShbs7*FsjAW7nHY*{^ACc(E(<_4^Vvur!U=$RxyeOqpX%p5kmHTgY>boD3ZD z6lViJAy0NB3zO5+cnUnuQ((_C)%!Yv>sJyO8}qf)Hbc#Wq<8P{b6{SR*m6W#psSFH zgRlq)O;#s#U{iqC&$mYQ2dS?huAy>RbT4=@Yy9YG?^G<2$=)e?o2bdy6y+LgM4;Wr zynD*Y8G9d3AhCMSTGAAI44lSa)iXwWyR`6XSqKTN(Xtb7RXcu&?F}XywzLiFoOhx)DRgj`K@~~*Z zt46AIURx#0r9m}l1gE_2vGa_0uDh{SRgF3z!#kbfdF5uGz`5}1-oh= z(fe43r_mmaw7BnrGvMfHwojk%7j5{O=G_(K*@Tn_O1S%>Ho$ZKF-T2Y137K67avfD+J|Ggg0!*A!O#z&zTlNnt0OYT@>j;?uZ+uIaSmWUegkB0MNZ(pq*H*NHERlt`1l<&bAZ`wHd#Y# zSOzl7)Bsc1!L#bEM}TlpXd8q@K-kYa24T_lkFTaa9heiof39u6XI|4sI9?yS4h!RB z$p-c1Cd)X~lx3D|s44p_2~kttS^A--H1H{?G2x#fV6*zA`Chq=o+viffzbEFMxU!Q z;8SJGYPO6MG^_(`99Y3wCTZomV#z>V&Sf+DtD*1{qje*r9TyWUrEnz5(%5m~7lfLk z!YIWU#}b_^Fr4!%ZFf8u@&cG&Dmji@SAf- zkudztIesfsbNuFaXlh;l~uRH&t9?qZa7+Ch} zSC!wrW5JT%)izs7yV|*yo33`AC8w)xvE;N`@iow}%)vJy2d`3pJS?X?AD^~_=BW?Z z!B1NlBd_p0qXXYmf^`@Kc-UYG@X&_|2*`DE2mp$y_?6EouHk@{fia&}ta#CgdDRQk z^_zPzk%v&g&l8pcDr73m`IeA?tI-6iX_t$0FL?zTmNr!Sh$H7=Sui3#U*X70yb-bZ z3P)8al5?`vXfx+!tI?yJo2^DG5Dd&v5`YQm3dIjK6uK*nC6@Wv%0&uBU8eJTh`}fD>QxYiH=smX!Le7GqpWGn`H4}ut zS3^5@mbjj}M5VSu6`s3Y?;^+KEAc#`6nL3zunTO+Gkk!hTJ_ z%##Jj7u}rD^qDcME6qKefSZ?8<5njLP7^lm@vzV?KqUC;rllYHrpL)sDd^ABvsb2hoRFRQ$v@MOI;{; zk7Q6C%yaMo7dqZ7D!F)wSyXbVgL!zqyw;wMBmLF({cV5n7^+X+t4y{|^!&=_Gal33%IXC2V4{U*&2?gDh;gk@u< zk~n0`>>6k5p*9rTb?wAygP88UBq3XxInLHY$Jy4K+?c6sbLOgx1x{el?5!7-YaClT z{t4e18M5`}+E#>P>!IUp>rG+b2-$j@YHU4poNc|yIYHUxBG7b#S*nibUE|m?#m?r0 zF}B_&w_jli=Aq+k>rG+b2(|S#)!2IIINN%YO&q+J@KpMS{8ZPk>>Fxo$QbV%b(gyB zmdPGr=XV*?U`qw+eM6&zk5tLlj~Uf`S!%1M23uC$n|{J<3)ouUnCJw{nDw0ycDbe# zf-cweZIFl!ZOsWG+oltY?L;R8J-NZwoIs+|RkA5?LSSiATk9L^J0WD-bV6Y1WVRw` zXlqUg*~;88Z3UgoR!t4ItZLq9thL=pJVf(aAcM2t^R+UF^l`d$b^Xar0 zHZSTdxOp*w2RAP!F*yWD+yU`+Ni3NNQdfjbygikEcIwN{uH1lJ57YRz4J>KAHC5K~tryJ7CIc@f=$w-^;BYp9fp`2k1K(s$;+|4JpD4gD<0cCj@8^C@aaq+INSYP|0(>zDnTvU|8~WU=^^%De1l`bkD-bZ= z&zlyA0o9&-L2TonCEX+oT+Rd*_@Z-BAix(Z4V{H1K<$knKh>P__ML5Dq=P39j4r3V zub=wd;fK{ z14IfKglDY)kp>3gfh$0?UNs1h-`#>28J>Ot3dI1@SUJMV0xLR)^C#wNUS1I`e4>bT zfM3`Evkvf!8erA|esKfLI>0Y!fLRClr42Ca08__M6V?Gf+5oc-@GT86>j1y30cPFi z!MEc+JRViYd1;zxrntb;I5XLDW0!8RJ3J~~!=rH(9?lgQKk8M(lh1W$n*8wewTTJ% z(R=2+iXTq97+%27@ap_{?2DS1gPdUUHb+(rdF+cGHs3fzddqwmAmWIFF`&~NBDEMp z#Q6t9B%2x{1qB>&F2ZySIMR$Uj(9}b5Ce{e*x+byJIdVI7yPzuC9Q*pXyxvGaCf&n z)4~d#@eK~I;8}D#A)^t>UN$j}N5<%7$Jgu&nVXwK33&XO(njh)E_<$^FgupxSh$ll z)WWd{HE}E$a40}do|^6`ZD9UbSW7!(m7}KKpe7Tiv9l#O)#GFbc9-f?j+3qDT@o~-w zJZEqd!+!3MwQ+18cxyzjZ#DCU4qgf6?8<7=yAr_^C=nA&lPgXm?nf!W9)|{^_&qk z^NhVJCF3Rw)41x+=2c_td%ZCxs%Px2DH+$bC^fFLh}VpM@@;IkxiwhUCxqsl^MwzA9!`` zizrHV)vlu>b&b4iJ4ENiPFk3`rkfiQ`P6QxQGLleu2H>RtGl{J-sGA_b+I)c)wc)7 zeNQyz>Z7P+k+UpWZ4VhBa1H>-C7C2+;gFKWzQj3>F-i}~ex@yiXuui~TX#ds2cIQ$Zht$*2v zuXcTy9n<>o7L=?HZ%3)#hb6@NFpKKLc#Dbpu*7}D_hHGp7;P-y{y>D%ab~G?}OuQLWzx59DyoQB%1dV9gDaRQACbSJ^kMqjJ5yrgGh1 zWm3zUx?VMv>xpMO4Ijbm!D-P3dUHSP0CTXk!PLMSJRA7C;Fj_=7XiM&!v9d6|9&lq z155(M-p;*y_QAs=p*jIr>>tJgn(bPEOA!FrVgTXj{wg*=^q1%*!&{uWyy|kry`?1{ z!?STt5QcHI`(P!{^a*)-jP-f`MJwcznpIvY-$(|jSy<`wA?F3>i^|E)7Y!%>+LJ{O zULeXiQnvG!iLk_xO%lPdTO3_n+>4NfCwd1UiOr{rh{_!1Q>Rk(f+EoHRYt_DfT;EK zlSP}cA(a*fIs3gMIjs!Xr0p@1VOvW&8H6;qfC#UcBUOP12(#fgpL__<5t_f=mhk07 zlB6Qhdc$|bwxcvU1`WzGhlaAu?rAn$Z>fbQEyS#+TAv{?z@&3;m*hZF?h}%Q^-#k$ zmbzAG^0dSkamX_OYuK`Z&+UZ?`z$=AtvzrP^0X&Z)P+Nyn#&FQEIdsi5r;ejaL6+N zPvog~=g)wr1Cx^}WIP?1oEmzj(Q_jEtH;RFnA9#hzNa`xn$aF=$<1rIDn6l(=OV$B zFzE2iD#umeaUBJoXm^-L0nadx0-kO!T6V9`Gt_hAWIY8Q*Hhpp)HC22>KX71^?V|p z(pFc4&Y#9J0Gpo1GXP6Z{@@GKPcQ8i0{}>10G0rd!!YMkUmll-i-519 zywYDubRpzCgYiLlmJuGkpEJ{z`*e&;ZN1;w^`m9r^3N}lj=@ZK9p$@_Z=_f3K_+|g zHS4~S4st(GP<5R8crQo04oXMW#wY9g0!xlL+jT{ODM3q^^DywF_9KkYoiYyL+pUFY zLAC5@L5v%~Dqv$!XFTw*Db8Rzy_CK}ZP*DIJ7lZjD5>iep?OaXcik z{g?$g0zg^=kRbphHGnLm9WQitxO9Ye;cs1#kxR=)OW?6ai&!h)u`L@tQ~kD}roFVK z?;VxJnTqz7%v*L;c4sO&cx8O1q5}_q^5lE8E~JufT}Z85k!siy5wiLFPqlZ`U*kQY z4RgIo(7A^D-SE{Rk8#`p*LlEQ03e-}2e^*YAG~B+@BFkCB1-^^pFR!DI>6$pPXn_K zFnK5XH1HG4(!e?{OW<)?0*}iQxRO=;+d$3t!8IGg{pG8(r@ z;BlJ-9=A#0%BI?HQjm9|h!tAhjLQ;uT$aG&vIIVxtYFm>$_l`ttNOL}^q0FaYWumphg z^gIEmc(SQnm#sRUFoZlE=PFMfXP+?|=~-MS za6)}GhIjtv(fu6etEx}{+?R_O~8oj~!$IqJ7J~jVq)@0o`()X#wLXE8ZM!G$< zxTukJ-$?(Z79%yXuBmg2rp`A~BieQp`nY+MlB?N}BQkMjdh(a{e=)Fc1 z;A(iU5t+Lh-fKk0R`TyO0@Hcp?!>slN^wy@m8y-ngV(!Hh6#K}mK9*zqr*o)He{7}MHscOHzIu3Az$15Ms*wBq zp)o^G=UZn6NT)3)?gjqtkD~#Fv|}#0&{VS8O0pC$3>`wUw8@vl=I#WQ+lQWq-(wvN zt?#jKB60Apvoo6tXs&CL^O56fw|7MzV*AvYO|)!&YR;4$QDf9vYp+3J#E?mGCCCn7>uJs(PdjtR{qIe4u74bI_ z>A|;>djg}3Q>fIFWAT+#YErLhANs(V#~(MZE7nQ$!}!MFRt5%ATXAJ3U08oZX|1Wwv{8}I85c0nGS~0XPcCD zP-cw*ez51}?%pKn9!+k})4hD*+0it;8NU*>ynJ+VF1fjb#tuQ9<)h89_25e}I@sAm zY*TaZGKU3sptzm|>R3~y1=Mw1Jq`=koC_w|%;28cK|j6f@9C3HFbHS{u(()Px#k@} zDW?aHxg8sGkB0mmK|^Z5X62|Ggq!@2&ZS*9fCNo*>CGBJ0uziG8q%AWHL5HO$6D1{ z-GDIOSfyZ|E-Z7rHyowT!M{acSll!ghlcHKu0gTR$( z=)r9poVn-?uaDPAkvw|l{2Y_>>hkc7O$Zj-WOM2i@n7ItL)gQ(b6;l?l01kDt}Vm6 z01{3>Xf0S-QCX~BgfMvQ%oNup4>WlW(qb$0UoBow>?MS&g&1w4NoD0C*|%XTjoGxl zR=b!r?E_%yif%w0)7G+noON;6)3^k{a$!q4v$!xn6?Y1(#qr~^Z^Y-WxHD7$vZX)X zG{hmYuLUser;A(g;#160hWT~G#9)L~i}iwR>9I}2Ju!4?6gW-fHx}fS`khRYV8|u-TKfjjC3O;5~c_)R+EL5 zyRAW@ywj*V%(AOfy*v>Hh zC{Uf{vY=gjlEg2;>zx^+;@_i|oY}M=1`GHWh%1581@TX#?*Y%7z;hujXy(?fx81Q3 z7W^fMcYUpK(y2#ETTpX)0Pka!!=2cVQ;@p;o@d2aKFVwZbZkUeqpR*|-BUaW9qPo? zIq5toEtAxI%3Hs59mWv!#p1_^;+mjyi))_fX6T$2m%@`&_Zz@B-LntUqk`Tw$YB3M zGQbb;w2FU2xyf4Pg3Q8U0t!;377yn268JwK{E=JRown~`-f;9y)n(gCm!-e52}s^} z`0k}ghrGUx*(ahG(5Jn@^x~Dqp23u@Cc(Z_kj3yZt+cM9brTSrsYY$4lo&Lo)GRNRGyuK2zcEQf>PnPgYtgctwY*=1v* z7Uj1BEgn2((oP2K6e2n!K1W8$ZVZq5!!U+o8ZRX5dLxX6G@4&&fuXoJ;xH7qPJI^i zBTNQt6-YR@jxYrf#4m+ygpnTH;x&Gg<-*Dc<1s)FF~dd-5U$}k+Ch&bqW?9f+-H36 zyR|@P?cI%TN}O!(^%!JG^zhyL;Uku^;%VqG){dFRn(?3r)jIVH(DS{NRL(SUX2Kwc z^7fVTyoPsj%ZDo7h7gLs@<-7ESGocrW50hlXkUa}iPz|e6Q6@9Y;ly9-Z>3y({yRG zX}SOR~{Vux6mComC} zdmK-9x)`s){tFESsYr^2m0l*&toU{?JUj%P413U0oZT7wR&*!$yjU?MU7*o{=f!JO zk1x$-(`NigjaOG)BTx#1yw&iEaUvJr0jZb_P9PH(F+cn&U8tCBE%g>Nr>@i@ovE7~ z8D3NO0BKvA7fe@EEOg6RH5h)z=}zzNp2Mtm>NC*j!QJR57(TpN$=(jv7r!oTt-l~? zEr*<8920nJe6bhMW&1lZRwyAI$LSXRYTPFYMrO-blUeSmSiYn*RNg$ZNopgXaNXka z3Bz+b{ARbWI2f@34kR>A9@@as9OJdy<4pOxrl#8(F$VjwE6QdBgLUN&3)y!wZOBXU zVIdoSzabgL!*?H;b5xsGi{EFqCk1xET&%f1Z7H_`_TnY>$-5NhKv`~k5;ZAc;vyG~ ztUY{pvbPP!`J+t%V-}&`(@qKJdi+A#?#RpS3 z2$OX!CIT9RWO8xoGyWVviemic?%i^E&W28U@F0qml!eIGl|pc}h_wUV1Nu0+1oXIW z$&2>_c-{d#`$pL~cu$lA8xn~$!MHBvK3N={3w}3(U-AYn ziFa*C-pB7AlIhD#zX2}L#ns48y`OyRpnpdYQkOyuYtyM8B}~_BFL(A1dhtEmqUiC* zUwhl&p8eDD){S>=#PWaRv0l6_dOV758|?4K7ZP?ML4OG{fzBi7Jb<>&sJ@x?&8Tli z73;8Li1#h=U|+JZI2A8o^|2Al+6Y$`m^*0SJEp)1e~--Ja;W(C(CZNlaZ@T4A3*hL z+$IWJx7Ay5wj^u?*O2z=dh24nmA^$B$i*lc(w?bng%KcZeXQQfF)h&f6ZKZ4W!Q?; z2<2iZ2wO2=gst0at-J3H6y95JdQs4XWmUj)_vJwo@+WLMFKEhZO@2RW1N_9lxEY$i z7jRpR>gqofun~w~6R_d`Ul6e2b~-11q~UE$R{++Xyn7TsQg`g`d*esy&fL8cKhkjE z4e=ulzg-?b(s0+s@gof{ zGnbzFkJRHQDFvhIPvJXW`)PcxXzcwN*3%II7<<`Tfd>Xo4SWZtAYnUj^6=ed!aDE{wMxTt5F!j8LaBPo`%!&4L$~T<39w zx|*fUC>2{YV9~$0HqsgbOH)$tS+id8F?`^vMUXT*v7ce8nlmhDRKx98Pm`?_9|slm zP9xxpXLA0XyhZDA_FmxVY`b^io@DF6+wkuW4AHn$uG@|d@33Yp+P(4S9y~PXA?M%0^)MD= z3XZe=;!-yY)Dm2em9VGbN*Js7GJZ+)MEF?dmiTwMh@Lp$<7o+Een}(rjOZ5l5IeEG ztKN+YX5|>T_p|#?!wnr)GE`=;Au+pnWDd7=^<1UUT!PKEpC!K z3~_motnl+XVwH3&jt`P;7hJpP-XA47Zir-i&gVukd9)p2DvFMbgsLAilfbyKWJF$y{n+Q%6HnF|YlG*`nC)xW6V9j>3J+sap zQ%Ops`@ggFA#yNUh7QQxo1g)@@8aRnF%wpforXSMUoqEO`u+iL;|=<)K|dSx zyNj>u_VLDw{&e2z&*WKu7LvOn?9XLoX+yg#ZS0h#yqnJ*UY^CvE;bxyCbaU6_-^4> z>vMc(`CQ&Rl5fbTkK`NknIn0g&mPH{Gk8^oJhJpH=vJ*c+{+jgm(j6tE17F$7ph`S z?X4SwCRn5z$C7r$-=kbTtAAnQ;)|Hy=F$v?WlcZf%^s6niZ$q%OY;_#$8i9-@B@Px z=fw8nOFI2d7e=LhMAyZyKb@7O8NM@w3iM|?`SjuCnQlH~UYnKIrt{8`d?xQ6$!F;= z7bbJi`<}FekaYA3=2rgRbUo(=v)KN%h#v0aCSab9J0Tr+0zx(0g{_|)V8@xRyt3WT zI{h{nm`D4atSohrgol@>ks2^C@8lUGowtva9y4n`b{1=#{&zrsTpQ%rvBut*#cgIT z9qS12(lk@~bAukNJ3pgYE@xX%>hN+8*_a-Y2`2n^>%t{3i?Ej+eGUDUZHv%Jmo}&n zO)VwoEp9w_ah6q}EG3&4rxtp1ZL6-%Po20N5pA!1iUaAkD8=1zyK#pR?766M;?j+z zAHnyZ;r~@jU=w3;^zESFBI%d$%^R|;^KKsN^HT%W=UO~}xH#8I@868^??HadbzAo@ zu)>e4{u(Tw0=Fy0Ee^RQ0k`)*HEvg(Rky`kpMqjfKdWMk8|OM_HktKjHqr38He7!- zh!np#+5*jAf%wImwy=~7rmsxXf{hjTW6Zrx{bK93XZ|3F7N)Oyh*p<5mb9xueYU-T zAC+BvPKR@ihK{|@(tXb?#@liT@C`@st8*g6z0rz+1cL%x@^rBG=R}NwqrGQyIU039 zY4dJZ*p|@g!FxGPaw^zZ4kd%enD8fqerItQ49HJ=bbXTQ=l#!o)m)N$C;v zlYVdUX<2`oFS#LQe4S@a z%(VvlUq08maHYQ~71SgQ2K|LWe=}unHdA)w2nsSC;9HUht^C}4Q}HbN zbRpji8JqLX=Dm+1O))OFqEAEOG31{~**loWEm5>#(LX?%;I8{MpdN1H(%`W(8+zG5 zMQ!n5s$SgT6RywUP0`-^=Gz`UZ*|!s?e5B_OTSg}(3qVqUWx%5Qyek-9pnOr=eAWj zJa_nkg$pL@Y};F)D-xyOz3L+?4ACmr-`uSPOXUeAc3jd{eZp#HvAJH^f*}STvADD9Y6v=VvU)vliqH zXkn1Q1LXO%I*(sr(42!;AjpXEiw3O=R#? zkz=m5!Up8^21v)}1nJxB3l%JDtf-mqn!57#n2(fgGKqL4GsHU(ny27FIYn-<+Qda(tHLwh#R}bVL3Hec@?!W_eOP zAIxq@?F&2D0q(Xj+(U+|uR3m{kAbiHnCoJ7+(x$ou6mQ}RCU}&9|Eqrj_W~n+(w51 zuKJ1VE_K{S?*Ohkh3gx2+(uUbu6ls$2zA^>-UCHYiy>xNz! zjz%&Ao%suNeHEW+pf{2hnkZ>q%GNb$WGHZzm@Yr-xQ%oKuCmZ2BXBMEE_uS-o3Y$0 z{!2sgM%n?5`BwZN4YWqa0gV|~{AvTOk!(O?vK7D9Kx^a~(3oe%uQ$*dDF!sASn)^$ zt&v?oV|Eq4(Lie?7SNbjcAqKehmD*98gr`n%?7tdIsr{%=A#X?Mj8Q)`BVJY23jM1 zfX4JG{#ygBkvTwP<`loxKx-ro(3mvEZxhYVmR}M@(H*=N+4iZ{+pk{jW#`|KZ9VUm z$Fi-nDD+=>?DlNyxp!n2pfG%QeEN4lndorj{ouVNKKrg~9c1#`7`JD}mF(A;A+b zfTMt^1DUvddtp%3*`WDYM>^)?0Z#2b3@*hVQ78}m&EvWvJw?turNI66R@9#)zxZQG zueWc;*$bziZ%?&Ha-90#PnNu9+(@@P85gxe?__IqTOzZtZc}YBvpUb{?SKV}vK_ZY zg`V#ejBxQqd~ic^rqf>f?YT5tqj(({#tzsT5g%l*=CW*!QPCCv#tZK8yb<=_1^sa* z2X4leKS`yXm9%`D;ia#MA+>`h}@s0Q9 zn7|V+hHR9n>WP0FZ8K$CMW=f)7^}u)?K&5h)4gq_j0OdDahP#t6Z^X9iBeOSCqpWI&^0}6TF?x6 z$pvE?yAm23+DFW}aMc@tlW4?p!w_9)2bL^?@ZON;!izsgLuvQxN;wL0kg^9hI9Z!l zEk*bgTgz+GT2GVKlheeVQ2z_6!nl18^gyT4`#bOwRT;d`)Uku=HPb5Rr$65Hb_YJ0+Jt8p{ zm9UF2B~o=_>(D`ZRC$H@mjk)6!_Z;fac8JEc6nS!bR5_j&uq#u6pS&p5u)sW=a&7i z8h3W#G*7$uf52e@3z(hgvc+GaV(SMi9rb6@af6i33g%|1ic^ksM1jp{go#F$kiQ|s zmKC_$F5+<>uKkN{s<5Xw#8FReJh%yFxe;*fZ^_Ww{tm?lm(a%Bx0t1NZoFA_#Zo6B)4dSHpLebN)Y&ty>m-ndR2#ANjRu^iSl&yiB62z~|K*GuDWX zgAMT-TZ5(B8fkIB$~Cat2TM4dJ@{up-i9$At25(yp3@DPMP52Hzyc;UDu6Qs+e;;` zh)?Q>EjVgC*2u!h zZSKag1~F4j0#byM#0WN#izx~PSNiJd_`Vyya%&TwD-D$J{d54)J$-p8~K7bV9 z94K*&bsY~U1C8xO`Y{!^KUoz!RPh?BRdi7-RDal6W3WJUh|~1S#ZOjbuM#;;k*ZfB z2@6G5IPgz-Muf3*K{0RXyeva$GeMbe@Pp#)T)OO1*Q)BFIQUPp;rk61qQ znGhE<#AF^nx5+n5&p98nF@xuNI1eqc4|77df=h`N zjZX#((!yp<#rl@B^1altvxtgyz$TpKt06?VPQs5j)m@*(@XN+|uz%N+Ct4WdRuWeL z10Ecc;|FI_K4Ho#gYByKI77;ep`YtbWsBx>H<`S`sNCdChub5S6W}A}<>AoNr|^RW zz2R%i2?jrWzyp2@{Mt0y%r@pG=R%F0Yedle$~HMs{^jXCJb>P_BX`J!+L=4zYW`#a z^C#K6`BNgUi`UKrD8WJx?_2NPhC|7xaRe75cyR%~BxZOu9y;UkV0%<)__w9XLL7`P zB)*Yp_9?akFd{olujGz+u{PR~bu;upXSZmeir9JJmlguq8mTh5Yw0|+$TC@i)Sw17*IRk8 z|Eg5ZFuWB^>mfl~xLhlcf7^KT&>m{G#)M_jy|B^mV-V4=6l6EHGp5{10b4=*r3;=b zEw+;fR|=%iM#S(i#sNlPNqY?!6M=aWtOKaOUk7+mINFDGfWuGut|K?@5d%@BM|h2( z)Y)MHc3TTU-#3roVwpn9F?5U<-MN74lad$fPsHmZ#yZHo1LuU9$jfGGkDR!KvY!I} z4&r~p`0t)RxtQRcJr|%4>U|p1Z00Pro6j8GO0e4Wv^wx&|MTaPwNGFTBSi5I_q36=8hJ5!+!f8%lxsy z1xrd&W(V4FA!nEts>_>JH>~|#j9x^?V}aI_RNH%nW3qx~rp(ITOUy`I)VM;4VRM}m z6+|&~%EEHV$6-s6A5Rmk2$GgA=I~Y>+ziL-P`HDbtk?w}4k|2L>lZ?HCfb})6i^SN z4!v0pKHlN+>#1FjH%i3*Ez22Tg z--h*j7D}@x}FQ{X;1V!TA!`aEjCGUADy*uAAK|T(aFj7(Tl54EVs`82%F_> zvYm6xKyo&tZiZ;W|C&Ggbv?bUNXO>_;oKXn(!|6@i z4<~}DGqxWtqQ-u>5n?}_N4iZQv`bNyEe zV9xTQk5WxrrJ6253F9=*SYsNOE>8|sTy3-c8Va!MXFfMo-$$*oq1;EEm^rqOs$9@M zs!Fzx%DgD|QCSZ6QB~)}D*Wa?YDKAiRQZ2J10nXHSlf&BIK5l$qc%JpuCf9=ZICL> zEWoCaZICuNxC=4m;<@AbX8WKAp@F{=K7wt?%^4a{_GyvPFPMGA29q6wjlE%5OxG#AXdxq#m~=a;xMx$nXgzcKfd>xIIjVP2i>`S)357!5qLgbZbSAqW|3w-CF6&)(iK|aHkNPhS+7msa+Lc zh9V!OrLGem+Hoz;H{pTi&_Q~@M-SNG0O@QCC;D(gwbklpt#seikO$xKyF&KR58nP1 zJodBnhjub~j!y--Q_ErdUK|Nb4}1>KGwgk3oZzcihMtp|?cQi7{9_zu?mE1QT(9Q2 zW}Gx#>El5y95&2^eAQ7vos#{wd(NoeahB)pz;?@uyi=K-x9!oMykpN9;i;s4O1o1$ z(y{<4rRwfPs2#`d;+*3jwt(7OJcrixqzKMD143e)CCv7H5i!eoIDZ9}1B>xvk=L!Q z2&;qW;RyD`|Hu~-<_%BV^KQQHCC;e77s`PS{>YbzP56uJicp2ABI?FQ@E%z`O z6FuXa=#yCQ4wn9i532EDvhvxts%>xD?d*H3)7{&PJ6*m3cX9D&9TPlaW|H!>azdV( z#dyd}61xeWONU(r20FZq36&14U|lu6yZWOfKjo_~ZKSjhF4& zx97mV1N)y&NQ>7I(Pdv7MHjy*ihda1Z^0(b#V>vR$-7_sDx^geZTo>p=c+G0`qJq2 zKcwG{h%Ub2=#9@o+c%>A)7YH8_`3T}aE-`645Pi5{r-EVyBDJJ<*5VF;FFSm1FART z|3?T0(tEH0z7^$VsK)P?07flS{6~>F8R23r;@TAV7o#rza}TG)>7k5KfOA{4AODfU z8_mirdjHIaH)hdidvD&HMb~#fys;O(IsSu%Ui97bf3T2Y#Q0*8MIY@G=Vw*^;W?JS zWeYJsI7OV<{KFgPqhD{6!`%^E|7nV!i~9V>4$D6%4zHdj&P%8N2lzi62OOpY#&7z+W?LVpYpY{1?lJcm^zbS5Sm8_?U>c)tE$UE;nH;bOV zz|V&yC5s7vK;=bglF!h_@6_i8So)>thY*@9x_bImb6NEDGqmC(vgNSKzo+t=KEF?& z`vt#P<#+ao|2Ms>k!eVlgrCaLsg2Q3^`3if%h!%WB5O>IjnStNPu7yCi`t_be`WLR z|I6E(07g}v?c?WenaO0ENix~VLPj78%8n??k_3seL=tu=gv>x9LlQC*NDwt>q`0FZ zl}Z(AR4j2pLB*nCi53*CR#e)ef<{Ga)mGG67k=VHa(vTtiZ4#|WA<}q322oR$~|rh(}{brl$NK!ioixO zGdXrA-Vvl!58*td;>tY^Yy!$90Xevl-Ao(B&`+^kW~bx%8S-}@$Jbxn8RhRRv4h>t zW6QI_DE7PZDfV;4UUs{d-Od%qn0*mLF^m=`m|f3djuSSGV(8D76GRHL8O$b&KFn&E z%|y>2%NAyH#97Qf6GhA>NJw*{hv*+tB%#UfOSQ)H&kDlEcvQj6w5DEqLePQY&T zT8&Dg3=7r->>I3Qf8(@Sg~YC5f0LZ#uTgAf%Z?xhzy;=9G3TZW|7z^`m*J6w%jO+*sWN( zozARWv4I@Qe2#CU7{YGfxMe8A*=?y#F>DkgbSlsL)2Spjiz;?|n*Ftl#ZhkeieIwZ z2F}s_Vsn(+gW@T6b90!FioH>8yYRcyl!r4oWxK`S*zzKdVYfKWETGs|%&y`Xo)X{a zF~UfB8l%X2&fft=GRYnJgrn04@5!2^#l-yHDAK35ew5Q6cvB|fl&t>nTL*oN*vuF$ zKgagdlO}1?TPqk#b&~%KBwtfw$QR*rj1`Q71-Ty52!+(J-A7lIn$3?!hDEk8OI$R6H3Alzr{;{;l7*9+4 zJg-2^>wR*J1JW7_kR#`yc#Ms{}V7G?Z zn^>DX9A+P2HS&3weSuYmqX6Et4dNSTj20^fD(1<{(&EJu#h$jZv_!F0u@Qwu7*GGs zjM90omLjy?GL$J<#hP2>hgrFnE^b#$k6oZ;ix(A}Z!Xqy#P?x#8G`7C8Bb_y#FVUC zw9`aTv70hCYJJ33UW;uIE3-PazM}tWGQR6#4{H5{pO|=F+?n{ccDm?fMkzZ6c2HW{ zk0gDm^%qAJ>zhL?wvP;@f5!J<`HJ1rD@H#{3{~uEdyYO()F^fd*dVb{u}8D#>x0Es z#d^oC(T9rGelpCA*eCU~#dC`NCT5C$jyR-Pdj4zrC`vN^p0^r$AJyr)f&Pdc)6bWL z*{AyGD0W;QBaTogT+MM`#w;;1%(fb{MP-;h zXw2bnZ&E0wjvdC_DE6c=Pb>>t?lFEQu2(EOWsfmG%JL7!f++U7Q5D7hVl0eeM~!N+ zFC6CghF6U0A4+wuxhTrAzgZK-hMJc|u~DW!iWQr6QS3sqA&OmWHb$|TW-yA)Hi@@%`2nWHnS~?J!Y;Ezoy(`?3wL;!(1!2E7pt4}3P`ah0zhi9`dlcIpGb-jcV(1`t!&qJ&^MLprvo-e5lIy`fR_sJ_ z5X_{l2JL2iT=A-y2gOll8^CUed02cBX1|DeL>wC;)=a}D$xx=L8h(f3BX|Z;MWQXhnY|n}#XNTC?wodU+#jZ`BVtZaV&yjA| zCeO0%6a6H!4=t>+?H6N|+nD@D+l%6eVns%y?G@2_uJreE)@8QW#ilT8wEam;q+t@} zIVS%y+uNds2h9!QHDitKT@lZN<_6)(`$f!0qGlW{(QiF@kK6t#S`{nFe#Z8R=m@hn zY@drmiVe$u#`cBST`c_#%YVc6wKzx&@jYVw)AlbhinfrLS@!Qm2QkF3QBSrDEvGcZ za_qV`lo%{4Q-|0MZSHu>>7K?Gwc^+&;To+dV;A4sZwU>Ds`HLTt4?OY52_nKN~@y_a_TWEE!WjrM$POu1x( zQtz-AYJXR(#_=0_A1&iz>2|`l!`@H(M6qw2o%S=dJEy8p%-8H^YOhF!_IboUNE=AQ zGN<}|uqzciVf%-DsJ2_N#_ad)BQ$3vSyF5L&VG(|6EkY9F|nhx+r!Kmd%kuS4dkGdILm##U-W75l60%Ghbzdc_XeuaBLf z?ZM_R`8#C)MeJ}KKDW=8{$_Zdj9sXm zy+E=7?q_4GwZqktIa8mFU8J=xmaG!2R`V>8Y+LHfv3`wyHH%{ZB<1DUdaXYm=OFft z^X1q^ZK7hHybMQ^=5LU0o3nd6R%rRlB&%^`I9jy)M#)at1~@L&W(Fj?HhG2Pa_zmK zWFO_NcC>04O_DX|u5(w&`(&9F04T>#spBDEk?Z~AvlqK%Laa*+S z6{~lgAJ?u8T_xS>9TVd2)g~$y54ZcY17S8H?tblE#cJU88!h89>8}R5luaK6vf<3NvDE0){F0G_hx*f8wkNd5* zHOzh;_mpN|E!_&855(=!^22Oz++OXlVu9qexZi83S4zv7$#2H((+(?EnDt5Ai`ucP zq}yK9=F6JBO|tjFUe)?3wkpqxKd7xzY)xKL{2SVFVq8Zn;{T*o{#^R2G*`#}Mcbp; z3EPeFZ)^S6O1CWQ&iJF+dd0>i-5LL$Ca#fgk0or2e_wk-u^Pv=_z$)CYvG0%3bWph z|45s7owOXB9Gmco=Dl9BZK<;oKGQrmO7@L&R>D8D62+>FTNA$2zEkX0u&=d!H%ZGU zz`oJeuahibyqxf@)_JpJ_kjJNeR7Lr%Trg!Yx;uqlC?Ni$D2BR<(k@jJ<@5@cPREz z-n$90dd6+i?F7m!PH#}`YuhIY33}%S}3-wJ;OZIkRQ<6`g@T_ES zBwm?Rqi@<9VmBo%(FZ;!*~hV0Ce`U}znAQBux0w8{gQ1<-INs6AAUiy6M5T`R_H}9 zO4gF}Oj3(JT(Rn;gGnp(62(r~-buPtKl^~R%y9ob>2m$xE1@vIPioam|ER*WWjL?W zTNU%cdWmA5yqlcs_1}frX6NntVa2wk zb~t~jXZ%I_t28^Ecj*%pYs~I+{#tKVESP)Hd5?adVkc}LIJfF=Dpuq8r*oVBonmtw zrt1N{{ICpjjw9LikiJE+8?!yGNA$N8>t&tedQ6XhOInsDo#T2!AEQ_U;(JoBS8P?@ z1lLpgdc{7pZ_6;(=Qg;W*OQ2;*1BIG#BQ|Du*$Vx zpQ$V>%{8tU^o}sw;Ce|H@5oRZv)8y@(JRAjgX=YYYnW|yy`g`nSTOfV*Prx>N2EWI zyw!DB-yCLZT<_?|73;{~>Uvk7a8z1$1k_{Z%h~S6bFM z4!HiN&kVCeuFv#!ip_Dn=lWbX-;lJ}**f0<9>S)2~V9!ofYr&13oc4KyKvdtLvfwUY^ zxW*M{+^AS{?m5Yc#%9Gn${U~TGCoo4MBc^8DTe1m>2H1R++?>gM6p$H%P?vbTa#Cl zoMm(>wkLO0axbIrG5Aw;TVPZY!&ts5@7m-7W2<77=55J^M(Rh>tugzyzvZk%Q}*LjWaA@dYwS&hV^Ss?#}&J>a4FcF&&ZN` zz@;fuj4Oy?1%FfKH7Qe#8>E}aPX0wog|SJo;+&UKrWv1BzXnFf6so*l}FC&Ck9dwc05EO0s00#dsBnPYtl{J67xc8lkxX3dn0v)Vf~ZhTLZVFsm(@Fn0=Od zsZlJMy?@e!+GWN?iutYYQZF-RE6Xe04&ySTMX^^>?CvX!HDQ+SzRI{&vAs@@`{%}% zFdO8)&Ujd{HxioNHyOF#$h5qXu-bi#(Lc;KxNkGOik*>vulsg`9!17oND-gxFm5+C zvm5rBb2{C>H1>trVfP)z=fu>0+hY7e zv3G3gX?Gi2nSG$$lGiWo9^*~L-m&#dyU#eLEbmWCPrKjvj@hlkV}7q~Go0VbFu&|Q zJncbaq+g5g9ekR$Pq?cB5%jXlh+5*_BbX$K4)_oB&df6DN*mkg(36vNBL z#gf@==7ZYH#vH}I%OO^+SW_Xf2E`~3FB_LhhLrV5f7#eX4DIC|>@~k)bSbt!rBC`R zMkVgMkQ>$eAB`)BAuSa9YsNZetHqv#KIyL+FDti)3;U$MZkUF&yd=9%`kTfm#rDDS zPsa7c5avU%&8dGes8lcxTGS#BhZ(iVx5JED){!ua%k4-zYHX2Va^BxHwkbw=f7f_a zGOo>cjYBFv%HMlNhACsG@_f%2qZs9{%UDEA-=5EFE!D7sVia8TjW!TK- zSdKwB6IO%W>X2-F;msL#^LJr(AS1#2BFx^+NH#sV%S@xq_`=-GbaNIlj8gwVi_9@= zBtwl|n3-c<5oQ&cdFF;No0C~!J|vmAH~o^#-sV1LN41})2cy`O^p#+*hy7g$_9e3q zV&BTSKm9Zlo1TdMXzbHD*JqxlNyi8AHL2=G&nS;%V%vOsny&c97vst-SnnyB+nU5;A1wD0y`HW)u z=y7M8Zxd7fcBJ{WVhCQ7$UvX5k*YnCXsFX2e$d1gSdhhmRqjyBg3L;cOn zv$DpR<@CY^v)nBHb~u;Io{ZyqnR$@iZWfQl56-&KJe!|4+#tHNs;rC6+g%jj20R^8 zl{LfcNS5q4*gVsZyW8Yu7*$!-=3&KV<~@*AYi@E=d^d{{_s3ZQvy&JsyR^*gCbJ|X z#1>>$TsU9cG`W958DX z%Smt;e=s{wmoeld9M@kpKO%Wm za=SNuPp{Y2$Z)gxL*dI|wiXmi*sVK+Gv9X2baC67Ia&6SGL*mKytiWs-gMJb2Pn_C-0#iYvqJIxHCI?872DhU+g#Hs3%kYSSyqE$2YaXH*{n@rwkXAB zy`b12M^>KQIv!?)d9hY0URt77um#US#91>Ht277X#amY?Mtv;N+NhYBcz0%!^?R4gBD&}DrXW}oWG*6}bKotI*H@X{5<_Z2Ktt%-_JYjs;Q!)$b3nzdH3bFr36 zw~i<_0xZKCH&}*J?LMk!T6Kyoa39yRtOpdkDf3f3+uE&|JMp-lW4#!58=cq7`am)2 z9l4e^gudz3#p7kjKV>?V7M$67Bfxp#Q1Cl#aK;j#7-LwSB&keueR4ob#X z$){PznB6Qs!#Ll^`dYeiU+HTNqZea%mDdMf$PY?}F?mw%>DElVf=FRfU+Hh%p&0d* zGp+j-qrP&MwVRmgD}$_0l-v7gOM|Vm@zyehl2>?CA7ZUm?3MTdc|)!3iaGKJ+x;BVw3Ex4RzAJJ)jKRbWaP)%$2`vSKtUjq?!&f8WrEm8xwY; znjRNs)C$H~*T_&%)-U9Zvvx3(H9fvtO^>(!%xLJiTl5+;7-IM#?*gki%rf&YvThHv^YSNKU18RkGSxEi;;Qu5Cw-dbA%@)UOPHQN z!`dy~xZdYjXW)fRDkZA-c~+@nRPR5t<`Gl%zQ9_m+-PR5vg~*#mi*DE;k7)9(Wv3G z#wbR8bCESyG3uL(tspUkIS{PIdRMtUfH}O@`b4=E!0i&N81K(g3|ru~#G0ho`w4gE z`>kfh-Uh1+htd?YHNU~STe(%5Tk{*OhZUn)G-w^bJEasmjZ4d|zY{|YG%l^MzEy72 zUYe}|W27aumu71cF&;Ix=QmrvFzd{3u`W}V_og4sU#aSyTF>9YOwOsR!mWqe(kg2m z`;&9(D(gWR3Xd9>SqGTOwsb|ewseK{4|bDn=?Y7XrF6>m{1sLo#i%V^VGSgvR+U#+ zGr~+1thTNQvxI`Ht@X?{h#mQ!g0I&8lo4_6uq%0p@~^oJD=KB$Ga!?WPHHrq|hiXKdz@Vu_~5uQg6cRvZRL6 zDK+EMC?y@Nw-u27P(Jy6%ubfWa|ySyEb+y3vOiHk`gzdnA`h}5Iw70<)Tt(3W&K#T z`N&N+QYOEen2~g9oP!kVqQyh5v)JZw_|?RqOwtbnc9$P_lI9O6A1d4bxvv&3nG{a# z1&I`n#G-tXqtVHACvh34O`_CLN|5&`ydcr()Ww!wp)hsvV4e&!qA$vi$WGV)jZA6Q z#cnRcXqnO((*JMdFXJg3YQqLv9pxyx7NX_<_CRe$6CtENGN(7SVfq42 zM3y$Be?K!?PjaaDQJa4~hAb(~cu$DSs>+I%$==C*JftU0Q9ku<(i~|S3 z;+K4#O8@V}BwycTQ`HRZ{e}m>7pFT5p_>C zjefsN*Wvdp9{0NIBbG~JPHh>|lVur?((6;GR10B$D$RDC%JyTOT(>j!teu}yr<4nn zP*e@}45z0?mV=x%db#)P1lhKhg(7y^nkyi6Q+RmJWFlcBHzG zDzeOfN;-Sy?x$!%rAP6~6yBOo^1rX~=yH(h--Dj3iH$buzw59PFvRT~PS2FntoPry z^H4aHwnOOMx>)9xa!(DVirHL zlcVb>RCg4bEE9^QdmC7Wv0cZ9A1E{_PfUu)_eJTiWw~dXrLX9G{dmboQu1SE-cwI& z0|P5eSsIjDsk!tg_u1(76Y4dQ(%YF!a?jDVZ~n<;)w4W%YP$Dp3V}4C^6zQiQ*$Ui z;_Gj?mXT=-jST;{GmaeR8a^CzD4J{r+rUN&(e+#Q|7v-rf13Y4Eg^` zBU9Kn|G%rdpAvg?zGSbwfk$QN`fhU&e0Z;hTE*`smq4dy-D}ebfH0nl& za~5LNc`P!xt(u}QxFue~=ya-n@xKo<6vBU3wl8wOxB=r;s5eE=?2{cd5>naXtyWyi zlT4O!)Vh|}li%)?4x`ju(>vD%OJB~#vW9ra`LMfaMeI_=&3A>SiN`v+3Q7MeU(pXVsg1qH zE6f*gjf{TGy9y*r8=cpg2Cp+swzNbi+fxX-cp-uMS1j-6yvi&8-B}doRTvv71d^rA zpLmVxR+bUJ(R#U;RfiPn_#ObIR;E*GpdxT)(4ST7llu+yHu9t1^UD*6I{Y~h_p^}s#_tf;|-c6}8RP3P? zQoFsASF?Azowz=`D1r9JX7PU7HlQw!V)s&0DDz0Aq#+#2@4uIirbTSdK5kirkiGGEbnZaUSk4QPm?oTDG>7qb2T1J_NV>p>ZQsO6ljzXbc+x|q$o z+|f32hj|uXr-WLXY;_cZY+cd&)eBo3W6`XjiJKA9wxtetWu7 zdM@Gp7THti`ZuJJc_-J9=2PyWW7#HpKep$dx%5l*s|#6oQkJbt%3HWjWtl(8;~2?w zr+{LVvTPyJM&b`qE%3)=>1#0W8G5k)Y4E6PilIokC5ChFmaa0_q&Jmb=H*+i*<>E6 z-oqGfiXVWMC`Jjyh?$UWVg#=xqGK`9zfAEJcKa=H3qrv6SGaxl;*`X3O8P>^@B2XR zZu5T?PIO!`9M|WZ@@*(veD?+Ev5Be3uU*VUuZR_&V}5anH(=9!zdbrVlo$M#K~xF! z%sb`ORAmy~Hlk%&w!QccLZnW0HLJeNd*hb@4KV>oHR5zy;uvzFiSDjWr>XREM7kPv zYVgPts>hS{8n?sH==2uHbtA_$3)jD<*bB5o129IM3w`&|OtvU0y-)~Ja}(C;x_Bv{ z=EQ0q;eW;b;E8-f`{QvKl$|^EiN}1XirR^rZ-z3*Iq4q}hq|pSe za6WErwcV8jD6k{iLI|(Ud>1#00t+G^QI=>5#&zcy)effW1YoVOVT+5ap zEuWlnnFg7v*U|4VCjvw3Oqp`&dV*)+NcwRvO+26L~)7rW@0{*egb5iM2R;d~mt zcBKD7yO_U>RVFUZepkzZ&6k>ou~z&!{T#g(-*cD({6oSDy+7;A#LVnM1HSOi1IaUu zYs7`d)xfhnR~t8T_!~K$TUfpy?x({cPmxAzJ~y zf=A`^o8-?Smt|3XJ(fTkpJu#LYq*v9Whwjs=oskLH_Dco%w&U$=- zY_@w7KT)-b+s&4{1-<9^ zD$=l1d?PfoGwmC3Y4%HLE^T_wtB_aXZ86fn4f!{=onjYi{9|*Mn4j3smZ|Ma_%^MR z!|4?CURfunu#>|)z~3u8$UWr%f3@%cf3@%cf3@%+QngbY5cC$*0YUFO9T4BVMB#tQAR#k7bZ%Z$_$iOH6ELJbXRnPSsvX zNzL?V^yNg4Mqf_!X!Nzj{&2kzdU`u&BQThm16&C`+4N`o{>qZRgt$d}3vb}~xs-OH z{d|nCh|$|nqd4|a8r9cCev_k<)3%$-(4|dEdo8<#(S?+M1=;QSF1w8Ls4-s5Sj9Mt zv4uyHT9%hFx}=_QHRClB+0w7k_Z1jjm&d6!guIYV$dYkr6{FofSMqhsP zYxLDczeZn#^lS7*NWVtkfAqt?BBzscMDliM==}#j+Qu6|dZLu%KIwD$jg-0kmWp4a z=STe-y?x===sgR+MsHO3HF`h7uhE+ju)))sgva$Z4nL?-xdk=)F6Vm0^^|)Pa9giU z8hwLulSbd5+@#SrC^ueHXHg-y-PXT(oif>_Dm}!Ie_j#;un$ebPHL zdhWGDqqhJEx8`=pJ_Y&h+#O1$XYV_Z)1ye+8wnfS9U49L+M&@i$Q>Fz8{eT(fA7%f zDfSMHo;BTp)Go{0q0!eccW^p)a5{G&o%g5j*63@PyEXa_=59{&ZjGMw-py&=t5F6k-(j}g3lKN zbvwTGy$f8CE8)rl$el~EOsUh#BXcu0@}s? zByt^;JPh(!#v(V#!+;(EE8NA~>)0jE#23?_?tP}%#(1~mQOI{V?gifJXaHX4xEOeq zV>IwmMHj9)6Uq**u`jS)d z%U`gJp9&+tj6)3aRl;%w%K^qV*4)Z+JIjx<+{tnm;}@(c!Oyzw5?;pFObYD_#uSU> zLhB3TpY91*$iRaY@=LnwtXvZGWM{% zhvmIC3gHNAj<819$wt`8-msHvKFj&6AH(t(mW$bS0c#eprd1*Ny^39LwNn~4vwkyM z?qPWk%SRM)jIrcP#FCuPaz4vrSRTXj0+tuB+{$t*%bQu=%<>+V_pp3KA&2bXSR5qh zDk*cZ$dKbWmN>G>XE~qcF)WW^S#zZz_5#MS zj3uem9@-d9H_0W8UMZu$?h@^cos4EWX*`Tx#x}-I#x6!r28YSm$!KP>FUArn_acp# zv5m2vv6IovWqZaFMlWL@FPqnXE+j3ta-#&*U|Ml+vmN*KM2ZH%3aU5uUrwqa~z zY-j9ZG<&lvqnELrv5V0xWLHKnV>@Ffqv;`652Kf{jj@x_JdIr$y^L*)os3WhXY6D&PiI%gHpX_wE~!6*!({Aa>|!+glithN z#@NZ&#poHpVKTNcwlj7ynrE^rqnELrv5V1j7KhB(#@NYd4kUd$|*o`V^_vD#&*U|Mlt+b zaZ8#xoNV$TFHQBZ>}70YY-j9Z6eFk)dPb1Fm$993!P(@u>ul1SBiWU)jj@xli_voq zxt1`tF?KR~&ShVWZH%3aU5uVl?8?|Wiqf!|v7I%0SU$qo#Ts!Q+2k{N&f^#vThF6( zwz1sBXr9lmj9$ie#v|u*j#w6>xnxFj8W=knk4XI(4uP?av7NDt(KD8PF}5>yGMeK^ z?_u;ZwlQ`xb}@R2*)L-oV<%%5qo;)9Wo%|!)0uq$I5V>@FPqglqTj9$ie#!g1_LXMZw%h<-)$=Jo{xrjqxY-8Mf z5tV;C%X?Tp!q~+cF_B!&iR_Ef%h=A?$!JdEcp1HnZH%3aU5uW|90Fq-V>@FPqjw6q zwlQ`xn&qVNGPW^xGIlYV7jtNgZH(=Vos6ET?8?~2*v`0TD&?h<!i?MAc`RZgWnMJafv7ND#(VR_s52Kf{jj@xli_tTOY)Tm07~2`U7|prt z%D7-IrO?ZAE6bZ1+gY=R|`|OvoA(3V>@FPqq%_n zGI|-?8M_$GD)!6hWo(n0g{1c~wlkX591f$$%dU)VjGc^Kj2<6bGPW_cGj=hWi`bRX z%h=A?CH0HRwT-cpv5V1D!!a_pF}5?7)UrLJ*}x$O*pkuH${I#5qq&+jjO|jsk~D3M zU5uWqSn~_QPDb-~_Qlx7*d;X^N#D-cc?Zd!UlF!3ns>5>(aYG$SaKKXy^QUQ=4STA z*v{zP!WzcTyGib1EV-BcGPW^xGL~#5z4;KKhtZDvsY$qJkDEr2Xh&V(T2-D$sq+Om z)2=@@_p!VGyf}($t}WU(TAW^|->N@vd}zd*-nLP^J>h8F}-YK zZGPLWwm;aqY*Xx6v7Xowv6EuoihVEkJjbJsF2@&+UUB7dtK)8n`&Hb|xR>JIi_41N z8UMHVtc03`I}_eYSdh3eabM!;&MTd+#n{mk_C^puQmG7e{cmg&wqBdatkkabPg#;m)u-p~3nt0;R_ zww|*r=eC^PIrd(c_j2Y|<*v)SBQG_7K>mdM=KS=6K?TzadZa>^PC_+ij^UzD{T}h|u_!+?*!aluL<4(&wkH?PEPALM;^K8R=obx>2 z#6jb^B30m*M*fCpWJ;6Bveh~c`E`>pT8=ZxRd8sACt?|`FU%$Vko2c;C+FL=-vj^T zCY0ek;+%!23Ch{#XwEv^G5$r)ZNNvI$8o>$XwCrKX%A^AJ>6~olZNiF87SLKlq>y4 ztqnL5<*Ez(G8wQQWvht>AfD#J{Tv;?b>#xKX!xZP{BB$dk| zxL7X*-l1Or{FPn?+@fCud|ICb+@ntc?$s{_9@8s;AM4Z5&Mq-xwbOC8;6Y=E$TF89 z{v0!)4Hdo3%e2vAA8;(bU2vIJjJmr_E5$zeW!in(O?f`$=F~l@Q{7(ojqb#kl}?#SHQytR41%R8R;W`0Y-FA5$k zFk9&^AwH*t21sLx#=m2S#vT5M!<0EB)n4f4S1PDt}k1bDKJ^QRlTdQ;Drr_SY(YEprohJ7xaXsq-y- z&Jf@0Ie0=rh!F;zGsH!P%-`N7>YSj?NqiP!ib>^0XIXAj%q*0f5Em=`#fnc;_A}IZmO9T-=Xre2 z5c3fZ`L9y?YIXLhbF3xHCrO>%>RhPKf3ak_zGcaDy=BSp-T|j@k1G99OQ!QZ#ovP+ z)%$x&|Gv_{uk`OL{fA2bA$XA}(a#XG^#M4F#45;FLcRlXJLGLR@5OmP&M)Ek)F={e za|-wp*e%03fTIO+3HED?#5a!dY`Zh52>ZY#;%BaB!Ar!@eXDV$-hso9BU`%?>3BQ6NIaY|PkSa~ zuF;w4$1xp8r8!%l2%EV$&&Dwm$8LTVIHy%c{)w;#?$tm0cw6#&JK6hj8q~ z@mn0v;`lv|mv9`y@ivYw93SKOJbSBgU+Pw)Bj-V!JNW3x>7~!s|7_8*O`mL*796oA z7aX?Q^>?k(f-W58X1jg_{B78LfU|`;$c`fxhXY5P_)4VUNX6mCeg8C^({W@#&crzj zM>dWe9KCSlLZ63oKF%JDO&)}CnwW|a>nn_1Ut#R}3TuI{Fmio`@#`zBCceTR`Bzv` ze1#RoS7I=ZAvlKP7=hz#93ydz689psdojX&h5HCo`T2tjalQ!0#n4ycn1N#!4lyd= z3(haEt*i5S&tE)$esN7z-D02Q6~U^YZ`I(T^9PDXU!ch!94M9#6q5!G5|akw7=i;o zZ8N^9u6n^BQC3>lwA9yFwb1Va8{61e)zVEx${T&&+G+$3+Zl~j4Gq4= zXw}6{wbe^5Zt^ved)fH<#?q?lnyJ1;#KtxHs+LeV-POhQOB<>heT~YBV)NGqTTW6d zKc@-@I%K$d3C`v9^?sbD`l`HB>ijJg4OMlZW2=L;^(2%P*Zcjx5F6LDXpygx&2jeC zRr^A5LRa2cyRxdAjls%#Nhb{*EH3i3Ot11c`O2$m8y5_g z!B+T!5HIirVIQojt-~)em)EcGHBMQ?+OWKIuqdycf)ED_nZCgS0S^|-5&57YNCb`{ zIED_9;g-~L$yGJBEEuAE3?UywL`BQer9S-hbM=tsA)*-79Q2KEtY1oOQWf;gBrOd~ zlLie%=tE`paGo>-$Izji&EZ2;qK2v{hANLko0W$_!`TogE}pZ+s7dwSCcp1|v9z{s zEUcRWwRPi28i%eV(^Kwi3^Y*HFZYeF_4&P17EQ19t(Z7LOcG^*$yJllw`R-`GiHjJ zGsUc#V)jf?*;rKm98XJxeS`Hzbpj+-Hdy_z|;iVayh@ zPg2bm%c=I}&lgo<+An03qW~AK)&b+`^=R;A8v3`GjHOD@o zc5#g_5G=0`1Zo%hTZ;WvwM%{8GOsA{Riks&2YisL$h?X=0?0yc`Vi1~YQ3ngX?20B zMZU3KuL$^St9@RTmPx+G#UL0S=oF}~^5YZ?WeRc`GL9edu3j>&4k0bZScF#E&~lP0 z6pQR}WdYSNVN8W5$1D*U&O`%`YT?9H(x3rfejmmOTf6m&~6(4kH?RE;m*&ipsf` z!#RZ`2VCFNVMTqT-z&z|23OPud}HgpqPDKu-xNR>Cd#7C{99w*swDya8~3e?Do+Ugp~ zxJSYk{UbaFv5Y=~rpx-0`X*9cP&@%%A*du&wlw&Z28ks`L$=b$!XJlb01qoX}}%{b;MFG^y_9p|;NJYYux4R$*KTs<0MD$3|%x+guyq1|m=*l#bB! zSAn>gFKuWF`li?Wv3}u^WJ(>ZXq1?UUc>_t3)AYBR@GHu1fyJr3xWworY0XtYD`+{ ztK-5DL9$f~0>M23u~szHprwk1)IlOt77!&_xvNpTEK&<+N>PUB_XT~j>4s`EJnTef zjEIU7(bG%R@Fho+fDio}qYBQI;U$@92(8!Te1VpVSwYPO=v_4IkSRS;{CBB7Cix-nVq6?*@vNjm4uH;rX zzOibl4heY`m#Tw39cbci z#8M*4sVop$N}tLc>-M^qh=UqfxX%P@7h*^VM!8muYe5s3>Z@<``Wi8iFs*ECDe*0% z%LP$dC(o7KCAm9G2{ss@q`aKED^|;XWNx`nV6F-+>adCnFWJR-%)L{6OY32R@nwDm zre9hT)-G*Y$}1CAETm;i4<|LPqrlmzqG_S(EFn#xhX$#eNKGoh3vSeAeN%uv%i)d1 zI^PODPYx{y&}V7VsPa$s1t@vsI%N^G7$0$_dBDe~$b3tRNY02UYqms9Euy|jD}I&{ zgq&3TEo=}ybw@jtEyfzfH@QAogAt9_cyuoI@sNJUFX8su16Ux8i^K@RSmP@+?@WT4g@8u--w9;T-r>qJ1!dUClOsHjGVsjlG_OGs|0 zB@IowXk;~XDsKW{oUP$TAeV$9fHtc{syAL43coy6uBb1s74-`*5m={GFQG}C*F#vQ z)dYt$58}2H)=u;-f^vvdhUPVDQ=(g=3E;{@+VC_@bENQNdScB^yfmw7MLCtvR9ydxMuJIlMlAEvB{OP? z)?F;hO9K}9N|7bRPSsrH#h_E)*uuK9@X#HlY@pC6>1DWV;Uzr_Xk5NVmTE~a=SQ^G zh89X4=F?yhr?HC`)zLIi_H(^4#h>M&8)(-K--z!#y7 zmDm&!6McaI3-x|4?Fa~*xh|MsSfG`4M1igvAwil^LY{aGiuM#yz*B_qC>3qTGA~S6 zqQO9=1K01-h9L@zkcd?|TLj3*xY{~ge$(1nOscKJpixKTT6h|s>RXJyg*60?n30i8 zsY%z+&{*GGi)qOhUR_ZQM3%7By#JjOt-Mb15n2931%qodwI~+#4f9KCm)FuX$rlje z3sGERG)E;f>JpXw;EJ+Qu0F^kwJB~1H1vbh)nYW~wxHZl6TGUK(pZbtoV2fxlIcR& z9~z0!9YQ7z^U)s>5N~r}w*!@R9~>Ev5q@KWxc5432iF*;ylmxHP%NKg;9$>FO9wRO+nhg z@mDpR;tKX811>Gdx{&5RTFrmfYNq#GqpjE43`Xr}t%qQv5)M%wbQ+cR1 zdRk13uB?-siyN`!agq*2k1Okwl%b5Bq^?+jf}=5|*k9Wq7O6A#PnI@NCn~RRz%_0I zE^K{`4Pu#CIlihnH}~t#ZB<}(X==iCDIt7#7bU)VMkR|p1f6w zwkkJUF~8ILLsZLCWqo;lEh|tbVG&a&u250mWLY@{OZdj{P{VVBki#REE|N~F!r0P; ztDq`gJxL{9$zr`HNoif6snHjj$--*H+C$esdzNx8iEMtzDJ6=l;TuUnrTFXX8$;JQ zkho-NB7jWe1rJn^tCcQl*EZC}PqEQ)qdJcbP-_o_SKd*RSh&if8ddk~M(^t) z1k`)f{9FxQMGzW2X5eBK7d%m2kh^R+novtQQ#LEE_Q;Gp&KF$a^VNkfK)fL<9z^Bk zNB|8nfH8u%cuM^~ny63>vU!AgWWMK-g31O731Fb2M#URMNRz)FDk`leSy(t>S7LcB zE{?GNJ?U~uEmg5p4qeaD8Y60>o*DzS46KSm?LvyORj@28mPKw6EXnr3;u7*3xquoQ zRIyI1ug4|;)gXpCfiVfoBa{b53Ce$!pNG@xAT8^8aX^b0+)R;s9#a<5B7r=IwoEE~ zv`A24bK$BhZt8~elC1)QOsy<;Y|;dA)q*if?&a}VDfdj}5F4%V)c~cR695Vve zpH+21flO0rg~o-bCLbO@G4`EV+|-Dj-v4MuQHM;?{4b#fCWmusn=Flu40zn+qDMff zpg`pOE4fNypt2qns8r2#Psqm?LB3P!P%AtNNqZgz!x!ynDsotrju(VRSxM<4Pf821 z^C2Z3Q>3W&BhEe%t00ky*)l992NLOhz;;7+Y%HcZ~lB#gnO!jc8rz4HALwlX zEDmw~K${n0V#PQbpqiOXiY67y;9P>j3i>8uFNqd|YM+YfxX=wAlt%bw54!FWY(7r( zkq5b}gO;W^H3l@iN^BCLbg{=n_kM++fY*U#i?F;3(CrpXnX1MDrI?0ffse0kgd`Ir zWiDzds+}`QQ1DWigx#;nxW2-t5yl3vFcmF08 zgjz}aOWm}KqI?B#2_SIQ)>yv+WgfczD{aO)wVCe5a+8@fWeAoUzGhXuQs#A}6yxNrh}OWq4ddDd--f5_zfF-HcMGI!knb z)MBFzBb=JCvcv@fZqQH*REmg5%||NzVTtQYDi={bOOdXPrGzR~Hv{>>0;#O!Tt=p1 zET?dvUDYa0o}nu$<**!eu0%|4WE#4sF|NKjd_zOZ;PU1p$0tysRV@OuWW%_6Z;Ozn z%wi?xRUVA#tgcW3Bx7WuSu(WE$d~=$`-ah4zS$K~$gKf&H`?D4+7u2O$ZO>=?KuR6 zouWHMSc%y!bR{U{fJ&oKXwH(FlU8U-xs><46&HssL2jI2ao z`Ct&>ZKtqvsHxLxGOScak)50<7c|f?s}99U(>HcrXy=`$^*U^>OIC)P%-CHc2eq=V z@KrZqyp|PM=EbZ`M7F3f#l1|ar@IG@!P2D-uvtmZ!HLDicxa&x|LR2$PeN7WjBOdn zjiL#RbX7POLf-@z+boAol3-bZ}6#K=#9$!a5TVNaMM6t3PxC z&%cSxO9lNKC@#a3Rr!zxL85=6@Ki3+W^l-+R~gc<9OoN^RNH%Tj%%aE|k z(6BTNl5mgeQ6}dLk=Iij2^a1~|IS@nQjD-1Ms?kQqZ+xAHMA7vK{Z4*OeI7)#uX`- z!E#xim&z8>m#rG1^K#3O<#}>=6bhB%3WP=NidunBG$TZcB~-3db7WPmN}Jjo*-`t7 zlsQUw#yDlSgu^?PFG}r7_{~SV>z)^Cw-nk6xHdwrM_bLuQ+o(^NHH`%j=i4UB7Q?X zL6%1y!lYQKT~&%2j%OKkK0fj}U(szIcH)uC{xtCs=l*dw+&<}=yyHnNqIEN#Efi*} z5bNQLuh9zPQ!B;}qGzhs04>31bRA6rtre*2q& z@1NWI@@v&EK6BX*S-(E}aQc0-EXk_~k`KgBH)edrf-lut)#(`i?t) zR`l~ZkKKRWWhc&f?YF-+JP+)4Z0>u{`|tU$zH9pjFZ$h+>-P9+Cw%y7X~Bz6yno%Z zBZuF1_Csq&9kw61H08ug1KzsW{_yDeSGZnxoMYtU3osf|YQ(r)I2M>T&6SGex>95E zHO=XA#pdfcxgn9$g7|!cv{ED87J%b54Hy5#3+0{)ZH&-JiMI;i2Z~e*!X-_JlE#jx zY=}b{>P}Y%{_8RENx}p{OzJ-Zi-(I_#K;6hTwo%@B%k=W@mN@B0X7*1@w<#r9w z;_+0v-LPqPJF;ze;vb%MET_6 zzi>EovdhIos}3g;pDXa+ZaSbzR9w2-@zdxWpWVb~@a&dDhn?Zj?D0<2CwZd7W;1Z6 z1ab7aS`69cY80Rr!y#!p+?_flKm`+zVB!&Ae6C2qFVaKrlyP!{ND(M06ctcU5nRGJ zxsyj~u2D93a_b?SEtHU*N*BM?34nvpfv!<8!bnWa$$>As(=`gM2h}qQ|E2#i%KsSl zG=@Emap7!|C*^C5^fkum8e>O7+{t4#JHktD-D=0&L&dMh1GISj>OySsgwo=RCXKC} zfcBj);!%H^YZ{}AaTenO#&SkCDwF)jOXFr%rZQ$Q=ET?xXS_Y$E^CVHbR>@&3YAj4 z-8_Lm)Q&UWX%Cy(?Rbwy8jzJ8dDC32*Q@h7dkpcJ@-$bTYUHUwo>nQ-wRXImLtZ%; zDX(MM!9hgCxe>7@A~rON*0OB=C8=x-U_ZlXqN7n|@%Te7fgpDLfdD}q_yYmj zZ87m=5ub14b`?(no)VJKrpPf@NOTHr@+nMH@ML$q>MI%EY#K67?e3R+qzJsF zM1r0DGo%Ubjxvyl8t--yL15@wB!!YBCW@no*%h8KcB38Zpal`6gOqJQ}8OmB(NNCOKd5sD-hM3ZMU|6(+eV z@n1^iNv?7^gq1tt5rbPf0;AD!mTQ(AGH1cT>6+!RnWUqCG?YuhW=J7CrjunqTZ+{F zCzQS@V*Gd5>@taz2`wSPA*Trp=;ah2OkD8^wz!ZD&NAJYcaUJD8xsy%IEMw5WusQ< z5Ed5;2V%O)*|$Ik=09k&ZJAO&1)>;G2Ci8u^m0r$(ep}q3}%aRmn#9k8%e2?|Kn^H z&nz^%PyqOgm-(bg5HU(Zvn7bk0$f5_SU|H~x!DgjXU3otOY50V7yVD6#l34O|hDB0;ZX)_T1RgxqBCb3?(;jidpt zQNfcfHNFKh4rGb`$0Bi1u|y5ei~kgMl4}9}hjYIm7LAMl;*)Lh(kxOTcC<3-D4PTa zjX69{YEMQPDr!W9kD^{cRfzPsr5j3qL8N&tpymZf7g`GolyItsNcw8fF;Mk2GH)nJ z`mag?MF!Toj%#DxP@980>3;<>RTL%-(G(a&S@1QXg0C5Ai~FwvjTp<|8xUqVq6L`W zDK=V()!30=nKKj>{g-+-s?AM<3wJB!L{+Rxk;;?GmC9EJj52pqr&thnKsQ7Tv#_Xe zxv3-ZxPeK6O4CiFjhjytlg(x&&|f_FGU!PehrXp^j&%1>tnNfxq>+#mY98?6qPmn_ zQYDv^akkj756sdD2`)EPJ~_pkHa&XKK_rM8));d*T@qrEIw+Ae*vsM8g+x+z5D2Dy zbbtIIyij702sgDRcZ{6&WKqGoK^AiZioap5EjdzO|5oBjD+19o1m>qx(r~Re$V8zf z(0|#$8bS>Wj@0%Pmww2spH0q_XqA+(s7W)NPMMrYf1vi;kZqF-+wN8}fle+Qgbqt~ zKi_uBl!yKP2iHi{9OmgN$v?rn>~QSsEL-eP@DMSPk;+UUBh*tG!o}u3Y1|A-9t@Rs zP*z3I>7xJA8%ZiB*Rwt}{9|l|TeksQ`9~jY#((rAG|A>zTc|_G0Le+lLsFPXPih2g zCXZRR@SJt>Xc}(E@QKz#{~fky3-BDmAh}7&2(G0f{sr*tM<;7vQQ`wTyS+ zx0;bqa&1)?Vev4;^`K0BYpYA9y)~4z)>c|NlRX_Og7uQF$I5LLj=4C3%41vDV_Uq< zf_koN75>e2@`#9tkxsOO);1Mv8_DTd;oywoqjfs1^q%Xq>Xu0OI-;j#@~<*=PS?3?VEk;YA# z?WQ3u`@&hqAUo|ea!?Z{f}Un!N~5^AIbDwcr%8DlhaH=bIfqlEa=^Jk5bIQW)kqZ9 zgi_CTVH+w1c2Rj^*GL;!*DZT8=ul?ZRAod36950&JD1Qpt}~9G8Qr;e?u?{6SJ!eZ z$5N-n0WX9szc7TF)(@42s*0)Q(5yl&KdEHNlAY2;V7w^p(gk&wLIPblkcF37v=E9n zg;E+wpM*F|aj`+w)m=*p^Tx^}K~XU_S~>wBHYeDj@iJN8r&Mz>+g8|;j# z2Z5>wkfNC_NIV3YVXBa$FIvNzuTt*nL0dC$1!7vf1{hWh)xpZX+79g4R#@Las*f9~ z4Wwqtb|BvJc;YP>h}-rYvIWuhE_wP&X~d|a8k5yFc)k^=BF9^;HqYvDJ1dwltAC8- z{pvjePotbC^sM&`3~Nol`gt_a#KfJv?J_Db)U*(ImX;V@(uwM01u~fcT9s@n*c|c{ zn-dDvu z>Bdx`I?55>0tk$kNt9=qn$fq{=~z<))mqjeYn~Mu_85WEZYME#Mhc=LB|y?F%}dN) zxnP#x@^yi!ydX)Q^YG2D<0Tgs&RynM7&wCY<72EJS=<&O6mPYA1II8f-Z@&2dN2x` zPBL(;4dI`Q;bJe5st^F@$Ei2xP!1GOTq{aLB~Q0LJZ9`h{1zPr^R$j2yO<>v%_QCN zvbB?d2}IG!{+e2~NF5H5JC=|RUh*WK!C0cMG~e+vZP#V%sN|%kxP|B zCo;tF)WJL z#MBU`$NVr+%eDk61)=xQd6a~J-X@dC$ zUeHjA6>>UZCV6+H-Aj0)M%Y>}zk8@({Sbl5-qni^z!~%en@>cFQTUO%@Gm$wRl27h zn07IsM8&jO5b2~Jp@fvNDzQx%a-qXPD#WYH1`31(wj`wW6ZmX_pAw+d#97@*_$1tw zp<6m2%7J2H{j*>ypmJ*(@S*)67E(RHUs=Y{14^t+s#w*8cDhIEdQ*i$(-<`?G$tw_ zhR%ab;G2{QDo8<}k!8dCY(B!EWP)g$j8h($dPy&#hblWO=Cvq6b?q)e0=W|)+y(K> zO3dsAqA%tR8Cgnt&v+ zhJKmNI7thms25@NO;ofA%e96Nbruvu0>z z4&+}=cp}{^orB~v3e|*=QQMMn9Zs?M?%+-0E1k)nUX38br()lpQb5!XNX)Yl>Iz|d zvmwg;=>CTw@6WiGor6izYPH);ylJKa5+CEZ7Da`iBVY#?JA9-DmAEGxVKni;7U+8}10qyBghzswB#oLuRCnVK0$ zWX0CaPaArpG>9_I%o>XaanG{VIIG`=88ZH<|(73uk>?&A~Semqv^@vto7UWf=UlwTj!@|f^$p*JU)Q6AY7p8J* z7uKaGhsyY}DbF72qS0VTJRvFV?N$!dy6%h7m?7(HP17&$t+z%k)b*-NaWxi03g<`q z(DCaY4eQmtOd1ozoc8S*NV22uP$i?*{e4EF>2C;6xEKOb4DXQ}WrGzCsn@g{cf)X+`qhW!^9r1b-2A0`8yh&s;)Yt@t9O%@ ztGBLfvKz0wzP?$WTex_6<0ktgR<=rTb8a+po#S&S=1$JdJEx~ei}2$$ksI5!DHT61 z`q%jQX%aX?M4RQ|PJ9_j6d)n?@nPZpI(JK&Tm(bR6=c*6pqUuM_ zxUbFO!n$^glW*2S#uZW>Tk9@&z5?&CY`x`?H*qKtFz@r zj?K8Wf;ZzbXK>s;v$Asf%CQsIudiG^e)a0rQ^zKw<+!-?y<2SJ(TN0X9RLHly$pTy z#8!WP{MX1m%Dk)v`>n!dox1z}$xuF@^7i@l%?qom-$K4_ZEJ;HKi6!FuTua0sw=92|)3#9IzRt#)Tte|2~k?u9GgH~4<1jNL;!by5&V_$1di-6i)n*9G@&La)0w z+!FEExqh9nKEG`J?O$@&(&?yr;;Qd@PSB^tcSkb}WT#y6yOemEv9S$ru~j_BCwqjQdzfJSz6Xx=!(;1!@-DT>y30z)y zE0+HqXC8L6vBc?nb=&eflsDiKcj2MWIqnNPdR<+dM_Jvm>TH?56Mj(Z(5tey)G-3e* zw>m_{^V^!kmr + + + BepuUtilities + + + + + A transformation composed of a linear transformation and a translation. + + + + + Translation in the affine transform. + + + + + Linear transform in the affine transform. + + + + + Gets the identity affine transform. + + + + + Constructs a new affine transform. + + Translation to use in the transform. + + + + Constructs a new affine tranform. + + Orientation to use as the linear transform. + Translation to use in the transform. + + + + Constructs a new affine transform. + + Scaling to apply in the linear transform. + Orientation to apply in the linear transform. + Translation to apply. + + + + Constructs a new affine transform. + + The linear transform component. + Translation component of the transform. + + + + Transforms a vector by an affine transform. + + Position to transform. + Transform to apply. + Transformed position. + + + + Inverts an affine transform. + + Transform to invert. + Inverse of the transform. + + + + Inverts a rigid transform. + + Transform to invert. + Inverse of the transform. + + + + Multiplies a transform by another transform. + + First transform. + Second transform. + Combined transform. + + + + Provides XNA-like axis-aligned bounding box functionality. + + + + + Location with the lowest X, Y, and Z coordinates in the axis-aligned bounding box. + + + + + Location with the highest X, Y, and Z coordinates in the axis-aligned bounding box. + + + + + Constructs a bounding box from the specified minimum and maximum. + + Location with the lowest X, Y, and Z coordinates contained by the axis-aligned bounding box. + Location with the highest X, Y, and Z coordinates contained by the axis-aligned bounding box. + + + + Determines if a bounding box intersects another bounding box. + + First bounding box to test. + Second bounding box to test. + Whether the bounding boxes intersected. + + + + Determines if a bounding box intersects another bounding box. + + First bounding box to test. + Second bounding box to test. + Whether the bounding boxes intersected. + + + + Computes the volume of the bounding box. + + Bounding box to measure. + Volume of the bounding box. + + + + Computes a bounding box which contains two other bounding boxes. + + Minimum of the first bounding box to merge. + Maximum of the first bounding box to merge. + Minimum of the second bounding box to merge. + Maximum of the second bounding box to merge. + Minimum of the merged bounding box. + Maximum of the merged bounding box. + + + + Computes a bounding box which contains two other bounding boxes. + + First bounding box to contain. + Second bounding box to contain. + Bounding box to contain both input boxes. + + + + Determines if a bounding box intersects a bounding sphere. + + Sphere to test for intersection. + Whether the bounding shapes intersect. + + + + Creates the smallest possible bounding box that contains a list of points. + + Points to enclose with a bounding box. + Bounding box which contains the list of points. + + + + Creates a bounding box from a bounding sphere. + + Bounding sphere to be used to create the bounding box. + Bounding box created from the bounding sphere. + + + + Creates a string representation of the bounding box. + + String representation of the bounding box. + + + + Provides XNA-like bounding sphere functionality. + + + + + Location of the center of the sphere. + + + + + Radius of the sphere. + + + + + Constructs a new bounding sphere. + + Location of the center of the sphere. + Radius of the sphere. + + + + Some helpers for indexing into vector bundles. + + + + + .Count.]]> + + The JIT recognizes that this value is constant! + + + + > VectorShift divides x by Vector.Count.]]> + + The JIT recognizes that this value is constant! + + + + Enumerable wrapper of an array interval. + + Type of the array elements. + + + + Creates a enumerable that spans an interval in an array. + + Array to iterate over. + Inclusive beginning of the iteration interval. + Exclusive end of the iteration interval. + + + + Creates a enumerable that starts at the first index of the array. + + Array to iterate over. + Exclusive end of the iteration interval. + + + + Creates a enumerable over the entire array. + + Array to iterate over. + + + + Enumerates over a given array region. + + Type of the array to iterate over. + + + + Defines a type capable of comparing two objects passed by reference. + + Type of the objects to compare. + + + + Defines a type capable of performing the hashing and equality comparisons necessary for hash based collections. + + Type of the elements to be hashed and compared. + + + + Collection of unique indices supporting add, remove, and contains operations. + + + + + Since we only ever need to support add, remove and contains checks, and because the indices are guaranteed unique, + we can just use packed bitfields. Each bit represents one index's containment state. + + + This can grow up to the number of (indexCount / 8) bytes in the worst case, but that is much, much smaller than using a dictionary or set. + 16384 bodies would only take 2KB. Even if you have 1000 batches all at that size, it's a pretty unconcerning amount of storage. + (And to be clear, 1000 batches is a crazy pathological number. Most simulations will have less than 20 batches.) + + + + + Gets whether the batch could hold the specified indices. + + List of indices to check for in the batch. + True if none of the indices are present in the set, false otherwise. + + + + Disposes the internal buffer. + + The instance can be reused after a Dispose if EnsureCapacity or Resize is called. + That's a little meaningless given that the instance is a value type, but hey, you don't have to new another one, that's something. + + + + Defines a type able to match an element. + + Type of the object to match. + + + + Sorts a set of keys and their associated values using radix sort. + + Only one invocation of the sort can be running at a time on a given instance of the sorter. + Type of the values to sort. + Type of the span that holds the keys to sort. + Type of the span that holds the values to sort. + Span containing the keys to sort. + Span containing the values to sort. + Scratch array to write temporary results into. + Scratch array to write temporary results into. + Start location of the sort. + Number of elements, including the start index, to sort. + Value equal to or greater than the value of any key within the sorted key set. Tighter bounds can allow faster execution. + Pool to pull temporary buffers from. + Span containing the sorted keys. Will be either the input keys span or scratchKeys span depending on the keysUpperBound. + Span containing the sorted values. Will be either the input values span or scratchValues span depending on the keysUpperBound. + Only the region defined by the startIndex and count is modified; the remainder of the span (whether it be the input span or the scratch span) is unmodified. + + + + Provides optimized equality testing, comparison, and hashing for primitive types. + + Type to compare and hash. + + + + Contains basic helpers for hashing. + + + + + Redistributes a hash. Useful for converting unique but contiguous hashes into a semirandom distribution. + + Hash to redistribute. + Hashed hash. + + + + Container supporting constant time adds and removes of key-value pairs while preserving fast iteration times. + Offers very direct access to information at the cost of safety. + + + + Be very careful when using this type. It has sacrificed a lot upon the altar of performance; a few notable issues include: + it is a value type and copying it around will break things without extreme care, + it cannot be validly default-constructed, + it exposes internal structures to user modification, + it rarely checks input for errors, + the enumerator doesn't check for mid-enumeration modification, + it allows unsafe addition that can break if the user doesn't manage the capacity, + it works on top of an abstracted memory blob which might internally be a pointer that could be rugpulled, + it does not (and is incapable of) checking that provided memory gets returned to the same pool that it came from. + + Note that the implementation is extremely simple. It uses single-step linear probing under the assumption of very low collision rates. + A generous table capacity is recommended; this trades some memory for simplicity and runtime performance. + Type of key held by the container. + Type of value held by the container. + Type of the equality tester and hash calculator used. + + + + Gets the number of elements in the dictionary. + + + + + Mask for use in performing fast modulo operations for hashes. Requires that the table span is a power of 2. + + + + + Desired size of the table relative to the size of the key/value spans in terms of a power of 2. Table capacity target will be elementCapacityTarget * 2^TablePowerOffset. + + + + + Backing memory of the dictionary's table. Values are distributed according to the EqualityComparer's hash function. + Slots containing 0 are unused and point to nothing. Slots containing higher values are equal to one plus the index of an element in the Span. + + + + + Backing memory containing the keys of the dictionary. + Indices from 0 to Count-1 hold actual data. All other data is undefined. + + + + + Backing memory containing the values of the dictionary. + Indices from 0 to Count-1 hold actual data. All other data is undefined. + + + + + Equality comparer used to compare and hash keys. + + + + + Gets or sets a key-value pair at the given index in the list representation. + + Index to grab a pair from. + Pair at the given index in the dictionary. + + + + Creates a new dictionary. + + Span to use as backing memory of the dictionary keys. + Span to use as backing memory of the dictionary values. + Span to use as backing memory of the table. Must be zeroed. + Comparer to use for the dictionary. + Target size of the table relative to the number of stored elements. + + + + Creates a new dictionary with a default constructed comparer. + + Span to use as backing memory of the dictionary keys. + Span to use as backing memory of the dictionary values. + Span to use as backing memory of the table. Must be zeroed. + Comparer to use for the dictionary. + Target size of the table relative to the number of stored elements. + + + + Creates a new dictionary. + + Initial target size of the key and value spans. The size of the initial buffer will be at least as large as the initialCapacity. + Target capacity relative to the initial capacity in terms of a power of 2. The size of the initial table buffer will be at least 2^tableSizePower times larger than the initial capacity. + Comparer to use in the dictionary. + Pool used for spans. + + + + Creates a new dictionary with a default constructed comparer. + + Initial target size of the key and value spans. The size of the initial buffer will be at least as large as the initialCapacity. + Target capacity relative to the initial capacity in terms of a power of 2. The size of the initial table buffer will be at least 2^tableSizePower times larger than the initial capacity. + Comparer to use in the dictionary. + Pool used for spans. + + + + Creates a new dictionary with a default constructed comparer. + + Initial target size of the key and value spans. The size of the initial buffer will be at least as large as the initialCapacity. + Comparer to use in the dictionary. + Pool used for spans. + + + + Swaps out the dictionary's backing memory span for a new span. + If the new span is smaller, the dictionary's count is truncated and the extra elements are dropped. + The old span is not cleared or returned to any pool; if it needs to be pooled or cleared, the user must handle it. + + New span to use for keys. + New span to use for values. + New span to use for the table. Must be zeroed. + Previous span used for keys. + Previous span used for values. + Previous span used for the table. + + + + Resizes the dictionary's backing array for the given size. + If the new span is smaller, the dictionary's count is truncated and the extra elements are dropped. + + Minimum size of the new object memory block. Actual size may be larger. + Pool used for spans. + + + + Returns the resources associated with the dictionary to pools. + + Pool used for key spans. + Pool used for value spans. + Pool used for table spans. + Type of the pool used for key spans. + Type of the pool used for value spans. + Type of the pool used for table spans. + + + + Ensures that the dictionary has enough room to hold the specified number of elements. + + Pool used for spans. + Number of elements to hold. + + + + Shrinks the internal buffers to the smallest acceptable size and releases the old buffers to the pools. + + Pool used for spans. + + + + Gets the index of the element in the table. + + Element to look up. + Index of the element in the redirect table, or if it is not present, the index of where it would be added. + The index of the element in the element arrays, if it exists; -1 otherwise. + True if the element is present in the dictionary, false if it is not. + + + + Gets the index of the key in the dictionary values list if it exists. + + Key to get the index of. + The index of the key if the key exists in the dictionary, -1 otherwise. + + + + Gets the index of the key in the dictionary values list if it exists. + + Key to get the index of. + The index of the key if the key exists in the dictionary, -1 otherwise. + + + + Checks if a given key already belongs to the dictionary. + + Key to test for. + True if the key already belongs to the dictionary, false otherwise. + + + + Checks if a given key already belongs to the dictionary. + + Key to test for. + True if the key already belongs to the dictionary, false otherwise. + + + + Tries to retrieve the value associated with a key if it exists. + + Key to look up. + Value associated with the specified key. + True if a value was found, false otherwise. + + + + Tries to retrieve the value associated with a key if it exists. + + Key to look up. + Value associated with the specified key. + True if a value was found, false otherwise. + + + + Attempts to find the index of the given key. If it is present, outputs the index and returns true. If it is not present, it allocates a slot for it, outputs the index of that new slot, and returns false. + If a new slot is allocated, the value stored in the slot is undefined. + + Key to find or allocate a slot for. + Index of the found or allocated slot. + True if the key was already present in the dictionary, false otherwise. + + + + Attempts to find the index of the given key. If it is present, outputs the index and returns true. If it is not present, it allocates a slot for it, outputs the index of that new slot, and returns false. + If a new slot is allocated, the value stored in the slot is undefined. + + Key to find or allocate a slot for. + Index of the found or allocated slot. + True if the key was already present in the dictionary, false otherwise. + + + + Attempts to find the index of the given key. If it is present, outputs the index and returns true. If it is not present, it allocates a slot for it, outputs the index of that new slot, and returns false. + If a new slot is allocated, the value stored in the slot is undefined. + + Key to find or allocate a slot for. + Pool used to resize the container if necessary to allocate. + Index of the found or allocated slot. + True if the key was already present in the dictionary, false otherwise. + + + + Attempts to find the index of the given key. If it is present, outputs the index and returns true. If it is not present, it allocates a slot for it, outputs the index of that new slot, and returns false. + If a new slot is allocated, the value stored in the slot is undefined. + + Key to find or allocate a slot for. + Pool used to resize the container if necessary to allocate. + Index of the found or allocated slot. + True if the key was already present in the dictionary, false otherwise. + + + + Adds a pair to the dictionary. If a version of the key (same hash code, 'equal' by comparer) is already present, + the existing pair is replaced by the given version. + + Key of the pair to add. + Value of the pair to add. + True if the pair was added to the dictionary, false if the key was already present and its pair was replaced. + + + + Adds a pair to the dictionary. If a version of the key (same hash code, 'equal' by comparer) is already present, + the existing pair is replaced by the given version. + + Key of the pair to add. + Value of the pair to add. + True if the pair was added to the dictionary, false if the key was already present and its pair was replaced. + + + + Adds a pair to the dictionary if it is not already present. + + Key of the pair to add. + Value of the pair to add. + True if the pair was added to the dictionary, false if the key was already present. + + + + Adds a pair to the dictionary if it is not already present. + + Key of the pair to add. + Value of the pair to add. + True if the pair was added to the dictionary, false if the key was already present. + + + + Adds a pair to the dictionary. If a version of the key (same hash code, 'equal' by comparer) is already present, + the existing pair is replaced by the given version. + + Key of the pair to add. + Value of the pair to add. + Pool used for spans. + True if the pair was added to the dictionary, false if the key was already present and its pair was replaced. + + + + Adds a pair to the dictionary. If a version of the key (same hash code, 'equal' by comparer) is already present, + the existing pair is replaced by the given version. + + Key of the pair to add. + Value of the pair to add. + Pool used for spans. + True if the pair was added to the dictionary, false if the key was already present and its pair was replaced. + + + + Adds a pair to the dictionary if it is not already present. + + Key of the pair to add. + Value of the pair to add. + Pool used for spans. + Type of the pool used for spans. + True if the pair was added to the dictionary, false if the key was already present. + + + + Adds a pair to the dictionary if it is not already present. + + Key of the pair to add. + Value of the pair to add. + Pool to pull resources from and to return resources to. + Type of the pool to use. + True if the pair was added to the dictionary, false if the key was already present. + + + + Removes an element from the dictionary according to its table and element index. Can only be used if the table and element index are valid. + + Index of the table entry associated with the existing element to remove. + Index of the existing element to remove in the contiguous key/value arrays. + + + + Removes a pair associated with a key from the dictionary if belongs to the dictionary. + Does not preserve the order of elements in the dictionary. + + Key of the pair to remove. + True if the key was found and removed, false otherwise. + + + + Removes a pair associated with a key from the dictionary if belongs to the dictionary. + Does not preserve the order of elements in the dictionary. + + Key of the pair to remove. + True if the key was found and removed, false otherwise. + + + + Removes all elements from the dictionary. + + + + + Removes all elements from the dictionary without modifying the contents of the keys or values arrays. + + + + + Gets the keys and values wrapped in spans. + + Keys from the dictionary. + Values from the dictionary. + + + + Container supporting list-like behaviors built on top of unmanaged buffers. + + + Be very careful when using this type. It has sacrificed a lot upon the altar of performance; a few notable issues include: + it is a value type and copying it around will break things without extreme care, + it cannot be validly default-constructed, + it exposes internal structures to user modification, + it rarely checks input for errors, + the enumerator doesn't check for mid-enumeration modification, + it allows unsafe addition that can break if the user doesn't manage the capacity, + it works on top of an abstracted memory blob which might internally be a pointer that could be rugpulled, + it does not (and is incapable of) checking that provided memory gets returned to the same pool that it came from. + + Type of the elements in the list. + + + + Backing memory containing the elements of the list. + Indices from 0 to Count-1 hold actual data. All other data is undefined. + + + + + Number of elements in the list. + + + + + Gets a reference to the element at the given index in the list. + + Index to grab an element from. + Element at the given index in the list. + + + + Gets a pointer to the element at the given index in the list. + + Index to grab an element pointer from. + Pointer to the element at the given index in the list. + + + + Creates a new list. + + Span to use as backing memory to begin with. + + + + Creates a new list. + + Pool to pull a span from. + The minimum size of the region to be pulled from the pool. Actual span may be larger. + + + + Swaps out the list's backing memory span for a new span. + If the new span is smaller, the list's count is truncated and the extra elements are dropped. + The old span is not cleared or returned to any pool; if it needs to be pooled or cleared, the user must handle it. + + New span to use. + Previous span used for elements. + + + + Resizes the list's backing array for the given size. + Any elements that do not fit in the resized span are dropped and the count is truncated. + + Minimum number of elements required in the new backing array. Actual capacity of the created span may exceed this size. + Pool to pull a new span from and return the old span to. + + + + Returns the resources associated with the list to pools. Any managed references still contained within the list are cleared (and some unmanaged resources may also be cleared). + + Pool used for element spans. + + + + Ensures that the list has enough room to hold the specified number of elements. Can be used to initialize a list. + + Number of elements to hold. + Pool used to obtain a new span if needed. + + + + Compacts the internal buffer to the minimum size required for the number of elements in the list. + + + + + Adds the elements of a buffer to the QuickList without checking capacity. + + Span of elements to add. + Start index of the added range. + Number of elements in the added range. + + + + Adds the elements of a buffer to the QuickList. + + Span of elements to add. + Start index of the added range. + Number of elements in the added range. + Pool used to obtain a new span if needed. + + + + Adds the elements of a buffer to the QuickList without checking capacity. + + Span of elements to add. + Start index of the added range. + Number of elements in the added range. + + + + Adds the elements of a buffer to the QuickList. + + Span of elements to add. + Start index of the added range. + Number of elements in the added range. + Pool used to obtain a new span if needed. + + + + Adds the elements of a span to the QuickList without checking capacity. + + Span of elements to add. + Start index of the added range. + Number of elements in the added range. + + + + Adds the elements of a span to the QuickList. + + Span of elements to add. + Start index of the added range. + Number of elements in the added range. + Pool used to obtain a new span if needed. + + + + Adds the elements of a span to the QuickList without checking capacity. + + Span of elements to add. + Start index of the added range. + Number of elements in the added range. + + + + Adds the elements of a span to the QuickList. + + Span of elements to add. + Start index of the added range. + Number of elements in the added range. + Pool used to obtain a new span if needed. + + + + Adds the elements of a span to the QuickList without checking capacity. + + Span of elements to add. + Start index of the added range. + Number of elements in the added range. + + + + Adds the elements of a span to the QuickList. + + Span of elements to add. + Start index of the added range. + Number of elements in the added range. + Pool used to obtain a new span if needed. + + + + Adds the elements of a span to the QuickList without checking capacity. + + Span of elements to add. + Start index of the added range. + Number of elements in the added range. + + + + Adds the elements of a span to the QuickList. + + Span of elements to add. + Start index of the added range. + Number of elements in the added range. + Pool used to obtain a new span if needed. + + + + Appends space on the end of the list without checking capacity and returns a reference to it. + + Reference to the allocated space. + + + + Appends space on the end of the list without checking capacity and returns a reference to the beginning of it. + + Number of elements to allocate space for. + Reference to the beginning of the allocated space. + + + + Appends space on the end of the list and returns a reference to it. + + Reference to the allocated space. + Pool used to obtain a new span if needed. + + + + Appends space on the end of the list and returns a reference to the beginning of it. + + Reference to the beginning of the allocated space. + Number of elements to allocate space for. + Pool used to obtain a new span if needed. + + + + Adds the element to the list without checking the count against the capacity. + + Item to add. + + + + Adds the element to the list. + + Item to add. + Pool used to obtain a new span if needed. + + + + Gets the index of the element in the list using the default comparer, if present. + + Element to find. + Index of the element in the list if present, -1 otherwise. + + + + Gets the index of the element in the list using the default comparer, if present. + + Element to find. + Index of the element in the list if present, -1 otherwise. + + + + Gets the index of the first element in the list which matches a predicate, if any. + + Predicate to match. + Index of the first matching element in the list if present, -1 otherwise. + + + + Removes an element from the list. Preserves the order of elements. + + Element to remove from the list. + True if the element was present and was removed, false otherwise. + + + + Removes an element from the list. Preserves the order of elements. + + Element to remove from the list. + True if the element was present and was removed, false otherwise. + + + + Removes the first element that matches a predicate from the list. Preserves the order of elements. + + Predicate to test elements with. + True if an element matched and was removed, false otherwise. + + + + Removes an element from the list. Does not preserve the order of elements. + + Element to remove from the list. + True if the element was present and was removed, false otherwise. + + + + Removes an element from the list. Comparisons use the default comparer for the type. Does not preserve the order of elements. + + Element to remove from the list. + True if the element was present and was removed, false otherwise. + + + + Removes the first element from the list that matches a predicate, moving from low to high indices. Does not preserve the order of elements. + + Predicate to test elements with. + True if an element matched and was removed, false otherwise. + + + + Removes an element from the list at the given index. Preserves the order of elements. + + Index of the element to remove from the list. + + + + Removes an element from the list at the given index. Does not preserve the order of elements. + + Index of the element to remove from the list. + + + + Removes and outputs the last element in the list. Assumes positive count. User is responsible for guaranteeing correctness. + + Last element of the list. + + + + Removes and outputs the last element in the list if it exists. + + Last element of the list. + True if the element existed and was removed, false otherwise. + + + + Determines whether the contains a specific value. + + + true if is found in the ; otherwise, false. + + The object to locate in the . + + + + Determines whether the collection contains a specific value. + + + True if is found in the collection; otherwise, false. + + The object to locate in the collection. + + + + Determines whether the collection contains an element that matches a predicate. + + + True if an element matching the predicate exists, otherwise false. + + The predicate to test against elements in the list. + + + + Clears the list by setting the count to zero and explicitly setting all relevant indices in the backing array to default values. + + + + + Container supporting double ended queue behaviors built on top of pooled arrays. + + + Be very careful when using this type. It has sacrificed a lot upon the altar of performance; a few notable issues include: + it is a value type and copying it around will break things without extreme care, + it cannot be validly default-constructed, + it exposes internal structures to user modification, + it rarely checks input for errors, + the enumerator doesn't check for mid-enumeration modification, + it allows unsafe addition that can break if the user doesn't manage the capacity, + it works on top of an abstracted memory blob which might internally be a pointer that could be rugpulled, + it does not (and is incapable of) checking that provided memory gets returned to the same pool that it came from. + + Type of the elements in the queue. + + + + Number of elements in the queue. + + + + + Index of the first element in the queue. + + + + + Index of the last element in the queue. + + + + + Mask based on the current span length used to do fast modulo operations; requires that the span has a power of 2 length. + + + + + Gets the backing memory containing the elements of the queue. + Indices from FirstIndex to LastIndex inclusive hold actual data. All other data is undefined. + Watch out for wrap around; LastIndex can be less than FirstIndex even when count > 0! + + + + + Gets the backing array index for the logical queue index. + + Index in the logical queue. + The index in in the backing array corresponding to the given logical queue index. + + + + Gets an element at the given index in the queue. + 0 gets the element at the FirstIndex. Count-1 would get the element at LastIndex. + + Index to grab an element from. + Element at the given index in the queue. + + + + Creates a new queue. + + Span to use as backing memory to begin with. + + + + Creates a new queue. + + Pool to pull a span from. + The minimum size of the region to be pulled from the pool. Actual span may be larger. + + + + Swaps out the queue's backing memory span for a new span. + If the new span is smaller, the queue's count is truncated and the extra elements are dropped. + The old span is not cleared or returned to any pool; if it needs to be pooled or cleared, the user must handle it. + + New span to use. + Previous span used for elements. + + + + Resizes the queue's backing array for the given size. + Any elements that do not fit in the resized span are dropped and the count is truncated. + + Minimum number of elements required in the new backing array. Actual capacity of the created span may exceed this size. + Pool to pull a new span from and return the old span to. + + + + Returns the resources associated with the queue to pools. Any managed references still contained within the queue are cleared (and some unmanaged resources may also be cleared). + + Pool used for element spans. + + + + Ensures that the queue has enough room to hold the specified number of elements. + + Number of elements to hold. + Pool to pull a new span from and return the old span to. + + + + Compacts the internal buffer to the minimum size required for the number of elements in the queue. + + Pool to pull from if necessary. + + + + Enqueues the element to the end of the queue, incrementing the last index. + + Item to enqueue. + + + + Enqueues the element to the start of the queue, decrementing the first index. + + Item to enqueue. + + + + Enqueues the element to the end of the queue, incrementing the last index. + + Item to enqueue. + + + + Enqueues the element to the start of the queue, decrementing the first index. + + Item to enqueue. + + + + Dequeues an element from the start of the queue, incrementing the first index. + + Element removed from the queue. + + + + Dequeues an element from the end of the queue, decrementing the last index. + + Element removed from the queue. + + + + Attempts to dequeue an element from the start of the queue, incrementing the first index. + + Element removed from the queue, if any. + True if an element was available to remove, false otherwise. + + + + Attempts to dequeue an element from the end of the queue, decrementing the last index. + + Element removed from the queue, if any. + True if an element was available to remove, false otherwise. + + + + Removes the element at the given index, preserving the order of the queue. + + Index in the queue to remove. The index is in terms of the conceptual queue, not the backing array. + + + + Clears the queue by setting the count to zero and explicitly setting all relevant indices in the backing array to default values. + + + + + Clears the queue without changing any of the values in the backing array. Be careful about using this if the queue contains reference types. + + + + + Container supporting constant time adds and removes while preserving fast iteration times. + Offers very direct access to information at the cost of safety. + + + + Be very careful when using this type. It has sacrificed a lot upon the altar of performance; a few notable issues include: + it is a value type and copying it around will break things without extreme care, + it cannot be validly default-constructed, + it exposes internal structures to user modification, + it rarely checks input for errors, + the enumerator doesn't check for mid-enumeration modification, + it allows unsafe addition that can break if the user doesn't manage the capacity, + it works on top of an abstracted memory blob which might internally be a pointer that could be rugpulled, + it does not (and is incapable of) checking that provided memory gets returned to the same pool that it came from. + + Note that the implementation is extremely simple. It uses single-step linear probing under the assumption of very low collision rates. + A generous table capacity is recommended; this trades some memory for simplicity and runtime performance. + Type of element held by the container. + Type of the equality tester and hash calculator used. + + + + Gets the number of elements in the set. + + + + + Mask for use in performing fast modulo operations for hashes. Requires that the table span is a power of 2. + + + + + Desired size of the table relative to the size of the key/value spans in terms of a power of 2. Table capacity target will be elementCapacityTarget * 2^TablePowerOffset. + + + + + Backing memory of the set's table. Values are distributed according to the EqualityComparer's hash function. + Slots containing 0 are unused and point to nothing. Slots containing higher values are equal to one plus the index of an element in the Span. + + + + + Backing memory containing the elements of the set. + Indices from 0 to Count-1 hold actual data. All other data is undefined. + + + + + Equality comparer used to compare and hash elements. + + + + + Gets or sets an element at the given index in the list representation of the set. + + Index to grab an element from. + Element at the given index in the set. + + + + Creates a new set. + + Span to use as backing memory of the set elements. + Span to use as backing memory of the table. Must be zeroed out. + Comparer to use for the set. + Target size of the table relative to the number of stored elements. + + + + Creates a new set using a default constructed equality comparer. + + Span to use as backing memory of the set elements. + Span to use as backing memory of the table. Must be zeroed. + Target size of the table relative to the number of stored elements. + + + + Creates a new set. + + Pool to pull spans from. + Initial target size of the key and value spans. The size of the initial buffer will be at least as large as the initialCapacity. + Target capacity relative to the initial capacity in terms of a power of 2. The size of the initial table buffer will be at least 2^tableSizePower times larger than the initial capacity. + Comparer to use in the set. + + + + Creates a new set with a default constructed comparer. + + Pool to pull spans from. + Initial target size of the key and value spans. The size of the initial buffer will be at least as large as the initialCapacity. + Target capacity relative to the initial capacity in terms of a power of 2. The size of the initial table buffer will be at least 2^tableSizePower times larger than the initial capacity. + + + + Creates a new set with a default constructed comparer. + + Pool to pull spans from. + Initial target size of the key and value spans. The size of the initial buffer will be at least as large as the initialCapacity. + + + + Swaps out the set's backing memory span for a new span. + If the new span is smaller, the set's count is truncated and the extra elements are dropped. + The old span is not cleared or returned to any pool; if it needs to be pooled or cleared, the user must handle it. + + New span to use for elements. + New span to use for the table. Must be zeroed. + Previous span used for elements. + Previous span used for the table. + + + + Resizes the set's backing array for the given size. + If the new span is smaller, the set's count is truncated and the extra elements are dropped. + + Minimum size of the new object memory block. Actual size may be larger. + Pool to take spans from. + + + + Returns the resources associated with the set to pools. Any managed references still contained within the set are cleared (and some unmanaged resources may also be cleared). + + Pool used for element spans. + + + + Ensures that the set has enough room to hold the specified number of elements. + + Pool used for spans. + Number of elements to hold. + + + + Shrinks the internal buffers to the smallest acceptable size and releases the old buffers to the pools. + + Element to add. + Pool used for spans. + + + + Gets the index of the element in the table. + + Element to look up. + Index of the element in the redirect table, or if it is not present, the index of where it would be added. + The index of the element in the elements array, if it exists; -1 otherwise. + True if the element is present in the set, false if it is not. + + + + Gets the index of the element in the set if it exists. + + Element to get the index of. + The index of the element if the element exists in the set, -1 otherwise. + + + + Gets the index of the element in the set if it exists. + + Element to get the index of. + The index of the element if the element exists in the set, -1 otherwise. + + + + Checks if a given element already belongs to the set. + + Element to test for. + True if the element already belongs to the set, false otherwise. + + + + Checks if a given element already belongs to the set. + + Element to test for. + True if the element already belongs to the set, false otherwise. + + + + Adds an element to the set. If a version of the element (same hash code, 'equal' by comparer) is already present, + it is replaced by the given version. + Does not resize in the event that the capacity is exceeded. + + Element to add. + True if the element was added to the set, false if the element was already present and was instead replaced. + + + + Adds an element to the set. If a version of the element (same hash code, 'equal' by comparer) is already present, + it is replaced by the given version. + Does not resize in the event that the capacity is exceeded. + + Element to add. + True if the element was added to the set, false if the element was already present and was instead replaced. + + + + Adds an element to the set if it is not already present. + Does not resize in the event that the capacity is exceeded. + + Element to add. + True if the element was added to the set, false if the element was already present. + + + + Adds an element to the set if it is not already present. + Does not resize in the event that the capacity is exceeded. + + Element to add. + True if the element was added to the set, false if the element was already present. + + + + Adds an element to the set. If a version of the element (same hash code, 'equal' by comparer) is already present, + it is replaced by the given version. + + Element to add. + Pool used for spans. + True if the element was added to the set, false if the element was already present and was instead replaced. + + + + Adds an element to the set if it is not already present. + + Element to add. + Pool used for spans. + True if the element was added to the set, false if the element was already present. + + + + Adds an element to the set. If a version of the element (same hash code, 'equal' by comparer) is already present, + it is replaced by the given version. + + Element to add. + Pool used for spans. + True if the element was added to the set, false if the element was already present and was instead replaced. + + + + Adds an element to the set if it is not already present. + + Element to add. + Pool used for spans. + True if the element was added to the set, false if the element was already present. + + + + Removes an element from the dictionary according to its table and element index. Can only be used if the table and element index are valid. + + Index of the table entry associated with the existing element to remove. + Index of the existing element to remove in the contiguous element array. + + + + Removes an element from the set if belongs to the set. + Does not preserve the order of elements in the set. + + Element to remove. + True if the element was found and removed, false otherwise. + + + + Removes an element from the set if belongs to the set. + Does not preserve the order of elements in the set. + + Element to remove. + True if the element was found and removed, false otherwise. + + + + Removes all elements from the set. + + + + + Removes all elements from the set without modifying the contents of the elements array. + + + + + Provides equality comparison and hashing for referenced types. + + Type to compare for equality and hash. + + + + IEqualityComparerRef wrapper around an EqualityComparer. + + Type of the objects to compare and hash. + + + + Creates a default comparer for the given type. + + Predicate to test against other items using the default comparer for this type. + + + + IPredicate wrapper around an EqualityComparer and an object to compare against. + + Type of the objects to compare. + + + + Creates a default comparer for the given type. + + Item to compare against other items. + Predicate to test against other items using the default comparer for this type. + + + + The current containment state of two objects. + + + + + The objects are separate. + + + + + One object fully contains the other. + + + + + The objects are intersecting, but neither object fully contains the other. + + + + + Gets a reference to an element from a vector without using pointers, bypassing direct vector access for codegen reasons. This performs no bounds testing! + + + + + Copies from one bundle lane to another. The bundle must be a contiguous block of Vector types. + + Type of the copied bundles. + Source bundle of the data to copy. + Index of the lane within the source bundle. + Target bundle of the data to copy. + Index of the lane within the target bundle. + + For performance critical operations, a specialized implementation should be used. This uses a loop with stride equal to a Vector that isn't yet unrolled. + + + + + Clears a bundle lane using the default value of the specified type. The bundle must be a contiguous block of Vector types, all sharing the same type, + and the first vector must start at the address pointed to by the bundle reference. + + Type containing one or more Vectors. + Type of the vectors to clear. + Target bundle to clear a lane in. + Index of the lane within the target bundle to clear. + + For performance critical operations, a specialized implementation should be used. This uses a loop with stride equal to a Vector. + + + + + Gets a reference to a shifted bundle container such that the first slot of each bundle covers the given inner index of the original bundle reference. + + Type of the bundle container. + Bundle container whose reference acts as the base for the shifted reference. + Index within the bundle to access with the shifted reference. + Shifted bundle container reference covering the inner index of the original bundle reference. + + + + Gets a reference to the first element in the vector reference. + + Type of value held by the vector. + Vector to pull the first slot value from. + Reference to the value in the given vector's first slot. + + + + Defines a loop body function able to handle the equivalent of a foreach's body. Takes a ref parameter for efficiency when dealing with large value types. + + Type to enumerate over. + + + + Defines a loop body function able to handle the equivalent of a foreach's body. + + Type to enumerate over. + + + + Defines a loop body function able to handle the equivalent of a foreach's body that supports breaking the loop early. + + Type to enumerate over. + + + + Executes one execution of the loop body. + + Visited element. + True if the loop should continue, false otherwise. + + + + Defines a loop body function able to handle the equivalent of a foreach's body that supports breaking the loop early. + Takes a ref parameter for efficiency when dealing with large value types. + + Type to enumerate over. + + + + Executes one execution of the loop body. + + Visited element. + True if the loop should continue, false otherwise. + + + + Provides simple 2d cell hashing. + + + + + A set of 3 integers, useful for spatial hashing. + + + + + Provides multithreading dispatch primitives, a thread count, and per thread resource pools for the simulation to use. + + + Note that the simulation does not require a true load balancing forloop implementation. All that's needed is a way to jumpstart some threads. + All systems which use multithreading tend to have some form of domain specific load balancing that a general purpose thread pool or parallel for loop implementation + couldn't match. The simulation also tends to keep the number of dispatches as low as it can. Combined, these two things reduce the importance of a + very highly optimized dispatcher. + This is important when a user wants to share some other thread pool, but doesn't have the time to guarantee extremely high performance and high quality + load balancing. Instead of worrying about that, they can just wrap whatever implementation they happen to have and it'll probably work fine. + + + + + Gets the number of workers available in the thread dispatcher. + + Note that some systems (like the solver) expect the ThreadCount to be backed by truly independent threads capable of progression even when one is blocked. + If the ThreadCount doesn't represent independent threads, deadlocks will occur. + + + + + Dispatches all the available workers. + + Delegate to be invoked on for every worker. + + + + Gets the memory pool associated with a given worker index. It is guaranteed that no other workers will share the same pool for the duration of the worker's execution. + + All usages of the memory pool within the simulation are guaranteed to return thread pool memory before the function returns. In other words, + thread memory pools are used for strictly ephemeral memory, and it will never be held by the simulation outside the scope of a function that + takes the IThreadDispatcher as input. + Index of the worker to grab the pool for. + The memory pool for the specified worker index. + + + + Contains conditional extensions to check for bad values in various structures. + + + + + Checks a single float for validity. + + Value to validate. + True if the value is invalid, false if it is valid. + + + + Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown. + This is only run when the CHECKMATH symbol is defined. + + + + + Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown. + This is only run when the CHECKMATH symbol is defined. + + + + + Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown. + This is only run when the CHECKMATH symbol is defined. + + + + + Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown. + This is only run when the CHECKMATH symbol is defined. + + + + + Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown. + This is only run when the CHECKMATH symbol is defined. + + + + + Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown. + This is only run when the CHECKMATH symbol is defined. + + + + + Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown. + This is only run when the CHECKMATH symbol is defined. + + + + + Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown. + This is only run when the CHECKMATH symbol is defined. + + + + + Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown. + This is only run when the CHECKMATH symbol is defined. + + + + + Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown. + This is only run when the CHECKMATH symbol is defined. + + + + + Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown. + This is only run when the CHECKMATH symbol is defined. + + + + + Checks the value to see if it is a NaN or infinite. If it is, an exception is thrown. + This is only run when the CHECKMATH symbol is defined. + + + + + Contains helper math methods. + + + + + Approximate value of Pi. + + + + + Approximate value of Pi multiplied by two. + + + + + Approximate value of Pi divided by two. + + + + + Approximate value of Pi divided by four. + + + + + Clamps a value between a minimum and maximum value. + + Value to clamp. + Minimum value. If the value is less than this, the minimum is returned instead. + Maximum value. If the value is more than this, the maximum is returned instead. + Clamped value. + + + + Returns the higher value of the two parameters. + + First value. + Second value. + Higher value of the two parameters. + + + + Returns the lower value of the two parameters. + + First value. + Second value. + Lower value of the two parameters. + + + + Clamps a value between a minimum and maximum value. + + Value to clamp. + Minimum value. If the value is less than this, the minimum is returned instead. + Maximum value. If the value is more than this, the maximum is returned instead. + Clamped value. + + + + Returns the higher value of the two parameters. + + First value. + Second value. + Higher value of the two parameters. + + + + Returns the lower value of the two parameters. + + First value. + Second value. + Lower value of the two parameters. + + + + Clamps a value between a minimum and maximum value. + + Value to clamp. + Minimum value. If the value is less than this, the minimum is returned instead. + Maximum value. If the value is more than this, the maximum is returned instead. + Clamped value. + + + + Returns the higher value of the two parameters. + + First value. + Second value. + Higher value of the two parameters. + + + + Returns the lower value of the two parameters. + + First value. + Second value. + Lower value of the two parameters. + + + + Converts degrees to radians. + + Degrees to convert. + Radians equivalent to the input degrees. + + + + Converts radians to degrees. + + Radians to convert. + Degrees equivalent to the input radians. + + + + Returns -1 if the value is negative and 1 otherwise. + + Value to compute the sign of. + -1 if the input is negative, and 1 otherwise. + + + + Computes an approximation of cosine. Maximum error a little above 3e-6. + + Value to take the cosine of. + Approximate cosine of the input value. + + + + Computes an approximation of sine. Maximum error a little above 3e-6. + + Value to take the sine of. + Approximate sine of the input value. + + + + Computes an approximation of cosine. Maximum error a little above 3e-6. + + Values to take the cosine of. + Approximate cosine of the input values. + + + + Computes an approximation of sine. Maximum error a little above 3e-6. + + Value to take the sine of. + Approximate sine of the input value. + + + + Computes an approximation of arccos. Maximum error less than 6.8e-5. + + Input value to the arccos function. + Result of the arccos function. + + + + Gets the change in angle from a to b as a signed value from -pi to pi. + + Source angle. + Target angle. + Difference between a and b, expressed as a value from -pi to pi. + + + + Provides SIMD-aware 4x4 matrix math. + + + All functions assume row vectors. + + + + + Row 1 of the matrix. + + + + + Row 2 of the matrix. + + + + + Row 3 of the matrix. + + + + + Row 4 of the matrix. + + + + + Transforms a vector with a transposed matrix. + + Row vector to transform. + Matrix whose transpose will be applied to the vector. + Transformed vector. + + + + Transforms a vector with a matrix. + + Row vector to transform. + Matrix to apply to the vector. + Transformed vector. + + + + Transforms a vector with a matrix. Implicitly uses 1 as the fourth component of the input vector. + + Row vector to transform. + Matrix to apply to the vector. + Transformed vector. + + + + Multiplies a matrix by another matrix. + + First matrix. + Second matrix. + Result of the matrix multiplication. + + + + Concatenates two matrices. + + First input matrix. + Second input matrix. + Concatenated transformation of the form m1 * m2. + + + + Creates a right-handed perspective matrix. + + Vertical field of view of the perspective in radians. + Width of the viewport over the height of the viewport. + Near clip plane of the perspective. + Far clip plane of the perspective. + Resulting perspective matrix. + + + + Creates a left-handed perspective matrix. + + Vertical field of view of the perspective in radians. + Width of the viewport over the height of the viewport. + Near clip plane of the perspective. + Far clip plane of the perspective. + Resulting perspective matrix. + + + + Creates a right-handed perspective matrix. + + Vertical field of view of the perspective in radians. + Horizontal field of view of the perspective in radians. + Near clip plane of the perspective. + Far clip plane of the perspective. + Resulting perspective matrix. + + + + Creates a right-handed perspective matrix. + + Vertical field of view of the perspective in radians. + Horizontal field of view of the perspective in radians. + Near clip plane of the perspective. + Far clip plane of the perspective. + Resulting perspective matrix. + + + + Creates a right-handed perspective matrix. + + Vertical field of view of the perspective in radians. + Width of the viewport over the height of the viewport. + Near clip plane of the perspective. + Far clip plane of the perspective. + Resulting perspective matrix. + + + + Creates a right handed orthographic projection. + + Leftmost coordinate of the projected area. + Rightmost coordinate of the projected area. + Bottom coordinate of the projected area. + Top coordinate of the projected area. + Near plane of the projection. + Far plane of the projection. + The resulting orthographic projection matrix. + + + + Inverts the matrix. + + Matrix to invert. + Inverted version of the matrix. + + + + Inverts the matrix. + + Matrix to invert. + Inverted version of the matrix. + + + + Creates a view matrix pointing from a position to a target with the given up vector. + + Position of the camera. + Target of the camera. + Up vector of the camera. + Look at matrix. + + + + Creates a view matrix pointing from a position to a target with the given up vector. + + Position of the camera. + Target of the camera. + Up vector of the camera. + Look at matrix. + + + + Creates a view matrix pointing in a direction with a given up vector. + + Position of the camera. + Forward direction of the camera. + Up vector of the camera. + Look at matrix. + + + + Creates a view matrix pointing looking in a direction with a given up vector. + + Position of the camera. + Forward direction of the camera. + Up vector of the camera. + Look at matrix. + + + + Creates a rigid world matrix from a rotation and position. + + Rotation of the transform. + Position of the transform. + 4x4 matrix representing the combined transform. + + + + Creates a rigid world matrix from a rotation and position. + + Rotation of the transform. + Position of the transform. + 4x4 matrix representing the combined transform. + + + + Creates a 4x4 matrix from a 3x3 matrix. All extra columns and rows filled with 0 except the W.W, which is set to 1. + + Smaller matrix to base the larger matrix on. + Larger matrix that has the smaller matrix as a submatrix. + + + + Creates a 4x4 matrix from a 3x3 matrix. All extra columns and rows filled with 0 except the W.W, which is set to 1. + + Smaller matrix to base the larger matrix on. + Larger matrix that has the smaller matrix as a submatrix. + + + + First row of the matrix. + + + + + Second row of the matrix. + + + + + Multiplies a matrix by another matrix, where the second matrix is sampled as if it were transposed: result = a * transpose(b). + + First matrix in the pair. + Matrix to be sampled as if it were transposed when multiplied with the first matrix. + Result of the multiplication a * transpose(b). + + + + Multiplies every component in the matrix by the given scalar value. + + Matrix to scale. + Scaling value to apply to the matrix's components. + Resulting matrix with scaled components. + + + + Adds the components of one matrix to another. + + First matrix to add. + Second matrix to add. + Sum of the two given matrices. + + + + Subtracts the components of one matrix from another. + + Matrix to be subtracted from.. + Matrix to subtract from the other. + Result of the subtraction. + + + + Inverts the given matix. + + Matrix to be inverted. + Inverted matrix. + + + + First row of the matrix. + + + + + Second row of the matrix. + + + + + Multiplies a matrix by another matrix, where the first matrix is sampled as if it were transposed: result = transpose(a) * b. + + Matrix to be sampled as if it were transposed when multiplied with the second matrix. + Second matrix in the pair. + Result of the multiplication transpose(a) * b. + + + + Multiplies a matrix by another matrix, where the second matrix is sampled as if it were transposed: result = a * transpose(b). + + First matrix in the pair. + Matrix to be sampled as if it were transposed when multiplied with the first matrix. + Result of the multiplication a * transpose(b). + + + + Multiplies every component in the matrix by the given scalar value. + + Matrix to scale. + Scaling value to apply to the matrix's components. + Resulting matrix with scaled components. + + + + 3 row, 3 column matrix. + + + + + Gets the 3x3 identity matrix. + + + + + Adds the components of two matrices together. + + First matrix to add. + Second matrix to add. + Sum of the two input matrices. + + + + Scales the components of a matrix by a scalar. + + Matrix to scale. + Scale to apply to the matrix's components. + Scaled matrix. + + + + Subtracts the components of one matrix from another. + + Matrix to be subtracted from. + Matrix to subtract from a. + Difference of the two input matrices. + + + + Computes the transposed matrix of a matrix. + + Matrix to transpose. + Transposed matrix. + + + + Calculates the determinant of the matrix. + + The matrix's determinant. + + + + Inverts the given matix. + + Matrix to be inverted. + Inverted matrix. + + + + Inverts the given matix. + + Matrix to be inverted. + Inverted matrix. + + + + Transforms the vector by the matrix. + + Vector3 to transform. + Matrix to use as the transformation. + Product of the transformation. + + + + Transforms the vector by the matrix's transpose. + + Vector3 to transform. + Matrix to use as the transformation transpose. + Product of the transformation. + + + + Multiplies the two matrices. + + First matrix to multiply. + Second matrix to multiply. + Product of the multiplication. + + + + Multiplies the two matrices, where a is treated as transposed: result = transpose(a) * b + + First matrix to multiply that will be transposed. + Second matrix to multiply. + Product of the multiplication. + + + + Creates a 3x3 matrix representing the given scale along its local axes. + + Scale to represent. + Matrix representing a scale. + + + + Creates a matrix representing a rotation derived from an axis and angle. + + Axis of the rotation. + Angle of the rotation. + Resulting rotation matrix. + + + + Creates a matrix representing a rotation derived from an axis and angle. + + Axis of the rotation. + Angle of the rotation. + Resulting rotation matrix. + + + + Creates a matrix such that a x v = a * result. + + Vector to build the skew symmetric matrix from. + Skew symmetric matrix representing the cross product. + + + + Concatenates two matrices. + + First input matrix. + Second input matrix. + Concatenated transformation of the form m1 * m2. + + + + First row of the matrix. + + + + + Second row of the matrix. + + + + + Third row of the matrix. + + + + + Multiplies a matrix by another matrix, where the first matrix is sampled as if it were transposed: result = transpose(a) * b. + + Matrix to be sampled as if it were transposed when multiplied with the second matrix. + Second matrix in the pair. + Result of the multiplication transpose(a) * b. + + + + Multiplies a matrix by another matrix, where the second matrix is sampled as if it were transposed: result = a * transpose(b). + + First matrix in the pair. + Matrix to be sampled as if it were transposed when multiplied with the first matrix. + Result of the multiplication a * transpose(b). + + + + Negates the components of a matrix. + + Matrix to negate. + Negated result matrix. + + + + Multiplies every component in the matrix by the given scalar value. + + Matrix to scale. + Scaling value to apply to the matrix's components. + Resulting matrix with scaled components. + + + + Pulls one lane out of the wide representation. + + Source of the lane. + Non-SIMD type to store the lane in. + + + + Pulls one lane out of the wide representation. + + Source of the lane. + Index of the lane within the wide representation to read. + Non-SIMD type to store the lane in. + + + + Represents a chunk of abstract memory supporting allocations and deallocations. + Never moves any memory. + + Uses an extremely simple ring buffer that makes no attempt to skip groups of allocations. Not particularly efficient. + + + + Gets or sets the capacity of the allocator. + + + + + Index in allocations that we should start at during the next allocation attempt. + + + + + Creates a new allocator. + + Size of the memory handled by the allocator in elements. + Estimated number of allocations to allocate room for in the internal structures. + Pool to pull internal resources from. + + + + Checks if the id is currently allocated. + + Id to check for. + True if the id is present in the allocations set, false otherwise. + + + + Gets the allocation region associated with the given allocation id if it is present. + + Allocation id to look up the allocation for. + Allocation associated with the id, if present. + True if the allocationId was present in the allocator, false otherwise. + + + + Checks if a block of memory can fit into the current state of the allocator. + + Size of the memory to test. + Ids of allocations to treat as nonexistent for the purposes of the test. + True if the size could fit, false if out of memory or if memory was too fragmented to find a spot. + + + + Checks if a block of memory can fit into the current state of the allocator. + + Size of the memory to test. + True if the size could fit, false if out of memory or if memory was too fragmented to find a spot. + + + + Attempts to allocate a range of memory. + + Unique id of the memory to allocate. + Size of the memory to allocate. + Starting index of the allocated memory, if successful. + True if the allocation succeeded, false if out of memory or if memory was too fragmented to find a spot. + + + + Removes the memory associated with the id from the pool. + + Id to remove. + True of the id was found, false otherwise. + + + + Gets the size of the largest contiguous area and the total free space in the allocator. + Not very efficient; runs in linear time for the number of allocations. + + Largest contiguous region in the allocator. The allocator can hold an allocation up to this size. + Total free space in the allocator. + + + + Finds the first allocation with empty space before it and pulls it forward to close the gap. Assumes the ability to perform synchronous reallocation. + + Id of the allocation to be moved, if any. + Size of the moved allocation. + Old starting location of the allocation. + New starting location of the allocation. + True if a compaction was performed, false otherwise. + + + + Attempts to resize a given allocation to a new size. If the new size is smaller, the start index remains unchanged. + + Id of the allocation to resize. + New desired size of the allocation. + Old start location of the allocation. + New start location of the allocation. + True if the resize was successful. False if there was insufficient room for the larger allocation. + + + + Span over an unmanaged memory region. + + Type of the memory exposed by the span. + + + + Implementation specific identifier of the raw buffer set by its source. If taken from a BufferPool, Id represents the index in the power pool from which it was taken. + + + + + Gets a reference to the element at the given index. + + Index of the element to grab a reference of. + Reference to the element at the given index. + + + + Gets a pointer to the element at the given index. + + Index of the element to retrieve a pointer for. + Pointer to the element at the given index. + + + + Creates a view of a subset of the buffer's memory. + + Index at which to start the sliced buffer. + Number of elements to include in the sliced buffer. + Buffer spanning the specified subset of the original buffer. + + + + Creates a view of a subset of the buffer's memory, starting from the first index. + + Number of elements to include in the sliced buffer. + Buffer spanning the specified subset of the original buffer. + + + + Creates a view of a subset of the buffer's memory. + + Index at which to start the sliced buffer. + Number of elements to include in the sliced buffer. + Buffer spanning the specified subset of the original buffer. + + + + Creates a view of a subset of the buffer's memory, starting from the first index. + + Number of elements to include in the sliced buffer. + Buffer spanning the specified subset of the original buffer. + + + + Gets the length of the buffer in typed elements. + + + + + Gets whether the buffer references non-null memory. + + + + + Zeroes out the buffer's memory. + + Start location in the buffer. + Number of elements to clear beyond the start index. + + + + Copies buffer data into another buffer. + + Start index in the source buffer. + Target buffer to copy into. + Start index in the target buffer. + Number of elements to copy from the source buffer into the target buffer. + + + + Copies buffer data into another buffer. + + Start index in the source buffer. + Target buffer to copy into. + Start index in the target buffer. + Number of elements to copy from the source buffer into the target buffer. + + + + Copies span data into this buffer. + + Source span to copy from. + Start index in the source buffer. + Start index in the target buffer. + Number of elements to copy from the source buffer into the target buffer. + + + + Copies span data into this buffer. + + Source span to copy from. + Start index in the source buffer. + Start index in the target buffer. + Number of elements to copy from the source buffer into the target buffer. + + + + Gets the index of an element in the buffer using the type's default comparer. + + Element to look for in the buffer. + Start index at which to begin the search. + Number of elements to scan beyond the start index. + Index of the element in the buffer if found, -1 otherwise. + + + + Gets the index of an element in the buffer using the type's default comparer. + + Element to look for in the buffer. + Start index at which to begin the search. + Number of elements to scan beyond the start index. + Index of the element in the buffer if found, -1 otherwise. + + + + Gets the index of the first element that matches a provided predicate. + + Predicate to test each element with. + Start index at which to begin the search. + Number of elements to scan beyond the start index. + Index of the first matching element in the buffer if any, -1 otherwise. + + + + Creates an untyped buffer containing the same data as the Buffer. + + Untyped buffer containing the same data as the source buffer. + + + + Unmanaged memory pool that creates pinned blocks of memory for use in spans. + + This currently works by allocating large managed arrays and pinning them under the assumption that they'll end up in the large object heap. + + + + Unpins and drops the reference to the underlying array. + + + + + Pool of slots available to this power level. + + + + + Creates a new buffer pool. + + Minimum size of individual block allocations. Must be a power of 2. + Pools with single allocations larger than the minimum will use the minimum value necessary to hold one element. + Buffers will be suballocated from blocks. + Use a value larger than the large object heap cutoff (85000 bytes as of this writing in the microsoft runtime) + to avoid interfering with generational garbage collection. + Number of suballocations to preallocate reference space for. + This does not preallocate actual blocks, just the space to hold references that are waiting in the pool. + + + + Ensures that the pool associated with a given power has at least a certain amount of capacity, measured in bytes. + + Minimum number of bytes to require for the power pool. + Power associated with the pool to check. + + + + Gets the capacity allocated for a power. + + Power to check. + Allocated capacity for the given power. + + + + Takes a buffer large enough to contain a number of bytes. Capacity may be larger than requested. + + Desired minimum capacity of the buffer in bytes. + Buffer that can hold the bytes. + + + + Takes a buffer of the requested size from the pool. + + Desired capacity of the buffer in bytes. + Buffer of the requested size. + + + + Takes a buffer large enough to contain a number of elements of a given type. Capacity may be larger than requested. + + Type of the elements in the buffer. + Desired minimum capacity of the buffer in typed elements. + Buffer large enough to contain the requested number of elements. + + + + Takes a typed buffer of the requested size from the pool. + + Type of the instances in the buffer. + Desired capacity of the buffer in typed elements. + Typed buffer of the requested size. + + + + Takes a buffer large enough to contain a number of bytes given by a power, where the number of bytes is 2^power. + + Number of bytes that should fit within the buffer as an exponent, where the number of bytes is 2^power. + Buffer that can hold the bytes. + + + + Returns a buffer to the pool by id. + + Buffer to return to the pool. + Typed buffer pools zero out the passed-in buffer by convention. + This costs very little and avoids a wide variety of bugs (either directly or by forcing fast failure). For consistency, BufferPool.Return does the same thing. + This "Unsafe" overload should be used only in cases where there's a reason to bypass the clear; the naming is intended to dissuade casual use. + + + + Returns a buffer to the pool. + + Buffer to return to the pool. + + + + Returns a buffer to the pool. + + Buffer to return to the pool. + + + + Resizes a buffer to the smallest size available in the pool which contains the target size. Copies a subset of elements into the new buffer. + Final buffer size is at least as large as the target size and may be larger. + + Buffer reference to resize. + Number of bytes to resize the buffer for. + Number of bytes to copy into the new buffer from the old buffer. + + + + Resizes a buffer to the target size. Copies a subset of elements into the new buffer. + + Buffer reference to resize. + Number of bytes to resize the buffer for. + Number of bytes to copy into the new buffer from the old buffer. + + + + Resizes a typed buffer to the smallest size available in the pool which contains the target size. Copies a subset of elements into the new buffer. + Final buffer size is at least as large as the target size and may be larger. + + Type of the buffer to resize. + Buffer reference to resize. + Number of elements to resize the buffer for. + Number of elements to copy into the new buffer from the old buffer. + + + + Resizes a buffer to the target size. Copies a subset of elements into the new buffer. + + Type of the buffer to resize. + Buffer reference to resize. + Number of elements to resize the buffer for. + Number of elements to copy into the new buffer from the old buffer. + + + + Gets or sets whether the BufferPool's backing resources are pinned. If no blocks are allocated internally, this returns true. + Setting this to false invalidates all outstanding pointers, and any attempt to take or return buffers while unpinned will fail (though not necessarily immediately). + The only valid operations while unpinned are setting Pinned to true and clearing the pool. + + + + + Unpins and drops reference to all memory. Any outstanding buffers will be invalidated silently. + + + + + Manages a pool of identifier values. Grabbing an id from the pool picks a number that has been picked and returned before, + or if none of those are available, the minimum value greater than any existing id. + + + + + Gets the highest value which any index claimed thus far could possibly have. + This is not necessarily the current highest claimed index; this value may represent an earlier claim that has already been released. + -1 if nothing has ever been claimed. + + + + + Gets the number of previously returned ids waiting in the pool. + + + + + Gets whether the id pool has backing resources allocated to it and is ready to use. + + + + + Returns an id to the pool without checking if a resize is required on the available id stack. + + Id to return. + + + + Resets the IdPool. + + + + + Ensures that the underlying id queue can hold at least a certain number of ids. + + Number of elements to preallocate space for in the available ids queue. + Pool to pull resized spans from. + + + + Shrinks the available ids queue to the smallest size that can fit the given count and the current available id count. + + Number of elements to guarantee space for in the available ids queue. + + + + Resizes the underlying buffer to the smallest size required to hold the given count and the current available id count. + + Number of elements to guarantee space for in the available ids queue. + + + + Returns underlying memory to the pool. + + The IdPool can be reused only if EnsureCapacity or Resize is called. + + + + Defines a type that is capable of pooling blocks of unmanaged memory. + + + + + Takes a buffer large enough to contain a number of elements of a given type. Capacity may be larger than requested. + + Type of the elements in the buffer. + Desired minimum capacity of the buffer in typed elements. + Buffer large enough to contain the requested number of elements. + + + + Takes a typed buffer of the requested size from the pool. + + Type of the instances in the buffer. + Desired capacity of the buffer in typed elements. + Typed buffer of the requested size. + + + + Returns a buffer to the pool. + + Type of the buffer's elements. + Buffer to return to the pool. + + + + Gets the capacity of a buffer that would be returned by the pool if a given element count was requested from TakeAtLeast. + + Type of the elements being requested. + Number of elements to request. + Capacity of a buffer that would be returned if the given element count was requested. + + + + Manages a pool of identifier values. Grabbing an id from the pool picks a number that has been picked and returned before, + or if none of those are available, the minimum value greater than any existing id. + + This contrasts with the IdPool which operates on unmanaged memory. This version only exists to support use cases where the unmanaged version can't be used- + for example, in the BufferPool. While the implementation can be shared, doing so involves creating enough supporting infrastructure that it's simpler to have a managed-only version. + + + + Gets the highest value which any index claimed thus far could possibly have. + This is not necessarily the current highest claimed index; this value may represent an earlier claim that has already been released. + -1 if nothing has ever been claimed. + + + + + Gets the number of previously returned ids waiting in the pool. + + + + + Gets the capacity of the id pool for returned ids. + + public int Capacity => availableIds.Length; + + + + Returns an id to the pool without checking if a resize is required on the available id stack. + + Id to return. + + + + Resets the IdPool. + + + + + Ensures that the underlying id queue can hold at least a certain number of ids. + + Number of elements to preallocate space for in the available ids queue. + + + + Shrinks the available ids queue to the smallest size that can fit the given count and the current available id count. + + Number of elements to guarantee space for in the available ids queue. + + + + Resizes the underlying buffer to the smallest size required to hold the given count and the current available id count. + + Number of elements to guarantee space for in the available ids queue. + + + + Manages a cache of a type of resource. + + Type of object to pool. + + + + Gets the number of existing elements in the pool. This number of elements can be requested without creating any new ones. + + + Does not do any locking. Should not be used while elements may still be getting added to or removed from the pool. + + + + + Gets or sets the function used to create new objects when the pool has no existing objects available. + + + + + Gets or sets the function used to initialize objects taken from the pool. Runs even if the object was just created by the Creator delegate. + + + + + Gets or sets the action applied to an element when it is returned to the pool. + + + + + Clears all elements from the pool. + + + + + Takes an element from the pool. If the pool is empty, a new resource is created and returned. + + Element from the pool. + + + + Returns the specified item to the pool. If a cleaner delegate is set, the item is cleaned. + + Item to give back to the pool. + + + + Raw byte buffer with some helpers for interoperating with typed spans. + + + + + Implementation specific identifier of the raw buffer set by its source. If taken from a BufferPool, Id represents the packed power and internal power pool index from which it was taken. + + + + + Interprets the bytes at the memory location as a given type. + + Type to interpret the memory as. + Memory location to interpret. + Reference to the memory as a given type. + + + + Takes a region of the raw buffer as a typed buffer. + + Type to interpret the region as. + Start of the region in terms of the type's size. + Number of elements in the region in terms of the type. + A typed buffer. + + + + Creates a typed region from the raw buffer with the largest capacity that can fit within the allocated bytes. + + Type of the buffer. + Typed buffer of maximum extent within the current raw buffer. + + + + The highest size span exponent. The largest span is 2^MaximumSpanSizePower. This avoids overflow. + + + + + Computes the largest integer N such that 2^N is less than or equal to i. + + Integer to compute the power of. + Lowest integer N such that 2^N is less than or equal to i. + + + + Computes the lowest integer N such that 2^N >= i. + + Integer to compute the power of. + Lowest integer N such that 2^N >= i. + + + + Tests if a generic parameter is primitive. Fast path; specialized compilation. + + Type to check for primitiveness. + True if the type is one of the primitive types, false otherwise. + + + + + Copies data from one buffer to another. + + Type of element being copied. + Source buffer to pull elements from. + Index in the buffer to start pulling elements from. + Target buffer to set values. + Index in the buffer to start putting elements into. + Number of elements to copy. + + + + Copies data from a buffer to a span. + + Type of element being copied. + Source buffer to pull elements from. + Index in the buffer to start pulling elements from. + Target span to set values. + Index in the span to start putting elements into. + Number of elements to copy. + + + + Copies data from a span to a buffer. + + Type of element being copied. + Source span to pull elements from. + Index in the span to start pulling elements from. + Target buffer to set values into. + Index in the buffer to start putting elements into. + Number of elements to copy. + + + + Copies data from a span to a buffer. + + Type of element being copied. + Source span to pull elements from. + Index in the span to start pulling elements from. + Target buffer to set values into. + Index in the buffer to start putting elements into. + Number of elements to copy. + + + + Provides additional functionality and some lower overhead function variants for Quaternions. + + + + + Adds two quaternions together. + + First quaternion to add. + Second quaternion to add. + Sum of the addition. + + + + Scales a quaternion. + + Quaternion to multiply. + Amount to multiply each component of the quaternion by. + Scaled quaternion. + + + + Concatenates the transforms of two quaternions together such that the resulting quaternion, applied as an orientation to a vector v, is equivalent to + transformed = (v * a) * b. + Assumes that neither input parameter overlaps the output parameter. + + First quaternion to concatenate. + Second quaternion to concatenate. + Product of the concatenation. + + + + Concatenates the transforms of two quaternions together such that the resulting quaternion, applied as an orientation to a vector v, is equivalent to + transformed = (v * a) * b. + + First quaternion to concatenate. + Second quaternion to concatenate. + Product of the concatenation. + + + + Concatenates the transforms of two quaternions together such that the resulting quaternion, applied as an orientation to a vector v, is equivalent to + transformed = (v * a) * b. + + First quaternion to multiply. + Second quaternion to multiply. + Product of the multiplication. + + + + Quaternion representing the identity transform. + + + + + Constructs a quaternion from a rotation matrix. + + Rotation matrix to create the quaternion from. + Quaternion based on the rotation matrix. + + + + Creates a quaternion from a rotation matrix. + + Rotation matrix used to create a new quaternion. + Quaternion representing the same rotation as the matrix. + + + + Constructs a quaternion from a rotation matrix. + + Rotation matrix to create the quaternion from. + Quaternion based on the rotation matrix. + + + + Constructs a quaternion from a rotation matrix. + + Rotation matrix to create the quaternion from. + Quaternion based on the rotation matrix. + + + + Ensures the quaternion has unit length. + + Quaternion to normalize. + + + + Computes the squared length of the quaternion. + + Squared length of the quaternion. + + + + Computes the length of the quaternion. + + Length of the quaternion. + + + + Blends two quaternions together to get an intermediate state. + + Starting point of the interpolation. + Ending point of the interpolation. + Amount of the end point to use. + Interpolated intermediate quaternion. + + + + Blends two quaternions together to get an intermediate state. + + Starting point of the interpolation. + Ending point of the interpolation. + Amount of the end point to use. + Interpolated intermediate quaternion. + + + + Computes the conjugate of the quaternion. + + Quaternion to conjugate. + Conjugated quaternion. + + + + Computes the conjugate of the quaternion. + + Quaternion to conjugate. + Conjugated quaternion. + + + + Computes the inverse of the quaternion. + + Quaternion to invert. + Result of the inversion. + + + + Computes the inverse of the quaternion. + + Quaternion to invert. + Result of the inversion. + + + + Negates the components of a quaternion. + + Quaternion to negate. + Negated result. + + + + Negates the components of a quaternion. + + Quaternion to negate. + Negated result. + + + + Transforms the vector using a quaternion, assuming that the output does not alias with the input. + + Vector to transform. + Rotation to apply to the vector. + Transformed vector. + + + + Transforms the vector using a quaternion. + + Vector to transform. + Rotation to apply to the vector. + Transformed vector. + + + + Transforms the vector using a quaternion. + + Vector to transform. + Rotation to apply to the vector. + Transformed vector. + + + + Transforms the unit X direction using a quaternion. + + Rotation to apply to the vector. + Transformed vector. + + + + Transforms the unit Y vector using a quaternion. + + Rotation to apply to the vector. + Transformed vector. + + + + Transforms the unit Z vector using a quaternion. + + Rotation to apply to the vector. + Transformed vector. + + + + Creates a quaternion from an axis and angle. + + Axis of rotation. + Angle to rotate around the axis. + Quaternion representing the axis and angle rotation. + + + + Creates a quaternion from an axis and angle. + + Axis of rotation. + Angle to rotate around the axis. + Quaternion representing the axis and angle rotation. + + + + Constructs a quaternion from yaw, pitch, and roll. + + Yaw of the rotation. + Pitch of the rotation. + Roll of the rotation. + Quaternion representing the yaw, pitch, and roll. + + + + Constructs a quaternion from yaw, pitch, and roll. + + Yaw of the rotation. + Pitch of the rotation. + Roll of the rotation. + Quaternion representing the yaw, pitch, and roll. + + + + Computes the angle change represented by a normalized quaternion. + + Quaternion to be converted. + Angle around the axis represented by the quaternion. + + + + Computes the axis angle representation of a normalized quaternion. + + Quaternion to be converted. + Axis represented by the quaternion. + Angle around the axis represented by the quaternion. + + + + Computes the quaternion rotation between two normalized vectors. + + First unit-length vector. + Second unit-length vector. + Quaternion representing the rotation from v1 to v2. + + + + Computes the rotation from the start orientation to the end orientation such that end = Quaternion.Concatenate(start, relative). + Assumes that neither input parameter overlaps with the output parameter. + + Starting orientation. + Ending orientation. + Relative rotation from the start to the end orientation. + + + + Transforms the rotation into the local space of the target basis such that rotation = Quaternion.Concatenate(localRotation, targetBasis) + Assumes that neither input parameter overlaps with the output parameter. + + Rotation in the original frame of reference. + Basis in the original frame of reference to transform the rotation into. + Rotation in the local space of the target basis. + + + + Takes a slot from the source quaternion and broadcasts it into all slots of the target quaternion. + + Quaternion to pull values from. + Slot in the source vectors to pull values from. + Target quaternion to be filled with the selected data. + + + + Constructs a quaternion from a rotation matrix. + + Rotation matrix to create the quaternion from. + Quaternion based on the rotation matrix. + + + + Adds the components of two quaternions together. + + First quaternion to add. + Second quaternion to add. + Sum of the two input quaternions. + + + + Computes the quaternion rotation between two normalized vectors. + + First unit-length vector. + Second unit-length vector. + Quaternion representing the rotation from v1 to v2. + + + + Gets an axis and angle representation of the rotation stored in a quaternion. Angle is approximated. + + Quaternion to extract an axis-angle representation from. + Axis of rotation extracted from the quaternion. + Approximated angle of rotation extracted from the quaternion. + + + + Transforms the vector using a quaternion. Assumes that the memory backing the input and output do not overlap. + + Vector to transform. + Rotation to apply to the vector. + Transformed vector. + + + + Transforms the vector using a quaternion. + + Vector to transform. + Rotation to apply to the vector. + Transformed vector. + + + + Transforms the unit X direction using a quaternion. + + Rotation to apply to the vector. + Transformed vector. + + + + Transforms the unit Y vector using a quaternion. + + Rotation to apply to the vector. + Transformed vector. + + + + Transforms the unit Z vector using a quaternion. + + Rotation to apply to the vector. + Transformed vector. + + + + Transforms the unit X and unit Y direction using a quaternion. + + Rotation to apply to the vectors. + Transformed unit X vector. + Transformed unit Y vector. + + + + Transforms the unit X and unit Z direction using a quaternion. + + Rotation to apply to the vectors. + Transformed unit X vector. + Transformed unit Z vector. + + + + Concatenates the transforms of two quaternions together such that the resulting quaternion, applied as an orientation to a vector v, is equivalent to + transformed = (v * a) * b. Assumes that the memory backing the input and output do not overlap. + + First quaternion to concatenate. + Second quaternion to concatenate. + Product of the concatenation. + + + + Concatenates the transforms of two quaternions together such that the resulting quaternion, applied as an orientation to a vector v, is equivalent to + transformed = (v * a) * b. + + First quaternion to concatenate. + Second quaternion to concatenate. + Product of the concatenation. + + + + Computes the conjugate of the quaternion. + + Quaternion to conjugate. + Conjugated quaternion. + + + + Gathers values from the first slot of a wide quaternion and puts them into a narrow representation. + + Wide quaternion to copy values from. + Narrow quaternion to place values into. + + + + Gathers values from a quaternion and places them into the first indices of the target wide quaternion. + + Quaternion to copy values from. + Wide quaternion to place values into. + + + + Stores the lower left triangle (including diagonal) of a 2x2 matrix. + + + + + Computes m * scale * mT. + + Matrix to sandwich the scale with. + Scale to be sandwiched. + Result of m * scale * mT. + This is a peculiar operation, but it's useful for computing linear effective mass contributions in 2DOF constraints. + + + + Computes result = transpose(transpose(a) * b), assuming b is symmetric. + + Matrix to be transposed and multiplied. + Symmetric matrix to multiply. + Result of transpose(transpose(a) * b). + + + + Computes a * transpose(b), assuming a = b * M for some symmetric matrix M. This is conceptually the second half of Triangular3x3Wide.MatrixSandwich. + + First matrix to multiply. Must be of the form a = b * M for some symmetric matrix M. + Matrix to be transaposed and multiplied with a.. + Symmetric result of a * transpose(b), assuming a = b * M. + + + + Lower left triangle (including diagonal) of a symmetric 3x3 matrix. + + + + + First row, first column of the matrix. + + + + + Second row, first column of the matrix. + + + + + Second row, second column of the matrix. + + + + + Third row, first column of the matrix. + + + + + Third row, second column of the matrix. + + + + + Third row, third column of the matrix. + + + + + Computes rT * m * r for a symmetric matrix m and a rotation matrix R. + + Rotation matrix to use as the sandwich bread. + Succulent interior symmetric matrix. + Result of v * m * transpose(v) for a symmetric matrix m. + + + + Computes the determinant of a symmetric matrix. + + Matrix to intepret as symmetric. + Determinant of the matrix interpreted as symmetric. + + + + Inverts the given matix. + + Matrix to be inverted. + Inverted matrix. + + + + Adds the components of two matrices together. + + First matrix to add. + Second matrix to add. + Matrix with components equal to the components of the two input matrices added together. + + + + Subtracts the components of b from a. + + Matrix to be subtracted from. + Matrix to subtract from the first matrix.. + Matrix with subtracted components. + + + + Adds the components of two matrices together. + + First matrix to add. + Second matrix to add. + Matrix with components equal to the components of the two input matrices added together. + + + + Subtracts the components of one matrix from another. + + Matrix to be subtracted from. + Matrix to subtract from the first matrix. + Matrix with components equal to the difference of the two input matrices. + + + + Multiplies every component in the matrix by the given scale. + + Matrix to be scaled. + Scale to apply to every component of the original matrix. + Scaled result. + + + + Multiplies the two matrices as if they were symmetric. + + First matrix to multiply. + Second matrix to multiply. + Product of the multiplication. + + + + Multiplies the two matrices. + + First matrix to multiply. + Second matrix to multiply. + Product of the multiplication. + + + + Transforms a vector by a symmetric matrix. + + Vector to transform. + Matrix to interpret as symmetric transform. + Result of transforming the vector by the given symmetric matrix. + + + + Stores the lower left triangle (including diagonal) of a 3x3 matrix. Useful for symmetric matrices (and sometimes antisymmetric matrices). + + + + + First row, first column of the matrix. + + + + + Second row, first column of the matrix. + + + + + Second row, second column of the matrix. + + + + + Third row, first column of the matrix. + + + + + Third row, second column of the matrix. + + + + + Third row, third column of the matrix. + + + + + Inverts the matrix as if it is a symmetric matrix where M32 == M23, M13 == M31, and M21 == M12. + + Symmetric matrix to invert. + Inverse of the symmetric matrix. + + + + Adds the components of two symmetric matrices together. + + First matrix to add. + Second matrix to add. + Sum of the two input matrices. + + + + Subtracts one symmetric matrix's components from another. + + Matrix to be subtracted from. + Matrix to subtract from the first matrix. + Result of a - b. + + + + Computes skewSymmetric(v) * m * transpose(skewSymmetric(v)) for a symmetric matrix m. Assumes that the input and output matrices do not overlap. + + Symmetric matrix. + Vector to create the skew symmetric matrix from to act as the sandwich bread. + Result of skewSymmetric(v) * m * transpose(skewSymmetric(v)). + This operation might have a formal name that isn't skew sandwich. But that's okay, its real name is skew sandwich. + + + + Computes v * m * transpose(v) for a symmetric matrix m. Assumes that the input and output do not overlap. + + Vector acting as the sandwich bread. + Succulent interior symmetric matrix. + Result of v * m * transpose(v) for a symmetric matrix m. + Since I called the other one a skew sandwich, I really don't have a choice in the naming convention anymore. + + + + Computes rT * m * r for a symmetric matrix m and a rotation matrix R. + + Rotation matrix to use as the sandwich bread. + Succulent interior symmetric matrix. + Result of v * m * transpose(v) for a symmetric matrix m. + + + + Computes result = a * b, assuming that b represents a symmetric 3x3 matrix. Assumes that input parameters and output result do not overlap. + + First matrix of the pair to multiply. + Matrix to be reinterpreted as symmetric for the multiply. + Result of multiplying a * b. + + + + Computes result = a * b, assuming that b represents a symmetric 3x3 matrix. Assumes that input parameters and output result do not overlap. + + First matrix of the pair to multiply. + Matrix to be reinterpreted as symmetric for the multiply. + Result of multiplying a * b. + + + + Computes result = a * b, assuming that a represents a symmetric 3x3 matrix. Assumes that input parameters and output result do not overlap. + + Matrix to be reinterpreted as symmetric for the multiply. + Second matrix of the pair to multiply. + Result of multiplying a * b. + + + + Computes result = a * transpose(b). + + Matrix to multiply with the transposed matrix. + Matrix to transpose and concatenate with the first matrix. + Result of a * transpose(b). + + + + Computes result = transpose(a * transpose(b)). + + Matrix to multiply with the transposed matrix. + Matrix to transpose and concatenate with the first matrix. + Result of transpose(a * transpose(b)). + + + + Computes m * t * mT for a symmetric matrix t and a matrix m. + + Matrix to use as the sandwich bread. + Succulent interior symmetric matrix. + Result of m * t * mT for a symmetric matrix t. + + + + Computes result = a * b, where a = transpose(b) * M for some symmetric matrix M. + + Some matrix equal to transpose(b) * M for some symmetric matrix M. + Matrix used to sandwich the original matrix M. + Complete result of transpose(b) * M * b. + + + + Computes result = tranpose(a) * b, where a = transpose(transpose(b) * M) for some symmetric matrix M. In other words, we're just treating matrix a as a 3x2 matrix. + + Some matrix equal to transpose(b) * M for some symmetric matrix M. + Matrix used to sandwich the original matrix M. + Complete result of transpose(b) * M * b. + + + + Computes result = a * transpose(b), where a = b * M for some symmetric matrix M. + + Some matrix equal to b * M for some symmetric matrix M. + Matrix used to sandwich the original matrix M, to be transposed. + Complete result of b * M * transpose(b). + + + + Computes result = transpose(a) * b, where b = M * a for some symmetric matrix M. + + Matrix used to sandwich the original matrix M. + Some matrix equal to M * a for some symmetric matrix M. + Complete result of transpose(a) * M * a. + + + + Returns a reference to the upper left 3x3 block of the matrix. + + Matrix to pull a block from. + Reference to the requested block. + + + + Returns a reference to the upper right 3x1 (or lower left 1x3) block of the matrix. + + Matrix to pull a block from. + Reference to the requested block. + + + + Scales each component of m by the given scale. + + Matrix to scale. + Scale to apply to the components of m. + Result of scaling each component of m by scale. + + + + Computes result = v * m. + + Vector to transform. + Matrix to transform with. + Result of the transform. + + + + Upper left 3x3 block of the matrix. + + + + + Lower left 2x3 block of the matrix. + + + + + Lower right 2x2 block of the matrix. + + + + + Scales each component of m by the given scale. + + Matrix to scale. + Scale to apply to the components of m. + Result of scaling each component of m by scale. + + + + Computes result = v * m, where v and result are 1x5 vectors which are split into two subvectors. + + First half of the a vector. + Second half of the a vector. + Matrix to transform with. + First half of the result. + Second half of the result. + + + + Scales each component of m by the given scale. + + Matrix to scale. + Scale to apply to the components of m. + Result of scaling each component of m by scale. + + + + Computes result = v * m, where v and result are 1x6 vectors which are split into two 1x3 values. + + First half of the a vector. + Second half of the a vector. + Matrix to transform with. + First half of the result. + Second half of the result. + + + + Pulls one lane out of the wide representation. + + Source of the lane. + Non-SIMD type to store the lane in. + + + + Pulls one lane out of the wide representation. + + Source of the lane. + Index of the lane within the wide representation to read. + Non-SIMD type to store the lane in. + + + + Gathers values from a vector and places them into the first indices of the target vector. + + Vector to copy values from. + Wide vectorto place values into. + + + + Writes a value into a slot of the target bundle. + + Source of the value to write. + Index of the slot to write into. + Bundle to write the value into. + + + + Finds the result of adding a scalar to every component of a vector. + + Vector to add to. + Scalar to add to every component of the vector. + Vector with components equal to the input vector added to the input scalar. + + + + Finds the result of subtracting a scalar from every component of a vector. + + Vector to subtract from. + Scalar to subtract from every component of the vector. + Vector with components equal the input scalar subtracted from the input vector. + + + + Finds the result of subtracting the components of a vector from a scalar. + + Vector to subtract from the scalar. + Scalar to subtract from. + Vector with components equal the input vector subtracted from the input scalar. + + + + Computes the per-component minimum between a scalar value and the components of a vector. + + Scalar to compare to each vector component. + Vector whose components will be compared. + Vector with components matching the smaller of the scalar value and the input vector. + + + + Computes the per-component minimum of two vectors. + + First vector whose components will be compared. + Second vector whose components will be compared. + Vector with components matching the smaller of the two input vectors. + + + + Computes the per-component maximum between a scalar value and the components of a vector. + + Scalar to compare to each vector component. + Vector whose components will be compared. + Vector with components matching the larger of the scalar value and the input vector. + + + + Computes the per-component maximum of two vectors. + + First vector whose components will be compared. + Second vector whose components will be compared. + Vector with components matching the larger of the two input vectors. + + + + Multiplies the components of one vector with another. + + First vector to multiply. + Second vector to multiply. + Result of the multiplication. + + + + Pulls one lane out of the wide representation. + + Source of the lane. + Index of the lane within the wide representation to read. + Non-SIMD type to store the lane in. + + + + Pulls one lane out of the wide representation. + + Source of the lane. + Non-SIMD type to store the lane in. + + + + Gathers values from a vector and places them into the first indices of the target vector. + + Vector to copy values from. + Wide vectorto place values into. + + + + Writes a value into a slot of the target bundle. + + Source of the value to write. + Index of the slot to write into. + Bundle to write the value into. + + + + Expands each scalar value to every slot of the bundle. + + Source value to write to every bundle slot. + Bundle containing the source's components in every slot. + + + + Takes a slot from the source vector and broadcasts it into all slots of the target vector. + + Vector to pull values from. + Slot in the source vectors to pull values from. + Target vector to be filled with the selected data. + + + + Takes a slot from the source vector and places it into a slot of the target. + + Vector to pull values from. + Slot in the source vectors to pull values from. + Target vector whose slot will be filled with the selected data. + Slot in the target vectors to write values into. + + + + Computes the per-component minimum of two vectors. + + First vector whose components will be compared. + Second vector whose components will be compared. + Vector with components matching the smaller of the two input vectors. + + + + Computes the per-component maximum of two vectors. + + First vector whose components will be compared. + Second vector whose components will be compared. + Vector with components matching the larger of the two input vectors. + + + + Pulls one lane out of the wide representation. + + Source of the lane. + Index of the lane within the wide representation to read. + Non-SIMD type to store the lane in. + + + + Pulls one lane out of the wide representation. + + Source of the lane. + Non-SIMD type to store the lane in. + + + + Gathers values from a vector and places them into the first indices of the target vector. + + Vector to copy values from. + Wide vectorto place values into. + + + diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/lib/netstandard2.0/BepuUtilities.xml.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/lib/netstandard2.0/BepuUtilities.xml.meta new file mode 100644 index 00000000..1e671884 --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuUtilities.2.3.4/lib/netstandard2.0/BepuUtilities.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d4e1291355a40db41ab3daa142d4681b +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/JNBepuPhysics.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/JNBepuPhysics.cs.meta index d9ddaa8f..e229ee90 100644 --- a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/JNBepuPhysics.cs.meta +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/JNBepuPhysics.cs.meta @@ -1,3 +1,11 @@ fileFormatVersion: 2 -guid: 99bf23b7fe9748f1a3e20d10104d3d85 -timeCreated: 1706683683 \ No newline at end of file +guid: 82966d10d1a1ab449a6da81cf61d0eb7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/JNBepuPhysics1.cs b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/JNBepuPhysics1.cs new file mode 100644 index 00000000..68b21eff --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/JNBepuPhysics1.cs @@ -0,0 +1,24 @@ +using UnityEngine; +using Space = BEPUphysics.Space; + +namespace Plugins.JNGame.BepuPhysics +{ + public class JNBepuPhysics1 + { + + public Space Space { get; protected set; } + + public JNBepuPhysics1(int index = 0) + { + Debug.Log($"初始化物理引擎"); + Space = new Space(); + } + + + //更新 + public void OnUpdate(float dt) + { + Space.Update(dt); + } + } +} \ No newline at end of file diff --git a/JNFrame/Assets/Plugins/JNGame/BepuPhysics/JNBepuPhysics1.cs.meta b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/JNBepuPhysics1.cs.meta new file mode 100644 index 00000000..bfc07b6a --- /dev/null +++ b/JNFrame/Assets/Plugins/JNGame/BepuPhysics/JNBepuPhysics1.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: defdd527670c4512b11a55248716fb96 +timeCreated: 1706733875 \ No newline at end of file diff --git a/JNFrame/Assets/Plugins/JNGame/Sync/Frame/JNSyncFrame.cs b/JNFrame/Assets/Plugins/JNGame/Sync/Frame/JNSyncFrame.cs index c607c376..cfaa09f7 100644 --- a/JNFrame/Assets/Plugins/JNGame/Sync/Frame/JNSyncFrame.cs +++ b/JNFrame/Assets/Plugins/JNGame/Sync/Frame/JNSyncFrame.cs @@ -80,7 +80,7 @@ namespace Plugins.JNGame.Sync.Frame public override Task OnInit() { - Physics.autoSimulation = false; + Physics.simulationMode = SimulationMode.Script; Physics.autoSyncTransforms = false; this.OnReset(); return Task.CompletedTask; diff --git a/JNFrame/Assets/Plugins/JNGame/Util/JAPI.cs b/JNFrame/Assets/Plugins/JNGame/Util/JAPI.cs index a2b125bb..50842028 100644 --- a/JNFrame/Assets/Plugins/JNGame/Util/JAPI.cs +++ b/JNFrame/Assets/Plugins/JNGame/Util/JAPI.cs @@ -42,7 +42,7 @@ namespace Plugins.JNGame.Util public async UniTask Post(string url,TA data) { - var request = UnityWebRequest.Post($"{this._config.BaseURL}/{url}",JsonConvert.SerializeObject(data)); + var request = UnityWebRequest.PostWwwForm($"{this._config.BaseURL}/{url}",JsonConvert.SerializeObject(data)); return JsonConvert.DeserializeObject((await request.SendWebRequest()).downloadHandler.text); } diff --git a/JNFrame/Assets/Script/App.cs b/JNFrame/Assets/Script/App.cs index 8b34600c..dd668586 100644 --- a/JNFrame/Assets/Script/App.cs +++ b/JNFrame/Assets/Script/App.cs @@ -9,7 +9,7 @@ namespace Script public static readonly JNGSocket Socket = new JNGSocket(); public static readonly JNGSyncFrame Sync = new JNGSyncFrame(); - public static readonly JAPI Api = new(new JAPIConfig(){BaseURL = "http://192.168.0.118:8080"}); + public static readonly JAPI Api = new(new JAPIConfig(){BaseURL = "http://192.168.1.23:8080"}); public static readonly EventDispatcher Event = EventDispatcher.Event; public static SystemBase[] System() diff --git a/JNFrame/Assets/Script/AppImpl/JNGSocket.cs b/JNFrame/Assets/Script/AppImpl/JNGSocket.cs index 62e16c44..b54d377e 100644 --- a/JNFrame/Assets/Script/AppImpl/JNGSocket.cs +++ b/JNFrame/Assets/Script/AppImpl/JNGSocket.cs @@ -10,7 +10,7 @@ namespace Script.AppImpl protected override async UniTask GetUrl() { await UniTask.NextFrame(); - return "ws://192.168.0.118:8080/websocket"; + return "ws://192.168.1.23:8080/websocket"; } } } \ No newline at end of file diff --git a/JNFrame/Assets/Script/battle/mode/GWorldSceneMode.cs b/JNFrame/Assets/Script/battle/mode/GWorldSceneMode.cs index 76eb75bd..95d96a49 100644 --- a/JNFrame/Assets/Script/battle/mode/GWorldSceneMode.cs +++ b/JNFrame/Assets/Script/battle/mode/GWorldSceneMode.cs @@ -25,7 +25,7 @@ namespace Script.battle.mode public override void OnSyncUpdate(int dt, JNFrameInfo frame, GWorldSceneModeInput input) { Physics.OnUpdate((float) dt / 1000); - if (frame.Index > 0 && frame.Index % 4 == 0) + if (frame.Index > 0) { var index = GetSync().nRandomInt(0, balls.Length - 1); Debug.Log(index); diff --git a/JNFrame/Assets/packages.config b/JNFrame/Assets/packages.config index 7679d67b..2e11f2e2 100644 --- a/JNFrame/Assets/packages.config +++ b/JNFrame/Assets/packages.config @@ -1,7 +1,7 @@  - + diff --git a/JNFrame/JNFrame.sln b/JNFrame/JNFrame.sln index bf45360a..95803288 100644 --- a/JNFrame/JNFrame.sln +++ b/JNFrame/JNFrame.sln @@ -3,17 +3,17 @@ Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp-firstpass", "Assembly-CSharp-firstpass.csproj", "{e5544f0c-cd3e-f7be-dc52-046b131df43d}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniTask", "UniTask.csproj", "{39f5acb9-cdbb-9f48-497c-14159a0afd38}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniTask.Linq", "UniTask.Linq.csproj", "{7f60f694-1f75-f2f0-5fde-36ccb7fd82d1}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniTask.DOTween", "UniTask.DOTween.csproj", "{99c4c7d2-ca96-1038-95e0-77e225df2b06}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniTask", "UniTask.csproj", "{39f5acb9-cdbb-9f48-497c-14159a0afd38}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp", "Assembly-CSharp.csproj", "{3ca4410c-c33b-25ce-55bc-3a432b9830ed}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniTask.Addressables", "UniTask.Addressables.csproj", "{6d8bd378-3e5b-6997-5e5e-288243f0f72b}" +EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniTask.TextMeshPro", "UniTask.TextMeshPro.csproj", "{4b964c85-7c9d-2d07-a2e0-8595262e4e96}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniTask.Addressables", "UniTask.Addressables.csproj", "{6d8bd378-3e5b-6997-5e5e-288243f0f72b}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniTask.DOTween", "UniTask.DOTween.csproj", "{99c4c7d2-ca96-1038-95e0-77e225df2b06}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniTask.Editor", "UniTask.Editor.csproj", "{295d565d-1437-bd18-5c54-a9d5211832bd}" EndProject @@ -24,18 +24,18 @@ Global GlobalSection(ProjectConfigurationPlatforms) = postSolution {e5544f0c-cd3e-f7be-dc52-046b131df43d}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {e5544f0c-cd3e-f7be-dc52-046b131df43d}.Debug|Any CPU.Build.0 = Debug|Any CPU - {39f5acb9-cdbb-9f48-497c-14159a0afd38}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {39f5acb9-cdbb-9f48-497c-14159a0afd38}.Debug|Any CPU.Build.0 = Debug|Any CPU {7f60f694-1f75-f2f0-5fde-36ccb7fd82d1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7f60f694-1f75-f2f0-5fde-36ccb7fd82d1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {99c4c7d2-ca96-1038-95e0-77e225df2b06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {99c4c7d2-ca96-1038-95e0-77e225df2b06}.Debug|Any CPU.Build.0 = Debug|Any CPU + {39f5acb9-cdbb-9f48-497c-14159a0afd38}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {39f5acb9-cdbb-9f48-497c-14159a0afd38}.Debug|Any CPU.Build.0 = Debug|Any CPU {3ca4410c-c33b-25ce-55bc-3a432b9830ed}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3ca4410c-c33b-25ce-55bc-3a432b9830ed}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4b964c85-7c9d-2d07-a2e0-8595262e4e96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4b964c85-7c9d-2d07-a2e0-8595262e4e96}.Debug|Any CPU.Build.0 = Debug|Any CPU {6d8bd378-3e5b-6997-5e5e-288243f0f72b}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6d8bd378-3e5b-6997-5e5e-288243f0f72b}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4b964c85-7c9d-2d07-a2e0-8595262e4e96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4b964c85-7c9d-2d07-a2e0-8595262e4e96}.Debug|Any CPU.Build.0 = Debug|Any CPU + {99c4c7d2-ca96-1038-95e0-77e225df2b06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {99c4c7d2-ca96-1038-95e0-77e225df2b06}.Debug|Any CPU.Build.0 = Debug|Any CPU {295d565d-1437-bd18-5c54-a9d5211832bd}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {295d565d-1437-bd18-5c54-a9d5211832bd}.Debug|Any CPU.Build.0 = Debug|Any CPU EndGlobalSection diff --git a/JNFrame/Logs/AssetImportWorker0-prev.log b/JNFrame/Logs/AssetImportWorker0-prev.log new file mode 100644 index 00000000..c0211044 --- /dev/null +++ b/JNFrame/Logs/AssetImportWorker0-prev.log @@ -0,0 +1,1082 @@ +Using pre-set license +Built from '2022.3/china_unity/release' branch; Version is '2022.3.16f1c1 (2f3f1b3bde89) revision 3096347'; Using compiler version '192829333'; Build Type 'Release' +OS: 'Windows 11 (10.0.22621) 64bit Core' Language: 'zh' Physical Memory: 16088 MB +BatchMode: 1, IsHumanControllingUs: 0, StartBugReporterOnCrash: 0, Is64bit: 1, IsPro: 1 + +COMMAND LINE ARGUMENTS: +C:\APP\UnityEdit\2022.3.16f1c1\Editor\Unity.exe +-adb2 +-batchMode +-noUpm +-name +AssetImportWorker0 +-projectPath +D:/Jisol/JisolGame/JNFrame +-logFile +Logs/AssetImportWorker0.log +-srvPort +50472 +Successfully changed project path to: D:/Jisol/JisolGame/JNFrame +D:/Jisol/JisolGame/JNFrame +[UnityMemory] Configuration Parameters - Can be set up in boot.config + "memorysetup-bucket-allocator-granularity=16" + "memorysetup-bucket-allocator-bucket-count=8" + "memorysetup-bucket-allocator-block-size=33554432" + "memorysetup-bucket-allocator-block-count=8" + "memorysetup-main-allocator-block-size=16777216" + "memorysetup-thread-allocator-block-size=16777216" + "memorysetup-gfx-main-allocator-block-size=16777216" + "memorysetup-gfx-thread-allocator-block-size=16777216" + "memorysetup-cache-allocator-block-size=4194304" + "memorysetup-typetree-allocator-block-size=2097152" + "memorysetup-profiler-bucket-allocator-granularity=16" + "memorysetup-profiler-bucket-allocator-bucket-count=8" + "memorysetup-profiler-bucket-allocator-block-size=33554432" + "memorysetup-profiler-bucket-allocator-block-count=8" + "memorysetup-profiler-allocator-block-size=16777216" + "memorysetup-profiler-editor-allocator-block-size=1048576" + "memorysetup-temp-allocator-size-main=16777216" + "memorysetup-job-temp-allocator-block-size=2097152" + "memorysetup-job-temp-allocator-block-size-background=1048576" + "memorysetup-job-temp-allocator-reduction-small-platforms=262144" + "memorysetup-allocator-temp-initial-block-size-main=262144" + "memorysetup-allocator-temp-initial-block-size-worker=262144" + "memorysetup-temp-allocator-size-background-worker=32768" + "memorysetup-temp-allocator-size-job-worker=262144" + "memorysetup-temp-allocator-size-preload-manager=33554432" + "memorysetup-temp-allocator-size-nav-mesh-worker=65536" + "memorysetup-temp-allocator-size-audio-worker=65536" + "memorysetup-temp-allocator-size-cloud-worker=32768" + "memorysetup-temp-allocator-size-gi-baking-worker=262144" + "memorysetup-temp-allocator-size-gfx=262144" +Player connection [35668] Host "[IP] 192.168.1.23 [Port] 0 [Flags] 2 [Guid] 2154385768 [EditorId] 2154385768 [Version] 1048832 [Id] WindowsEditor(7,DESKTOP-5RP3AKU) [Debug] 1 [PackageName] WindowsEditor [ProjectName] Editor" joined multi-casting on [225.0.0.222:54997]... + +Player connection [35668] Host "[IP] 192.168.1.23 [Port] 0 [Flags] 2 [Guid] 2154385768 [EditorId] 2154385768 [Version] 1048832 [Id] WindowsEditor(7,DESKTOP-5RP3AKU) [Debug] 1 [PackageName] WindowsEditor [ProjectName] Editor" joined alternative multi-casting on [225.0.0.222:34997]... + +[Physics::Module] Initialized MultithreadedJobDispatcher with 19 workers. +Refreshing native plugins compatible for Editor in 19.49 ms, found 3 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Initialize engine version: 2022.3.16f1c1 (2f3f1b3bde89) +[Subsystems] Discovering subsystems at path C:/APP/UnityEdit/2022.3.16f1c1/Editor/Data/Resources/UnitySubsystems +[Subsystems] Discovering subsystems at path D:/Jisol/JisolGame/JNFrame/Assets +GfxDevice: creating device client; threaded=0; jobified=0 +Direct3D: + Version: Direct3D 11.0 [level 11.1] + Renderer: NVIDIA GeForce RTX 3060 Laptop GPU (ID=0x2520) + Vendor: NVIDIA + VRAM: 6023 MB + Driver: 30.0.15.1181 +Initialize mono +Mono path[0] = 'C:/APP/UnityEdit/2022.3.16f1c1/Editor/Data/Managed' +Mono path[1] = 'C:/APP/UnityEdit/2022.3.16f1c1/Editor/Data/MonoBleedingEdge/lib/mono/unityjit-win32' +Mono config path = 'C:/APP/UnityEdit/2022.3.16f1c1/Editor/Data/MonoBleedingEdge/etc' +Using monoOptions --debugger-agent=transport=dt_socket,embedding=1,server=y,suspend=n,address=127.0.0.1:56588 +Begin MonoManager ReloadAssembly +Registering precompiled unity dll's ... +Register platform support module: C:/APP/UnityEdit/2022.3.16f1c1/Editor/Data/PlaybackEngines/AndroidPlayer/UnityEditor.Android.Extensions.dll +Register platform support module: C:/APP/UnityEdit/2022.3.16f1c1/Editor/Data/PlaybackEngines/WindowsStandaloneSupport/UnityEditor.WindowsStandalone.Extensions.dll +Registered in 0.012485 seconds. +- Loaded All Assemblies, in 0.346 seconds +Native extension for WindowsStandalone target not found +Native extension for Android target not found +Android Extension - Scanning For ADB Devices 353 ms +Mono: successfully reloaded assembly +- Finished resetting the current domain, in 0.628 seconds +Domain Reload Profiling: 966ms + BeginReloadAssembly (121ms) + ExecutionOrderSort (0ms) + DisableScriptedObjects (0ms) + BackupInstance (0ms) + ReleaseScriptingObjects (0ms) + CreateAndSetChildDomain (1ms) + RebuildCommonClasses (28ms) + RebuildNativeTypeToScriptingClass (8ms) + initialDomainReloadingComplete (66ms) + LoadAllAssembliesAndSetupDomain (115ms) + LoadAssemblies (114ms) + RebuildTransferFunctionScriptingTraits (0ms) + AnalyzeDomain (112ms) + TypeCache.Refresh (111ms) + TypeCache.ScanAssembly (100ms) + ScanForSourceGeneratedMonoScriptInfo (0ms) + ResolveRequiredComponents (0ms) + FinalizeReload (628ms) + ReleaseScriptCaches (0ms) + RebuildScriptCaches (0ms) + SetupLoadedEditorAssemblies (586ms) + LogAssemblyErrors (0ms) + InitializePlatformSupportModulesInManaged (449ms) + SetLoadedEditorAssemblies (3ms) + RefreshPlugins (0ms) + BeforeProcessingInitializeOnLoad (2ms) + ProcessInitializeOnLoadAttributes (94ms) + ProcessInitializeOnLoadMethodAttributes (38ms) + AfterProcessingInitializeOnLoad (0ms) + EditorAssembliesLoaded (0ms) + ExecutionOrderSort2 (0ms) + AwakeInstancesAfterBackupRestoration (0ms) +======================================================================== +Worker process is ready to serve import requests +Begin MonoManager ReloadAssembly +- Loaded All Assemblies, in 0.698 seconds +Refreshing native plugins compatible for Editor in 8.68 ms, found 3 plugins. +Native extension for WindowsStandalone target not found +Native extension for Android target not found +Package Manager log level set to [2] +[Package Manager] Server::EnsureServerProcessIsRunning -- launch failed, reason: Unity was launched with the -noUpm command-line argument +[Package Manager] UpmClient::Send -- Unable to send message (not connected to UPM process). +[Package Manager] Cannot connect to Unity Package Manager local server +Mono: successfully reloaded assembly +- Finished resetting the current domain, in 0.514 seconds +Domain Reload Profiling: 1203ms + BeginReloadAssembly (149ms) + ExecutionOrderSort (0ms) + DisableScriptedObjects (3ms) + BackupInstance (0ms) + ReleaseScriptingObjects (0ms) + CreateAndSetChildDomain (16ms) + RebuildCommonClasses (29ms) + RebuildNativeTypeToScriptingClass (8ms) + initialDomainReloadingComplete (48ms) + LoadAllAssembliesAndSetupDomain (455ms) + LoadAssemblies (349ms) + RebuildTransferFunctionScriptingTraits (0ms) + AnalyzeDomain (204ms) + TypeCache.Refresh (182ms) + TypeCache.ScanAssembly (165ms) + ScanForSourceGeneratedMonoScriptInfo (17ms) + ResolveRequiredComponents (4ms) + FinalizeReload (514ms) + ReleaseScriptCaches (0ms) + RebuildScriptCaches (0ms) + SetupLoadedEditorAssemblies (395ms) + LogAssemblyErrors (0ms) + InitializePlatformSupportModulesInManaged (27ms) + SetLoadedEditorAssemblies (3ms) + RefreshPlugins (0ms) + BeforeProcessingInitializeOnLoad (65ms) + ProcessInitializeOnLoadAttributes (262ms) + ProcessInitializeOnLoadMethodAttributes (19ms) + AfterProcessingInitializeOnLoad (20ms) + EditorAssembliesLoaded (0ms) + ExecutionOrderSort2 (0ms) + AwakeInstancesAfterBackupRestoration (9ms) +Launched and connected shader compiler UnityShaderCompiler.exe after 0.03 seconds +Refreshing native plugins compatible for Editor in 7.28 ms, found 3 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 4898 Unused Serialized files (Serialized files now loaded: 0) +Unloading 48 unused Assets / (62.4 KB). Loaded Objects now: 5355. +Memory consumption went from 170.3 MB to 170.2 MB. +Total: 2.869800 ms (FindLiveObjects: 0.274900 ms CreateObjectMapping: 0.148900 ms MarkObjects: 2.345200 ms DeleteObjects: 0.099700 ms) + +AssetImportParameters requested are different than current active one (requested -> active): + custom:container-demuxer-ogg: 62fdf1f143b41e24485cea50d1cbac27 -> + custom:video-codec-MediaFoundation-h265: 746d11721c4dcdbdad8f713fa42b33f4 -> + custom:video-decoder-ogg-theora: a1e56fd34408186e4bbccfd4996cb3dc -> + custom:framework-win-MediaFoundation: 216162199b28c13a410421893ffa2e32 -> + custom:CustomObjectIndexerAttribute: 43b350a4d6e6d1791af0b5038c4bea17 -> + custom:container-demuxer-webm: 4f35f7cbe854078d1ac9338744f61a02 -> + custom:container-muxer-webm: aa71ff27fc2769a1b78a27578f13a17b -> + custom:video-decoder-webm-vp8: 9c59270c3fd7afecdb556c50c9e8de78 -> + custom:SearchIndexIgnoredProperties: e643bd26f0fe6173181afceb89e7c659 -> + custom:AudioImporter_EditorPlatform: d09bf68614088b80899f8185d706f6e7 -> + custom:video-encoder-webm-vp8: eb34c28f22e8b96e1ab97ce403110664 -> + custom:audio-decoder-ogg-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> + custom:audio-encoder-webm-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> +======================================================================== +Received Import Request. + Time since last request: 361369.656682 seconds. + path: Assets/Scenes/Mode/新建材质.mat + artifactKey: Guid(fbe17d6d158cf0647b9ae4f0f92bb421) Importer(815301076,1909f56bfc062723c751e8b465ee728b) +Start importing Assets/Scenes/Mode/新建材质.mat using Guid(fbe17d6d158cf0647b9ae4f0f92bb421) Importer(815301076,1909f56bfc062723c751e8b465ee728b) -> (artifact id: '0ff52293ddc5fda74a175dd3d270592e') in 0.059329 seconds +Number of updated asset objects reloaded before import = 0 +Number of asset objects unloaded after import = 1 +======================================================================== +Received Prepare +Begin MonoManager ReloadAssembly +- Loaded All Assemblies, in 0.501 seconds +Refreshing native plugins compatible for Editor in 8.77 ms, found 3 plugins. +Native extension for WindowsStandalone target not found +Native extension for Android target not found +[Package Manager] Server::EnsureServerProcessIsRunning -- launch failed, reason: Unity was launched with the -noUpm command-line argument +[Package Manager] UpmClient::Send -- Unable to send message (not connected to UPM process). +[Package Manager] Cannot connect to Unity Package Manager local server +Mono: successfully reloaded assembly +- Finished resetting the current domain, in 0.879 seconds +Domain Reload Profiling: 1371ms + BeginReloadAssembly (162ms) + ExecutionOrderSort (0ms) + DisableScriptedObjects (3ms) + BackupInstance (0ms) + ReleaseScriptingObjects (0ms) + CreateAndSetChildDomain (29ms) + RebuildCommonClasses (23ms) + RebuildNativeTypeToScriptingClass (8ms) + initialDomainReloadingComplete (41ms) + LoadAllAssembliesAndSetupDomain (258ms) + LoadAssemblies (334ms) + RebuildTransferFunctionScriptingTraits (0ms) + AnalyzeDomain (13ms) + TypeCache.Refresh (6ms) + TypeCache.ScanAssembly (0ms) + ScanForSourceGeneratedMonoScriptInfo (0ms) + ResolveRequiredComponents (6ms) + FinalizeReload (880ms) + ReleaseScriptCaches (0ms) + RebuildScriptCaches (0ms) + SetupLoadedEditorAssemblies (349ms) + LogAssemblyErrors (0ms) + InitializePlatformSupportModulesInManaged (30ms) + SetLoadedEditorAssemblies (3ms) + RefreshPlugins (0ms) + BeforeProcessingInitializeOnLoad (65ms) + ProcessInitializeOnLoadAttributes (207ms) + ProcessInitializeOnLoadMethodAttributes (22ms) + AfterProcessingInitializeOnLoad (22ms) + EditorAssembliesLoaded (0ms) + ExecutionOrderSort2 (0ms) + AwakeInstancesAfterBackupRestoration (9ms) +Refreshing native plugins compatible for Editor in 7.81 ms, found 3 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 4889 Unused Serialized files (Serialized files now loaded: 0) +Unloading 34 unused Assets / (36.2 KB). Loaded Objects now: 5398. +Memory consumption went from 170.4 MB to 170.4 MB. +Total: 2.558400 ms (FindLiveObjects: 0.254900 ms CreateObjectMapping: 0.135000 ms MarkObjects: 2.107300 ms DeleteObjects: 0.060100 ms) + +Prepare: number of updated asset objects reloaded= 0 +AssetImportParameters requested are different than current active one (requested -> active): + custom:container-demuxer-ogg: 62fdf1f143b41e24485cea50d1cbac27 -> + custom:video-codec-MediaFoundation-h265: 746d11721c4dcdbdad8f713fa42b33f4 -> + custom:video-decoder-ogg-theora: a1e56fd34408186e4bbccfd4996cb3dc -> + custom:framework-win-MediaFoundation: 216162199b28c13a410421893ffa2e32 -> + custom:CustomObjectIndexerAttribute: 43b350a4d6e6d1791af0b5038c4bea17 -> + custom:container-demuxer-webm: 4f35f7cbe854078d1ac9338744f61a02 -> + custom:container-muxer-webm: aa71ff27fc2769a1b78a27578f13a17b -> + custom:video-decoder-webm-vp8: 9c59270c3fd7afecdb556c50c9e8de78 -> + custom:SearchIndexIgnoredProperties: e643bd26f0fe6173181afceb89e7c659 -> + custom:AudioImporter_EditorPlatform: d09bf68614088b80899f8185d706f6e7 -> + custom:video-encoder-webm-vp8: eb34c28f22e8b96e1ab97ce403110664 -> + custom:audio-decoder-ogg-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> + custom:audio-encoder-webm-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> +======================================================================== +Received Prepare +Begin MonoManager ReloadAssembly +- Loaded All Assemblies, in 0.508 seconds +Refreshing native plugins compatible for Editor in 9.64 ms, found 3 plugins. +Native extension for WindowsStandalone target not found +Native extension for Android target not found +[Package Manager] Server::EnsureServerProcessIsRunning -- launch failed, reason: Unity was launched with the -noUpm command-line argument +[Package Manager] UpmClient::Send -- Unable to send message (not connected to UPM process). +[Package Manager] Cannot connect to Unity Package Manager local server +Mono: successfully reloaded assembly +- Finished resetting the current domain, in 0.791 seconds +Domain Reload Profiling: 1289ms + BeginReloadAssembly (156ms) + ExecutionOrderSort (0ms) + DisableScriptedObjects (3ms) + BackupInstance (0ms) + ReleaseScriptingObjects (0ms) + CreateAndSetChildDomain (29ms) + RebuildCommonClasses (24ms) + RebuildNativeTypeToScriptingClass (7ms) + initialDomainReloadingComplete (41ms) + LoadAllAssembliesAndSetupDomain (270ms) + LoadAssemblies (347ms) + RebuildTransferFunctionScriptingTraits (0ms) + AnalyzeDomain (12ms) + TypeCache.Refresh (6ms) + TypeCache.ScanAssembly (0ms) + ScanForSourceGeneratedMonoScriptInfo (0ms) + ResolveRequiredComponents (5ms) + FinalizeReload (791ms) + ReleaseScriptCaches (0ms) + RebuildScriptCaches (0ms) + SetupLoadedEditorAssemblies (301ms) + LogAssemblyErrors (0ms) + InitializePlatformSupportModulesInManaged (25ms) + SetLoadedEditorAssemblies (2ms) + RefreshPlugins (0ms) + BeforeProcessingInitializeOnLoad (59ms) + ProcessInitializeOnLoadAttributes (176ms) + ProcessInitializeOnLoadMethodAttributes (19ms) + AfterProcessingInitializeOnLoad (20ms) + EditorAssembliesLoaded (0ms) + ExecutionOrderSort2 (0ms) + AwakeInstancesAfterBackupRestoration (8ms) +Refreshing native plugins compatible for Editor in 7.37 ms, found 3 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 4890 Unused Serialized files (Serialized files now loaded: 0) +Unloading 34 unused Assets / (36.2 KB). Loaded Objects now: 5401. +Memory consumption went from 172.6 MB to 172.6 MB. +Total: 2.406600 ms (FindLiveObjects: 0.402900 ms CreateObjectMapping: 0.174300 ms MarkObjects: 1.785300 ms DeleteObjects: 0.043300 ms) + +Prepare: number of updated asset objects reloaded= 0 +AssetImportParameters requested are different than current active one (requested -> active): + custom:container-demuxer-ogg: 62fdf1f143b41e24485cea50d1cbac27 -> + custom:video-codec-MediaFoundation-h265: 746d11721c4dcdbdad8f713fa42b33f4 -> + custom:video-decoder-ogg-theora: a1e56fd34408186e4bbccfd4996cb3dc -> + custom:framework-win-MediaFoundation: 216162199b28c13a410421893ffa2e32 -> + custom:CustomObjectIndexerAttribute: 43b350a4d6e6d1791af0b5038c4bea17 -> + custom:container-demuxer-webm: 4f35f7cbe854078d1ac9338744f61a02 -> + custom:container-muxer-webm: aa71ff27fc2769a1b78a27578f13a17b -> + custom:video-decoder-webm-vp8: 9c59270c3fd7afecdb556c50c9e8de78 -> + custom:SearchIndexIgnoredProperties: e643bd26f0fe6173181afceb89e7c659 -> + custom:AudioImporter_EditorPlatform: d09bf68614088b80899f8185d706f6e7 -> + custom:video-encoder-webm-vp8: eb34c28f22e8b96e1ab97ce403110664 -> + custom:audio-decoder-ogg-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> + custom:audio-encoder-webm-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> +======================================================================== +Received Import Request. + Time since last request: 10.097027 seconds. + path: Assets/Script/App.cs + artifactKey: Guid(41bc0098f83045f18891ef5190ac6a17) Importer(815301076,1909f56bfc062723c751e8b465ee728b) +Start importing Assets/Script/App.cs using Guid(41bc0098f83045f18891ef5190ac6a17) Importer(815301076,1909f56bfc062723c751e8b465ee728b) -> (artifact id: '7eba079ca82324d7cb4c8982c0baf57c') in 0.001709 seconds +Number of updated asset objects reloaded before import = 0 +Number of asset objects unloaded after import = 0 +======================================================================== +Received Import Request. + Time since last request: 37.743795 seconds. + path: Assets/Script/App.cs + artifactKey: Guid(41bc0098f83045f18891ef5190ac6a17) Importer(815301076,1909f56bfc062723c751e8b465ee728b) +Start importing Assets/Script/App.cs using Guid(41bc0098f83045f18891ef5190ac6a17) Importer(815301076,1909f56bfc062723c751e8b465ee728b) -> (artifact id: 'bca94e4caaa352a8f345eb554243f59a') in 0.000924 seconds +Number of updated asset objects reloaded before import = 0 +Number of asset objects unloaded after import = 0 +======================================================================== +Received Prepare +Begin MonoManager ReloadAssembly +- Loaded All Assemblies, in 1.108 seconds +Refreshing native plugins compatible for Editor in 16.01 ms, found 3 plugins. +Native extension for WindowsStandalone target not found +Native extension for Android target not found +[Package Manager] Server::EnsureServerProcessIsRunning -- launch failed, reason: Unity was launched with the -noUpm command-line argument +[Package Manager] UpmClient::Send -- Unable to send message (not connected to UPM process). +[Package Manager] Cannot connect to Unity Package Manager local server +Mono: successfully reloaded assembly +- Finished resetting the current domain, in 2.616 seconds +Domain Reload Profiling: 3705ms + BeginReloadAssembly (332ms) + ExecutionOrderSort (0ms) + DisableScriptedObjects (6ms) + BackupInstance (0ms) + ReleaseScriptingObjects (0ms) + CreateAndSetChildDomain (41ms) + RebuildCommonClasses (43ms) + RebuildNativeTypeToScriptingClass (15ms) + initialDomainReloadingComplete (77ms) + LoadAllAssembliesAndSetupDomain (620ms) + LoadAssemblies (823ms) + RebuildTransferFunctionScriptingTraits (0ms) + AnalyzeDomain (27ms) + TypeCache.Refresh (11ms) + TypeCache.ScanAssembly (2ms) + ScanForSourceGeneratedMonoScriptInfo (7ms) + ResolveRequiredComponents (7ms) + FinalizeReload (2617ms) + ReleaseScriptCaches (0ms) + RebuildScriptCaches (0ms) + SetupLoadedEditorAssemblies (763ms) + LogAssemblyErrors (0ms) + InitializePlatformSupportModulesInManaged (43ms) + SetLoadedEditorAssemblies (3ms) + RefreshPlugins (0ms) + BeforeProcessingInitializeOnLoad (115ms) + ProcessInitializeOnLoadAttributes (460ms) + ProcessInitializeOnLoadMethodAttributes (98ms) + AfterProcessingInitializeOnLoad (43ms) + EditorAssembliesLoaded (0ms) + ExecutionOrderSort2 (0ms) + AwakeInstancesAfterBackupRestoration (13ms) +Refreshing native plugins compatible for Editor in 17.71 ms, found 3 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 4889 Unused Serialized files (Serialized files now loaded: 0) +Unloading 34 unused Assets / (36.2 KB). Loaded Objects now: 5404. +Memory consumption went from 174.3 MB to 174.3 MB. +Total: 3.485400 ms (FindLiveObjects: 0.442600 ms CreateObjectMapping: 0.167300 ms MarkObjects: 2.808300 ms DeleteObjects: 0.065800 ms) + +Prepare: number of updated asset objects reloaded= 0 +AssetImportParameters requested are different than current active one (requested -> active): + custom:container-demuxer-ogg: 62fdf1f143b41e24485cea50d1cbac27 -> + custom:video-codec-MediaFoundation-h265: 746d11721c4dcdbdad8f713fa42b33f4 -> + custom:video-decoder-ogg-theora: a1e56fd34408186e4bbccfd4996cb3dc -> + custom:framework-win-MediaFoundation: 216162199b28c13a410421893ffa2e32 -> + custom:CustomObjectIndexerAttribute: 43b350a4d6e6d1791af0b5038c4bea17 -> + custom:container-demuxer-webm: 4f35f7cbe854078d1ac9338744f61a02 -> + custom:container-muxer-webm: aa71ff27fc2769a1b78a27578f13a17b -> + custom:video-decoder-webm-vp8: 9c59270c3fd7afecdb556c50c9e8de78 -> + custom:SearchIndexIgnoredProperties: e643bd26f0fe6173181afceb89e7c659 -> + custom:AudioImporter_EditorPlatform: d09bf68614088b80899f8185d706f6e7 -> + custom:video-encoder-webm-vp8: eb34c28f22e8b96e1ab97ce403110664 -> + custom:audio-decoder-ogg-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> + custom:audio-encoder-webm-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> +======================================================================== +Received Prepare +Begin MonoManager ReloadAssembly +- Loaded All Assemblies, in 0.926 seconds +Refreshing native plugins compatible for Editor in 16.42 ms, found 3 plugins. +Native extension for WindowsStandalone target not found +Native extension for Android target not found +[Package Manager] Server::EnsureServerProcessIsRunning -- launch failed, reason: Unity was launched with the -noUpm command-line argument +[Package Manager] UpmClient::Send -- Unable to send message (not connected to UPM process). +[Package Manager] Cannot connect to Unity Package Manager local server +Mono: successfully reloaded assembly +- Finished resetting the current domain, in 1.774 seconds +Domain Reload Profiling: 2681ms + BeginReloadAssembly (338ms) + ExecutionOrderSort (0ms) + DisableScriptedObjects (7ms) + BackupInstance (0ms) + ReleaseScriptingObjects (0ms) + CreateAndSetChildDomain (39ms) + RebuildCommonClasses (55ms) + RebuildNativeTypeToScriptingClass (13ms) + initialDomainReloadingComplete (83ms) + LoadAllAssembliesAndSetupDomain (418ms) + LoadAssemblies (631ms) + RebuildTransferFunctionScriptingTraits (0ms) + AnalyzeDomain (26ms) + TypeCache.Refresh (12ms) + TypeCache.ScanAssembly (2ms) + ScanForSourceGeneratedMonoScriptInfo (7ms) + ResolveRequiredComponents (7ms) + FinalizeReload (1774ms) + ReleaseScriptCaches (0ms) + RebuildScriptCaches (0ms) + SetupLoadedEditorAssemblies (423ms) + LogAssemblyErrors (0ms) + InitializePlatformSupportModulesInManaged (43ms) + SetLoadedEditorAssemblies (2ms) + RefreshPlugins (0ms) + BeforeProcessingInitializeOnLoad (106ms) + ProcessInitializeOnLoadAttributes (219ms) + ProcessInitializeOnLoadMethodAttributes (21ms) + AfterProcessingInitializeOnLoad (31ms) + EditorAssembliesLoaded (0ms) + ExecutionOrderSort2 (0ms) + AwakeInstancesAfterBackupRestoration (7ms) +Refreshing native plugins compatible for Editor in 16.18 ms, found 3 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 4890 Unused Serialized files (Serialized files now loaded: 0) +Unloading 34 unused Assets / (36.3 KB). Loaded Objects now: 5407. +Memory consumption went from 176.5 MB to 176.5 MB. +Total: 2.809800 ms (FindLiveObjects: 0.244900 ms CreateObjectMapping: 0.130500 ms MarkObjects: 2.384100 ms DeleteObjects: 0.049600 ms) + +Prepare: number of updated asset objects reloaded= 0 +AssetImportParameters requested are different than current active one (requested -> active): + custom:container-demuxer-ogg: 62fdf1f143b41e24485cea50d1cbac27 -> + custom:video-codec-MediaFoundation-h265: 746d11721c4dcdbdad8f713fa42b33f4 -> + custom:video-decoder-ogg-theora: a1e56fd34408186e4bbccfd4996cb3dc -> + custom:framework-win-MediaFoundation: 216162199b28c13a410421893ffa2e32 -> + custom:CustomObjectIndexerAttribute: 43b350a4d6e6d1791af0b5038c4bea17 -> + custom:container-demuxer-webm: 4f35f7cbe854078d1ac9338744f61a02 -> + custom:container-muxer-webm: aa71ff27fc2769a1b78a27578f13a17b -> + custom:video-decoder-webm-vp8: 9c59270c3fd7afecdb556c50c9e8de78 -> + custom:SearchIndexIgnoredProperties: e643bd26f0fe6173181afceb89e7c659 -> + custom:AudioImporter_EditorPlatform: d09bf68614088b80899f8185d706f6e7 -> + custom:video-encoder-webm-vp8: eb34c28f22e8b96e1ab97ce403110664 -> + custom:audio-decoder-ogg-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> + custom:audio-encoder-webm-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> +======================================================================== +Received Prepare +Begin MonoManager ReloadAssembly +- Loaded All Assemblies, in 0.665 seconds +Refreshing native plugins compatible for Editor in 16.25 ms, found 3 plugins. +Native extension for WindowsStandalone target not found +Native extension for Android target not found +[Package Manager] Server::EnsureServerProcessIsRunning -- launch failed, reason: Unity was launched with the -noUpm command-line argument +[Package Manager] UpmClient::Send -- Unable to send message (not connected to UPM process). +[Package Manager] Cannot connect to Unity Package Manager local server +Mono: successfully reloaded assembly +- Finished resetting the current domain, in 1.443 seconds +Domain Reload Profiling: 2094ms + BeginReloadAssembly (184ms) + ExecutionOrderSort (0ms) + DisableScriptedObjects (7ms) + BackupInstance (0ms) + ReleaseScriptingObjects (0ms) + CreateAndSetChildDomain (33ms) + RebuildCommonClasses (29ms) + RebuildNativeTypeToScriptingClass (9ms) + initialDomainReloadingComplete (53ms) + LoadAllAssembliesAndSetupDomain (375ms) + LoadAssemblies (453ms) + RebuildTransferFunctionScriptingTraits (0ms) + AnalyzeDomain (19ms) + TypeCache.Refresh (9ms) + TypeCache.ScanAssembly (0ms) + ScanForSourceGeneratedMonoScriptInfo (0ms) + ResolveRequiredComponents (9ms) + FinalizeReload (1444ms) + ReleaseScriptCaches (0ms) + RebuildScriptCaches (0ms) + SetupLoadedEditorAssemblies (454ms) + LogAssemblyErrors (0ms) + InitializePlatformSupportModulesInManaged (30ms) + SetLoadedEditorAssemblies (2ms) + RefreshPlugins (0ms) + BeforeProcessingInitializeOnLoad (101ms) + ProcessInitializeOnLoadAttributes (265ms) + ProcessInitializeOnLoadMethodAttributes (26ms) + AfterProcessingInitializeOnLoad (29ms) + EditorAssembliesLoaded (0ms) + ExecutionOrderSort2 (0ms) + AwakeInstancesAfterBackupRestoration (7ms) +Refreshing native plugins compatible for Editor in 11.42 ms, found 3 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 4890 Unused Serialized files (Serialized files now loaded: 0) +Unloading 34 unused Assets / (36.2 KB). Loaded Objects now: 5410. +Memory consumption went from 178.4 MB to 178.4 MB. +Total: 3.744200 ms (FindLiveObjects: 0.310000 ms CreateObjectMapping: 0.172100 ms MarkObjects: 3.119700 ms DeleteObjects: 0.140700 ms) + +Prepare: number of updated asset objects reloaded= 0 +AssetImportParameters requested are different than current active one (requested -> active): + custom:container-demuxer-ogg: 62fdf1f143b41e24485cea50d1cbac27 -> + custom:video-codec-MediaFoundation-h265: 746d11721c4dcdbdad8f713fa42b33f4 -> + custom:video-decoder-ogg-theora: a1e56fd34408186e4bbccfd4996cb3dc -> + custom:framework-win-MediaFoundation: 216162199b28c13a410421893ffa2e32 -> + custom:CustomObjectIndexerAttribute: 43b350a4d6e6d1791af0b5038c4bea17 -> + custom:container-demuxer-webm: 4f35f7cbe854078d1ac9338744f61a02 -> + custom:container-muxer-webm: aa71ff27fc2769a1b78a27578f13a17b -> + custom:video-decoder-webm-vp8: 9c59270c3fd7afecdb556c50c9e8de78 -> + custom:SearchIndexIgnoredProperties: e643bd26f0fe6173181afceb89e7c659 -> + custom:AudioImporter_EditorPlatform: d09bf68614088b80899f8185d706f6e7 -> + custom:video-encoder-webm-vp8: eb34c28f22e8b96e1ab97ce403110664 -> + custom:audio-decoder-ogg-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> + custom:audio-encoder-webm-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> +======================================================================== +Received Import Request. + Time since last request: 340.440817 seconds. + path: Assets/Packages/BepuPhysics.2.3.4/bepuphysicslogo256.png + artifactKey: Guid(eedc788daf73e8b46ad39b7553f7df0b) Importer(815301076,1909f56bfc062723c751e8b465ee728b) +Start importing Assets/Packages/BepuPhysics.2.3.4/bepuphysicslogo256.png using Guid(eedc788daf73e8b46ad39b7553f7df0b) Importer(815301076,1909f56bfc062723c751e8b465ee728b) -> (artifact id: '92ee09c7a360196a5f7063511ec11d67') in 0.056101 seconds +Number of updated asset objects reloaded before import = 0 +Number of asset objects unloaded after import = 2 +======================================================================== +Received Import Request. + Time since last request: 0.393273 seconds. + path: Assets/Packages/BepuUtilities.2.3.4/bepuphysicslogo256.png + artifactKey: Guid(994c9e52f887aba4d8bd51018a243ad4) Importer(815301076,1909f56bfc062723c751e8b465ee728b) +Start importing Assets/Packages/BepuUtilities.2.3.4/bepuphysicslogo256.png using Guid(994c9e52f887aba4d8bd51018a243ad4) Importer(815301076,1909f56bfc062723c751e8b465ee728b) -> (artifact id: 'cd0101f0de57da6d406b9ae9bc4d2082') in 0.019759 seconds +Number of updated asset objects reloaded before import = 0 +Number of asset objects unloaded after import = 2 +======================================================================== +Received Import Request. + Time since last request: 17.350475 seconds. + path: Assets/Packages + artifactKey: Guid(f5ddeed46214a6549ad76520afa1f466) Importer(815301076,1909f56bfc062723c751e8b465ee728b) +Start importing Assets/Packages using Guid(f5ddeed46214a6549ad76520afa1f466) Importer(815301076,1909f56bfc062723c751e8b465ee728b) -> (artifact id: '006e51384baebfb57a3df94cbaa0af0d') in 0.000708 seconds +Number of updated asset objects reloaded before import = 0 +Number of asset objects unloaded after import = 0 +======================================================================== +Received Import Request. + Time since last request: 2.697121 seconds. + path: Assets/Plugins + artifactKey: Guid(0c7f1863e7cce884fa6118afce008274) Importer(815301076,1909f56bfc062723c751e8b465ee728b) +Start importing Assets/Plugins using Guid(0c7f1863e7cce884fa6118afce008274) Importer(815301076,1909f56bfc062723c751e8b465ee728b) -> (artifact id: 'c22a7849b9f7ee1f539d8f14e091ffdb') in 0.000713 seconds +Number of updated asset objects reloaded before import = 0 +Number of asset objects unloaded after import = 0 +======================================================================== +Received Import Request. + Time since last request: 2.964449 seconds. + path: Assets/Plugins/bepuphysics2-2.4.0 + artifactKey: Guid(98df5905a686163499b14c68cd6cd68c) Importer(815301076,1909f56bfc062723c751e8b465ee728b) +Start importing Assets/Plugins/bepuphysics2-2.4.0 using Guid(98df5905a686163499b14c68cd6cd68c) Importer(815301076,1909f56bfc062723c751e8b465ee728b) -> (artifact id: 'a50eea596e45e3e9a6b7958cf1573961') in 0.000869 seconds +Number of updated asset objects reloaded before import = 0 +Number of asset objects unloaded after import = 0 +======================================================================== +Received Import Request. + Time since last request: 382.019607 seconds. + path: Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/Icon.png + artifactKey: Guid(0e3d51ee714483b4296ed3f345349d94) Importer(815301076,1909f56bfc062723c751e8b465ee728b) +Start importing Assets/Packages/System.Runtime.CompilerServices.Unsafe.6.0.0/Icon.png using Guid(0e3d51ee714483b4296ed3f345349d94) Importer(815301076,1909f56bfc062723c751e8b465ee728b) -> (artifact id: '803d8148b8d02c408344d8450f16dd0c') in 0.032037 seconds +Number of updated asset objects reloaded before import = 0 +Number of asset objects unloaded after import = 2 +======================================================================== +Received Import Request. + Time since last request: 108.669290 seconds. + path: Assets/Packages/BepuUtilities.2.3.4/bepuphysicslogo256.png + artifactKey: Guid(994c9e52f887aba4d8bd51018a243ad4) Importer(815301076,1909f56bfc062723c751e8b465ee728b) +Start importing Assets/Packages/BepuUtilities.2.3.4/bepuphysicslogo256.png using Guid(994c9e52f887aba4d8bd51018a243ad4) Importer(815301076,1909f56bfc062723c751e8b465ee728b) -> (artifact id: 'e6544b5afb21e9b9cb81dff12a423405') in 0.016124 seconds +Number of updated asset objects reloaded before import = 0 +Number of asset objects unloaded after import = 2 +======================================================================== +Received Import Request. + Time since last request: 2229.457218 seconds. + path: Assets/Plugins/bepuphysics2-2.3.X + artifactKey: Guid(80b1cb25aa99f53489f9a1ec5f5abc8e) Importer(815301076,1909f56bfc062723c751e8b465ee728b) +Start importing Assets/Plugins/bepuphysics2-2.3.X using Guid(80b1cb25aa99f53489f9a1ec5f5abc8e) Importer(815301076,1909f56bfc062723c751e8b465ee728b) -> (artifact id: '639a44c6018cf49f330dbac32a93859b') in 0.022788 seconds +Number of updated asset objects reloaded before import = 0 +Number of asset objects unloaded after import = 0 +======================================================================== +Received Prepare +Begin MonoManager ReloadAssembly +- Loaded All Assemblies, in 1.905 seconds +Refreshing native plugins compatible for Editor in 7.63 ms, found 3 plugins. +Native extension for WindowsStandalone target not found +Native extension for Android target not found +[Package Manager] Server::EnsureServerProcessIsRunning -- launch failed, reason: Unity was launched with the -noUpm command-line argument +[Package Manager] UpmClient::Send -- Unable to send message (not connected to UPM process). +[Package Manager] Cannot connect to Unity Package Manager local server +Mono: successfully reloaded assembly +- Finished resetting the current domain, in 1.792 seconds +Domain Reload Profiling: 3689ms + BeginReloadAssembly (695ms) + ExecutionOrderSort (0ms) + DisableScriptedObjects (26ms) + BackupInstance (0ms) + ReleaseScriptingObjects (2ms) + CreateAndSetChildDomain (367ms) + RebuildCommonClasses (27ms) + RebuildNativeTypeToScriptingClass (10ms) + initialDomainReloadingComplete (49ms) + LoadAllAssembliesAndSetupDomain (1114ms) + LoadAssemblies (1230ms) + RebuildTransferFunctionScriptingTraits (0ms) + AnalyzeDomain (68ms) + TypeCache.Refresh (44ms) + TypeCache.ScanAssembly (20ms) + ScanForSourceGeneratedMonoScriptInfo (15ms) + ResolveRequiredComponents (8ms) + FinalizeReload (1793ms) + ReleaseScriptCaches (0ms) + RebuildScriptCaches (0ms) + SetupLoadedEditorAssemblies (572ms) + LogAssemblyErrors (0ms) + InitializePlatformSupportModulesInManaged (76ms) + SetLoadedEditorAssemblies (5ms) + RefreshPlugins (0ms) + BeforeProcessingInitializeOnLoad (115ms) + ProcessInitializeOnLoadAttributes (306ms) + ProcessInitializeOnLoadMethodAttributes (36ms) + AfterProcessingInitializeOnLoad (33ms) + EditorAssembliesLoaded (2ms) + ExecutionOrderSort2 (0ms) + AwakeInstancesAfterBackupRestoration (12ms) +Refreshing native plugins compatible for Editor in 16.44 ms, found 3 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 4889 Unused Serialized files (Serialized files now loaded: 0) +Unloading 34 unused Assets / (37.2 KB). Loaded Objects now: 5415. +Memory consumption went from 180.1 MB to 180.1 MB. +Total: 6.078200 ms (FindLiveObjects: 0.451100 ms CreateObjectMapping: 0.138400 ms MarkObjects: 5.402200 ms DeleteObjects: 0.085200 ms) + +Prepare: number of updated asset objects reloaded= 0 +AssetImportParameters requested are different than current active one (requested -> active): + custom:container-demuxer-ogg: 62fdf1f143b41e24485cea50d1cbac27 -> + custom:video-codec-MediaFoundation-h265: 746d11721c4dcdbdad8f713fa42b33f4 -> + custom:video-decoder-ogg-theora: a1e56fd34408186e4bbccfd4996cb3dc -> + custom:framework-win-MediaFoundation: 216162199b28c13a410421893ffa2e32 -> + custom:CustomObjectIndexerAttribute: 43b350a4d6e6d1791af0b5038c4bea17 -> + custom:container-demuxer-webm: 4f35f7cbe854078d1ac9338744f61a02 -> + custom:container-muxer-webm: aa71ff27fc2769a1b78a27578f13a17b -> + custom:video-decoder-webm-vp8: 9c59270c3fd7afecdb556c50c9e8de78 -> + custom:SearchIndexIgnoredProperties: e643bd26f0fe6173181afceb89e7c659 -> + custom:AudioImporter_EditorPlatform: d09bf68614088b80899f8185d706f6e7 -> + custom:video-encoder-webm-vp8: eb34c28f22e8b96e1ab97ce403110664 -> + custom:audio-decoder-ogg-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> + custom:audio-encoder-webm-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> +======================================================================== +Received Import Request. + Time since last request: 531.026587 seconds. + path: Assets/Packages/BepuPhysics.2.3.4/bepuphysicslogo256.png + artifactKey: Guid(eedc788daf73e8b46ad39b7553f7df0b) Importer(815301076,1909f56bfc062723c751e8b465ee728b) +Start importing Assets/Packages/BepuPhysics.2.3.4/bepuphysicslogo256.png using Guid(eedc788daf73e8b46ad39b7553f7df0b) Importer(815301076,1909f56bfc062723c751e8b465ee728b) -> (artifact id: '7a517197ebc0bad0661ac88631b73c1a') in 0.071279 seconds +Number of updated asset objects reloaded before import = 0 +Number of asset objects unloaded after import = 2 +======================================================================== +Received Prepare +Begin MonoManager ReloadAssembly +- Loaded All Assemblies, in 0.912 seconds +Refreshing native plugins compatible for Editor in 14.52 ms, found 3 plugins. +Native extension for WindowsStandalone target not found +Native extension for Android target not found +[Package Manager] Server::EnsureServerProcessIsRunning -- launch failed, reason: Unity was launched with the -noUpm command-line argument +[Package Manager] UpmClient::Send -- Unable to send message (not connected to UPM process). +[Package Manager] Cannot connect to Unity Package Manager local server +Mono: successfully reloaded assembly +- Finished resetting the current domain, in 1.627 seconds +Domain Reload Profiling: 2515ms + BeginReloadAssembly (272ms) + ExecutionOrderSort (0ms) + DisableScriptedObjects (7ms) + BackupInstance (0ms) + ReleaseScriptingObjects (0ms) + CreateAndSetChildDomain (41ms) + RebuildCommonClasses (39ms) + RebuildNativeTypeToScriptingClass (13ms) + initialDomainReloadingComplete (83ms) + LoadAllAssembliesAndSetupDomain (480ms) + LoadAssemblies (635ms) + RebuildTransferFunctionScriptingTraits (0ms) + AnalyzeDomain (18ms) + TypeCache.Refresh (8ms) + TypeCache.ScanAssembly (0ms) + ScanForSourceGeneratedMonoScriptInfo (0ms) + ResolveRequiredComponents (9ms) + FinalizeReload (1627ms) + ReleaseScriptCaches (0ms) + RebuildScriptCaches (0ms) + SetupLoadedEditorAssemblies (379ms) + LogAssemblyErrors (0ms) + InitializePlatformSupportModulesInManaged (28ms) + SetLoadedEditorAssemblies (6ms) + RefreshPlugins (0ms) + BeforeProcessingInitializeOnLoad (75ms) + ProcessInitializeOnLoadAttributes (224ms) + ProcessInitializeOnLoadMethodAttributes (25ms) + AfterProcessingInitializeOnLoad (22ms) + EditorAssembliesLoaded (0ms) + ExecutionOrderSort2 (0ms) + AwakeInstancesAfterBackupRestoration (10ms) +Refreshing native plugins compatible for Editor in 8.89 ms, found 3 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 4889 Unused Serialized files (Serialized files now loaded: 0) +Unloading 34 unused Assets / (36.3 KB). Loaded Objects now: 5418. +Memory consumption went from 182.0 MB to 182.0 MB. +Total: 2.434000 ms (FindLiveObjects: 0.260900 ms CreateObjectMapping: 0.136200 ms MarkObjects: 1.987100 ms DeleteObjects: 0.049100 ms) + +Prepare: number of updated asset objects reloaded= 0 +AssetImportParameters requested are different than current active one (requested -> active): + custom:container-demuxer-ogg: 62fdf1f143b41e24485cea50d1cbac27 -> + custom:video-codec-MediaFoundation-h265: 746d11721c4dcdbdad8f713fa42b33f4 -> + custom:video-decoder-ogg-theora: a1e56fd34408186e4bbccfd4996cb3dc -> + custom:framework-win-MediaFoundation: 216162199b28c13a410421893ffa2e32 -> + custom:CustomObjectIndexerAttribute: 43b350a4d6e6d1791af0b5038c4bea17 -> + custom:container-demuxer-webm: 4f35f7cbe854078d1ac9338744f61a02 -> + custom:container-muxer-webm: aa71ff27fc2769a1b78a27578f13a17b -> + custom:video-decoder-webm-vp8: 9c59270c3fd7afecdb556c50c9e8de78 -> + custom:SearchIndexIgnoredProperties: e643bd26f0fe6173181afceb89e7c659 -> + custom:AudioImporter_EditorPlatform: d09bf68614088b80899f8185d706f6e7 -> + custom:video-encoder-webm-vp8: eb34c28f22e8b96e1ab97ce403110664 -> + custom:audio-decoder-ogg-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> + custom:audio-encoder-webm-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> +======================================================================== +Received Prepare +Begin MonoManager ReloadAssembly +- Loaded All Assemblies, in 0.962 seconds +Refreshing native plugins compatible for Editor in 17.99 ms, found 3 plugins. +Native extension for WindowsStandalone target not found +Native extension for Android target not found +[Package Manager] Server::EnsureServerProcessIsRunning -- launch failed, reason: Unity was launched with the -noUpm command-line argument +[Package Manager] UpmClient::Send -- Unable to send message (not connected to UPM process). +[Package Manager] Cannot connect to Unity Package Manager local server +Mono: successfully reloaded assembly +- Finished resetting the current domain, in 1.488 seconds +Domain Reload Profiling: 2429ms + BeginReloadAssembly (359ms) + ExecutionOrderSort (0ms) + DisableScriptedObjects (6ms) + BackupInstance (0ms) + ReleaseScriptingObjects (0ms) + CreateAndSetChildDomain (43ms) + RebuildCommonClasses (38ms) + RebuildNativeTypeToScriptingClass (14ms) + initialDomainReloadingComplete (78ms) + LoadAllAssembliesAndSetupDomain (452ms) + LoadAssemblies (673ms) + RebuildTransferFunctionScriptingTraits (0ms) + AnalyzeDomain (33ms) + TypeCache.Refresh (15ms) + TypeCache.ScanAssembly (2ms) + ScanForSourceGeneratedMonoScriptInfo (8ms) + ResolveRequiredComponents (8ms) + FinalizeReload (1488ms) + ReleaseScriptCaches (0ms) + RebuildScriptCaches (0ms) + SetupLoadedEditorAssemblies (518ms) + LogAssemblyErrors (0ms) + InitializePlatformSupportModulesInManaged (42ms) + SetLoadedEditorAssemblies (4ms) + RefreshPlugins (0ms) + BeforeProcessingInitializeOnLoad (135ms) + ProcessInitializeOnLoadAttributes (275ms) + ProcessInitializeOnLoadMethodAttributes (38ms) + AfterProcessingInitializeOnLoad (24ms) + EditorAssembliesLoaded (0ms) + ExecutionOrderSort2 (0ms) + AwakeInstancesAfterBackupRestoration (8ms) +Refreshing native plugins compatible for Editor in 9.54 ms, found 3 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 4890 Unused Serialized files (Serialized files now loaded: 0) +Unloading 34 unused Assets / (36.3 KB). Loaded Objects now: 5421. +Memory consumption went from 184.2 MB to 184.2 MB. +Total: 2.682800 ms (FindLiveObjects: 0.259800 ms CreateObjectMapping: 0.139000 ms MarkObjects: 2.141900 ms DeleteObjects: 0.140900 ms) + +Prepare: number of updated asset objects reloaded= 0 +AssetImportParameters requested are different than current active one (requested -> active): + custom:container-demuxer-ogg: 62fdf1f143b41e24485cea50d1cbac27 -> + custom:video-codec-MediaFoundation-h265: 746d11721c4dcdbdad8f713fa42b33f4 -> + custom:video-decoder-ogg-theora: a1e56fd34408186e4bbccfd4996cb3dc -> + custom:framework-win-MediaFoundation: 216162199b28c13a410421893ffa2e32 -> + custom:CustomObjectIndexerAttribute: 43b350a4d6e6d1791af0b5038c4bea17 -> + custom:container-demuxer-webm: 4f35f7cbe854078d1ac9338744f61a02 -> + custom:container-muxer-webm: aa71ff27fc2769a1b78a27578f13a17b -> + custom:video-decoder-webm-vp8: 9c59270c3fd7afecdb556c50c9e8de78 -> + custom:SearchIndexIgnoredProperties: e643bd26f0fe6173181afceb89e7c659 -> + custom:AudioImporter_EditorPlatform: d09bf68614088b80899f8185d706f6e7 -> + custom:video-encoder-webm-vp8: eb34c28f22e8b96e1ab97ce403110664 -> + custom:audio-decoder-ogg-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> + custom:audio-encoder-webm-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> +======================================================================== +Received Prepare +Begin MonoManager ReloadAssembly +- Loaded All Assemblies, in 0.684 seconds +Refreshing native plugins compatible for Editor in 21.50 ms, found 3 plugins. +Native extension for WindowsStandalone target not found +Native extension for Android target not found +[Package Manager] Server::EnsureServerProcessIsRunning -- launch failed, reason: Unity was launched with the -noUpm command-line argument +[Package Manager] UpmClient::Send -- Unable to send message (not connected to UPM process). +[Package Manager] Cannot connect to Unity Package Manager local server +Mono: successfully reloaded assembly +- Finished resetting the current domain, in 1.235 seconds +Domain Reload Profiling: 1906ms + BeginReloadAssembly (196ms) + ExecutionOrderSort (0ms) + DisableScriptedObjects (4ms) + BackupInstance (0ms) + ReleaseScriptingObjects (0ms) + CreateAndSetChildDomain (49ms) + RebuildCommonClasses (27ms) + RebuildNativeTypeToScriptingClass (9ms) + initialDomainReloadingComplete (44ms) + LoadAllAssembliesAndSetupDomain (394ms) + LoadAssemblies (440ms) + RebuildTransferFunctionScriptingTraits (0ms) + AnalyzeDomain (57ms) + TypeCache.Refresh (43ms) + TypeCache.ScanAssembly (0ms) + ScanForSourceGeneratedMonoScriptInfo (0ms) + ResolveRequiredComponents (12ms) + FinalizeReload (1236ms) + ReleaseScriptCaches (0ms) + RebuildScriptCaches (0ms) + SetupLoadedEditorAssemblies (432ms) + LogAssemblyErrors (0ms) + InitializePlatformSupportModulesInManaged (37ms) + SetLoadedEditorAssemblies (4ms) + RefreshPlugins (0ms) + BeforeProcessingInitializeOnLoad (72ms) + ProcessInitializeOnLoadAttributes (270ms) + ProcessInitializeOnLoadMethodAttributes (27ms) + AfterProcessingInitializeOnLoad (22ms) + EditorAssembliesLoaded (0ms) + ExecutionOrderSort2 (0ms) + AwakeInstancesAfterBackupRestoration (8ms) +Refreshing native plugins compatible for Editor in 10.09 ms, found 3 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 4890 Unused Serialized files (Serialized files now loaded: 0) +Unloading 34 unused Assets / (36.3 KB). Loaded Objects now: 5424. +Memory consumption went from 186.1 MB to 186.1 MB. +Total: 4.117400 ms (FindLiveObjects: 0.637000 ms CreateObjectMapping: 0.418600 ms MarkObjects: 2.997000 ms DeleteObjects: 0.063600 ms) + +Prepare: number of updated asset objects reloaded= 0 +AssetImportParameters requested are different than current active one (requested -> active): + custom:container-demuxer-ogg: 62fdf1f143b41e24485cea50d1cbac27 -> + custom:video-codec-MediaFoundation-h265: 746d11721c4dcdbdad8f713fa42b33f4 -> + custom:video-decoder-ogg-theora: a1e56fd34408186e4bbccfd4996cb3dc -> + custom:framework-win-MediaFoundation: 216162199b28c13a410421893ffa2e32 -> + custom:CustomObjectIndexerAttribute: 43b350a4d6e6d1791af0b5038c4bea17 -> + custom:container-demuxer-webm: 4f35f7cbe854078d1ac9338744f61a02 -> + custom:container-muxer-webm: aa71ff27fc2769a1b78a27578f13a17b -> + custom:video-decoder-webm-vp8: 9c59270c3fd7afecdb556c50c9e8de78 -> + custom:SearchIndexIgnoredProperties: e643bd26f0fe6173181afceb89e7c659 -> + custom:AudioImporter_EditorPlatform: d09bf68614088b80899f8185d706f6e7 -> + custom:video-encoder-webm-vp8: eb34c28f22e8b96e1ab97ce403110664 -> + custom:audio-decoder-ogg-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> + custom:audio-encoder-webm-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> +======================================================================== +Received Import Request. + Time since last request: 1608.690664 seconds. + path: Assets/Plugins/Bepu + artifactKey: Guid(943ed975f4553d349ac6178591167aad) Importer(815301076,1909f56bfc062723c751e8b465ee728b) +Start importing Assets/Plugins/Bepu using Guid(943ed975f4553d349ac6178591167aad) Importer(815301076,1909f56bfc062723c751e8b465ee728b) -> (artifact id: '9fab10a0c3170fdfa0498fd40b23b3fc') in 0.004151 seconds +Number of updated asset objects reloaded before import = 0 +Number of asset objects unloaded after import = 0 +======================================================================== +Received Import Request. + Time since last request: 5.219281 seconds. + path: Assets/Plugins/BepuPhysics + artifactKey: Guid(943ed975f4553d349ac6178591167aad) Importer(815301076,1909f56bfc062723c751e8b465ee728b) +Start importing Assets/Plugins/BepuPhysics using Guid(943ed975f4553d349ac6178591167aad) Importer(815301076,1909f56bfc062723c751e8b465ee728b) -> (artifact id: 'd91a9dd704b5f73d566eb3918112d7b7') in 0.000542 seconds +Number of updated asset objects reloaded before import = 0 +Number of asset objects unloaded after import = 0 +======================================================================== +Received Import Request. + Time since last request: 23.128635 seconds. + path: Assets/Plugins/JNGame/BepuPhysics/Core + artifactKey: Guid(943ed975f4553d349ac6178591167aad) Importer(815301076,1909f56bfc062723c751e8b465ee728b) +Start importing Assets/Plugins/JNGame/BepuPhysics/Core using Guid(943ed975f4553d349ac6178591167aad) Importer(815301076,1909f56bfc062723c751e8b465ee728b) -> (artifact id: '83a64a879751cd7135f82369b33e7caf') in 0.000552 seconds +Number of updated asset objects reloaded before import = 0 +Number of asset objects unloaded after import = 0 +======================================================================== +Received Import Request. + Time since last request: 4.569867 seconds. + path: Assets/Plugins/JNGame/BepuPhysics/Utilities/BepuCallbacks.cs + artifactKey: Guid(12d59c2959b546898001fd2ee9c2533d) Importer(815301076,1909f56bfc062723c751e8b465ee728b) +Start importing Assets/Plugins/JNGame/BepuPhysics/Utilities/BepuCallbacks.cs using Guid(12d59c2959b546898001fd2ee9c2533d) Importer(815301076,1909f56bfc062723c751e8b465ee728b) -> (artifact id: 'a87f5ae6ac33dbc84296bda919884699') in 0.000835 seconds +Number of updated asset objects reloaded before import = 0 +Number of asset objects unloaded after import = 0 +======================================================================== +Received Prepare +Begin MonoManager ReloadAssembly +- Loaded All Assemblies, in 1.864 seconds +Refreshing native plugins compatible for Editor in 11.81 ms, found 3 plugins. +Native extension for WindowsStandalone target not found +Native extension for Android target not found +[Package Manager] Server::EnsureServerProcessIsRunning -- launch failed, reason: Unity was launched with the -noUpm command-line argument +[Package Manager] UpmClient::Send -- Unable to send message (not connected to UPM process). +[Package Manager] Cannot connect to Unity Package Manager local server +Mono: successfully reloaded assembly +- Finished resetting the current domain, in 2.214 seconds +Domain Reload Profiling: 4074ms + BeginReloadAssembly (752ms) + ExecutionOrderSort (0ms) + DisableScriptedObjects (25ms) + BackupInstance (0ms) + ReleaseScriptingObjects (1ms) + CreateAndSetChildDomain (289ms) + RebuildCommonClasses (26ms) + RebuildNativeTypeToScriptingClass (9ms) + initialDomainReloadingComplete (44ms) + LoadAllAssembliesAndSetupDomain (1027ms) + LoadAssemblies (1192ms) + RebuildTransferFunctionScriptingTraits (0ms) + AnalyzeDomain (130ms) + TypeCache.Refresh (85ms) + TypeCache.ScanAssembly (34ms) + ScanForSourceGeneratedMonoScriptInfo (32ms) + ResolveRequiredComponents (11ms) + FinalizeReload (2215ms) + ReleaseScriptCaches (0ms) + RebuildScriptCaches (0ms) + SetupLoadedEditorAssemblies (644ms) + LogAssemblyErrors (0ms) + InitializePlatformSupportModulesInManaged (67ms) + SetLoadedEditorAssemblies (7ms) + RefreshPlugins (0ms) + BeforeProcessingInitializeOnLoad (112ms) + ProcessInitializeOnLoadAttributes (362ms) + ProcessInitializeOnLoadMethodAttributes (57ms) + AfterProcessingInitializeOnLoad (38ms) + EditorAssembliesLoaded (1ms) + ExecutionOrderSort2 (0ms) + AwakeInstancesAfterBackupRestoration (16ms) +Refreshing native plugins compatible for Editor in 20.74 ms, found 3 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 5285 Unused Serialized files (Serialized files now loaded: 0) +Unloading 34 unused Assets / (36.3 KB). Loaded Objects now: 5823. +Memory consumption went from 196.8 MB to 196.8 MB. +Total: 21.201300 ms (FindLiveObjects: 1.589400 ms CreateObjectMapping: 0.256900 ms MarkObjects: 19.105500 ms DeleteObjects: 0.246700 ms) + +Prepare: number of updated asset objects reloaded= 0 +AssetImportParameters requested are different than current active one (requested -> active): + custom:container-demuxer-ogg: 62fdf1f143b41e24485cea50d1cbac27 -> + custom:video-codec-MediaFoundation-h265: 746d11721c4dcdbdad8f713fa42b33f4 -> + custom:video-decoder-ogg-theora: a1e56fd34408186e4bbccfd4996cb3dc -> + custom:framework-win-MediaFoundation: 216162199b28c13a410421893ffa2e32 -> + custom:CustomObjectIndexerAttribute: 43b350a4d6e6d1791af0b5038c4bea17 -> + custom:container-demuxer-webm: 4f35f7cbe854078d1ac9338744f61a02 -> + custom:container-muxer-webm: aa71ff27fc2769a1b78a27578f13a17b -> + custom:video-decoder-webm-vp8: 9c59270c3fd7afecdb556c50c9e8de78 -> + custom:SearchIndexIgnoredProperties: e643bd26f0fe6173181afceb89e7c659 -> + custom:AudioImporter_EditorPlatform: d09bf68614088b80899f8185d706f6e7 -> + custom:video-encoder-webm-vp8: eb34c28f22e8b96e1ab97ce403110664 -> + custom:audio-decoder-ogg-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> + custom:audio-encoder-webm-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> +======================================================================== +Received Import Request. + Time since last request: 1055.383499 seconds. + path: Assets/Packages/BepuPhysics.2.3.4 + artifactKey: Guid(31356a43a7579d34d9b102dbfe1b77e4) Importer(815301076,1909f56bfc062723c751e8b465ee728b) +Start importing Assets/Packages/BepuPhysics.2.3.4 using Guid(31356a43a7579d34d9b102dbfe1b77e4) Importer(815301076,1909f56bfc062723c751e8b465ee728b) -> (artifact id: '5d6fe5311b0f8b5767d7629d6641e19f') in 0.006410 seconds +Number of updated asset objects reloaded before import = 0 +Number of asset objects unloaded after import = 0 +======================================================================== +Received Import Request. + Time since last request: 14.367331 seconds. + path: Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1 + artifactKey: Guid(0886c3a27fa906740a2f0394fc2c8255) Importer(815301076,1909f56bfc062723c751e8b465ee728b) +Start importing Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics1 using Guid(0886c3a27fa906740a2f0394fc2c8255) Importer(815301076,1909f56bfc062723c751e8b465ee728b) -> (artifact id: 'f6700e8bccc601aafd832471e04c5223') in 0.002087 seconds +Number of updated asset objects reloaded before import = 0 +Number of asset objects unloaded after import = 0 +======================================================================== +Received Import Request. + Time since last request: 1.656471 seconds. + path: Assets/Plugins/JNGame/BepuPhysics/Core/BEPUutilities + artifactKey: Guid(fe8b97a7f1f123d49b2855bba11a5f4f) Importer(815301076,1909f56bfc062723c751e8b465ee728b) +Start importing Assets/Plugins/JNGame/BepuPhysics/Core/BEPUutilities using Guid(fe8b97a7f1f123d49b2855bba11a5f4f) Importer(815301076,1909f56bfc062723c751e8b465ee728b) -> (artifact id: 'c1104e7f58d88c73c19d639a4d9812c2') in 0.000537 seconds +Number of updated asset objects reloaded before import = 0 +Number of asset objects unloaded after import = 0 +======================================================================== +Received Import Request. + Time since last request: 0.450603 seconds. + path: Assets/Plugins/JNGame/BepuPhysics/Core/BEPUphysics + artifactKey: Guid(77d09f292abbe6147a23b9e7e8dd63a6) Importer(815301076,1909f56bfc062723c751e8b465ee728b) +Start importing Assets/Plugins/JNGame/BepuPhysics/Core/BEPUphysics using Guid(77d09f292abbe6147a23b9e7e8dd63a6) Importer(815301076,1909f56bfc062723c751e8b465ee728b) -> (artifact id: 'd5ea98fee48d1d0285ff942dab236a93') in 0.000596 seconds +Number of updated asset objects reloaded before import = 0 +Number of asset objects unloaded after import = 0 +======================================================================== +Received Prepare +Begin MonoManager ReloadAssembly +- Loaded All Assemblies, in 0.698 seconds +Refreshing native plugins compatible for Editor in 7.56 ms, found 3 plugins. +Native extension for WindowsStandalone target not found +Native extension for Android target not found +[Package Manager] Server::EnsureServerProcessIsRunning -- launch failed, reason: Unity was launched with the -noUpm command-line argument +[Package Manager] UpmClient::Send -- Unable to send message (not connected to UPM process). +[Package Manager] Cannot connect to Unity Package Manager local server +Mono: successfully reloaded assembly +- Finished resetting the current domain, in 1.283 seconds +Domain Reload Profiling: 1971ms + BeginReloadAssembly (186ms) + ExecutionOrderSort (0ms) + DisableScriptedObjects (4ms) + BackupInstance (0ms) + ReleaseScriptingObjects (0ms) + CreateAndSetChildDomain (41ms) + RebuildCommonClasses (30ms) + RebuildNativeTypeToScriptingClass (8ms) + initialDomainReloadingComplete (42ms) + LoadAllAssembliesAndSetupDomain (421ms) + LoadAssemblies (482ms) + RebuildTransferFunctionScriptingTraits (0ms) + AnalyzeDomain (43ms) + TypeCache.Refresh (27ms) + TypeCache.ScanAssembly (17ms) + ScanForSourceGeneratedMonoScriptInfo (9ms) + ResolveRequiredComponents (6ms) + FinalizeReload (1284ms) + ReleaseScriptCaches (0ms) + RebuildScriptCaches (0ms) + SetupLoadedEditorAssemblies (318ms) + LogAssemblyErrors (0ms) + InitializePlatformSupportModulesInManaged (25ms) + SetLoadedEditorAssemblies (3ms) + RefreshPlugins (0ms) + BeforeProcessingInitializeOnLoad (58ms) + ProcessInitializeOnLoadAttributes (191ms) + ProcessInitializeOnLoadMethodAttributes (25ms) + AfterProcessingInitializeOnLoad (16ms) + EditorAssembliesLoaded (0ms) + ExecutionOrderSort2 (0ms) + AwakeInstancesAfterBackupRestoration (7ms) +Refreshing native plugins compatible for Editor in 8.87 ms, found 3 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 5285 Unused Serialized files (Serialized files now loaded: 0) +Unloading 34 unused Assets / (36.3 KB). Loaded Objects now: 5826. +Memory consumption went from 199.3 MB to 199.3 MB. +Total: 3.627600 ms (FindLiveObjects: 0.366400 ms CreateObjectMapping: 0.193500 ms MarkObjects: 3.012000 ms DeleteObjects: 0.054700 ms) + +Prepare: number of updated asset objects reloaded= 0 +AssetImportParameters requested are different than current active one (requested -> active): + custom:container-demuxer-ogg: 62fdf1f143b41e24485cea50d1cbac27 -> + custom:video-codec-MediaFoundation-h265: 746d11721c4dcdbdad8f713fa42b33f4 -> + custom:video-decoder-ogg-theora: a1e56fd34408186e4bbccfd4996cb3dc -> + custom:framework-win-MediaFoundation: 216162199b28c13a410421893ffa2e32 -> + custom:CustomObjectIndexerAttribute: 43b350a4d6e6d1791af0b5038c4bea17 -> + custom:container-demuxer-webm: 4f35f7cbe854078d1ac9338744f61a02 -> + custom:container-muxer-webm: aa71ff27fc2769a1b78a27578f13a17b -> + custom:video-decoder-webm-vp8: 9c59270c3fd7afecdb556c50c9e8de78 -> + custom:SearchIndexIgnoredProperties: e643bd26f0fe6173181afceb89e7c659 -> + custom:AudioImporter_EditorPlatform: d09bf68614088b80899f8185d706f6e7 -> + custom:video-encoder-webm-vp8: eb34c28f22e8b96e1ab97ce403110664 -> + custom:audio-decoder-ogg-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> + custom:audio-encoder-webm-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> diff --git a/JNFrame/Logs/AssetImportWorker1-prev.log b/JNFrame/Logs/AssetImportWorker1-prev.log new file mode 100644 index 00000000..c2613b68 --- /dev/null +++ b/JNFrame/Logs/AssetImportWorker1-prev.log @@ -0,0 +1,930 @@ +Using pre-set license +Built from '2022.3/china_unity/release' branch; Version is '2022.3.16f1c1 (2f3f1b3bde89) revision 3096347'; Using compiler version '192829333'; Build Type 'Release' +OS: 'Windows 11 (10.0.22621) 64bit Core' Language: 'zh' Physical Memory: 16088 MB +BatchMode: 1, IsHumanControllingUs: 0, StartBugReporterOnCrash: 0, Is64bit: 1, IsPro: 1 + +COMMAND LINE ARGUMENTS: +C:\APP\UnityEdit\2022.3.16f1c1\Editor\Unity.exe +-adb2 +-batchMode +-noUpm +-name +AssetImportWorker1 +-projectPath +D:/Jisol/JisolGame/JNFrame +-logFile +Logs/AssetImportWorker1.log +-srvPort +50472 +Successfully changed project path to: D:/Jisol/JisolGame/JNFrame +D:/Jisol/JisolGame/JNFrame +[UnityMemory] Configuration Parameters - Can be set up in boot.config + "memorysetup-bucket-allocator-granularity=16" + "memorysetup-bucket-allocator-bucket-count=8" + "memorysetup-bucket-allocator-block-size=33554432" + "memorysetup-bucket-allocator-block-count=8" + "memorysetup-main-allocator-block-size=16777216" + "memorysetup-thread-allocator-block-size=16777216" + "memorysetup-gfx-main-allocator-block-size=16777216" + "memorysetup-gfx-thread-allocator-block-size=16777216" + "memorysetup-cache-allocator-block-size=4194304" + "memorysetup-typetree-allocator-block-size=2097152" + "memorysetup-profiler-bucket-allocator-granularity=16" + "memorysetup-profiler-bucket-allocator-bucket-count=8" + "memorysetup-profiler-bucket-allocator-block-size=33554432" + "memorysetup-profiler-bucket-allocator-block-count=8" + "memorysetup-profiler-allocator-block-size=16777216" + "memorysetup-profiler-editor-allocator-block-size=1048576" + "memorysetup-temp-allocator-size-main=16777216" + "memorysetup-job-temp-allocator-block-size=2097152" + "memorysetup-job-temp-allocator-block-size-background=1048576" + "memorysetup-job-temp-allocator-reduction-small-platforms=262144" + "memorysetup-allocator-temp-initial-block-size-main=262144" + "memorysetup-allocator-temp-initial-block-size-worker=262144" + "memorysetup-temp-allocator-size-background-worker=32768" + "memorysetup-temp-allocator-size-job-worker=262144" + "memorysetup-temp-allocator-size-preload-manager=33554432" + "memorysetup-temp-allocator-size-nav-mesh-worker=65536" + "memorysetup-temp-allocator-size-audio-worker=65536" + "memorysetup-temp-allocator-size-cloud-worker=32768" + "memorysetup-temp-allocator-size-gi-baking-worker=262144" + "memorysetup-temp-allocator-size-gfx=262144" +Player connection [20592] Host "[IP] 192.168.1.23 [Port] 0 [Flags] 2 [Guid] 3753277312 [EditorId] 3753277312 [Version] 1048832 [Id] WindowsEditor(7,DESKTOP-5RP3AKU) [Debug] 1 [PackageName] WindowsEditor [ProjectName] Editor" joined multi-casting on [225.0.0.222:54997]... + +Player connection [20592] Host "[IP] 192.168.1.23 [Port] 0 [Flags] 2 [Guid] 3753277312 [EditorId] 3753277312 [Version] 1048832 [Id] WindowsEditor(7,DESKTOP-5RP3AKU) [Debug] 1 [PackageName] WindowsEditor [ProjectName] Editor" joined alternative multi-casting on [225.0.0.222:34997]... + +[Physics::Module] Initialized MultithreadedJobDispatcher with 19 workers. +Refreshing native plugins compatible for Editor in 20.34 ms, found 3 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Initialize engine version: 2022.3.16f1c1 (2f3f1b3bde89) +[Subsystems] Discovering subsystems at path C:/APP/UnityEdit/2022.3.16f1c1/Editor/Data/Resources/UnitySubsystems +[Subsystems] Discovering subsystems at path D:/Jisol/JisolGame/JNFrame/Assets +GfxDevice: creating device client; threaded=0; jobified=0 +Direct3D: + Version: Direct3D 11.0 [level 11.1] + Renderer: NVIDIA GeForce RTX 3060 Laptop GPU (ID=0x2520) + Vendor: NVIDIA + VRAM: 6023 MB + Driver: 30.0.15.1181 +Initialize mono +Mono path[0] = 'C:/APP/UnityEdit/2022.3.16f1c1/Editor/Data/Managed' +Mono path[1] = 'C:/APP/UnityEdit/2022.3.16f1c1/Editor/Data/MonoBleedingEdge/lib/mono/unityjit-win32' +Mono config path = 'C:/APP/UnityEdit/2022.3.16f1c1/Editor/Data/MonoBleedingEdge/etc' +Using monoOptions --debugger-agent=transport=dt_socket,embedding=1,server=y,suspend=n,address=127.0.0.1:56384 +Begin MonoManager ReloadAssembly +Registering precompiled unity dll's ... +Register platform support module: C:/APP/UnityEdit/2022.3.16f1c1/Editor/Data/PlaybackEngines/AndroidPlayer/UnityEditor.Android.Extensions.dll +Register platform support module: C:/APP/UnityEdit/2022.3.16f1c1/Editor/Data/PlaybackEngines/WindowsStandaloneSupport/UnityEditor.WindowsStandalone.Extensions.dll +Registered in 0.012915 seconds. +- Loaded All Assemblies, in 0.348 seconds +Native extension for WindowsStandalone target not found +Native extension for Android target not found +Android Extension - Scanning For ADB Devices 356 ms +Mono: successfully reloaded assembly +- Finished resetting the current domain, in 0.623 seconds +Domain Reload Profiling: 963ms + BeginReloadAssembly (118ms) + ExecutionOrderSort (0ms) + DisableScriptedObjects (0ms) + BackupInstance (0ms) + ReleaseScriptingObjects (0ms) + CreateAndSetChildDomain (0ms) + RebuildCommonClasses (27ms) + RebuildNativeTypeToScriptingClass (8ms) + initialDomainReloadingComplete (69ms) + LoadAllAssembliesAndSetupDomain (117ms) + LoadAssemblies (113ms) + RebuildTransferFunctionScriptingTraits (0ms) + AnalyzeDomain (114ms) + TypeCache.Refresh (113ms) + TypeCache.ScanAssembly (102ms) + ScanForSourceGeneratedMonoScriptInfo (0ms) + ResolveRequiredComponents (0ms) + FinalizeReload (624ms) + ReleaseScriptCaches (0ms) + RebuildScriptCaches (0ms) + SetupLoadedEditorAssemblies (580ms) + LogAssemblyErrors (0ms) + InitializePlatformSupportModulesInManaged (451ms) + SetLoadedEditorAssemblies (3ms) + RefreshPlugins (0ms) + BeforeProcessingInitializeOnLoad (1ms) + ProcessInitializeOnLoadAttributes (85ms) + ProcessInitializeOnLoadMethodAttributes (40ms) + AfterProcessingInitializeOnLoad (0ms) + EditorAssembliesLoaded (0ms) + ExecutionOrderSort2 (0ms) + AwakeInstancesAfterBackupRestoration (0ms) +======================================================================== +Worker process is ready to serve import requests +Begin MonoManager ReloadAssembly +- Loaded All Assemblies, in 0.692 seconds +Refreshing native plugins compatible for Editor in 8.32 ms, found 3 plugins. +Native extension for WindowsStandalone target not found +Native extension for Android target not found +Package Manager log level set to [2] +[Package Manager] Server::EnsureServerProcessIsRunning -- launch failed, reason: Unity was launched with the -noUpm command-line argument +[Package Manager] UpmClient::Send -- Unable to send message (not connected to UPM process). +[Package Manager] Cannot connect to Unity Package Manager local server +Mono: successfully reloaded assembly +- Finished resetting the current domain, in 0.500 seconds +Domain Reload Profiling: 1182ms + BeginReloadAssembly (147ms) + ExecutionOrderSort (0ms) + DisableScriptedObjects (4ms) + BackupInstance (0ms) + ReleaseScriptingObjects (0ms) + CreateAndSetChildDomain (17ms) + RebuildCommonClasses (26ms) + RebuildNativeTypeToScriptingClass (7ms) + initialDomainReloadingComplete (52ms) + LoadAllAssembliesAndSetupDomain (449ms) + LoadAssemblies (351ms) + RebuildTransferFunctionScriptingTraits (0ms) + AnalyzeDomain (191ms) + TypeCache.Refresh (169ms) + TypeCache.ScanAssembly (151ms) + ScanForSourceGeneratedMonoScriptInfo (16ms) + ResolveRequiredComponents (4ms) + FinalizeReload (501ms) + ReleaseScriptCaches (0ms) + RebuildScriptCaches (0ms) + SetupLoadedEditorAssemblies (382ms) + LogAssemblyErrors (0ms) + InitializePlatformSupportModulesInManaged (25ms) + SetLoadedEditorAssemblies (2ms) + RefreshPlugins (0ms) + BeforeProcessingInitializeOnLoad (59ms) + ProcessInitializeOnLoadAttributes (258ms) + ProcessInitializeOnLoadMethodAttributes (19ms) + AfterProcessingInitializeOnLoad (18ms) + EditorAssembliesLoaded (0ms) + ExecutionOrderSort2 (0ms) + AwakeInstancesAfterBackupRestoration (6ms) +Launched and connected shader compiler UnityShaderCompiler.exe after 0.04 seconds +Refreshing native plugins compatible for Editor in 7.37 ms, found 3 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 4898 Unused Serialized files (Serialized files now loaded: 0) +Unloading 48 unused Assets / (62.1 KB). Loaded Objects now: 5355. +Memory consumption went from 170.2 MB to 170.1 MB. +Total: 2.593300 ms (FindLiveObjects: 0.224900 ms CreateObjectMapping: 0.121400 ms MarkObjects: 2.139300 ms DeleteObjects: 0.107100 ms) + +AssetImportParameters requested are different than current active one (requested -> active): + custom:container-demuxer-ogg: 62fdf1f143b41e24485cea50d1cbac27 -> + custom:video-codec-MediaFoundation-h265: 746d11721c4dcdbdad8f713fa42b33f4 -> + custom:video-decoder-ogg-theora: a1e56fd34408186e4bbccfd4996cb3dc -> + custom:framework-win-MediaFoundation: 216162199b28c13a410421893ffa2e32 -> + custom:CustomObjectIndexerAttribute: 43b350a4d6e6d1791af0b5038c4bea17 -> + custom:container-demuxer-webm: 4f35f7cbe854078d1ac9338744f61a02 -> + custom:container-muxer-webm: aa71ff27fc2769a1b78a27578f13a17b -> + custom:video-decoder-webm-vp8: 9c59270c3fd7afecdb556c50c9e8de78 -> + custom:SearchIndexIgnoredProperties: e643bd26f0fe6173181afceb89e7c659 -> + custom:AudioImporter_EditorPlatform: d09bf68614088b80899f8185d706f6e7 -> + custom:video-encoder-webm-vp8: eb34c28f22e8b96e1ab97ce403110664 -> + custom:audio-decoder-ogg-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> + custom:audio-encoder-webm-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> +======================================================================== +Received Prepare +Begin MonoManager ReloadAssembly +- Loaded All Assemblies, in 0.507 seconds +Refreshing native plugins compatible for Editor in 9.01 ms, found 3 plugins. +Native extension for WindowsStandalone target not found +Native extension for Android target not found +[Package Manager] Server::EnsureServerProcessIsRunning -- launch failed, reason: Unity was launched with the -noUpm command-line argument +[Package Manager] UpmClient::Send -- Unable to send message (not connected to UPM process). +[Package Manager] Cannot connect to Unity Package Manager local server +Mono: successfully reloaded assembly +- Finished resetting the current domain, in 0.876 seconds +Domain Reload Profiling: 1373ms + BeginReloadAssembly (164ms) + ExecutionOrderSort (0ms) + DisableScriptedObjects (3ms) + BackupInstance (0ms) + ReleaseScriptingObjects (0ms) + CreateAndSetChildDomain (30ms) + RebuildCommonClasses (23ms) + RebuildNativeTypeToScriptingClass (8ms) + initialDomainReloadingComplete (42ms) + LoadAllAssembliesAndSetupDomain (260ms) + LoadAssemblies (335ms) + RebuildTransferFunctionScriptingTraits (0ms) + AnalyzeDomain (14ms) + TypeCache.Refresh (7ms) + TypeCache.ScanAssembly (0ms) + ScanForSourceGeneratedMonoScriptInfo (0ms) + ResolveRequiredComponents (6ms) + FinalizeReload (876ms) + ReleaseScriptCaches (0ms) + RebuildScriptCaches (0ms) + SetupLoadedEditorAssemblies (349ms) + LogAssemblyErrors (0ms) + InitializePlatformSupportModulesInManaged (29ms) + SetLoadedEditorAssemblies (2ms) + RefreshPlugins (0ms) + BeforeProcessingInitializeOnLoad (66ms) + ProcessInitializeOnLoadAttributes (208ms) + ProcessInitializeOnLoadMethodAttributes (23ms) + AfterProcessingInitializeOnLoad (22ms) + EditorAssembliesLoaded (0ms) + ExecutionOrderSort2 (0ms) + AwakeInstancesAfterBackupRestoration (9ms) +Refreshing native plugins compatible for Editor in 8.33 ms, found 3 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 4890 Unused Serialized files (Serialized files now loaded: 0) +Unloading 34 unused Assets / (36.2 KB). Loaded Objects now: 5358. +Memory consumption went from 170.2 MB to 170.2 MB. +Total: 2.652300 ms (FindLiveObjects: 0.235500 ms CreateObjectMapping: 0.125300 ms MarkObjects: 2.232900 ms DeleteObjects: 0.057400 ms) + +Prepare: number of updated asset objects reloaded= 0 +AssetImportParameters requested are different than current active one (requested -> active): + custom:container-demuxer-ogg: 62fdf1f143b41e24485cea50d1cbac27 -> + custom:video-codec-MediaFoundation-h265: 746d11721c4dcdbdad8f713fa42b33f4 -> + custom:video-decoder-ogg-theora: a1e56fd34408186e4bbccfd4996cb3dc -> + custom:framework-win-MediaFoundation: 216162199b28c13a410421893ffa2e32 -> + custom:CustomObjectIndexerAttribute: 43b350a4d6e6d1791af0b5038c4bea17 -> + custom:container-demuxer-webm: 4f35f7cbe854078d1ac9338744f61a02 -> + custom:container-muxer-webm: aa71ff27fc2769a1b78a27578f13a17b -> + custom:video-decoder-webm-vp8: 9c59270c3fd7afecdb556c50c9e8de78 -> + custom:SearchIndexIgnoredProperties: e643bd26f0fe6173181afceb89e7c659 -> + custom:AudioImporter_EditorPlatform: d09bf68614088b80899f8185d706f6e7 -> + custom:video-encoder-webm-vp8: eb34c28f22e8b96e1ab97ce403110664 -> + custom:audio-decoder-ogg-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> + custom:audio-encoder-webm-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> +======================================================================== +Received Prepare +Begin MonoManager ReloadAssembly +- Loaded All Assemblies, in 0.507 seconds +Refreshing native plugins compatible for Editor in 9.49 ms, found 3 plugins. +Native extension for WindowsStandalone target not found +Native extension for Android target not found +[Package Manager] Server::EnsureServerProcessIsRunning -- launch failed, reason: Unity was launched with the -noUpm command-line argument +[Package Manager] UpmClient::Send -- Unable to send message (not connected to UPM process). +[Package Manager] Cannot connect to Unity Package Manager local server +Mono: successfully reloaded assembly +- Finished resetting the current domain, in 0.793 seconds +Domain Reload Profiling: 1290ms + BeginReloadAssembly (156ms) + ExecutionOrderSort (0ms) + DisableScriptedObjects (3ms) + BackupInstance (0ms) + ReleaseScriptingObjects (0ms) + CreateAndSetChildDomain (28ms) + RebuildCommonClasses (23ms) + RebuildNativeTypeToScriptingClass (7ms) + initialDomainReloadingComplete (40ms) + LoadAllAssembliesAndSetupDomain (270ms) + LoadAssemblies (347ms) + RebuildTransferFunctionScriptingTraits (0ms) + AnalyzeDomain (13ms) + TypeCache.Refresh (6ms) + TypeCache.ScanAssembly (0ms) + ScanForSourceGeneratedMonoScriptInfo (0ms) + ResolveRequiredComponents (5ms) + FinalizeReload (793ms) + ReleaseScriptCaches (0ms) + RebuildScriptCaches (0ms) + SetupLoadedEditorAssemblies (301ms) + LogAssemblyErrors (0ms) + InitializePlatformSupportModulesInManaged (24ms) + SetLoadedEditorAssemblies (2ms) + RefreshPlugins (0ms) + BeforeProcessingInitializeOnLoad (59ms) + ProcessInitializeOnLoadAttributes (176ms) + ProcessInitializeOnLoadMethodAttributes (20ms) + AfterProcessingInitializeOnLoad (20ms) + EditorAssembliesLoaded (0ms) + ExecutionOrderSort2 (0ms) + AwakeInstancesAfterBackupRestoration (8ms) +Refreshing native plugins compatible for Editor in 7.82 ms, found 3 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 4890 Unused Serialized files (Serialized files now loaded: 0) +Unloading 34 unused Assets / (36.2 KB). Loaded Objects now: 5361. +Memory consumption went from 172.1 MB to 172.1 MB. +Total: 2.127100 ms (FindLiveObjects: 0.221500 ms CreateObjectMapping: 0.123900 ms MarkObjects: 1.733800 ms DeleteObjects: 0.047100 ms) + +Prepare: number of updated asset objects reloaded= 0 +AssetImportParameters requested are different than current active one (requested -> active): + custom:container-demuxer-ogg: 62fdf1f143b41e24485cea50d1cbac27 -> + custom:video-codec-MediaFoundation-h265: 746d11721c4dcdbdad8f713fa42b33f4 -> + custom:video-decoder-ogg-theora: a1e56fd34408186e4bbccfd4996cb3dc -> + custom:framework-win-MediaFoundation: 216162199b28c13a410421893ffa2e32 -> + custom:CustomObjectIndexerAttribute: 43b350a4d6e6d1791af0b5038c4bea17 -> + custom:container-demuxer-webm: 4f35f7cbe854078d1ac9338744f61a02 -> + custom:container-muxer-webm: aa71ff27fc2769a1b78a27578f13a17b -> + custom:video-decoder-webm-vp8: 9c59270c3fd7afecdb556c50c9e8de78 -> + custom:SearchIndexIgnoredProperties: e643bd26f0fe6173181afceb89e7c659 -> + custom:AudioImporter_EditorPlatform: d09bf68614088b80899f8185d706f6e7 -> + custom:video-encoder-webm-vp8: eb34c28f22e8b96e1ab97ce403110664 -> + custom:audio-decoder-ogg-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> + custom:audio-encoder-webm-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> +======================================================================== +Received Prepare +Begin MonoManager ReloadAssembly +- Loaded All Assemblies, in 1.104 seconds +Refreshing native plugins compatible for Editor in 18.35 ms, found 3 plugins. +Native extension for WindowsStandalone target not found +Native extension for Android target not found +[Package Manager] Server::EnsureServerProcessIsRunning -- launch failed, reason: Unity was launched with the -noUpm command-line argument +[Package Manager] UpmClient::Send -- Unable to send message (not connected to UPM process). +[Package Manager] Cannot connect to Unity Package Manager local server +Mono: successfully reloaded assembly +- Finished resetting the current domain, in 2.637 seconds +Domain Reload Profiling: 3719ms + BeginReloadAssembly (324ms) + ExecutionOrderSort (0ms) + DisableScriptedObjects (7ms) + BackupInstance (0ms) + ReleaseScriptingObjects (0ms) + CreateAndSetChildDomain (40ms) + RebuildCommonClasses (44ms) + RebuildNativeTypeToScriptingClass (14ms) + initialDomainReloadingComplete (79ms) + LoadAllAssembliesAndSetupDomain (621ms) + LoadAssemblies (813ms) + RebuildTransferFunctionScriptingTraits (0ms) + AnalyzeDomain (29ms) + TypeCache.Refresh (13ms) + TypeCache.ScanAssembly (2ms) + ScanForSourceGeneratedMonoScriptInfo (6ms) + ResolveRequiredComponents (9ms) + FinalizeReload (2638ms) + ReleaseScriptCaches (0ms) + RebuildScriptCaches (0ms) + SetupLoadedEditorAssemblies (771ms) + LogAssemblyErrors (0ms) + InitializePlatformSupportModulesInManaged (43ms) + SetLoadedEditorAssemblies (4ms) + RefreshPlugins (0ms) + BeforeProcessingInitializeOnLoad (116ms) + ProcessInitializeOnLoadAttributes (472ms) + ProcessInitializeOnLoadMethodAttributes (96ms) + AfterProcessingInitializeOnLoad (40ms) + EditorAssembliesLoaded (0ms) + ExecutionOrderSort2 (0ms) + AwakeInstancesAfterBackupRestoration (14ms) +Refreshing native plugins compatible for Editor in 17.59 ms, found 3 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 4890 Unused Serialized files (Serialized files now loaded: 0) +Unloading 34 unused Assets / (36.2 KB). Loaded Objects now: 5364. +Memory consumption went from 174.1 MB to 174.0 MB. +Total: 3.241800 ms (FindLiveObjects: 0.449100 ms CreateObjectMapping: 0.165800 ms MarkObjects: 2.563200 ms DeleteObjects: 0.062600 ms) + +Prepare: number of updated asset objects reloaded= 0 +AssetImportParameters requested are different than current active one (requested -> active): + custom:container-demuxer-ogg: 62fdf1f143b41e24485cea50d1cbac27 -> + custom:video-codec-MediaFoundation-h265: 746d11721c4dcdbdad8f713fa42b33f4 -> + custom:video-decoder-ogg-theora: a1e56fd34408186e4bbccfd4996cb3dc -> + custom:framework-win-MediaFoundation: 216162199b28c13a410421893ffa2e32 -> + custom:CustomObjectIndexerAttribute: 43b350a4d6e6d1791af0b5038c4bea17 -> + custom:container-demuxer-webm: 4f35f7cbe854078d1ac9338744f61a02 -> + custom:container-muxer-webm: aa71ff27fc2769a1b78a27578f13a17b -> + custom:video-decoder-webm-vp8: 9c59270c3fd7afecdb556c50c9e8de78 -> + custom:SearchIndexIgnoredProperties: e643bd26f0fe6173181afceb89e7c659 -> + custom:AudioImporter_EditorPlatform: d09bf68614088b80899f8185d706f6e7 -> + custom:video-encoder-webm-vp8: eb34c28f22e8b96e1ab97ce403110664 -> + custom:audio-decoder-ogg-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> + custom:audio-encoder-webm-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> +======================================================================== +Received Prepare +Begin MonoManager ReloadAssembly +- Loaded All Assemblies, in 0.931 seconds +Refreshing native plugins compatible for Editor in 15.57 ms, found 3 plugins. +Native extension for WindowsStandalone target not found +Native extension for Android target not found +[Package Manager] Server::EnsureServerProcessIsRunning -- launch failed, reason: Unity was launched with the -noUpm command-line argument +[Package Manager] UpmClient::Send -- Unable to send message (not connected to UPM process). +[Package Manager] Cannot connect to Unity Package Manager local server +Mono: successfully reloaded assembly +- Finished resetting the current domain, in 1.745 seconds +Domain Reload Profiling: 2656ms + BeginReloadAssembly (272ms) + ExecutionOrderSort (0ms) + DisableScriptedObjects (7ms) + BackupInstance (0ms) + ReleaseScriptingObjects (0ms) + CreateAndSetChildDomain (39ms) + RebuildCommonClasses (123ms) + RebuildNativeTypeToScriptingClass (13ms) + initialDomainReloadingComplete (87ms) + LoadAllAssembliesAndSetupDomain (416ms) + LoadAssemblies (562ms) + RebuildTransferFunctionScriptingTraits (0ms) + AnalyzeDomain (27ms) + TypeCache.Refresh (12ms) + TypeCache.ScanAssembly (2ms) + ScanForSourceGeneratedMonoScriptInfo (7ms) + ResolveRequiredComponents (6ms) + FinalizeReload (1745ms) + ReleaseScriptCaches (0ms) + RebuildScriptCaches (0ms) + SetupLoadedEditorAssemblies (411ms) + LogAssemblyErrors (0ms) + InitializePlatformSupportModulesInManaged (56ms) + SetLoadedEditorAssemblies (4ms) + RefreshPlugins (0ms) + BeforeProcessingInitializeOnLoad (95ms) + ProcessInitializeOnLoadAttributes (215ms) + ProcessInitializeOnLoadMethodAttributes (21ms) + AfterProcessingInitializeOnLoad (20ms) + EditorAssembliesLoaded (0ms) + ExecutionOrderSort2 (0ms) + AwakeInstancesAfterBackupRestoration (8ms) +Refreshing native plugins compatible for Editor in 17.07 ms, found 3 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 4890 Unused Serialized files (Serialized files now loaded: 0) +Unloading 34 unused Assets / (36.3 KB). Loaded Objects now: 5367. +Memory consumption went from 176.0 MB to 176.0 MB. +Total: 2.668000 ms (FindLiveObjects: 0.260400 ms CreateObjectMapping: 0.138800 ms MarkObjects: 2.210200 ms DeleteObjects: 0.057200 ms) + +Prepare: number of updated asset objects reloaded= 0 +AssetImportParameters requested are different than current active one (requested -> active): + custom:container-demuxer-ogg: 62fdf1f143b41e24485cea50d1cbac27 -> + custom:video-codec-MediaFoundation-h265: 746d11721c4dcdbdad8f713fa42b33f4 -> + custom:video-decoder-ogg-theora: a1e56fd34408186e4bbccfd4996cb3dc -> + custom:framework-win-MediaFoundation: 216162199b28c13a410421893ffa2e32 -> + custom:CustomObjectIndexerAttribute: 43b350a4d6e6d1791af0b5038c4bea17 -> + custom:container-demuxer-webm: 4f35f7cbe854078d1ac9338744f61a02 -> + custom:container-muxer-webm: aa71ff27fc2769a1b78a27578f13a17b -> + custom:video-decoder-webm-vp8: 9c59270c3fd7afecdb556c50c9e8de78 -> + custom:SearchIndexIgnoredProperties: e643bd26f0fe6173181afceb89e7c659 -> + custom:AudioImporter_EditorPlatform: d09bf68614088b80899f8185d706f6e7 -> + custom:video-encoder-webm-vp8: eb34c28f22e8b96e1ab97ce403110664 -> + custom:audio-decoder-ogg-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> + custom:audio-encoder-webm-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> +======================================================================== +Received Prepare +Begin MonoManager ReloadAssembly +- Loaded All Assemblies, in 0.681 seconds +Refreshing native plugins compatible for Editor in 18.13 ms, found 3 plugins. +Native extension for WindowsStandalone target not found +Native extension for Android target not found +[Package Manager] Server::EnsureServerProcessIsRunning -- launch failed, reason: Unity was launched with the -noUpm command-line argument +[Package Manager] UpmClient::Send -- Unable to send message (not connected to UPM process). +[Package Manager] Cannot connect to Unity Package Manager local server +Mono: successfully reloaded assembly +- Finished resetting the current domain, in 1.435 seconds +Domain Reload Profiling: 2102ms + BeginReloadAssembly (200ms) + ExecutionOrderSort (0ms) + DisableScriptedObjects (10ms) + BackupInstance (0ms) + ReleaseScriptingObjects (0ms) + CreateAndSetChildDomain (42ms) + RebuildCommonClasses (28ms) + RebuildNativeTypeToScriptingClass (13ms) + initialDomainReloadingComplete (57ms) + LoadAllAssembliesAndSetupDomain (370ms) + LoadAssemblies (455ms) + RebuildTransferFunctionScriptingTraits (0ms) + AnalyzeDomain (20ms) + TypeCache.Refresh (9ms) + TypeCache.ScanAssembly (0ms) + ScanForSourceGeneratedMonoScriptInfo (0ms) + ResolveRequiredComponents (10ms) + FinalizeReload (1435ms) + ReleaseScriptCaches (0ms) + RebuildScriptCaches (0ms) + SetupLoadedEditorAssemblies (442ms) + LogAssemblyErrors (0ms) + InitializePlatformSupportModulesInManaged (27ms) + SetLoadedEditorAssemblies (4ms) + RefreshPlugins (0ms) + BeforeProcessingInitializeOnLoad (105ms) + ProcessInitializeOnLoadAttributes (257ms) + ProcessInitializeOnLoadMethodAttributes (25ms) + AfterProcessingInitializeOnLoad (25ms) + EditorAssembliesLoaded (0ms) + ExecutionOrderSort2 (0ms) + AwakeInstancesAfterBackupRestoration (10ms) +Refreshing native plugins compatible for Editor in 11.37 ms, found 3 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 4890 Unused Serialized files (Serialized files now loaded: 0) +Unloading 34 unused Assets / (36.2 KB). Loaded Objects now: 5370. +Memory consumption went from 177.9 MB to 177.9 MB. +Total: 2.720000 ms (FindLiveObjects: 0.345100 ms CreateObjectMapping: 0.130400 ms MarkObjects: 2.182500 ms DeleteObjects: 0.060600 ms) + +Prepare: number of updated asset objects reloaded= 0 +AssetImportParameters requested are different than current active one (requested -> active): + custom:container-demuxer-ogg: 62fdf1f143b41e24485cea50d1cbac27 -> + custom:video-codec-MediaFoundation-h265: 746d11721c4dcdbdad8f713fa42b33f4 -> + custom:video-decoder-ogg-theora: a1e56fd34408186e4bbccfd4996cb3dc -> + custom:framework-win-MediaFoundation: 216162199b28c13a410421893ffa2e32 -> + custom:CustomObjectIndexerAttribute: 43b350a4d6e6d1791af0b5038c4bea17 -> + custom:container-demuxer-webm: 4f35f7cbe854078d1ac9338744f61a02 -> + custom:container-muxer-webm: aa71ff27fc2769a1b78a27578f13a17b -> + custom:video-decoder-webm-vp8: 9c59270c3fd7afecdb556c50c9e8de78 -> + custom:SearchIndexIgnoredProperties: e643bd26f0fe6173181afceb89e7c659 -> + custom:AudioImporter_EditorPlatform: d09bf68614088b80899f8185d706f6e7 -> + custom:video-encoder-webm-vp8: eb34c28f22e8b96e1ab97ce403110664 -> + custom:audio-decoder-ogg-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> + custom:audio-encoder-webm-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> +======================================================================== +Received Prepare +Begin MonoManager ReloadAssembly +- Loaded All Assemblies, in 1.808 seconds +Refreshing native plugins compatible for Editor in 19.80 ms, found 3 plugins. +Native extension for WindowsStandalone target not found +Native extension for Android target not found +[Package Manager] Server::EnsureServerProcessIsRunning -- launch failed, reason: Unity was launched with the -noUpm command-line argument +[Package Manager] UpmClient::Send -- Unable to send message (not connected to UPM process). +[Package Manager] Cannot connect to Unity Package Manager local server +Mono: successfully reloaded assembly +- Finished resetting the current domain, in 1.793 seconds +Domain Reload Profiling: 3593ms + BeginReloadAssembly (663ms) + ExecutionOrderSort (1ms) + DisableScriptedObjects (20ms) + BackupInstance (0ms) + ReleaseScriptingObjects (0ms) + CreateAndSetChildDomain (327ms) + RebuildCommonClasses (34ms) + RebuildNativeTypeToScriptingClass (9ms) + initialDomainReloadingComplete (49ms) + LoadAllAssembliesAndSetupDomain (1044ms) + LoadAssemblies (1143ms) + RebuildTransferFunctionScriptingTraits (0ms) + AnalyzeDomain (105ms) + TypeCache.Refresh (62ms) + TypeCache.ScanAssembly (26ms) + ScanForSourceGeneratedMonoScriptInfo (29ms) + ResolveRequiredComponents (11ms) + FinalizeReload (1794ms) + ReleaseScriptCaches (0ms) + RebuildScriptCaches (0ms) + SetupLoadedEditorAssemblies (537ms) + LogAssemblyErrors (0ms) + InitializePlatformSupportModulesInManaged (59ms) + SetLoadedEditorAssemblies (5ms) + RefreshPlugins (0ms) + BeforeProcessingInitializeOnLoad (117ms) + ProcessInitializeOnLoadAttributes (299ms) + ProcessInitializeOnLoadMethodAttributes (25ms) + AfterProcessingInitializeOnLoad (32ms) + EditorAssembliesLoaded (1ms) + ExecutionOrderSort2 (0ms) + AwakeInstancesAfterBackupRestoration (13ms) +Refreshing native plugins compatible for Editor in 17.39 ms, found 3 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 4890 Unused Serialized files (Serialized files now loaded: 0) +Unloading 34 unused Assets / (36.2 KB). Loaded Objects now: 5373. +Memory consumption went from 179.9 MB to 179.8 MB. +Total: 10.225200 ms (FindLiveObjects: 0.680600 ms CreateObjectMapping: 0.137000 ms MarkObjects: 9.318000 ms DeleteObjects: 0.088100 ms) + +Prepare: number of updated asset objects reloaded= 0 +AssetImportParameters requested are different than current active one (requested -> active): + custom:container-demuxer-ogg: 62fdf1f143b41e24485cea50d1cbac27 -> + custom:video-codec-MediaFoundation-h265: 746d11721c4dcdbdad8f713fa42b33f4 -> + custom:video-decoder-ogg-theora: a1e56fd34408186e4bbccfd4996cb3dc -> + custom:framework-win-MediaFoundation: 216162199b28c13a410421893ffa2e32 -> + custom:CustomObjectIndexerAttribute: 43b350a4d6e6d1791af0b5038c4bea17 -> + custom:container-demuxer-webm: 4f35f7cbe854078d1ac9338744f61a02 -> + custom:container-muxer-webm: aa71ff27fc2769a1b78a27578f13a17b -> + custom:video-decoder-webm-vp8: 9c59270c3fd7afecdb556c50c9e8de78 -> + custom:SearchIndexIgnoredProperties: e643bd26f0fe6173181afceb89e7c659 -> + custom:AudioImporter_EditorPlatform: d09bf68614088b80899f8185d706f6e7 -> + custom:video-encoder-webm-vp8: eb34c28f22e8b96e1ab97ce403110664 -> + custom:audio-decoder-ogg-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> + custom:audio-encoder-webm-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> +======================================================================== +Received Prepare +Begin MonoManager ReloadAssembly +- Loaded All Assemblies, in 0.861 seconds +Refreshing native plugins compatible for Editor in 15.72 ms, found 3 plugins. +Native extension for WindowsStandalone target not found +Native extension for Android target not found +[Package Manager] Server::EnsureServerProcessIsRunning -- launch failed, reason: Unity was launched with the -noUpm command-line argument +[Package Manager] UpmClient::Send -- Unable to send message (not connected to UPM process). +[Package Manager] Cannot connect to Unity Package Manager local server +Mono: successfully reloaded assembly +- Finished resetting the current domain, in 1.608 seconds +Domain Reload Profiling: 2446ms + BeginReloadAssembly (277ms) + ExecutionOrderSort (0ms) + DisableScriptedObjects (6ms) + BackupInstance (0ms) + ReleaseScriptingObjects (0ms) + CreateAndSetChildDomain (41ms) + RebuildCommonClasses (46ms) + RebuildNativeTypeToScriptingClass (17ms) + initialDomainReloadingComplete (83ms) + LoadAllAssembliesAndSetupDomain (415ms) + LoadAssemblies (568ms) + RebuildTransferFunctionScriptingTraits (0ms) + AnalyzeDomain (19ms) + TypeCache.Refresh (8ms) + TypeCache.ScanAssembly (0ms) + ScanForSourceGeneratedMonoScriptInfo (0ms) + ResolveRequiredComponents (8ms) + FinalizeReload (1608ms) + ReleaseScriptCaches (0ms) + RebuildScriptCaches (0ms) + SetupLoadedEditorAssemblies (365ms) + LogAssemblyErrors (0ms) + InitializePlatformSupportModulesInManaged (29ms) + SetLoadedEditorAssemblies (3ms) + RefreshPlugins (0ms) + BeforeProcessingInitializeOnLoad (65ms) + ProcessInitializeOnLoadAttributes (220ms) + ProcessInitializeOnLoadMethodAttributes (27ms) + AfterProcessingInitializeOnLoad (21ms) + EditorAssembliesLoaded (0ms) + ExecutionOrderSort2 (0ms) + AwakeInstancesAfterBackupRestoration (10ms) +Refreshing native plugins compatible for Editor in 9.01 ms, found 3 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 4890 Unused Serialized files (Serialized files now loaded: 0) +Unloading 34 unused Assets / (36.2 KB). Loaded Objects now: 5376. +Memory consumption went from 181.8 MB to 181.7 MB. +Total: 2.359300 ms (FindLiveObjects: 0.251100 ms CreateObjectMapping: 0.128900 ms MarkObjects: 1.924200 ms DeleteObjects: 0.054100 ms) + +Prepare: number of updated asset objects reloaded= 0 +AssetImportParameters requested are different than current active one (requested -> active): + custom:container-demuxer-ogg: 62fdf1f143b41e24485cea50d1cbac27 -> + custom:video-codec-MediaFoundation-h265: 746d11721c4dcdbdad8f713fa42b33f4 -> + custom:video-decoder-ogg-theora: a1e56fd34408186e4bbccfd4996cb3dc -> + custom:framework-win-MediaFoundation: 216162199b28c13a410421893ffa2e32 -> + custom:CustomObjectIndexerAttribute: 43b350a4d6e6d1791af0b5038c4bea17 -> + custom:container-demuxer-webm: 4f35f7cbe854078d1ac9338744f61a02 -> + custom:container-muxer-webm: aa71ff27fc2769a1b78a27578f13a17b -> + custom:video-decoder-webm-vp8: 9c59270c3fd7afecdb556c50c9e8de78 -> + custom:SearchIndexIgnoredProperties: e643bd26f0fe6173181afceb89e7c659 -> + custom:AudioImporter_EditorPlatform: d09bf68614088b80899f8185d706f6e7 -> + custom:video-encoder-webm-vp8: eb34c28f22e8b96e1ab97ce403110664 -> + custom:audio-decoder-ogg-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> + custom:audio-encoder-webm-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> +======================================================================== +Received Prepare +Begin MonoManager ReloadAssembly +- Loaded All Assemblies, in 0.967 seconds +Refreshing native plugins compatible for Editor in 17.55 ms, found 3 plugins. +Native extension for WindowsStandalone target not found +Native extension for Android target not found +[Package Manager] Server::EnsureServerProcessIsRunning -- launch failed, reason: Unity was launched with the -noUpm command-line argument +[Package Manager] UpmClient::Send -- Unable to send message (not connected to UPM process). +[Package Manager] Cannot connect to Unity Package Manager local server +Mono: successfully reloaded assembly +- Finished resetting the current domain, in 1.468 seconds +Domain Reload Profiling: 2413ms + BeginReloadAssembly (361ms) + ExecutionOrderSort (0ms) + DisableScriptedObjects (7ms) + BackupInstance (0ms) + ReleaseScriptingObjects (0ms) + CreateAndSetChildDomain (42ms) + RebuildCommonClasses (38ms) + RebuildNativeTypeToScriptingClass (12ms) + initialDomainReloadingComplete (78ms) + LoadAllAssembliesAndSetupDomain (455ms) + LoadAssemblies (681ms) + RebuildTransferFunctionScriptingTraits (0ms) + AnalyzeDomain (32ms) + TypeCache.Refresh (14ms) + TypeCache.ScanAssembly (2ms) + ScanForSourceGeneratedMonoScriptInfo (8ms) + ResolveRequiredComponents (8ms) + FinalizeReload (1469ms) + ReleaseScriptCaches (0ms) + RebuildScriptCaches (0ms) + SetupLoadedEditorAssemblies (502ms) + LogAssemblyErrors (0ms) + InitializePlatformSupportModulesInManaged (45ms) + SetLoadedEditorAssemblies (4ms) + RefreshPlugins (0ms) + BeforeProcessingInitializeOnLoad (130ms) + ProcessInitializeOnLoadAttributes (272ms) + ProcessInitializeOnLoadMethodAttributes (26ms) + AfterProcessingInitializeOnLoad (25ms) + EditorAssembliesLoaded (0ms) + ExecutionOrderSort2 (0ms) + AwakeInstancesAfterBackupRestoration (11ms) +Refreshing native plugins compatible for Editor in 9.24 ms, found 3 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 4890 Unused Serialized files (Serialized files now loaded: 0) +Unloading 34 unused Assets / (36.2 KB). Loaded Objects now: 5379. +Memory consumption went from 183.7 MB to 183.7 MB. +Total: 3.254000 ms (FindLiveObjects: 0.312900 ms CreateObjectMapping: 0.137400 ms MarkObjects: 2.733200 ms DeleteObjects: 0.068300 ms) + +Prepare: number of updated asset objects reloaded= 0 +AssetImportParameters requested are different than current active one (requested -> active): + custom:container-demuxer-ogg: 62fdf1f143b41e24485cea50d1cbac27 -> + custom:video-codec-MediaFoundation-h265: 746d11721c4dcdbdad8f713fa42b33f4 -> + custom:video-decoder-ogg-theora: a1e56fd34408186e4bbccfd4996cb3dc -> + custom:framework-win-MediaFoundation: 216162199b28c13a410421893ffa2e32 -> + custom:CustomObjectIndexerAttribute: 43b350a4d6e6d1791af0b5038c4bea17 -> + custom:container-demuxer-webm: 4f35f7cbe854078d1ac9338744f61a02 -> + custom:container-muxer-webm: aa71ff27fc2769a1b78a27578f13a17b -> + custom:video-decoder-webm-vp8: 9c59270c3fd7afecdb556c50c9e8de78 -> + custom:SearchIndexIgnoredProperties: e643bd26f0fe6173181afceb89e7c659 -> + custom:AudioImporter_EditorPlatform: d09bf68614088b80899f8185d706f6e7 -> + custom:video-encoder-webm-vp8: eb34c28f22e8b96e1ab97ce403110664 -> + custom:audio-decoder-ogg-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> + custom:audio-encoder-webm-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> +======================================================================== +Received Prepare +Begin MonoManager ReloadAssembly +- Loaded All Assemblies, in 0.715 seconds +Refreshing native plugins compatible for Editor in 7.86 ms, found 3 plugins. +Native extension for WindowsStandalone target not found +Native extension for Android target not found +[Package Manager] Server::EnsureServerProcessIsRunning -- launch failed, reason: Unity was launched with the -noUpm command-line argument +[Package Manager] UpmClient::Send -- Unable to send message (not connected to UPM process). +[Package Manager] Cannot connect to Unity Package Manager local server +Mono: successfully reloaded assembly +- Finished resetting the current domain, in 1.222 seconds +Domain Reload Profiling: 1924ms + BeginReloadAssembly (192ms) + ExecutionOrderSort (0ms) + DisableScriptedObjects (3ms) + BackupInstance (0ms) + ReleaseScriptingObjects (0ms) + CreateAndSetChildDomain (38ms) + RebuildCommonClasses (37ms) + RebuildNativeTypeToScriptingClass (9ms) + initialDomainReloadingComplete (46ms) + LoadAllAssembliesAndSetupDomain (418ms) + LoadAssemblies (446ms) + RebuildTransferFunctionScriptingTraits (0ms) + AnalyzeDomain (81ms) + TypeCache.Refresh (11ms) + TypeCache.ScanAssembly (0ms) + ScanForSourceGeneratedMonoScriptInfo (0ms) + ResolveRequiredComponents (29ms) + FinalizeReload (1222ms) + ReleaseScriptCaches (0ms) + RebuildScriptCaches (0ms) + SetupLoadedEditorAssemblies (427ms) + LogAssemblyErrors (0ms) + InitializePlatformSupportModulesInManaged (36ms) + SetLoadedEditorAssemblies (4ms) + RefreshPlugins (0ms) + BeforeProcessingInitializeOnLoad (71ms) + ProcessInitializeOnLoadAttributes (263ms) + ProcessInitializeOnLoadMethodAttributes (29ms) + AfterProcessingInitializeOnLoad (24ms) + EditorAssembliesLoaded (0ms) + ExecutionOrderSort2 (0ms) + AwakeInstancesAfterBackupRestoration (10ms) +Refreshing native plugins compatible for Editor in 8.81 ms, found 3 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 4890 Unused Serialized files (Serialized files now loaded: 0) +Unloading 34 unused Assets / (36.3 KB). Loaded Objects now: 5382. +Memory consumption went from 185.6 MB to 185.6 MB. +Total: 2.898600 ms (FindLiveObjects: 0.499400 ms CreateObjectMapping: 0.160400 ms MarkObjects: 2.181400 ms DeleteObjects: 0.055900 ms) + +Prepare: number of updated asset objects reloaded= 0 +AssetImportParameters requested are different than current active one (requested -> active): + custom:container-demuxer-ogg: 62fdf1f143b41e24485cea50d1cbac27 -> + custom:video-codec-MediaFoundation-h265: 746d11721c4dcdbdad8f713fa42b33f4 -> + custom:video-decoder-ogg-theora: a1e56fd34408186e4bbccfd4996cb3dc -> + custom:framework-win-MediaFoundation: 216162199b28c13a410421893ffa2e32 -> + custom:CustomObjectIndexerAttribute: 43b350a4d6e6d1791af0b5038c4bea17 -> + custom:container-demuxer-webm: 4f35f7cbe854078d1ac9338744f61a02 -> + custom:container-muxer-webm: aa71ff27fc2769a1b78a27578f13a17b -> + custom:video-decoder-webm-vp8: 9c59270c3fd7afecdb556c50c9e8de78 -> + custom:SearchIndexIgnoredProperties: e643bd26f0fe6173181afceb89e7c659 -> + custom:AudioImporter_EditorPlatform: d09bf68614088b80899f8185d706f6e7 -> + custom:video-encoder-webm-vp8: eb34c28f22e8b96e1ab97ce403110664 -> + custom:audio-decoder-ogg-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> + custom:audio-encoder-webm-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> +======================================================================== +Received Prepare +Begin MonoManager ReloadAssembly +- Loaded All Assemblies, in 1.459 seconds +Refreshing native plugins compatible for Editor in 12.24 ms, found 3 plugins. +Native extension for WindowsStandalone target not found +Native extension for Android target not found +[Package Manager] Server::EnsureServerProcessIsRunning -- launch failed, reason: Unity was launched with the -noUpm command-line argument +[Package Manager] UpmClient::Send -- Unable to send message (not connected to UPM process). +[Package Manager] Cannot connect to Unity Package Manager local server +Mono: successfully reloaded assembly +- Finished resetting the current domain, in 2.609 seconds +Domain Reload Profiling: 4063ms + BeginReloadAssembly (430ms) + ExecutionOrderSort (0ms) + DisableScriptedObjects (13ms) + BackupInstance (0ms) + ReleaseScriptingObjects (0ms) + CreateAndSetChildDomain (207ms) + RebuildCommonClasses (74ms) + RebuildNativeTypeToScriptingClass (11ms) + initialDomainReloadingComplete (121ms) + LoadAllAssembliesAndSetupDomain (817ms) + LoadAssemblies (836ms) + RebuildTransferFunctionScriptingTraits (0ms) + AnalyzeDomain (112ms) + TypeCache.Refresh (70ms) + TypeCache.ScanAssembly (39ms) + ScanForSourceGeneratedMonoScriptInfo (27ms) + ResolveRequiredComponents (13ms) + FinalizeReload (2610ms) + ReleaseScriptCaches (0ms) + RebuildScriptCaches (0ms) + SetupLoadedEditorAssemblies (566ms) + LogAssemblyErrors (0ms) + InitializePlatformSupportModulesInManaged (64ms) + SetLoadedEditorAssemblies (6ms) + RefreshPlugins (0ms) + BeforeProcessingInitializeOnLoad (101ms) + ProcessInitializeOnLoadAttributes (314ms) + ProcessInitializeOnLoadMethodAttributes (50ms) + AfterProcessingInitializeOnLoad (31ms) + EditorAssembliesLoaded (1ms) + ExecutionOrderSort2 (0ms) + AwakeInstancesAfterBackupRestoration (20ms) +Refreshing native plugins compatible for Editor in 20.85 ms, found 3 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 5286 Unused Serialized files (Serialized files now loaded: 0) +Unloading 34 unused Assets / (37.2 KB). Loaded Objects now: 5781. +Memory consumption went from 196.5 MB to 196.4 MB. +Total: 15.553400 ms (FindLiveObjects: 0.435000 ms CreateObjectMapping: 0.166900 ms MarkObjects: 14.753400 ms DeleteObjects: 0.196300 ms) + +Prepare: number of updated asset objects reloaded= 0 +AssetImportParameters requested are different than current active one (requested -> active): + custom:container-demuxer-ogg: 62fdf1f143b41e24485cea50d1cbac27 -> + custom:video-codec-MediaFoundation-h265: 746d11721c4dcdbdad8f713fa42b33f4 -> + custom:video-decoder-ogg-theora: a1e56fd34408186e4bbccfd4996cb3dc -> + custom:framework-win-MediaFoundation: 216162199b28c13a410421893ffa2e32 -> + custom:CustomObjectIndexerAttribute: 43b350a4d6e6d1791af0b5038c4bea17 -> + custom:container-demuxer-webm: 4f35f7cbe854078d1ac9338744f61a02 -> + custom:container-muxer-webm: aa71ff27fc2769a1b78a27578f13a17b -> + custom:video-decoder-webm-vp8: 9c59270c3fd7afecdb556c50c9e8de78 -> + custom:SearchIndexIgnoredProperties: e643bd26f0fe6173181afceb89e7c659 -> + custom:AudioImporter_EditorPlatform: d09bf68614088b80899f8185d706f6e7 -> + custom:video-encoder-webm-vp8: eb34c28f22e8b96e1ab97ce403110664 -> + custom:audio-decoder-ogg-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> + custom:audio-encoder-webm-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> +======================================================================== +Received Prepare +Begin MonoManager ReloadAssembly +- Loaded All Assemblies, in 0.711 seconds +Refreshing native plugins compatible for Editor in 7.45 ms, found 3 plugins. +Native extension for WindowsStandalone target not found +Native extension for Android target not found +[Package Manager] Server::EnsureServerProcessIsRunning -- launch failed, reason: Unity was launched with the -noUpm command-line argument +[Package Manager] UpmClient::Send -- Unable to send message (not connected to UPM process). +[Package Manager] Cannot connect to Unity Package Manager local server +Mono: successfully reloaded assembly +- Finished resetting the current domain, in 1.307 seconds +Domain Reload Profiling: 2007ms + BeginReloadAssembly (187ms) + ExecutionOrderSort (0ms) + DisableScriptedObjects (3ms) + BackupInstance (0ms) + ReleaseScriptingObjects (0ms) + CreateAndSetChildDomain (41ms) + RebuildCommonClasses (29ms) + RebuildNativeTypeToScriptingClass (8ms) + initialDomainReloadingComplete (41ms) + LoadAllAssembliesAndSetupDomain (435ms) + LoadAssemblies (492ms) + RebuildTransferFunctionScriptingTraits (0ms) + AnalyzeDomain (45ms) + TypeCache.Refresh (29ms) + TypeCache.ScanAssembly (17ms) + ScanForSourceGeneratedMonoScriptInfo (10ms) + ResolveRequiredComponents (5ms) + FinalizeReload (1307ms) + ReleaseScriptCaches (0ms) + RebuildScriptCaches (0ms) + SetupLoadedEditorAssemblies (337ms) + LogAssemblyErrors (0ms) + InitializePlatformSupportModulesInManaged (25ms) + SetLoadedEditorAssemblies (6ms) + RefreshPlugins (0ms) + BeforeProcessingInitializeOnLoad (68ms) + ProcessInitializeOnLoadAttributes (202ms) + ProcessInitializeOnLoadMethodAttributes (20ms) + AfterProcessingInitializeOnLoad (16ms) + EditorAssembliesLoaded (0ms) + ExecutionOrderSort2 (0ms) + AwakeInstancesAfterBackupRestoration (7ms) +Refreshing native plugins compatible for Editor in 8.95 ms, found 3 plugins. +Preloading 0 native plugins for Editor in 0.00 ms. +Unloading 5286 Unused Serialized files (Serialized files now loaded: 0) +Unloading 34 unused Assets / (36.4 KB). Loaded Objects now: 5784. +Memory consumption went from 199.0 MB to 199.0 MB. +Total: 2.849300 ms (FindLiveObjects: 0.425500 ms CreateObjectMapping: 0.189100 ms MarkObjects: 2.159500 ms DeleteObjects: 0.073600 ms) + +Prepare: number of updated asset objects reloaded= 0 +AssetImportParameters requested are different than current active one (requested -> active): + custom:container-demuxer-ogg: 62fdf1f143b41e24485cea50d1cbac27 -> + custom:video-codec-MediaFoundation-h265: 746d11721c4dcdbdad8f713fa42b33f4 -> + custom:video-decoder-ogg-theora: a1e56fd34408186e4bbccfd4996cb3dc -> + custom:framework-win-MediaFoundation: 216162199b28c13a410421893ffa2e32 -> + custom:CustomObjectIndexerAttribute: 43b350a4d6e6d1791af0b5038c4bea17 -> + custom:container-demuxer-webm: 4f35f7cbe854078d1ac9338744f61a02 -> + custom:container-muxer-webm: aa71ff27fc2769a1b78a27578f13a17b -> + custom:video-decoder-webm-vp8: 9c59270c3fd7afecdb556c50c9e8de78 -> + custom:SearchIndexIgnoredProperties: e643bd26f0fe6173181afceb89e7c659 -> + custom:AudioImporter_EditorPlatform: d09bf68614088b80899f8185d706f6e7 -> + custom:video-encoder-webm-vp8: eb34c28f22e8b96e1ab97ce403110664 -> + custom:audio-decoder-ogg-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> + custom:audio-encoder-webm-vorbis: bf7c407c2cedff20999df2af8eb42d56 -> +======================================================================== +Received Import Request. + Time since last request: 367758.247889 seconds. + path: Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2 + artifactKey: Guid(dfe12dffa595bc64088bb5739185d66d) Importer(815301076,1909f56bfc062723c751e8b465ee728b) +Start importing Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2 using Guid(dfe12dffa595bc64088bb5739185d66d) Importer(815301076,1909f56bfc062723c751e8b465ee728b) -> (artifact id: 'd99fd7ff5d88b711d7b4deb18d012e26') in 0.042390 seconds +Number of updated asset objects reloaded before import = 0 +Number of asset objects unloaded after import = 0 diff --git a/JNFrame/Logs/Packages-Update.log b/JNFrame/Logs/Packages-Update.log index 8c83e31d..42ae765f 100644 --- a/JNFrame/Logs/Packages-Update.log +++ b/JNFrame/Logs/Packages-Update.log @@ -66,3 +66,11 @@ The following packages were 已添加: The following packages were 已更新: com.unity.ide.rider 从版本 3.0.26 到 3.0.27 com.unity.timeline 从版本 1.6.5 到 1.7.6 + +=== Thu Feb 1 02:50:34 2024 + +Packages were changed. +Update Mode: updateDependencies + +The following packages were 已添加: + com.unity.ai.navigation@1.1.5 diff --git a/JNFrame/Logs/shadercompiler-UnityShaderCompiler.exe0.log b/JNFrame/Logs/shadercompiler-UnityShaderCompiler.exe0.log index c13484a6..9f0a0d82 100644 --- a/JNFrame/Logs/shadercompiler-UnityShaderCompiler.exe0.log +++ b/JNFrame/Logs/shadercompiler-UnityShaderCompiler.exe0.log @@ -1,3 +1,3 @@ -Base path: 'D:/Unity/2021.3.33f1c1/Editor/Data', plugins path 'D:/Unity/2021.3.33f1c1/Editor/Data/PlaybackEngines' +Base path: 'C:/APP/UnityEdit/2022.3.16f1c1/Editor/Data', plugins path 'C:/APP/UnityEdit/2022.3.16f1c1/Editor/Data/PlaybackEngines' Cmd: initializeCompiler diff --git a/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/.signature.p7s b/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/.signature.p7s new file mode 100644 index 0000000000000000000000000000000000000000..a7fbb7345d4637e6451f79984453106e7600fc77 GIT binary patch literal 22354 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

dKP05&Bo2xtTrg9PEq4=FVF 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 literal 0 HcmV?d00001 diff --git a/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/THIRD-PARTY-NOTICES.TXT b/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/THIRD-PARTY-NOTICES.TXT new file mode 100644 index 00000000..db542ca2 --- /dev/null +++ b/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/THIRD-PARTY-NOTICES.TXT @@ -0,0 +1,309 @@ +.NET Core uses third-party libraries or other resources that may be +distributed under licenses different than the .NET Core software. + +In the event that we accidentally failed to list a required notice, please +bring it to our attention. Post an issue or email us: + + dotnet@microsoft.com + +The attached notices are provided for information only. + +License notice for Slicing-by-8 +------------------------------- + +http://sourceforge.net/projects/slicing-by-8/ + +Copyright (c) 2004-2006 Intel Corporation - All Rights Reserved + + +This software program is licensed subject to the BSD License, available at +http://www.opensource.org/licenses/bsd-license.html. + + +License notice for Unicode data +------------------------------- + +http://www.unicode.org/copyright.html#License + +Copyright © 1991-2017 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in http://www.unicode.org/copyright.html. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. + +License notice for Zlib +----------------------- + +https://github.com/madler/zlib +http://zlib.net/zlib_license.html + +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.2.11, January 15th, 2017 + + Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +*/ + +License notice for Mono +------------------------------- + +http://www.mono-project.com/docs/about-mono/ + +Copyright (c) .NET Foundation Contributors + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +License notice for International Organization for Standardization +----------------------------------------------------------------- + +Portions (C) International Organization for Standardization 1986: + Permission to copy in any form is granted for use with + conforming SGML systems and applications as defined in + ISO 8879, provided this notice is included in all copies. + +License notice for Intel +------------------------ + +"Copyright (c) 2004-2006 Intel Corporation - All Rights Reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License notice for Xamarin and Novell +------------------------------------- + +Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Copyright (c) 2011 Novell, Inc (http://www.novell.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Third party notice for W3C +-------------------------- + +"W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE +Status: This license takes effect 13 May, 2015. +This work is being provided by the copyright holders under the following license. +License +By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions. +Permission to copy, modify, and distribute this work, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the work or portions thereof, including modifications: +The full text of this NOTICE in a location viewable to users of the redistributed or derivative work. +Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included. +Notice of any changes or modifications, through a copyright statement on the new code or document such as "This software or document includes material copied from or derived from [title and URI of the W3C document]. Copyright © [YEAR] W3C® (MIT, ERCIM, Keio, Beihang)." +Disclaimers +THIS WORK IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. +COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT. +The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission. Title to copyright in this work will at all times remain with copyright holders." + +License notice for Bit Twiddling Hacks +-------------------------------------- + +Bit Twiddling Hacks + +By Sean Eron Anderson +seander@cs.stanford.edu + +Individually, the code snippets here are in the public domain (unless otherwise +noted) — feel free to use them however you please. The aggregate collection and +descriptions are © 1997-2005 Sean Eron Anderson. The code and descriptions are +distributed in the hope that they will be useful, but WITHOUT ANY WARRANTY and +without even the implied warranty of merchantability or fitness for a particular +purpose. + +License notice for Brotli +-------------------------------------- + +Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +compress_fragment.c: +Copyright (c) 2011, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +""AS IS"" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +decode_fuzzer.c: +Copyright (c) 2015 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +""AS IS"" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." + diff --git a/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.dll b/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.dll new file mode 100644 index 0000000000000000000000000000000000000000..67d56efbbd0dbc4145ca87da5700568680df9674 GIT binary patch literal 23088 zcmeHv2UrwKv*>IfXO<*!36dntE+8P1b4H>hiA#{Muq@F;P>d)dNkIh^F(ARLfS6Db z1rY;^pdgAU7!Xtt<@F2;at!A`|GoeD&VBd2S+=^Xx;j@^ch}Tn@0AVVAPB;P@6;3o zodF^87@_dbK`Kb*mO94`onX5qeFkH9OWHLoJdPMcqlVG~qKH8O(a}^oF_1!}#YYpv zqlspYF2pEmFhz}vi(QUUw39gm*|Z}_!@yP z0*D~MPPZGx(DoxClnTCp{>>Q!`en2Zf_Txt?;!(4c)^nj%C$uzM&QegL>P}a1i=O% z?hiqnGqisvB+fP+&BY3Et2z1A=#(Tn!0++_0MgLDf_Be+h@f^gS{yA1AtG%vVuS)9 zobwog6g3(pk_s5nw)%raq%2YJo%0w$kjWerjn*LJ3Ld0wScnNaAqzn_xgdxQrG5ua z#Oa~^PWg4r(Wtog$c5CN4$sUt_F}!5$BAy<&)#u22KJweI4sq3XQI>8)9BUYCaadp zs^jOIA|++}mi0~?B`KVFphhSiZ#&oV(#u-AO5)6(1goKm3z>~#>s>cDjInZUXYo%I zyf+q=`lS5C*N0QL6waDN7Gl3Bkq*c#d$5D;-MJ^V)_3j@2rvd>VKfaJi-909WeB0M z&(OZ{V;JN=p<`#n4#MKn&_W0>76KB9K3E(mWSR`h_&psABZD8Uk&y#J^ZY&yky}Q- zr_*hp>CZRunf~BrMHP#~e-lih(!;HDjh*%M2-lmBR}he#j}r~qTf%3yUtTo$@bL|F5o#aI`B z_cJgXfMKD@S_&(iDq&z-u{jVAbb^89VG96ueHJSLo5EuTb_k>iLZh=-2_yn>%1pPc9(xE9gNU8!#Ju05U`K0AvTUi9jV3l2E7%AP;1W#;sAf1cjae z3PRxkGDFD#NSzX4(Ke#2rbPYg+WjRqynX)@e&kXK;csqLKvi8A_|RA=#Row6qcay z0t%m^5W=GTC^SN$KMGS(Sc1X}D13@S2#4~c&bOrmvk2$dFvRu~ZZTQ1jddL-rN%x09hAX<0~Qrpjo_7r+R zZ~#5v=M+rbMB+$9&Io+CRrxOi~Wzd`))BS}^?Oc!ni3|^jo|EVpxEu@u zWF6;B2?%zKj+|TI?5NJx?iLpiI=6Q-9IgShPzpWnUrnEyTXbAN2t_S8GV%vjXgURQ zphh!>HXv~BIL^!&LoOIR;LHRe?S@>TIBGmCh=O8n(E*X+q0y9J$b%LRWFnXnM-Pui zCk{#oh>WL9)4#JJqYPxgi5ebFr_dmm@Dz$;2oSZHWN^+3ihu%>=@e5csQNqYduHqC zaQZY`96f+WHx3S_QR3pDS@L&I<2Z;4s&S@-K&}=vY82$^3h>}yh!RPOqD0djLqg&x zbcA98Dr8_t-HfP9d?1|`048fDGKXzWlnMkUJQ@Ox0aF4Q(S zqyPe&b#xd7na5y=g%^X7gm^I1AukgvF9wU@0VFiS%OnZ0O;dOoF%a@#Kq6oQQ9LgO zVr7MJ0OP^1ArW3CUM4mclrkOiGBL3+qqT@5+0gu;OeBI7fM`TEUMxTn3OlH5I)N2w z08%RJcbW(i6`4*)q72s55^%0wFQqS(zkT^W*vF1@$HgN%6@3F$4pUSlChqIgeW|L?->+U)&2uGR zUtW9@zbQq87*@E5Chhwc~TGsRbZ}RG-_fTh7&Xu zx!Zsb1TDZo@_$ue#4wPcnu9r513)knskDe0%?0Wd#6TPjWsfKTyekbXS4a~Bsb4xo zv=0xWQRAo~bfPJh7DJ_>OInRc1R_I3MLUiN)*jd@D8XtFI0it1zsvzaQW!{dHtA9o z5orx^wmD#TW$d>H8TJ=sG|nS&A`<)gnX%JAkRNE7S!ASr09b)haY0lXWm?-Id8Xz= zM5CWG|78jWz0-+6Q0gDEOrIOTB>Y52_z>ICQX>f3KXai4_Go(|8YmZ0`yrraB3cU#)Ivpj z|Gn1|e$oGA0{?mO}1aW~r%+%|S_Bn1&eVU-(3&EERpf0#8>Vh~7 zFyu)9w@eH=v&fjzz~}^kx%@r?|H-zhLBXJG#BzcNxf-a~4%8Wn)`-kp447L)QbM6H zFkTRJ2#ob#AAdE#ZH$&roKs31pwiHpn3e=^jsP`7&}y{bjtovjI+1?Qj3I&{Qum*g zx4Hdy1$PDvu+bor6%3>}2=w^-sQ*gtsz6WF0FOCXbwtooWaS}kOhn}{0<_f&Q}k1r zKT5;zWPu170sB%s82w1l5)&{Ji$E>NdpP%&~*fkO(-ui<8&YaaR5^XpHR>e zIw&U|)UF12k#(&O+Cv4@Xpn~vFocTK5dtLv4AC+a@KHx)8)-8M#St0_@B{*WEf8t| zJOuPd1GEe2mlkLjq79IKASuBBNBEFbZSd6sBMU(~U^m48`HDmP5(P?&1Y<-5MBEWpi0AVGtdj!OVf%_Vr8cpJbxe+1@fyJ2; z97T-|CP~8L2!);S>k}JE8kR!RaRiasV;j*G7zk8d=mAkNL?=^YSW=jaqyy`aHOMd- z*3|I=s4j^#i^6F){+5=_hh>qLaS+76x6C*STv&nvh>kIo=`(5^NgkG)W|IJSt4K;5 z(bdI;Xzt>$$W+4wR)sAV8mnrOz{4mGH@CPs9c3Ji;dG45+=0h1LAZ1b50DcKJ2oAI zf$kGn8aflOdmo?X=FD5l9j~?SZF_~Z(7dAXrNd7Jgo&gs`Jz~GJUn~-C>tutPn1& z9Le9#;`%W%KM&&<%6C^L>tTMDaB*CouLQGL0E=6#sNE``7U|n}J4-MKV5l~A!yj`zcM)AY}=y!h<#MOZaVbFz_q9=tZ}`p9;#xnb)ou1RyPOw*C8 znN~Fx&T2b!_4hY&ZVu91a`#yK%ZIxfWR_N@<3$s(jf1|4MJ)#wSIs;Bb@$PWQM|Qh z5`BBSut3l;`_eINU__W;2{7~$+;}0pfXyPc5A=MVNBq*8U#?BoJkq*lNC_1!30b@d zER-rBtNHn%vqcR1u+f)a$XT%pxkSKv>lP3%rz>6)aXJCKe0^ZwK4JRx>z^ z&0Nf=ATcrVR~1lbe^N3XCLrydkLQHhXNttJ&J`E1PJy_97cF1(Zdpl{?s{4$NtVAK zVySt!W_{k{tzk`raV^J-Kdv(nd)eP&x8#_0@ukUF*+**6MDBcTO2pVa?Je=zT)edJ zjm}uxg!hF*wK+F(_nB0kQd*|rSn5)Ubult`VZT0Zv~^v0=n50PH{YIzdaijMkQKV6 zSy1XEuNASuXB#e2a@_k+%~rjE?i$k!o1CnijV+ojl)=trSQYr3Iun;#6fHfAZd%rK ztKlB&LVLM{$ox-{U0s(a5`=x%QmJ}XK)ZDT?RI&NcB}0k zKIb|}IpYWRYzR~P!>GZ@e~S*0g{2YYfFpdrl!6;>Fooy>%veBY&e3n$Br+KWdO{b~ zZ?HCbAp?c!e@oLCiW&DC#r!W7QIYd`N0k#2E-m`LvXZAV_U*m!+~%pr@k^go?{C`f zcay)Bvm1NbB55?DsAr&sD822j0r&h|+M=YO5Vezjy^UjOma!UeFA zr`|q=4ZWx^OSwllKYB@S73WutTQ6k&cHO$G6otJ<_FAscR@02x zoLl{zb90K+Dj7mX=7^VV$J!td(Fp6LMXrO}de>cjZkRuRVA=TfmTRRWBVt@K-e=V( zw+wbEUU3sX^>Xwzgn2MIoipLa00tK(IDF`cC24~ zO{K6vn?W4xge+!0yftjO-yAk2DZvVetZ)$KSVO+=GeoC&pc|+}=kOpZNeC7|SeXc1 zWU{Uftg%2-Lt9r1{)4`2;d^=G&IzHVm}YG?4I!bkcDvZ6V0WZSDZC>LG+qhNc$wz^ zmc9d`3j`OaIX_rORfD7oBosz9p4W^z0vgW&20CvB2O7`duW7vBluiF(p`z+7-UbxaS7QinWmhXspeXdZmr7L>I+ zA^{p(QEftJX`0-Ap|8?hBj307>%>-zW7d79%<~G@#U^#^8SKgvGA3!psF>!LVG|Fj z>j&5bdA=`L)$W|*#7VU~MU>yrC7t5)IX!TckQ zd#&V)xgjpaqvbtjsyFYhpUSn)^We1CES6>OzMMs78*R{1Z0fna!SE12p%jiO;e*qe z>VbOOKds)_12p8PU5-dU3>NH%9@E&_a^yGe7*Pqv%oDJqXCo`NmqjmbQhU{k`eTu zRIC5$Bz27D=`#-wZj{*NPb8Y`OmK-b5W7#k+4BBX#J2(=-ltC%(KAF(tCx_6rg|=! zILO|kL0wuN>>F=X5v@nxg;m-x|zvT%R1 zkNM;3qxw%3!wN(z%4u=#?}c;wziQ>uO7184NhX?StkV&?9p}w-F4Q@z{8+g9qj?

nKI8%>E__nz( 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 + + System.Runtime.CompilerServices.Unsafe + + + +

Contains generic, low-level functionality for manipulating pointers. + + + Adds an element offset to the given reference. + The reference to add the offset to. + The offset to add. + The type of reference. + A new reference that reflects the addition of offset to pointer. + + + Adds an element offset to the given reference. + The reference to add the offset to. + The offset to add. + The type of reference. + A new reference that reflects the addition of offset to pointer. + + + Adds a byte offset to the given reference. + The reference to add the offset to. + The offset to add. + The type of reference. + A new reference that reflects the addition of byte offset to pointer. + + + Determines whether the specified references point to the same location. + The first reference to compare. + The second reference to compare. + The type of reference. + true if left and right point to the same location; otherwise, false. + + + Casts the given object to the specified type. + The object to cast. + The type which the object will be cast to. + The original object, casted to the given type. + + + Reinterprets the given reference as a reference to a value of type TTo. + The reference to reinterpret. + The type of reference to reinterpret.. + The desired type of the reference. + A reference to a value of type TTo. + + + Returns a pointer to the given by-ref parameter. + The object whose pointer is obtained. + The type of object. + A pointer to the given value. + + + Reinterprets the given location as a reference to a value of type T. + The location of the value to reference. + The type of the interpreted location. + A reference to a value of type T. + + + Determines the byte offset from origin to target from the given references. + The reference to origin. + The reference to target. + The type of reference. + Byte offset from origin to target i.e. target - origin. + + + Copies a value of type T to the given location. + The location to copy to. + A reference to the value to copy. + The type of value to copy. + + + Copies a value of type T to the given location. + The location to copy to. + A pointer to the value to copy. + The type of value to copy. + + + Copies bytes from the source address to the destination address. + The destination address to copy to. + The source address to copy from. + The number of bytes to copy. + + + Copies bytes from the source address to the destination address. + The destination address to copy to. + The source address to copy from. + The number of bytes to copy. + + + Copies bytes from the source address to the destination address +without assuming architecture dependent alignment of the addresses. + The destination address to copy to. + The source address to copy from. + The number of bytes to copy. + + + Copies bytes from the source address to the destination address +without assuming architecture dependent alignment of the addresses. + The destination address to copy to. + The source address to copy from. + The number of bytes to copy. + + + Initializes a block of memory at the given location with a given initial value. + The address of the start of the memory block to initialize. + The value to initialize the block to. + The number of bytes to initialize. + + + Initializes a block of memory at the given location with a given initial value. + The address of the start of the memory block to initialize. + The value to initialize the block to. + The number of bytes to initialize. + + + Initializes a block of memory at the given location with a given initial value +without assuming architecture dependent alignment of the address. + The address of the start of the memory block to initialize. + The value to initialize the block to. + The number of bytes to initialize. + + + Initializes a block of memory at the given location with a given initial value +without assuming architecture dependent alignment of the address. + The address of the start of the memory block to initialize. + The value to initialize the block to. + The number of bytes to initialize. + + + Reads a value of type T from the given location. + The location to read from. + The type to read. + An object of type T read from the given location. + + + Reads a value of type T from the given location +without assuming architecture dependent alignment of the addresses. + The location to read from. + The type to read. + An object of type T read from the given location. + + + Reads a value of type T from the given location +without assuming architecture dependent alignment of the addresses. + The location to read from. + The type to read. + An object of type T read from the given location. + + + Returns the size of an object of the given type parameter. + The type of object whose size is retrieved. + The size of an object of type T. + + + Subtracts an element offset from the given reference. + The reference to subtract the offset from. + The offset to subtract. + The type of reference. + A new reference that reflects the subraction of offset from pointer. + + + Subtracts an element offset from the given reference. + The reference to subtract the offset from. + The offset to subtract. + The type of reference. + A new reference that reflects the subraction of offset from pointer. + + + Subtracts a byte offset from the given reference. + The reference to subtract the offset from. + + The type of reference. + A new reference that reflects the subraction of byte offset from pointer. + + + Writes a value of type T to the given location. + The location to write to. + The value to write. + The type of value to write. + + + Writes a value of type T to the given location +without assuming architecture dependent alignment of the addresses. + The location to write to. + The value to write. + The type of value to write. + + + Writes a value of type T to the given location +without assuming architecture dependent alignment of the addresses. + The location to write to. + The value to write. + The type of value to write. + + + \ No newline at end of file diff --git a/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netstandard1.0/System.Runtime.CompilerServices.Unsafe.dll b/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netstandard1.0/System.Runtime.CompilerServices.Unsafe.dll new file mode 100644 index 0000000000000000000000000000000000000000..d99e9f9eb78189ae1150123aeb5555214b493989 GIT binary patch literal 23600 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 literal 0 HcmV?d00001 diff --git a/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netstandard1.0/System.Runtime.CompilerServices.Unsafe.xml b/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netstandard1.0/System.Runtime.CompilerServices.Unsafe.xml new file mode 100644 index 00000000..6a7cfcff --- /dev/null +++ b/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netstandard1.0/System.Runtime.CompilerServices.Unsafe.xml @@ -0,0 +1,200 @@ + + + System.Runtime.CompilerServices.Unsafe + + + + Contains generic, low-level functionality for manipulating pointers. + + + Adds an element offset to the given reference. + The reference to add the offset to. + The offset to add. + The type of reference. + A new reference that reflects the addition of offset to pointer. + + + Adds an element offset to the given reference. + The reference to add the offset to. + The offset to add. + The type of reference. + A new reference that reflects the addition of offset to pointer. + + + Adds a byte offset to the given reference. + The reference to add the offset to. + The offset to add. + The type of reference. + A new reference that reflects the addition of byte offset to pointer. + + + Determines whether the specified references point to the same location. + The first reference to compare. + The second reference to compare. + The type of reference. + true if left and right point to the same location; otherwise, false. + + + Casts the given object to the specified type. + The object to cast. + The type which the object will be cast to. + The original object, casted to the given type. + + + Reinterprets the given reference as a reference to a value of type TTo. + The reference to reinterpret. + The type of reference to reinterpret.. + The desired type of the reference. + A reference to a value of type TTo. + + + Returns a pointer to the given by-ref parameter. + The object whose pointer is obtained. + The type of object. + A pointer to the given value. + + + Reinterprets the given location as a reference to a value of type T. + The location of the value to reference. + The type of the interpreted location. + A reference to a value of type T. + + + Determines the byte offset from origin to target from the given references. + The reference to origin. + The reference to target. + The type of reference. + Byte offset from origin to target i.e. target - origin. + + + Copies a value of type T to the given location. + The location to copy to. + A reference to the value to copy. + The type of value to copy. + + + Copies a value of type T to the given location. + The location to copy to. + A pointer to the value to copy. + The type of value to copy. + + + Copies bytes from the source address to the destination address. + The destination address to copy to. + The source address to copy from. + The number of bytes to copy. + + + Copies bytes from the source address to the destination address. + The destination address to copy to. + The source address to copy from. + The number of bytes to copy. + + + Copies bytes from the source address to the destination address +without assuming architecture dependent alignment of the addresses. + The destination address to copy to. + The source address to copy from. + The number of bytes to copy. + + + Copies bytes from the source address to the destination address +without assuming architecture dependent alignment of the addresses. + The destination address to copy to. + The source address to copy from. + The number of bytes to copy. + + + Initializes a block of memory at the given location with a given initial value. + The address of the start of the memory block to initialize. + The value to initialize the block to. + The number of bytes to initialize. + + + Initializes a block of memory at the given location with a given initial value. + The address of the start of the memory block to initialize. + The value to initialize the block to. + The number of bytes to initialize. + + + Initializes a block of memory at the given location with a given initial value +without assuming architecture dependent alignment of the address. + The address of the start of the memory block to initialize. + The value to initialize the block to. + The number of bytes to initialize. + + + Initializes a block of memory at the given location with a given initial value +without assuming architecture dependent alignment of the address. + The address of the start of the memory block to initialize. + The value to initialize the block to. + The number of bytes to initialize. + + + Reads a value of type T from the given location. + The location to read from. + The type to read. + An object of type T read from the given location. + + + Reads a value of type T from the given location +without assuming architecture dependent alignment of the addresses. + The location to read from. + The type to read. + An object of type T read from the given location. + + + Reads a value of type T from the given location +without assuming architecture dependent alignment of the addresses. + The location to read from. + The type to read. + An object of type T read from the given location. + + + Returns the size of an object of the given type parameter. + The type of object whose size is retrieved. + The size of an object of type T. + + + Subtracts an element offset from the given reference. + The reference to subtract the offset from. + The offset to subtract. + The type of reference. + A new reference that reflects the subraction of offset from pointer. + + + Subtracts an element offset from the given reference. + The reference to subtract the offset from. + The offset to subtract. + The type of reference. + A new reference that reflects the subraction of offset from pointer. + + + Subtracts a byte offset from the given reference. + The reference to subtract the offset from. + + The type of reference. + A new reference that reflects the subraction of byte offset from pointer. + + + Writes a value of type T to the given location. + The location to write to. + The value to write. + The type of value to write. + + + Writes a value of type T to the given location +without assuming architecture dependent alignment of the addresses. + The location to write to. + The value to write. + The type of value to write. + + + Writes a value of type T to the given location +without assuming architecture dependent alignment of the addresses. + The location to write to. + The value to write. + The type of value to write. + + + \ No newline at end of file diff --git a/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll b/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll new file mode 100644 index 0000000000000000000000000000000000000000..3156239266db9cceede249731f00c3822e479a1f GIT binary patch literal 23600 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 OyIXQg_#$)@0sTLk9O=pc literal 0 HcmV?d00001 diff --git a/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml b/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml new file mode 100644 index 00000000..6a7cfcff --- /dev/null +++ b/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml @@ -0,0 +1,200 @@ + + + System.Runtime.CompilerServices.Unsafe + + + + Contains generic, low-level functionality for manipulating pointers. + + + Adds an element offset to the given reference. + The reference to add the offset to. + The offset to add. + The type of reference. + A new reference that reflects the addition of offset to pointer. + + + Adds an element offset to the given reference. + The reference to add the offset to. + The offset to add. + The type of reference. + A new reference that reflects the addition of offset to pointer. + + + Adds a byte offset to the given reference. + The reference to add the offset to. + The offset to add. + The type of reference. + A new reference that reflects the addition of byte offset to pointer. + + + Determines whether the specified references point to the same location. + The first reference to compare. + The second reference to compare. + The type of reference. + true if left and right point to the same location; otherwise, false. + + + Casts the given object to the specified type. + The object to cast. + The type which the object will be cast to. + The original object, casted to the given type. + + + Reinterprets the given reference as a reference to a value of type TTo. + The reference to reinterpret. + The type of reference to reinterpret.. + The desired type of the reference. + A reference to a value of type TTo. + + + Returns a pointer to the given by-ref parameter. + The object whose pointer is obtained. + The type of object. + A pointer to the given value. + + + Reinterprets the given location as a reference to a value of type T. + The location of the value to reference. + The type of the interpreted location. + A reference to a value of type T. + + + Determines the byte offset from origin to target from the given references. + The reference to origin. + The reference to target. + The type of reference. + Byte offset from origin to target i.e. target - origin. + + + Copies a value of type T to the given location. + The location to copy to. + A reference to the value to copy. + The type of value to copy. + + + Copies a value of type T to the given location. + The location to copy to. + A pointer to the value to copy. + The type of value to copy. + + + Copies bytes from the source address to the destination address. + The destination address to copy to. + The source address to copy from. + The number of bytes to copy. + + + Copies bytes from the source address to the destination address. + The destination address to copy to. + The source address to copy from. + The number of bytes to copy. + + + Copies bytes from the source address to the destination address +without assuming architecture dependent alignment of the addresses. + The destination address to copy to. + The source address to copy from. + The number of bytes to copy. + + + Copies bytes from the source address to the destination address +without assuming architecture dependent alignment of the addresses. + The destination address to copy to. + The source address to copy from. + The number of bytes to copy. + + + Initializes a block of memory at the given location with a given initial value. + The address of the start of the memory block to initialize. + The value to initialize the block to. + The number of bytes to initialize. + + + Initializes a block of memory at the given location with a given initial value. + The address of the start of the memory block to initialize. + The value to initialize the block to. + The number of bytes to initialize. + + + Initializes a block of memory at the given location with a given initial value +without assuming architecture dependent alignment of the address. + The address of the start of the memory block to initialize. + The value to initialize the block to. + The number of bytes to initialize. + + + Initializes a block of memory at the given location with a given initial value +without assuming architecture dependent alignment of the address. + The address of the start of the memory block to initialize. + The value to initialize the block to. + The number of bytes to initialize. + + + Reads a value of type T from the given location. + The location to read from. + The type to read. + An object of type T read from the given location. + + + Reads a value of type T from the given location +without assuming architecture dependent alignment of the addresses. + The location to read from. + The type to read. + An object of type T read from the given location. + + + Reads a value of type T from the given location +without assuming architecture dependent alignment of the addresses. + The location to read from. + The type to read. + An object of type T read from the given location. + + + Returns the size of an object of the given type parameter. + The type of object whose size is retrieved. + The size of an object of type T. + + + Subtracts an element offset from the given reference. + The reference to subtract the offset from. + The offset to subtract. + The type of reference. + A new reference that reflects the subraction of offset from pointer. + + + Subtracts an element offset from the given reference. + The reference to subtract the offset from. + The offset to subtract. + The type of reference. + A new reference that reflects the subraction of offset from pointer. + + + Subtracts a byte offset from the given reference. + The reference to subtract the offset from. + + The type of reference. + A new reference that reflects the subraction of byte offset from pointer. + + + Writes a value of type T to the given location. + The location to write to. + The value to write. + The type of value to write. + + + Writes a value of type T to the given location +without assuming architecture dependent alignment of the addresses. + The location to write to. + The value to write. + The type of value to write. + + + Writes a value of type T to the given location +without assuming architecture dependent alignment of the addresses. + The location to write to. + The value to write. + The type of value to write. + + + \ No newline at end of file diff --git a/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/ref/netstandard1.0/System.Runtime.CompilerServices.Unsafe.dll b/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/ref/netstandard1.0/System.Runtime.CompilerServices.Unsafe.dll new file mode 100644 index 0000000000000000000000000000000000000000..19ec356e3b867c8ff9ab2b09364ddfce319d44d3 GIT binary patch literal 23304 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 + + System.Runtime.CompilerServices.Unsafe + + + + Contains generic, low-level functionality for manipulating pointers. + + + Adds an element offset to the given reference. + The reference to add the offset to. + The offset to add. + The type of reference. + A new reference that reflects the addition of offset to pointer. + + + Adds an element offset to the given reference. + The reference to add the offset to. + The offset to add. + The type of reference. + A new reference that reflects the addition of offset to pointer. + + + Adds a byte offset to the given reference. + The reference to add the offset to. + The offset to add. + The type of reference. + A new reference that reflects the addition of byte offset to pointer. + + + Determines whether the specified references point to the same location. + The first reference to compare. + The second reference to compare. + The type of reference. + true if left and right point to the same location; otherwise, false. + + + Casts the given object to the specified type. + The object to cast. + The type which the object will be cast to. + The original object, casted to the given type. + + + Reinterprets the given reference as a reference to a value of type TTo. + The reference to reinterpret. + The type of reference to reinterpret.. + The desired type of the reference. + A reference to a value of type TTo. + + + Returns a pointer to the given by-ref parameter. + The object whose pointer is obtained. + The type of object. + A pointer to the given value. + + + Reinterprets the given location as a reference to a value of type T. + The location of the value to reference. + The type of the interpreted location. + A reference to a value of type T. + + + Determines the byte offset from origin to target from the given references. + The reference to origin. + The reference to target. + The type of reference. + Byte offset from origin to target i.e. target - origin. + + + Copies a value of type T to the given location. + The location to copy to. + A reference to the value to copy. + The type of value to copy. + + + Copies a value of type T to the given location. + The location to copy to. + A pointer to the value to copy. + The type of value to copy. + + + Copies bytes from the source address to the destination address. + The destination address to copy to. + The source address to copy from. + The number of bytes to copy. + + + Copies bytes from the source address to the destination address. + The destination address to copy to. + The source address to copy from. + The number of bytes to copy. + + + Copies bytes from the source address to the destination address +without assuming architecture dependent alignment of the addresses. + The destination address to copy to. + The source address to copy from. + The number of bytes to copy. + + + Copies bytes from the source address to the destination address +without assuming architecture dependent alignment of the addresses. + The destination address to copy to. + The source address to copy from. + The number of bytes to copy. + + + Initializes a block of memory at the given location with a given initial value. + The address of the start of the memory block to initialize. + The value to initialize the block to. + The number of bytes to initialize. + + + Initializes a block of memory at the given location with a given initial value. + The address of the start of the memory block to initialize. + The value to initialize the block to. + The number of bytes to initialize. + + + Initializes a block of memory at the given location with a given initial value +without assuming architecture dependent alignment of the address. + The address of the start of the memory block to initialize. + The value to initialize the block to. + The number of bytes to initialize. + + + Initializes a block of memory at the given location with a given initial value +without assuming architecture dependent alignment of the address. + The address of the start of the memory block to initialize. + The value to initialize the block to. + The number of bytes to initialize. + + + Reads a value of type T from the given location. + The location to read from. + The type to read. + An object of type T read from the given location. + + + Reads a value of type T from the given location +without assuming architecture dependent alignment of the addresses. + The location to read from. + The type to read. + An object of type T read from the given location. + + + Reads a value of type T from the given location +without assuming architecture dependent alignment of the addresses. + The location to read from. + The type to read. + An object of type T read from the given location. + + + Returns the size of an object of the given type parameter. + The type of object whose size is retrieved. + The size of an object of type T. + + + Subtracts an element offset from the given reference. + The reference to subtract the offset from. + The offset to subtract. + The type of reference. + A new reference that reflects the subraction of offset from pointer. + + + Subtracts an element offset from the given reference. + The reference to subtract the offset from. + The offset to subtract. + The type of reference. + A new reference that reflects the subraction of offset from pointer. + + + Subtracts a byte offset from the given reference. + The reference to subtract the offset from. + + The type of reference. + A new reference that reflects the subraction of byte offset from pointer. + + + Writes a value of type T to the given location. + The location to write to. + The value to write. + The type of value to write. + + + Writes a value of type T to the given location +without assuming architecture dependent alignment of the addresses. + The location to write to. + The value to write. + The type of value to write. + + + Writes a value of type T to the given location +without assuming architecture dependent alignment of the addresses. + The location to write to. + The value to write. + The type of value to write. + + + \ No newline at end of file diff --git a/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/ref/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll b/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/ref/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll new file mode 100644 index 0000000000000000000000000000000000000000..9d996136792bee837104d1ab842731395ba66ee8 GIT binary patch literal 23816 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 WzKEAQlAE;Y=?%%I!ioP<=>GwdSOVMt literal 0 HcmV?d00001 diff --git a/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/ref/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml b/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/ref/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml new file mode 100644 index 00000000..6a7cfcff --- /dev/null +++ b/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/ref/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml @@ -0,0 +1,200 @@ + + + System.Runtime.CompilerServices.Unsafe + + + + Contains generic, low-level functionality for manipulating pointers. + + + Adds an element offset to the given reference. + The reference to add the offset to. + The offset to add. + The type of reference. + A new reference that reflects the addition of offset to pointer. + + + Adds an element offset to the given reference. + The reference to add the offset to. + The offset to add. + The type of reference. + A new reference that reflects the addition of offset to pointer. + + + Adds a byte offset to the given reference. + The reference to add the offset to. + The offset to add. + The type of reference. + A new reference that reflects the addition of byte offset to pointer. + + + Determines whether the specified references point to the same location. + The first reference to compare. + The second reference to compare. + The type of reference. + true if left and right point to the same location; otherwise, false. + + + Casts the given object to the specified type. + The object to cast. + The type which the object will be cast to. + The original object, casted to the given type. + + + Reinterprets the given reference as a reference to a value of type TTo. + The reference to reinterpret. + The type of reference to reinterpret.. + The desired type of the reference. + A reference to a value of type TTo. + + + Returns a pointer to the given by-ref parameter. + The object whose pointer is obtained. + The type of object. + A pointer to the given value. + + + Reinterprets the given location as a reference to a value of type T. + The location of the value to reference. + The type of the interpreted location. + A reference to a value of type T. + + + Determines the byte offset from origin to target from the given references. + The reference to origin. + The reference to target. + The type of reference. + Byte offset from origin to target i.e. target - origin. + + + Copies a value of type T to the given location. + The location to copy to. + A reference to the value to copy. + The type of value to copy. + + + Copies a value of type T to the given location. + The location to copy to. + A pointer to the value to copy. + The type of value to copy. + + + Copies bytes from the source address to the destination address. + The destination address to copy to. + The source address to copy from. + The number of bytes to copy. + + + Copies bytes from the source address to the destination address. + The destination address to copy to. + The source address to copy from. + The number of bytes to copy. + + + Copies bytes from the source address to the destination address +without assuming architecture dependent alignment of the addresses. + The destination address to copy to. + The source address to copy from. + The number of bytes to copy. + + + Copies bytes from the source address to the destination address +without assuming architecture dependent alignment of the addresses. + The destination address to copy to. + The source address to copy from. + The number of bytes to copy. + + + Initializes a block of memory at the given location with a given initial value. + The address of the start of the memory block to initialize. + The value to initialize the block to. + The number of bytes to initialize. + + + Initializes a block of memory at the given location with a given initial value. + The address of the start of the memory block to initialize. + The value to initialize the block to. + The number of bytes to initialize. + + + Initializes a block of memory at the given location with a given initial value +without assuming architecture dependent alignment of the address. + The address of the start of the memory block to initialize. + The value to initialize the block to. + The number of bytes to initialize. + + + Initializes a block of memory at the given location with a given initial value +without assuming architecture dependent alignment of the address. + The address of the start of the memory block to initialize. + The value to initialize the block to. + The number of bytes to initialize. + + + Reads a value of type T from the given location. + The location to read from. + The type to read. + An object of type T read from the given location. + + + Reads a value of type T from the given location +without assuming architecture dependent alignment of the addresses. + The location to read from. + The type to read. + An object of type T read from the given location. + + + Reads a value of type T from the given location +without assuming architecture dependent alignment of the addresses. + The location to read from. + The type to read. + An object of type T read from the given location. + + + Returns the size of an object of the given type parameter. + The type of object whose size is retrieved. + The size of an object of type T. + + + Subtracts an element offset from the given reference. + The reference to subtract the offset from. + The offset to subtract. + The type of reference. + A new reference that reflects the subraction of offset from pointer. + + + Subtracts an element offset from the given reference. + The reference to subtract the offset from. + The offset to subtract. + The type of reference. + A new reference that reflects the subraction of offset from pointer. + + + Subtracts a byte offset from the given reference. + The reference to subtract the offset from. + + The type of reference. + A new reference that reflects the subraction of byte offset from pointer. + + + Writes a value of type T to the given location. + The location to write to. + The value to write. + The type of value to write. + + + Writes a value of type T to the given location +without assuming architecture dependent alignment of the addresses. + The location to write to. + The value to write. + The type of value to write. + + + Writes a value of type T to the given location +without assuming architecture dependent alignment of the addresses. + The location to write to. + The value to write. + The type of value to write. + + + \ No newline at end of file diff --git a/JNFrame/ProjectSettings/boot.config b/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/useSharedDesignerContext.txt similarity index 100% rename from JNFrame/ProjectSettings/boot.config rename to JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/useSharedDesignerContext.txt diff --git a/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/version.txt b/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/version.txt new file mode 100644 index 00000000..69308609 --- /dev/null +++ b/JNFrame/Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/version.txt @@ -0,0 +1 @@ +02b11eeee1fbc5f3ef43a1452fe07efd25fa1715 diff --git a/JNFrame/Packages/manifest.json b/JNFrame/Packages/manifest.json index e8cbff4d..32ac5099 100644 --- a/JNFrame/Packages/manifest.json +++ b/JNFrame/Packages/manifest.json @@ -1,5 +1,6 @@ { "dependencies": { + "com.unity.ai.navigation": "1.1.5", "com.unity.collab-proxy": "2.2.0", "com.unity.feature.development": "1.0.1", "com.unity.ide.rider": "3.0.27", diff --git a/JNFrame/Packages/packages-lock.json b/JNFrame/Packages/packages-lock.json index 2648d060..2c67f678 100644 --- a/JNFrame/Packages/packages-lock.json +++ b/JNFrame/Packages/packages-lock.json @@ -1,5 +1,14 @@ { "dependencies": { + "com.unity.ai.navigation": { + "version": "1.1.5", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.modules.ai": "1.0.0" + }, + "url": "https://packages.unity.cn" + }, "com.unity.collab-proxy": { "version": "2.2.0", "depth": 0, @@ -27,7 +36,7 @@ "source": "builtin", "dependencies": { "com.unity.ide.visualstudio": "2.0.22", - "com.unity.ide.rider": "3.0.26", + "com.unity.ide.rider": "3.0.27", "com.unity.ide.vscode": "1.2.5", "com.unity.editorcoroutines": "1.0.0", "com.unity.performance.profile-analyzer": "1.2.2", @@ -68,7 +77,7 @@ "url": "https://packages.unity.cn" }, "com.unity.settings-manager": { - "version": "1.0.3", + "version": "2.0.1", "depth": 2, "source": "registry", "dependencies": {}, @@ -267,17 +276,6 @@ "version": "1.0.0", "depth": 0, "source": "builtin", - "dependencies": { - "com.unity.modules.ui": "1.0.0", - "com.unity.modules.imgui": "1.0.0", - "com.unity.modules.jsonserialize": "1.0.0", - "com.unity.modules.uielementsnative": "1.0.0" - } - }, - "com.unity.modules.uielementsnative": { - "version": "1.0.0", - "depth": 1, - "source": "builtin", "dependencies": { "com.unity.modules.ui": "1.0.0", "com.unity.modules.imgui": "1.0.0", diff --git a/JNFrame/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json b/JNFrame/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json index ad11087f..3c7b4c18 100644 --- a/JNFrame/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json +++ b/JNFrame/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json @@ -1,6 +1,4 @@ { - "m_Name": "Settings", - "m_Path": "ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json", "m_Dictionary": { "m_DictionaryValues": [] } diff --git a/JNFrame/ProjectSettings/ProjectSettings.asset b/JNFrame/ProjectSettings/ProjectSettings.asset index f390a1ec..8d2f13b0 100644 --- a/JNFrame/ProjectSettings/ProjectSettings.asset +++ b/JNFrame/ProjectSettings/ProjectSettings.asset @@ -3,7 +3,7 @@ --- !u!129 &1 PlayerSettings: m_ObjectHideFlags: 0 - serializedVersion: 24 + serializedVersion: 26 productGUID: 01a6b5b37d55f4e40bf56260ad6847e0 AndroidProfiler: 0 AndroidFilterTouchesWhenObscured: 0 @@ -49,14 +49,15 @@ PlayerSettings: m_StereoRenderingPath: 0 m_ActiveColorSpace: 1 unsupportedMSAAFallback: 0 + m_SpriteBatchVertexThreshold: 300 m_MTRendering: 1 mipStripping: 0 numberOfMipsStripped: 0 + numberOfMipsStrippedPerMipmapLimitGroup: {} m_StackTraceTypes: 010000000100000001000000010000000100000001000000 iosShowActivityIndicatorOnLoading: -1 androidShowActivityIndicatorOnLoading: -1 iosUseCustomAppBackgroundBehavior: 0 - iosAllowHTTPDownload: 1 allowedAutorotateToPortrait: 1 allowedAutorotateToPortraitUpsideDown: 1 allowedAutorotateToLandscapeRight: 1 @@ -86,11 +87,7 @@ PlayerSettings: hideHomeButton: 0 submitAnalytics: 1 usePlayerLog: 1 - autoStreaming: 0 - useAnimationStreaming: 0 - useFontStreaming: 0 - autoStreamingId: - instantGameAppId: + dedicatedServerOptimizations: 0 bakeCollisionMeshes: 0 forceSingleInstance: 0 useFlipModelSwapchain: 1 @@ -125,8 +122,11 @@ PlayerSettings: switchNVNShaderPoolsGranularity: 33554432 switchNVNDefaultPoolsGranularity: 16777216 switchNVNOtherPoolsGranularity: 16777216 + switchGpuScratchPoolGranularity: 2097152 + switchAllowGpuScratchShrinking: 0 switchNVNMaxPublicTextureIDCount: 0 switchNVNMaxPublicSamplerIDCount: 0 + switchNVNGraphicsFirmwareMemory: 32 switchMaxWorkerMultiple: 8 stadiaPresentMode: 0 stadiaTargetFramerate: 0 @@ -135,12 +135,7 @@ PlayerSettings: vulkanEnablePreTransform: 1 vulkanEnableLateAcquireNextImage: 0 vulkanEnableCommandBufferRecycling: 1 - m_SupportedAspectRatios: - 4:3: 1 - 5:4: 1 - 16:10: 1 - 16:9: 1 - Others: 1 + loadStoreDebugModeEnabled: 0 bundleVersion: 0.1 preloadedAssets: [] metroInputSource: 0 @@ -153,8 +148,9 @@ PlayerSettings: isWsaHolographicRemotingEnabled: 0 enableFrameTimingStats: 0 enableOpenGLProfilerGPURecorders: 1 + allowHDRDisplaySupport: 0 useHDRDisplay: 0 - D3DHDRBitDepth: 0 + hdrBitDepth: 0 m_ColorGamuts: 00000000 targetPixelDensity: 30 resolutionScalingMode: 0 @@ -184,12 +180,15 @@ PlayerSettings: APKExpansionFiles: 0 keepLoadedShadersAlive: 0 StripUnusedMeshComponents: 1 + strictShaderVariantMatching: 0 VertexChannelCompressionMask: 4054 iPhoneSdkVersion: 988 iOSTargetOSVersionString: 12.0 tvOSSdkVersion: 0 tvOSRequireExtendedGameController: 0 tvOSTargetOSVersionString: 12.0 + VisionOSSdkVersion: 0 + VisionOSTargetOSVersionString: 1.0 uIPrerenderedIcon: 0 uIRequiresPersistentWiFi: 0 uIRequiresFullScreen: 1 @@ -237,8 +236,10 @@ PlayerSettings: appleDeveloperTeamID: iOSManualSigningProvisioningProfileID: tvOSManualSigningProvisioningProfileID: + VisionOSManualSigningProvisioningProfileID: iOSManualSigningProvisioningProfileType: 0 tvOSManualSigningProvisioningProfileType: 0 + VisionOSManualSigningProvisioningProfileType: 0 appleEnableAutomaticSigning: 0 iOSRequireARKit: 0 iOSAutomaticallyDetectAndAddCapabilities: 1 @@ -253,6 +254,7 @@ PlayerSettings: useCustomLauncherGradleManifest: 0 useCustomBaseGradleTemplate: 0 useCustomGradlePropertiesTemplate: 0 + useCustomGradleSettingsTemplate: 0 useCustomProguardFile: 0 AndroidTargetArchitectures: 1 AndroidTargetDevices: 0 @@ -260,6 +262,7 @@ PlayerSettings: androidSplashScreen: {fileID: 0} AndroidKeystoreName: '{inproject}: key/user.keystore' AndroidKeyaliasName: 123456 + AndroidEnableArmv9SecurityFeatures: 0 AndroidBuildApkPerCpuArchitecture: 0 AndroidTVCompatibility: 0 AndroidIsGame: 1 @@ -273,7 +276,6 @@ PlayerSettings: banner: {fileID: 0} androidGamepadSupportLevel: 0 chromeosInputEmulation: 1 - AndroidMinifyWithR8: 0 AndroidMinifyRelease: 0 AndroidMinifyDebug: 0 AndroidValidateAppBundleSize: 1 @@ -457,7 +459,9 @@ PlayerSettings: m_EncodingQuality: 1 - m_BuildTarget: tvOS m_EncodingQuality: 1 + m_BuildTargetGroupHDRCubemapEncodingQuality: [] m_BuildTargetGroupLightmapSettings: [] + m_BuildTargetGroupLoadStoreDebugModeSettings: [] m_BuildTargetNormalMapEncoding: - m_BuildTarget: Android m_Encoding: 1 @@ -478,6 +482,7 @@ PlayerSettings: locationUsageDescription: microphoneUsageDescription: bluetoothUsageDescription: + macOSTargetOSVersion: 10.13.0 switchNMETAOverride: switchNetLibKey: switchSocketMemoryPoolSize: 6144 @@ -489,6 +494,7 @@ PlayerSettings: switchLTOSetting: 0 switchApplicationID: 0x01004b9000490000 switchNSODependencies: + switchCompilerFlags: switchTitleNames_0: switchTitleNames_1: switchTitleNames_2: @@ -703,6 +709,7 @@ PlayerSettings: webGLMemorySize: 16 webGLExceptionSupport: 1 webGLNameFilesAsHashes: 0 + webGLShowDiagnostics: 0 webGLDataCaching: 1 webGLDebugSymbols: 0 webGLEmscriptenArgs: @@ -715,6 +722,12 @@ PlayerSettings: webGLLinkerTarget: 1 webGLThreadsSupport: 0 webGLDecompressionFallback: 0 + webGLInitialMemorySize: 32 + webGLMaximumMemorySize: 2048 + webGLMemoryGrowthMode: 2 + webGLMemoryLinearGrowthStep: 16 + webGLMemoryGeometricGrowthStep: 0.2 + webGLMemoryGeometricGrowthCap: 96 webGLPowerPreference: 2 scriptingDefineSymbols: Android: UNITY_PHYSICS_CUSTOM @@ -723,6 +736,7 @@ PlayerSettings: platformArchitecture: {} scriptingBackend: {} il2cppCompilerConfiguration: {} + il2cppCodeGeneration: {} managedStrippingLevel: EmbeddedLinux: 1 GameCoreScarlett: 1 @@ -739,13 +753,11 @@ PlayerSettings: tvOS: 1 incrementalIl2cppBuild: {} suppressCommonWarnings: 1 - allowUnsafeCode: 0 + allowUnsafeCode: 1 useDeterministicCompilation: 1 - enableRoslynAnalyzers: 1 additionalIl2CppArgs: scriptingRuntimeVersion: 1 gcIncremental: 1 - assemblyVersionValidation: 1 gcWBarrierValidation: 0 apiCompatibilityLevelPerPlatform: {} m_RenderingPath: 1 @@ -818,6 +830,11 @@ PlayerSettings: luminVersion: m_VersionCode: 1 m_VersionName: + hmiPlayerDataPath: + hmiForceSRGBBlit: 1 + embeddedLinuxEnableGamepadInput: 1 + hmiLogStartupTiming: 0 + hmiCpuConfiguration: apiCompatibilityLevel: 6 activeInputHandler: 0 windowsGamepadBackendHint: 0 @@ -828,6 +845,7 @@ PlayerSettings: organizationId: cloudEnabled: 0 legacyClampBlendShapeWeights: 0 - playerDataPath: - forceSRGBBlit: 1 + hmiLoadingImage: {fileID: 0} + platformRequiresReadableAssets: 0 virtualTexturingSupportEnabled: 0 + insecureHttpOption: 2 diff --git a/JNFrame/ProjectSettings/ProjectVersion.txt b/JNFrame/ProjectSettings/ProjectVersion.txt index d9c417a3..32a9a2e5 100644 --- a/JNFrame/ProjectSettings/ProjectVersion.txt +++ b/JNFrame/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 2021.3.33f1c1 -m_EditorVersionWithRevision: 2021.3.33f1c1 (682b9db7927c) +m_EditorVersion: 2022.3.16f1c1 +m_EditorVersionWithRevision: 2022.3.16f1c1 (2f3f1b3bde89) diff --git a/JNFrame/UniTask.Addressables.csproj b/JNFrame/UniTask.Addressables.csproj index 86939b48..9ce5a16e 100644 --- a/JNFrame/UniTask.Addressables.csproj +++ b/JNFrame/UniTask.Addressables.csproj @@ -26,7 +26,7 @@ full false Temp\Bin\Debug\UniTask.Addressables\ - UNITY_2021_3_33;UNITY_2021_3;UNITY_2021;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_2021_1_OR_NEWER;UNITY_2021_2_OR_NEWER;UNITY_2021_3_OR_NEWER;UNITY_INCLUDE_TESTS;ENABLE_AR;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_EVENT_QUEUE;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_NATIVE_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;ENABLE_RUNTIME_PERMISSIONS;ENABLE_ENGINE_CODE_STRIPPING;ENABLE_ONSCREEN_KEYBOARD;ENABLE_MANAGED_UNITYTLS;INCLUDE_DYNAMIC_GI;ENABLE_SCRIPTING_GC_WBARRIERS;PLATFORM_SUPPORTS_MONO;ENABLE_VIDEO;ENABLE_ACCELERATOR_CLIENT_DEBUGGING;PLATFORM_ANDROID;TEXTCORE_1_0_OR_NEWER;UNITY_ANDROID;UNITY_ANDROID_API;ENABLE_EGL;ENABLE_NETWORK;ENABLE_RUNTIME_GI;ENABLE_CRUNCH_TEXTURE_COMPRESSION;UNITY_CAN_SHOW_SPLASH_SCREEN;UNITY_HAS_GOOGLEVR;UNITY_HAS_TANGO;ENABLE_SPATIALTRACKING;ENABLE_ETC_COMPRESSION;PLATFORM_EXTENDS_VULKAN_DEVICE;PLATFORM_HAS_MULTIPLE_SWAPCHAINS;UNITY_ANDROID_SUPPORTS_SHADOWFILES;PLATFORM_UPDATES_TIME_OUTSIDE_OF_PLAYER_LOOP;ENABLE_UNITYADS_RUNTIME;UNITY_UNITYADS_API;ENABLE_MONO;NET_STANDARD_2_0;NET_STANDARD;NET_STANDARD_2_1;NETSTANDARD;NETSTANDARD2_1;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_IG;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_LEGACY_INPUT_MANAGER;TEXTCORE_FONT_ENGINE_1_5_OR_NEWER;UNITY_PHYSICS_CUSTOM;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER + UNITY_2022_3_16;UNITY_2022_3;UNITY_2022;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_2021_1_OR_NEWER;UNITY_2021_2_OR_NEWER;UNITY_2021_3_OR_NEWER;UNITY_2022_1_OR_NEWER;UNITY_2022_2_OR_NEWER;UNITY_2022_3_OR_NEWER;PLATFORM_ARCH_64;UNITY_64;UNITY_INCLUDE_TESTS;ENABLE_AR;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_EVENT_QUEUE;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_VIRTUALTEXTURING;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_EDITOR_GAME_SERVICES;ENABLE_UNITY_GAME_SERVICES_ANALYTICS_SUPPORT;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_GENERATE_NATIVE_PLUGINS_FOR_ASSEMBLIES_API;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;ENABLE_MANAGED_UNITYTLS;INCLUDE_DYNAMIC_GI;ENABLE_SCRIPTING_GC_WBARRIERS;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;ENABLE_VIDEO;ENABLE_ACCELERATOR_CLIENT_DEBUGGING;ENABLE_NAVIGATION_PACKAGE_DEBUG_VISUALIZATION;ENABLE_NAVIGATION_HEIGHTMESH_RUNTIME_SUPPORT;ENABLE_NAVIGATION_UI_REQUIRES_PACKAGE;PLATFORM_STANDALONE;TEXTCORE_1_0_OR_NEWER;PLATFORM_STANDALONE_WIN;UNITY_STANDALONE_WIN;UNITY_STANDALONE;UNITY_UGP_API;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_NVIDIA;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_OUT_OF_PROCESS_CRASH_HANDLER;ENABLE_CLUSTER_SYNC;ENABLE_CLUSTERINPUT;PLATFORM_UPDATES_TIME_OUTSIDE_OF_PLAYER_LOOP;GFXDEVICE_WAITFOREVENT_MESSAGEPUMP;PLATFORM_INITIALIZES_MEMORY_MANAGER_EXPLICITLY;ENABLE_MONO;NET_STANDARD_2_0;NET_STANDARD;NET_STANDARD_2_1;NETSTANDARD;NETSTANDARD2_1;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_LEGACY_INPUT_MANAGER;TEXTCORE_FONT_ENGINE_1_5_OR_NEWER;UNITY_PHYSICS_CUSTOM;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER prompt 4 0169,0649 @@ -40,683 +40,696 @@ false false + + + + - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ARModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ARModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AccessibilityModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AccessibilityModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AndroidJNIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AndroidJNIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AnimationModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AnimationModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AssetBundleModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AssetBundleModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AudioModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AudioModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClothModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClothModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClusterInputModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClusterRendererModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ContentLoadModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CoreModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CoreModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CrashReportingModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CrashReportingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DSPGraphModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DSPGraphModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DirectorModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DirectorModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GameCenterModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GameCenterModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GridModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GridModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.HotReloadModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.HotReloadModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.IMGUIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.IMGUIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ImageConversionModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ImageConversionModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputLegacyModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputLegacyModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.JSONSerializeModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.JSONSerializeModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.LocalizationModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.LocalizationModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ParticleSystemModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ParticleSystemModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PerformanceReportingModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PerformanceReportingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PhysicsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PhysicsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.Physics2DModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.Physics2DModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ProfilerModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ProfilerModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PropertiesModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ScreenCaptureModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ScreenCaptureModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SharedInternalsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SharedInternalsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteMaskModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteMaskModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteShapeModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteShapeModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.StreamingModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.StreamingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubstanceModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubstanceModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubsystemsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubsystemsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TLSModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TLSModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainPhysicsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainPhysicsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreFontEngineModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreFontEngineModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreTextEngineModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreTextEngineModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextRenderingModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextRenderingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TilemapModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TilemapModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsModule.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsNativeModule.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIWidgetsModule.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UNETModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UmbraModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UmbraModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsCommonModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsCommonModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityConnectModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityConnectModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityCurlModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityCurlModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityTestProtocolModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityTestProtocolModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAssetBundleModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAssetBundleModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAudioModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAudioModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestTextureModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestTextureModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestWWWModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestWWWModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VFXModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VFXModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VRModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VRModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VehiclesModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VehiclesModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VideoModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VideoModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VirtualTexturingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.WindModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.WindModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.XRModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.XRModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.CoreModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.CoreModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DeviceSimulatorModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DeviceSimulatorModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DiagnosticsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DiagnosticsModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.EditorToolbarModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.GraphViewModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.GraphViewModule.dll - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.PackageManagerUIModule.dll + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.PresetsUIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.QuickSearchModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.QuickSearchModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneTemplateModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneTemplateModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneViewModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreFontEngineModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreFontEngineModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreTextEngineModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreTextEngineModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIBuilderModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIBuilderModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsSamplesModule.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIServiceModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsSamplesModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UnityConnectModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UnityConnectModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEditor.Graphs.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\WebGLSupport\UnityEditor.WebGL.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEditor.Graphs.dll - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\UnityEditor.Android.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\UnityEditor.Android.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\WindowsStandaloneSupport\UnityEditor.WindowsStandalone.Extensions.dll - - - D:\myproject\JisolGame\JNFrame\Assets\Packages\BepuUtilities.2.3.4\lib\netstandard2.0\BepuUtilities.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\Unity.Plastic.Newtonsoft.Json.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\Unity.Plastic.Antlr3.Runtime.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\WindowsStandaloneSupport\UnityEditor.WindowsStandalone.Extensions.dll - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\Dependencies\YamlDotNet\Unity.VisualScripting.YamlDotNet.dll + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\Dependencies\YamlDotNet\Unity.VisualScripting.YamlDotNet.dll - - D:\myproject\JisolGame\JNFrame\Assets\Packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\EditorAssetResources\Unity.VisualScripting.TextureAssets.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\Dependencies\DotNetZip\Unity.VisualScripting.IonicZip.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\unityplastic.dll - - - D:\myproject\JisolGame\JNFrame\Assets\Packages\BepuPhysics.2.3.4\lib\netstandard2.0\BepuPhysics.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\log4netPlastic.dll + + D:\Jisol\JisolGame\JNFrame\Assets\Plugins\JNGame\BepuPhysics\Core\BepuPhysics2\BepuUtilities.2.3.4\lib\netstandard2.0\BepuUtilities.dll - D:\myproject\JisolGame\JNFrame\Assets\Packages\Newtonsoft.Json.13.0.3\lib\netstandard2.0\Newtonsoft.Json.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Runtime\VisualScripting.Flow\Dependencies\NCalc\Unity.VisualScripting.Antlr3.Runtime.dll + D:\Jisol\JisolGame\JNFrame\Assets\Packages\Newtonsoft.Json.13.0.3\lib\netstandard2.0\Newtonsoft.Json.dll - D:\myproject\JisolGame\JNFrame\Assets\Packages\Google.Protobuf.3.19.6\lib\netstandard2.0\Google.Protobuf.dll + D:\Jisol\JisolGame\JNFrame\Assets\Packages\Google.Protobuf.3.19.6\lib\netstandard2.0\Google.Protobuf.dll - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.testtools.codecoverage@1.2.4\lib\ReportGenerator\ReportGeneratorMerged.dll + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.testtools.codecoverage@1.2.4\lib\ReportGenerator\ReportGeneratorMerged.dll + + + D:\Jisol\JisolGame\JNFrame\Assets\Packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\Unity.Plastic.Antlr3.Runtime.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\unityplastic.dll + + + D:\Jisol\JisolGame\JNFrame\Assets\Plugins\JNGame\BepuPhysics\Core\BepuPhysics2\BepuPhysics.2.3.4\lib\netstandard2.0\BepuPhysics.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\Unity.Plastic.Newtonsoft.Json.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\log4netPlastic.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\Dependencies\DotNetZip\Unity.VisualScripting.IonicZip.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Runtime\VisualScripting.Flow\Dependencies\NCalc\Unity.VisualScripting.Antlr3.Runtime.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\EditorAssetResources\Unity.VisualScripting.TextureAssets.dll - D:\myproject\JisolGame\JNFrame\Assets\NuGet\Editor\NugetForUnity.dll + D:\Jisol\JisolGame\JNFrame\Assets\NuGet\Editor\NugetForUnity.dll - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Types.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Types.dll - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Gradle.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Gradle.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.GradleProject.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\ref\2.1.0\netstandard.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\ref\2.1.0\netstandard.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\Microsoft.Win32.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\Microsoft.Win32.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.AppContext.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.AppContext.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Buffers.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Buffers.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Concurrent.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Concurrent.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.NonGeneric.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.NonGeneric.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Specialized.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Specialized.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.EventBasedAsync.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.EventBasedAsync.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.TypeConverter.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.TypeConverter.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Console.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Console.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Data.Common.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Data.Common.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Contracts.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Contracts.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Debug.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Debug.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.FileVersionInfo.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.FileVersionInfo.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Process.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Process.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.StackTrace.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.StackTrace.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TextWriterTraceListener.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TextWriterTraceListener.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tools.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tools.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TraceSource.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TraceSource.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tracing.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tracing.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Drawing.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Drawing.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Dynamic.Runtime.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Dynamic.Runtime.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Calendars.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Calendars.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.ZipFile.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.ZipFile.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.DriveInfo.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.DriveInfo.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Watcher.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Watcher.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.IsolatedStorage.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.IsolatedStorage.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.MemoryMappedFiles.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.MemoryMappedFiles.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Pipes.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Pipes.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.UnmanagedMemoryStream.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.UnmanagedMemoryStream.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Expressions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Expressions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Parallel.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Parallel.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Queryable.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Queryable.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Memory.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Memory.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Http.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Http.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NameResolution.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NameResolution.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NetworkInformation.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NetworkInformation.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Ping.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Ping.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Requests.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Requests.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Security.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Security.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Sockets.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Sockets.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebHeaderCollection.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebHeaderCollection.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.Client.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.Client.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Numerics.Vectors.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Numerics.Vectors.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ObjectModel.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ObjectModel.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.DispatchProxy.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.DispatchProxy.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.ILGeneration.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.ILGeneration.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.Lightweight.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.Lightweight.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Reader.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Reader.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.ResourceManager.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.ResourceManager.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Writer.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Writer.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.CompilerServices.VisualC.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.CompilerServices.VisualC.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Handles.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Handles.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.RuntimeInformation.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.RuntimeInformation.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Numerics.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Numerics.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Formatters.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Formatters.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Json.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Json.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Xml.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Xml.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Claims.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Claims.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Algorithms.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Algorithms.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Csp.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Csp.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Encoding.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Encoding.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.X509Certificates.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.X509Certificates.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Principal.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Principal.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.SecureString.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.SecureString.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.RegularExpressions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.RegularExpressions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Overlapped.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Overlapped.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Parallel.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Parallel.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Thread.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Thread.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.ThreadPool.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.ThreadPool.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Timer.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Timer.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ValueTuple.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ValueTuple.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.ReaderWriter.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.ReaderWriter.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XDocument.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XDocument.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlDocument.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlDocument.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlSerializer.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlSerializer.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.XDocument.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.XDocument.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\Extensions\2.0.0\System.Runtime.InteropServices.WindowsRuntime.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\Extensions\2.0.0\System.Runtime.InteropServices.WindowsRuntime.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\mscorlib.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\mscorlib.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ComponentModel.Composition.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ComponentModel.Composition.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Core.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Core.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Data.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Data.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Drawing.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Drawing.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.IO.Compression.FileSystem.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.IO.Compression.FileSystem.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Net.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Net.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Numerics.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Numerics.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Runtime.Serialization.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Runtime.Serialization.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ServiceModel.Web.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ServiceModel.Web.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Transactions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Transactions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Web.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Web.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Windows.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Windows.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Linq.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Linq.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Serialization.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Serialization.dll - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEditor.UI.dll + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEditor.UI.dll - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEngine.UI.dll + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEngine.UI.dll diff --git a/JNFrame/UniTask.DOTween.csproj b/JNFrame/UniTask.DOTween.csproj index 49ea432b..7294fc7d 100644 --- a/JNFrame/UniTask.DOTween.csproj +++ b/JNFrame/UniTask.DOTween.csproj @@ -26,7 +26,7 @@ full false Temp\Bin\Debug\UniTask.DOTween\ - UNITY_2021_3_33;UNITY_2021_3;UNITY_2021;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_2021_1_OR_NEWER;UNITY_2021_2_OR_NEWER;UNITY_2021_3_OR_NEWER;UNITY_INCLUDE_TESTS;ENABLE_AR;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_EVENT_QUEUE;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_NATIVE_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;ENABLE_RUNTIME_PERMISSIONS;ENABLE_ENGINE_CODE_STRIPPING;ENABLE_ONSCREEN_KEYBOARD;ENABLE_MANAGED_UNITYTLS;INCLUDE_DYNAMIC_GI;ENABLE_SCRIPTING_GC_WBARRIERS;PLATFORM_SUPPORTS_MONO;ENABLE_VIDEO;ENABLE_ACCELERATOR_CLIENT_DEBUGGING;PLATFORM_ANDROID;TEXTCORE_1_0_OR_NEWER;UNITY_ANDROID;UNITY_ANDROID_API;ENABLE_EGL;ENABLE_NETWORK;ENABLE_RUNTIME_GI;ENABLE_CRUNCH_TEXTURE_COMPRESSION;UNITY_CAN_SHOW_SPLASH_SCREEN;UNITY_HAS_GOOGLEVR;UNITY_HAS_TANGO;ENABLE_SPATIALTRACKING;ENABLE_ETC_COMPRESSION;PLATFORM_EXTENDS_VULKAN_DEVICE;PLATFORM_HAS_MULTIPLE_SWAPCHAINS;UNITY_ANDROID_SUPPORTS_SHADOWFILES;PLATFORM_UPDATES_TIME_OUTSIDE_OF_PLAYER_LOOP;ENABLE_UNITYADS_RUNTIME;UNITY_UNITYADS_API;ENABLE_MONO;NET_STANDARD_2_0;NET_STANDARD;NET_STANDARD_2_1;NETSTANDARD;NETSTANDARD2_1;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_IG;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_LEGACY_INPUT_MANAGER;TEXTCORE_FONT_ENGINE_1_5_OR_NEWER;UNITY_PHYSICS_CUSTOM;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER + UNITY_2022_3_16;UNITY_2022_3;UNITY_2022;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_2021_1_OR_NEWER;UNITY_2021_2_OR_NEWER;UNITY_2021_3_OR_NEWER;UNITY_2022_1_OR_NEWER;UNITY_2022_2_OR_NEWER;UNITY_2022_3_OR_NEWER;PLATFORM_ARCH_64;UNITY_64;UNITY_INCLUDE_TESTS;ENABLE_AR;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_EVENT_QUEUE;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_VIRTUALTEXTURING;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_EDITOR_GAME_SERVICES;ENABLE_UNITY_GAME_SERVICES_ANALYTICS_SUPPORT;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_GENERATE_NATIVE_PLUGINS_FOR_ASSEMBLIES_API;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;ENABLE_MANAGED_UNITYTLS;INCLUDE_DYNAMIC_GI;ENABLE_SCRIPTING_GC_WBARRIERS;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;ENABLE_VIDEO;ENABLE_ACCELERATOR_CLIENT_DEBUGGING;ENABLE_NAVIGATION_PACKAGE_DEBUG_VISUALIZATION;ENABLE_NAVIGATION_HEIGHTMESH_RUNTIME_SUPPORT;ENABLE_NAVIGATION_UI_REQUIRES_PACKAGE;PLATFORM_STANDALONE;TEXTCORE_1_0_OR_NEWER;PLATFORM_STANDALONE_WIN;UNITY_STANDALONE_WIN;UNITY_STANDALONE;UNITY_UGP_API;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_NVIDIA;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_OUT_OF_PROCESS_CRASH_HANDLER;ENABLE_CLUSTER_SYNC;ENABLE_CLUSTERINPUT;PLATFORM_UPDATES_TIME_OUTSIDE_OF_PLAYER_LOOP;GFXDEVICE_WAITFOREVENT_MESSAGEPUMP;PLATFORM_INITIALIZES_MEMORY_MANAGER_EXPLICITLY;ENABLE_MONO;NET_STANDARD_2_0;NET_STANDARD;NET_STANDARD_2_1;NETSTANDARD;NETSTANDARD2_1;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_LEGACY_INPUT_MANAGER;TEXTCORE_FONT_ENGINE_1_5_OR_NEWER;UNITY_PHYSICS_CUSTOM;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER prompt 4 0169,0649 @@ -40,683 +40,696 @@ false false + + + + - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ARModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ARModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AccessibilityModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AccessibilityModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AndroidJNIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AndroidJNIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AnimationModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AnimationModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AssetBundleModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AssetBundleModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AudioModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AudioModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClothModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClothModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClusterInputModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClusterRendererModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ContentLoadModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CoreModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CoreModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CrashReportingModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CrashReportingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DSPGraphModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DSPGraphModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DirectorModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DirectorModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GameCenterModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GameCenterModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GridModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GridModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.HotReloadModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.HotReloadModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.IMGUIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.IMGUIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ImageConversionModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ImageConversionModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputLegacyModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputLegacyModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.JSONSerializeModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.JSONSerializeModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.LocalizationModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.LocalizationModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ParticleSystemModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ParticleSystemModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PerformanceReportingModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PerformanceReportingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PhysicsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PhysicsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.Physics2DModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.Physics2DModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ProfilerModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ProfilerModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PropertiesModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ScreenCaptureModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ScreenCaptureModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SharedInternalsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SharedInternalsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteMaskModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteMaskModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteShapeModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteShapeModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.StreamingModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.StreamingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubstanceModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubstanceModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubsystemsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubsystemsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TLSModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TLSModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainPhysicsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainPhysicsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreFontEngineModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreFontEngineModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreTextEngineModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreTextEngineModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextRenderingModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextRenderingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TilemapModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TilemapModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsModule.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsNativeModule.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIWidgetsModule.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UNETModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UmbraModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UmbraModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsCommonModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsCommonModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityConnectModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityConnectModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityCurlModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityCurlModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityTestProtocolModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityTestProtocolModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAssetBundleModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAssetBundleModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAudioModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAudioModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestTextureModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestTextureModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestWWWModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestWWWModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VFXModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VFXModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VRModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VRModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VehiclesModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VehiclesModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VideoModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VideoModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VirtualTexturingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.WindModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.WindModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.XRModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.XRModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.CoreModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.CoreModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DeviceSimulatorModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DeviceSimulatorModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DiagnosticsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DiagnosticsModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.EditorToolbarModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.GraphViewModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.GraphViewModule.dll - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.PackageManagerUIModule.dll + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.PresetsUIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.QuickSearchModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.QuickSearchModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneTemplateModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneTemplateModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneViewModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreFontEngineModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreFontEngineModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreTextEngineModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreTextEngineModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIBuilderModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIBuilderModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsSamplesModule.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIServiceModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsSamplesModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UnityConnectModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UnityConnectModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEditor.Graphs.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\WebGLSupport\UnityEditor.WebGL.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEditor.Graphs.dll - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\UnityEditor.Android.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\UnityEditor.Android.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\WindowsStandaloneSupport\UnityEditor.WindowsStandalone.Extensions.dll - - - D:\myproject\JisolGame\JNFrame\Assets\Packages\BepuUtilities.2.3.4\lib\netstandard2.0\BepuUtilities.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\Unity.Plastic.Newtonsoft.Json.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\Unity.Plastic.Antlr3.Runtime.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\WindowsStandaloneSupport\UnityEditor.WindowsStandalone.Extensions.dll - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\Dependencies\YamlDotNet\Unity.VisualScripting.YamlDotNet.dll + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\Dependencies\YamlDotNet\Unity.VisualScripting.YamlDotNet.dll - - D:\myproject\JisolGame\JNFrame\Assets\Packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\EditorAssetResources\Unity.VisualScripting.TextureAssets.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\Dependencies\DotNetZip\Unity.VisualScripting.IonicZip.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\unityplastic.dll - - - D:\myproject\JisolGame\JNFrame\Assets\Packages\BepuPhysics.2.3.4\lib\netstandard2.0\BepuPhysics.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\log4netPlastic.dll + + D:\Jisol\JisolGame\JNFrame\Assets\Plugins\JNGame\BepuPhysics\Core\BepuPhysics2\BepuUtilities.2.3.4\lib\netstandard2.0\BepuUtilities.dll - D:\myproject\JisolGame\JNFrame\Assets\Packages\Newtonsoft.Json.13.0.3\lib\netstandard2.0\Newtonsoft.Json.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Runtime\VisualScripting.Flow\Dependencies\NCalc\Unity.VisualScripting.Antlr3.Runtime.dll + D:\Jisol\JisolGame\JNFrame\Assets\Packages\Newtonsoft.Json.13.0.3\lib\netstandard2.0\Newtonsoft.Json.dll - D:\myproject\JisolGame\JNFrame\Assets\Packages\Google.Protobuf.3.19.6\lib\netstandard2.0\Google.Protobuf.dll + D:\Jisol\JisolGame\JNFrame\Assets\Packages\Google.Protobuf.3.19.6\lib\netstandard2.0\Google.Protobuf.dll - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.testtools.codecoverage@1.2.4\lib\ReportGenerator\ReportGeneratorMerged.dll + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.testtools.codecoverage@1.2.4\lib\ReportGenerator\ReportGeneratorMerged.dll + + + D:\Jisol\JisolGame\JNFrame\Assets\Packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\Unity.Plastic.Antlr3.Runtime.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\unityplastic.dll + + + D:\Jisol\JisolGame\JNFrame\Assets\Plugins\JNGame\BepuPhysics\Core\BepuPhysics2\BepuPhysics.2.3.4\lib\netstandard2.0\BepuPhysics.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\Unity.Plastic.Newtonsoft.Json.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\log4netPlastic.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\Dependencies\DotNetZip\Unity.VisualScripting.IonicZip.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Runtime\VisualScripting.Flow\Dependencies\NCalc\Unity.VisualScripting.Antlr3.Runtime.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\EditorAssetResources\Unity.VisualScripting.TextureAssets.dll - D:\myproject\JisolGame\JNFrame\Assets\NuGet\Editor\NugetForUnity.dll + D:\Jisol\JisolGame\JNFrame\Assets\NuGet\Editor\NugetForUnity.dll - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Types.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Types.dll - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Gradle.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Gradle.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.GradleProject.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\ref\2.1.0\netstandard.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\ref\2.1.0\netstandard.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\Microsoft.Win32.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\Microsoft.Win32.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.AppContext.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.AppContext.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Buffers.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Buffers.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Concurrent.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Concurrent.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.NonGeneric.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.NonGeneric.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Specialized.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Specialized.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.EventBasedAsync.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.EventBasedAsync.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.TypeConverter.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.TypeConverter.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Console.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Console.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Data.Common.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Data.Common.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Contracts.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Contracts.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Debug.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Debug.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.FileVersionInfo.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.FileVersionInfo.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Process.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Process.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.StackTrace.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.StackTrace.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TextWriterTraceListener.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TextWriterTraceListener.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tools.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tools.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TraceSource.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TraceSource.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tracing.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tracing.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Drawing.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Drawing.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Dynamic.Runtime.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Dynamic.Runtime.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Calendars.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Calendars.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.ZipFile.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.ZipFile.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.DriveInfo.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.DriveInfo.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Watcher.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Watcher.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.IsolatedStorage.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.IsolatedStorage.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.MemoryMappedFiles.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.MemoryMappedFiles.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Pipes.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Pipes.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.UnmanagedMemoryStream.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.UnmanagedMemoryStream.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Expressions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Expressions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Parallel.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Parallel.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Queryable.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Queryable.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Memory.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Memory.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Http.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Http.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NameResolution.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NameResolution.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NetworkInformation.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NetworkInformation.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Ping.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Ping.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Requests.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Requests.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Security.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Security.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Sockets.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Sockets.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebHeaderCollection.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebHeaderCollection.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.Client.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.Client.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Numerics.Vectors.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Numerics.Vectors.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ObjectModel.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ObjectModel.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.DispatchProxy.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.DispatchProxy.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.ILGeneration.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.ILGeneration.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.Lightweight.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.Lightweight.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Reader.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Reader.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.ResourceManager.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.ResourceManager.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Writer.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Writer.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.CompilerServices.VisualC.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.CompilerServices.VisualC.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Handles.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Handles.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.RuntimeInformation.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.RuntimeInformation.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Numerics.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Numerics.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Formatters.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Formatters.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Json.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Json.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Xml.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Xml.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Claims.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Claims.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Algorithms.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Algorithms.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Csp.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Csp.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Encoding.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Encoding.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.X509Certificates.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.X509Certificates.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Principal.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Principal.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.SecureString.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.SecureString.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.RegularExpressions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.RegularExpressions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Overlapped.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Overlapped.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Parallel.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Parallel.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Thread.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Thread.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.ThreadPool.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.ThreadPool.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Timer.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Timer.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ValueTuple.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ValueTuple.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.ReaderWriter.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.ReaderWriter.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XDocument.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XDocument.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlDocument.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlDocument.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlSerializer.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlSerializer.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.XDocument.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.XDocument.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\Extensions\2.0.0\System.Runtime.InteropServices.WindowsRuntime.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\Extensions\2.0.0\System.Runtime.InteropServices.WindowsRuntime.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\mscorlib.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\mscorlib.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ComponentModel.Composition.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ComponentModel.Composition.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Core.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Core.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Data.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Data.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Drawing.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Drawing.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.IO.Compression.FileSystem.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.IO.Compression.FileSystem.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Net.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Net.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Numerics.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Numerics.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Runtime.Serialization.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Runtime.Serialization.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ServiceModel.Web.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ServiceModel.Web.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Transactions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Transactions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Web.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Web.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Windows.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Windows.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Linq.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Linq.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Serialization.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Serialization.dll - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEditor.UI.dll + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEditor.UI.dll - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEngine.UI.dll + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEngine.UI.dll diff --git a/JNFrame/UniTask.Editor.csproj b/JNFrame/UniTask.Editor.csproj index bd149ece..20468458 100644 --- a/JNFrame/UniTask.Editor.csproj +++ b/JNFrame/UniTask.Editor.csproj @@ -26,7 +26,7 @@ full false Temp\Bin\Debug\UniTask.Editor\ - UNITY_2021_3_33;UNITY_2021_3;UNITY_2021;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_2021_1_OR_NEWER;UNITY_2021_2_OR_NEWER;UNITY_2021_3_OR_NEWER;UNITY_INCLUDE_TESTS;ENABLE_AR;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_EVENT_QUEUE;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_NATIVE_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;ENABLE_RUNTIME_PERMISSIONS;ENABLE_ENGINE_CODE_STRIPPING;ENABLE_ONSCREEN_KEYBOARD;ENABLE_MANAGED_UNITYTLS;INCLUDE_DYNAMIC_GI;ENABLE_SCRIPTING_GC_WBARRIERS;PLATFORM_SUPPORTS_MONO;ENABLE_VIDEO;ENABLE_ACCELERATOR_CLIENT_DEBUGGING;PLATFORM_ANDROID;TEXTCORE_1_0_OR_NEWER;UNITY_ANDROID;UNITY_ANDROID_API;ENABLE_EGL;ENABLE_NETWORK;ENABLE_RUNTIME_GI;ENABLE_CRUNCH_TEXTURE_COMPRESSION;UNITY_CAN_SHOW_SPLASH_SCREEN;UNITY_HAS_GOOGLEVR;UNITY_HAS_TANGO;ENABLE_SPATIALTRACKING;ENABLE_ETC_COMPRESSION;PLATFORM_EXTENDS_VULKAN_DEVICE;PLATFORM_HAS_MULTIPLE_SWAPCHAINS;UNITY_ANDROID_SUPPORTS_SHADOWFILES;PLATFORM_UPDATES_TIME_OUTSIDE_OF_PLAYER_LOOP;ENABLE_UNITYADS_RUNTIME;UNITY_UNITYADS_API;ENABLE_MONO;NET_4_6;NET_UNITY_4_8;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_IG;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_LEGACY_INPUT_MANAGER;TEXTCORE_FONT_ENGINE_1_5_OR_NEWER;UNITY_PHYSICS_CUSTOM;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER + UNITY_2022_3_16;UNITY_2022_3;UNITY_2022;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_2021_1_OR_NEWER;UNITY_2021_2_OR_NEWER;UNITY_2021_3_OR_NEWER;UNITY_2022_1_OR_NEWER;UNITY_2022_2_OR_NEWER;UNITY_2022_3_OR_NEWER;PLATFORM_ARCH_64;UNITY_64;UNITY_INCLUDE_TESTS;ENABLE_AR;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_EVENT_QUEUE;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_VIRTUALTEXTURING;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_EDITOR_GAME_SERVICES;ENABLE_UNITY_GAME_SERVICES_ANALYTICS_SUPPORT;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_GENERATE_NATIVE_PLUGINS_FOR_ASSEMBLIES_API;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;ENABLE_MANAGED_UNITYTLS;INCLUDE_DYNAMIC_GI;ENABLE_SCRIPTING_GC_WBARRIERS;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;ENABLE_VIDEO;ENABLE_ACCELERATOR_CLIENT_DEBUGGING;ENABLE_NAVIGATION_PACKAGE_DEBUG_VISUALIZATION;ENABLE_NAVIGATION_HEIGHTMESH_RUNTIME_SUPPORT;ENABLE_NAVIGATION_UI_REQUIRES_PACKAGE;PLATFORM_STANDALONE;TEXTCORE_1_0_OR_NEWER;PLATFORM_STANDALONE_WIN;UNITY_STANDALONE_WIN;UNITY_STANDALONE;UNITY_UGP_API;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_NVIDIA;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_OUT_OF_PROCESS_CRASH_HANDLER;ENABLE_CLUSTER_SYNC;ENABLE_CLUSTERINPUT;PLATFORM_UPDATES_TIME_OUTSIDE_OF_PLAYER_LOOP;GFXDEVICE_WAITFOREVENT_MESSAGEPUMP;PLATFORM_INITIALIZES_MEMORY_MANAGER_EXPLICITLY;ENABLE_MONO;NET_4_6;NET_UNITY_4_8;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_LEGACY_INPUT_MANAGER;TEXTCORE_FONT_ENGINE_1_5_OR_NEWER;UNITY_PHYSICS_CUSTOM;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER;UNITY_EDITOR_ONLY_COMPILATION prompt 4 0169,0649 @@ -40,718 +40,719 @@ false false + + + + - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ARModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ARModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AccessibilityModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AccessibilityModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AndroidJNIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AndroidJNIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AnimationModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AnimationModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AssetBundleModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AssetBundleModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AudioModule.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AutoStreamingModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AudioModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClothModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClothModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClusterInputModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClusterInputModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClusterRendererModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClusterRendererModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ContentLoadModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CoreModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CoreModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CrashReportingModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CrashReportingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DSPGraphModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DSPGraphModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DirectorModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DirectorModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GameCenterModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GameCenterModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GridModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GridModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.HotReloadModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.HotReloadModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.IMGUIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.IMGUIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ImageConversionModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ImageConversionModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputLegacyModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputLegacyModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.JSONSerializeModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.JSONSerializeModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.LocalizationModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.LocalizationModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.NVIDIAModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.NVIDIAModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ParticleSystemModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ParticleSystemModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PerformanceReportingModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PerformanceReportingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PhysicsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PhysicsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.Physics2DModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.Physics2DModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ProfilerModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ProfilerModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PropertiesModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ScreenCaptureModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ScreenCaptureModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SharedInternalsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SharedInternalsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteMaskModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteMaskModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteShapeModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteShapeModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.StreamingModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.StreamingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubstanceModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubstanceModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubsystemsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubsystemsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TLSModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TLSModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainPhysicsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainPhysicsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreFontEngineModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreFontEngineModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreTextEngineModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreTextEngineModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextRenderingModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextRenderingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TilemapModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TilemapModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsModule.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsNativeModule.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIWidgetsModule.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UNETModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UmbraModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UmbraModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsCommonModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsCommonModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityConnectModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityConnectModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityCurlModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityCurlModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityTestProtocolModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityTestProtocolModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAssetBundleModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAssetBundleModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAudioModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAudioModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestTextureModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestTextureModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestWWWModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestWWWModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VFXModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VFXModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VRModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VRModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VehiclesModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VehiclesModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VideoModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VideoModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VirtualTexturingModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VirtualTexturingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.WindModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.WindModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.XRModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.XRModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.CoreModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.CoreModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DeviceSimulatorModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DeviceSimulatorModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DiagnosticsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DiagnosticsModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.EditorToolbarModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.GraphViewModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.GraphViewModule.dll - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.PackageManagerUIModule.dll + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.PresetsUIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.QuickSearchModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.QuickSearchModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneTemplateModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneTemplateModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneViewModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreFontEngineModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreFontEngineModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreTextEngineModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreTextEngineModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIBuilderModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIBuilderModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsSamplesModule.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIServiceModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsSamplesModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UnityConnectModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UnityConnectModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEditor.Graphs.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\WebGLSupport\UnityEditor.WebGL.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEditor.Graphs.dll - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\UnityEditor.Android.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\UnityEditor.Android.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\WindowsStandaloneSupport\UnityEditor.WindowsStandalone.Extensions.dll - - - D:\myproject\JisolGame\JNFrame\Assets\Packages\BepuUtilities.2.3.4\lib\netstandard2.0\BepuUtilities.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\Unity.Plastic.Newtonsoft.Json.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\Unity.Plastic.Antlr3.Runtime.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\WindowsStandaloneSupport\UnityEditor.WindowsStandalone.Extensions.dll - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\Dependencies\YamlDotNet\Unity.VisualScripting.YamlDotNet.dll + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\Dependencies\YamlDotNet\Unity.VisualScripting.YamlDotNet.dll - - D:\myproject\JisolGame\JNFrame\Assets\Packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\EditorAssetResources\Unity.VisualScripting.TextureAssets.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\Dependencies\DotNetZip\Unity.VisualScripting.IonicZip.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\unityplastic.dll - - - D:\myproject\JisolGame\JNFrame\Assets\Packages\BepuPhysics.2.3.4\lib\netstandard2.0\BepuPhysics.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\log4netPlastic.dll + + D:\Jisol\JisolGame\JNFrame\Assets\Plugins\JNGame\BepuPhysics\Core\BepuPhysics2\BepuUtilities.2.3.4\lib\netstandard2.0\BepuUtilities.dll - D:\myproject\JisolGame\JNFrame\Assets\Packages\Newtonsoft.Json.13.0.3\lib\netstandard2.0\Newtonsoft.Json.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Runtime\VisualScripting.Flow\Dependencies\NCalc\Unity.VisualScripting.Antlr3.Runtime.dll + D:\Jisol\JisolGame\JNFrame\Assets\Packages\Newtonsoft.Json.13.0.3\lib\netstandard2.0\Newtonsoft.Json.dll - D:\myproject\JisolGame\JNFrame\Assets\Packages\Google.Protobuf.3.19.6\lib\netstandard2.0\Google.Protobuf.dll + D:\Jisol\JisolGame\JNFrame\Assets\Packages\Google.Protobuf.3.19.6\lib\netstandard2.0\Google.Protobuf.dll - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.testtools.codecoverage@1.2.4\lib\ReportGenerator\ReportGeneratorMerged.dll + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.testtools.codecoverage@1.2.4\lib\ReportGenerator\ReportGeneratorMerged.dll + + + D:\Jisol\JisolGame\JNFrame\Assets\Packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\Unity.Plastic.Antlr3.Runtime.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\unityplastic.dll + + + D:\Jisol\JisolGame\JNFrame\Assets\Plugins\JNGame\BepuPhysics\Core\BepuPhysics2\BepuPhysics.2.3.4\lib\netstandard2.0\BepuPhysics.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\Unity.Plastic.Newtonsoft.Json.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\log4netPlastic.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\Dependencies\DotNetZip\Unity.VisualScripting.IonicZip.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Runtime\VisualScripting.Flow\Dependencies\NCalc\Unity.VisualScripting.Antlr3.Runtime.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\EditorAssetResources\Unity.VisualScripting.TextureAssets.dll - D:\myproject\JisolGame\JNFrame\Assets\NuGet\Editor\NugetForUnity.dll + D:\Jisol\JisolGame\JNFrame\Assets\NuGet\Editor\NugetForUnity.dll - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.ext.nunit@1.0.6\net35\unity-custom\nunit.framework.dll + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.ext.nunit@1.0.6\net35\unity-custom\nunit.framework.dll - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Types.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Types.dll - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Gradle.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Gradle.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.GradleProject.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\mscorlib.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\mscorlib.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\System.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\System.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\System.Core.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\System.Core.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\System.Runtime.Serialization.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\System.Runtime.Serialization.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\System.Xml.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\System.Xml.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\System.Xml.Linq.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\System.Xml.Linq.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\System.Numerics.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\System.Numerics.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\System.Numerics.Vectors.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\System.Numerics.Vectors.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\System.Net.Http.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\System.Net.Http.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\System.IO.Compression.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\System.IO.Compression.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Microsoft.CSharp.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Microsoft.CSharp.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\System.Data.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\System.Data.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\System.Data.DataSetExtensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\System.Data.DataSetExtensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\System.Drawing.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\System.Drawing.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\System.IO.Compression.FileSystem.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\System.IO.Compression.FileSystem.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\System.ComponentModel.Composition.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\System.ComponentModel.Composition.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\System.Transactions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\System.Transactions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\Microsoft.Win32.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\Microsoft.Win32.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\netstandard.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\netstandard.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.AppContext.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.AppContext.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Buffers.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Buffers.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Collections.Concurrent.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Collections.Concurrent.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Collections.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Collections.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Collections.NonGeneric.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Collections.NonGeneric.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Collections.Specialized.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Collections.Specialized.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.ComponentModel.Annotations.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.ComponentModel.Annotations.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.ComponentModel.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.ComponentModel.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.ComponentModel.EventBasedAsync.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.ComponentModel.EventBasedAsync.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.ComponentModel.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.ComponentModel.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.ComponentModel.TypeConverter.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.ComponentModel.TypeConverter.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Console.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Console.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Data.Common.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Data.Common.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Diagnostics.Contracts.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Diagnostics.Contracts.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Diagnostics.Debug.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Diagnostics.Debug.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Diagnostics.FileVersionInfo.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Diagnostics.FileVersionInfo.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Diagnostics.Process.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Diagnostics.Process.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Diagnostics.StackTrace.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Diagnostics.StackTrace.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Diagnostics.TextWriterTraceListener.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Diagnostics.TextWriterTraceListener.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Diagnostics.Tools.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Diagnostics.Tools.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Diagnostics.TraceSource.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Diagnostics.TraceSource.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Drawing.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Drawing.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Dynamic.Runtime.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Dynamic.Runtime.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Globalization.Calendars.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Globalization.Calendars.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Globalization.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Globalization.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Globalization.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Globalization.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.IO.Compression.ZipFile.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.IO.Compression.ZipFile.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.IO.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.IO.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.IO.FileSystem.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.IO.FileSystem.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.IO.FileSystem.DriveInfo.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.IO.FileSystem.DriveInfo.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.IO.FileSystem.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.IO.FileSystem.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.IO.FileSystem.Watcher.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.IO.FileSystem.Watcher.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.IO.IsolatedStorage.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.IO.IsolatedStorage.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.IO.MemoryMappedFiles.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.IO.MemoryMappedFiles.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.IO.Pipes.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.IO.Pipes.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.IO.UnmanagedMemoryStream.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.IO.UnmanagedMemoryStream.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Linq.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Linq.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Linq.Expressions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Linq.Expressions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Linq.Parallel.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Linq.Parallel.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Linq.Queryable.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Linq.Queryable.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Memory.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Memory.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Net.Http.Rtc.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Net.Http.Rtc.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Net.NameResolution.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Net.NameResolution.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Net.NetworkInformation.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Net.NetworkInformation.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Net.Ping.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Net.Ping.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Net.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Net.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Net.Requests.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Net.Requests.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Net.Security.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Net.Security.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Net.Sockets.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Net.Sockets.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Net.WebHeaderCollection.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Net.WebHeaderCollection.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Net.WebSockets.Client.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Net.WebSockets.Client.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Net.WebSockets.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Net.WebSockets.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.ObjectModel.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.ObjectModel.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Reflection.DispatchProxy.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Reflection.DispatchProxy.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Reflection.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Reflection.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Reflection.Emit.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Reflection.Emit.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Reflection.Emit.ILGeneration.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Reflection.Emit.ILGeneration.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Reflection.Emit.Lightweight.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Reflection.Emit.Lightweight.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Reflection.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Reflection.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Reflection.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Reflection.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Resources.Reader.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Resources.Reader.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Resources.ResourceManager.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Resources.ResourceManager.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Resources.Writer.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Resources.Writer.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Runtime.CompilerServices.VisualC.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Runtime.CompilerServices.VisualC.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Runtime.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Runtime.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Runtime.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Runtime.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Runtime.Handles.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Runtime.Handles.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Runtime.InteropServices.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Runtime.InteropServices.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Runtime.InteropServices.RuntimeInformation.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Runtime.InteropServices.RuntimeInformation.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Runtime.InteropServices.WindowsRuntime.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Runtime.InteropServices.WindowsRuntime.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Runtime.Numerics.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Runtime.Numerics.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Runtime.Serialization.Formatters.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Runtime.Serialization.Formatters.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Runtime.Serialization.Json.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Runtime.Serialization.Json.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Runtime.Serialization.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Runtime.Serialization.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Runtime.Serialization.Xml.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Runtime.Serialization.Xml.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Security.Claims.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Security.Claims.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Security.Cryptography.Algorithms.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Security.Cryptography.Algorithms.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Security.Cryptography.Csp.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Security.Cryptography.Csp.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Security.Cryptography.Encoding.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Security.Cryptography.Encoding.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Security.Cryptography.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Security.Cryptography.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Security.Cryptography.X509Certificates.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Security.Cryptography.X509Certificates.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Security.Principal.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Security.Principal.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Security.SecureString.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Security.SecureString.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.ServiceModel.Duplex.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.ServiceModel.Duplex.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.ServiceModel.Http.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.ServiceModel.Http.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.ServiceModel.NetTcp.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.ServiceModel.NetTcp.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.ServiceModel.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.ServiceModel.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.ServiceModel.Security.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.ServiceModel.Security.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Text.Encoding.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Text.Encoding.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Text.Encoding.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Text.Encoding.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Text.RegularExpressions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Text.RegularExpressions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Threading.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Threading.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Threading.Overlapped.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Threading.Overlapped.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Threading.Tasks.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Threading.Tasks.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Threading.Tasks.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Threading.Tasks.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Threading.Tasks.Parallel.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Threading.Tasks.Parallel.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Threading.Thread.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Threading.Thread.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Threading.ThreadPool.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Threading.ThreadPool.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Threading.Timer.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Threading.Timer.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.ValueTuple.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.ValueTuple.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Xml.ReaderWriter.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Xml.ReaderWriter.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Xml.XDocument.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Xml.XDocument.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Xml.XmlDocument.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Xml.XmlDocument.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Xml.XmlSerializer.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Xml.XmlSerializer.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Xml.XPath.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Xml.XPath.dll - D:\Unity\2021.3.33f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Xml.XPath.XDocument.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\UnityReferenceAssemblies\unity-4.8-api\Facades\System.Xml.XPath.XDocument.dll - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEditor.UI.dll + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEditor.UI.dll - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEngine.UI.dll - - - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEngine.TestRunner.dll + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEngine.UI.dll - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEditor.TestRunner.dll + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEditor.TestRunner.dll + + + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEngine.TestRunner.dll diff --git a/JNFrame/UniTask.Linq.csproj b/JNFrame/UniTask.Linq.csproj index 7081f645..f175b225 100644 --- a/JNFrame/UniTask.Linq.csproj +++ b/JNFrame/UniTask.Linq.csproj @@ -26,7 +26,7 @@ full false Temp\Bin\Debug\UniTask.Linq\ - UNITY_2021_3_33;UNITY_2021_3;UNITY_2021;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_2021_1_OR_NEWER;UNITY_2021_2_OR_NEWER;UNITY_2021_3_OR_NEWER;UNITY_INCLUDE_TESTS;ENABLE_AR;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_EVENT_QUEUE;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_NATIVE_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;ENABLE_RUNTIME_PERMISSIONS;ENABLE_ENGINE_CODE_STRIPPING;ENABLE_ONSCREEN_KEYBOARD;ENABLE_MANAGED_UNITYTLS;INCLUDE_DYNAMIC_GI;ENABLE_SCRIPTING_GC_WBARRIERS;PLATFORM_SUPPORTS_MONO;ENABLE_VIDEO;ENABLE_ACCELERATOR_CLIENT_DEBUGGING;PLATFORM_ANDROID;TEXTCORE_1_0_OR_NEWER;UNITY_ANDROID;UNITY_ANDROID_API;ENABLE_EGL;ENABLE_NETWORK;ENABLE_RUNTIME_GI;ENABLE_CRUNCH_TEXTURE_COMPRESSION;UNITY_CAN_SHOW_SPLASH_SCREEN;UNITY_HAS_GOOGLEVR;UNITY_HAS_TANGO;ENABLE_SPATIALTRACKING;ENABLE_ETC_COMPRESSION;PLATFORM_EXTENDS_VULKAN_DEVICE;PLATFORM_HAS_MULTIPLE_SWAPCHAINS;UNITY_ANDROID_SUPPORTS_SHADOWFILES;PLATFORM_UPDATES_TIME_OUTSIDE_OF_PLAYER_LOOP;ENABLE_UNITYADS_RUNTIME;UNITY_UNITYADS_API;ENABLE_MONO;NET_STANDARD_2_0;NET_STANDARD;NET_STANDARD_2_1;NETSTANDARD;NETSTANDARD2_1;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_IG;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_LEGACY_INPUT_MANAGER;TEXTCORE_FONT_ENGINE_1_5_OR_NEWER;UNITY_PHYSICS_CUSTOM;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER + UNITY_2022_3_16;UNITY_2022_3;UNITY_2022;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_2021_1_OR_NEWER;UNITY_2021_2_OR_NEWER;UNITY_2021_3_OR_NEWER;UNITY_2022_1_OR_NEWER;UNITY_2022_2_OR_NEWER;UNITY_2022_3_OR_NEWER;PLATFORM_ARCH_64;UNITY_64;UNITY_INCLUDE_TESTS;ENABLE_AR;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_EVENT_QUEUE;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_VIRTUALTEXTURING;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_EDITOR_GAME_SERVICES;ENABLE_UNITY_GAME_SERVICES_ANALYTICS_SUPPORT;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_GENERATE_NATIVE_PLUGINS_FOR_ASSEMBLIES_API;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;ENABLE_MANAGED_UNITYTLS;INCLUDE_DYNAMIC_GI;ENABLE_SCRIPTING_GC_WBARRIERS;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;ENABLE_VIDEO;ENABLE_ACCELERATOR_CLIENT_DEBUGGING;ENABLE_NAVIGATION_PACKAGE_DEBUG_VISUALIZATION;ENABLE_NAVIGATION_HEIGHTMESH_RUNTIME_SUPPORT;ENABLE_NAVIGATION_UI_REQUIRES_PACKAGE;PLATFORM_STANDALONE;TEXTCORE_1_0_OR_NEWER;PLATFORM_STANDALONE_WIN;UNITY_STANDALONE_WIN;UNITY_STANDALONE;UNITY_UGP_API;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_NVIDIA;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_OUT_OF_PROCESS_CRASH_HANDLER;ENABLE_CLUSTER_SYNC;ENABLE_CLUSTERINPUT;PLATFORM_UPDATES_TIME_OUTSIDE_OF_PLAYER_LOOP;GFXDEVICE_WAITFOREVENT_MESSAGEPUMP;PLATFORM_INITIALIZES_MEMORY_MANAGER_EXPLICITLY;ENABLE_MONO;NET_STANDARD_2_0;NET_STANDARD;NET_STANDARD_2_1;NETSTANDARD;NETSTANDARD2_1;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_LEGACY_INPUT_MANAGER;TEXTCORE_FONT_ENGINE_1_5_OR_NEWER;UNITY_PHYSICS_CUSTOM;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER prompt 4 0169,0649 @@ -41,754 +41,767 @@ false - - - - - - - - - - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + - - - - - - - - - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ARModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ARModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AccessibilityModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AccessibilityModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AndroidJNIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AndroidJNIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AnimationModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AnimationModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AssetBundleModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AssetBundleModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AudioModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AudioModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClothModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClothModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClusterInputModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClusterRendererModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ContentLoadModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CoreModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CoreModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CrashReportingModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CrashReportingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DSPGraphModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DSPGraphModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DirectorModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DirectorModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GameCenterModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GameCenterModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GridModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GridModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.HotReloadModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.HotReloadModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.IMGUIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.IMGUIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ImageConversionModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ImageConversionModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputLegacyModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputLegacyModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.JSONSerializeModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.JSONSerializeModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.LocalizationModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.LocalizationModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ParticleSystemModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ParticleSystemModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PerformanceReportingModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PerformanceReportingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PhysicsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PhysicsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.Physics2DModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.Physics2DModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ProfilerModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ProfilerModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PropertiesModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ScreenCaptureModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ScreenCaptureModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SharedInternalsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SharedInternalsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteMaskModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteMaskModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteShapeModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteShapeModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.StreamingModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.StreamingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubstanceModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubstanceModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubsystemsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubsystemsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TLSModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TLSModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainPhysicsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainPhysicsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreFontEngineModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreFontEngineModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreTextEngineModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreTextEngineModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextRenderingModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextRenderingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TilemapModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TilemapModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsModule.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsNativeModule.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIWidgetsModule.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UNETModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UmbraModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UmbraModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsCommonModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsCommonModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityConnectModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityConnectModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityCurlModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityCurlModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityTestProtocolModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityTestProtocolModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAssetBundleModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAssetBundleModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAudioModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAudioModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestTextureModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestTextureModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestWWWModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestWWWModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VFXModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VFXModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VRModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VRModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VehiclesModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VehiclesModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VideoModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VideoModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VirtualTexturingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.WindModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.WindModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.XRModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.XRModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.CoreModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.CoreModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DeviceSimulatorModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DeviceSimulatorModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DiagnosticsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DiagnosticsModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.EditorToolbarModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.GraphViewModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.GraphViewModule.dll - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.PackageManagerUIModule.dll + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.PresetsUIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.QuickSearchModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.QuickSearchModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneTemplateModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneTemplateModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneViewModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreFontEngineModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreFontEngineModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreTextEngineModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreTextEngineModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIBuilderModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIBuilderModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsSamplesModule.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIServiceModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsSamplesModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UnityConnectModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UnityConnectModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEditor.Graphs.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\WebGLSupport\UnityEditor.WebGL.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEditor.Graphs.dll - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\UnityEditor.Android.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\UnityEditor.Android.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\WindowsStandaloneSupport\UnityEditor.WindowsStandalone.Extensions.dll - - - D:\myproject\JisolGame\JNFrame\Assets\Packages\BepuUtilities.2.3.4\lib\netstandard2.0\BepuUtilities.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\Unity.Plastic.Newtonsoft.Json.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\Unity.Plastic.Antlr3.Runtime.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\WindowsStandaloneSupport\UnityEditor.WindowsStandalone.Extensions.dll - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\Dependencies\YamlDotNet\Unity.VisualScripting.YamlDotNet.dll + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\Dependencies\YamlDotNet\Unity.VisualScripting.YamlDotNet.dll - - D:\myproject\JisolGame\JNFrame\Assets\Packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\EditorAssetResources\Unity.VisualScripting.TextureAssets.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\Dependencies\DotNetZip\Unity.VisualScripting.IonicZip.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\unityplastic.dll - - - D:\myproject\JisolGame\JNFrame\Assets\Packages\BepuPhysics.2.3.4\lib\netstandard2.0\BepuPhysics.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\log4netPlastic.dll + + D:\Jisol\JisolGame\JNFrame\Assets\Plugins\JNGame\BepuPhysics\Core\BepuPhysics2\BepuUtilities.2.3.4\lib\netstandard2.0\BepuUtilities.dll - D:\myproject\JisolGame\JNFrame\Assets\Packages\Newtonsoft.Json.13.0.3\lib\netstandard2.0\Newtonsoft.Json.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Runtime\VisualScripting.Flow\Dependencies\NCalc\Unity.VisualScripting.Antlr3.Runtime.dll + D:\Jisol\JisolGame\JNFrame\Assets\Packages\Newtonsoft.Json.13.0.3\lib\netstandard2.0\Newtonsoft.Json.dll - D:\myproject\JisolGame\JNFrame\Assets\Packages\Google.Protobuf.3.19.6\lib\netstandard2.0\Google.Protobuf.dll + D:\Jisol\JisolGame\JNFrame\Assets\Packages\Google.Protobuf.3.19.6\lib\netstandard2.0\Google.Protobuf.dll - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.testtools.codecoverage@1.2.4\lib\ReportGenerator\ReportGeneratorMerged.dll + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.testtools.codecoverage@1.2.4\lib\ReportGenerator\ReportGeneratorMerged.dll + + + D:\Jisol\JisolGame\JNFrame\Assets\Packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\Unity.Plastic.Antlr3.Runtime.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\unityplastic.dll + + + D:\Jisol\JisolGame\JNFrame\Assets\Plugins\JNGame\BepuPhysics\Core\BepuPhysics2\BepuPhysics.2.3.4\lib\netstandard2.0\BepuPhysics.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\Unity.Plastic.Newtonsoft.Json.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\log4netPlastic.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\Dependencies\DotNetZip\Unity.VisualScripting.IonicZip.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Runtime\VisualScripting.Flow\Dependencies\NCalc\Unity.VisualScripting.Antlr3.Runtime.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\EditorAssetResources\Unity.VisualScripting.TextureAssets.dll - D:\myproject\JisolGame\JNFrame\Assets\NuGet\Editor\NugetForUnity.dll + D:\Jisol\JisolGame\JNFrame\Assets\NuGet\Editor\NugetForUnity.dll - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Types.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Types.dll - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Gradle.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Gradle.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.GradleProject.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\ref\2.1.0\netstandard.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\ref\2.1.0\netstandard.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\Microsoft.Win32.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\Microsoft.Win32.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.AppContext.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.AppContext.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Buffers.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Buffers.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Concurrent.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Concurrent.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.NonGeneric.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.NonGeneric.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Specialized.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Specialized.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.EventBasedAsync.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.EventBasedAsync.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.TypeConverter.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.TypeConverter.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Console.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Console.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Data.Common.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Data.Common.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Contracts.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Contracts.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Debug.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Debug.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.FileVersionInfo.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.FileVersionInfo.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Process.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Process.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.StackTrace.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.StackTrace.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TextWriterTraceListener.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TextWriterTraceListener.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tools.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tools.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TraceSource.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TraceSource.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tracing.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tracing.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Drawing.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Drawing.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Dynamic.Runtime.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Dynamic.Runtime.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Calendars.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Calendars.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.ZipFile.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.ZipFile.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.DriveInfo.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.DriveInfo.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Watcher.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Watcher.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.IsolatedStorage.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.IsolatedStorage.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.MemoryMappedFiles.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.MemoryMappedFiles.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Pipes.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Pipes.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.UnmanagedMemoryStream.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.UnmanagedMemoryStream.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Expressions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Expressions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Parallel.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Parallel.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Queryable.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Queryable.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Memory.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Memory.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Http.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Http.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NameResolution.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NameResolution.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NetworkInformation.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NetworkInformation.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Ping.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Ping.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Requests.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Requests.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Security.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Security.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Sockets.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Sockets.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebHeaderCollection.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebHeaderCollection.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.Client.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.Client.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Numerics.Vectors.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Numerics.Vectors.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ObjectModel.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ObjectModel.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.DispatchProxy.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.DispatchProxy.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.ILGeneration.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.ILGeneration.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.Lightweight.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.Lightweight.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Reader.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Reader.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.ResourceManager.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.ResourceManager.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Writer.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Writer.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.CompilerServices.VisualC.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.CompilerServices.VisualC.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Handles.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Handles.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.RuntimeInformation.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.RuntimeInformation.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Numerics.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Numerics.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Formatters.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Formatters.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Json.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Json.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Xml.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Xml.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Claims.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Claims.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Algorithms.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Algorithms.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Csp.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Csp.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Encoding.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Encoding.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.X509Certificates.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.X509Certificates.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Principal.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Principal.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.SecureString.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.SecureString.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.RegularExpressions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.RegularExpressions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Overlapped.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Overlapped.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Parallel.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Parallel.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Thread.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Thread.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.ThreadPool.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.ThreadPool.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Timer.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Timer.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ValueTuple.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ValueTuple.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.ReaderWriter.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.ReaderWriter.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XDocument.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XDocument.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlDocument.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlDocument.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlSerializer.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlSerializer.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.XDocument.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.XDocument.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\Extensions\2.0.0\System.Runtime.InteropServices.WindowsRuntime.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\Extensions\2.0.0\System.Runtime.InteropServices.WindowsRuntime.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\mscorlib.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\mscorlib.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ComponentModel.Composition.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ComponentModel.Composition.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Core.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Core.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Data.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Data.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Drawing.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Drawing.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.IO.Compression.FileSystem.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.IO.Compression.FileSystem.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Net.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Net.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Numerics.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Numerics.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Runtime.Serialization.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Runtime.Serialization.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ServiceModel.Web.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ServiceModel.Web.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Transactions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Transactions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Web.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Web.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Windows.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Windows.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Linq.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Linq.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Serialization.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Serialization.dll - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEditor.UI.dll + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEditor.UI.dll - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEngine.UI.dll + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEngine.UI.dll diff --git a/JNFrame/UniTask.TextMeshPro.csproj b/JNFrame/UniTask.TextMeshPro.csproj index f3223335..4e5c10a1 100644 --- a/JNFrame/UniTask.TextMeshPro.csproj +++ b/JNFrame/UniTask.TextMeshPro.csproj @@ -26,7 +26,7 @@ full false Temp\Bin\Debug\UniTask.TextMeshPro\ - UNITY_2021_3_33;UNITY_2021_3;UNITY_2021;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_2021_1_OR_NEWER;UNITY_2021_2_OR_NEWER;UNITY_2021_3_OR_NEWER;UNITY_INCLUDE_TESTS;ENABLE_AR;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_EVENT_QUEUE;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_NATIVE_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;ENABLE_RUNTIME_PERMISSIONS;ENABLE_ENGINE_CODE_STRIPPING;ENABLE_ONSCREEN_KEYBOARD;ENABLE_MANAGED_UNITYTLS;INCLUDE_DYNAMIC_GI;ENABLE_SCRIPTING_GC_WBARRIERS;PLATFORM_SUPPORTS_MONO;ENABLE_VIDEO;ENABLE_ACCELERATOR_CLIENT_DEBUGGING;PLATFORM_ANDROID;TEXTCORE_1_0_OR_NEWER;UNITY_ANDROID;UNITY_ANDROID_API;ENABLE_EGL;ENABLE_NETWORK;ENABLE_RUNTIME_GI;ENABLE_CRUNCH_TEXTURE_COMPRESSION;UNITY_CAN_SHOW_SPLASH_SCREEN;UNITY_HAS_GOOGLEVR;UNITY_HAS_TANGO;ENABLE_SPATIALTRACKING;ENABLE_ETC_COMPRESSION;PLATFORM_EXTENDS_VULKAN_DEVICE;PLATFORM_HAS_MULTIPLE_SWAPCHAINS;UNITY_ANDROID_SUPPORTS_SHADOWFILES;PLATFORM_UPDATES_TIME_OUTSIDE_OF_PLAYER_LOOP;ENABLE_UNITYADS_RUNTIME;UNITY_UNITYADS_API;ENABLE_MONO;NET_STANDARD_2_0;NET_STANDARD;NET_STANDARD_2_1;NETSTANDARD;NETSTANDARD2_1;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_IG;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_LEGACY_INPUT_MANAGER;TEXTCORE_FONT_ENGINE_1_5_OR_NEWER;UNITY_PHYSICS_CUSTOM;UNITASK_TEXTMESHPRO_SUPPORT;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER + UNITY_2022_3_16;UNITY_2022_3;UNITY_2022;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_2021_1_OR_NEWER;UNITY_2021_2_OR_NEWER;UNITY_2021_3_OR_NEWER;UNITY_2022_1_OR_NEWER;UNITY_2022_2_OR_NEWER;UNITY_2022_3_OR_NEWER;PLATFORM_ARCH_64;UNITY_64;UNITY_INCLUDE_TESTS;ENABLE_AR;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_EVENT_QUEUE;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_VIRTUALTEXTURING;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_EDITOR_GAME_SERVICES;ENABLE_UNITY_GAME_SERVICES_ANALYTICS_SUPPORT;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_GENERATE_NATIVE_PLUGINS_FOR_ASSEMBLIES_API;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;ENABLE_MANAGED_UNITYTLS;INCLUDE_DYNAMIC_GI;ENABLE_SCRIPTING_GC_WBARRIERS;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;ENABLE_VIDEO;ENABLE_ACCELERATOR_CLIENT_DEBUGGING;ENABLE_NAVIGATION_PACKAGE_DEBUG_VISUALIZATION;ENABLE_NAVIGATION_HEIGHTMESH_RUNTIME_SUPPORT;ENABLE_NAVIGATION_UI_REQUIRES_PACKAGE;PLATFORM_STANDALONE;TEXTCORE_1_0_OR_NEWER;PLATFORM_STANDALONE_WIN;UNITY_STANDALONE_WIN;UNITY_STANDALONE;UNITY_UGP_API;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_NVIDIA;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_OUT_OF_PROCESS_CRASH_HANDLER;ENABLE_CLUSTER_SYNC;ENABLE_CLUSTERINPUT;PLATFORM_UPDATES_TIME_OUTSIDE_OF_PLAYER_LOOP;GFXDEVICE_WAITFOREVENT_MESSAGEPUMP;PLATFORM_INITIALIZES_MEMORY_MANAGER_EXPLICITLY;ENABLE_MONO;NET_STANDARD_2_0;NET_STANDARD;NET_STANDARD_2_1;NETSTANDARD;NETSTANDARD2_1;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_LEGACY_INPUT_MANAGER;TEXTCORE_FONT_ENGINE_1_5_OR_NEWER;UNITY_PHYSICS_CUSTOM;UNITASK_TEXTMESHPRO_SUPPORT;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER prompt 4 0169,0649 @@ -41,686 +41,699 @@ false - + + + + + - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ARModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ARModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AccessibilityModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AccessibilityModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AndroidJNIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AndroidJNIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AnimationModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AnimationModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AssetBundleModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AssetBundleModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AudioModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AudioModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClothModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClothModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClusterInputModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClusterRendererModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ContentLoadModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CoreModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CoreModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CrashReportingModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CrashReportingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DSPGraphModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DSPGraphModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DirectorModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DirectorModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GameCenterModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GameCenterModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GridModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GridModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.HotReloadModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.HotReloadModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.IMGUIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.IMGUIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ImageConversionModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ImageConversionModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputLegacyModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputLegacyModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.JSONSerializeModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.JSONSerializeModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.LocalizationModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.LocalizationModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ParticleSystemModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ParticleSystemModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PerformanceReportingModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PerformanceReportingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PhysicsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PhysicsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.Physics2DModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.Physics2DModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ProfilerModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ProfilerModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PropertiesModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ScreenCaptureModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ScreenCaptureModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SharedInternalsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SharedInternalsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteMaskModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteMaskModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteShapeModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteShapeModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.StreamingModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.StreamingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubstanceModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubstanceModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubsystemsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubsystemsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TLSModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TLSModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainPhysicsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainPhysicsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreFontEngineModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreFontEngineModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreTextEngineModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreTextEngineModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextRenderingModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextRenderingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TilemapModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TilemapModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsModule.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsNativeModule.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIWidgetsModule.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UNETModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UmbraModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UmbraModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsCommonModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsCommonModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityConnectModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityConnectModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityCurlModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityCurlModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityTestProtocolModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityTestProtocolModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAssetBundleModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAssetBundleModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAudioModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAudioModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestTextureModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestTextureModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestWWWModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestWWWModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VFXModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VFXModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VRModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VRModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VehiclesModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VehiclesModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VideoModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VideoModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VirtualTexturingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.WindModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.WindModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.XRModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.XRModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.CoreModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.CoreModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DeviceSimulatorModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DeviceSimulatorModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DiagnosticsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DiagnosticsModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.EditorToolbarModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.GraphViewModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.GraphViewModule.dll - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.PackageManagerUIModule.dll + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.PresetsUIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.QuickSearchModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.QuickSearchModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneTemplateModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneTemplateModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneViewModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreFontEngineModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreFontEngineModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreTextEngineModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreTextEngineModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIBuilderModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIBuilderModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsSamplesModule.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIServiceModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsSamplesModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UnityConnectModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UnityConnectModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEditor.Graphs.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\WebGLSupport\UnityEditor.WebGL.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEditor.Graphs.dll - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\UnityEditor.Android.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\UnityEditor.Android.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\WindowsStandaloneSupport\UnityEditor.WindowsStandalone.Extensions.dll - - - D:\myproject\JisolGame\JNFrame\Assets\Packages\BepuUtilities.2.3.4\lib\netstandard2.0\BepuUtilities.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\Unity.Plastic.Newtonsoft.Json.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\Unity.Plastic.Antlr3.Runtime.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\WindowsStandaloneSupport\UnityEditor.WindowsStandalone.Extensions.dll - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\Dependencies\YamlDotNet\Unity.VisualScripting.YamlDotNet.dll + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\Dependencies\YamlDotNet\Unity.VisualScripting.YamlDotNet.dll - - D:\myproject\JisolGame\JNFrame\Assets\Packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\EditorAssetResources\Unity.VisualScripting.TextureAssets.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\Dependencies\DotNetZip\Unity.VisualScripting.IonicZip.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\unityplastic.dll - - - D:\myproject\JisolGame\JNFrame\Assets\Packages\BepuPhysics.2.3.4\lib\netstandard2.0\BepuPhysics.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\log4netPlastic.dll + + D:\Jisol\JisolGame\JNFrame\Assets\Plugins\JNGame\BepuPhysics\Core\BepuPhysics2\BepuUtilities.2.3.4\lib\netstandard2.0\BepuUtilities.dll - D:\myproject\JisolGame\JNFrame\Assets\Packages\Newtonsoft.Json.13.0.3\lib\netstandard2.0\Newtonsoft.Json.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Runtime\VisualScripting.Flow\Dependencies\NCalc\Unity.VisualScripting.Antlr3.Runtime.dll + D:\Jisol\JisolGame\JNFrame\Assets\Packages\Newtonsoft.Json.13.0.3\lib\netstandard2.0\Newtonsoft.Json.dll - D:\myproject\JisolGame\JNFrame\Assets\Packages\Google.Protobuf.3.19.6\lib\netstandard2.0\Google.Protobuf.dll + D:\Jisol\JisolGame\JNFrame\Assets\Packages\Google.Protobuf.3.19.6\lib\netstandard2.0\Google.Protobuf.dll - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.testtools.codecoverage@1.2.4\lib\ReportGenerator\ReportGeneratorMerged.dll + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.testtools.codecoverage@1.2.4\lib\ReportGenerator\ReportGeneratorMerged.dll + + + D:\Jisol\JisolGame\JNFrame\Assets\Packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\Unity.Plastic.Antlr3.Runtime.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\unityplastic.dll + + + D:\Jisol\JisolGame\JNFrame\Assets\Plugins\JNGame\BepuPhysics\Core\BepuPhysics2\BepuPhysics.2.3.4\lib\netstandard2.0\BepuPhysics.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\Unity.Plastic.Newtonsoft.Json.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\log4netPlastic.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\Dependencies\DotNetZip\Unity.VisualScripting.IonicZip.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Runtime\VisualScripting.Flow\Dependencies\NCalc\Unity.VisualScripting.Antlr3.Runtime.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\EditorAssetResources\Unity.VisualScripting.TextureAssets.dll - D:\myproject\JisolGame\JNFrame\Assets\NuGet\Editor\NugetForUnity.dll + D:\Jisol\JisolGame\JNFrame\Assets\NuGet\Editor\NugetForUnity.dll - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Types.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Types.dll - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Gradle.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Gradle.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.GradleProject.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\ref\2.1.0\netstandard.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\ref\2.1.0\netstandard.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\Microsoft.Win32.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\Microsoft.Win32.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.AppContext.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.AppContext.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Buffers.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Buffers.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Concurrent.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Concurrent.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.NonGeneric.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.NonGeneric.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Specialized.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Specialized.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.EventBasedAsync.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.EventBasedAsync.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.TypeConverter.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.TypeConverter.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Console.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Console.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Data.Common.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Data.Common.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Contracts.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Contracts.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Debug.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Debug.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.FileVersionInfo.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.FileVersionInfo.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Process.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Process.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.StackTrace.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.StackTrace.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TextWriterTraceListener.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TextWriterTraceListener.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tools.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tools.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TraceSource.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TraceSource.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tracing.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tracing.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Drawing.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Drawing.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Dynamic.Runtime.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Dynamic.Runtime.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Calendars.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Calendars.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.ZipFile.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.ZipFile.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.DriveInfo.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.DriveInfo.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Watcher.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Watcher.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.IsolatedStorage.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.IsolatedStorage.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.MemoryMappedFiles.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.MemoryMappedFiles.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Pipes.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Pipes.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.UnmanagedMemoryStream.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.UnmanagedMemoryStream.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Expressions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Expressions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Parallel.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Parallel.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Queryable.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Queryable.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Memory.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Memory.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Http.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Http.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NameResolution.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NameResolution.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NetworkInformation.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NetworkInformation.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Ping.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Ping.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Requests.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Requests.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Security.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Security.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Sockets.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Sockets.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebHeaderCollection.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebHeaderCollection.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.Client.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.Client.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Numerics.Vectors.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Numerics.Vectors.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ObjectModel.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ObjectModel.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.DispatchProxy.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.DispatchProxy.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.ILGeneration.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.ILGeneration.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.Lightweight.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.Lightweight.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Reader.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Reader.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.ResourceManager.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.ResourceManager.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Writer.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Writer.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.CompilerServices.VisualC.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.CompilerServices.VisualC.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Handles.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Handles.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.RuntimeInformation.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.RuntimeInformation.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Numerics.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Numerics.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Formatters.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Formatters.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Json.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Json.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Xml.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Xml.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Claims.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Claims.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Algorithms.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Algorithms.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Csp.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Csp.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Encoding.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Encoding.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.X509Certificates.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.X509Certificates.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Principal.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Principal.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.SecureString.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.SecureString.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.RegularExpressions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.RegularExpressions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Overlapped.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Overlapped.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Parallel.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Parallel.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Thread.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Thread.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.ThreadPool.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.ThreadPool.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Timer.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Timer.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ValueTuple.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ValueTuple.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.ReaderWriter.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.ReaderWriter.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XDocument.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XDocument.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlDocument.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlDocument.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlSerializer.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlSerializer.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.XDocument.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.XDocument.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\Extensions\2.0.0\System.Runtime.InteropServices.WindowsRuntime.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\Extensions\2.0.0\System.Runtime.InteropServices.WindowsRuntime.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\mscorlib.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\mscorlib.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ComponentModel.Composition.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ComponentModel.Composition.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Core.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Core.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Data.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Data.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Drawing.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Drawing.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.IO.Compression.FileSystem.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.IO.Compression.FileSystem.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Net.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Net.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Numerics.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Numerics.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Runtime.Serialization.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Runtime.Serialization.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ServiceModel.Web.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ServiceModel.Web.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Transactions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Transactions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Web.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Web.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Windows.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Windows.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Linq.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Linq.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Serialization.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Serialization.dll - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TextMeshPro.dll + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\Unity.TextMeshPro.dll - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEditor.UI.dll + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEditor.UI.dll - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEngine.UI.dll + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEngine.UI.dll diff --git a/JNFrame/UniTask.csproj b/JNFrame/UniTask.csproj index d669cd50..538b60d1 100644 --- a/JNFrame/UniTask.csproj +++ b/JNFrame/UniTask.csproj @@ -26,7 +26,7 @@ full false Temp\Bin\Debug\UniTask\ - UNITY_2021_3_33;UNITY_2021_3;UNITY_2021;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_2021_1_OR_NEWER;UNITY_2021_2_OR_NEWER;UNITY_2021_3_OR_NEWER;UNITY_INCLUDE_TESTS;ENABLE_AR;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_EVENT_QUEUE;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_NATIVE_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;ENABLE_RUNTIME_PERMISSIONS;ENABLE_ENGINE_CODE_STRIPPING;ENABLE_ONSCREEN_KEYBOARD;ENABLE_MANAGED_UNITYTLS;INCLUDE_DYNAMIC_GI;ENABLE_SCRIPTING_GC_WBARRIERS;PLATFORM_SUPPORTS_MONO;ENABLE_VIDEO;ENABLE_ACCELERATOR_CLIENT_DEBUGGING;PLATFORM_ANDROID;TEXTCORE_1_0_OR_NEWER;UNITY_ANDROID;UNITY_ANDROID_API;ENABLE_EGL;ENABLE_NETWORK;ENABLE_RUNTIME_GI;ENABLE_CRUNCH_TEXTURE_COMPRESSION;UNITY_CAN_SHOW_SPLASH_SCREEN;UNITY_HAS_GOOGLEVR;UNITY_HAS_TANGO;ENABLE_SPATIALTRACKING;ENABLE_ETC_COMPRESSION;PLATFORM_EXTENDS_VULKAN_DEVICE;PLATFORM_HAS_MULTIPLE_SWAPCHAINS;UNITY_ANDROID_SUPPORTS_SHADOWFILES;PLATFORM_UPDATES_TIME_OUTSIDE_OF_PLAYER_LOOP;ENABLE_UNITYADS_RUNTIME;UNITY_UNITYADS_API;ENABLE_MONO;NET_STANDARD_2_0;NET_STANDARD;NET_STANDARD_2_1;NETSTANDARD;NETSTANDARD2_1;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_IG;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_LEGACY_INPUT_MANAGER;TEXTCORE_FONT_ENGINE_1_5_OR_NEWER;UNITY_PHYSICS_CUSTOM;UNITASK_ASSETBUNDLE_SUPPORT;UNITASK_PHYSICS_SUPPORT;UNITASK_PHYSICS2D_SUPPORT;UNITASK_PARTICLESYSTEM_SUPPORT;UNITASK_UGUI_SUPPORT;UNITASK_WEBREQUEST_SUPPORT;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER + UNITY_2022_3_16;UNITY_2022_3;UNITY_2022;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_2021_1_OR_NEWER;UNITY_2021_2_OR_NEWER;UNITY_2021_3_OR_NEWER;UNITY_2022_1_OR_NEWER;UNITY_2022_2_OR_NEWER;UNITY_2022_3_OR_NEWER;PLATFORM_ARCH_64;UNITY_64;UNITY_INCLUDE_TESTS;ENABLE_AR;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_EVENT_QUEUE;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_VIRTUALTEXTURING;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_EDITOR_GAME_SERVICES;ENABLE_UNITY_GAME_SERVICES_ANALYTICS_SUPPORT;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_GENERATE_NATIVE_PLUGINS_FOR_ASSEMBLIES_API;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;ENABLE_MANAGED_UNITYTLS;INCLUDE_DYNAMIC_GI;ENABLE_SCRIPTING_GC_WBARRIERS;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;ENABLE_VIDEO;ENABLE_ACCELERATOR_CLIENT_DEBUGGING;ENABLE_NAVIGATION_PACKAGE_DEBUG_VISUALIZATION;ENABLE_NAVIGATION_HEIGHTMESH_RUNTIME_SUPPORT;ENABLE_NAVIGATION_UI_REQUIRES_PACKAGE;PLATFORM_STANDALONE;TEXTCORE_1_0_OR_NEWER;PLATFORM_STANDALONE_WIN;UNITY_STANDALONE_WIN;UNITY_STANDALONE;UNITY_UGP_API;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_NVIDIA;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_OUT_OF_PROCESS_CRASH_HANDLER;ENABLE_CLUSTER_SYNC;ENABLE_CLUSTERINPUT;PLATFORM_UPDATES_TIME_OUTSIDE_OF_PLAYER_LOOP;GFXDEVICE_WAITFOREVENT_MESSAGEPUMP;PLATFORM_INITIALIZES_MEMORY_MANAGER_EXPLICITLY;ENABLE_MONO;NET_STANDARD_2_0;NET_STANDARD;NET_STANDARD_2_1;NETSTANDARD;NETSTANDARD2_1;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_LEGACY_INPUT_MANAGER;TEXTCORE_FONT_ENGINE_1_5_OR_NEWER;UNITY_PHYSICS_CUSTOM;UNITASK_ASSETBUNDLE_SUPPORT;UNITASK_PHYSICS_SUPPORT;UNITASK_PHYSICS2D_SUPPORT;UNITASK_PARTICLESYSTEM_SUPPORT;UNITASK_UGUI_SUPPORT;UNITASK_WEBREQUEST_SUPPORT;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER prompt 4 0169,0649 @@ -41,754 +41,767 @@ false + + + + + + + + + + + - - - - - - - + + - - + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + - - + + + + + + + + + + + + + - - - - - - - - + + + + + + + + + - + + - - - + + + + + - + + + - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ARModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ARModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AccessibilityModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AccessibilityModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AndroidJNIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AndroidJNIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AnimationModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AnimationModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AssetBundleModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AssetBundleModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AudioModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.AudioModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClothModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClothModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClusterInputModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ClusterRendererModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ContentLoadModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CoreModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CoreModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CrashReportingModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.CrashReportingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DSPGraphModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DSPGraphModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DirectorModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.DirectorModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GameCenterModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GameCenterModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GridModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.GridModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.HotReloadModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.HotReloadModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.IMGUIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.IMGUIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ImageConversionModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ImageConversionModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputLegacyModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.InputLegacyModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.JSONSerializeModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.JSONSerializeModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.LocalizationModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.LocalizationModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ParticleSystemModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ParticleSystemModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PerformanceReportingModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PerformanceReportingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PhysicsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PhysicsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.Physics2DModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.Physics2DModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ProfilerModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ProfilerModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.PropertiesModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ScreenCaptureModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.ScreenCaptureModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SharedInternalsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SharedInternalsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteMaskModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteMaskModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteShapeModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteShapeModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.StreamingModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.StreamingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubstanceModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubstanceModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubsystemsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.SubsystemsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TLSModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TLSModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainPhysicsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainPhysicsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreFontEngineModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreFontEngineModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreTextEngineModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreTextEngineModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextRenderingModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TextRenderingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TilemapModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.TilemapModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsModule.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsNativeModule.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIWidgetsModule.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UNETModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UmbraModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UmbraModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsCommonModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsCommonModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityConnectModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityConnectModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityCurlModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityCurlModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityTestProtocolModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityTestProtocolModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAssetBundleModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAssetBundleModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAudioModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAudioModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestTextureModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestTextureModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestWWWModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestWWWModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VFXModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VFXModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VRModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VRModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VehiclesModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VehiclesModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VideoModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VideoModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.VirtualTexturingModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.WindModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.WindModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.XRModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEngine.XRModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.CoreModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.CoreModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DeviceSimulatorModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DeviceSimulatorModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DiagnosticsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.DiagnosticsModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.EditorToolbarModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.GraphViewModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.GraphViewModule.dll - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.PackageManagerUIModule.dll + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.PresetsUIModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.QuickSearchModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.QuickSearchModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneTemplateModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneTemplateModule.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.SceneViewModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreFontEngineModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreFontEngineModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreTextEngineModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreTextEngineModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIBuilderModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIBuilderModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsSamplesModule.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIServiceModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsSamplesModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UnityConnectModule.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEngine\UnityEditor.UnityConnectModule.dll - D:\Unity\2021.3.33f1c1\Editor\Data\Managed\UnityEditor.Graphs.dll - - - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\WebGLSupport\UnityEditor.WebGL.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\Managed\UnityEditor.Graphs.dll - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\UnityEditor.Android.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\UnityEditor.Android.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\WindowsStandaloneSupport\UnityEditor.WindowsStandalone.Extensions.dll - - - D:\myproject\JisolGame\JNFrame\Assets\Packages\BepuUtilities.2.3.4\lib\netstandard2.0\BepuUtilities.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\Unity.Plastic.Newtonsoft.Json.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\Unity.Plastic.Antlr3.Runtime.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\WindowsStandaloneSupport\UnityEditor.WindowsStandalone.Extensions.dll - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\Dependencies\YamlDotNet\Unity.VisualScripting.YamlDotNet.dll + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\Dependencies\YamlDotNet\Unity.VisualScripting.YamlDotNet.dll - - D:\myproject\JisolGame\JNFrame\Assets\Packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\EditorAssetResources\Unity.VisualScripting.TextureAssets.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\Dependencies\DotNetZip\Unity.VisualScripting.IonicZip.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\unityplastic.dll - - - D:\myproject\JisolGame\JNFrame\Assets\Packages\BepuPhysics.2.3.4\lib\netstandard2.0\BepuPhysics.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\log4netPlastic.dll + + D:\Jisol\JisolGame\JNFrame\Assets\Plugins\JNGame\BepuPhysics\Core\BepuPhysics2\BepuUtilities.2.3.4\lib\netstandard2.0\BepuUtilities.dll - D:\myproject\JisolGame\JNFrame\Assets\Packages\Newtonsoft.Json.13.0.3\lib\netstandard2.0\Newtonsoft.Json.dll - - - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Runtime\VisualScripting.Flow\Dependencies\NCalc\Unity.VisualScripting.Antlr3.Runtime.dll + D:\Jisol\JisolGame\JNFrame\Assets\Packages\Newtonsoft.Json.13.0.3\lib\netstandard2.0\Newtonsoft.Json.dll - D:\myproject\JisolGame\JNFrame\Assets\Packages\Google.Protobuf.3.19.6\lib\netstandard2.0\Google.Protobuf.dll + D:\Jisol\JisolGame\JNFrame\Assets\Packages\Google.Protobuf.3.19.6\lib\netstandard2.0\Google.Protobuf.dll - D:\myproject\JisolGame\JNFrame\Library\PackageCache\com.unity.testtools.codecoverage@1.2.4\lib\ReportGenerator\ReportGeneratorMerged.dll + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.testtools.codecoverage@1.2.4\lib\ReportGenerator\ReportGeneratorMerged.dll + + + D:\Jisol\JisolGame\JNFrame\Assets\Packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\Unity.Plastic.Antlr3.Runtime.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\unityplastic.dll + + + D:\Jisol\JisolGame\JNFrame\Assets\Plugins\JNGame\BepuPhysics\Core\BepuPhysics2\BepuPhysics.2.3.4\lib\netstandard2.0\BepuPhysics.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\Unity.Plastic.Newtonsoft.Json.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.collab-proxy@2.2.0\Lib\Editor\PlasticSCM\log4netPlastic.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\Dependencies\DotNetZip\Unity.VisualScripting.IonicZip.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Runtime\VisualScripting.Flow\Dependencies\NCalc\Unity.VisualScripting.Antlr3.Runtime.dll + + + D:\Jisol\JisolGame\JNFrame\Library\PackageCache\com.unity.visualscripting@1.9.1\Editor\VisualScripting.Core\EditorAssetResources\Unity.VisualScripting.TextureAssets.dll - D:\myproject\JisolGame\JNFrame\Assets\NuGet\Editor\NugetForUnity.dll + D:\Jisol\JisolGame\JNFrame\Assets\NuGet\Editor\NugetForUnity.dll - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Types.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Types.dll - D:\Unity\2021.3.33f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Gradle.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Gradle.dll + + + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.GradleProject.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\ref\2.1.0\netstandard.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\ref\2.1.0\netstandard.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\Microsoft.Win32.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\Microsoft.Win32.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.AppContext.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.AppContext.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Buffers.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Buffers.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Concurrent.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Concurrent.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.NonGeneric.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.NonGeneric.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Specialized.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Specialized.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.EventBasedAsync.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.EventBasedAsync.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.TypeConverter.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.TypeConverter.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Console.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Console.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Data.Common.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Data.Common.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Contracts.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Contracts.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Debug.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Debug.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.FileVersionInfo.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.FileVersionInfo.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Process.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Process.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.StackTrace.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.StackTrace.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TextWriterTraceListener.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TextWriterTraceListener.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tools.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tools.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TraceSource.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TraceSource.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tracing.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tracing.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Drawing.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Drawing.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Dynamic.Runtime.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Dynamic.Runtime.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Calendars.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Calendars.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.ZipFile.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.ZipFile.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.DriveInfo.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.DriveInfo.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Watcher.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Watcher.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.IsolatedStorage.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.IsolatedStorage.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.MemoryMappedFiles.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.MemoryMappedFiles.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Pipes.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Pipes.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.UnmanagedMemoryStream.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.UnmanagedMemoryStream.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Expressions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Expressions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Parallel.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Parallel.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Queryable.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Queryable.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Memory.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Memory.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Http.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Http.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NameResolution.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NameResolution.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NetworkInformation.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NetworkInformation.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Ping.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Ping.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Requests.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Requests.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Security.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Security.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Sockets.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Sockets.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebHeaderCollection.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebHeaderCollection.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.Client.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.Client.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Numerics.Vectors.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Numerics.Vectors.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ObjectModel.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ObjectModel.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.DispatchProxy.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.DispatchProxy.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.ILGeneration.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.ILGeneration.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.Lightweight.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.Lightweight.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Reader.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Reader.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.ResourceManager.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.ResourceManager.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Writer.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Writer.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.CompilerServices.VisualC.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.CompilerServices.VisualC.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Handles.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Handles.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.RuntimeInformation.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.RuntimeInformation.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Numerics.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Numerics.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Formatters.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Formatters.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Json.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Json.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Xml.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Xml.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Claims.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Claims.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Algorithms.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Algorithms.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Csp.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Csp.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Encoding.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Encoding.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Primitives.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Primitives.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.X509Certificates.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.X509Certificates.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Principal.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Principal.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.SecureString.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.SecureString.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.RegularExpressions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.RegularExpressions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Overlapped.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Overlapped.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Extensions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Extensions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Parallel.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Parallel.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Thread.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Thread.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.ThreadPool.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.ThreadPool.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Timer.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Timer.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ValueTuple.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ValueTuple.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.ReaderWriter.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.ReaderWriter.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XDocument.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XDocument.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlDocument.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlDocument.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlSerializer.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlSerializer.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.XDocument.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.XDocument.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\Extensions\2.0.0\System.Runtime.InteropServices.WindowsRuntime.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\Extensions\2.0.0\System.Runtime.InteropServices.WindowsRuntime.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\mscorlib.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\mscorlib.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ComponentModel.Composition.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ComponentModel.Composition.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Core.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Core.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Data.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Data.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Drawing.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Drawing.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.IO.Compression.FileSystem.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.IO.Compression.FileSystem.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Net.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Net.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Numerics.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Numerics.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Runtime.Serialization.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Runtime.Serialization.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ServiceModel.Web.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ServiceModel.Web.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Transactions.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Transactions.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Web.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Web.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Windows.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Windows.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Linq.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Linq.dll - D:\Unity\2021.3.33f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Serialization.dll + C:\APP\UnityEdit\2022.3.16f1c1\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Serialization.dll - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEditor.UI.dll + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEditor.UI.dll - D:\myproject\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEngine.UI.dll + D:\Jisol\JisolGame\JNFrame\Library\ScriptAssemblies\UnityEngine.UI.dll diff --git a/JNFrame/UserSettings/Layouts/default-2022.dwlt b/JNFrame/UserSettings/Layouts/default-2022.dwlt index 490dbf82..2bd166fa 100644 --- a/JNFrame/UserSettings/Layouts/default-2022.dwlt +++ b/JNFrame/UserSettings/Layouts/default-2022.dwlt @@ -14,16 +14,16 @@ MonoBehaviour: m_EditorClassIdentifier: m_PixelRect: serializedVersion: 2 - x: 8 - y: 51 - width: 1904 - height: 973 + x: 0 + y: 43 + width: 1920 + height: 1037 m_ShowMode: 4 - m_Title: "\u68C0\u67E5\u5668" + m_Title: "\u63A7\u5236\u53F0" m_RootView: {fileID: 7} m_MinSize: {x: 875, y: 300} m_MaxSize: {x: 10000, y: 10000} - m_Maximized: 0 + m_Maximized: 1 --- !u!114 &2 MonoBehaviour: m_ObjectHideFlags: 52 @@ -39,12 +39,12 @@ MonoBehaviour: m_Children: [] m_Position: serializedVersion: 2 - x: 1185 + x: 1052 y: 0 - width: 300 - height: 429 - m_MinSize: {x: 102, y: 121} - m_MaxSize: {x: 4002, y: 4021} + width: 445 + height: 459 + m_MinSize: {x: 100, y: 100} + m_MaxSize: {x: 4000, y: 4000} m_ActualView: {fileID: 13} m_Panes: - {fileID: 13} @@ -69,12 +69,12 @@ MonoBehaviour: serializedVersion: 2 x: 0 y: 30 - width: 1904 - height: 923 + width: 1920 + height: 987 m_MinSize: {x: 400, y: 100} m_MaxSize: {x: 32384, y: 16192} vertical: 0 - controlID: 115 + controlID: 139 --- !u!114 &4 MonoBehaviour: m_ObjectHideFlags: 52 @@ -90,10 +90,10 @@ MonoBehaviour: m_Children: [] m_Position: serializedVersion: 2 - x: 1485 + x: 1497 y: 0 - width: 419 - height: 923 + width: 423 + height: 987 m_MinSize: {x: 275, y: 50} m_MaxSize: {x: 4000, y: 4000} m_ActualView: {fileID: 16} @@ -118,8 +118,8 @@ MonoBehaviour: serializedVersion: 2 x: 0 y: 0 - width: 258 - height: 429 + width: 260 + height: 459 m_MinSize: {x: 201, y: 221} m_MaxSize: {x: 4001, y: 4021} m_ActualView: {fileID: 17} @@ -137,23 +137,23 @@ MonoBehaviour: m_Enabled: 1 m_EditorHideFlags: 1 m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0} - m_Name: ProjectBrowser + m_Name: ConsoleWindow m_EditorClassIdentifier: m_Children: [] m_Position: serializedVersion: 2 x: 0 - y: 429 - width: 1485 - height: 494 - m_MinSize: {x: 231, y: 271} - m_MaxSize: {x: 10001, y: 10021} - m_ActualView: {fileID: 15} + y: 459 + width: 1497 + height: 528 + m_MinSize: {x: 101, y: 121} + m_MaxSize: {x: 4001, y: 4021} + m_ActualView: {fileID: 19} m_Panes: - {fileID: 15} - {fileID: 19} - m_Selected: 0 - m_LastSelected: 1 + m_Selected: 1 + m_LastSelected: 0 --- !u!114 &7 MonoBehaviour: m_ObjectHideFlags: 52 @@ -174,8 +174,8 @@ MonoBehaviour: serializedVersion: 2 x: 0 y: 0 - width: 1904 - height: 973 + width: 1920 + height: 1037 m_MinSize: {x: 875, y: 300} m_MaxSize: {x: 10000, y: 10000} m_UseTopView: 1 @@ -199,7 +199,7 @@ MonoBehaviour: serializedVersion: 2 x: 0 y: 0 - width: 1904 + width: 1920 height: 30 m_MinSize: {x: 0, y: 0} m_MaxSize: {x: 0, y: 0} @@ -220,8 +220,8 @@ MonoBehaviour: m_Position: serializedVersion: 2 x: 0 - y: 953 - width: 1904 + y: 1017 + width: 1920 height: 20 m_MinSize: {x: 0, y: 0} m_MaxSize: {x: 0, y: 0} @@ -244,12 +244,12 @@ MonoBehaviour: serializedVersion: 2 x: 0 y: 0 - width: 1485 - height: 923 + width: 1497 + height: 987 m_MinSize: {x: 300, y: 100} m_MaxSize: {x: 24288, y: 16192} vertical: 1 - controlID: 116 + controlID: 48 --- !u!114 &11 MonoBehaviour: m_ObjectHideFlags: 52 @@ -270,12 +270,12 @@ MonoBehaviour: serializedVersion: 2 x: 0 y: 0 - width: 1485 - height: 429 + width: 1497 + height: 459 m_MinSize: {x: 300, y: 50} m_MaxSize: {x: 24288, y: 8096} vertical: 0 - controlID: 50 + controlID: 49 --- !u!114 &12 MonoBehaviour: m_ObjectHideFlags: 52 @@ -291,12 +291,12 @@ MonoBehaviour: m_Children: [] m_Position: serializedVersion: 2 - x: 258 + x: 260 y: 0 - width: 927 - height: 429 - m_MinSize: {x: 202, y: 221} - m_MaxSize: {x: 4002, y: 4021} + width: 792 + height: 459 + m_MinSize: {x: 200, y: 200} + m_MaxSize: {x: 4000, y: 4000} m_ActualView: {fileID: 18} m_Panes: - {fileID: 18} @@ -323,10 +323,10 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: 1193 - y: 81 - width: 298 - height: 408 + x: 1052 + y: 73 + width: 443 + height: 438 m_SerializedDataModeController: m_DataMode: 0 m_PreferredDataMode: 0 @@ -345,7 +345,7 @@ MonoBehaviour: m_ShowGizmos: 0 m_TargetDisplay: 0 m_ClearColor: {r: 0, g: 0, b: 0, a: 0} - m_TargetSize: {x: 298, y: 387} + m_TargetSize: {x: 443, y: 417} m_TextureFilterMode: 0 m_TextureHideFlags: 61 m_RenderIMGUI: 1 @@ -360,10 +360,10 @@ MonoBehaviour: m_VRangeLocked: 0 hZoomLockedByDefault: 0 vZoomLockedByDefault: 0 - m_HBaseRangeMin: -149 - m_HBaseRangeMax: 149 - m_VBaseRangeMin: -193.5 - m_VBaseRangeMax: 193.5 + m_HBaseRangeMin: -221.5 + m_HBaseRangeMax: 221.5 + m_VBaseRangeMin: -208.5 + m_VBaseRangeMax: 208.5 m_HAllowExceedBaseRangeMin: 1 m_HAllowExceedBaseRangeMax: 1 m_VAllowExceedBaseRangeMin: 1 @@ -381,23 +381,23 @@ MonoBehaviour: serializedVersion: 2 x: 0 y: 21 - width: 298 - height: 387 + width: 443 + height: 417 m_Scale: {x: 1, y: 1} - m_Translation: {x: 149, y: 193.5} + m_Translation: {x: 221.5, y: 208.5} m_MarginLeft: 0 m_MarginRight: 0 m_MarginTop: 0 m_MarginBottom: 0 m_LastShownAreaInsideMargins: serializedVersion: 2 - x: -149 - y: -193.5 - width: 298 - height: 387 + x: -221.5 + y: -208.5 + width: 443 + height: 417 m_MinimalGUI: 1 m_defaultScale: 1 - m_LastWindowPixelSize: {x: 298, y: 408} + m_LastWindowPixelSize: {x: 443, y: 438} m_ClearInEditMode: 1 m_NoCameraWarning: 1 m_LowResolutionForAspectRatios: 01000001000000000000 @@ -457,10 +457,10 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: 8 - y: 510 - width: 1484 - height: 473 + x: 0 + y: 532 + width: 1496 + height: 507 m_SerializedDataModeController: m_DataMode: 0 m_PreferredDataMode: 0 @@ -482,7 +482,7 @@ MonoBehaviour: m_SkipHidden: 0 m_SearchArea: 1 m_Folders: - - Assets/Scenes + - Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/lib/netstandard2.0 m_Globs: [] m_OriginalText: m_ImportLogFlags: 0 @@ -490,16 +490,16 @@ MonoBehaviour: m_ViewMode: 1 m_StartGridSize: 64 m_LastFolders: - - Assets/Scenes + - Assets/Plugins/JNGame/BepuPhysics/Core/BepuPhysics2/BepuPhysics.2.3.4/lib/netstandard2.0 m_LastFoldersGridSize: -1 - m_LastProjectPath: D:\myproject\JisolGame\JNFrame + m_LastProjectPath: D:\Jisol\JisolGame\JNFrame m_LockTracker: m_IsLocked: 0 m_FolderTreeState: - scrollPos: {x: 0, y: 360} - m_SelectedIDs: c27b0000 - m_LastClickedID: 31682 - m_ExpandedIDs: 00000000847b0000867b0000887b00008a7b00008c7b00008e7b0000907b0000927b0000947b0000967b0000987b00009a7b0000ba7b0000bc7b0000c27b0000c47b0000a2850000ec920000ee92000000ca9a3bffffff7f + scrollPos: {x: 0, y: 0} + m_SelectedIDs: aa670000 + m_LastClickedID: 26538 + m_ExpandedIDs: 00000000726700007e6700008a670000be680000c0680000c2680000c4680000c6680000c8680000ca680000cc680000ce680000d0680000d2680000d4680000d6680000d8680000da680000dc680000de680000e0680000e2680000e4680000e6680000e8680000ea680000ec680000ee680000f0680000f2680000f4680000f6680000f8680000fa680000fc680000fe680000006900000269000004690000206900008c6a00008c6b0000986b0000f0750000167d000000ca9a3b m_RenameOverlay: m_UserAcceptedRename: 0 m_Name: @@ -527,7 +527,7 @@ MonoBehaviour: scrollPos: {x: 0, y: 0} m_SelectedIDs: m_LastClickedID: 0 - m_ExpandedIDs: 00000000847b0000867b0000887b00008a7b00008c7b00008e7b0000907b0000927b0000947b0000967b0000987b00009a7b0000 + m_ExpandedIDs: 00000000be680000c0680000c2680000c4680000c6680000c8680000ca680000cc680000ce680000d0680000d2680000d4680000d6680000d8680000da680000dc680000de680000e0680000e2680000e4680000e6680000e8680000ea680000ec680000ee680000f0680000f2680000f4680000f6680000f8680000fa680000fc680000fe680000006900000269000004690000 m_RenameOverlay: m_UserAcceptedRename: 0 m_Name: @@ -554,7 +554,7 @@ MonoBehaviour: m_ListAreaState: m_SelectedInstanceIDs: m_LastClickedInstanceID: 0 - m_HadKeyboardFocusLastEvent: 1 + m_HadKeyboardFocusLastEvent: 0 m_ExpandedInstanceIDs: c623000000000000 m_RenameOverlay: m_UserAcceptedRename: 0 @@ -603,10 +603,10 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: 1493 - y: 81 - width: 418 - height: 902 + x: 1497 + y: 73 + width: 422 + height: 966 m_SerializedDataModeController: m_DataMode: 0 m_PreferredDataMode: 0 @@ -650,10 +650,10 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: 8 - y: 81 - width: 257 - height: 408 + x: 0 + y: 73 + width: 259 + height: 438 m_SerializedDataModeController: m_DataMode: 0 m_PreferredDataMode: 0 @@ -667,9 +667,9 @@ MonoBehaviour: m_SceneHierarchy: m_TreeViewState: scrollPos: {x: 0, y: 0} - m_SelectedIDs: f87b0000 + m_SelectedIDs: m_LastClickedID: 0 - m_ExpandedIDs: 6eb5feffa2c7feff2e9bffffacbbffffd0bcffff2ac0ffff9cc0ffffacc1ffff36c2ffff7cc4ffff28caffff02d0ffffd4d1ffff82d5ffff6ad6ffffa8d9fffffedaffff44dbffffe4ddffff4adfffffdce1ffff46e3ffff78e8ffff56eaffff94eaffffceedffff5cefffff9aefffff2ef0ffff0ef2ffff4ef3ffff52f4ffff98f4ffff0ef6ffff6af6ffffe0f9ffff2afbffff48860000 + m_ExpandedIDs: e8f6ffff70f8ffff m_RenameOverlay: m_UserAcceptedRename: 0 m_Name: @@ -713,10 +713,10 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: 266 - y: 81 - width: 925 - height: 408 + x: 260 + y: 73 + width: 790 + height: 438 m_SerializedDataModeController: m_DataMode: 0 m_PreferredDataMode: 0 @@ -1049,9 +1049,9 @@ MonoBehaviour: m_PlayAudio: 0 m_AudioPlay: 0 m_Position: - m_Target: {x: 2.92033, y: 3.2636356, z: -1.516814} + m_Target: {x: -1.6544741, y: -8.480099, z: -1.5284808} speed: 2 - m_Value: {x: 2.92033, y: 3.2636356, z: -1.516814} + m_Value: {x: -1.6544741, y: -8.480099, z: -1.5284808} m_RenderMode: 0 m_CameraMode: drawMode: 0 @@ -1097,13 +1097,13 @@ MonoBehaviour: m_GridAxis: 1 m_gridOpacity: 0.5 m_Rotation: - m_Target: {x: -0.24054745, y: -0.59710485, z: 0.19299321, w: -0.74049747} + m_Target: {x: 0.4120683, y: -0.07611061, z: 0.034566913, w: 0.9073139} speed: 2 - m_Value: {x: -0.24054983, y: -0.59711075, z: 0.19299512, w: -0.7405048} + m_Value: {x: 0.41206697, y: -0.07611036, z: 0.0345668, w: 0.90731096} m_Size: - m_Target: 14.50886 + m_Target: 16.198437 speed: 2 - m_Value: 14.50886 + m_Value: 16.198437 m_Ortho: m_Target: 0 speed: 2 @@ -1148,10 +1148,10 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: 8 - y: 510 - width: 1228 - height: 473 + x: 0 + y: 532 + width: 1496 + height: 507 m_SerializedDataModeController: m_DataMode: 0 m_PreferredDataMode: 0 diff --git a/JNFrame/obj/Debug/Assembly-CSharp-firstpass.csproj.AssemblyReference.cache b/JNFrame/obj/Debug/Assembly-CSharp-firstpass.csproj.AssemblyReference.cache index ba16b5c22ea870ac108c52a2a1ffcf933b8ea538..8119e182d83204ae51788da130d0a5fd0c39ff9f 100644 GIT binary patch delta 1076 zcmb7?Pi$0G6vjQ=d8cYW4yF@Wk9qdkI z*BjQYF5x2Mhmkg=n|_doO`tq9y&>I*yRw{^>K9wEFep}|u#0sZFHov(P!96W(02HK zlMbx!7CX7FZT;9pkrn9{Q8J#WcP`x*^x%sg;mHW5ZctjV5*Mav4o~)qL)z!&*NY}@ z_HYX}|E(D?`^EE?w@)~ULyvu>#Opj85j$!^37dAK@m^&ig);?%Dr^cNb;e!ahAnxN)<9aY~gl7?| zl3OxnDjyAhzAGf}*$6we6O)@Na8cQeD-R4$Apjgd|%k+I2#kY ziOYUTL%laHnn-Kx>=~QD$~ZUL(LqI5f$TXdfN@NG$G=}RY?157L@jak$$6X4rU}tb z>|NNU!myOTy1bUO)Uz1Hg*py(G>hWgpu>}3pB10x+XVM%ei4E9SP_`!(%6#8b4zB{ zCq_}>x2iY&o8;nzSLRx4yt0zGaABuy;P**ou{UcB+2IbB=zE}~UC7SS zpGK)$pF-+Y>B8i0Z9^68K& z{7mS$>0hFlYXl6^NX4A|y zF*;}iwVM^))P=q5ro6B_sS!w;#_%Qx1Fh_)kb2%%?c#ah`QZOM=l?%1$#$>brbTu_ zyJO_Y6$e#BG`mM;xuM(D=VE=Xol`C-_Rxa{ZlqscNF;Y78s&E$a59YBSE`#cQ|&`m zM!|Y+Cv1j2)Ns@gM>EY3q0ClpWNB2{0%;U&LhFdBOp;?QU|~}Bz*792d5JT|lE_SA ztG>#u6tw8{G}-}qw9*MiN^L;{-A@*JR$}p#^q8F{$1>N@{#H1P*&7xv7Fp%8c9y}fqh$*-gn^zYVzpSTI|&1!{;=esMk=q2X0_W zKrMKp8|%rP16vM>f^FpO!AWu#^1Mx+2uDlb?f}Qo%!0xj4!}VrG7XLQqLqA4nIxa- z1J3Z(IknS^cfs+$?MXjWiMG>gM6B{gKU6c^Tcofb4Pb?m9*OkqWD2unk_O=|{ye5S z^l=bM7*^#gNZC9D^=ykT3%)q4uPfjDEC^z0#L~(vh~);IFaJl~8}kxnjbM%(9K)|n z*F5xHy{bKFuv5hV3QNW?!@nBB@M=i+MCx6f7h3A%B+zgHPmtpZcrL@sPBkB=gA3rM x+w$u|-p+7kSs4xLI%KFO!LX1i-f);QtcFpFp63<{RB03akrFOPO7xX~{{j737m5G? diff --git a/JNFrame/obj/Debug/Assembly-CSharp.csproj.AssemblyReference.cache b/JNFrame/obj/Debug/Assembly-CSharp.csproj.AssemblyReference.cache index cd8e8f3082a5246379d34f88e5df9979ac04025b..edd8ed9c623769a098ee60bcc111a6d875150637 100644 GIT binary patch delta 1200 zcmbVLZERCz6yE9E`}X$c;^shI#tNkqaI)EMRcn;EjB>Mm%h*;2qiKP% z4=Fd0u}x-p%I$YaJlh=IWUogs4P*VBrH^8VhnK`Km0*VnD1qqnLqW%d+*J8 z&-0w~Jm=i6{=DapgGCajwNlnVX~>JQV?2A{Ygy?ECWDj=nnr?bCM0z<{WzUMUlX^% zzn@94*YlF&izHP)+sKxZ6f4L~rqC7S75cKU2=I-e-0LZaUcQ5Ml6tW#Je_h}k%=e| zD}Srs=%eX{_ z1zv=j7+Vedcg%{qD*0iI4br;?O^fg?oPsvAFtxLfa!uy&FfmVPW0OuWc_xHLp6 zHaCjueQoRl&;4yuAaL~!szxxu9z<^&Q_%P(h0#+Xl0;)U7*A8SLX?%2^}Bp>)`}+# z10W2jHf}Wx1x0f2TeL)~IFvt?5?XjUinq!>L!^oaPS8%+qAb8K#r_h0=p9jZjMSSq zuFsoOg3@=W1mC<(ZaooW^~C$0JtXU6z0k}1*Lc_j7-P^@Bll04ZRj^-(FJSkeW-o8SX@_El$2o6QW*?W1e?(?vix0l; z)e)f%4X3FVfhv(RmZlucp#(r`FPLJ zGX}>)`1TAPLI3Au)-G#I9OEtNmo@$wp`}|0n=a<6o;l1X2s<_Y=s@H-)j;OKRW9Xd z&K|Bido1P?s>6P6epeQQY|3IJWMwtP3j5G;uW}nM-Y1`z?AM+aT}>4!8!@_v-(vC@ z*BYkx3Y|iO2UlIPP2KL!o8QuWgDxMbEppQ=Q-fQ!VA)FLc5HGfTe0RaFTj{fz8@~P zyaXtBH~lxjSN2Ts8Q?$kMvF2;b>XcEw!ZIQpj?vDtq?NhM ze55fS!!qOjfy4~6sLgC5b=u4yv*qgtW<1Y(gdflQ@!ZdS-Pd*9_w(UE!o#oecBbj} zh}ubo>1e9q$l7L2-{&j$QMs?z4WIZ`$Rny=_kR(K>h(Mf*}H`uBl9@vXdk;_-YF78 ziTe)7a>)3~BeVdynVJ{QeBO?RfJjB%7LGzoJ`d#JopuRgrmYhJGEyqkPrF7$gAoh) zc}(fLO1qhk%vLCZ-pu&_v$KU^Xn zadV$nD%5$3=ECO}Q&CkSbQGPYwWype4_UHW>nO4}QA9*UZoHDC3|gdYfwW~VWH^YE zK6$$848`#Ga~5R3VxEP>d@V!iG%%%}Ho#RXa{0$@#m3xQDr(3G16q`mFzFm6;ptiO znEo9ikN&j743&vi;u8cCFS2&>Ml_7lZSW@d*cIBv_M_LxhDiCr%V%1=3mRx?cxIaFC<=ehlp=SR6yWx= z7B={w$|a`MHi-Dk7prdiby}|Sr{URkI*97qWDB+hg9Exs`(MA54qLs52D$WT z_%(eThOZSF*gIbDizgGc`@CwAH3HoU`aCplV++cw;z4xpl%k~|FFM_t%Lq5x!W*LS zhTz09ZG9N3z@s@Ze2m@?^WAzrCRE59*W}hx;Pz-SaJzInzwc6m9}G;^dpK(k9Bs4!@D`tUwE+DOwZ3} z{=@d@5YM|gO6`RO%s|Yty|94Q?#1+uKsJZz9}+ouw*QV`yURGeEsV`>`h;sNJkx=E zoo(T4Zj9|yV%UI~9f&!$Pl@3a_L*L=iIHvk%osNR=_`WSJlL=1Ctc}Lx-7B7`G22&$u$3?}H8W0c@M4ml-fzvsF`aKEBfE;1pL=3%YK&8AL1{onWpQS5 zag1|*5sHA(^m$QiR$$jmR%qg#zTS~ZV!A;QGspDx2ov;?Owb3JfGl9N{dX9fHzQL! edDa(30K)+sI0kFkxu*Y!U{fZ+>i>ak0gM0yeVEk% delta 121 zcmX^2KyCR&HC8sp8!QZy4O1N^e=uWf^ltTLZ1rZ^>dpK(k8NA%U7@Rr(_eb9Sx?W; zXa2+X+4vSvpuMnw8Hic77Z$MEyD9#hU0JhCDRR910 diff --git a/JNFrame/obj/Debug/UniTask.DOTween.csproj.AssemblyReference.cache b/JNFrame/obj/Debug/UniTask.DOTween.csproj.AssemblyReference.cache index d1151043193fecf80d7ae89760dc7a180cf8cab5..5ac9ba7007a669c2b5ed8a13dfa6de7d051e099d 100644 GIT binary patch delta 418 zcmZ2}QSICVHC8sp+bj%|4O1N^e=uWf^ltTLZ1rZ^>dpK(k9Bs4!@D`tUwE+DOwZ3} z{=@d@5YM|gO6`RO%s|Yty|94Q?#1+uKsJZz9}+ouw*QV`yURGeEsV`>`h;sNJkx=E zoo(T4Zj9|yV%UI~9f&!$Pl@3a_L*L=iIHvk%osNR=_`WSJlL=1Ctc}Lx-7B7`G22&$u$3?}H8W0c@M4ml-fzvsF`aKEBfE;1pL=3%YK&8AL1{onWpQS5 zag1|*5sHA(^m$QiR$$jmR%qg#zTS~ZV!A;QGspDx2ov;?Owb3JfGl9N{dX9fHzQL! edDa(30K)+sI0kFkxu*Y!U{fZ+>i>ak0gM0yeVEk% delta 121 zcmX^2KyCR&HC8sp8!QZy4O1N^e=uWf^ltTLZ1rZ^>dpK(k8NA%U7@Rr(_eb9Sx?W; zXa2+X+4vSvpuMnw8Hic77Z$MEyD9#hU0JhCDRR910 diff --git a/JNFrame/obj/Debug/UniTask.Editor.csproj.AssemblyReference.cache b/JNFrame/obj/Debug/UniTask.Editor.csproj.AssemblyReference.cache index 953322f2620166efb3ce86bf77dbc9e3694cba65..e14bdb1c4455823809589c796e65ccfd3f9cfc01 100644 GIT binary patch delta 483 zcmdmdP~+AG4GuQO-z*FajBb+?rJbky?Puehe1?OoF|IX^u{DlqYaH|4$!xPj9Nx`Q z+U_`o*_@H}(IK99bEaQd!e%pheFo3;H)%`?)B9&Ii%|Wn1PrDh*`HQ%wYQ?JN@fAHizl&S=qp5No;S} z#&(o(`sdATcGCmSGjg`~>|g_8b|B{1-m`;KJ!9G~w$SOK8`(T~uI49Q=~24F!N|y{ zHa*}Nkm%pYraryLg@tR{ZnmK9Vw>1X7^gq*WMiHFWILO}^aFbs*;Ty!+!J$CW1Lb8 zN&_+~i!+mpW1RDgPy~#obMIiYg1F&N93wBtlM>Sdf|)q9b4t@Q^NRH$hUg<1q7O0z qS-@y}#uhejMy7Vg=?}NFDU)FNy{$mMgF{6jmz7-0`?s+LFaiKOv$u%= delta 192 zcmcb0L1Xhl4GuQOA1n+EjBb+?rJbky?Puehe1?OoF|IX^u{DlqYaH|4$!yy~?+RU2 z-0nDq*_@H>v+*q;XZpn@Y}S+4XYfpalg6Yly?+L?`1C(hnGdpc-u=J|l$Kk@<~+TA z7bDN~{29#V(>dpK(k9Bs4!@D`tUwE+DOwZ3} z{=@d@5YM|gO6`RO%s|Yty|94Q?#1+uKsJZz9}+ouw*QV`yURGeEsV`>`h;sNJkx=E zoo(T4Zj9|yV%UI~9f&!$Pl@3a_L*L=iIHvk%osNR=_`WSJlL=1Ctc}Lx-7B7`G22&$u$3?}H8W0c@M4ml-fzvsF`aKEBfE;1pL=3%YK&8AL1{onWpQS5 zag1|*5sHA(^m$QiR$$jmR%qg#zTS~ZV!A;QGspDx2ov;?Owb3JfGl9N{dX9fHzQL! edDa(30K)+sI0kFkxu*Y!U{fZ+>i>ak0gM0yeVEk% delta 121 zcmX^2KyCR&HC8sp8!QZy4O1N^e=uWf^ltTLZ1rZ^>dpK(k8NA%U7@Rr(_eb9Sx?W; zXa2+X+4vSvpuMnw8Hic77Z$MEyD9#hU0JhCDRR910 diff --git a/JNFrame/obj/Debug/UniTask.TextMeshPro.csproj.AssemblyReference.cache b/JNFrame/obj/Debug/UniTask.TextMeshPro.csproj.AssemblyReference.cache index 3376f59fd9d3dff013530ae56b55f4046554a637..745eaf6fde13a0b6273e6c0c127a5fb6d3dd56fe 100644 GIT binary patch delta 440 zcmeCWskZTj8Y>&)Jr;(^hN%vdKbWyKdbfHrwt6#d^=8&DU~_DfdOt^LdqV-U10(C~ z5Qlejrl0mFmi6c9mDp3ae8JHo89yYjT}7F--Iy9PhVij%DMf16q^_0^xZa0VeMxV z*npTFh&i^OP2k+?J$;uAQ|R>Wa5fM2tNBS+dX(-=Z;)lxna&o$rZ#cF<&n zCf@0LZJ89N|5?Mxp$yimkEB;0q!(GhX#2e=Hg878_UVoGOfsa}s~gHzH+=y&3)l2r PwoJ;z+sPWs7QhGqx`v+F delta 185 zcmdn^Lapnj8Y>&)Z5D>fhN%vdKbWyKdbfHrwt6#d^=8&DVEeW7me5tj?F|LY4vcKu zLhk}O)6e*@Sx>hsW_F(L=gXEmy`+%Ydit9pWk#vsMh1^w8p+kx^x%(C6Cm^I`j zdxOoV^!dpK(k9Bs4!@D`tUwE+DOwZ3} z{=@d@5YM|gO6`RO%s|Yty|94Q?#1+uKsJZz9}+ouw*QV`yURGeEsV`>`h;sNJkx=E zoo(T4Zj9|yV%UI~9f&!$Pl@3a_L*L=iIHvk%osNR=_`WSJlL=1Ctc}Lx-7B7`G22&$u$3?}H8W0c@M4ml-fzvsF`aKEBfE;1pL=3%YK&8AL1{onWpQS5 zag1|*5sHA(^m$QiR$$jmR%qg#zTS~ZV!A;QGspDx2ov;?Owb3JfGl9N{dX9fHzQL! edDa(30K)+sI0kFkxu*Y!U{fZ+>i>ak0gM0yeVEk% delta 121 zcmX^2KyCR&HC8sp8!QZy4O1N^e=uWf^ltTLZ1rZ^>dpK(k8NA%U7@Rr(_eb9Sx?W; zXa2+X+4vSvpuMnw8Hic77Z$MEyD9#hU0JhCDRR910