From 76df9e626d143c5f9011cc143499d90c02fdcdd1 Mon Sep 17 00:00:00 2001
From: MW
Date: Wed, 4 Apr 2007 16:31:35 +0000
Subject: Split Avatar class into three partial classes (hopefully will make it
 easier to work on)

---
 OpenSim.RegionServer/OpenSim.RegionServer.csproj   |   6 +
 .../OpenSim.RegionServer.dll.build                 |   2 +
 OpenSim.RegionServer/world/Avatar.cs               | 287 +--------------------
 OpenSim.RegionServer/world/AvatarAnimations.cs     |   4 +-
 OpenSim.RegionServer/world/AvatarClient.cs         |  27 ++
 OpenSim.RegionServer/world/AvatarUpdate.cs         | 279 ++++++++++++++++++++
 OpenSim.RegionServer/world/Primitive2.cs           |  66 +++++
 OpenSim.RegionServer/world/World.cs                |   4 +
 OpenSim.sln                                        | 200 ++++++--------
 9 files changed, 471 insertions(+), 404 deletions(-)
 create mode 100644 OpenSim.RegionServer/world/AvatarClient.cs
 create mode 100644 OpenSim.RegionServer/world/AvatarUpdate.cs

diff --git a/OpenSim.RegionServer/OpenSim.RegionServer.csproj b/OpenSim.RegionServer/OpenSim.RegionServer.csproj
index 5f396ac..cee91f8 100644
--- a/OpenSim.RegionServer/OpenSim.RegionServer.csproj
+++ b/OpenSim.RegionServer/OpenSim.RegionServer.csproj
@@ -166,6 +166,12 @@
     <Compile Include="world\AvatarAnimations.cs">
       <SubType>Code</SubType>
     </Compile>
+    <Compile Include="world\AvatarClient.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="world\AvatarUpdate.cs">
+      <SubType>Code</SubType>
+    </Compile>
     <Compile Include="world\Entity.cs">
       <SubType>Code</SubType>
     </Compile>
diff --git a/OpenSim.RegionServer/OpenSim.RegionServer.dll.build b/OpenSim.RegionServer/OpenSim.RegionServer.dll.build
index cd5fb43..c0289e7 100644
--- a/OpenSim.RegionServer/OpenSim.RegionServer.dll.build
+++ b/OpenSim.RegionServer/OpenSim.RegionServer.dll.build
@@ -29,6 +29,8 @@
                 <include name="types/Triangle.cs" />
                 <include name="world/Avatar.cs" />
                 <include name="world/AvatarAnimations.cs" />
+                <include name="world/AvatarClient.cs" />
+                <include name="world/AvatarUpdate.cs" />
                 <include name="world/Entity.cs" />
                 <include name="world/Primitive.cs" />
                 <include name="world/Primitive2.cs" />
diff --git a/OpenSim.RegionServer/world/Avatar.cs b/OpenSim.RegionServer/world/Avatar.cs
index be47eda..186fb5c 100644
--- a/OpenSim.RegionServer/world/Avatar.cs
+++ b/OpenSim.RegionServer/world/Avatar.cs
@@ -10,7 +10,7 @@ using Axiom.MathLib;
 
 namespace OpenSim.world
 {
-    public class Avatar : Entity
+    public partial class Avatar : Entity
     {
         public static bool PhysicsEngineFlying = false;
         public static AvatarAnimations Animations;
@@ -32,6 +32,7 @@ namespace OpenSim.world
         private ulong m_regionHandle;
         private Dictionary<uint, SimClient> m_clientThreads;
         private string m_regionName;
+        private bool childShadowAvatar = false;
 
         public Avatar(SimClient TheClient, World world, string regionName, Dictionary<uint, SimClient> clientThreads, ulong regionHandle)
         {
@@ -95,60 +96,6 @@ namespace OpenSim.world
             }
         }
 
-        public override void update()
-        {
-            libsecondlife.LLVector3 pos2 = new LLVector3(this._physActor.Position.X, this._physActor.Position.Y, this._physActor.Position.Z);
-            if (this.updateflag)
-            {
-                //need to send movement info
-                //so create the improvedterseobjectupdate packet
-                //use CreateTerseBlock()
-                ImprovedTerseObjectUpdatePacket.ObjectDataBlock terseBlock = CreateTerseBlock();
-                ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket();
-                terse.RegionData.RegionHandle = m_regionHandle; // FIXME
-                terse.RegionData.TimeDilation = 64096;
-                terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
-                terse.ObjectData[0] = terseBlock;
-                foreach (SimClient client in m_clientThreads.Values)
-                {
-                    client.OutPacket(terse);
-                }
-
-                updateflag = false;
-                //this._updateCount = 0;
-            }
-            else
-            {
-
-                if ((pos2 != this.positionLastFrame) || (this.movementflag == 16))
-                {
-                    _updateCount++;
-                    if (((!PhysicsEngineFlying) && (_updateCount > 3)) || (PhysicsEngineFlying) && (_updateCount > 0))
-                    {
-                        //It has been a while since last update was sent so lets send one.
-                        ImprovedTerseObjectUpdatePacket.ObjectDataBlock terseBlock = CreateTerseBlock();
-                        ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket();
-                        terse.RegionData.RegionHandle = m_regionHandle; // FIXME
-                        terse.RegionData.TimeDilation = 64096;
-                        terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
-                        terse.ObjectData[0] = terseBlock;
-                        foreach (SimClient client in m_clientThreads.Values)
-                        {
-                            client.OutPacket(terse);
-                        }
-                        _updateCount = 0;
-                    }
-
-                    if (this.movementflag == 16)
-                    {
-                        movementflag = 0;
-                    }
-                }
-
-            }
-            this.positionLastFrame = pos2;
-        }
-
         public static void SetupTemplate(string name)
         {
             int i = 0;
@@ -190,128 +137,6 @@ namespace OpenSim.world
             ControllingClient.OutPacket(mov);
         }
 
-        public void SendInitialPosition()
-        {
-
-            System.Text.Encoding _enc = System.Text.Encoding.ASCII;
-            //send a objectupdate packet with information about the clients avatar
-            ObjectUpdatePacket objupdate = new ObjectUpdatePacket();
-            objupdate.RegionData.RegionHandle = m_regionHandle;
-            objupdate.RegionData.TimeDilation = 64096;
-            objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1];
-
-            objupdate.ObjectData[0] = AvatarTemplate;
-            //give this avatar object a local id and assign the user a name
-            objupdate.ObjectData[0].ID = this.localid;
-            this.uuid = objupdate.ObjectData[0].FullID = ControllingClient.AgentID;
-            objupdate.ObjectData[0].NameValue = _enc.GetBytes("FirstName STRING RW SV " + firstname + "\nLastName STRING RW SV " + lastname + " \0");
-
-            libsecondlife.LLVector3 pos2 = new LLVector3((float)this.Pos.X, (float)this.Pos.Y, (float)this.Pos.Z);
-
-            byte[] pb = pos2.GetBytes();
-
-            Array.Copy(pb, 0, objupdate.ObjectData[0].ObjectData, 16, pb.Length);
-            m_world._localNumber++;
-
-            foreach (SimClient client in m_clientThreads.Values)
-            {
-                client.OutPacket(objupdate);
-                if (client.AgentID != ControllingClient.AgentID)
-                {
-                    SendAppearanceToOtherAgent(client);
-                }
-            }
-            //this.ControllingClient.OutPacket(objupdate);
-        }
-
-        public void SendInitialAppearance()
-        {
-            AgentWearablesUpdatePacket aw = new AgentWearablesUpdatePacket();
-            aw.AgentData.AgentID = this.ControllingClient.AgentID;
-            aw.AgentData.SerialNum = 0;
-            aw.AgentData.SessionID = ControllingClient.SessionID;
-
-            aw.WearableData = new AgentWearablesUpdatePacket.WearableDataBlock[13];
-            AgentWearablesUpdatePacket.WearableDataBlock awb;
-            for (int i = 0; i < 13; i++)
-            {
-                awb = new AgentWearablesUpdatePacket.WearableDataBlock();
-                awb.WearableType = (byte)i;
-                awb.AssetID = this.Wearables[i].AssetID;
-                awb.ItemID = this.Wearables[i].ItemID;
-                aw.WearableData[i] = awb;
-            }
-
-            ControllingClient.OutPacket(aw);
-        }
-
-        public ObjectUpdatePacket CreateUpdatePacket()
-        {
-            System.Text.Encoding _enc = System.Text.Encoding.ASCII;
-            //send a objectupdate packet with information about the clients avatar
-            ObjectUpdatePacket objupdate = new ObjectUpdatePacket();
-            objupdate.RegionData.RegionHandle = m_regionHandle;
-            objupdate.RegionData.TimeDilation = 64096;
-            objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1];
-
-            objupdate.ObjectData[0] = AvatarTemplate;
-            //give this avatar object a local id and assign the user a name
-            objupdate.ObjectData[0].ID = this.localid;
-            objupdate.ObjectData[0].FullID = ControllingClient.AgentID;
-            objupdate.ObjectData[0].NameValue = _enc.GetBytes("FirstName STRING RW SV " + firstname + "\nLastName STRING RW SV " + lastname + " \0");
-
-            libsecondlife.LLVector3 pos2 = new LLVector3((float)this._physActor.Position.X, (float)this._physActor.Position.Y, (float)this._physActor.Position.Z);
-
-            byte[] pb = pos2.GetBytes();
-
-            Array.Copy(pb, 0, objupdate.ObjectData[0].ObjectData, 16, pb.Length);
-            return objupdate;
-        }
-
-        public void SendAppearanceToOtherAgent(SimClient userInfo)
-        {
-            AvatarAppearancePacket avp = new AvatarAppearancePacket();
-
-
-            avp.VisualParam = new AvatarAppearancePacket.VisualParamBlock[218];
-            //avp.ObjectData.TextureEntry=this.avatar_template.TextureEntry;// br.ReadBytes((int)numBytes);
-
-            //LLObject.TextureEntry ntex = new LLObject.TextureEntry(new LLUUID("00000000-0000-0000-0000-000000000005"));
-            //avp.ObjectData.TextureEntry = ntex.ToBytes();
-            avp.ObjectData.TextureEntry = this.avatarAppearanceTexture.ToBytes();
-
-            AvatarAppearancePacket.VisualParamBlock avblock = null;
-            for (int i = 0; i < 218; i++)
-            {
-                avblock = new AvatarAppearancePacket.VisualParamBlock();
-                avblock.ParamValue = visualParams[i];
-                avp.VisualParam[i] = avblock;
-            }
-
-            avp.Sender.IsTrial = false;
-            avp.Sender.ID = ControllingClient.AgentID;
-            userInfo.OutPacket(avp);
-
-        }
-        public void SetAppearance(AgentSetAppearancePacket appear)
-        {
-            LLObject.TextureEntry tex = new LLObject.TextureEntry(appear.ObjectData.TextureEntry, 0, appear.ObjectData.TextureEntry.Length);
-            this.avatarAppearanceTexture = tex;
-            for (int i = 0; i < appear.VisualParam.Length; i++)
-            {
-                this.visualParams[i] = appear.VisualParam[i].ParamValue;
-            }
-
-            foreach (SimClient client in m_clientThreads.Values)
-            {
-                if (client.AgentID != ControllingClient.AgentID)
-                {
-                    SendAppearanceToOtherAgent(client);
-                }
-            }
-        }
-
-
         public void HandleUpdate(AgentUpdatePacket pack)
         {
             if (((uint)pack.AgentData.ControlFlags & (uint)MainAvatar.AgentUpdateFlags.AGENT_CONTROL_FLY) != 0)
@@ -323,7 +148,7 @@ namespace OpenSim.world
                     this.SendAnimPack();
                 }
                 this._physActor.Flying = true;
-                
+
             }
             else
             {
@@ -462,28 +287,7 @@ namespace OpenSim.world
             }
         }
 
-        // Sends animation update
-        public void SendAnimPack()
-        {
-            AvatarAnimationPacket ani = new AvatarAnimationPacket();
-            ani.AnimationSourceList = new AvatarAnimationPacket.AnimationSourceListBlock[1];
-            ani.AnimationSourceList[0] = new AvatarAnimationPacket.AnimationSourceListBlock();
-            ani.AnimationSourceList[0].ObjectID = ControllingClient.AgentID;
-            ani.Sender = new AvatarAnimationPacket.SenderBlock();
-            ani.Sender.ID = ControllingClient.AgentID;
-            ani.AnimationList = new AvatarAnimationPacket.AnimationListBlock[1];
-            ani.AnimationList[0] = new AvatarAnimationPacket.AnimationListBlock();
-            ani.AnimationList[0].AnimID = this.current_anim;
-            ani.AnimationList[0].AnimSequenceID = this.anim_seq;
-           
-            //ControllingClient.OutPacket(ani);
-            foreach (SimClient client in m_clientThreads.Values)
-            {
-                client.OutPacket(ani);
-            }
-        }
-
-        //should be moved somewhere else
+        //really really should be moved somewhere else
         public void SendRegionHandshake(World RegionInfo)
         {
             OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Avatar.cs:SendRegionHandshake() - Creating empty RegionHandshake packet");
@@ -520,89 +324,6 @@ namespace OpenSim.world
             this.ControllingClient.OutPacket(handshake);
         }
 
-        public ImprovedTerseObjectUpdatePacket.ObjectDataBlock CreateTerseBlock()
-        {
-            byte[] bytes = new byte[60];
-            int i = 0;
-            ImprovedTerseObjectUpdatePacket.ObjectDataBlock dat = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock();
-
-            dat.TextureEntry = new byte[0];// AvatarTemplate.TextureEntry;
-            libsecondlife.LLVector3 pos2 = new LLVector3(0, 0, 0);
-            lock (m_world.LockPhysicsEngine)
-            {
-                pos2 = new LLVector3(this._physActor.Position.X, this._physActor.Position.Y, this._physActor.Position.Z);
-            }
-
-            uint ID = this.localid;
-
-            bytes[i++] = (byte)(ID % 256);
-            bytes[i++] = (byte)((ID >> 8) % 256);
-            bytes[i++] = (byte)((ID >> 16) % 256);
-            bytes[i++] = (byte)((ID >> 24) % 256);
-            bytes[i++] = 0;
-            bytes[i++] = 1;
-            i += 14;
-            bytes[i++] = 128;
-            bytes[i++] = 63;
-
-            byte[] pb = pos2.GetBytes();
-            Array.Copy(pb, 0, bytes, i, pb.Length);
-            i += 12;
-            ushort InternVelocityX;
-            ushort InternVelocityY;
-            ushort InternVelocityZ;
-            Axiom.MathLib.Vector3 internDirec = new Axiom.MathLib.Vector3(0, 0, 0);
-            lock (m_world.LockPhysicsEngine)
-            {
-                internDirec = new Axiom.MathLib.Vector3(this._physActor.Velocity.X, this._physActor.Velocity.Y, this._physActor.Velocity.Z);
-            }
-            internDirec = internDirec / 128.0f;
-            internDirec.x += 1;
-            internDirec.y += 1;
-            internDirec.z += 1;
-
-            InternVelocityX = (ushort)(32768 * internDirec.x);
-            InternVelocityY = (ushort)(32768 * internDirec.y);
-            InternVelocityZ = (ushort)(32768 * internDirec.z);
-
-            ushort ac = 32767;
-            bytes[i++] = (byte)(InternVelocityX % 256);
-            bytes[i++] = (byte)((InternVelocityX >> 8) % 256);
-            bytes[i++] = (byte)(InternVelocityY % 256);
-            bytes[i++] = (byte)((InternVelocityY >> 8) % 256);
-            bytes[i++] = (byte)(InternVelocityZ % 256);
-            bytes[i++] = (byte)((InternVelocityZ >> 8) % 256);
-
-            //accel
-            bytes[i++] = (byte)(ac % 256);
-            bytes[i++] = (byte)((ac >> 8) % 256);
-            bytes[i++] = (byte)(ac % 256);
-            bytes[i++] = (byte)((ac >> 8) % 256);
-            bytes[i++] = (byte)(ac % 256);
-            bytes[i++] = (byte)((ac >> 8) % 256);
-
-            //rot
-            bytes[i++] = (byte)(ac % 256);
-            bytes[i++] = (byte)((ac >> 8) % 256);
-            bytes[i++] = (byte)(ac % 256);
-            bytes[i++] = (byte)((ac >> 8) % 256);
-            bytes[i++] = (byte)(ac % 256);
-            bytes[i++] = (byte)((ac >> 8) % 256);
-            bytes[i++] = (byte)(ac % 256);
-            bytes[i++] = (byte)((ac >> 8) % 256);
-
-            //rotation vel
-            bytes[i++] = (byte)(ac % 256);
-            bytes[i++] = (byte)((ac >> 8) % 256);
-            bytes[i++] = (byte)(ac % 256);
-            bytes[i++] = (byte)((ac >> 8) % 256);
-            bytes[i++] = (byte)(ac % 256);
-            bytes[i++] = (byte)((ac >> 8) % 256);
-
-            dat.Data = bytes;
-            return (dat);
-        }
-
         public static void LoadAnims()
         {
             Avatar.Animations = new AvatarAnimations();
diff --git a/OpenSim.RegionServer/world/AvatarAnimations.cs b/OpenSim.RegionServer/world/AvatarAnimations.cs
index eea29de..36c4c7e 100644
--- a/OpenSim.RegionServer/world/AvatarAnimations.cs
+++ b/OpenSim.RegionServer/world/AvatarAnimations.cs
@@ -10,8 +10,7 @@ namespace OpenSim.world
 
         public Dictionary<string, LLUUID> AnimsLLUUID = new Dictionary<string, LLUUID>();
         public Dictionary<LLUUID, string> AnimsNames = new Dictionary<LLUUID, string>();
-
-
+        
         public AvatarAnimations()
         {
         }
@@ -155,7 +154,6 @@ namespace OpenSim.world
             AnimsLLUUID.Add("ANIM_AGENT_YES_HAPPY", new LLUUID("b8c8b2a3-9008-1771-3bfc-90924955ab2d"));
             AnimsLLUUID.Add("ANIM_AGENT_YOGA_FLOAT", new LLUUID("42ecd00b-9947-a97c-400a-bbc9174c7aeb"));
 
-
             foreach (KeyValuePair<string, LLUUID> kp in OpenSim.world.Avatar.Animations.AnimsLLUUID)
             {
                 AnimsNames.Add(kp.Value, kp.Key);
diff --git a/OpenSim.RegionServer/world/AvatarClient.cs b/OpenSim.RegionServer/world/AvatarClient.cs
new file mode 100644
index 0000000..bad8761
--- /dev/null
+++ b/OpenSim.RegionServer/world/AvatarClient.cs
@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using libsecondlife.Packets;
+
+namespace OpenSim.world
+{
+    partial class Avatar
+    {
+        private List<ImprovedTerseObjectUpdatePacket.ObjectDataBlock> updateList = new List<ImprovedTerseObjectUpdatePacket.ObjectDataBlock>();
+        
+        public void SendPacketToViewer(Packet packet)
+        {
+            this.ControllingClient.OutPacket(packet);
+        }
+
+        public void AddTerseUpdateToViewersList(ImprovedTerseObjectUpdatePacket.ObjectDataBlock terseBlock)
+        {
+
+        }
+
+        public void SendUpdateListToViewer()
+        {
+
+        }
+    }
+}
diff --git a/OpenSim.RegionServer/world/AvatarUpdate.cs b/OpenSim.RegionServer/world/AvatarUpdate.cs
new file mode 100644
index 0000000..d20ba28
--- /dev/null
+++ b/OpenSim.RegionServer/world/AvatarUpdate.cs
@@ -0,0 +1,279 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using libsecondlife;
+using libsecondlife.Packets;
+
+namespace OpenSim.world
+{
+    partial class Avatar
+    {
+        public override void update()
+        {
+            libsecondlife.LLVector3 pos2 = new LLVector3(this._physActor.Position.X, this._physActor.Position.Y, this._physActor.Position.Z);
+            if (this.updateflag)
+            {
+                //need to send movement info
+                //so create the improvedterseobjectupdate packet
+                //use CreateTerseBlock()
+                ImprovedTerseObjectUpdatePacket.ObjectDataBlock terseBlock = CreateTerseBlock();
+                ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket();
+                terse.RegionData.RegionHandle = m_regionHandle; // FIXME
+                terse.RegionData.TimeDilation = 64096;
+                terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
+                terse.ObjectData[0] = terseBlock;
+                foreach (SimClient client in m_clientThreads.Values)
+                {
+                    client.OutPacket(terse);
+                }
+
+                updateflag = false;
+                //this._updateCount = 0;
+            }
+            else
+            {
+
+                if ((pos2 != this.positionLastFrame) || (this.movementflag == 16))
+                {
+                    _updateCount++;
+                    if (((!PhysicsEngineFlying) && (_updateCount > 3)) || (PhysicsEngineFlying) && (_updateCount > 0))
+                    {
+                        //It has been a while since last update was sent so lets send one.
+                        ImprovedTerseObjectUpdatePacket.ObjectDataBlock terseBlock = CreateTerseBlock();
+                        ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket();
+                        terse.RegionData.RegionHandle = m_regionHandle; // FIXME
+                        terse.RegionData.TimeDilation = 64096;
+                        terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
+                        terse.ObjectData[0] = terseBlock;
+                        foreach (SimClient client in m_clientThreads.Values)
+                        {
+                            client.OutPacket(terse);
+                        }
+                        _updateCount = 0;
+                    }
+
+                    if (this.movementflag == 16)
+                    {
+                        movementflag = 0;
+                    }
+                }
+
+            }
+            this.positionLastFrame = pos2;
+        }
+
+        public ObjectUpdatePacket CreateUpdatePacket()
+        {
+            System.Text.Encoding _enc = System.Text.Encoding.ASCII;
+            //send a objectupdate packet with information about the clients avatar
+            ObjectUpdatePacket objupdate = new ObjectUpdatePacket();
+            objupdate.RegionData.RegionHandle = m_regionHandle;
+            objupdate.RegionData.TimeDilation = 64096;
+            objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1];
+
+            objupdate.ObjectData[0] = AvatarTemplate;
+            //give this avatar object a local id and assign the user a name
+            objupdate.ObjectData[0].ID = this.localid;
+            objupdate.ObjectData[0].FullID = ControllingClient.AgentID;
+            objupdate.ObjectData[0].NameValue = _enc.GetBytes("FirstName STRING RW SV " + firstname + "\nLastName STRING RW SV " + lastname + " \0");
+
+            libsecondlife.LLVector3 pos2 = new LLVector3((float)this._physActor.Position.X, (float)this._physActor.Position.Y, (float)this._physActor.Position.Z);
+
+            byte[] pb = pos2.GetBytes();
+
+            Array.Copy(pb, 0, objupdate.ObjectData[0].ObjectData, 16, pb.Length);
+            return objupdate;
+        }
+
+        public void SendInitialPosition()
+        {
+            System.Text.Encoding _enc = System.Text.Encoding.ASCII;
+            //send a objectupdate packet with information about the clients avatar
+            ObjectUpdatePacket objupdate = new ObjectUpdatePacket();
+            objupdate.RegionData.RegionHandle = m_regionHandle;
+            objupdate.RegionData.TimeDilation = 64096;
+            objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1];
+
+            objupdate.ObjectData[0] = AvatarTemplate;
+            //give this avatar object a local id and assign the user a name
+            objupdate.ObjectData[0].ID = this.localid;
+            this.uuid = objupdate.ObjectData[0].FullID = ControllingClient.AgentID;
+            objupdate.ObjectData[0].NameValue = _enc.GetBytes("FirstName STRING RW SV " + firstname + "\nLastName STRING RW SV " + lastname + " \0");
+            libsecondlife.LLVector3 pos2 = new LLVector3((float)this.Pos.X, (float)this.Pos.Y, (float)this.Pos.Z);
+            byte[] pb = pos2.GetBytes();
+            Array.Copy(pb, 0, objupdate.ObjectData[0].ObjectData, 16, pb.Length);
+            m_world._localNumber++;
+
+            foreach (SimClient client in m_clientThreads.Values)
+            {
+                client.OutPacket(objupdate);
+                if (client.AgentID != ControllingClient.AgentID)
+                {
+                    SendAppearanceToOtherAgent(client);
+                }
+            }
+        }
+
+        public void SendInitialAppearance()
+        {
+            AgentWearablesUpdatePacket aw = new AgentWearablesUpdatePacket();
+            aw.AgentData.AgentID = this.ControllingClient.AgentID;
+            aw.AgentData.SerialNum = 0;
+            aw.AgentData.SessionID = ControllingClient.SessionID;
+
+            aw.WearableData = new AgentWearablesUpdatePacket.WearableDataBlock[13];
+            AgentWearablesUpdatePacket.WearableDataBlock awb;
+            for (int i = 0; i < 13; i++)
+            {
+                awb = new AgentWearablesUpdatePacket.WearableDataBlock();
+                awb.WearableType = (byte)i;
+                awb.AssetID = this.Wearables[i].AssetID;
+                awb.ItemID = this.Wearables[i].ItemID;
+                aw.WearableData[i] = awb;
+            }
+
+            ControllingClient.OutPacket(aw);
+        }
+
+        public void SendAppearanceToOtherAgent(SimClient userInfo)
+        {
+            AvatarAppearancePacket avp = new AvatarAppearancePacket();
+            avp.VisualParam = new AvatarAppearancePacket.VisualParamBlock[218];
+            avp.ObjectData.TextureEntry = this.avatarAppearanceTexture.ToBytes();
+
+            AvatarAppearancePacket.VisualParamBlock avblock = null;
+            for (int i = 0; i < 218; i++)
+            {
+                avblock = new AvatarAppearancePacket.VisualParamBlock();
+                avblock.ParamValue = visualParams[i];
+                avp.VisualParam[i] = avblock;
+            }
+
+            avp.Sender.IsTrial = false;
+            avp.Sender.ID = ControllingClient.AgentID;
+            userInfo.OutPacket(avp);
+        }
+
+        public void SetAppearance(AgentSetAppearancePacket appear)
+        {
+            LLObject.TextureEntry tex = new LLObject.TextureEntry(appear.ObjectData.TextureEntry, 0, appear.ObjectData.TextureEntry.Length);
+            this.avatarAppearanceTexture = tex;
+            for (int i = 0; i < appear.VisualParam.Length; i++)
+            {
+                this.visualParams[i] = appear.VisualParam[i].ParamValue;
+            }
+            foreach (SimClient client in m_clientThreads.Values)
+            {
+                if (client.AgentID != ControllingClient.AgentID)
+                {
+                    SendAppearanceToOtherAgent(client);
+                }
+            }
+        }
+
+        public ImprovedTerseObjectUpdatePacket.ObjectDataBlock CreateTerseBlock()
+        {
+            byte[] bytes = new byte[60];
+            int i = 0;
+            ImprovedTerseObjectUpdatePacket.ObjectDataBlock dat = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock();
+
+            dat.TextureEntry = new byte[0];// AvatarTemplate.TextureEntry;
+            libsecondlife.LLVector3 pos2 = new LLVector3(0, 0, 0);
+            lock (m_world.LockPhysicsEngine)
+            {
+                pos2 = new LLVector3(this._physActor.Position.X, this._physActor.Position.Y, this._physActor.Position.Z);
+            }
+
+            uint ID = this.localid;
+
+            bytes[i++] = (byte)(ID % 256);
+            bytes[i++] = (byte)((ID >> 8) % 256);
+            bytes[i++] = (byte)((ID >> 16) % 256);
+            bytes[i++] = (byte)((ID >> 24) % 256);
+            bytes[i++] = 0;
+            bytes[i++] = 1;
+            i += 14;
+            bytes[i++] = 128;
+            bytes[i++] = 63;
+
+            byte[] pb = pos2.GetBytes();
+            Array.Copy(pb, 0, bytes, i, pb.Length);
+            i += 12;
+            ushort InternVelocityX;
+            ushort InternVelocityY;
+            ushort InternVelocityZ;
+            Axiom.MathLib.Vector3 internDirec = new Axiom.MathLib.Vector3(0, 0, 0);
+            lock (m_world.LockPhysicsEngine)
+            {
+                internDirec = new Axiom.MathLib.Vector3(this._physActor.Velocity.X, this._physActor.Velocity.Y, this._physActor.Velocity.Z);
+            }
+            internDirec = internDirec / 128.0f;
+            internDirec.x += 1;
+            internDirec.y += 1;
+            internDirec.z += 1;
+
+            InternVelocityX = (ushort)(32768 * internDirec.x);
+            InternVelocityY = (ushort)(32768 * internDirec.y);
+            InternVelocityZ = (ushort)(32768 * internDirec.z);
+
+            ushort ac = 32767;
+            bytes[i++] = (byte)(InternVelocityX % 256);
+            bytes[i++] = (byte)((InternVelocityX >> 8) % 256);
+            bytes[i++] = (byte)(InternVelocityY % 256);
+            bytes[i++] = (byte)((InternVelocityY >> 8) % 256);
+            bytes[i++] = (byte)(InternVelocityZ % 256);
+            bytes[i++] = (byte)((InternVelocityZ >> 8) % 256);
+
+            //accel
+            bytes[i++] = (byte)(ac % 256);
+            bytes[i++] = (byte)((ac >> 8) % 256);
+            bytes[i++] = (byte)(ac % 256);
+            bytes[i++] = (byte)((ac >> 8) % 256);
+            bytes[i++] = (byte)(ac % 256);
+            bytes[i++] = (byte)((ac >> 8) % 256);
+
+            //rot
+            bytes[i++] = (byte)(ac % 256);
+            bytes[i++] = (byte)((ac >> 8) % 256);
+            bytes[i++] = (byte)(ac % 256);
+            bytes[i++] = (byte)((ac >> 8) % 256);
+            bytes[i++] = (byte)(ac % 256);
+            bytes[i++] = (byte)((ac >> 8) % 256);
+            bytes[i++] = (byte)(ac % 256);
+            bytes[i++] = (byte)((ac >> 8) % 256);
+
+            //rotation vel
+            bytes[i++] = (byte)(ac % 256);
+            bytes[i++] = (byte)((ac >> 8) % 256);
+            bytes[i++] = (byte)(ac % 256);
+            bytes[i++] = (byte)((ac >> 8) % 256);
+            bytes[i++] = (byte)(ac % 256);
+            bytes[i++] = (byte)((ac >> 8) % 256);
+
+            dat.Data = bytes;
+            return (dat);
+        }
+
+        // Sends animation update
+        public void SendAnimPack()
+        {
+            AvatarAnimationPacket ani = new AvatarAnimationPacket();
+            ani.AnimationSourceList = new AvatarAnimationPacket.AnimationSourceListBlock[1];
+            ani.AnimationSourceList[0] = new AvatarAnimationPacket.AnimationSourceListBlock();
+            ani.AnimationSourceList[0].ObjectID = ControllingClient.AgentID;
+            ani.Sender = new AvatarAnimationPacket.SenderBlock();
+            ani.Sender.ID = ControllingClient.AgentID;
+            ani.AnimationList = new AvatarAnimationPacket.AnimationListBlock[1];
+            ani.AnimationList[0] = new AvatarAnimationPacket.AnimationListBlock();
+            ani.AnimationList[0].AnimID = this.current_anim;
+            ani.AnimationList[0].AnimSequenceID = this.anim_seq;
+
+            //ControllingClient.OutPacket(ani);
+            foreach (SimClient client in m_clientThreads.Values)
+            {
+                client.OutPacket(ani);
+            }
+        }
+
+    }
+}
diff --git a/OpenSim.RegionServer/world/Primitive2.cs b/OpenSim.RegionServer/world/Primitive2.cs
index 87a1d65..4a19040 100644
--- a/OpenSim.RegionServer/world/Primitive2.cs
+++ b/OpenSim.RegionServer/world/Primitive2.cs
@@ -169,6 +169,72 @@ namespace OpenSim.world
 
         }
 
+        public void CreateFromPacket(ObjectAddPacket addPacket, LLUUID agentID, uint localID)
+        {
+            ObjectUpdatePacket objupdate = new ObjectUpdatePacket();
+            objupdate.RegionData.RegionHandle = m_regionHandle;
+            objupdate.RegionData.TimeDilation = 64096;
+
+            objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1];
+            PrimData PData = new PrimData();
+            this.primData = PData;
+            this.primData.CreationDate = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
+
+            objupdate.ObjectData[0] = new ObjectUpdatePacket.ObjectDataBlock();
+            objupdate.ObjectData[0].PSBlock = new byte[0];
+            objupdate.ObjectData[0].ExtraParams = new byte[1];
+            objupdate.ObjectData[0].MediaURL = new byte[0];
+            objupdate.ObjectData[0].NameValue = new byte[0];
+            objupdate.ObjectData[0].Text = new byte[0];
+            objupdate.ObjectData[0].TextColor = new byte[4];
+            objupdate.ObjectData[0].JointAxisOrAnchor = new LLVector3(0, 0, 0);
+            objupdate.ObjectData[0].JointPivot = new LLVector3(0, 0, 0);
+            objupdate.ObjectData[0].Material = 3;
+            objupdate.ObjectData[0].UpdateFlags = 32 + 65536 + 131072 + 256 + 4 + 8 + 2048 + 524288 + 268435456;
+            objupdate.ObjectData[0].TextureAnim = new byte[0];
+            objupdate.ObjectData[0].Sound = LLUUID.Zero;
+            LLObject.TextureEntry ntex = new LLObject.TextureEntry(new LLUUID("00000000-0000-0000-5005-000000000005"));
+            this.primData.Texture = objupdate.ObjectData[0].TextureEntry = ntex.ToBytes();
+            objupdate.ObjectData[0].State = 0;
+            objupdate.ObjectData[0].Data = new byte[0];
+            PData.OwnerID = objupdate.ObjectData[0].OwnerID = agentID;
+            PData.PCode = objupdate.ObjectData[0].PCode = addPacket.ObjectData.PCode;
+            PData.PathBegin = objupdate.ObjectData[0].PathBegin = addPacket.ObjectData.PathBegin;
+            PData.PathEnd = objupdate.ObjectData[0].PathEnd = addPacket.ObjectData.PathEnd;
+            PData.PathScaleX = objupdate.ObjectData[0].PathScaleX = addPacket.ObjectData.PathScaleX;
+            PData.PathScaleY = objupdate.ObjectData[0].PathScaleY = addPacket.ObjectData.PathScaleY;
+            PData.PathShearX = objupdate.ObjectData[0].PathShearX = addPacket.ObjectData.PathShearX;
+            PData.PathShearY = objupdate.ObjectData[0].PathShearY = addPacket.ObjectData.PathShearY;
+            PData.PathSkew = objupdate.ObjectData[0].PathSkew = addPacket.ObjectData.PathSkew;
+            PData.ProfileBegin = objupdate.ObjectData[0].ProfileBegin = addPacket.ObjectData.ProfileBegin;
+            PData.ProfileEnd = objupdate.ObjectData[0].ProfileEnd = addPacket.ObjectData.ProfileEnd;
+            PData.Scale = objupdate.ObjectData[0].Scale = addPacket.ObjectData.Scale;
+            PData.PathCurve = objupdate.ObjectData[0].PathCurve = addPacket.ObjectData.PathCurve;
+            PData.ProfileCurve = objupdate.ObjectData[0].ProfileCurve = addPacket.ObjectData.ProfileCurve;
+            PData.ParentID = objupdate.ObjectData[0].ParentID = 0;
+            PData.ProfileHollow = objupdate.ObjectData[0].ProfileHollow = addPacket.ObjectData.ProfileHollow;
+            PData.PathRadiusOffset = objupdate.ObjectData[0].PathRadiusOffset = addPacket.ObjectData.PathRadiusOffset;
+            PData.PathRevolutions = objupdate.ObjectData[0].PathRevolutions = addPacket.ObjectData.PathRevolutions;
+            PData.PathTaperX = objupdate.ObjectData[0].PathTaperX = addPacket.ObjectData.PathTaperX;
+            PData.PathTaperY = objupdate.ObjectData[0].PathTaperY = addPacket.ObjectData.PathTaperY;
+            PData.PathTwist = objupdate.ObjectData[0].PathTwist = addPacket.ObjectData.PathTwist;
+            PData.PathTwistBegin = objupdate.ObjectData[0].PathTwistBegin = addPacket.ObjectData.PathTwistBegin;
+            objupdate.ObjectData[0].ID = (uint)(localID);
+            objupdate.ObjectData[0].FullID = new LLUUID("edba7151-5857-acc5-b30b-f01efef" + (localID - 702000).ToString("00000"));
+            objupdate.ObjectData[0].ObjectData = new byte[60];
+            objupdate.ObjectData[0].ObjectData[46] = 128;
+            objupdate.ObjectData[0].ObjectData[47] = 63;
+            LLVector3 pos1 = addPacket.ObjectData.RayEnd;
+            //update position
+            byte[] pb = pos1.GetBytes();
+            Array.Copy(pb, 0, objupdate.ObjectData[0].ObjectData, 0, pb.Length);
+            //this.newPrimFlag = true;
+            this.primData.FullID = this.uuid = objupdate.ObjectData[0].FullID;
+            this.localid = objupdate.ObjectData[0].ID;
+            this.primData.Position = this.Pos = pos1;
+            this.OurPacket = objupdate;
+        }
+
         public void SendFullUpdateToClient(SimClient RemoteClient)
         {
 
diff --git a/OpenSim.RegionServer/world/World.cs b/OpenSim.RegionServer/world/World.cs
index b6f71aa..4661a90 100644
--- a/OpenSim.RegionServer/world/World.cs
+++ b/OpenSim.RegionServer/world/World.cs
@@ -21,6 +21,8 @@ namespace OpenSim.world
     {
         public object LockPhysicsEngine = new object();
         public Dictionary<libsecondlife.LLUUID, Entity> Entities;
+        public Dictionary<libsecondlife.LLUUID, Avatar> Avatars;
+        public Dictionary<libsecondlife.LLUUID, Primitive> Prims;
         public float[] LandMap;
         public ScriptEngine Scripts;
         public uint _localNumber = 0;
@@ -50,6 +52,8 @@ namespace OpenSim.world
 
             OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs - creating new entitities instance");
             Entities = new Dictionary<libsecondlife.LLUUID, Entity>();
+            Avatars = new Dictionary<LLUUID, Avatar>();
+            Prims = new Dictionary<LLUUID, Primitive>();
 
             OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs - creating LandMap");
             TerrainManager = new TerrainManager(new SecondLife());
diff --git a/OpenSim.sln b/OpenSim.sln
index c747832..01a2df2 100644
--- a/OpenSim.sln
+++ b/OpenSim.sln
@@ -1,5 +1,5 @@
 Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual Studio 2005
+# Visual C# Express 2005
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim", "OpenSim\OpenSim.csproj", "{438A9556-0000-0000-0000-000000000000}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Physics.OdePlugin", "OpenSim.Physics\OdePlugin\OpenSim.Physics.OdePlugin.csproj", "{63A05FE9-0000-0000-0000-000000000000}"
@@ -37,121 +37,85 @@ EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenGridServices.GridServer", "OpenGridServices.GridServer\OpenGridServices.GridServer.csproj", "{21BFC8E2-0000-0000-0000-000000000000}"
 EndProject
 Global
-  GlobalSection(SolutionConfigurationPlatforms) = preSolution
-    Debug|Any CPU = Debug|Any CPU
-    Release|Any CPU = Release|Any CPU
-  EndGlobalSection
-  GlobalSection(ProjectDependencies) = postSolution
-    ({438A9556-0000-0000-0000-000000000000}).5 = ({8ACA2445-0000-0000-0000-000000000000})
-    ({438A9556-0000-0000-0000-000000000000}).6 = ({A7CD0630-0000-0000-0000-000000000000})
-    ({438A9556-0000-0000-0000-000000000000}).7 = ({8BE16150-0000-0000-0000-000000000000})
-    ({438A9556-0000-0000-0000-000000000000}).8 = ({8BB20F0A-0000-0000-0000-000000000000})
-    ({438A9556-0000-0000-0000-000000000000}).9 = ({632E1BFD-0000-0000-0000-000000000000})
-    ({63A05FE9-0000-0000-0000-000000000000}).2 = ({8BE16150-0000-0000-0000-000000000000})
-    ({E88EF749-0000-0000-0000-000000000000}).2 = ({8ACA2445-0000-0000-0000-000000000000})
-    ({8BE16150-0000-0000-0000-000000000000}).3 = ({8ACA2445-0000-0000-0000-000000000000})
-    ({8BE16150-0000-0000-0000-000000000000}).4 = ({A7CD0630-0000-0000-0000-000000000000})
-    ({66591469-0000-0000-0000-000000000000}).3 = ({8ACA2445-0000-0000-0000-000000000000})
-    ({66591469-0000-0000-0000-000000000000}).4 = ({A7CD0630-0000-0000-0000-000000000000})
-    ({83C87BE6-0000-0000-0000-000000000000}).5 = ({8ACA2445-0000-0000-0000-000000000000})
-    ({83C87BE6-0000-0000-0000-000000000000}).6 = ({A7CD0630-0000-0000-0000-000000000000})
-    ({4F874463-0000-0000-0000-000000000000}).2 = ({8BE16150-0000-0000-0000-000000000000})
-    ({B0027747-0000-0000-0000-000000000000}).5 = ({8ACA2445-0000-0000-0000-000000000000})
-    ({B0027747-0000-0000-0000-000000000000}).6 = ({A7CD0630-0000-0000-0000-000000000000})
-    ({8BB20F0A-0000-0000-0000-000000000000}).2 = ({8ACA2445-0000-0000-0000-000000000000})
-    ({8BB20F0A-0000-0000-0000-000000000000}).3 = ({A7CD0630-0000-0000-0000-000000000000})
-    ({988F0AC4-0000-0000-0000-000000000000}).3 = ({8BE16150-0000-0000-0000-000000000000})
-    ({B55C0B5D-0000-0000-0000-000000000000}).3 = ({8ACA2445-0000-0000-0000-000000000000})
-    ({B55C0B5D-0000-0000-0000-000000000000}).4 = ({A7CD0630-0000-0000-0000-000000000000})
-    ({632E1BFD-0000-0000-0000-000000000000}).5 = ({8ACA2445-0000-0000-0000-000000000000})
-    ({632E1BFD-0000-0000-0000-000000000000}).6 = ({A7CD0630-0000-0000-0000-000000000000})
-    ({632E1BFD-0000-0000-0000-000000000000}).7 = ({E88EF749-0000-0000-0000-000000000000})
-    ({632E1BFD-0000-0000-0000-000000000000}).8 = ({8BE16150-0000-0000-0000-000000000000})
-    ({632E1BFD-0000-0000-0000-000000000000}).9 = ({8BB20F0A-0000-0000-0000-000000000000})
-    ({E1B79ECF-0000-0000-0000-000000000000}).4 = ({8ACA2445-0000-0000-0000-000000000000})
-    ({E1B79ECF-0000-0000-0000-000000000000}).5 = ({A7CD0630-0000-0000-0000-000000000000})
-    ({7E494328-0000-0000-0000-000000000000}).5 = ({8ACA2445-0000-0000-0000-000000000000})
-    ({7E494328-0000-0000-0000-000000000000}).6 = ({A7CD0630-0000-0000-0000-000000000000})
-    ({546099CD-0000-0000-0000-000000000000}).4 = ({8ACA2445-0000-0000-0000-000000000000})
-    ({546099CD-0000-0000-0000-000000000000}).5 = ({A7CD0630-0000-0000-0000-000000000000})
-    ({21BFC8E2-0000-0000-0000-000000000000}).3 = ({8ACA2445-0000-0000-0000-000000000000})
-    ({21BFC8E2-0000-0000-0000-000000000000}).4 = ({A7CD0630-0000-0000-0000-000000000000})
-  EndGlobalSection
-  GlobalSection(ProjectConfigurationPlatforms) = postSolution
-    {438A9556-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-    {438A9556-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
-    {438A9556-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
-    {438A9556-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
-    {63A05FE9-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-    {63A05FE9-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
-    {63A05FE9-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
-    {63A05FE9-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
-    {A7CD0630-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-    {A7CD0630-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
-    {A7CD0630-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
-    {A7CD0630-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
-    {E88EF749-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-    {E88EF749-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
-    {E88EF749-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
-    {E88EF749-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
-    {8BE16150-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-    {8BE16150-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
-    {8BE16150-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
-    {8BE16150-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
-    {66591469-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-    {66591469-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
-    {66591469-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
-    {66591469-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
-    {83C87BE6-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-    {83C87BE6-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
-    {83C87BE6-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
-    {83C87BE6-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
-    {4F874463-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-    {4F874463-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
-    {4F874463-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
-    {4F874463-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
-    {B0027747-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-    {B0027747-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
-    {B0027747-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
-    {B0027747-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
-    {8BB20F0A-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-    {8BB20F0A-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
-    {8BB20F0A-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
-    {8BB20F0A-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
-    {988F0AC4-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-    {988F0AC4-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
-    {988F0AC4-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
-    {988F0AC4-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
-    {B55C0B5D-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-    {B55C0B5D-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
-    {B55C0B5D-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
-    {B55C0B5D-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
-    {8ACA2445-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-    {8ACA2445-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
-    {8ACA2445-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
-    {8ACA2445-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
-    {632E1BFD-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-    {632E1BFD-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
-    {632E1BFD-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
-    {632E1BFD-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
-    {E1B79ECF-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-    {E1B79ECF-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
-    {E1B79ECF-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
-    {E1B79ECF-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
-    {7E494328-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-    {7E494328-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
-    {7E494328-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
-    {7E494328-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
-    {546099CD-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-    {546099CD-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
-    {546099CD-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
-    {546099CD-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
-    {21BFC8E2-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-    {21BFC8E2-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
-    {21BFC8E2-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
-    {21BFC8E2-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
-  EndGlobalSection
-  GlobalSection(SolutionProperties) = preSolution
-    HideSolutionNode = FALSE
-  EndGlobalSection
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{438A9556-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{438A9556-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{438A9556-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{438A9556-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
+		{63A05FE9-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{63A05FE9-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{63A05FE9-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{63A05FE9-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
+		{A7CD0630-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A7CD0630-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A7CD0630-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{A7CD0630-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E88EF749-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E88EF749-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E88EF749-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E88EF749-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
+		{8BE16150-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{8BE16150-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{8BE16150-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{8BE16150-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
+		{66591469-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{66591469-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{66591469-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{66591469-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
+		{83C87BE6-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{83C87BE6-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{83C87BE6-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{83C87BE6-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
+		{4F874463-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{4F874463-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{4F874463-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{4F874463-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
+		{B0027747-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B0027747-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B0027747-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{B0027747-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
+		{8BB20F0A-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{8BB20F0A-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{8BB20F0A-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{8BB20F0A-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
+		{988F0AC4-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{988F0AC4-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{988F0AC4-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{988F0AC4-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
+		{B55C0B5D-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B55C0B5D-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B55C0B5D-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{B55C0B5D-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
+		{8ACA2445-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{8ACA2445-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{8ACA2445-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{8ACA2445-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
+		{632E1BFD-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{632E1BFD-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{632E1BFD-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{632E1BFD-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E1B79ECF-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E1B79ECF-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E1B79ECF-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E1B79ECF-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
+		{7E494328-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{7E494328-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{7E494328-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{7E494328-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
+		{546099CD-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{546099CD-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{546099CD-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{546099CD-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
+		{21BFC8E2-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{21BFC8E2-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{21BFC8E2-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{21BFC8E2-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
 EndGlobal
-- 
cgit v1.1