cinvoke-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[cinvoke-svn] r116 - in trunk: . skorpion skorpion/assets skorpion/asset


From: will
Subject: [cinvoke-svn] r116 - in trunk: . skorpion skorpion/assets skorpion/assets/a1a skorpion/assets/skorpion skorpion/dedicated skorpion/server skorpion/server/game skorpion/server/network skorpion/server/universe
Date: 7 Nov 2006 16:30:45 -0500

Author: will
Date: 2006-11-07 16:30:44 -0500 (Tue, 07 Nov 2006)
New Revision: 116

Added:
   trunk/skorpion/
   trunk/skorpion/App.ico
   trunk/skorpion/AssemblyInfo.cs
   trunk/skorpion/Assets.cs
   trunk/skorpion/Chat.cs
   trunk/skorpion/Client.cs
   trunk/skorpion/Console.cs
   trunk/skorpion/Controller.cs
   trunk/skorpion/Form1.cs
   trunk/skorpion/Form1.resx
   trunk/skorpion/PlayerList.cs
   trunk/skorpion/assets/
   trunk/skorpion/assets/a1a/
   trunk/skorpion/assets/a1a/a1a.obj
   trunk/skorpion/assets/a1a/default.png
   trunk/skorpion/assets/skorpion/
   trunk/skorpion/assets/skorpion/default.jpg
   trunk/skorpion/assets/skorpion/skorpion.obj
   trunk/skorpion/assets/starmap.dds
   trunk/skorpion/dedicated/
   trunk/skorpion/dedicated/App.ico
   trunk/skorpion/dedicated/AssemblyInfo.cs
   trunk/skorpion/dedicated/MainClass.cs
   trunk/skorpion/dedicated/dedicated.csproj
   trunk/skorpion/server/
   trunk/skorpion/server/AssemblyInfo.cs
   trunk/skorpion/server/game/
   trunk/skorpion/server/game/Server.cs
   trunk/skorpion/server/network/
   trunk/skorpion/server/network/ACKQueue.cs
   trunk/skorpion/server/network/Client.cs
   trunk/skorpion/server/network/Parser.cs
   trunk/skorpion/server/network/Protocol.cs
   trunk/skorpion/server/network/Server.cs
   trunk/skorpion/server/server.csproj
   trunk/skorpion/server/universe/
   trunk/skorpion/server/universe/Entity.cs
   trunk/skorpion/server/universe/Log.cs
   trunk/skorpion/server/universe/Physics.cs
   trunk/skorpion/server/universe/Rules.cs
   trunk/skorpion/server/universe/Universe.cs
   trunk/skorpion/server/universe/Vector.cs
   trunk/skorpion/skorpion.cs
   trunk/skorpion/skorpion.csproj
   trunk/skorpion/skorpion.sln
Log:
adding skorp again


Added: trunk/skorpion/App.ico
===================================================================
(Binary files differ)


Property changes on: trunk/skorpion/App.ico
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/skorpion/AssemblyInfo.cs
===================================================================
--- trunk/skorpion/AssemblyInfo.cs                              (rev 0)
+++ trunk/skorpion/AssemblyInfo.cs      2006-11-07 21:30:44 UTC (rev 116)
@@ -0,0 +1,58 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+//
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+//
+[assembly: AssemblyTitle("")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]                
+
+//
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Revision and Build 
Numbers 
+// by using the '*' as shown below:
+
+[assembly: AssemblyVersion("1.0.*")]
+
+//
+// In order to sign your assembly you must specify a key to use. Refer to the 
+// Microsoft .NET Framework documentation for more information on assembly 
signing.
+//
+// Use the attributes below to control which key is used for signing. 
+//
+// Notes: 
+//   (*) If no key is specified, the assembly is not signed.
+//   (*) KeyName refers to a key that has been installed in the Crypto Service
+//       Provider (CSP) on your machine. KeyFile refers to a file which 
contains
+//       a key.
+//   (*) If the KeyFile and the KeyName values are both specified, the 
+//       following processing occurs:
+//       (1) If the KeyName can be found in the CSP, that key is used.
+//       (2) If the KeyName does not exist and the KeyFile does exist, the key 
+//           in the KeyFile is installed into the CSP and used.
+//   (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) 
utility.
+//       When specifying the KeyFile, the location of the KeyFile should be
+//       relative to the project output directory which is
+//       %Project Directory%\obj\<configuration>. For example, if your KeyFile 
is
+//       located in the project directory, you would specify the 
AssemblyKeyFile 
+//       attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
+//   (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
+//       documentation for more information on this.
+//
+[assembly: AssemblyDelaySign(false)]
+[assembly: AssemblyKeyFile("")]
+[assembly: AssemblyKeyName("")]

Added: trunk/skorpion/Assets.cs
===================================================================
--- trunk/skorpion/Assets.cs                            (rev 0)
+++ trunk/skorpion/Assets.cs    2006-11-07 21:30:44 UTC (rev 116)
@@ -0,0 +1,170 @@
+using System;
+using System.IO;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Collections;
+using Microsoft.DirectX;
+using Microsoft.DirectX.Direct3D;
+
+namespace skorpion 
+{
+       public class Assets 
+       {
+               private class DefinedAsset 
+               {
+                       public DefinedAsset() {}
+
+                       public VertexBuffer Vertex = null;
+               }
+               private class LoadedAsset 
+               {
+                       public LoadedAsset() {}
+
+                       public CustomVertex.PositionNormalTextured[] 
LoadedVertex = null;
+                       public int NumTriangles = -1;
+               }
+
+               private static Hashtable _definedassets = new Hashtable();
+               private static Hashtable _definedtextures = new Hashtable();
+               private static Hashtable _loadedassets = new Hashtable();
+               private static Hashtable _loadedtextures = new Hashtable();
+
+               public static void RenderAsset(Device iDevice, string 
assetname, string texturename) 
+               {
+                       DefinedAsset a = 
(DefinedAsset)_definedassets[assetname];
+                       if (a == null)
+                               throw new Exception("Asset " + assetname + " 
not found");
+                       LoadedAsset l = (LoadedAsset)_loadedassets[assetname];
+
+                       iDevice.SetTexture(0, 
(Texture)_definedtextures[texturename]);
+                       iDevice.SetStreamSource(0, a.Vertex, 0, 
CustomVertex.PositionNormalTextured.StrideSize);
+                       iDevice.DrawPrimitives(PrimitiveType.TriangleList, 0, 
l.NumTriangles);
+               }
+
+               public static void Reset() {
+                       _definedassets.Clear();
+                       _definedtextures.Clear();
+               }
+
+               public static void AddAsset(Device iDevice, string assetname, 
string texturename) 
+               {
+                       if (!_loadedassets.Contains(assetname))
+                               LoadAsset(assetname);
+                       if (!_loadedtextures.Contains(texturename))
+                               LoadTexture(assetname, texturename);
+                       DefineAsset(iDevice, assetname, 
(LoadedAsset)_loadedassets[assetname], texturename, 
(string)_loadedtextures[texturename]);
+               }
+
+               private static void DefineAsset(Device iDevice, string 
assetname, LoadedAsset loaded, string texturename, string texturefile) 
+               {
+                       if (!_definedtextures.Contains(texturename))
+                               _definedtextures[texturename] = 
TextureLoader.FromFile(iDevice, texturefile);
+                       if (!_definedassets.Contains(assetname)) {
+                               DefinedAsset ret = new DefinedAsset();
+
+                               VertexBuffer vert = new 
VertexBuffer(typeof(CustomVertex.PositionNormalTextured), 
loaded.LoadedVertex.Length, iDevice, Usage.WriteOnly, 
CustomVertex.PositionNormalTextured.Format, Pool.Default);
+                               CustomVertex.PositionNormalTextured[] v = 
(CustomVertex.PositionNormalTextured[])vert.Lock(0, 0);
+
+                               for (int i = 0; i < loaded.LoadedVertex.Length; 
i++)
+                                       v[i] = loaded.LoadedVertex[i];
+
+                               vert.Unlock();
+                               ret.Vertex = vert;
+
+                               _definedassets[assetname] = ret;
+                       }
+               }
+
+               private static void LoadAsset(string assetname) {
+                       LoadedAsset ret = new LoadedAsset();
+
+                       string dirname = @"assets\" + assetname;
+                       if (!Directory.Exists(dirname))
+                               throw new Exception("Directory " + dirname + " 
not found");
+
+                       LoadGeometry(dirname, assetname, ret);
+
+                       _loadedassets[assetname] = ret;
+               }
+
+               private static void LoadTexture(string assetname, string 
texturename) 
+               {
+                       string dirname = @"assets\" + assetname;
+                       if (!Directory.Exists(dirname))
+                               throw new Exception("Directory " + dirname + " 
not found");
+
+                       _loadedtextures[texturename] = FindTexture(dirname, 
texturename);
+               }
+
+               private static string FindTexture(string dirname, string 
texturename) {
+                       string wildcard = dirname + @"\" + texturename + ".";
+                       if (File.Exists(wildcard + "gif"))
+                               return wildcard + "gif";
+                       else if (File.Exists(wildcard + "tga"))
+                               return wildcard + "tga";
+                       else if (File.Exists(wildcard + "jpg"))
+                               return wildcard + "jpg";
+                       else if (File.Exists(wildcard + "png"))
+                               return wildcard + "png";
+                       else
+                               throw new Exception("Texture " + texturename + 
" not found in " + dirname);
+               }
+
+               private static void LoadGeometry(string dirname, string 
assetname, LoadedAsset ret) 
+               {
+                       string filename = dirname + @"\" + assetname + ".obj";
+                       if (!File.Exists(filename))
+                               throw new Exception("Geometry file " + filename 
+ " not found");
+
+                       ArrayList tempverts = new ArrayList();
+                       ArrayList temptex = new ArrayList();
+                       ArrayList tempnorms = new ArrayList();
+
+                       ArrayList all = new ArrayList();
+                       int numtriangles = 0;
+
+                       using (StreamReader reader = new StreamReader(filename, 
Encoding.ASCII)) 
+                       {
+                               string line;
+                               while ((line = reader.ReadLine()) != null) 
+                               {
+                                       if (line == string.Empty) continue;
+                                       if (line[0] == '#') continue;
+
+                                       string[] words = line.Split(' ');
+
+                                       if (words[0] == "v") {
+                                               tempverts.Add(new 
Vector3(Convert.ToSingle(words[1]), Convert.ToSingle(words[2]), 
Convert.ToSingle(words[3])));
+                                       } 
+                                       else if (words[0] == "vt") {
+                                               float f1 = 
Convert.ToSingle(words[1]);
+                                               float f2 = 
Convert.ToSingle(words[2]);
+                                               f2 = (1.0f - f2);
+                                               temptex.Add(new Vector2(f1, 
f2));
+                                       } else if (words[0] == "vn") {
+                                               tempnorms.Add(new 
Vector3(Convert.ToSingle(words[1]), Convert.ToSingle(words[2]), 
Convert.ToSingle(words[3])));
+                                       }
+                                       else if (words[0] == "f") {
+                                               for (int i = 1; i < 4; i++) {
+                                                       string[] comps = 
words[i].Split('/');
+                                                       int vertindex = 
Convert.ToInt16(comps[0]) - 1;
+                                                       int texindex = 
Convert.ToInt16(comps[1]) - 1;
+                                                       int normindex = 
Convert.ToInt16(comps[2]) - 1;
+
+                                                       
CustomVertex.PositionNormalTextured vert = new 
CustomVertex.PositionNormalTextured();
+                                                       
vert.SetPosition(ClientUtils.Vec((Vector3)tempverts[vertindex]));
+                                                       
vert.SetNormal(ClientUtils.Vec((Vector3)tempnorms[normindex]));
+                                                       vert.Tu = 
((Vector2)temptex[texindex]).X;
+                                                       vert.Tv = 
((Vector2)temptex[texindex]).Y;
+                                                       all.Add(vert);
+                                               }
+                                               numtriangles++;
+                                       }
+                               }
+                       }
+
+                       ret.NumTriangles = numtriangles;
+                       ret.LoadedVertex = 
(CustomVertex.PositionNormalTextured[])all.ToArray(typeof(CustomVertex.PositionNormalTextured));
+               }
+       }
+}

Added: trunk/skorpion/Chat.cs
===================================================================
--- trunk/skorpion/Chat.cs                              (rev 0)
+++ trunk/skorpion/Chat.cs      2006-11-07 21:30:44 UTC (rev 116)
@@ -0,0 +1,140 @@
+using System;
+using System.Collections;
+using System.Text;
+using System.Drawing;
+using System.Threading;
+using Microsoft.DirectX;
+using Microsoft.DirectX.Direct3D;
+
+namespace skorpion
+{
+       public class Chat
+       {
+               private enum ChatState
+               {
+                       Typing,
+                       NotTyping
+               }
+
+               public  bool                PassCommands              = false;
+
+               private bool                _debug                    = false;
+               private Mutex               _lock                     = null;
+               private static string       _prefix                   = ">";
+               private ChatState           _state                    = 
ChatState.NotTyping;
+               private DateTime            _stateChange;
+               private ArrayList           _entries                  = new 
ArrayList();
+               private StringBuilder       _entryLine                = new 
StringBuilder(_prefix);
+               private System.Drawing.Font _windowsFont              = new 
System.Drawing.Font("Arial", 8.0f);
+               private Device              _device;
+
+               private Microsoft.DirectX.Direct3D.Font _font;
+               private int                             _alpha        = 159;
+
+               public bool IsActive  { get { return _state == 
ChatState.Typing; } }
+               public int  LineHeight { get { return (int)_windowsFont.Size * 
2; } }
+
+               public Chat(bool debug)
+               {
+                       _debug = debug;
+                       if (_debug)
+                               _lock = new Mutex();
+               }
+
+               public void RestoreDeviceObjects(Device device)
+               {
+                       _device = device;
+                       _font   = new Microsoft.DirectX.Direct3D.Font(_device, 
_windowsFont);
+               }
+
+               public void Print(string text)
+               {
+                       if (_debug)
+                               _lock.WaitOne();
+
+                       _entries.Insert(0, text);
+                       while(_entries.Count > 50)
+                       {
+                               _entries.RemoveAt(49);
+                       }
+
+                       if (_debug)
+                               _lock.ReleaseMutex();
+               }
+
+               public void PrintFormat(string text, params object[] args)
+               {
+                       Print(string.Format(text, args));
+               }
+
+               public void PrintCharacterToEntryLine(char character)
+               {
+                       _entryLine.Append(character);
+               }
+
+               public void PrintStringToEntryLine(string text)
+               {
+                       _entryLine.Append(text);
+               }
+
+               public void Backspace()
+               {
+                       if (_entryLine.Length > 1)
+                               _entryLine.Remove(_entryLine.Length - 1, 1);
+               }
+
+               public void ProcessEntryLine()
+               {
+                       string text = _entryLine.ToString().Trim().Remove(0, 1);
+                       if(text.Length > 0)
+                               GlobalState.Command.Execute("rcon say " + text);
+       
+                       _entryLine = new StringBuilder(_prefix);
+               }
+
+               public void ToggleState()
+               {
+                       if (_state == ChatState.Typing)
+                               _state  = ChatState.NotTyping;
+                       else
+                       {
+                               _state = ChatState.Typing;
+                       }
+
+                       _stateChange = DateTime.Now;
+               }
+
+               public void Render()
+               {
+                       int   line    = GlobalState.Form.Height;
+                             line   -= 3 * this.LineHeight;
+
+                       // draw entry line
+                       Color r = Color.Red;
+                       int red = Color.FromArgb(_alpha, r.R, r.G, 
r.B).ToArgb();
+                       if(_state == ChatState.Typing)
+                       {
+                               _font.DrawText(_entryLine.ToString(), new 
System.Drawing.Rectangle(2, line, 0, 0), DrawTextFormat.None, red);
+                               line -= this.LineHeight;
+                       }
+                       if (_debug)
+                               _lock.WaitOne();
+
+                       // draw stored entries
+                       foreach(string entry in _entries)
+                       {
+                               if (line > GlobalState.Form.Height - 150)
+                               {
+                                       _font.DrawText(entry, new 
System.Drawing.Rectangle(2, line, 0, 0), DrawTextFormat.None, red);
+                                       line -= this.LineHeight;
+                               }
+                       }
+
+                       if (_debug)
+                               _lock.ReleaseMutex();
+
+                       _device.RenderState.Lighting = true;
+                       _device.RenderState.AlphaBlendEnable = false;
+               }
+       }
+}
\ No newline at end of file

Added: trunk/skorpion/Client.cs
===================================================================
--- trunk/skorpion/Client.cs                            (rev 0)
+++ trunk/skorpion/Client.cs    2006-11-07 21:30:44 UTC (rev 116)
@@ -0,0 +1,449 @@
+using System;
+using System.Collections;
+using Microsoft.DirectX;
+
+namespace skorpion
+{
+       public class ClientUtils {
+               public static Microsoft.DirectX.Vector3 Vec(Vector3 vec) {
+                       return new Microsoft.DirectX.Vector3(vec.X, vec.Y, 
vec.Z);
+               }
+               public static Vector3 Vec(Microsoft.DirectX.Vector3 vec) {
+                       return new Vector3(vec.X, vec.Y, vec.Z);
+               }
+       }
+
+       public class GameClient {
+               public Universe       Universe;
+               public NetClient      Net;
+               public bool           Ready;
+
+               public ushort         MyID;
+               public Ship           Me;
+               public TokenVelocity  MyVelocity;
+               public TokenVelocity  MyLastVelocity;
+               public DateTime       BurstBegin;
+
+               public DateTime       LastSent;
+               public DateTime       LastReceived;
+
+               public Pinger         Pinger;
+               public ushort         Ping;
+               public ushort         RefreshInterval;
+
+               public Hashtable      LastFrame  = new Hashtable();
+               public Hashtable      ThisFrame  = new Hashtable();
+               public Hashtable      NextFrame  = new Hashtable();
+
+               public PlayerInfo     LastPlayerInfo;
+
+               public class Collision
+               {
+                       public ushort   ID1;
+                       public ushort   ID2;
+                       public DateTime time;
+                       public Vector3  nd1; // new destination
+                       public Vector3  nd2;
+                       public Collision(ushort id1, ushort id2, DateTime t, 
Vector3 n1, Vector3 n2)
+                       { ID1=id1; ID2=id2; time=t; nd1=n1;nd2=n2; }
+               }
+               public ArrayList      Collisions = new ArrayList();
+               
+               public bool           HoldCamera;
+               public Vector3        LastOrientation;
+               public Vector3        LastUpDirection;
+
+               public GameClient(Universe u, NetClient n) {
+                       Universe     = u;
+                       Net          = n;
+                       Ready        = false;
+                       Me           = new Ship(0);
+                       LastSent     = DateTime.Now;
+                       LastReceived = DateTime.Now;
+                       Pinger       = new Pinger();
+               }
+
+               public void Run() {
+                       ArrayList msg = Net.communicate();
+
+                       if (Ready == false && msg.Count > 0) {
+                               // we just connected or got unlagged
+                               Ready = true;
+                               GlobalState.Console.Print("*** connected to " + 
Net.remote.Address.ToString());
+                       }
+                       else if (Ready == true && Net.Connected == false) {
+                               // net broke
+                               Ready = false;
+                               GlobalState.Console.Print("*** connection 
error");
+                       }
+                       else if (Ready == true && LastReceived < 
DateTime.Now.Subtract(ClientConfig.ClientGameTimeout)) {
+                               // timeout
+                               Ready = false;
+                               GlobalState.Console.Print("*** connection timed 
out");
+                       }
+
+                       for(int i=0; i<msg.Count; i++) {
+                               if (JoinAck.TYPE == ((GameMsg)msg[i]).Type) 
+                               {
+                                       JoinAck m = (JoinAck)msg[i];
+                                       Net.ACKQueue.ACK(m.ACK);
+
+                                       MyID = m.YouAreID;
+                                       if (!Universe.Entities.Contains(MyID))
+                                               Universe.Entities[MyID] = new 
Ship(MyID);
+
+                                       Ship universeMe = 
(Ship)Universe.Entities[MyID];
+                                       universeMe.Position    = 
m.ShipPos.GetVector();
+                                       universeMe.Orientation = 
m.ShipOrt.GetVector();
+                                       universeMe.UpDirection = 
m.ShipUp.GetVector();
+
+                                       Me.ID          = universeMe.ID;
+                                       Me.Position    = universeMe.Position;
+                                       Me.Orientation = universeMe.Orientation;
+                                       Me.UpDirection = universeMe.UpDirection;
+                               }
+                               else if (WorldRefresh.TYPE == 
((GameMsg)msg[i]).Type) 
+                               {
+                                       WorldRefresh m = (WorldRefresh)msg[i];
+                                       Universe.Entities.Clear();
+
+                                       for (int j=0; j<m.BallID.Length; j++) 
+                                       {
+                                               ushort id = m.BallID[j];
+                                               Universe.Entities[id] = new 
Ball(id);
+
+                                               Ball b     = 
(Ball)Universe.Entities[id];
+                                               b.Position = 
m.BallPos[j].GetVector();
+                                               b.Velocity = 
m.BallVel[j].GetVector();
+                                       }
+
+                                       for (ushort j=0; j<m.ShipID.Length; 
j++) 
+                                       {
+                                               ushort id = m.ShipID[j];
+                                               Universe.Entities[id] = new 
Ship(id);
+
+                                               Ship s        = 
(Ship)Universe.Entities[id];
+                                               s.Position    = 
m.ShipPos[j].GetVector();
+                                               s.Orientation = 
m.ShipOrt[j].GetVector();
+                                               s.UpDirection = 
m.ShipUp[j].GetVector();
+                                               s.Velocity    = 
m.ShipVel[j].GetVector();
+                                       }
+
+                                       Ship universeMe = 
(Ship)Universe.Entities[MyID];
+                                       if (universeMe != null) 
+                                       {
+                                               Me.Position = 
universeMe.Position;
+                                       }
+
+                                       Pinger.Receive(m.Ping, ref Ping);
+                                       RefreshInterval = 
(ushort)(DateTime.Now.Subtract(LastReceived)).TotalMilliseconds;
+                                       LastReceived = DateTime.Now;
+
+                                       if (ClientConfig.ClientPrediction) 
+                                       {
+                                               LastFrame = ThisFrame;
+                                               //                      
Universe.LastTime = LastReceived.Subtract(new TimeSpan(0,0,0,0,Ping));
+                                               //                      
Universe.Run();
+                                               NextFrame = Universe.Entities;
+
+                                               ThisFrame = new Hashtable();
+                                               // copy relevant rendering 
fields
+                                               foreach(DictionaryEntry de in 
NextFrame) 
+                                               {
+                                                       Entity e = null;
+                                                       if 
(((Entity)de.Value).Type == Ship.TYPE) 
+                                                       {
+                                                               Ship s = new 
Ship((ushort)de.Key);
+                                                               s.Orientation = 
((Ship)de.Value).Orientation;
+                                                               s.UpDirection = 
((Ship)de.Value).UpDirection;
+                                                               e = (Entity)s;
+                                                       }
+                                                       else // this could 
break stuff with objects other than ships
+                                                               e = new 
Entity((ushort)de.Key, ((Entity)de.Value).Type, ((Entity)de.Value).Radius, "", 
"");
+
+                                                       e.Position = 
((Entity)de.Value).Position;
+                                                       e.Active   = 
((Entity)de.Value).Active;
+
+                                                       ThisFrame[e.ID] = e;
+                                               }
+
+                                               Collisions.Clear();
+                                               // traverse in reverse time 
converting collision point to next destination
+                                               for (int 
j=m.CollidedTime.Length-1; j>=0; j--)
+                                               {
+                                                       Entity e1 = 
(Entity)NextFrame[m.Collided1[j]];
+                                                       Entity e2 = 
(Entity)NextFrame[m.Collided2[j]];
+                                                       if (e1 == null || e2 == 
null)
+                                                               continue;
+
+                                                       Collisions.Add(new 
Collision(e1.ID, e2.ID,
+                                                               
LastReceived.Add(new TimeSpan(0,0,0,0,m.CollidedTime[j]*10)),
+                                                               e1.Position, 
e2.Position));
+
+                                                       e1.Position = 
m.CollisionPoint1[i].GetVector();
+                                                       e2.Position = 
m.CollisionPoint2[i].GetVector();
+                                               }
+                                               Collisions.Reverse();
+                                       }
+                                       else 
+                                       {
+                                               ThisFrame = Universe.Entities;
+                                       }
+                               }
+                               else if (RconAck.TYPE == ((GameMsg)msg[i]).Type)
+                               {
+                                       RconAck m = (RconAck)msg[i];
+                                       Net.ACKQueue.ACK(m.ACK);
+                               }
+                               else if (DisplayReq.TYPE == 
((GameMsg)msg[i]).Type)
+                               {
+                                       DisplayReq m = (DisplayReq)msg[i];
+                                       Net.ACKQueue.ACK(m.Seq);
+
+                                       GlobalState.Console.Print(m.Message);
+                                       GlobalState.Chat.Print(m.Message);
+
+                                       DisplayAck r = new DisplayAck();
+                                       r.ACK = m.Seq;
+                                       r.Response = "Message Sent: " + m.Seq;
+                                       Net.send(r);
+                               }
+                               else if (PlayerInfo.TYPE == 
((GameMsg)msg[i]).Type)
+                               {
+                                       LastPlayerInfo = (PlayerInfo)msg[i];
+                                       
+                                       for(int playerIndex = 0; playerIndex < 
LastPlayerInfo.Name.Length; playerIndex++)
+                                       {
+                                               ushort id = 
LastPlayerInfo.ID[playerIndex];
+                                               Ship ship = 
(Ship)Universe.Players[id];
+                                               if(ship == null)
+                                               {
+                                                       ship = new Ship(id);
+                                                       Universe.Players[id] = 
ship;
+                                               }
+
+                                               ship.Name = 
LastPlayerInfo.Name[playerIndex];
+                                               ship.Ping = 
LastPlayerInfo.Ping[playerIndex];
+                                               ship.Team = 
LastPlayerInfo.Team[playerIndex];
+                                       }
+                               }
+                               else if (TeamAck.TYPE == ((GameMsg)msg[i]).Type)
+                               {
+                                       TeamAck teamAck = (TeamAck)msg[i];
+                                       System.Console.Out.WriteLine("DEBUG: 
team assignment to " + teamAck.Team + " received by client");
+                                       Net.ACKQueue.ACK(teamAck.ACK);
+                               }
+                       }
+
+                       // interpolate
+                       if (ClientConfig.ClientPrediction && Ready) {
+                               ushort t = 
(ushort)(DateTime.Now.Subtract(LastReceived)).TotalMilliseconds;
+                               
+                               // make this use iterators if its kept
+                               foreach(DictionaryEntry de in ThisFrame) {
+                                       if (!LastFrame.Contains(de.Key))
+                                               continue;
+
+                                       ((Entity)de.Value).Position  = 
((Entity)LastFrame[de.Key]).Position;
+                                       ((Entity)de.Value).Position +=
+                                               
(((Entity)NextFrame[de.Key]).Position - ((Entity)LastFrame[de.Key]).Position)
+                                               * ((float)t / 
(float)RefreshInterval);
+
+                                       if ((ushort)de.Key == MyID)
+                                       {
+                                               Me.Position = 
((Entity)de.Value).Position;
+                                               //if (Me.Position.X == 
float.NaN)
+                                               //      
System.Windows.Forms.MessageBox.Show("went nan");
+                                       }
+                               }
+
+                               while (Collisions.Count > 0 && 
((Collision)Collisions[0]).time <= DateTime.Now)
+                               {
+                                       Collision c = (Collision)Collisions[0];
+
+                                       Vector3 cd1 = 
((Entity)NextFrame[c.ID1]).Position;
+                                       Vector3 cd2 = 
((Entity)NextFrame[c.ID2]).Position;
+
+                                       ((Entity)LastFrame[c.ID1]).Position = 
cd1;
+                                       ((Entity)LastFrame[c.ID2]).Position = 
cd2;
+
+                                       ((Entity)NextFrame[c.ID1]).Position = 
c.nd1;
+                                       ((Entity)NextFrame[c.ID2]).Position = 
c.nd2;
+
+                                       Collisions.RemoveAt(0);
+                               }
+                       }
+               }
+
+               public void UpdateServer() {
+                       // this may eventually be sent to server, if not then, 
move this hack
+                       if (MyVelocity.rollLeft)
+                               this.rollLeft(GlobalState.KeyboardSensitivity);
+                       if (MyVelocity.rollRight)
+                               this.rollRight(GlobalState.KeyboardSensitivity);
+
+                       // continue with normal logic =)
+                       if (!Ready)
+                               return;
+
+                       // update whenver a button is pressed
+                       // but only do orientation updates perodically
+                       bool update = false;
+
+                       if (MyLastVelocity.NotEqual(MyVelocity)) {
+                               update = true;
+                               MyLastVelocity = MyVelocity;
+                       }
+                       else {
+                               DateTime refreshtime = 
DateTime.Now.Subtract(ClientConfig.ClientRefresh);
+                               if (LastSent < refreshtime)
+                                       update = true;
+                       }
+ 
+                       if (update) {
+                               PlayerRefresh m = new PlayerRefresh();
+                               m.ShipOrt.SetVector(Me.Orientation);
+                               m.ShipUp.SetVector(Me.UpDirection);
+                               
m.Velocity.SetVector(MyVelocity.Total(Me.Orientation, Me.UpDirection));
+                               m.Ping = Pinger.Send();
+
+                               Net.send(m);
+
+                               LastSent = DateTime.Now;
+                       }
+               }
+
+               public void burstStart(string s)
+               {
+                       BurstBegin = DateTime.Now;
+                       // LOG.debug("burstStart");
+               }
+
+               public void burstStop(string s)
+               {                       
+                       PlayerRefresh m = new PlayerRefresh();
+                       m.ShipOrt.SetVector(Me.Orientation);
+                       m.ShipUp.SetVector(Me.UpDirection);
+                       m.Velocity.SetVector(MyVelocity.Total(Me.Orientation, 
Me.UpDirection));
+                       m.Ping = Pinger.Send();
+
+                       int b = 
(int)(DateTime.Now.Subtract(BurstBegin)).TotalMilliseconds;
+                       if (b > 65535) b = 65535;
+                       m.Burst = (ushort)b;
+                       // LOG.debug("sent burst " + m.Burst + " " + b);
+
+                       Net.send(m);
+
+                       LastSent = DateTime.Now;
+               }
+
+               public struct TokenVelocity {
+                       public bool forward;
+                       public bool back;
+                       public bool left;
+                       public bool right;
+                       public bool up;
+                       public bool down;
+
+                       public bool rollLeft;  // not compared
+                       public bool rollRight; // not compared
+
+                       public bool NotEqual(TokenVelocity t) {
+                               if (forward != t.forward) return true;
+                               if (back    != t.back)    return true;
+                               if (left    != t.left)    return true;
+                               if (right   != t.right)   return true;
+                               if (up      != t.up)      return true;
+                               if (down    != t.down)    return true;
+                               return false;
+                       }
+
+                       public Vector3 Total(Vector3 ort, Vector3 u) {
+                               Vector3 ret = new Vector3(0,0,0);
+
+                               Vector3 r = Vector3.Cross(ort, u);
+                               r.Normalize();
+
+                               if (forward && !back)
+                                       ret += ort;
+                               if (back && !forward)
+                                       ret += ort * -1f;
+                               if (left && !right)
+                                       ret += r;
+                               if (right && !left)
+                                       ret += r   * -1f;
+                               if (up && !down)
+                                       ret += u;
+                               if (down && !up)
+                                       ret += u   * -1f;
+                               
+                               ret.Normalize();
+                               return ret;
+                       }
+               }
+
+               public void rollLeft(int delta) {
+                       Matrix rotation = 
Matrix.RotationAxis(ClientUtils.Vec(Me.Orientation), .001f * 
GlobalState.KeyboardSensitivity);
+                       Me.UpDirection = 
ClientUtils.Vec(Microsoft.DirectX.Vector3.TransformCoordinate(ClientUtils.Vec(Me.UpDirection),
 rotation));
+               }
+               
+               public void rollRight(int delta) {
+                       Matrix rotation = 
Matrix.RotationAxis(ClientUtils.Vec(Me.Orientation), -.001f * 
GlobalState.KeyboardSensitivity);
+                       Me.UpDirection = 
ClientUtils.Vec(Microsoft.DirectX.Vector3.TransformCoordinate(ClientUtils.Vec(Me.UpDirection),
 rotation));
+               }
+
+               public void pitchUp(int delta) {
+                       Vector3 right = Vector3.Cross(Me.Orientation, 
Me.UpDirection);
+                       right.Normalize();
+
+                       Matrix rotation = 
Matrix.RotationAxis(ClientUtils.Vec(right), (float)delta * 
-GlobalState.MouseSensitivity);
+                       Me.Orientation = 
ClientUtils.Vec(Microsoft.DirectX.Vector3.TransformCoordinate(ClientUtils.Vec(Me.Orientation),
 rotation));
+                       Me.UpDirection = 
ClientUtils.Vec(Microsoft.DirectX.Vector3.TransformCoordinate(ClientUtils.Vec(Me.UpDirection),
 rotation));
+               }
+               
+               public void pitchDown(int delta) {
+                       Vector3 right = Vector3.Cross(Me.Orientation, 
Me.UpDirection);
+                       right.Normalize();
+
+                       Matrix rotation = 
Matrix.RotationAxis(ClientUtils.Vec(right), (float)delta * 
GlobalState.MouseSensitivity);
+                       Me.Orientation = 
ClientUtils.Vec(Microsoft.DirectX.Vector3.TransformCoordinate(ClientUtils.Vec(Me.Orientation),
 rotation));
+                       Me.UpDirection = 
ClientUtils.Vec(Microsoft.DirectX.Vector3.TransformCoordinate(ClientUtils.Vec(Me.UpDirection),
 rotation));
+               }
+
+               public void yawLeft(int delta) {
+                       Matrix rotation = 
Matrix.RotationAxis(ClientUtils.Vec(Me.UpDirection), (float)delta * 
GlobalState.MouseSensitivity);
+                       Me.Orientation = 
ClientUtils.Vec(Microsoft.DirectX.Vector3.TransformCoordinate(ClientUtils.Vec(Me.Orientation),
 rotation));
+               }
+
+               public void yawRight(int delta) {
+                       Matrix rotation = 
Matrix.RotationAxis(ClientUtils.Vec(Me.UpDirection), (float)delta * 
-GlobalState.MouseSensitivity);
+                       Me.Orientation = 
ClientUtils.Vec(Microsoft.DirectX.Vector3.TransformCoordinate(ClientUtils.Vec(Me.Orientation),
 rotation));
+               }
+
+               public void moveForwardStart (string s) { MyVelocity.forward   
= true;  }
+               public void moveForwardStop  (string s) { MyVelocity.forward   
= false; }
+               public void moveBackwardStart(string s) { MyVelocity.back      
= true;  }
+               public void moveBackwardStop (string s) { MyVelocity.back      
= false; }
+               public void moveLeftStart    (string s) { MyVelocity.left      
= true;  }
+               public void moveLeftStop     (string s) { MyVelocity.left      
= false; }
+               public void moveRightStart   (string s) { MyVelocity.right     
= true;  }
+               public void moveRightStop    (string s) { MyVelocity.right     
= false; }
+               public void moveUpStart      (string s) { MyVelocity.up        
= true;  }
+               public void moveUpStop       (string s) { MyVelocity.up        
= false; }
+               public void moveDownStart    (string s) { MyVelocity.down      
= true;  }
+               public void moveDownStop     (string s) { MyVelocity.down      
= false; }
+               public void rollLeftStart    (string s) { MyVelocity.rollLeft  
= true;  }
+               public void rollLeftStop     (string s) { MyVelocity.rollLeft  
= false; }
+               public void rollRightStart   (string s) { MyVelocity.rollRight 
= true;  }
+               public void rollRightStop    (string s) { MyVelocity.rollRight 
= false; }
+
+               public void holdCameraStart  (string s)
+               {
+                       HoldCamera = true;
+                       LastOrientation = Me.Orientation;
+                       LastUpDirection = Me.UpDirection;
+               }
+               
+               public void holdCameraStop   (string s) { HoldCamera         = 
false; }
+       }
+}

Added: trunk/skorpion/Console.cs
===================================================================
--- trunk/skorpion/Console.cs                           (rev 0)
+++ trunk/skorpion/Console.cs   2006-11-07 21:30:44 UTC (rev 116)
@@ -0,0 +1,202 @@
+using System;
+using System.Collections;
+using System.Text;
+using System.Drawing;
+using System.Threading;
+using Microsoft.DirectX;
+using Microsoft.DirectX.Direct3D;
+
+namespace skorpion
+{
+       public class Console
+       {
+               private enum ConsoleState
+               {
+                       Closed,
+                       Closing,
+                       Opening,
+                       Open
+               }
+
+               public  bool                PassCommands              = false;
+
+               private bool                _debug                    = false;
+               private Mutex               _lock                     = null;
+               private static string       _prefix                   = ">";
+               private ConsoleState        _state                    = 
ConsoleState.Closed;
+               private DateTime            _stateChange;
+               private int                 _currentConsolePercentage = 0;
+               private int                 _maxConsolePercentage     = 30;
+               private ArrayList           _entries                  = new 
ArrayList();
+               private StringBuilder       _entryLine                = new 
StringBuilder(_prefix);
+               private System.Drawing.Font _windowsFont              = new 
System.Drawing.Font("Arial", 8.0f);
+               private Device              _device;
+
+               private Microsoft.DirectX.Direct3D.Font _font;
+               private VertexBuffer                    _rect;
+               private int                             _alpha        = 159;
+
+               public bool IsVisible  { get { return _state != 
ConsoleState.Closed; } }
+               public int  LineHeight { get { return (int)_windowsFont.Size * 
2; } }
+
+               public Console(bool debug)
+               {
+                       _debug = debug;
+                       if (_debug)
+                               _lock = new Mutex();
+               }
+
+               public void RestoreDeviceObjects(Device device)
+               {
+                       _device = device;
+                       _font   = new Microsoft.DirectX.Direct3D.Font(_device, 
_windowsFont);
+                       _rect   = new VertexBuffer(typeof(Skorpion.PCVertex), 
6, _device, Usage.WriteOnly, Skorpion.PCVertex.Format, Pool.Default);
+
+                       Skorpion.PCVertex[] v = 
(Skorpion.PCVertex[])_rect.Lock(0, 0);
+                       v[0].p = new Vector3(-1, 1,  0);
+                       v[1].p = new Vector3(-1, -1, 0);
+                       v[2].p = new Vector3( 1, -1, 0);
+                       v[3].p = new Vector3( 1, -1, 0);
+                       v[4].p = new Vector3( 1,  1, 0);
+                       v[5].p = new Vector3( -1, 1, 0);
+
+                       Color w = Color.White;
+                       int white = Color.FromArgb(_alpha, w.R, w.G, 
w.B).ToArgb();
+                       for (int i=0; i<6; i++)
+                               v[i].color = white;
+
+                       _rect.Unlock();
+               }
+
+               public void Print(string text)
+               {
+                       if (_debug)
+                               _lock.WaitOne();
+
+                       _entries.Insert(0, text);
+                       while(_entries.Count > 50)
+                       {
+                               _entries.RemoveAt(49);
+                       }
+
+                       if (_debug)
+                               _lock.ReleaseMutex();
+               }
+
+               public void PrintFormat(string text, params object[] args)
+               {
+                       Print(string.Format(text, args));
+               }
+
+               public void PrintCharacterToEntryLine(char character)
+               {
+                       _entryLine.Append(character);
+               }
+
+               public void PrintStringToEntryLine(string text)
+               {
+                       _entryLine.Append(text);
+               }
+
+               public void Backspace()
+               {
+                       if (_entryLine.Length > 1)
+                               _entryLine.Remove(_entryLine.Length - 1, 1);
+               }
+
+               public void ProcessEntryLine()
+               {
+                       string text = _entryLine.ToString().Trim().Remove(0, 1);
+                       GlobalState.Command.Execute(text);
+                       
+                       _entryLine = new StringBuilder(_prefix);
+               }
+
+               public void ToggleState()
+               {
+                       if (_state == ConsoleState.Closed || _state == 
ConsoleState.Closing)
+                               _state  = ConsoleState.Opening;
+                       else
+                       {
+                               PassCommands = false;
+                               _state = ConsoleState.Closing;
+                       }
+
+                       _stateChange = DateTime.Now;
+               }
+
+               public void Render()
+               {
+                       if (!IsVisible)
+                               return;
+
+                       // update console state
+                       if (_state == ConsoleState.Opening && 
_currentConsolePercentage <= _maxConsolePercentage)
+                       {
+                               _currentConsolePercentage = (int)(100.0 * 
(DateTime.Now.Subtract(_stateChange)).TotalMilliseconds / 
ClientConfig.ConsoleOpen.TotalMilliseconds);
+
+                               if (_currentConsolePercentage >= 
_maxConsolePercentage)
+                               {
+                                       _currentConsolePercentage = 
_maxConsolePercentage;
+                                       _state = ConsoleState.Open;
+                               }
+                       }
+                       else if (_state == ConsoleState.Closing && 
_currentConsolePercentage >= 0)
+                       {
+                               _currentConsolePercentage = 
_maxConsolePercentage - (int)(100.0 * 
(DateTime.Now.Subtract(_stateChange)).TotalMilliseconds / 
ClientConfig.ConsoleOpen.TotalMilliseconds);
+
+                               if (_currentConsolePercentage <= 0 )
+                               {
+                                       _currentConsolePercentage = 0;
+                                       _state = ConsoleState.Closed;
+                               }
+                       }
+               
+                       float visible = (float)_currentConsolePercentage / 
100.0f;
+                       int   line    = 
(int)(visible*(float)GlobalState.Form.Height);
+                             line   -= this.LineHeight + 
(int)((float)this.LineHeight / 2.0f);
+
+                       // draw background
+                       _device.RenderState.Lighting = false;
+                       _device.RenderState.AlphaBlendEnable = true;
+                       _device.RenderState.CullMode = Cull.Clockwise;
+                       _device.Transform.World      = Matrix.Identity;
+                       _device.Transform.View       = Matrix.Identity;
+                       _device.Transform.Projection = 
Matrix.Translation(0.0f,2.0f-2.0f*visible, 0.0f);
+                       _device.TextureState[0].ColorOperation = 
TextureOperation.SelectArg1;
+                       _device.TextureState[0].ColorArgument1 = 
TextureArgument.Diffuse;
+                       _device.TextureState[0].ColorArgument2 = 
TextureArgument.TextureColor;
+                       _device.TextureState[0].AlphaOperation = 
TextureOperation.SelectArg1;
+                       _device.TextureState[0].AlphaArgument1 = 
TextureArgument.Diffuse;
+                       _device.TextureState[0].AlphaArgument2 = 
TextureArgument.TextureColor;
+                       _device.VertexFormat = Skorpion.PCVertex.Format;
+                       _device.SetStreamSource(0, _rect, 0, 
Skorpion.PCVertex.StrideSize);
+                       _device.DrawPrimitives(PrimitiveType.TriangleList, 0, 
2);
+
+                       // draw entry line
+                       Color b = Color.Black;
+                       int black = Color.FromArgb(_alpha, b.R, b.G, 
b.B).ToArgb();
+                       _font.DrawText(_entryLine.ToString(), new 
System.Drawing.Rectangle(2, line, 0, 0), DrawTextFormat.None, black);
+                       line -= this.LineHeight;
+
+                       if (_debug)
+                               _lock.WaitOne();
+
+                       // draw stored entries
+                       foreach(string entry in _entries)
+                       {
+                               if (line > 5)
+                               {
+                                       _font.DrawText(entry, new 
System.Drawing.Rectangle(2, line, 0, 0), DrawTextFormat.ExpandTabs, black);
+                                       line -= this.LineHeight;
+                               }
+                       }
+
+                       if (_debug)
+                               _lock.ReleaseMutex();
+
+                       _device.RenderState.Lighting = true;
+                       _device.RenderState.AlphaBlendEnable = false;
+               }
+       }
+}
\ No newline at end of file

Added: trunk/skorpion/Controller.cs
===================================================================
--- trunk/skorpion/Controller.cs                                (rev 0)
+++ trunk/skorpion/Controller.cs        2006-11-07 21:30:44 UTC (rev 116)
@@ -0,0 +1,583 @@
+using System;
+using System.Windows.Forms;
+using System.Threading;
+using System.Collections;
+using Microsoft.DirectX;
+using Microsoft.DirectX.DirectInput;
+
+namespace skorpion
+{
+       public class Command
+       {
+               public Hashtable List = new Hashtable();
+
+               public delegate void CallBack(string s);
+
+               public Command(GameClient c)
+               {
+                       List["+forward"]    = new CallBack(c.moveForwardStart);
+                       List["-forward"]    = new CallBack(c.moveForwardStop);
+                       List["+back"]       = new CallBack(c.moveBackwardStart);
+                       List["-back"]       = new CallBack(c.moveBackwardStop);
+                       List["+left"]       = new CallBack(c.moveLeftStart);
+                       List["-left"]       = new CallBack(c.moveLeftStop);
+                       List["+right"]      = new CallBack(c.moveRightStart);
+                       List["-right"]      = new CallBack(c.moveRightStop);
+                       List["+up"]         = new CallBack(c.moveUpStart);
+                       List["-up"]         = new CallBack(c.moveUpStop);
+                       List["+down"]       = new CallBack(c.moveDownStart);
+                       List["-down"]       = new CallBack(c.moveDownStop);
+                       List["+holdcam"]    = new CallBack(c.holdCameraStart);
+                       List["-holdcam"]    = new CallBack(c.holdCameraStop);
+                       List["+rollLeft"]   = new CallBack(c.rollLeftStart);
+                       List["-rollLeft"]   = new CallBack(c.rollLeftStop);
+                       List["+rollRight"]  = new CallBack(c.rollRightStart);
+                       List["-rollRight"]  = new CallBack(c.rollRightStop);
+                       List["+burst"]      = new CallBack(c.burstStart);
+                       List["-burst"]      = new CallBack(c.burstStop);
+                       List["camera"]      = new CallBack(this.Camera);
+                       List["quit"]        = new CallBack(this.Quit);
+                       List["echo"]        = new CallBack(this.Echo);
+                       List["rcon"]        = new CallBack(this.Rcon);
+                       List["passcmds"]    = new CallBack(this.Passcmds);
+                       List["say"]         = new CallBack(this.Say);
+                       List["name"]        = new CallBack(this.Name);
+                       List["bind"]        = new CallBack(this.Bind);
+                       List["invert"]      = new CallBack(this.MouseInvert);
+                       List["sensitivity"] = new 
CallBack(this.MouseSensitivity);
+                       List["connect"]     = new CallBack(this.Connect);
+               }
+
+               public void Execute(string cmd)
+               {
+                       string args = "";
+
+                       int space = cmd.IndexOf(" ");
+                       if (space != -1)
+                       {
+                               args = cmd.Substring(space + 1);
+                               cmd  = cmd.Remove(space, cmd.Length - space);
+                       }
+
+                       CallBack c = (CallBack)List[cmd];
+                       if (c != null)
+                               c(args);
+               }
+
+               public void Camera(string s)
+               {
+                       int n = 0;
+                       try { n = int.Parse(s); } 
+                       catch { return; }
+                       if (n > 0 && n < 5)
+                               GlobalState.CamNum = n;
+               }
+
+               public void Quit(string s)
+               {
+                       ServerState.Live = false;
+               }
+
+               public void Echo(string s)
+               {
+                       GlobalState.Console.Print(s);
+               }
+
+               public void Rcon(string s)
+               {
+                       RconReq m = new RconReq();
+                       m.Cmd = s;
+
+                       GlobalState.Client.Net.ACKQueue.Add(m);
+               }
+
+               public void Passcmds(string s)
+               {
+                       if (GlobalState.Console.IsVisible)
+                       {
+                               GlobalState.Console.PassCommands = true;
+                               GlobalState.Console.Print("now passing 
commands");
+                       }
+               }
+
+               public void Say(string s)
+               {
+                       Rcon("say " + s);
+               }
+
+               public void Name(string s)
+               {
+                       Rcon("name " + s);
+               }
+
+               public void Bind(string s)
+               {
+                       if (s.Length > 0)
+                       {
+                               string key = "";
+                               string cmd = "";
+
+                               int space = s.IndexOf(" ");
+                               if (space != -1)
+                               {
+                                       cmd = s.Substring(space + 1);
+                                       key = s.Remove(space, s.Length - space);
+
+                                       if (GlobalState.Bind.Add(key, cmd))
+                                               GlobalState.Console.Print("*** 
bound " + key + " to " + cmd);
+                                       else
+                                               GlobalState.Console.Print("*** 
unknown control '" + key + "'");
+                               }
+                               else
+                               {
+                                       GlobalState.Console.Print("*** bind 
[control] [command]");
+                               }
+                       }
+                       else
+                       {
+                               foreach(DictionaryEntry de in 
GlobalState.Bind.List)
+                               {
+                                       string tabs = "              ";
+                                       tabs = tabs.Remove(0, 
((string)de.Key).Length);
+                                       
GlobalState.Console.Print((string)de.Key + tabs + "\t" + (string)de.Value);
+                               }
+                       }
+               }
+
+               public void MouseInvert(string s)
+               {
+                       GlobalState.Controller.InvertMouse *= -1;
+                       GlobalState.Console.Print("*** mouse invert is " + 
(GlobalState.Controller.InvertMouse < 0 ? "on" : "off"));
+               }
+
+               public void MouseSensitivity(string s)
+               {
+                       bool print = true;
+                       if (s.Length > 0)
+                       {
+                               try { GlobalState.MouseSensitivity = 
float.Parse(s); }
+                               catch
+                               {
+                                       GlobalState.Console.Print("*** 
sensitivity [float");
+                                       print = false;
+                               }
+                       }
+                       if (print)
+                               GlobalState.Console.Print("*** mouse 
sensitivity " + GlobalState.MouseSensitivity.ToString());
+               }
+
+               public void Connect(string s)
+               {
+                       if (s.Length > 0)
+                       {
+                               GlobalState.Client.Ready = false;
+                               if (GlobalState.Client.Net.connect(s, 
ServerConfig.DEFAULTPORT, ClientConfig.PlayerName, ClientConfig.Team))
+                                       GlobalState.Console.Print("*** 
connecting to " + s);
+                               else
+                                       GlobalState.Console.Print("*** connect 
to " + s + " failed");
+                       }
+                       else
+                               GlobalState.Console.Print("*** connect 
[server]");
+               }
+       }
+
+       public class Bind
+       {
+               public Hashtable List = new Hashtable();
+
+               public bool Add(string key, string bind)
+               {
+                       bool ret = true;
+                       try
+                       {
+                               List[Enum.Parse(typeof(Key), key, 
true).ToString()] = bind;
+                       }
+                       catch
+                       {
+                               if (key == "mouse1" || key == "mouse2" || key 
== "mouse3" || key == "mouse4" || key == "mouse5")
+                                       List[key] = bind;
+                               else
+                                       ret = false;
+                       }
+                       return ret;
+               }
+
+               public string Get(string k) { return (string)List[k]; }
+
+               public Bind()
+               {
+                       Add("w",           "+forward");
+                       Add("s",           "+back");
+                       Add("a",           "+left");
+                       Add("d",           "+right");
+                       Add("q",           "+down");
+                       Add("e",           "+up");
+                       Add("leftcontrol", "+holdcam");
+                       Add("leftshift",   "+rollLeft");
+                       Add("space",       "+rollRight");
+                       Add("f1",          "camera 1");
+                       Add("f2",          "camera 2");
+                       Add("f3",          "camera 3");
+                       Add("f4",          "camera 4");
+                       Add("mouse1",      "+burst");
+               }
+       }
+
+       public class Controller
+       {
+               public  int            InvertMouse = 1;
+
+               private Form           iControl;
+               private Device         iMouseDevice;
+               private Device         iKeyboardDevice;
+               private GameClient     iControllee;
+               private Hashtable      iKeys;
+               private ArrayList      iKeysPrune;
+               private byte[]         iButtons;
+               
+               public class KeyInfo
+               {
+                       public enum     State { DOWN, UP, DOWNSINCE };
+                       public State    state;
+                       public DateTime since; 
+
+                       public KeyInfo() { state=State.DOWN; 
since=DateTime.Now; }
+               }
+
+               public Controller(Form control, GameClient controllee)
+               {
+                       iKeys = new Hashtable();
+                       iKeysPrune = new ArrayList();
+                       iButtons = new byte[128];
+
+                       iControl = control;
+                       iControllee = controllee;
+                       
+                       iMouseDevice = new Device(SystemGuid.Mouse);
+                       this.releaseMouseFocus();
+
+                       iKeyboardDevice = new Device(SystemGuid.Keyboard);
+                       this.acquireKeyboard();
+               }
+
+               public void mouseInput()
+               {
+                       try
+                       {
+                               iMouseDevice.Poll();
+                       }
+                       catch(InputException)
+                       {
+                               return;
+                       }
+                       MouseState state = iMouseDevice.CurrentMouseState;
+
+                       byte[] b = state.GetMouseButtons();
+                       for (int i=0; i<b.Length; i++)
+                       {
+                               string s = GlobalState.Bind.Get("mouse" + 
(i+1).ToString());
+
+                               if (s == null)
+                                       continue;
+                               if (s[0] == '+')
+                               {
+                                       if (b[i] != 0 && iButtons[i] == 0)
+                                               GlobalState.Command.Execute(s);
+                                       else if (b[i] == 0 && iButtons[i] != 0)
+                                       {
+                                               s = s.Remove(0, 1).Insert(0, 
"-");
+                                               GlobalState.Command.Execute(s);
+                                       }
+                               }
+                               else
+                                       GlobalState.Command.Execute(s);
+                       }
+                       iButtons = b;
+
+                       if (state.X > 0)
+                               iControllee.yawLeft(state.X);
+                       else if (state.X < 0)
+                               iControllee.yawRight(-state.X);
+
+                       if (state.Y > 0)
+                               iControllee.pitchDown(state.Y*InvertMouse);
+                       else if (state.Y < 0)
+                               iControllee.pitchUp(-state.Y*InvertMouse);
+               }
+
+               public void keyboardInput()
+               {
+                       try
+                       {
+                               iKeyboardDevice.Poll();
+                       }
+                       catch(InputException)
+                       {
+                               return;
+                       }
+                       
+                       bool caps = false;
+                       Key[] keys = iKeyboardDevice.GetPressedKeys();
+                       foreach(Key key in keys)
+                       {
+                               KeyInfo k = (KeyInfo)iKeys[key];
+                               if (k != null)
+                                       k.state = KeyInfo.State.DOWNSINCE;
+                               else
+                                       iKeys[key]= new KeyInfo();
+
+                               if (key == Key.LeftShift || key == 
Key.RightShift || key == Key.CapsLock)
+                                       caps = !caps;
+                       }
+
+                       bool console = GlobalState.Console.IsVisible;
+                       bool passcmd = GlobalState.Console.PassCommands;
+                       bool chat = GlobalState.Chat.IsActive;
+                       bool playerlist = GlobalState.PlayerList.IsVisible;
+                       foreach(DictionaryEntry de in iKeys)
+                       {
+                               Key     key     = (Key    )de.Key;
+                               KeyInfo k       = (KeyInfo)de.Value;
+
+                               if (key == Key.Grave && k.state == 
KeyInfo.State.DOWN)
+                               {
+                                       GlobalState.Console.ToggleState();
+                               }
+                               else if (console && !passcmd && k.state != 
KeyInfo.State.UP)
+                               {
+                                       DateTime refresh = 
DateTime.Now.Subtract(ClientConfig.ClientKeyRepeat);
+                                       if (k.state == KeyInfo.State.DOWN || 
+                                               (k.state == 
KeyInfo.State.DOWNSINCE && k.since < refresh))
+                                       {
+                                               k.since = DateTime.Now;
+
+                                               if (key == Key.BackSpace)
+                                                       
GlobalState.Console.Backspace();
+                                               else if (key == Key.Return)
+                                                       
GlobalState.Console.ProcessEntryLine();
+                                               else
+                                               {
+                                                       char c = 
GetASCIIKey(key, caps);
+                                                       if (c != (char)0)
+                                                               
GlobalState.Console.PrintCharacterToEntryLine(c);
+                                               }
+                                       }
+                               }
+                               else if (key == Key.Tab)
+                               {
+                                       if((k.state == KeyInfo.State.DOWN && 
!playerlist)
+                                               || (k.state == KeyInfo.State.UP 
&& playerlist))
+                                               
GlobalState.PlayerList.ToggleState();
+                               }
+                               /*else if (playerlist && && k.state != 
KeyInfo.State.UP)
+                               {
+                                       DateTime refresh = 
DateTime.Now.Subtract(ClientConfig.ClientKeyRepeat);
+                                       if (k.state == KeyInfo.State.DOWN || 
+                                               (k.state == 
KeyInfo.State.DOWNSINCE && k.since < refresh))
+                                       {
+                                               k.since = DateTime.Now;
+
+                                               if (key == Key.BackSpace)
+                                                       
GlobalState.Console.Backspace();
+                                               else if (key == Key.Return)
+                                                       
GlobalState.Console.ProcessEntryLine();
+                                               else
+                                               {
+                                                       char c = 
GetASCIIKey(key, caps);
+                                                       if (c != (char)0)
+                                                               
GlobalState.Console.PrintCharacterToEntryLine(c);
+                                               }
+                                       }
+                               }*/
+                               else if (key == Key.Period && k.state == 
KeyInfo.State.DOWN && !chat)
+                               {
+                                       GlobalState.Chat.ToggleState();
+                               }
+                               else if (chat && k.state != KeyInfo.State.UP)
+                               {
+                                       // add this to chat input
+                                       DateTime refresh = 
DateTime.Now.Subtract(ClientConfig.ClientKeyRepeat);
+                                       if (k.state == KeyInfo.State.DOWN || 
+                                               (k.state == 
KeyInfo.State.DOWNSINCE && k.since < refresh))
+                                       {
+                                               k.since = DateTime.Now;
+
+                                               if (key == Key.BackSpace)
+                                                       
GlobalState.Chat.Backspace();
+                                               else if(key == Key.Return)
+                                               {
+                                                       
GlobalState.Chat.ProcessEntryLine();
+                                                       
GlobalState.Chat.ToggleState();
+                                               }
+                                               else
+                                               {
+                                                       char c = 
GetASCIIKey(key, caps);
+                                                       if (c != (char)0)
+                                                               
GlobalState.Chat.PrintCharacterToEntryLine(c);
+                                               }
+                                       }
+                               }
+                               else if (k.state != KeyInfo.State.DOWNSINCE)
+                               {
+                                       string s = 
GlobalState.Bind.Get(key.ToString());
+                                       if (s != null)
+                                       {
+                                               if (KeyInfo.State.UP == k.state 
&& s[0] == '+')
+                                               {
+                                                       s = s.Remove(0, 
1).Insert(0, "-");
+                                                       
GlobalState.Command.Execute(s);
+                                               }
+                                               else
+                                               {
+                                                       
GlobalState.Command.Execute(s);
+                                               }
+                                       }
+                               }
+                               if (k.state == KeyInfo.State.UP)
+                                       iKeysPrune.Add(key);
+                               else
+                                       k.state = KeyInfo.State.UP;
+                       }
+
+                       foreach (Key key in iKeysPrune)
+                               iKeys.Remove(key);
+
+                       iKeysPrune.Clear();
+               }
+
+               public void acquireControls()
+               {
+                       this.acquireMouse();
+                       this.acquireKeyboard();
+               }
+
+               public void acquireMouse()
+               {
+                       if (null != iMouseDevice)
+                       {
+                               try{iMouseDevice.Acquire();}
+                               catch{}
+                       }
+               }
+
+               public void acquireKeyboard()
+               {
+                       if (null != iKeyboardDevice)
+                       {
+                               try{iKeyboardDevice.Acquire();}
+                               catch{}
+                       }
+               }
+
+               public void takeMouseFocus()
+               {
+                       iMouseDevice.Unacquire();
+                       iMouseDevice.SetCooperativeLevel(iControl,
+                               CooperativeLevelFlags.Exclusive | 
CooperativeLevelFlags.Foreground);
+
+                       this.acquireMouse();
+               }
+
+               public void releaseMouseFocus()
+               {
+                       iMouseDevice.Unacquire();
+                       iMouseDevice.SetCooperativeLevel(iControl,
+                               CooperativeLevelFlags.NonExclusive | 
CooperativeLevelFlags.Foreground);
+
+                       this.acquireMouse();
+               }
+
+               public static char GetASCIIKey(Key key, bool caps)
+               {
+                       switch(key)
+                       {
+                               case Key.A:
+                                       return caps ? 'A' : 'a';
+                               case Key.B:
+                                       return caps ? 'B' : 'b';
+                               case Key.C:
+                                       return caps ? 'C' : 'c';
+                               case Key.D:
+                                       return caps ? 'D' : 'd';
+                               case Key.E:
+                                       return caps ? 'E' : 'e';
+                               case Key.F:
+                                       return caps ? 'F' : 'f';
+                               case Key.G:
+                                       return caps ? 'G' : 'g';
+                               case Key.H:
+                                       return caps ? 'H' : 'h';
+                               case Key.I:
+                                       return caps ? 'I' : 'i';
+                               case Key.J:
+                                       return caps ? 'J' : 'j';
+                               case Key.K:
+                                       return caps ? 'K' : 'k';
+                               case Key.L:
+                                       return caps ? 'L' : 'l';
+                               case Key.M:
+                                       return caps ? 'M' : 'm';
+                               case Key.N:
+                                       return caps ? 'N' : 'n';
+                               case Key.O:
+                                       return caps ? 'O' : 'o';
+                               case Key.P:
+                                       return caps ? 'P' : 'p';
+                               case Key.Q:
+                                       return caps ? 'Q' : 'q';
+                               case Key.R:
+                                       return caps ? 'R' : 'r';
+                               case Key.S:
+                                       return caps ? 'S' : 's';
+                               case Key.T:
+                                       return caps ? 'T' : 't';
+                               case Key.U:
+                                       return caps ? 'U' : 'u';
+                               case Key.V:
+                                       return caps ? 'V' : 'v';
+                               case Key.W:
+                                       return caps ? 'W' : 'w';
+                               case Key.X:
+                                       return caps ? 'X' : 'x';
+                               case Key.Y:
+                                       return caps ? 'Y' : 'y';
+                               case Key.Z:
+                                       return caps ? 'Z' : 'z';
+                               case Key.D0:
+                                       return caps ? '(' : '0';
+                               case Key.D1:
+                                       return caps ? '!' : '1';
+                               case Key.D2:
+                                       return caps ? '@' : '2';
+                               case Key.D3:
+                                       return caps ? '#' : '3';
+                               case Key.D4:
+                                       return caps ? '$' : '4';
+                               case Key.D5:
+                                       return caps ? '%' : '5';
+                               case Key.D6:
+                                       return caps ? '^' : '6';
+                               case Key.D7:
+                                       return caps ? '&' : '7';
+                               case Key.D8:
+                                       return caps ? '*' : '8';
+                               case Key.D9:
+                                       return caps ? '(' : '9';
+                               case Key.Space:
+                                       return ' ';
+                               case Key.Period:
+                                       return caps ? '>' : '.';
+                               case Key.Comma:
+                                       return caps ? '<' : ',';
+                               case Key.Slash:
+                                       return caps ? '?' : '/';
+                               case Key.Minus:
+                                       return caps ? '_' : '-';
+                               case Key.Equals:
+                                       return caps ? '+' : '=';
+                               default:
+                                       return (char)0;
+                       }
+               }
+       }
+}
\ No newline at end of file

Added: trunk/skorpion/Form1.cs
===================================================================
--- trunk/skorpion/Form1.cs                             (rev 0)
+++ trunk/skorpion/Form1.cs     2006-11-07 21:30:44 UTC (rev 116)
@@ -0,0 +1,181 @@
+using System;
+using System.Drawing;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+using System.Data;
+using System.IO;
+using System.Threading;
+
+namespace skorpion
+{
+       public class Form1 : System.Windows.Forms.Form
+       {
+               /// <summary>
+               /// Required designer variable.
+               /// </summary>
+               private System.ComponentModel.Container components = null;
+
+               public Form1()
+               {
+                       InitializeComponent();
+               }
+
+               protected override void Dispose( bool disposing )
+               {
+                       if( disposing )
+                       {
+                               if (components != null) 
+                               {
+                                       components.Dispose();
+                               }
+                       }
+                       base.Dispose( disposing );
+               }
+
+               #region Windows Form Designer generated code
+               /// <summary>
+               /// Required method for Designer support - do not modify
+               /// the contents of this method with the code editor.
+               /// </summary>
+               private void InitializeComponent()
+               {
+                       // 
+                       // Form1
+                       // 
+                       this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
+                       this.ClientSize = new System.Drawing.Size(720, 509);
+                       this.Name = "Form1";
+                       this.Text = "Form1";
+
+               }
+               #endregion
+
+               private void OnClosing(object sender, CancelEventArgs cea)
+               {
+                       ServerState.Live = false;
+                       cea.Cancel = true;
+               }
+
+               void OnResize(object sender, System.EventArgs e)
+               {
+                       GlobalState.Pause = ((this.WindowState == 
FormWindowState.Minimized) || !this.Visible);
+               }
+
+               void OnKeyPress(object sender, 
System.Windows.Forms.KeyPressEventArgs e)
+               {
+                       switch ((int)(byte)e.KeyChar)
+                       {
+                               case (int)System.Windows.Forms.Keys.Escape: 
+                                       ServerState.Live = false;
+                                       break;
+                       }
+               }
+
+               private void OnKeyDown(object sender, 
System.Windows.Forms.KeyEventArgs e)
+               {
+                       if (GlobalState.Controller == null)
+                               return;
+
+                       switch ((int)(byte)e.KeyCode)
+                       {
+                               case (int)System.Windows.Forms.Keys.Enter:
+                                       
GlobalState.Controller.releaseMouseFocus();
+                                       break;
+                       }                       
+               }
+
+               private void OnClick(object sender, System.EventArgs e)
+               {
+                       if (GlobalState.Controller == null)
+                               return;
+
+                       GlobalState.Controller.takeMouseFocus();                
+               }
+
+               [STAThread]
+               static void Main() 
+               {
+                       new Form1().go();
+                       Application.Exit();
+               }
+
+               bool TestDX()
+               {
+                       bool ret = true;
+                       try
+                       {
+                               Microsoft.DirectX.Vector3 TEST_DX = new 
Microsoft.DirectX.Vector3(0,0,0);
+                               TEST_DX.Normalize();
+                       }
+                       catch(Exception e)
+                       {
+                               ret = false;
+                               System.Windows.Forms.MessageBox.Show("DX 
runtime not found: " + e.ToString());
+                       }
+                       return ret;
+               }
+
+               void go()
+               {
+                       if (!TestDX())
+                               return;
+
+                       GlobalState.Form = this;
+
+                       // skorpion expects ./assets
+                       string dirname = 
Path.GetFileName(Directory.GetCurrentDirectory());
+                       if (dirname == "Debug" || dirname == "Release")
+                               Environment.CurrentDirectory = 
Environment.CurrentDirectory + @"\..\..";
+
+                       // bind the log callback before starting server if 
we're gonna start client
+                       if (ClientConfig.ClientStart)
+                       {
+                               // in debug case we create a mutex and
+                               // display messages from server thread in 
console
+                               GlobalState.Console = new 
Console(ClientConfig.Debug);
+                               if (ClientConfig.Debug)
+                               {
+                                       LOG.Callback = new 
LOG.CallBack(GlobalState.Console.Print);
+                                       LOG.level    = LOG.Level.DEBUG;
+                               }
+                               GlobalState.Chat = new Chat(ClientConfig.Debug);
+                               GlobalState.PlayerList = new 
PlayerList(ClientConfig.Debug);
+                       }
+
+                       if (ClientConfig.ServerStart)
+                       {
+                               ServerState.NetServer = new 
NetServer(ClientConfig.ClientPort, new GameServer(new Universe()));
+                               Thread t = new Thread(new 
ThreadStart(ServerState.NetServer.Start));
+                               t.Start();
+                       }
+                       
+                       this.Text       = "Sk0rpion";
+                       this.ClientSize = new 
System.Drawing.Size(ClientConfig.FormWidth, ClientConfig.FormHeight);
+                       this.Closing   += new 
CancelEventHandler(this.OnClosing);
+                       this.Resize    += new EventHandler(this.OnResize);
+                       this.KeyPress  += new 
KeyPressEventHandler(this.OnKeyPress);
+                       this.KeyDown   += new KeyEventHandler(this.OnKeyDown);
+                       this.Click     += new System.EventHandler(this.OnClick);
+                       this.Show();
+
+                       if (ClientConfig.ClientStart)
+                       {
+                               GlobalState.Bind = new Bind();
+                               GlobalState.Client = new GameClient(new 
Universe(), new NetClient(ClientConfig.ClientNetTimeout, 
ClientConfig.ClientACKRetry));
+                               GlobalState.Command = new 
Command(GlobalState.Client);
+                               GlobalState.Controller = new Controller(this, 
GlobalState.Client);
+                               GlobalState.Skorpion = new Skorpion();
+                               GlobalState.Skorpion.go();
+                       }
+                       else
+                       {
+                               while(ServerState.Live)
+                               {
+                                       Application.DoEvents();
+                                       System.Threading.Thread.Sleep(10);
+                               }
+                       }
+               }
+       }
+}

Added: trunk/skorpion/Form1.resx
===================================================================
--- trunk/skorpion/Form1.resx                           (rev 0)
+++ trunk/skorpion/Form1.resx   2006-11-07 21:30:44 UTC (rev 116)
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 1.3
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">1.3</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, 
System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, 
System.Windows.Forms, ...</resheader>
+    <data name="Name1">this is my long string</data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" 
mimetype="application/x-microsoft.net.object.binary.base64">
+        [base64 mime encoded serialized .NET Framework object]
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" 
mimetype="application/x-microsoft.net.object.bytearray.base64">
+        [base64 mime encoded string representing a byte array form of the .NET 
Framework object]
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used forserialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" 
msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" 
msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" 
/>
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" 
/>
+              <xsd:attribute name="mimetype" type="xsd:string" 
msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" 
msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>1.3</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, 
Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, 
Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="$this.Locked" type="System.Boolean, mscorlib, 
Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </data>
+  <data name="$this.Language" type="System.Globalization.CultureInfo, 
mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>(Default)</value>
+  </data>
+  <data name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, 
Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </data>
+  <data name="$this.Localizable" type="System.Boolean, mscorlib, 
Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </data>
+  <data name="$this.GridSize" type="System.Drawing.Size, System.Drawing, 
Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>8, 8</value>
+  </data>
+  <data name="$this.DrawGrid" type="System.Boolean, mscorlib, 
Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </data>
+  <data name="$this.TrayHeight" type="System.Int32, mscorlib, 
Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>80</value>
+  </data>
+  <data name="$this.Name">
+    <value>Form1</value>
+  </data>
+  <data name="$this.SnapToGrid" type="System.Boolean, mscorlib, 
Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </data>
+  <data name="$this.DefaultModifiers" type="System.CodeDom.MemberAttributes, 
System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>Private</value>
+  </data>
+</root>
\ No newline at end of file

Added: trunk/skorpion/PlayerList.cs
===================================================================
--- trunk/skorpion/PlayerList.cs                                (rev 0)
+++ trunk/skorpion/PlayerList.cs        2006-11-07 21:30:44 UTC (rev 116)
@@ -0,0 +1,162 @@
+using System;
+using System.Collections;
+using System.Text;
+using System.Drawing;
+using System.Threading;
+using Microsoft.DirectX;
+using Microsoft.DirectX.Direct3D;
+
+namespace skorpion
+{
+       public class PlayerList
+       {
+               private enum PlayerListState
+               {
+                       Closed,
+                       Open
+               }
+
+               public  bool                PassCommands              = false;
+
+               private bool                _debug                    = false;
+               private Mutex               _lock                     = null;
+               private static string       _prefix                   = ">";
+               private PlayerListState        _state                    = 
PlayerListState.Closed;
+               private DateTime            _stateChange;
+               private StringBuilder       _entryLine                = new 
StringBuilder(_prefix);
+               private System.Drawing.Font _windowsFont              = new 
System.Drawing.Font("Arial", 14.0f);
+               private Device              _device;
+               private int                 _topMargin                = 150;
+               private int                 _leftMargin               = 200;
+
+               private Microsoft.DirectX.Direct3D.Font _font;
+               private VertexBuffer                    _rect;
+               private int                             _alpha        = 159;
+
+               public bool IsVisible  { get { return _state != 
PlayerListState.Closed; } }
+               public int  LineHeight { get { return (int)_windowsFont.Size * 
2; } }
+
+               public PlayerList(bool debug)
+               {
+                       _debug = debug;
+                       if (_debug)
+                               _lock = new Mutex();
+               }
+
+               public void RestoreDeviceObjects(Device device)
+               {
+                       _device = device;
+                       _font   = new Microsoft.DirectX.Direct3D.Font(_device, 
_windowsFont);
+                       _rect   = new VertexBuffer(typeof(Skorpion.PCVertex), 
6, _device, Usage.WriteOnly, Skorpion.PCVertex.Format, Pool.Default);
+
+                       Skorpion.PCVertex[] v = 
(Skorpion.PCVertex[])_rect.Lock(0, 0);
+                       v[0].p = new Vector3(-.5f, .5f,  0);
+                       v[1].p = new Vector3(-.5f, -.5f, 0);
+                       v[2].p = new Vector3( .5f, -.5f, 0);
+                       v[3].p = new Vector3( .5f, -.5f, 0);
+                       v[4].p = new Vector3( .5f,  .5f, 0);
+                       v[5].p = new Vector3( -.5f, .5f, 0);
+
+                       Color w = Color.Gray;
+                       int white = Color.FromArgb(_alpha, w.R, w.G, 
w.B).ToArgb();
+                       for (int i=0; i<6; i++)
+                               v[i].color = white;
+
+                       _rect.Unlock();
+               }
+
+               public void ToggleState()
+               {
+                       if (_state == PlayerListState.Closed)
+                               _state  = PlayerListState.Open;
+                       else
+                       {
+                               PassCommands = false;
+                               _state = PlayerListState.Closed;
+                       }
+
+                       _stateChange = DateTime.Now;
+               }
+
+               public void Render()
+               {
+                       if (!IsVisible)
+                               return;
+               
+                       int   line    = _topMargin;
+
+                       // draw background
+                       _device.RenderState.Lighting = false;
+                       _device.RenderState.AlphaBlendEnable = true;
+                       _device.RenderState.CullMode = Cull.Clockwise;
+                       _device.Transform.World      = Matrix.Identity;
+                       _device.Transform.View       = Matrix.Identity;
+                       _device.Transform.Projection = Matrix.Identity;
+                       _device.TextureState[0].ColorOperation = 
TextureOperation.SelectArg1;
+                       _device.TextureState[0].ColorArgument1 = 
TextureArgument.Diffuse;
+                       _device.TextureState[0].ColorArgument2 = 
TextureArgument.TextureColor;
+                       _device.TextureState[0].AlphaOperation = 
TextureOperation.SelectArg1;
+                       _device.TextureState[0].AlphaArgument1 = 
TextureArgument.Diffuse;
+                       _device.TextureState[0].AlphaArgument2 = 
TextureArgument.TextureColor;
+                       _device.VertexFormat = Skorpion.PCVertex.Format;
+                       _device.SetStreamSource(0, _rect, 0, 
Skorpion.PCVertex.StrideSize);
+                       _device.DrawPrimitives(PrimitiveType.TriangleList, 0, 
2);
+
+                       Color b = Color.Black;
+                       int black = Color.FromArgb(_alpha, b.R, b.G, 
b.B).ToArgb();
+
+                       if (_debug)
+                               _lock.WaitOne();
+
+                       _font.DrawText(":SupeR Sk0rp1on B4LL 6oo6:", new 
System.Drawing.Rectangle(_leftMargin+60, line, 0, 0), 
DrawTextFormat.ExpandTabs, black);
+                       line += this.LineHeight;
+
+                       _font.DrawText("Team 1: silver", new 
System.Drawing.Rectangle(_leftMargin+140, line, 0, 0), 
DrawTextFormat.ExpandTabs, black);
+                       line += this.LineHeight;
+                       _font.DrawText("name     ping", new 
System.Drawing.Rectangle(_leftMargin+10, line, 0, 0), 
DrawTextFormat.ExpandTabs, black);
+                       line += this.LineHeight;
+
+                       // draw team 1 entries
+                       foreach(Entity e in 
GlobalState.Client.Universe.Players.Values)
+                       {
+                               if (e.Type == Ship.TYPE)
+                               {
+                                       Ship ship = (Ship)e;
+                                       if(ship.Team == 1)
+                                       {
+                                               string playerLine = ship.Name + 
"     " + ship.Ping;
+                                               _font.DrawText(playerLine, new 
System.Drawing.Rectangle(_leftMargin+10, line, 0, 0), 
DrawTextFormat.ExpandTabs, black);
+                                               line += this.LineHeight;
+                                       }
+                               }
+                       }
+
+                       line += this.LineHeight;
+                       _font.DrawText("Team 2: ontario", new 
System.Drawing.Rectangle(_leftMargin+135, line, 0, 0), 
DrawTextFormat.ExpandTabs, black);
+                       line += this.LineHeight;
+                       _font.DrawText("name     ping", new 
System.Drawing.Rectangle(_leftMargin+10, line, 0, 0), 
DrawTextFormat.ExpandTabs, black);
+                       line += this.LineHeight;
+
+                       // draw team 2 entries
+                       foreach(Entity e in 
GlobalState.Client.Universe.Players.Values)
+                       {
+                               if (e.Type == Ship.TYPE)
+                               {
+                                       Ship ship = (Ship)e;
+                                       if(ship.Team == 2)
+                                       {
+                                               string playerLine = ship.Name + 
"     " + ship.Ping;
+                                               _font.DrawText(playerLine, new 
System.Drawing.Rectangle(_leftMargin+10, line, 0, 0), 
DrawTextFormat.ExpandTabs, black);
+                                               line += this.LineHeight;
+                                       }
+                               }
+                       }
+
+                       if (_debug)
+                               _lock.ReleaseMutex();
+
+                       _device.RenderState.Lighting = true;
+                       _device.RenderState.AlphaBlendEnable = false;
+               }
+       }
+}
\ No newline at end of file

Added: trunk/skorpion/assets/a1a/a1a.obj
===================================================================
--- trunk/skorpion/assets/a1a/a1a.obj                           (rev 0)
+++ trunk/skorpion/assets/a1a/a1a.obj   2006-11-07 21:30:44 UTC (rev 116)
@@ -0,0 +1,1338 @@
+# This file uses centimeters as units for non-parametric coordinates.
+
+mtllib a1a.mtl
+g default
+v -0.581898 10.681607 -0.340333
+v -5.509189 6.964323 -0.340470
+v -4.621354 6.180005 -0.340470
+v -10.844862 -1.835233 -0.340470
+v -10.300531 -6.301476 -0.360270
+v -9.604668 -2.341210 -0.340470
+v -8.777368 3.000695 -0.340470
+v -7.831027 2.498930 -0.340470
+v -0.583527 9.097757 0.905934
+v -4.621354 6.180005 0.905934
+v -5.509189 6.964323 0.905934
+v -5.509189 6.964323 0.905940
+v -4.621354 6.180005 0.905940
+v -7.831027 2.498930 0.905940
+v -8.777368 3.000695 0.905940
+v -8.777368 3.000695 0.905934
+v -7.831027 2.498930 0.905934
+v -9.604668 -2.341210 0.905934
+v -10.844862 -1.835233 0.905934
+v -11.739125 -7.205828 0.925734
+v 4.351434 6.964322 0.905934
+v 3.463599 6.180005 0.905934
+v 6.673272 2.498931 0.905934
+v 7.619613 3.000695 0.905934
+v 8.446913 -2.341210 0.905934
+v 9.687106 -1.835233 0.905934
+v 9.129333 -6.336587 0.925734
+v -0.588366 9.097757 -0.340470
+v 3.463599 6.180005 -0.340470
+v 4.351433 6.964321 -0.340470
+v -0.586783 10.681607 0.905934
+v 6.673269 2.498928 -0.340470
+v 6.673269 2.498928 0.905940
+v 3.463599 6.180005 0.905940
+v 7.619612 3.000695 -0.340470
+v 4.351434 6.964323 -0.340470
+v 4.351434 6.964323 0.905940
+v 7.619613 3.000695 0.905940
+v 6.673271 2.498930 -0.340470
+v 8.446911 -2.341210 -0.340470
+v 9.687106 -1.835233 -0.340470
+v 10.663666 -7.224056 -0.350013
+v -5.561886 -9.554464 0.945533
+v -5.358418 -8.311071 0.945534
+v -0.227060 -9.116652 0.945534
+v -0.143010 -10.122573 0.945533
+v 5.134788 -7.973121 0.945533
+v 5.381412 -9.376160 0.945534
+v 10.628948 -7.225415 0.951589
+v -10.300529 -6.301476 0.925734
+v -5.358418 -8.311071 -0.380071
+v -5.561883 -9.554463 -0.380070
+v -11.739126 -7.205828 -0.360271
+v -5.358418 -8.311072 0.945540
+v -0.227060 -9.116650 0.945540
+v -0.227059 -9.116649 -0.380070
+v -0.143010 -10.122572 -0.380070
+v -0.143010 -10.122571 0.945540
+v -5.561886 -9.554464 0.945539
+v -5.561886 -9.554464 -0.380070
+v -0.227061 -9.116652 -0.380070
+v 5.134787 -7.973120 -0.380070
+v 5.381407 -9.376161 -0.380070
+v 9.129332 -6.336586 -0.360268
+vt 0.832315 0.779493
+vt 0.879205 0.769687
+vt 0.818107 0.585114
+vt 0.773687 0.584282
+vt 0.773687 0.584282
+vt 0.818107 0.585114
+vt 0.831029 0.388378
+vt 0.775339 0.382168
+vt 0.869017 0.241839
+vt 0.828761 0.183851
+vt 0.775339 0.382168
+vt 0.831029 0.388378
+vt 0.958278 0.997548
+vt 0.832315 0.779493
+vt 0.879205 0.769687
+vt 0.984748 0.944128
+vt 0.773687 0.584282
+vt 0.818107 0.585114
+vt 0.775339 0.382168
+vt 0.831029 0.388378
+vt 0.828761 0.183851
+vt 0.869017 0.241839
+vt 0.832315 0.779493
+vt 0.958278 0.997548
+vt 0.927225 0.446713
+vt 0.927277 0.223607
+vt 0.984729 0.223621
+vt 0.984677 0.446726
+vt 0.927900 0.223750
+vt 0.927942 0.042216
+vt 0.985394 0.042228
+vt 0.985353 0.223762
+vt 0.984748 0.944128
+vt 0.879205 0.769687
+vt 0.984628 0.596507
+vt 0.984584 0.782844
+vt 0.927132 0.782830
+vt 0.927175 0.596494
+vt 0.985458 0.448412
+vt 0.985424 0.596362
+vt 0.927972 0.596348
+vt 0.928006 0.448399
+vt 0.751157 0.418210
+vt 0.757867 0.637534
+vt 0.701339 0.639263
+vt 0.694630 0.419940
+vt 0.743328 0.176563
+vt 0.750755 0.419355
+vt 0.694228 0.421084
+vt 0.686800 0.178293
+vt 0.763213 0.817602
+vt 0.768372 0.986192
+vt 0.711843 0.987921
+vt 0.706686 0.819331
+vt 0.757035 0.637205
+vt 0.762534 0.816968
+vt 0.706006 0.818697
+vt 0.700507 0.638934
+vt 0.832315 0.779493
+vt 0.879205 0.769687
+vt 0.818107 0.585114
+vt 0.773687 0.584282
+vt 0.773687 0.584282
+vt 0.818107 0.585114
+vt 0.831029 0.388378
+vt 0.775339 0.382168
+vt 0.869017 0.241839
+vt 0.828761 0.183851
+vt 0.775339 0.382168
+vt 0.831029 0.388378
+vt 0.984628 0.596507
+vt 0.984584 0.782844
+vt 0.927132 0.782830
+vt 0.927175 0.596494
+vt 0.763213 0.817602
+vt 0.768372 0.986192
+vt 0.711843 0.987921
+vt 0.706686 0.819331
+vt 0.985458 0.448412
+vt 0.985424 0.596362
+vt 0.927972 0.596348
+vt 0.928006 0.448399
+vt 0.757035 0.637205
+vt 0.762534 0.816968
+vt 0.706006 0.818697
+vt 0.700507 0.638934
+vt 0.927225 0.446713
+vt 0.927277 0.223607
+vt 0.984729 0.223621
+vt 0.984677 0.446726
+vt 0.751157 0.418210
+vt 0.757867 0.637534
+vt 0.701339 0.639263
+vt 0.694630 0.419940
+vt 0.743328 0.176563
+vt 0.750755 0.419355
+vt 0.694228 0.421084
+vt 0.686800 0.178293
+vt 0.927900 0.223750
+vt 0.927942 0.042216
+vt 0.985394 0.042228
+vt 0.985353 0.223762
+vt 0.958278 0.997548
+vt 0.832315 0.779493
+vt 0.879205 0.769687
+vt 0.984748 0.944128
+vt 0.773687 0.584282
+vt 0.818107 0.585114
+vt 0.775339 0.382168
+vt 0.831029 0.388378
+vt 0.828761 0.183851
+vt 0.869017 0.241839
+vt 0.832315 0.779493
+vt 0.958278 0.997548
+vt 0.984748 0.944128
+vt 0.879205 0.769687
+vt 0.832315 0.779493
+vt 0.879205 0.769687
+vt 0.818107 0.585114
+vt 0.773687 0.584282
+vt 0.773687 0.584282
+vt 0.818107 0.585114
+vt 0.831029 0.388378
+vt 0.775339 0.382168
+vt 0.869017 0.241839
+vt 0.828761 0.183851
+vt 0.775339 0.382168
+vt 0.831029 0.388378
+vt 0.984628 0.596507
+vt 0.927175 0.596494
+vt 0.927132 0.782830
+vt 0.984584 0.782844
+vt 0.763213 0.817602
+vt 0.706686 0.819331
+vt 0.711843 0.987921
+vt 0.768372 0.986192
+vt 0.985458 0.448412
+vt 0.928006 0.448399
+vt 0.927972 0.596348
+vt 0.985424 0.596362
+vt 0.757035 0.637205
+vt 0.700507 0.638934
+vt 0.706006 0.818697
+vt 0.762534 0.816968
+vt 0.927225 0.446713
+vt 0.984677 0.446726
+vt 0.984729 0.223621
+vt 0.927277 0.223607
+vt 0.751157 0.418210
+vt 0.694630 0.419940
+vt 0.701339 0.639263
+vt 0.757867 0.637534
+vt 0.743328 0.176563
+vt 0.686800 0.178293
+vt 0.694228 0.421084
+vt 0.750755 0.419355
+vt 0.927900 0.223750
+vt 0.985353 0.223762
+vt 0.985394 0.042228
+vt 0.927942 0.042216
+vt 0.958278 0.997548
+vt 0.984748 0.944128
+vt 0.879205 0.769687
+vt 0.832315 0.779493
+vt 0.818107 0.585114
+vt 0.773687 0.584282
+vt 0.831029 0.388378
+vt 0.775339 0.382168
+vt 0.869017 0.241839
+vt 0.828761 0.183851
+vt 0.832315 0.779493
+vt 0.879205 0.769687
+vt 0.984748 0.944128
+vt 0.958278 0.997548
+vn -0.000000 -0.000000 1.000000
+vn -0.000000 -0.000000 1.000000
+vn -0.000000 -0.000000 1.000000
+vn -0.000000 -0.000000 1.000000
+vn -0.650179 0.277970 0.707107
+vn -0.650179 0.277970 0.707107
+vn 0.000000 0.000000 1.000000
+vn 0.000000 0.000000 1.000000
+vn -0.002589 0.004118 0.999988
+vn -0.000343 0.004391 0.999990
+vn -0.000343 0.004391 0.999990
+vn 0.001903 0.004665 0.999987
+vn 0.585693 -0.810530 -0.002274
+vn 0.585925 -0.810365 -0.001137
+vn 0.585925 -0.810365 -0.001137
+vn 0.586156 -0.810198 0.000000
+vn -0.602260 0.798300 0.000000
+vn -0.602450 0.798156 -0.001181
+vn -0.602450 0.798156 -0.001181
+vn -0.602639 0.798011 -0.002362
+vn 0.753719 -0.657197 0.000000
+vn 0.753719 -0.657197 0.000000
+vn 0.753719 -0.657197 0.000000
+vn 0.753719 -0.657197 0.000000
+vn -0.771547 0.636173 0.000000
+vn -0.771547 0.636173 0.000000
+vn -0.771547 0.636173 0.000000
+vn -0.771547 0.636173 0.000000
+vn 0.938944 -0.344070 0.000000
+vn 0.938944 -0.344070 0.000000
+vn 0.938944 -0.344070 0.000000
+vn 0.938944 -0.344070 0.000000
+vn -0.919492 0.393109 0.000000
+vn -0.919492 0.393109 0.000000
+vn -0.986419 0.164250 0.000001
+vn -0.986419 0.164250 0.000000
+vn -0.986419 0.164250 0.000000
+vn -0.986419 0.164250 0.000000
+vn 0.984911 -0.173060 -0.000001
+vn 0.984911 -0.173060 -0.000001
+vn 0.984911 -0.173060 -0.000001
+vn 0.984911 -0.173060 0.000000
+vn -0.000038 0.000087 -1.000000
+vn -0.000019 0.000043 -1.000000
+vn -0.000019 0.000043 -1.000000
+vn -0.000000 -0.000000 -1.000000
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 0.000000 -1.000000
+vn -0.002588 0.004118 -0.999988
+vn -0.000342 0.004391 -0.999990
+vn -0.000342 0.004391 -0.999990
+vn 0.001903 0.004665 -0.999987
+vn -0.000000 0.000000 1.000000
+vn -0.000000 0.000000 1.000000
+vn -0.000000 0.000000 1.000000
+vn -0.000000 -0.000000 1.000000
+vn 0.000000 -0.000000 1.000000
+vn 0.000000 -0.000000 1.000000
+vn 0.000000 -0.000000 1.000000
+vn 0.000000 -0.000000 1.000000
+vn -0.000000 0.000000 1.000000
+vn -0.000000 0.000000 1.000000
+vn -0.000000 0.000000 1.000000
+vn -0.000000 0.000000 1.000000
+vn -0.013631 0.006087 0.999889
+vn -0.007761 0.005360 0.999955
+vn -0.007761 0.005360 0.999955
+vn -0.001890 0.004633 0.999987
+vn -0.584348 -0.811500 0.002269
+vn -0.584579 -0.811336 0.001134
+vn -0.584579 -0.811336 0.001134
+vn -0.584809 -0.811171 0.000000
+vn 0.601790 0.798655 -0.000001
+vn 0.601599 0.798797 0.001178
+vn 0.601599 0.798797 0.001178
+vn 0.601408 0.798939 0.002357
+vn -0.753719 -0.657196 0.000000
+vn -0.753719 -0.657196 0.000000
+vn -0.753719 -0.657196 0.000000
+vn -0.753719 -0.657196 0.000000
+vn 0.771547 0.636173 -0.000000
+vn 0.771547 0.636173 -0.000000
+vn 0.771547 0.636173 -0.000000
+vn 0.771547 0.636173 0.000000
+vn -0.938944 -0.344070 0.000000
+vn -0.938944 -0.344070 0.000001
+vn -0.938944 -0.344070 0.000001
+vn -0.938944 -0.344070 0.000001
+vn 0.919492 0.393108 0.000000
+vn 0.919492 0.393108 -0.000000
+vn 0.919492 0.393108 -0.000000
+vn 0.919492 0.393108 -0.000000
+vn 0.983638 0.178208 0.026423
+vn 0.984447 0.175182 0.013213
+vn 0.984447 0.175182 0.013213
+vn 0.985075 0.172125 0.000000
+vn -0.985725 -0.168364 0.000001
+vn -0.985725 -0.168364 0.000001
+vn -0.985725 -0.168364 0.000001
+vn -0.985725 -0.168364 0.000002
+vn 0.000037 0.000086 -1.000000
+vn 0.000019 0.000043 -1.000000
+vn 0.000019 0.000043 -1.000000
+vn -0.000000 -0.000000 -1.000000
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 0.000000 -1.000000
+vn -0.000000 -0.000000 -1.000000
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 -0.000000 -1.000000
+vn 0.008610 0.003331 -0.999957
+vn 0.003360 0.003982 -0.999986
+vn 0.003360 0.003982 -0.999986
+vn -0.001890 0.004632 -0.999987
+vn 0.000000 0.000000 1.000000
+vn 0.000000 0.000000 1.000000
+vn 0.000000 0.000000 1.000000
+vn 0.000000 -0.000000 1.000000
+vn -0.000000 -0.000001 1.000000
+vn -0.000000 -0.000001 1.000000
+vn -0.000000 -0.000001 1.000000
+vn -0.000000 -0.000001 1.000000
+vn -0.000000 -0.000001 1.000000
+vn -0.000000 -0.000000 1.000000
+vn -0.000000 -0.000000 1.000000
+vn 0.000000 0.000000 1.000000
+vn -0.007729 0.016044 0.999841
+vn -0.001553 0.008429 0.999963
+vn -0.001553 0.008429 0.999963
+vn 0.004624 0.000813 0.999989
+vn 0.376677 0.926345 -0.000000
+vn 0.376677 0.926345 -0.000000
+vn 0.376677 0.926345 -0.000000
+vn 0.376677 0.926345 -0.000001
+vn -0.355387 -0.934719 -0.000001
+vn -0.355388 -0.934719 -0.000001
+vn -0.355388 -0.934719 -0.000001
+vn -0.355388 -0.934719 0.000000
+vn 0.155091 0.987900 0.000001
+vn 0.155091 0.987900 0.000001
+vn 0.155091 0.987900 0.000001
+vn 0.155091 0.987900 0.000001
+vn -0.104267 -0.994549 0.000001
+vn -0.104267 -0.994549 0.000000
+vn -0.104267 -0.994549 0.000000
+vn -0.104267 -0.994549 0.000000
+vn -0.208581 0.978005 0.000001
+vn -0.208581 0.978005 0.000001
+vn -0.208581 0.978005 0.000001
+vn -0.208581 0.978005 0.000001
+vn 0.133895 -0.990996 0.000000
+vn 0.133895 -0.990996 -0.000000
+vn 0.133895 -0.990996 -0.000000
+vn 0.133895 -0.990996 -0.000001
+vn 0.377248 -0.926068 0.009095
+vn 0.378248 -0.925693 0.004547
+vn 0.378248 -0.925693 0.004547
+vn 0.379241 -0.925298 -0.000001
+vn -0.379109 0.925352 0.000001
+vn -0.379109 0.925352 0.000001
+vn -0.379109 0.925352 0.000001
+vn -0.379109 0.925352 0.000001
+vn -0.001997 0.003178 -0.999993
+vn -0.002877 0.001896 -0.999994
+vn -0.002877 0.001896 -0.999994
+vn -0.003757 0.000614 -0.999993
+vn 0.000000 -0.000000 -1.000000
+vn 0.000000 -0.000000 -1.000000
+vn 0.000000 -0.000000 -1.000000
+vn 0.000000 -0.000000 -1.000000
+vn -0.000000 -0.000000 -1.000000
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 0.000000 -1.000000
+vn 0.006101 -0.001008 -0.999981
+vn 0.005362 -0.000097 -0.999986
+vn 0.005362 -0.000097 -0.999986
+vn 0.004624 0.000813 -0.999989
+vn -0.001997 0.003177 0.999993
+vn -0.002877 0.001896 0.999994
+vn -0.002877 0.001896 0.999994
+vn -0.003757 0.000614 0.999993
+s 1
+g polySurface3
+usemtl initialShadingGroup
+f 16/4/1 17/3/2 11/1/3
+f 11/1/3 17/3/2 10/2/4
+s 2
+f 16/5/5 19/8/6 17/6/7
+f 19/8/6 18/7/8 17/6/7
+s 3
+f 20/10/9 50/9/10 19/11/11
+f 50/9/10 18/12/12 19/11/11
+s 4
+f 9/38/13 10/37/14 28/35/15
+f 28/35/15 10/37/14 3/36/16
+s 5
+f 2/51/17 11/54/18 1/52/19
+f 11/54/18 31/53/20 1/52/19
+s 6
+f 3/39/21 13/42/22 8/40/23
+f 13/42/22 14/41/24 8/40/23
+s 7
+f 7/55/25 15/58/26 2/56/27
+f 15/58/26 12/57/28 2/56/27
+s 8
+f 8/25/29 17/28/30 6/26/31
+f 17/28/30 18/27/32 6/26/31
+s 2
+f 4/43/33 19/46/6 7/44/34
+f 19/46/6 16/45/5 7/44/34
+s 9
+f 53/47/35 20/50/36 4/48/37
+f 20/50/36 19/49/38 4/48/37
+s 10
+f 50/31/39 5/30/40 18/32/41
+f 6/29/42 18/32/41 5/30/40
+s 11
+f 1/13/43 28/16/44 2/14/45
+f 28/16/44 3/15/46 2/14/45
+s 12
+f 7/17/47 2/14/48 8/18/49
+f 2/14/48 3/15/50 8/18/49
+s 13
+f 7/17/51 8/18/52 4/19/53
+f 8/18/52 6/20/54 4/19/53
+s 14
+f 53/21/55 4/19/56 5/22/57
+f 4/19/56 6/20/58 5/22/57
+s 15
+f 31/24/59 11/23/60 9/33/61
+f 11/23/60 10/34/62 9/33/61
+s 16
+f 24/62/63 21/59/64 23/61/65
+f 21/59/64 22/60/66 23/61/65
+s 17
+f 24/63/67 23/64/68 26/66/69
+f 23/64/68 25/65/70 26/66/69
+s 18
+f 49/68/71 26/69/72 27/67/73
+f 27/67/73 26/69/72 25/70/74
+s 19
+f 28/71/75 29/72/76 9/74/77
+f 29/72/76 22/73/78 9/74/77
+s 20
+f 30/75/79 1/76/80 21/78/81
+f 1/76/80 31/77/82 21/78/81
+s 21
+f 29/79/83 32/80/84 34/82/85
+f 32/80/84 33/81/86 34/82/85
+s 22
+f 35/83/87 36/84/88 38/86/89
+f 36/84/88 37/85/90 38/86/89
+s 23
+f 39/87/91 40/88/92 23/90/93
+f 40/88/92 25/89/94 23/90/93
+s 24
+f 41/91/95 35/92/96 26/94/97
+f 35/92/96 24/93/98 26/94/97
+s 25
+f 42/95/99 41/96/100 49/98/101
+f 41/96/100 26/97/102 49/98/101
+s 26
+f 64/100/103 27/101/104 40/99/105
+f 40/99/105 27/101/104 25/102/106
+s 27
+f 1/103/107 36/104/108 28/106/109
+f 36/104/108 29/105/110 28/106/109
+s 28
+f 35/107/111 39/108/112 36/104/113
+f 36/104/113 39/108/112 29/105/114
+s 29
+f 35/107/115 41/109/116 39/108/117
+f 41/109/116 40/110/118 39/108/117
+s 30
+f 42/111/119 64/112/120 41/109/121
+f 41/109/121 64/112/120 40/110/122
+s 31
+f 31/114/123 9/115/124 21/113/125
+f 21/113/125 9/115/124 22/116/126
+s 32
+f 46/120/127 45/119/128 43/117/129
+f 43/117/129 45/119/128 44/118/130
+s 33
+f 46/121/131 48/124/132 45/122/133
+f 48/124/132 47/123/134 45/122/133
+s 34
+f 49/126/135 27/125/136 48/127/137
+f 27/125/136 47/128/138 48/127/137
+s 35
+f 44/131/139 51/132/140 50/130/141
+f 5/129/142 50/130/141 51/132/140
+s 36
+f 52/133/143 43/134/144 53/136/145
+f 43/134/144 20/135/146 53/136/145
+s 37
+f 51/137/147 54/138/148 56/140/149
+f 54/138/148 55/139/150 56/140/149
+s 38
+f 57/141/151 58/142/152 60/144/153
+f 58/142/152 59/143/154 60/144/153
+s 39
+f 61/145/155 45/146/156 62/148/157
+f 45/146/156 47/147/158 62/148/157
+s 40
+f 63/149/159 48/150/160 57/152/161
+f 48/150/160 46/151/162 57/152/161
+s 41
+f 42/153/163 49/154/164 63/156/165
+f 49/154/164 48/155/166 63/156/165
+s 42
+f 62/157/167 47/158/168 64/160/169
+f 47/158/168 27/159/170 64/160/169
+s 43
+f 53/161/171 5/162/172 60/164/173
+f 5/162/172 51/163/174 60/164/173
+s 44
+f 57/166/175 60/164/176 61/165/177
+f 60/164/176 51/163/178 61/165/177
+s 45
+f 57/166/179 61/165/180 63/168/181
+f 61/165/180 62/167/182 63/168/181
+s 46
+f 42/170/183 63/168/184 64/169/185
+f 63/168/184 62/167/186 64/169/185
+s 47
+f 20/174/187 43/171/188 50/173/189
+f 43/171/188 44/172/190 50/173/189
+g default
+v -0.996084 11.011988 1.736020
+v -0.660259 11.154369 1.740898
+v -0.322110 11.017560 1.744502
+v -0.179719 10.681705 1.744722
+v -0.316498 10.343540 1.741428
+v -0.652323 10.201160 1.736551
+v -0.990472 10.337968 1.732947
+v -1.132863 10.673824 1.732727
+v -1.334218 11.392487 -1.055926
+v -0.629630 11.691213 -1.045693
+v 0.079835 11.404179 -1.038131
+v 0.378582 10.699526 -1.037670
+v 0.091609 9.990029 -1.044580
+v -0.612979 9.691303 -1.054813
+v -1.322444 9.978338 -1.062375
+v -1.621191 10.682991 -1.062836
+v -0.659260 10.675425 1.976221
+v -0.623744 10.689337 -0.855167
+v -0.655680 11.681527 1.030713
+v -1.360356 11.382769 1.027471
+v -1.647495 10.673211 1.033788
+v -1.348809 9.968535 1.039061
+v 0.053786 11.394494 1.038171
+v 0.352666 10.689890 1.028032
+v 0.065720 9.980403 1.018963
+v -0.639200 9.681554 1.035138
+vt 0.354894 0.024406
+vt 0.406778 0.023817
+vt 0.408105 0.254268
+vt 0.356760 0.254939
+vt 0.458589 0.024191
+vt 0.458634 0.254519
+vt 0.509935 0.023317
+vt 0.509585 0.253410
+vt 0.560759 0.023040
+vt 0.563044 0.253134
+vt 0.303368 0.025036
+vt 0.305969 0.255371
+vt 0.252396 0.025088
+vt 0.254613 0.255917
+vt 0.201866 0.025494
+vt 0.203667 0.255894
+vt 0.578577 0.258118
+vt 0.506846 0.288424
+vt 0.114385 0.311865
+vt 0.150582 0.326559
+vt 0.114744 0.363037
+vt 0.113991 0.255765
+vt 0.189934 0.286597
+vt 0.165786 0.362546
+vt 0.078398 0.327067
+vt 0.038486 0.287662
+vt 0.221833 0.362100
+vt 0.151089 0.398743
+vt 0.063700 0.363264
+vt 0.007652 0.363609
+vt 0.190998 0.438044
+vt 0.115100 0.413946
+vt 0.078903 0.399250
+vt 0.039550 0.439109
+vt 0.115493 0.469942
+vt 0.651741 0.431292
+vt 0.580008 0.461598
+vt 0.579293 0.359755
+vt 0.507859 0.432304
+vt 0.681033 0.359142
+vt 0.477554 0.360574
+vt 0.650728 0.287410
+vt 0.151397 0.025816
+vt 0.151758 0.255924
+vn -0.324964 0.760386 0.562327
+vn -0.326978 0.758504 0.563700
+vn -0.326978 0.758504 0.563700
+vn -0.328990 0.756612 0.565069
+vn 0.374948 0.927002 0.009028
+vn 0.374949 0.927002 0.009028
+vn 0.374949 0.927002 0.009028
+vn 0.374949 0.927001 0.009028
+vn 0.920589 0.390304 0.013370
+vn 0.920589 0.390304 0.013370
+vn 0.920589 0.390304 0.013370
+vn 0.920589 0.390304 0.013370
+vn 0.926961 -0.375028 0.009880
+vn 0.926961 -0.375028 0.009880
+vn 0.926961 -0.375028 0.009880
+vn 0.926961 -0.375028 0.009880
+vn 0.390331 -0.920674 0.000602
+vn 0.390331 -0.920674 0.000602
+vn 0.390331 -0.920674 0.000602
+vn 0.390332 -0.920674 0.000602
+vn -0.306446 -0.765477 0.565805
+vn -0.311030 -0.765391 0.563416
+vn -0.311030 -0.765391 0.563416
+vn -0.315598 -0.765284 0.561016
+vn -0.763003 -0.319202 0.562082
+vn -0.761676 -0.320597 0.563087
+vn -0.761676 -0.320597 0.563087
+vn -0.760345 -0.321991 0.564090
+vn -0.766763 0.315266 0.559179
+vn -0.766935 0.310028 0.561865
+vn -0.766935 0.310028 0.561865
+vn -0.767081 0.304768 0.564538
+vn -0.014939 0.440909 0.897428
+vn -0.328830 0.308049 0.892736
+vn -0.012539 -0.005314 0.999907
+vn 0.301124 0.313257 0.900663
+vn 0.434750 -0.000658 0.900551
+vn 0.307136 -0.317485 0.897146
+vn -0.007501 -0.451104 0.892440
+vn -0.324323 -0.322706 0.889199
+vn -0.457202 -0.008032 0.889326
+vn 0.148756 -0.129597 -0.980345
+vn 0.013906 -0.186724 -0.982314
+vn 0.012544 0.004777 -0.999910
+vn -0.121878 -0.131834 -0.983751
+vn -0.179163 0.003027 -0.983815
+vn -0.124287 0.138970 -0.982466
+vn 0.010716 0.196253 -0.980495
+vn 0.146655 0.141211 -0.979057
+vn 0.203788 0.006194 -0.978995
+vn -0.390332 0.920674 -0.000602
+vn -0.390332 0.920674 -0.000602
+vn -0.390332 0.920674 -0.000602
+vn -0.390331 0.920674 -0.000602
+vn -0.926961 0.375028 -0.009880
+vn -0.926961 0.375028 -0.009880
+vn -0.926961 0.375028 -0.009880
+vn -0.926961 0.375028 -0.009880
+vn -0.920589 -0.390304 -0.013370
+vn -0.920589 -0.390304 -0.013370
+vn -0.920589 -0.390304 -0.013370
+vn -0.920589 -0.390305 -0.013370
+vn 0.303212 0.764245 0.569203
+vn 0.303172 0.764246 0.569223
+vn 0.303172 0.764246 0.569223
+vn 0.303132 0.764247 0.569243
+vn 0.760337 0.314342 0.568398
+vn 0.757520 0.317339 0.570490
+vn 0.757520 0.317339 0.570490
+vn 0.754683 0.320333 0.572574
+vn 0.763703 -0.316069 0.562902
+vn 0.763730 -0.315241 0.563330
+vn 0.763730 -0.315241 0.563330
+vn 0.763756 -0.314412 0.563757
+vn 0.334596 -0.759010 0.558524
+vn 0.324335 -0.759594 0.563759
+vn 0.324335 -0.759594 0.563759
+vn 0.313990 -0.760078 0.568939
+vn -0.374948 -0.927002 -0.009029
+vn -0.374949 -0.927002 -0.009028
+vn -0.374949 -0.927002 -0.009028
+vn -0.374949 -0.927001 -0.009028
+s 1
+g pCylinder2
+usemtl initialShadingGroup
+f 83/196/191 84/197/192 66/193/193
+f 65/194/194 66/193/193 84/197/192
+s 2
+f 83/175/195 87/176/196 74/178/197
+f 87/176/196 75/177/198 74/178/197
+s 3
+f 87/176/199 88/179/200 75/177/201
+f 88/179/200 76/180/202 75/177/201
+s 4
+f 88/179/203 89/181/204 76/180/205
+f 89/181/204 77/182/206 76/180/205
+s 5
+f 90/183/207 78/184/208 89/181/209
+f 89/181/209 78/184/208 77/182/210
+s 6
+f 86/205/211 90/209/212 71/202/213
+f 70/206/214 71/202/213 90/209/212
+s 7
+f 85/201/215 86/205/216 72/198/217
+f 71/202/218 72/198/217 86/205/216
+s 8
+f 84/197/219 85/201/220 65/194/221
+f 72/198/222 65/194/221 85/201/220
+s 9
+f 66/193/223 65/194/224 81/195/225
+f 67/199/226 66/193/223 81/195/225
+f 68/203/227 67/199/226 81/195/225
+f 69/207/228 68/203/227 81/195/225
+f 70/206/229 69/207/228 81/195/225
+f 71/202/230 70/206/229 81/195/225
+f 72/198/231 71/202/230 81/195/225
+f 65/194/224 72/198/231 81/195/225
+s 10
+f 73/210/232 74/211/233 82/212/234
+f 74/211/233 75/213/235 82/212/234
+f 75/213/235 76/215/236 82/212/234
+f 76/215/236 77/192/237 82/212/234
+f 77/192/237 78/191/238 82/212/234
+f 78/191/238 79/216/239 82/212/234
+f 79/216/239 80/214/240 82/212/234
+f 80/214/240 73/210/232 82/212/234
+s 11
+f 84/185/241 83/175/242 73/186/243
+f 83/175/242 74/178/244 73/186/243
+s 12
+f 85/187/245 84/185/246 80/188/247
+f 84/185/246 73/186/248 80/188/247
+s 13
+f 86/189/249 85/187/250 79/190/251
+f 85/187/250 80/188/252 79/190/251
+s 14
+f 87/200/253 83/196/254 67/199/255
+f 66/193/256 67/199/255 83/196/254
+s 15
+f 88/204/257 87/200/258 68/203/259
+f 67/199/260 68/203/259 87/200/258
+s 16
+f 89/208/261 88/204/262 69/207/263
+f 68/203/264 69/207/263 88/204/262
+s 17
+f 89/208/265 69/207/266 90/209/267
+f 69/207/266 70/206/268 90/209/267
+s 18
+f 86/189/269 79/190/270 90/217/271
+f 90/217/271 79/190/270 78/218/272
+g default
+v -0.571810 9.174932 0.252988
+v 3.478499 6.218152 0.252988
+v 6.728443 2.491556 0.252988
+v 8.465523 -2.345781 0.252988
+v 9.228970 -6.381438 0.252988
+v 5.140425 -8.000007 0.252988
+v -0.245535 -9.129209 0.252988
+v -5.330740 -8.364516 0.252988
+v -10.354752 -6.338081 0.252988
+v -9.628294 -2.308170 0.252988
+v -7.869502 2.509393 0.252988
+v -4.680751 6.202876 0.252988
+v -0.574702 9.124577 0.395338
+v 3.341120 6.265974 0.395338
+v 6.770867 2.333203 0.395338
+v 8.616632 -2.806792 0.395338
+v 9.321009 -6.530200 0.395338
+v 5.504264 -8.041168 0.395338
+v -0.235887 -9.244629 0.395338
+v -5.614696 -8.435785 0.395338
+v -10.452554 -6.484436 0.395338
+v -9.781882 -2.763987 0.395338
+v -7.913693 2.353228 0.395338
+v -4.550364 6.248922 0.395338
+vt 0.334410 0.993401
+vt 0.211024 0.902729
+vt 0.111720 0.786272
+vt 0.061547 0.634876
+vt 0.039514 0.508782
+vt 0.165927 0.463017
+vt 0.331337 0.429646
+vt 0.488828 0.455507
+vt 0.642230 0.520476
+vt 0.618021 0.643572
+vt 0.561422 0.792340
+vt 0.462556 0.907310
+vt 0.334410 0.993401
+vt 0.211024 0.902729
+vt 0.111720 0.786272
+vt 0.061547 0.634876
+vt 0.039514 0.508782
+vt 0.165927 0.463017
+vt 0.331337 0.429646
+vt 0.488828 0.455507
+vt 0.642230 0.520476
+vt 0.618021 0.643572
+vt 0.561422 0.792340
+vt 0.462556 0.907310
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 0.000000 -1.000000
+vn -0.000000 -0.000000 1.000000
+vn 0.000000 -0.000000 1.000000
+vn 0.000000 -0.000000 1.000000
+vn -0.000000 -0.000000 1.000000
+vn -0.000000 -0.000000 1.000000
+vn -0.000000 -0.000000 1.000000
+vn 0.000000 -0.000000 1.000000
+vn 0.000000 -0.000000 1.000000
+vn -0.000000 -0.000000 1.000000
+vn 0.000000 -0.000000 1.000000
+vn 0.000000 -0.000000 1.000000
+vn -0.000000 -0.000000 1.000000
+s 1
+g polySurface4
+usemtl initialShadingGroup
+f 95/223/273 96/224/274 94/222/275
+f 99/227/276 100/228/277 98/226/278
+f 91/219/279 92/220/280 102/230/281
+f 100/228/277 101/229/282 98/226/278
+f 98/226/278 101/229/282 97/225/283
+f 101/229/282 102/230/281 97/225/283
+f 102/230/281 92/220/280 97/225/283
+f 92/220/280 93/221/284 97/225/283
+f 97/225/283 93/221/284 96/224/274
+f 93/221/284 94/222/275 96/224/274
+s 2
+f 111/239/285 110/238/286 112/240/287
+f 107/235/288 106/234/289 108/236/290
+f 103/231/291 114/242/292 104/232/293
+f 112/240/287 110/238/286 113/241/294
+f 110/238/286 109/237/295 113/241/294
+f 113/241/294 109/237/295 114/242/292
+f 114/242/292 109/237/295 104/232/293
+f 104/232/293 109/237/295 105/233/296
+f 109/237/295 108/236/290 105/233/296
+f 108/236/290 106/234/289 105/233/296
+g default
+v -11.715804 -7.758710 1.736020
+v -12.018839 -7.555681 1.740898
+v -12.089538 -7.197822 1.744502
+v -11.886489 -6.894762 1.744722
+v -11.528634 -6.824030 1.741428
+v -11.225599 -7.027059 1.736551
+v -11.154899 -7.384918 1.732947
+v -11.357948 -7.687978 1.732727
+v -11.849017 -8.250003 -1.055926
+v -12.484808 -7.824032 -1.045693
+v -12.633143 -7.073215 -1.038131
+v -12.207129 -6.437371 -1.037670
+v -11.456319 -6.288968 -1.044580
+v -10.820528 -6.714939 -1.054813
+v -10.672194 -7.465755 -1.062375
+v -11.098208 -8.101600 -1.062836
+v -11.618636 -7.292574 1.976221
+v -11.649725 -7.270474 -0.855167
+v -12.462439 -7.840525 1.030713
+v -11.826572 -8.266551 1.027471
+v -11.075620 -8.118254 1.033788
+v -10.649554 -7.482447 1.039061
+v -12.610775 -7.089707 1.038171
+v -12.184875 -6.453779 1.028032
+v -11.434088 -6.305359 1.018963
+v -10.798013 -6.731539 1.035138
+vt 0.354894 0.024406
+vt 0.406778 0.023817
+vt 0.408106 0.254268
+vt 0.356760 0.254939
+vt 0.458589 0.024190
+vt 0.458634 0.254519
+vt 0.509935 0.023317
+vt 0.509586 0.253410
+vt 0.560759 0.023039
+vt 0.563045 0.253134
+vt 0.303368 0.025036
+vt 0.305969 0.255370
+vt 0.252396 0.025087
+vt 0.254613 0.255917
+vt 0.201867 0.025494
+vt 0.203668 0.255894
+vt 0.578578 0.258118
+vt 0.506847 0.288423
+vt 0.114382 0.311863
+vt 0.150579 0.326559
+vt 0.114742 0.363036
+vt 0.113988 0.255764
+vt 0.189932 0.286597
+vt 0.165783 0.362545
+vt 0.078396 0.327066
+vt 0.038485 0.287662
+vt 0.221830 0.362099
+vt 0.151087 0.398742
+vt 0.063700 0.363263
+vt 0.007652 0.363606
+vt 0.190997 0.438044
+vt 0.115100 0.413946
+vt 0.078904 0.399250
+vt 0.039550 0.439109
+vt 0.115494 0.469941
+vt 0.651740 0.431292
+vt 0.580009 0.461597
+vt 0.579292 0.359755
+vt 0.507859 0.432304
+vt 0.681033 0.359142
+vt 0.477554 0.360573
+vt 0.650728 0.287411
+vt 0.151397 0.025817
+vt 0.151758 0.255924
+vn -0.458291 -0.688301 0.562327
+vn -0.455613 -0.688955 0.563700
+vn -0.455613 -0.688955 0.563700
+vn -0.452928 -0.689603 0.565069
+vn -0.980980 -0.193898 0.009028
+vn -0.980980 -0.193898 0.009028
+vn -0.980980 -0.193898 0.009028
+vn -0.980980 -0.193897 0.009028
+vn -0.830701 0.556558 0.013370
+vn -0.830701 0.556558 0.013370
+vn -0.830701 0.556558 0.013370
+vn -0.830701 0.556558 0.013370
+vn -0.193809 0.980990 0.009880
+vn -0.193809 0.980990 0.009880
+vn -0.193809 0.980990 0.009880
+vn -0.193809 0.980990 0.009880
+vn 0.556615 0.830771 0.000602
+vn 0.556614 0.830771 0.000602
+vn 0.556614 0.830771 0.000602
+vn 0.556614 0.830771 0.000602
+vn 0.808314 0.162765 0.565805
+vn 0.810752 0.158882 0.563416
+vn 0.810752 0.158882 0.563416
+vn 0.813164 0.155001 0.561016
+vn 0.684913 -0.463636 0.562082
+vn 0.685353 -0.461762 0.563087
+vn 0.685353 -0.461762 0.563087
+vn 0.685790 -0.459885 0.564090
+vn 0.156089 -0.814221 0.559179
+vn 0.160566 -0.811496 0.561865
+vn 0.160566 -0.811496 0.561865
+vn 0.165047 -0.808738 0.564538
+vn -0.360744 -0.253944 0.897428
+vn -0.077687 -0.443833 0.892736
+vn 0.011313 -0.007582 0.999907
+vn -0.427011 0.080421 0.900663
+vn -0.237521 0.364132 0.900551
+vn 0.097462 0.430849 0.897146
+vn 0.381563 0.240750 0.892440
+vn 0.447621 -0.094657 0.889199
+vn 0.257087 -0.378160 0.889326
+vn 0.026979 0.195437 -0.980345
+vn 0.148624 0.113887 -0.982314
+vn -0.010866 0.007880 -0.999910
+vn 0.177051 -0.029786 -0.983751
+vn 0.095578 -0.151570 -0.983815
+vn -0.048221 -0.180096 -0.982466
+vn -0.170081 -0.098503 -0.980495
+vn -0.198465 0.045384 -0.979057
+vn -0.116778 0.167125 -0.978995
+vn -0.556614 -0.830771 -0.000602
+vn -0.556614 -0.830771 -0.000602
+vn -0.556614 -0.830771 -0.000602
+vn -0.556614 -0.830771 -0.000602
+vn 0.193809 -0.980990 -0.009880
+vn 0.193809 -0.980990 -0.009880
+vn 0.193809 -0.980990 -0.009880
+vn 0.193809 -0.980990 -0.009880
+vn 0.830701 -0.556558 -0.013370
+vn 0.830701 -0.556558 -0.013370
+vn 0.830701 -0.556558 -0.013370
+vn 0.830701 -0.556557 -0.013370
+vn -0.805512 -0.164796 0.569203
+vn -0.805491 -0.164830 0.569223
+vn -0.805491 -0.164830 0.569223
+vn -0.805470 -0.164864 0.569243
+vn -0.679386 0.464067 0.568398
+vn -0.680351 0.460069 0.570490
+vn -0.680351 0.460069 0.570490
+vn -0.681303 0.456054 0.572574
+vn -0.153741 0.812099 0.562902
+vn -0.154449 0.811668 0.563330
+vn -0.154449 0.811668 0.563330
+vn -0.155157 0.811236 0.563757
+vn 0.451866 0.695607 0.558524
+vn 0.457973 0.687340 0.563759
+vn 0.457973 0.687340 0.563759
+vn 0.464043 0.678950 0.568939
+vn 0.980980 0.193898 -0.009029
+vn 0.980980 0.193898 -0.009028
+vn 0.980980 0.193898 -0.009028
+vn 0.980980 0.193897 -0.009028
+s 1
+g pCylinder3
+usemtl initialShadingGroup
+f 133/264/297 134/265/298 116/261/299
+f 115/262/300 116/261/299 134/265/298
+s 2
+f 133/243/301 137/244/302 124/246/303
+f 137/244/302 125/245/304 124/246/303
+s 3
+f 137/244/305 138/247/306 125/245/307
+f 138/247/306 126/248/308 125/245/307
+s 4
+f 138/247/309 139/249/310 126/248/311
+f 139/249/310 127/250/312 126/248/311
+s 5
+f 140/251/313 128/252/314 139/249/315
+f 139/249/315 128/252/314 127/250/316
+s 6
+f 136/273/317 140/277/318 121/270/319
+f 120/274/320 121/270/319 140/277/318
+s 7
+f 135/269/321 136/273/322 122/266/323
+f 121/270/324 122/266/323 136/273/322
+s 8
+f 134/265/325 135/269/326 115/262/327
+f 122/266/328 115/262/327 135/269/326
+s 9
+f 116/261/329 115/262/330 131/263/331
+f 117/267/332 116/261/329 131/263/331
+f 118/271/333 117/267/332 131/263/331
+f 119/275/334 118/271/333 131/263/331
+f 120/274/335 119/275/334 131/263/331
+f 121/270/336 120/274/335 131/263/331
+f 122/266/337 121/270/336 131/263/331
+f 115/262/330 122/266/337 131/263/331
+s 10
+f 123/278/338 124/279/339 132/280/340
+f 124/279/339 125/281/341 132/280/340
+f 125/281/341 126/283/342 132/280/340
+f 126/283/342 127/260/343 132/280/340
+f 127/260/343 128/259/344 132/280/340
+f 128/259/344 129/284/345 132/280/340
+f 129/284/345 130/282/346 132/280/340
+f 130/282/346 123/278/338 132/280/340
+s 11
+f 134/253/347 133/243/348 123/254/349
+f 133/243/348 124/246/350 123/254/349
+s 12
+f 135/255/351 134/253/352 130/256/353
+f 134/253/352 123/254/354 130/256/353
+s 13
+f 136/257/355 135/255/356 129/258/357
+f 135/255/356 130/256/358 129/258/357
+s 14
+f 137/268/359 133/264/360 117/267/361
+f 116/261/362 117/267/361 133/264/360
+s 15
+f 138/272/363 137/268/364 118/271/365
+f 117/267/366 118/271/365 137/268/364
+s 16
+f 139/276/367 138/272/368 119/275/369
+f 118/271/370 119/275/369 138/272/368
+s 17
+f 139/276/371 119/275/372 140/277/373
+f 119/275/372 120/274/374 140/277/373
+s 18
+f 136/257/375 129/258/376 140/285/377
+f 140/285/377 129/258/376 128/286/378
+g default
+v 11.157332 -7.420180 1.736020
+v 10.883809 -7.661501 1.740898
+v 10.519746 -7.638711 1.744502
+v 10.278406 -7.365162 1.744722
+v 10.301163 -7.001094 1.741428
+v 10.574685 -6.759773 1.736551
+v 10.938749 -6.782562 1.732947
+v 11.180090 -7.056111 1.732727
+v 11.598485 -7.674145 -1.055926
+v 11.024612 -8.180456 -1.045693
+v 10.260777 -8.132643 -1.038131
+v 9.754426 -7.558714 -1.037670
+v 9.802171 -6.794869 -1.044580
+v 10.376045 -6.288558 -1.054813
+v 11.139879 -6.336372 -1.062375
+v 11.646231 -6.910300 -1.062836
+v 10.731324 -7.207479 1.976221
+v 10.702034 -7.231912 -0.855167
+v 11.046259 -8.163026 1.030713
+v 11.620206 -7.656656 1.027471
+v 11.668089 -6.892700 1.033788
+v 11.161788 -6.318730 1.039061
+v 10.282424 -8.115213 1.038171
+v 9.775962 -7.541373 1.028032
+v 9.823685 -6.777546 1.018963
+v 10.397833 -6.271014 1.035138
+vt 0.354894 0.024406
+vt 0.406778 0.023817
+vt 0.408106 0.254268
+vt 0.356760 0.254939
+vt 0.458589 0.024190
+vt 0.458634 0.254519
+vt 0.509935 0.023317
+vt 0.509586 0.253410
+vt 0.560759 0.023039
+vt 0.563045 0.253134
+vt 0.303368 0.025036
+vt 0.305969 0.255370
+vt 0.252396 0.025087
+vt 0.254613 0.255917
+vt 0.201867 0.025494
+vt 0.203668 0.255894
+vt 0.578578 0.258118
+vt 0.506847 0.288423
+vt 0.114382 0.311863
+vt 0.150579 0.326559
+vt 0.114742 0.363036
+vt 0.113988 0.255764
+vt 0.189932 0.286597
+vt 0.165783 0.362545
+vt 0.078396 0.327066
+vt 0.038485 0.287662
+vt 0.221830 0.362099
+vt 0.151087 0.398742
+vt 0.063700 0.363263
+vt 0.007652 0.363606
+vt 0.190997 0.438044
+vt 0.115100 0.413946
+vt 0.078904 0.399250
+vt 0.039550 0.439109
+vt 0.115494 0.469941
+vt 0.651740 0.431292
+vt 0.580009 0.461597
+vt 0.579292 0.359755
+vt 0.507859 0.432304
+vt 0.681033 0.359142
+vt 0.477554 0.360573
+vt 0.650728 0.287411
+vt 0.151397 0.025817
+vt 0.151758 0.255924
+vn 0.548856 -0.618503 0.562327
+vn 0.550170 -0.616080 0.563700
+vn 0.550170 -0.616080 0.563700
+vn 0.551481 -0.613649 0.565069
+vn -0.062382 -0.998012 0.009028
+vn -0.062382 -0.998011 0.009028
+vn -0.062382 -0.998011 0.009028
+vn -0.062383 -0.998011 0.009028
+vn -0.749802 -0.661527 0.013370
+vn -0.749802 -0.661527 0.013370
+vn -0.749802 -0.661527 0.013370
+vn -0.749802 -0.661527 0.013370
+vn -0.997998 0.062471 0.009880
+vn -0.997998 0.062471 0.009880
+vn -0.997998 0.062471 0.009880
+vn -0.997998 0.062471 0.009880
+vn -0.661580 0.749874 0.000602
+vn -0.661580 0.749874 0.000602
+vn -0.661580 0.749874 0.000602
+vn -0.661580 0.749874 0.000602
+vn 0.048505 0.823111 0.565805
+vn 0.052881 0.824479 0.563416
+vn 0.052881 0.824479 0.563416
+vn 0.057248 0.825823 0.561016
+vn 0.622809 0.544218 0.562082
+vn 0.621109 0.545121 0.563087
+vn 0.621109 0.545121 0.563087
+vn 0.619405 0.546022 0.564090
+vn 0.827122 -0.056466 0.559179
+vn 0.825628 -0.051442 0.561865
+vn 0.825628 -0.051442 0.561865
+vn 0.824102 -0.046407 0.564538
+vn 0.153675 -0.413531 0.897428
+vn 0.409403 -0.188181 0.892736
+vn 0.010214 0.009009 0.999907
+vn -0.186540 -0.392440 0.900663
+vn -0.412623 -0.136931 0.900551
+vn -0.391810 0.203996 0.897146
+vn -0.135614 0.430302 0.892440
+vn 0.205557 0.408743 0.889199
+vn 0.431173 0.152279 0.889326
+vn -0.182118 0.075872 -0.980345
+vn -0.072271 0.172732 -0.982314
+vn -0.010388 -0.008501 -0.999910
+vn 0.073904 0.163624 -0.983751
+vn 0.170917 0.053816 -0.983815
+vn 0.161872 -0.092506 -0.982466
+vn 0.051929 -0.189562 -0.980495
+vn -0.094442 -0.180358 -0.979057
+vn -0.191359 -0.070354 -0.978995
+vn 0.661580 -0.749874 -0.000602
+vn 0.661580 -0.749874 -0.000602
+vn 0.661580 -0.749874 -0.000602
+vn 0.661580 -0.749874 -0.000602
+vn 0.997998 -0.062471 -0.009880
+vn 0.997998 -0.062471 -0.009880
+vn 0.997998 -0.062471 -0.009880
+vn 0.997998 -0.062471 -0.009880
+vn 0.749802 0.661527 -0.013370
+vn 0.749802 0.661527 -0.013370
+vn 0.749802 0.661527 -0.013370
+vn 0.749802 0.661528 -0.013370
+vn -0.045827 -0.820919 0.569203
+vn -0.045789 -0.820907 0.569223
+vn -0.045789 -0.820907 0.569223
+vn -0.045751 -0.820896 0.569242
+vn -0.621818 -0.538764 0.568398
+vn -0.618197 -0.540715 0.570490
+vn -0.618197 -0.540715 0.570490
+vn -0.614558 -0.542658 0.572574
+vn -0.824472 0.058195 0.562902
+vn -0.824236 0.057401 0.563330
+vn -0.824236 0.057401 0.563330
+vn -0.823999 0.056607 0.563757
+vn -0.557557 0.614151 0.558524
+vn -0.548008 0.617951 0.563759
+vn -0.548008 0.617951 0.563759
+vn -0.538348 0.621683 0.568939
+vn 0.062382 0.998012 -0.009029
+vn 0.062382 0.998011 -0.009028
+vn 0.062382 0.998011 -0.009028
+vn 0.062383 0.998011 -0.009028
+s 1
+g pCylinder4
+usemtl initialShadingGroup
+f 159/308/379 160/309/380 142/305/381
+f 141/306/382 142/305/381 160/309/380
+s 2
+f 159/287/383 163/288/384 150/290/385
+f 163/288/384 151/289/386 150/290/385
+s 3
+f 163/288/387 164/291/388 151/289/389
+f 164/291/388 152/292/390 151/289/389
+s 4
+f 164/291/391 165/293/392 152/292/393
+f 165/293/392 153/294/394 152/292/393
+s 5
+f 166/295/395 154/296/396 165/293/397
+f 165/293/397 154/296/396 153/294/398
+s 6
+f 162/317/399 166/321/400 147/314/401
+f 146/318/402 147/314/401 166/321/400
+s 7
+f 161/313/403 162/317/404 148/310/405
+f 147/314/406 148/310/405 162/317/404
+s 8
+f 160/309/407 161/313/408 141/306/409
+f 148/310/410 141/306/409 161/313/408
+s 9
+f 142/305/411 141/306/412 157/307/413
+f 143/311/414 142/305/411 157/307/413
+f 144/315/415 143/311/414 157/307/413
+f 145/319/416 144/315/415 157/307/413
+f 146/318/417 145/319/416 157/307/413
+f 147/314/418 146/318/417 157/307/413
+f 148/310/419 147/314/418 157/307/413
+f 141/306/412 148/310/419 157/307/413
+s 10
+f 149/322/420 150/323/421 158/324/422
+f 150/323/421 151/325/423 158/324/422
+f 151/325/423 152/327/424 158/324/422
+f 152/327/424 153/304/425 158/324/422
+f 153/304/425 154/303/426 158/324/422
+f 154/303/426 155/328/427 158/324/422
+f 155/328/427 156/326/428 158/324/422
+f 156/326/428 149/322/420 158/324/422
+s 11
+f 160/297/429 159/287/430 149/298/431
+f 159/287/430 150/290/432 149/298/431
+s 12
+f 161/299/433 160/297/434 156/300/435
+f 160/297/434 149/298/436 156/300/435
+s 13
+f 162/301/437 161/299/438 155/302/439
+f 161/299/438 156/300/440 155/302/439
+s 14
+f 163/312/441 159/308/442 143/311/443
+f 142/305/444 143/311/443 159/308/442
+s 15
+f 164/316/445 163/312/446 144/315/447
+f 143/311/448 144/315/447 163/312/446
+s 16
+f 165/320/449 164/316/450 145/319/451
+f 144/315/452 145/319/451 164/316/450
+s 17
+f 165/320/453 145/319/454 166/321/455
+f 145/319/454 146/318/456 166/321/455
+s 18
+f 162/301/457 155/302/458 166/329/459
+f 166/329/459 155/302/458 154/330/460

Added: trunk/skorpion/assets/a1a/default.png
===================================================================
(Binary files differ)


Property changes on: trunk/skorpion/assets/a1a/default.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/skorpion/assets/skorpion/default.jpg
===================================================================
(Binary files differ)


Property changes on: trunk/skorpion/assets/skorpion/default.jpg
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/skorpion/assets/skorpion/skorpion.obj
===================================================================
--- trunk/skorpion/assets/skorpion/skorpion.obj                         (rev 0)
+++ trunk/skorpion/assets/skorpion/skorpion.obj 2006-11-07 21:30:44 UTC (rev 
116)
@@ -0,0 +1,5501 @@
+# This file uses centimeters as units for non-parametric coordinates.
+
+mtllib skorpion.mtl
+g default
+v 0.901286 2.442620 8.030021
+v 1.728594 2.018674 8.032607
+v 2.384403 1.359822 8.034662
+v 2.804519 0.530559 8.035978
+v 2.947818 -0.387940 8.036433
+v 2.800274 -1.305767 8.035978
+v 2.376328 -2.133078 8.034662
+v 1.717479 -2.788889 8.032607
+v 0.888221 -3.209007 8.030021
+v -0.030274 -3.352308 8.027156
+v -0.948096 -3.204762 8.024289
+v -1.775403 -2.780815 8.021702
+v -2.431212 -2.121963 8.019651
+v -2.851328 -1.292701 8.018332
+v -2.994627 -0.374202 8.017880
+v -2.847083 0.543624 8.018332
+v -2.423137 1.370935 8.019651
+v -1.764289 2.026747 8.021702
+v -0.935030 2.446864 8.024289
+v -0.016536 2.590164 8.027156
+v 0.948096 2.442513 -6.961019
+v 1.775403 2.018565 -6.958433
+v 2.431213 1.359712 -6.956380
+v 2.851329 0.530451 -6.955062
+v 2.994628 -0.388048 -6.954608
+v 2.847083 -1.305875 -6.955062
+v 2.423137 -2.133186 -6.956380
+v 1.764289 -2.788998 -6.958433
+v 0.935031 -3.209115 -6.961019
+v 0.016536 -3.352416 -6.963885
+v -0.901286 -3.204870 -6.966752
+v -1.728593 -2.780923 -6.969339
+v -2.384402 -2.122072 -6.971391
+v -2.804518 -1.292809 -6.972710
+v -2.947818 -0.374311 -6.973163
+v -2.800273 0.543516 -6.972710
+v -2.376327 1.370826 -6.971391
+v -1.717479 2.026638 -6.969339
+v -0.888221 2.446757 -6.966752
+v 0.030274 2.590056 -6.963885
+v -0.023404 -0.381071 8.027011
+v 0.023405 -0.381179 -6.963885
+v 0.901286 2.442620 8.030023
+v 1.728594 2.018674 8.032609
+v -0.023405 -0.381071 8.027269
+v 1.728593 2.018674 8.032609
+v 2.384403 1.359822 8.034662
+v -0.023405 -0.381071 8.027269
+v 2.384403 1.359822 8.034662
+v 2.804519 0.530559 8.035980
+v -0.023405 -0.381071 8.027269
+v 2.804519 0.530559 8.035980
+v 2.947818 -0.387940 8.036434
+v -0.023405 -0.381071 8.027269
+v 2.947818 -0.387940 8.036434
+v 2.800273 -1.305767 8.035980
+v -0.023405 -0.381071 8.027269
+v 2.800274 -1.305767 8.035980
+v 2.376328 -2.133078 8.034662
+v -0.023405 -0.381071 8.027269
+v 2.376328 -2.133078 8.034662
+v 1.717479 -2.788889 8.032609
+v -0.023405 -0.381071 8.027269
+v 1.717479 -2.788889 8.032609
+v 0.888221 -3.209006 8.030023
+v -0.023405 -0.381071 8.027269
+v 0.888221 -3.209006 8.030023
+v -0.030274 -3.352309 8.027156
+v -0.023405 -0.381071 8.027269
+v -0.030274 -3.352309 8.027156
+v -0.948096 -3.204761 8.024293
+v -0.023405 -0.381071 8.027269
+v -0.948096 -3.204761 8.024293
+v -1.775403 -2.780815 8.021707
+v -0.023405 -0.381071 8.027269
+v -1.775403 -2.780815 8.021707
+v -2.431212 -2.121963 8.019651
+v -0.023405 -0.381071 8.027269
+v -2.431212 -2.121963 8.019651
+v -2.851327 -1.292701 8.018336
+v -0.023405 -0.381071 8.027269
+v -2.851327 -1.292701 8.018336
+v -2.994627 -0.374202 8.017880
+v -0.023405 -0.381071 8.027269
+v -2.994627 -0.374202 8.017880
+v -2.847082 0.543624 8.018336
+v -0.023405 -0.381071 8.027269
+v -2.847083 0.543624 8.018336
+v -2.423137 1.370935 8.019651
+v -0.023405 -0.381071 8.027269
+v -2.423137 1.370935 8.019651
+v -1.764288 2.026747 8.021707
+v -0.023405 -0.381071 8.027269
+v -1.764289 2.026747 8.021707
+v -0.935030 2.446863 8.024293
+v -0.023405 -0.381071 8.027269
+v -0.935031 2.446863 8.024293
+v -0.016536 2.590164 8.027156
+v -0.023405 -0.381071 8.027269
+v -0.016536 2.590164 8.027156
+v 0.901286 2.442620 8.030023
+v -0.023405 -0.381071 8.027269
+v 0.300232 0.640383 11.507631
+v 0.599485 0.487032 11.508566
+v 0.599499 0.487023 11.508566
+v 0.836718 0.248703 11.509303
+v 0.836727 0.248691 11.509303
+v 0.988692 -0.051269 11.509779
+v 0.988695 -0.051284 11.509778
+v 1.040532 -0.383524 11.509945
+v 1.040532 -0.383538 11.509945
+v 0.987160 -0.715535 11.509779
+v 0.987155 -0.715550 11.509778
+v 0.833805 -1.014805 11.509303
+v 0.833795 -1.014816 11.509303
+v 0.595478 -1.252035 11.508566
+v 0.595465 -1.252046 11.508566
+v 0.295506 -1.404011 11.507631
+v 0.295492 -1.404015 11.507630
+v -0.036745 -1.455852 11.506587
+v -0.036760 -1.455851 11.506587
+v -0.368755 -1.402479 11.505558
+v -0.368771 -1.402475 11.505557
+v -0.668025 -1.249124 11.504621
+v -0.668036 -1.249114 11.504621
+v -0.905255 -1.010796 11.503872
+v -0.905263 -1.010784 11.503872
+v -1.057227 -0.710824 11.503397
+v -1.057232 -0.710809 11.503397
+v -1.109069 -0.378569 11.503231
+v -1.109069 -0.378554 11.503231
+v -1.055696 -0.046558 11.503397
+v -1.055692 -0.046543 11.503397
+v -0.902342 0.252713 11.503871
+v -0.902334 0.252723 11.503872
+v -0.664015 0.489941 11.504621
+v -0.664002 0.489952 11.504621
+v -0.364043 0.641918 11.505557
+v -0.364029 0.641922 11.505558
+v -0.031791 0.693758 11.506587
+v -0.031777 0.693758 11.506587
+v 0.300218 0.640387 11.507630
+v 0.084964 -0.008896 12.352341
+v 0.193990 -0.064766 12.352675
+v 0.193998 -0.064771 12.352675
+v 0.280423 -0.151597 12.352954
+v 0.280429 -0.151605 12.352954
+v 0.335793 -0.260888 12.353128
+v 0.335796 -0.260897 12.353119
+v 0.354681 -0.381940 12.353185
+v 0.354681 -0.381950 12.353185
+v 0.335237 -0.502905 12.353119
+v 0.335234 -0.502913 12.353119
+v 0.279365 -0.611939 12.352954
+v 0.279358 -0.611948 12.352954
+v 0.192533 -0.698372 12.352675
+v 0.192525 -0.698378 12.352675
+v 0.083242 -0.753743 12.352341
+v 0.083234 -0.753746 12.352341
+v -0.037809 -0.772631 12.351961
+v -0.037818 -0.772631 12.351961
+v -0.158772 -0.753186 12.351580
+v -0.158782 -0.753183 12.351579
+v -0.267808 -0.697314 12.351238
+v -0.267814 -0.697308 12.351238
+v -0.354240 -0.610483 12.350968
+v -0.354243 -0.610476 12.350968
+v -0.409608 -0.501192 12.350793
+v -0.409612 -0.501182 12.350793
+v -0.428497 -0.380139 12.350736
+v -0.428497 -0.380131 12.350736
+v -0.409053 -0.259176 12.350793
+v -0.409049 -0.259165 12.350794
+v -0.353179 -0.150138 12.350968
+v -0.353175 -0.150133 12.350968
+v -0.266349 -0.063708 12.351238
+v -0.266342 -0.063702 12.351237
+v -0.157059 -0.008337 12.351580
+v -0.157049 -0.008334 12.351580
+v -0.036006 0.010551 12.351961
+v -0.035998 0.010552 12.351961
+v 0.084956 -0.008893 12.352341
+v -0.033652 -0.369701 12.498402
+v -0.030331 -0.371403 12.498411
+v -0.037365 -0.381038 12.498390
+v -0.030330 -0.371403 12.498411
+v -0.027697 -0.374048 12.498426
+v -0.037364 -0.381038 12.498390
+v -0.027697 -0.374049 12.498426
+v -0.026010 -0.377378 12.498427
+v -0.037364 -0.381038 12.498392
+v -0.026010 -0.377378 12.498427
+v -0.025435 -0.381066 12.498428
+v -0.037364 -0.381038 12.498390
+v -0.025435 -0.381066 12.498428
+v -0.026027 -0.384751 12.498427
+v -0.037364 -0.381039 12.498391
+v -0.026027 -0.384752 12.498427
+v -0.027729 -0.388073 12.498426
+v -0.037364 -0.381039 12.498390
+v -0.027730 -0.388074 12.498426
+v -0.030375 -0.390707 12.498411
+v -0.037364 -0.381039 12.498391
+v -0.030375 -0.390707 12.498411
+v -0.033705 -0.392393 12.498402
+v -0.037365 -0.381040 12.498390
+v -0.033705 -0.392394 12.498402
+v -0.037393 -0.392969 12.498390
+v -0.037365 -0.381040 12.498390
+v -0.037393 -0.392969 12.498390
+v -0.041078 -0.392376 12.498377
+v -0.037365 -0.381040 12.498390
+v -0.041078 -0.392376 12.498377
+v -0.044400 -0.390674 12.498368
+v -0.037366 -0.381040 12.498390
+v -0.044400 -0.390674 12.498368
+v -0.047033 -0.388029 12.498365
+v -0.037366 -0.381039 12.498390
+v -0.047033 -0.388029 12.498365
+v -0.048720 -0.384699 12.498353
+v -0.037366 -0.381039 12.498390
+v -0.048720 -0.384699 12.498353
+v -0.049295 -0.381011 12.498352
+v -0.037366 -0.381039 12.498390
+v -0.049295 -0.381011 12.498352
+v -0.048703 -0.377326 12.498353
+v -0.037366 -0.381038 12.498390
+v -0.048703 -0.377325 12.498353
+v -0.047001 -0.374004 12.498365
+v -0.037366 -0.381038 12.498390
+v -0.047001 -0.374004 12.498365
+v -0.044355 -0.371371 12.498368
+v -0.037366 -0.381038 12.498390
+v -0.044355 -0.371370 12.498368
+v -0.041026 -0.369684 12.498377
+v -0.037366 -0.381038 12.498390
+v -0.041025 -0.369684 12.498377
+v -0.037338 -0.369108 12.498390
+v -0.037365 -0.381038 12.498390
+v -0.037337 -0.369108 12.498390
+v -0.033652 -0.369701 12.498402
+v -0.037365 -0.381037 12.498392
+vt -0.013095 1.086139
+vt -0.012017 1.085552
+vt 0.882346 0.682550
+vt 0.926625 0.705240
+vt -0.011162 1.084640
+vt 0.832856 0.833678
+vt -0.010615 1.083491
+vt 0.961725 0.740503
+vt -0.010428 1.082219
+vt 0.984210 0.784886
+vt -0.010620 1.080948
+vt 0.991879 0.834046
+vt -0.011173 1.079802
+vt 0.983982 0.883172
+vt -0.012031 1.078894
+vt 0.961292 0.927451
+vt -0.013112 1.078312
+vt 0.926030 0.962551
+vt -0.014309 1.078113
+vt 0.881647 0.985036
+vt -0.015505 1.078317
+vt 0.832488 0.992707
+vt -0.016583 1.078905
+vt 0.783365 0.984809
+vt -0.017438 1.079817
+vt 0.739087 0.962119
+vt -0.017985 1.080966
+vt 0.703987 0.926857
+vt -0.018172 1.082238
+vt 0.681501 0.882472
+vt -0.017980 1.083509
+vt 0.673832 0.833311
+vt -0.017427 1.084655
+vt 0.681728 0.784187
+vt -0.016569 1.085563
+vt 0.704419 0.739908
+vt -0.015488 1.086145
+vt 0.739681 0.704808
+vt -0.014291 1.086344
+vt 0.784065 0.682323
+vt 0.926070 0.614951
+vt 0.926279 0.614843
+vt 0.926513 0.615558
+vt 0.925904 0.615118
+vt 0.926070 0.614951
+vt 0.926513 0.615558
+vt 0.925797 0.615327
+vt 0.925904 0.615118
+vt 0.926513 0.615558
+vt 0.925761 0.615560
+vt 0.925797 0.615327
+vt 0.926513 0.615558
+vt 0.925799 0.615792
+vt 0.925761 0.615560
+vt 0.926513 0.615558
+vt 0.925906 0.616001
+vt 0.925799 0.615792
+vt 0.926513 0.615558
+vt 0.926072 0.616167
+vt 0.925906 0.616001
+vt 0.926513 0.615558
+vt 0.926282 0.616274
+vt 0.926072 0.616167
+vt 0.926513 0.615558
+vt 0.926515 0.616310
+vt 0.926282 0.616274
+vt 0.926513 0.615558
+vt 0.926747 0.616272
+vt 0.926515 0.616310
+vt 0.926513 0.615558
+vt 0.926956 0.616165
+vt 0.926747 0.616272
+vt 0.926513 0.615558
+vt 0.927122 0.615999
+vt 0.926956 0.616165
+vt 0.926513 0.615558
+vt 0.927228 0.615789
+vt 0.927122 0.615999
+vt 0.926513 0.615558
+vt 0.927264 0.615556
+vt 0.927228 0.615789
+vt 0.926513 0.615558
+vt 0.927227 0.615324
+vt 0.927264 0.615556
+vt 0.926513 0.615558
+vt 0.927120 0.615115
+vt 0.927227 0.615324
+vt 0.926513 0.615558
+vt 0.926953 0.614949
+vt 0.927120 0.615115
+vt 0.926513 0.615558
+vt 0.926743 0.614843
+vt 0.926953 0.614949
+vt 0.926513 0.615558
+vt 0.926511 0.614806
+vt 0.926743 0.614843
+vt 0.926513 0.615558
+vt 0.926279 0.614843
+vt 0.926511 0.614806
+vt 0.926513 0.615558
+vt 0.833223 0.674654
+vt -0.013095 1.086139
+vt -0.014256 1.082054
+vt -0.014254 1.082088
+vt -0.014254 1.082088
+vt -0.012017 1.085552
+vt -0.011162 1.084640
+vt -0.014254 1.082088
+vt -0.011162 1.084640
+vt -0.010615 1.083491
+vt -0.014254 1.082088
+vt -0.010615 1.083491
+vt -0.010428 1.082219
+vt -0.014254 1.082088
+vt -0.010428 1.082219
+vt -0.010620 1.080948
+vt -0.014254 1.082088
+vt -0.010620 1.080948
+vt -0.011173 1.079802
+vt -0.014254 1.082088
+vt -0.011173 1.079802
+vt -0.012031 1.078894
+vt -0.014254 1.082088
+vt -0.012031 1.078894
+vt -0.013112 1.078312
+vt -0.014254 1.082088
+vt -0.013112 1.078312
+vt -0.014309 1.078113
+vt -0.014254 1.082088
+vt -0.014309 1.078113
+vt -0.015505 1.078317
+vt -0.014254 1.082088
+vt -0.015505 1.078317
+vt -0.016583 1.078905
+vt -0.014254 1.082088
+vt -0.016583 1.078905
+vt -0.017438 1.079817
+vt -0.014254 1.082088
+vt -0.017438 1.079817
+vt -0.017985 1.080966
+vt -0.014254 1.082088
+vt -0.017985 1.080966
+vt -0.018172 1.082238
+vt -0.014254 1.082088
+vt -0.018172 1.082238
+vt -0.017980 1.083509
+vt -0.014254 1.082088
+vt -0.017980 1.083509
+vt -0.017427 1.084655
+vt -0.014254 1.082088
+vt -0.017427 1.084655
+vt -0.016569 1.085563
+vt -0.014254 1.082088
+vt -0.016569 1.085563
+vt -0.015488 1.086145
+vt -0.014254 1.082088
+vt -0.015488 1.086145
+vt -0.014291 1.086344
+vt -0.014254 1.082088
+vt -0.014291 1.086344
+vt -0.013095 1.086139
+vt -0.014254 1.082088
+vt 0.886391 0.560869
+vt 0.905244 0.551208
+vt 0.911937 0.595632
+vt 0.918806 0.592113
+vt 0.871445 0.575884
+vt 0.886390 0.560869
+vt 0.906492 0.601103
+vt 0.911937 0.595633
+vt 0.861870 0.594782
+vt 0.871444 0.575884
+vt 0.903004 0.607988
+vt 0.906492 0.601104
+vt 0.858604 0.615714
+vt 0.861870 0.594783
+vt 0.901814 0.615615
+vt 0.903003 0.607989
+vt 0.861967 0.636631
+vt 0.858604 0.615715
+vt 0.903039 0.623236
+vt 0.901814 0.615615
+vt 0.871628 0.655486
+vt 0.861967 0.636632
+vt 0.906559 0.630105
+vt 0.903039 0.623236
+vt 0.886643 0.670431
+vt 0.871629 0.655487
+vt 0.912029 0.635550
+vt 0.906559 0.630105
+vt 0.905542 0.680006
+vt 0.886644 0.670432
+vt 0.918915 0.639039
+vt 0.912030 0.635551
+vt 0.926474 0.683272
+vt 0.905542 0.680006
+vt 0.926541 0.640229
+vt 0.918915 0.639039
+vt 0.947391 0.679909
+vt 0.926475 0.683272
+vt 0.934162 0.639003
+vt 0.926541 0.640229
+vt 0.966245 0.670248
+vt 0.947392 0.679909
+vt 0.941031 0.635484
+vt 0.934162 0.639003
+vt 0.981191 0.655233
+vt 0.966246 0.670247
+vt 0.946476 0.630013
+vt 0.941031 0.635483
+vt 0.990765 0.636335
+vt 0.981191 0.655232
+vt 0.949965 0.623128
+vt 0.946476 0.630013
+vt 0.994031 0.615402
+vt 0.990765 0.636334
+vt 0.951154 0.615501
+vt 0.949965 0.623127
+vt 0.990669 0.594486
+vt 0.994031 0.615401
+vt 0.949929 0.607881
+vt 0.951154 0.615500
+vt 0.981007 0.575631
+vt 0.990669 0.594485
+vt 0.946409 0.601011
+vt 0.949929 0.607880
+vt 0.965992 0.560686
+vt 0.981007 0.575630
+vt 0.940939 0.595566
+vt 0.946409 0.601011
+vt 0.947094 0.551111
+vt 0.965991 0.560685
+vt 0.934054 0.592077
+vt 0.940939 0.595566
+vt 0.926162 0.547845
+vt 0.947093 0.551111
+vt 0.926427 0.590887
+vt 0.934053 0.592077
+vt 0.905245 0.551207
+vt 0.926161 0.547845
+vt 0.918807 0.592112
+vt 0.926427 0.590887
+vt 0.644883 0.601082
+vt 0.609826 0.601277
+vt 0.606508 0.008828
+vt 0.574612 0.601505
+vt 0.570952 0.009056
+vt 0.539222 0.601744
+vt 0.535578 0.009295
+vt 0.503651 0.601970
+vt 0.500380 0.009521
+vt 0.467915 0.602162
+vt 0.465337 0.009713
+vt 0.432046 0.602300
+vt 0.430414 0.009850
+vt 0.396093 0.602370
+vt 0.395566 0.009921
+vt 0.360112 0.602367
+vt 0.360742 0.009917
+vt 0.324163 0.602290
+vt 0.325889 0.009840
+vt 0.288305 0.602147
+vt 0.290956 0.009697
+vt 0.252582 0.601951
+vt 0.255900 0.009502
+vt 0.217028 0.601723
+vt 0.220688 0.009273
+vt 0.181654 0.601484
+vt 0.185298 0.009034
+vt 0.146457 0.601258
+vt 0.149727 0.008808
+vt 0.111414 0.601066
+vt 0.113991 0.008617
+vt 0.076491 0.600928
+vt 0.078123 0.008479
+vt 0.041643 0.600858
+vt 0.042169 0.008409
+vt 0.006817 0.600861
+vt 0.006186 0.008412
+vt 0.679816 0.600938
+vt 0.678090 0.008489
+vt 0.714038 0.008412
+vt 0.714669 0.600861
+vt 0.642231 0.008632
+vt 0.745151 0.360823
+vt 0.760881 0.332061
+vt 0.900282 0.432469
+vt 0.904905 0.424482
+vt 0.747040 0.563135
+vt 0.733901 0.516995
+vt 0.900759 0.493079
+vt 0.897026 0.481199
+vt 0.779854 0.304026
+vt 0.804066 0.279571
+vt 0.911998 0.414656
+vt 0.918464 0.407575
+vt 0.761203 0.332050
+vt 0.780166 0.304376
+vt 0.905203 0.424116
+vt 0.911858 0.414765
+vt 0.732997 0.394606
+vt 0.745282 0.361345
+vt 0.896947 0.442801
+vt 0.900104 0.432540
+vt 0.728717 0.430403
+vt 0.733319 0.394945
+vt 0.894684 0.455015
+vt 0.896900 0.443041
+vt 0.728372 0.473143
+vt 0.729032 0.431051
+vt 0.894298 0.467680
+vt 0.894734 0.455238
+vt 0.734030 0.516658
+vt 0.728630 0.473299
+vt 0.896875 0.481029
+vt 0.894131 0.467807
+vt 0.746702 0.563357
+vt 0.901043 0.493273
+vt 0.770125 0.602455
+vt 0.907401 0.501307
+vt 0.804039 0.635557
+vt 0.770453 0.602498
+vt 0.914569 0.508936
+vt 0.907483 0.501426
+vt 0.004458 1.063470
+vt -0.011870 1.066414
+vt 0.004458 1.063470
+vt 0.961964 0.082669
+vt 0.980987 0.124689
+vt 0.816675 0.159114
+vt 0.823553 0.168906
+vt 0.963781 0.321234
+vt 0.817191 0.225903
+vt 0.981417 0.286755
+vt 0.822000 0.215454
+vt 0.991447 0.167008
+vt 0.824508 0.179271
+vt 0.980398 0.124740
+vt 0.822688 0.168689
+vt 0.961982 0.083770
+vt 0.816763 0.158877
+vt 0.935691 0.043010
+vt 0.809174 0.148841
+vt 0.900335 0.011735
+vt 0.934533 0.042650
+vt 0.800263 0.142123
+vt 0.808933 0.150139
+vt 0.940891 0.352908
+vt 0.915561 0.377193
+vt 0.809079 0.237096
+vt 0.801249 0.244603
+vt 0.963600 0.321299
+vt 0.940622 0.352718
+vt 0.817479 0.226356
+vt 0.809845 0.237987
+vt 0.993815 0.250025
+vt 0.981660 0.286412
+vt 0.824657 0.203533
+vt 0.822553 0.215579
+vt 0.997270 0.208250
+vt 0.993620 0.250242
+vt 0.825488 0.191544
+vt 0.824198 0.202272
+vt 0.996046 0.207470
+vt 0.825679 0.191512
+vt 0.993204 0.167484
+vt 0.824554 0.179873
+vn 0.260676 0.965426 0.000807
+vn 0.546250 0.837620 0.001700
+vn 0.360882 0.932611 0.001120
+vn 0.631412 0.775445 0.001966
+vn 0.589632 0.806403 -0.045249
+vn 0.840133 0.542374 0.002619
+vn 0.999915 -0.012564 0.003483
+vn 0.951764 0.306818 0.002970
+vn 0.998953 0.027712 0.036401
+vn 0.999992 -0.002312 0.003123
+vn 0.975111 -0.214616 0.055670
+vn 0.932606 -0.360885 0.002915
+vn 0.837616 -0.546253 0.002619
+vn 0.775441 -0.631415 0.002426
+vn 0.627819 -0.778357 0.001966
+vn 0.542371 -0.840137 0.001700
+vn 0.356567 -0.934269 0.001120
+vn 0.256211 -0.966620 0.000807
+vn 0.050413 -0.998728 0.000165
+vn -0.055030 -0.998485 -0.000165
+vn -0.260678 -0.965425 -0.000807
+vn -0.360883 -0.932610 -0.001120
+vn -0.546250 -0.837621 -0.001700
+vn -0.631411 -0.775446 -0.001966
+vn -0.810370 -0.585913 -0.002526
+vn -0.810370 -0.585913 -0.002526
+vn -0.963555 -0.259809 0.063725
+vn -0.951764 -0.306817 -0.002970
+vn -0.992926 -0.100542 0.063162
+vn -0.998480 0.055030 -0.003118
+vn -0.953460 0.301085 -0.016208
+vn -0.932606 0.360886 -0.002915
+vn -0.771433 0.635571 0.030673
+vn -0.775441 0.631415 -0.002426
+vn -0.627819 0.778357 -0.001966
+vn -0.542372 0.840137 -0.001700
+vn -0.356567 0.934269 -0.001120
+vn -0.256211 0.966621 -0.000807
+vn -0.050412 0.998728 -0.000165
+vn 0.055029 0.998485 0.000165
+vn -0.002656 -0.000211 0.999996
+vn -0.002656 -0.000211 0.999996
+vn -0.002656 -0.000211 0.999996
+vn -0.004500 0.001204 0.999989
+vn -0.004500 0.001204 0.999989
+vn -0.004500 0.001204 0.999989
+vn -0.002896 -0.001146 0.999995
+vn -0.002896 -0.001146 0.999995
+vn -0.002896 -0.001146 0.999995
+vn -0.003212 -0.000247 0.999995
+vn -0.003212 -0.000247 0.999995
+vn -0.003212 -0.000247 0.999995
+vn -0.003064 0.000249 0.999995
+vn -0.003064 0.000249 0.999995
+vn -0.003064 0.000249 0.999995
+vn -0.002945 0.001228 0.999995
+vn -0.002945 0.001228 0.999995
+vn -0.002945 0.001228 0.999995
+vn -0.004638 -0.001236 0.999988
+vn -0.004638 -0.001236 0.999988
+vn -0.004638 -0.001236 0.999988
+vn -0.002743 0.000224 0.999996
+vn -0.002743 0.000224 0.999996
+vn -0.002743 0.000224 0.999996
+vn -0.003224 0.000007 0.999995
+vn -0.003224 0.000007 0.999995
+vn -0.003224 0.000007 0.999995
+vn -0.003191 0.000007 0.999995
+vn -0.003191 0.000007 0.999995
+vn -0.003191 0.000007 0.999995
+vn -0.003109 -0.000135 0.999995
+vn -0.003109 -0.000135 0.999995
+vn -0.003109 -0.000135 0.999995
+vn -0.001895 -0.000850 0.999998
+vn -0.001895 -0.000850 0.999998
+vn -0.001895 -0.000850 0.999998
+vn -0.003656 0.001588 0.999992
+vn -0.003656 0.001588 0.999992
+vn -0.003656 0.001588 0.999992
+vn -0.003190 -0.000004 0.999995
+vn -0.003190 -0.000004 0.999995
+vn -0.003190 -0.000004 0.999995
+vn -0.003103 0.000019 0.999995
+vn -0.003103 0.000019 0.999995
+vn -0.003103 0.000019 0.999995
+vn -0.003866 -0.001570 0.999991
+vn -0.003866 -0.001570 0.999991
+vn -0.003866 -0.001570 0.999991
+vn -0.001781 0.000859 0.999998
+vn -0.001781 0.000859 0.999998
+vn -0.001781 0.000859 0.999998
+vn -0.002944 0.000149 0.999996
+vn -0.002944 0.000149 0.999996
+vn -0.002944 0.000149 0.999996
+vn -0.003399 0.000008 0.999994
+vn -0.003399 0.000008 0.999994
+vn -0.003399 0.000008 0.999994
+vn -0.003337 0.000158 0.999994
+vn -0.003337 0.000158 0.999994
+vn -0.003337 0.000158 0.999994
+vn 0.003122 -0.000007 -0.999995
+vn 0.003123 -0.000008 -0.999995
+vn 0.003122 -0.000007 -0.999995
+vn 0.003123 -0.000008 -0.999995
+vn 0.003122 -0.000007 -0.999995
+vn 0.003122 -0.000007 -0.999995
+vn 0.003123 -0.000007 -0.999995
+vn 0.003123 -0.000007 -0.999995
+vn 0.003123 -0.000007 -0.999995
+vn 0.003122 -0.000007 -0.999995
+vn 0.003122 -0.000007 -0.999995
+vn 0.003123 -0.000007 -0.999995
+vn 0.003122 -0.000007 -0.999995
+vn 0.003123 -0.000008 -0.999995
+vn 0.003123 -0.000007 -0.999995
+vn 0.003123 -0.000007 -0.999995
+vn 0.003123 -0.000007 -0.999995
+vn 0.003123 -0.000007 -0.999995
+vn 0.003122 -0.000007 -0.999995
+vn 0.003122 -0.000007 -0.999995
+vn 0.003122 -0.000007 -0.999995
+vn 0.413176 0.855133 0.313102
+vn 0.387511 0.921844 -0.006151
+vn 0.024449 0.994056 0.106086
+vn -0.725652 0.685740 -0.056482
+vn -0.484251 -0.874333 -0.032289
+vn -0.456393 -0.889777 -0.001582
+vn 0.695840 -0.718179 0.005078
+vn 0.754388 -0.656418 0.003807
+vn 0.703207 0.699565 -0.126921
+vn 0.696343 0.612313 -0.374404
+vn 0.723732 0.681597 0.107875
+vn 0.750401 0.660939 -0.007630
+vn -0.778174 0.623863 -0.072387
+vn -0.793607 0.607289 -0.037254
+vn -0.793607 0.607289 -0.037254
+vn -0.807482 0.589887 -0.002509
+vn 0.992231 -0.002294 0.124390
+vn 0.882643 -0.464876 0.069508
+vn 0.882643 -0.464876 0.069508
+vn 0.586606 -0.809870 0.001667
+vn 0.945732 0.028279 0.323714
+vn 0.896969 0.416661 0.147784
+vn 0.670222 -0.736304 0.093051
+vn -0.891963 -0.452102 -0.002379
+vn 0.972105 0.124169 0.198983
+vn 0.958110 0.135242 0.252456
+vn -0.235108 0.955741 -0.176873
+vn -0.273343 0.958073 -0.085900
+vn -0.273343 0.958073 -0.085900
+vn -0.306372 0.951911 -0.000920
+vn -0.002312 -0.999997 -0.000000
+vn -0.002312 -0.999997 -0.000004
+vn -0.002312 -0.999997 -0.000004
+vn -0.002312 -0.999997 -0.000007
+vn 0.910360 -0.153778 0.384183
+vn 0.946803 -0.139896 0.289815
+vn 0.002312 0.999997 -0.000000
+vn 0.002312 0.999997 0.000004
+vn 0.002312 0.999997 0.000004
+vn 0.002312 0.999997 0.000007
+vn -0.353600 -0.929277 -0.106820
+vn -0.332330 -0.941656 -0.053303
+vn -0.332330 -0.941656 -0.053303
+vn -0.310567 -0.950551 -0.001144
+vn -0.494615 -0.285532 0.820870
+vn -0.470058 -0.809812 0.351069
+vn 0.776308 -0.418780 0.471137
+vn 0.862815 -0.493053 0.111579
+vn 0.207006 0.977214 0.046914
+vn 0.259356 0.965483 0.024004
+vn 0.259356 0.965483 0.024004
+vn 0.310534 0.950562 0.001144
+vn -0.890667 -0.453725 0.029101
+vn -0.590221 -0.807239 -0.001932
+vn 0.236190 -0.960255 0.148741
+vn -0.149391 -0.969070 -0.196432
+vn 0.806123 -0.584284 0.093689
+vn 0.820989 -0.001898 -0.570940
+vn -0.998537 0.002309 0.054027
+vn -0.441886 0.894971 0.061347
+vn -0.441886 0.894971 0.061347
+vn 0.590198 0.807256 0.001932
+vn -0.767684 -0.640815 0.004136
+vn -0.810123 -0.586254 -0.002603
+vn 0.392347 -0.834201 0.387521
+vn 0.373929 -0.911070 0.173576
+vn 0.388751 -0.868599 0.307261
+vn 0.358230 -0.931849 0.057700
+vn 0.766885 0.641620 0.014541
+vn 0.789002 0.614330 0.008576
+vn -0.449534 0.882469 0.138447
+vn -0.451885 0.892075 -0.001599
+vn -0.931414 -0.355742 0.076911
+vn -0.942850 -0.331201 0.036610
+vn 0.153266 -0.979778 -0.128626
+vn 0.192084 -0.957802 -0.213822
+vn 0.166847 -0.961651 0.217693
+vn 0.189454 -0.951750 0.241411
+vn 0.964606 0.257267 -0.057876
+vn 0.958987 0.282135 -0.027257
+vn 0.958987 0.282135 -0.027257
+vn 0.951924 0.306319 0.003104
+vn -0.999970 0.002312 -0.007436
+vn -0.999983 0.002312 -0.005284
+vn -0.999983 0.002312 -0.005284
+vn -0.999992 0.002312 -0.003132
+vn -0.145240 -0.950689 0.274035
+vn -0.094996 -0.955678 -0.278668
+vn -0.131259 -0.977015 0.167967
+vn 0.111894 -0.000259 -0.993720
+vn -0.999997 0.002312 0.001191
+vn 0.010567 -0.000059 0.999944
+vn -0.949520 0.312533 -0.027109
+vn 0.158756 0.987318 0.000417
+vn -0.947947 0.313514 -0.055729
+vn -0.949464 0.312507 -0.029278
+vn -0.413612 -0.885124 0.213263
+vn -0.452163 -0.889310 0.068387
+vn -0.441709 -0.864975 0.238142
+vn -0.500939 -0.858610 0.108855
+vn 0.945810 -0.320753 0.050607
+vn 0.948347 -0.316106 0.026740
+vn 0.461835 0.878563 0.121803
+vn 0.456082 0.889937 0.000975
+vn -0.776415 0.629465 0.030883
+vn -0.792427 0.609805 0.014075
+vn -0.857176 -0.302508 0.416818
+vn -0.900413 -0.403988 0.161400
+vn -0.799378 -0.515337 0.308905
+vn -0.738677 -0.673946 0.012344
+vn 0.806919 -0.589822 -0.031481
+vn 0.807402 -0.589826 -0.014368
+vn 0.963432 -0.205159 -0.172359
+vn 0.708894 0.705308 0.003245
+vn 0.929627 -0.002179 -0.368495
+vn 0.137886 0.935598 -0.325030
+vn -0.843435 -0.407814 0.349722
+vn -0.970720 -0.203315 0.127932
+vn -0.918327 -0.364059 0.155358
+vn 0.355074 -0.909940 -0.214318
+vn 0.832567 -0.524144 -0.179177
+vn 0.585522 -0.810655 0.001680
+vn -0.278884 0.957786 0.069783
+vn -0.292770 0.955571 0.034200
+vn -0.292770 0.955571 0.034200
+vn -0.306054 0.952014 -0.000965
+vn 0.778948 -0.176688 0.601682
+vn -0.762303 -0.234199 0.603362
+vn 0.354152 -0.933161 -0.061539
+vn 0.330233 -0.943418 -0.030149
+vn 0.330233 -0.943418 -0.030149
+vn 0.306021 -0.952024 0.000965
+vn 0.003246 0.999978 0.005713
+vn 0.002779 0.999992 0.002860
+vn 0.002779 0.999992 0.002860
+vn 0.002312 0.999997 0.000007
+vn -0.939362 0.156192 0.305293
+vn 0.417263 0.595159 0.686788
+vn -0.773263 0.244843 0.584907
+vn 0.999958 -0.002309 0.008914
+vn 0.003246 0.999978 0.005713
+vn 0.161579 -0.018393 0.986688
+vn 0.161579 -0.018393 0.986688
+vn -0.002312 -0.999997 -0.000007
+vn 0.268064 0.962359 -0.044792
+vn 0.289548 0.956914 -0.021844
+vn 0.289548 0.956914 -0.021844
+vn 0.310622 0.950533 0.000998
+vn 0.577241 0.399345 0.712262
+vn -0.652736 0.598294 0.464736
+vn -0.274182 -0.961608 -0.011626
+vn -0.292479 -0.956251 -0.006312
+vn -0.667441 -0.743618 -0.039425
+vn 0.890152 -0.455655 0.002764
+vn -0.998849 0.002289 -0.047909
+vn -0.445807 0.893703 -0.050515
+vn -0.688534 0.663925 0.291760
+vn -0.896187 0.408054 0.174185
+vn -0.920196 0.348921 0.177466
+vn -0.942232 -0.324165 0.084353
+vn -0.890892 -0.453360 -0.027869
+vn -0.589433 -0.807815 -0.001864
+vn 0.837193 0.546062 -0.030388
+vn 0.824147 0.566204 -0.013959
+vn 0.824147 0.566204 -0.013959
+vn 0.810444 0.585811 0.002433
+vn 0.156393 0.957743 0.241390
+vn 0.388500 0.920596 0.039631
+vn -0.690727 0.690746 0.213930
+vn -0.990094 -0.140074 -0.009652
+vn 0.442642 -0.893416 0.076655
+vn 0.451871 -0.892082 0.001441
+vn -0.119651 0.984273 -0.129962
+vn -0.113518 0.946122 -0.303260
+vn -0.137709 0.978999 0.150324
+vn -0.139949 0.986197 0.088486
+vn -0.947507 -0.311812 -0.070734
+vn -0.950199 -0.309484 -0.036624
+vn 0.177223 -0.978769 -0.102971
+vn 0.154154 -0.988047 0.000795
+vn 0.999987 -0.002312 0.004456
+vn 0.999990 -0.002312 0.003794
+vn 0.168191 0.936526 0.307622
+vn 0.300049 0.902900 -0.307804
+vn 0.674029 0.738694 -0.004002
+vn 0.299030 -0.000691 -0.954244
+vn -0.001093 -0.000037 -0.999999
+vn -0.999992 0.002312 -0.003132
+vn 0.914008 -0.371511 0.162997
+vn 0.936251 -0.341931 0.080732
+vn 0.936251 -0.341931 0.080732
+vn 0.950185 -0.311671 0.003004
+vn 0.380723 0.746271 0.546013
+vn 0.380716 0.746273 0.546014
+vn 0.603642 0.602471 0.522155
+vn 0.580395 0.579504 0.572116
+vn 0.746326 0.378971 0.547155
+vn 0.746326 0.378970 0.547155
+vn 0.842163 0.131654 0.522904
+vn 0.809827 0.126646 0.572835
+vn 0.841545 -0.135546 0.522904
+vn 0.809235 -0.130388 0.572833
+vn 0.758394 -0.389462 0.522646
+vn 0.729260 -0.374598 0.572587
+vn 0.600848 -0.605255 0.522157
+vn 0.577709 -0.582183 0.572114
+vn 0.384322 -0.761810 0.521481
+vn 0.369457 -0.732752 0.571469
+vn 0.130017 -0.843789 0.520687
+vn 0.124839 -0.811612 0.570702
+vn -0.137164 -0.843171 0.519854
+vn -0.132158 -0.811017 0.569900
+vn -0.391088 -0.760017 0.519061
+vn -0.376395 -0.731032 0.569138
+vn -0.606888 -0.602464 0.518386
+vn -0.583960 -0.579491 0.568490
+vn -0.749728 -0.378960 0.542491
+vn -0.749728 -0.378961 0.542491
+vn -0.845412 -0.131643 0.517637
+vn -0.813390 -0.126628 0.567769
+vn -0.844795 0.135550 0.517637
+vn -0.812797 0.130388 0.567768
+vn -0.761641 0.389472 0.517895
+vn -0.732815 0.374620 0.568017
+vn -0.593271 0.594315 0.542973
+vn -0.593274 0.594312 0.542973
+vn -0.387571 0.761817 0.519061
+vn -0.373015 0.732762 0.569139
+vn -0.133262 0.843797 0.519853
+vn -0.128403 0.811619 0.569901
+vn 0.131384 0.827925 0.545232
+vn 0.131382 0.827926 0.545232
+vn 0.354488 0.695534 0.624957
+vn 0.354503 0.695528 0.624954
+vn 0.551948 0.551369 0.625576
+vn 0.551927 0.551385 0.625581
+vn 0.695227 0.353210 0.626020
+vn 0.695227 0.353212 0.626020
+vn 0.770246 0.120502 0.626259
+vn 0.770242 0.120516 0.626261
+vn 0.769682 -0.124062 0.626257
+vn 0.769682 -0.124077 0.626254
+vn 0.693595 -0.356399 0.626023
+vn 0.693602 -0.356381 0.626027
+vn 0.549395 -0.553917 0.625572
+vn 0.549379 -0.553938 0.625568
+vn 0.351267 -0.697163 0.624961
+vn 0.351278 -0.697153 0.624965
+vn 0.118522 -0.772198 0.624230
+vn 0.118523 -0.772198 0.624229
+vn -0.125999 -0.771631 0.623466
+vn -0.126016 -0.771630 0.623464
+vn -0.358372 -0.695529 0.622743
+vn -0.358377 -0.695528 0.622742
+vn -0.555854 -0.551350 0.622126
+vn -0.555847 -0.551355 0.622127
+vn -0.699123 -0.353195 0.621675
+vn -0.699124 -0.353193 0.621675
+vn -0.774143 -0.120481 0.621439
+vn -0.774141 -0.120489 0.621440
+vn -0.773579 0.124060 0.621437
+vn -0.773579 0.124068 0.621436
+vn -0.697481 0.356428 0.621675
+vn -0.697482 0.356426 0.621675
+vn -0.553301 0.553914 0.622123
+vn -0.553295 0.553920 0.622122
+vn -0.355157 0.697176 0.622743
+vn -0.355165 0.697172 0.622743
+vn -0.122424 0.772204 0.623468
+vn -0.122437 0.772200 0.623471
+vn 0.122087 0.771643 0.624229
+vn 0.122087 0.771643 0.624229
+vn 0.163553 0.323559 0.931965
+vn 0.163286 0.323628 0.931988
+vn 0.163286 0.323628 0.931988
+vn 0.163019 0.323697 0.932011
+vn 0.253439 0.257715 0.932390
+vn 0.254147 0.257193 0.932342
+vn 0.254147 0.257193 0.932342
+vn 0.254855 0.256670 0.932293
+vn 0.322278 0.163462 0.932425
+vn 0.321920 0.163929 0.932467
+vn 0.321920 0.163929 0.932467
+vn 0.321562 0.164397 0.932508
+vn 0.356488 0.055866 0.932628
+vn 0.356483 0.055997 0.932622
+vn 0.356483 0.055997 0.932622
+vn 0.356479 0.056128 0.932616
+vn 0.356226 -0.057501 0.932629
+vn 0.356225 -0.057638 0.932621
+vn 0.356225 -0.057638 0.932621
+vn 0.356224 -0.057776 0.932613
+vn 0.321261 -0.164812 0.932539
+vn 0.321052 -0.165321 0.932521
+vn 0.321052 -0.165321 0.932521
+vn 0.320842 -0.165831 0.932502
+vn 0.252526 -0.259233 0.932217
+vn 0.253088 -0.258535 0.932259
+vn 0.253088 -0.258535 0.932259
+vn 0.253650 -0.257836 0.932299
+vn 0.161720 -0.324230 0.932052
+vn 0.161625 -0.324340 0.932031
+vn 0.161625 -0.324340 0.932031
+vn 0.161530 -0.324450 0.932009
+vn 0.053160 -0.359443 0.931651
+vn 0.053149 -0.359416 0.931663
+vn 0.053149 -0.359416 0.931663
+vn 0.053138 -0.359388 0.931674
+vn -0.060837 -0.359120 0.931306
+vn -0.060747 -0.359122 0.931312
+vn -0.060747 -0.359122 0.931312
+vn -0.060657 -0.359123 0.931317
+vn -0.168537 -0.323791 0.930997
+vn -0.168672 -0.323752 0.930986
+vn -0.168672 -0.323752 0.930986
+vn -0.168806 -0.323712 0.930975
+vn -0.259807 -0.257416 0.930719
+vn -0.260260 -0.257020 0.930701
+vn -0.260260 -0.257020 0.930701
+vn -0.260714 -0.256624 0.930684
+vn -0.328392 -0.163087 0.930356
+vn -0.327896 -0.163732 0.930417
+vn -0.327896 -0.163732 0.930417
+vn -0.327399 -0.164376 0.930478
+vn -0.362312 -0.056066 0.930369
+vn -0.362309 -0.056077 0.930370
+vn -0.362309 -0.056077 0.930370
+vn -0.362305 -0.056088 0.930370
+vn -0.362041 0.057738 0.930372
+vn -0.362040 0.057750 0.930372
+vn -0.362040 0.057750 0.930372
+vn -0.362040 0.057763 0.930371
+vn -0.327049 0.164417 0.930594
+vn -0.326845 0.165159 0.930535
+vn -0.326845 0.165159 0.930535
+vn -0.326641 0.165900 0.930474
+vn -0.258797 0.258895 0.930590
+vn -0.259156 0.258357 0.930639
+vn -0.259156 0.258357 0.930639
+vn -0.259516 0.257818 0.930689
+vn -0.166944 0.324632 0.930991
+vn -0.167127 0.324557 0.930984
+vn -0.167127 0.324557 0.930984
+vn -0.167310 0.324482 0.930977
+vn -0.059317 0.359340 0.931320
+vn -0.059160 0.359371 0.931318
+vn -0.059160 0.359371 0.931318
+vn -0.059003 0.359402 0.931316
+vn 0.054739 0.359140 0.931677
+vn 0.054771 0.359141 0.931675
+vn 0.054771 0.359141 0.931675
+vn 0.054802 0.359141 0.931673
+s 1
+g pCylinder1
+usemtl initialShadingGroup
+f 1/243/1 2/244/2 21/284/3
+f 2/244/2 22/245/4 21/284/3
+f 2/244/2 3/246/5 22/245/4
+f 3/246/5 23/247/6 22/245/4
+f 3/246/5 4/248/7 23/247/6
+f 4/248/7 24/249/8 23/247/6
+f 5/250/9 25/251/10 4/248/7
+f 4/248/7 25/251/10 24/249/8
+f 5/250/9 6/252/11 25/251/10
+f 6/252/11 26/253/12 25/251/10
+f 6/252/11 7/254/13 26/253/12
+f 7/254/13 27/255/14 26/253/12
+f 7/254/13 8/256/15 27/255/14
+f 8/256/15 28/257/16 27/255/14
+f 8/256/15 9/258/17 28/257/16
+f 9/258/17 29/259/18 28/257/16
+f 9/258/17 10/260/19 29/259/18
+f 10/260/19 30/261/20 29/259/18
+f 10/260/19 11/262/21 30/261/20
+f 11/262/21 31/263/22 30/261/20
+f 11/262/21 12/264/23 31/263/22
+f 12/264/23 32/265/24 31/263/22
+f 12/264/23 13/266/25 32/265/24
+f 13/266/25 33/267/26 32/265/24
+f 14/268/27 34/269/28 13/266/25
+f 13/266/25 34/269/28 33/267/26
+f 14/268/27 15/270/29 34/269/28
+f 15/270/29 35/271/30 34/269/28
+f 15/270/29 16/272/31 35/271/30
+f 16/272/31 36/273/32 35/271/30
+f 16/272/31 17/274/33 36/273/32
+f 17/274/33 37/275/34 36/273/32
+f 17/274/33 18/276/35 37/275/34
+f 18/276/35 38/277/36 37/275/34
+f 18/276/35 19/278/37 38/277/36
+f 19/278/37 39/279/38 38/277/36
+f 19/283/37 20/280/39 39/282/38
+f 20/280/39 40/281/40 39/282/38
+f 20/280/39 1/243/1 40/281/40
+f 1/243/1 21/284/3 40/281/40
+s off
+f 184/41/41 183/42/42 185/43/43
+f 187/44/44 186/45/45 188/46/46
+f 190/47/47 189/48/48 191/49/49
+f 193/50/50 192/51/51 194/52/52
+f 196/53/53 195/54/54 197/55/55
+f 199/56/56 198/57/57 200/58/58
+f 202/59/59 201/60/60 203/61/61
+f 205/62/62 204/63/63 206/64/64
+f 208/65/65 207/66/66 209/67/67
+f 211/68/68 210/69/69 212/70/70
+f 214/71/71 213/72/72 215/73/73
+f 217/74/74 216/75/75 218/76/76
+f 220/77/77 219/78/78 221/79/79
+f 223/80/80 222/81/81 224/82/82
+f 226/83/83 225/84/84 227/85/85
+f 229/86/86 228/87/87 230/88/88
+f 232/89/89 231/90/90 233/91/91
+f 235/92/92 234/93/93 236/94/94
+f 238/95/95 237/96/96 239/97/97
+f 241/98/98 240/99/99 242/100/100
+s 22
+f 21/3/101 22/4/102 42/6/103
+f 22/4/102 23/8/104 42/6/103
+f 23/8/104 24/10/105 42/6/103
+f 24/10/105 25/12/106 42/6/103
+f 25/12/106 26/14/107 42/6/103
+f 26/14/107 27/16/108 42/6/103
+f 27/16/108 28/18/109 42/6/103
+f 28/18/109 29/20/110 42/6/103
+f 29/20/110 30/22/111 42/6/103
+f 30/22/111 31/24/112 42/6/103
+f 31/24/112 32/26/113 42/6/103
+f 32/26/113 33/28/114 42/6/103
+f 33/28/114 34/30/115 42/6/103
+f 34/30/115 35/32/116 42/6/103
+f 35/32/116 36/34/117 42/6/103
+f 36/34/117 37/36/118 42/6/103
+f 37/36/118 38/38/119 42/6/103
+f 38/38/119 39/40/120 42/6/103
+f 39/40/120 40/101/121 42/6/103
+f 40/101/121 21/3/101 42/6/103
+s 23
+f 44/103/122 2/2/123 43/102/124
+f 2/2/123 1/1/125 43/102/124
+f 43/102/124 1/1/125 45/105/126
+f 1/1/125 41/104/127 45/105/126
+f 44/103/128 45/105/126 2/2/129
+f 41/104/127 2/2/129 45/105/126
+s 24
+f 47/107/130 3/5/131 46/106/132
+f 3/5/131 2/2/133 46/106/132
+s 25
+f 46/106/134 2/2/135 48/108/136
+f 2/2/135 41/104/137 48/108/136
+s 26
+f 47/107/138 48/108/139 3/5/140
+f 41/104/141 3/5/140 48/108/139
+s 1
+f 50/110/142 4/7/7 49/109/143
+f 4/7/7 3/5/5 49/109/143
+f 49/109/143 3/5/5 51/111/144
+f 3/5/5 41/104/145 51/111/144
+f 50/110/142 51/111/144 4/7/7
+f 41/104/145 4/7/7 51/111/144
+f 53/113/146 5/9/9 52/112/147
+f 5/9/9 4/7/7 52/112/147
+s 27
+f 52/112/148 4/7/149 54/114/150
+f 4/7/149 41/104/151 54/114/150
+s 28
+f 53/113/152 54/114/153 5/9/154
+f 41/104/155 5/9/154 54/114/153
+s 1
+f 56/116/156 6/11/11 55/115/157
+f 6/11/11 5/9/9 55/115/157
+s 29
+f 55/115/158 5/9/159 57/117/160
+f 5/9/159 41/104/161 57/117/160
+s 30
+f 56/116/162 57/117/163 6/11/164
+f 41/104/165 6/11/164 57/117/163
+s 31
+f 59/119/166 7/13/167 58/118/168
+f 7/13/167 6/11/169 58/118/168
+s 32
+f 58/118/170 6/11/171 60/120/172
+f 6/11/171 41/104/173 60/120/172
+s 31
+f 59/119/166 60/120/174 7/13/167
+f 41/104/175 7/13/167 60/120/174
+s 33
+f 62/122/176 8/15/177 61/121/178
+f 8/15/177 7/13/179 61/121/178
+s 34
+f 61/121/180 7/13/181 63/123/182
+f 7/13/181 41/104/183 63/123/182
+s 33
+f 62/122/176 63/123/184 8/15/177
+f 41/104/185 8/15/177 63/123/184
+s 35
+f 65/125/186 9/17/187 64/124/188
+f 9/17/187 8/15/189 64/124/188
+s 36
+f 64/124/190 8/15/191 66/126/192
+f 8/15/191 41/104/193 66/126/192
+f 65/125/194 66/126/192 9/17/195
+f 41/104/193 9/17/195 66/126/192
+s 37
+f 68/128/196 10/19/197 67/127/198
+f 10/19/197 9/17/199 67/127/198
+s 38
+f 67/127/200 9/17/201 69/129/202
+f 9/17/201 41/104/203 69/129/202
+s 39
+f 68/128/204 69/129/205 10/19/206
+f 41/104/207 10/19/206 69/129/205
+s 40
+f 71/131/208 11/21/209 70/130/210
+f 11/21/209 10/19/211 70/130/210
+s 41
+f 70/130/212 10/19/213 72/132/214
+f 10/19/213 41/104/215 72/132/214
+f 71/131/216 72/132/214 11/21/217
+f 41/104/215 11/21/217 72/132/214
+s 42
+f 74/134/218 12/23/219 73/133/220
+f 12/23/219 11/21/221 73/133/220
+s 43
+f 73/133/222 11/21/223 75/135/224
+f 11/21/223 41/104/225 75/135/224
+f 74/134/226 75/135/224 12/23/227
+f 41/104/225 12/23/227 75/135/224
+s 44
+f 77/137/228 13/25/229 76/136/230
+f 13/25/229 12/23/231 76/136/230
+s 45
+f 76/136/232 12/23/233 78/138/234
+f 12/23/233 41/104/235 78/138/234
+f 77/137/236 78/138/234 13/25/237
+f 41/104/235 13/25/237 78/138/234
+s 46
+f 80/140/238 14/27/239 79/139/240
+f 14/27/239 13/25/241 79/139/240
+f 79/139/240 13/25/241 81/141/242
+f 13/25/241 41/104/243 81/141/242
+s 47
+f 80/140/244 81/141/245 14/27/246
+f 41/104/247 14/27/246 81/141/245
+s 1
+f 83/143/248 15/29/29 82/142/249
+f 15/29/29 14/27/27 82/142/249
+s 48
+f 82/142/250 14/27/251 84/144/252
+f 14/27/251 41/104/253 84/144/252
+s 49
+f 83/143/254 84/144/255 15/29/256
+f 41/104/257 15/29/256 84/144/255
+s 50
+f 86/146/258 16/31/259 85/145/260
+f 16/31/259 15/29/261 85/145/260
+s 51
+f 85/145/262 15/29/263 87/147/264
+f 15/29/263 41/104/265 87/147/264
+s 52
+f 86/146/266 87/147/267 16/31/268
+f 41/104/269 16/31/268 87/147/267
+s 1
+f 89/149/270 17/33/33 88/148/271
+f 17/33/33 16/31/31 88/148/271
+s 53
+f 88/148/272 16/31/273 90/150/274
+f 16/31/273 41/104/275 90/150/274
+f 89/149/276 90/150/274 17/33/277
+f 41/104/275 17/33/277 90/150/274
+s 54
+f 92/152/278 18/35/279 91/151/280
+f 18/35/279 17/33/281 91/151/280
+f 91/151/280 17/33/281 93/153/282
+f 17/33/281 41/104/283 93/153/282
+s 55
+f 92/152/284 93/153/285 18/35/286
+f 41/104/287 18/35/286 93/153/285
+s 56
+f 95/155/288 19/37/289 94/154/290
+f 19/37/289 18/35/291 94/154/290
+f 94/154/290 18/35/291 96/156/292
+f 18/35/291 41/104/293 96/156/292
+f 95/325/288 96/326/292 19/327/289
+f 41/104/293 19/37/289 96/156/292
+s 57
+f 98/158/294 20/39/295 97/157/296
+f 20/39/295 19/37/297 97/157/296
+s 58
+f 97/157/298 19/37/299 99/159/300
+f 19/37/299 41/104/301 99/159/300
+f 98/158/302 99/159/300 20/39/303
+f 41/104/301 20/39/303 99/159/300
+s 59
+f 101/161/304 1/1/305 100/160/306
+f 1/1/305 20/39/307 100/160/306
+f 100/160/306 20/39/307 102/162/308
+f 20/39/307 41/104/309 102/162/308
+s 60
+f 101/161/310 102/162/311 1/1/312
+f 41/104/313 1/1/312 102/162/311
+s 23
+f 43/336/124 103/337/314 44/338/122
+f 44/338/122 103/337/314 104/339/315
+s 24
+f 47/328/130 46/329/132 106/330/316
+f 46/329/132 105/331/317 106/330/316
+s 1
+f 49/340/143 107/341/318 50/342/142
+f 50/342/142 107/341/318 108/343/319
+f 53/344/146 52/345/147 110/346/320
+f 52/345/147 109/347/321 110/346/320
+f 56/293/156 55/294/157 112/295/322
+f 55/294/157 111/296/323 112/295/322
+s 31
+f 59/297/166 58/298/168 114/299/324
+f 58/298/168 113/300/325 114/299/324
+s 33
+f 62/285/176 61/286/178 116/287/326
+f 61/286/178 115/288/327 116/287/326
+s 35
+f 65/301/186 64/302/188 118/303/328
+f 64/302/188 117/304/329 118/303/328
+s 37
+f 68/305/196 67/306/198 120/307/330
+f 67/306/198 119/308/331 120/307/330
+s 40
+f 71/309/208 70/310/210 122/311/332
+f 70/310/210 121/312/333 122/311/332
+s 42
+f 74/313/218 73/314/220 124/315/334
+f 73/314/220 123/316/335 124/315/334
+s 44
+f 77/289/228 76/290/230 126/291/336
+f 76/290/230 125/292/337 126/291/336
+s 46
+f 79/317/240 127/318/338 80/319/238
+f 80/319/238 127/318/338 128/320/339
+s 1
+f 83/321/248 82/322/249 130/323/340
+f 82/322/249 129/324/341 130/323/340
+s 50
+f 86/348/258 85/349/260 132/350/342
+f 85/349/260 131/351/343 132/350/342
+s 1
+f 89/352/270 88/353/271 134/354/344
+f 88/353/271 133/355/345 134/354/344
+s 54
+f 91/332/280 135/333/346 92/334/278
+f 92/334/278 135/333/346 136/335/347
+s 56
+f 95/356/288 94/357/290 138/358/348
+f 94/357/290 137/359/349 138/358/348
+s 57
+f 98/360/294 97/361/296 140/362/350
+f 97/361/296 139/363/351 140/362/350
+s 59
+f 100/364/306 141/365/352 101/366/304
+f 101/366/304 141/365/352 142/367/353
+s 23
+f 104/163/315 103/164/314 144/165/354
+f 103/164/314 143/166/355 144/165/354
+s 24
+f 106/167/316 105/168/317 146/169/356
+f 105/168/317 145/170/357 146/169/356
+s 1
+f 108/171/319 107/172/318 148/173/358
+f 107/172/318 147/174/359 148/173/358
+f 110/175/320 109/176/321 150/177/360
+f 109/176/321 149/178/361 150/177/360
+f 112/179/322 111/180/323 152/181/362
+f 111/180/323 151/182/363 152/181/362
+s 31
+f 114/183/324 113/184/325 154/185/364
+f 113/184/325 153/186/365 154/185/364
+s 33
+f 116/187/326 115/188/327 156/189/366
+f 115/188/327 155/190/367 156/189/366
+s 35
+f 118/191/328 117/192/329 158/193/368
+f 117/192/329 157/194/369 158/193/368
+s 37
+f 120/195/330 119/196/331 160/197/370
+f 119/196/331 159/198/371 160/197/370
+s 40
+f 122/199/332 121/200/333 162/201/372
+f 121/200/333 161/202/373 162/201/372
+s 42
+f 124/203/334 123/204/335 164/205/374
+f 123/204/335 163/206/375 164/205/374
+s 44
+f 126/207/336 125/208/337 166/209/376
+f 125/208/337 165/210/377 166/209/376
+s 46
+f 128/211/339 127/212/338 168/213/378
+f 127/212/338 167/214/379 168/213/378
+s 1
+f 130/215/340 129/216/341 170/217/380
+f 129/216/341 169/218/381 170/217/380
+s 50
+f 132/219/342 131/220/343 172/221/382
+f 131/220/343 171/222/383 172/221/382
+s 1
+f 134/223/344 133/224/345 174/225/384
+f 133/224/345 173/226/385 174/225/384
+s 54
+f 136/227/347 135/228/346 176/229/386
+f 135/228/346 175/230/387 176/229/386
+s 56
+f 138/231/348 137/232/349 178/233/388
+f 137/232/349 177/234/389 178/233/388
+s 57
+f 140/235/350 139/236/351 180/237/390
+f 139/236/351 179/238/391 180/237/390
+s 59
+f 142/239/353 141/240/352 182/241/392
+f 141/240/352 181/242/393 182/241/392
+s 61
+f 183/42/394 184/41/395 143/166/396
+f 144/165/397 143/166/396 184/41/395
+s 62
+f 186/45/398 187/44/399 145/170/400
+f 146/169/401 145/170/400 187/44/399
+s 63
+f 189/48/402 190/47/403 147/174/404
+f 148/173/405 147/174/404 190/47/403
+s 64
+f 192/51/406 193/50/407 149/178/408
+f 150/177/409 149/178/408 193/50/407
+s 65
+f 195/54/410 196/53/411 151/182/412
+f 152/181/413 151/182/412 196/53/411
+s 66
+f 198/57/414 199/56/415 153/186/416
+f 154/185/417 153/186/416 199/56/415
+s 67
+f 201/60/418 202/59/419 155/190/420
+f 156/189/421 155/190/420 202/59/419
+s 68
+f 204/63/422 205/62/423 157/194/424
+f 158/193/425 157/194/424 205/62/423
+s 69
+f 207/66/426 208/65/427 159/198/428
+f 160/197/429 159/198/428 208/65/427
+s 70
+f 210/69/430 211/68/431 161/202/432
+f 162/201/433 161/202/432 211/68/431
+s 71
+f 213/72/434 214/71/435 163/206/436
+f 164/205/437 163/206/436 214/71/435
+s 72
+f 216/75/438 217/74/439 165/210/440
+f 166/209/441 165/210/440 217/74/439
+s 73
+f 219/78/442 220/77/443 167/214/444
+f 168/213/445 167/214/444 220/77/443
+s 74
+f 222/81/446 223/80/447 169/218/448
+f 170/217/449 169/218/448 223/80/447
+s 75
+f 225/84/450 226/83/451 171/222/452
+f 172/221/453 171/222/452 226/83/451
+s 76
+f 228/87/454 229/86/455 173/226/456
+f 174/225/457 173/226/456 229/86/455
+s 77
+f 231/90/458 232/89/459 175/230/460
+f 176/229/461 175/230/460 232/89/459
+s 78
+f 234/93/462 235/92/463 177/234/464
+f 178/233/465 177/234/464 235/92/463
+s 79
+f 237/96/466 238/95/467 179/238/468
+f 180/237/469 179/238/468 238/95/467
+s 80
+f 240/99/470 241/98/471 181/242/472
+f 182/241/473 181/242/472 241/98/471
+g default
+v -1.773503 1.987837 -6.313229
+v 1.771350 1.987837 -6.313229
+v -3.248175 9.613205 -9.713912
+v 3.246022 9.613205 -9.713912
+v -3.248175 9.357053 -10.083490
+v 3.246022 9.357053 -10.083490
+v -1.773503 1.731689 -6.682804
+v 1.771350 1.731689 -6.682804
+v -0.001076 9.485126 -9.898701
+v -0.001076 9.613205 -9.713912
+v 3.246022 9.485126 -9.898701
+v -0.001076 9.357053 -10.083490
+v -3.248175 9.485126 -9.898701
+v -1.624625 9.549167 -9.806306
+v -3.248175 9.549167 -9.806306
+v -1.624625 9.613205 -9.713912
+v -0.001076 9.549167 -9.806306
+v -1.624625 9.485126 -9.898701
+v 1.622473 9.549167 -9.806306
+v 1.622473 9.613205 -9.713912
+v 3.246022 9.549167 -9.806306
+v 1.622473 9.485126 -9.898701
+v 1.622473 9.421090 -9.991095
+v 3.246022 9.421090 -9.991095
+v 1.622473 9.357053 -10.083490
+v -0.001076 9.421090 -9.991095
+v -1.624625 9.421090 -9.991095
+v -1.624625 9.357053 -10.083490
+v -3.248175 9.421090 -9.991095
+v -2.961403 9.591348 -9.972319
+v -1.481240 9.591348 -9.972319
+v -2.961403 9.655385 -9.879924
+v -1.481240 9.655385 -9.879924
+v -0.001076 9.719418 -9.787530
+v -0.001076 9.655380 -9.879924
+v 1.479087 9.719418 -9.787530
+v 1.479087 9.655380 -9.879924
+v 2.959251 9.591348 -9.972323
+v 1.479087 9.591348 -9.972323
+v 2.959251 9.527307 -10.064717
+v 1.479087 9.527307 -10.064717
+v -0.001076 9.463271 -10.157106
+v -0.001076 9.527307 -10.064711
+v -1.481239 9.463271 -10.157106
+v -1.481239 9.527307 -10.064711
+v -2.961402 9.719418 -9.787528
+v -2.961402 9.655380 -9.879922
+v -1.481239 9.719418 -9.787528
+v -1.481239 9.655380 -9.879922
+v -1.481239 9.719421 -9.787530
+v -0.001076 9.719421 -9.787530
+v -0.001076 9.655380 -9.879924
+v -1.481239 9.655380 -9.879924
+v -0.001076 9.655385 -9.879924
+v -0.001076 9.591348 -9.972319
+v -1.481239 9.591348 -9.972319
+v -1.481239 9.655385 -9.879924
+v 1.479087 9.719423 -9.787532
+v 2.959250 9.719423 -9.787532
+v 2.959250 9.655385 -9.879926
+v 1.479087 9.655385 -9.879926
+v 2.959250 9.655380 -9.879922
+v 2.959250 9.591343 -9.972317
+v 1.479087 9.591343 -9.972317
+v 1.479087 9.655380 -9.879922
+v 1.479087 9.591343 -9.972319
+v -0.001076 9.591343 -9.972319
+v -0.001076 9.655380 -9.879924
+v 1.479087 9.655380 -9.879924
+v 2.959250 9.527307 -10.064713
+v 2.959250 9.463271 -10.157108
+v 1.479086 9.463271 -10.157108
+v 1.479086 9.527307 -10.064713
+v -0.001076 9.463271 -10.157108
+v 1.479087 9.463271 -10.157108
+v -0.001076 9.527307 -10.064713
+v 1.479087 9.527307 -10.064713
+v -0.001076 9.527307 -10.064717
+v -0.001076 9.591348 -9.972323
+v 1.479087 9.591348 -9.972323
+v 1.479087 9.527307 -10.064717
+v -2.961403 9.463271 -10.157106
+v -1.481240 9.463271 -10.157106
+v -2.961403 9.527307 -10.064711
+v -1.481240 9.527307 -10.064711
+v -2.961403 9.591343 -9.972321
+v -2.961403 9.527307 -10.064715
+v -1.481240 9.591343 -9.972321
+v -1.481240 9.527307 -10.064715
+v -1.481239 9.591343 -9.972319
+v -0.001076 9.591343 -9.972319
+v -0.001076 9.527307 -10.064713
+v -1.481239 9.527307 -10.064713
+v -2.671287 9.643321 -10.008343
+v -1.336182 9.643321 -10.008343
+v -2.671287 9.707357 -9.915948
+v -1.336182 9.707357 -9.915948
+v -0.001076 9.771393 -9.823554
+v -0.001076 9.707357 -9.915948
+v 1.334029 9.771393 -9.823554
+v 1.334029 9.707357 -9.915948
+v 2.669135 9.643321 -10.008347
+v 1.334029 9.643321 -10.008345
+v 2.669135 9.579282 -10.100741
+v 1.334029 9.579282 -10.100739
+v -0.001076 9.515246 -10.193130
+v -0.001076 9.579284 -10.100735
+v -1.336181 9.515246 -10.193130
+v -1.336181 9.579284 -10.100735
+v -2.671285 9.771393 -9.823553
+v -2.671285 9.707352 -9.915946
+v -1.336181 9.771389 -9.823551
+v -1.336181 9.707352 -9.915945
+v -1.336181 9.771393 -9.823556
+v -0.001076 9.771393 -9.823556
+v -0.001076 9.707357 -9.915950
+v -1.336181 9.707357 -9.915950
+v -0.001076 9.707357 -9.915948
+v -0.001076 9.643321 -10.008343
+v -1.336181 9.643321 -10.008343
+v -1.336181 9.707357 -9.915948
+v 1.334029 9.771398 -9.823556
+v 2.669134 9.771398 -9.823558
+v 2.669134 9.707362 -9.915952
+v 1.334029 9.707357 -9.915950
+v 2.669134 9.707357 -9.915945
+v 2.669134 9.643321 -10.008339
+v 1.334029 9.643321 -10.008339
+v 1.334029 9.707357 -9.915945
+v 1.334029 9.643321 -10.008343
+v -0.001076 9.643321 -10.008343
+v -0.001076 9.707357 -9.915948
+v 1.334029 9.707357 -9.915948
+v 2.669134 9.579282 -10.100735
+v 2.669134 9.515246 -10.193130
+v 1.334028 9.515246 -10.193130
+v 1.334028 9.579282 -10.100735
+v -0.001076 9.515246 -10.193130
+v 1.334029 9.515246 -10.193130
+v -0.001076 9.579282 -10.100735
+v 1.334029 9.579282 -10.100735
+v -0.001076 9.579284 -10.100741
+v -0.001076 9.643321 -10.008347
+v 1.334030 9.643321 -10.008347
+v 1.334030 9.579284 -10.100741
+v -2.671286 9.515246 -10.193130
+v -1.336182 9.515246 -10.193130
+v -2.671286 9.579284 -10.100735
+v -1.336182 9.579284 -10.100735
+v -2.671286 9.643316 -10.008341
+v -2.671286 9.579280 -10.100735
+v -1.336182 9.643316 -10.008343
+v -1.336182 9.579280 -10.100737
+v -1.336181 9.643321 -10.008343
+v -0.001076 9.643321 -10.008343
+v -0.001076 9.579282 -10.100737
+v -1.336181 9.579282 -10.100737
+v -6.454343 -8.716166 -9.713912
+v -7.377326 -7.380494 -9.713912
+v -1.019386 -3.168008 -6.313229
+v -10.146249 -3.373468 -9.713912
+v -3.034608 -0.251698 -6.313229
+v -9.223274 -4.709143 -9.713912
+v -8.300297 -6.044817 -9.713912
+v -9.084071 -4.963562 -10.008342
+v -9.843070 -3.865186 -10.008342
+v -9.136753 -4.999966 -9.915948
+v -9.895749 -3.901590 -9.915948
+v -9.935516 -3.227848 -10.083490
+v -9.012540 -4.563522 -10.083490
+v -2.823878 -0.106077 -6.682804
+v -6.243610 -8.570545 -10.083489
+v -0.808656 -3.022393 -6.682804
+v -7.166585 -7.234868 -10.083490
+v -8.089564 -5.899196 -10.083490
+v -6.296293 -8.606950 -9.991095
+v -6.348976 -8.643354 -9.898701
+v -6.401662 -8.679763 -9.806306
+v -10.093566 -3.337063 -9.806306
+v -10.040881 -3.300656 -9.898701
+v -9.988197 -3.264251 -9.991095
+v -8.377757 -6.098342 -9.915948
+v -8.430437 -6.134746 -9.823555
+v -7.618756 -7.196718 -9.915948
+v -7.671438 -7.233123 -9.823554
+v -7.566075 -7.160315 -10.008344
+v -6.807077 -8.258687 -10.008346
+v -7.513389 -7.123907 -10.100738
+v -6.754394 -8.222282 -10.100741
+v -8.272393 -6.025536 -10.100735
+v -8.219709 -5.989129 -10.193130
+v -9.031389 -4.927159 -10.100735
+v -8.978704 -4.890753 -10.193130
+v -9.895744 -3.901588 -9.915946
+v -9.948430 -3.937996 -9.823553
+v -9.136750 -4.999964 -9.915945
+v -9.189431 -5.036369 -9.823551
+v -9.189434 -5.036370 -9.823555
+v -8.430435 -6.134746 -9.823556
+v -9.136753 -4.999966 -9.915950
+v -8.377757 -6.098341 -9.915950
+v -8.377757 -6.098341 -9.915948
+v -8.325071 -6.061937 -10.008342
+v -9.136753 -4.999966 -9.915948
+v -9.084069 -4.963562 -10.008343
+v -7.671444 -7.233126 -9.823556
+v -6.912446 -8.331499 -9.823557
+v -7.618756 -7.196718 -9.915950
+v -6.859761 -8.295092 -9.915951
+v -6.859757 -8.295089 -9.915945
+v -6.807079 -8.258687 -10.008340
+v -7.618756 -7.196718 -9.915945
+v -7.566075 -7.160315 -10.008339
+v -7.566075 -7.160315 -10.008343
+v -8.325072 -6.061937 -10.008343
+v -7.618756 -7.196718 -9.915948
+v -8.377757 -6.098341 -9.915948
+v -6.754395 -8.222281 -10.100735
+v -6.701712 -8.185879 -10.193130
+v -7.513390 -7.123907 -10.100735
+v -7.460711 -7.087504 -10.193130
+v -7.460711 -7.087505 -10.193130
+v -8.219709 -5.989129 -10.193130
+v -7.513391 -7.123909 -10.100735
+v -8.272392 -6.025533 -10.100735
+v -8.272393 -6.025536 -10.100741
+v -8.325072 -6.061937 -10.008347
+v -7.513393 -7.123910 -10.100741
+v -7.566075 -7.160315 -10.008346
+v -8.978704 -4.890753 -10.193131
+v -9.737701 -3.792376 -10.193131
+v -9.031389 -4.927159 -10.100735
+v -9.790387 -3.828782 -10.100735
+v -9.790383 -3.828780 -10.100736
+v -9.843064 -3.865184 -10.008341
+v -9.031385 -4.927155 -10.100737
+v -9.084067 -4.963560 -10.008342
+v -9.084071 -4.963564 -10.008343
+v -8.325072 -6.061937 -10.008343
+v -9.031386 -4.927156 -10.100737
+v -8.272392 -6.025533 -10.100737
+v -9.965238 -3.596965 -9.972318
+v -9.117904 -4.636329 -9.898701
+v -9.123778 -4.814679 -9.972319
+v -10.017920 -3.633369 -9.879924
+v -9.170589 -4.672737 -9.806306
+v -9.176460 -4.851083 -9.879924
+v -8.387677 -6.105199 -9.787530
+v -8.247615 -6.008411 -9.806306
+v -8.334993 -6.068793 -9.879924
+v -7.546215 -7.322910 -9.787530
+v -7.324637 -7.344089 -9.806306
+v -7.493533 -7.286505 -9.879924
+v -6.599391 -8.467819 -9.972323
+v -7.271952 -7.307680 -9.898701
+v -7.440855 -7.250104 -9.972323
+v -6.546701 -8.431411 -10.064717
+v -7.219270 -7.271276 -9.991095
+v -7.388168 -7.213700 -10.064717
+v -8.142248 -5.935600 -9.991095
+v -8.229628 -5.995986 -10.064711
+v -8.176948 -5.959582 -10.157106
+v -9.018412 -4.741868 -10.157107
+v -9.065223 -4.599926 -9.991095
+v -9.071090 -4.778271 -10.064711
+v -10.070600 -3.669774 -9.787528
+v -10.017916 -3.633368 -9.879922
+v -9.229139 -4.887487 -9.787528
+v -9.176456 -4.851081 -9.879922
+v -9.229141 -4.887487 -9.787530
+v -8.387679 -6.105199 -9.787530
+v -8.334993 -6.068794 -9.879924
+v -9.176456 -4.851080 -9.879924
+v -8.194931 -5.972006 -9.898701
+v -8.334998 -6.068795 -9.879924
+v -8.282317 -6.032392 -9.972319
+v -9.123778 -4.814680 -9.972319
+v -9.176459 -4.851083 -9.879924
+v -6.704758 -8.540627 -9.787532
+v -7.546220 -7.322914 -9.787532
+v -6.652075 -8.504220 -9.879925
+v -7.493535 -7.286508 -9.879926
+v -6.652072 -8.504217 -9.879922
+v -6.599387 -8.467815 -9.972317
+v -7.440850 -7.250104 -9.972317
+v -7.493533 -7.286505 -9.879922
+v -7.440850 -7.250104 -9.972319
+v -8.282313 -6.032389 -9.972319
+v -8.334993 -6.068794 -9.879924
+v -7.493533 -7.286505 -9.879924
+v -6.546703 -8.431410 -10.064713
+v -6.494023 -8.395002 -10.157108
+v -7.335486 -7.177290 -10.157108
+v -7.388169 -7.213698 -10.064713
+v -7.335485 -7.177292 -10.157108
+v -8.176948 -5.959582 -10.157108
+v -8.229628 -5.995986 -10.064713
+v -7.388168 -7.213698 -10.064713
+v -8.282317 -6.032392 -9.972323
+v -8.229628 -5.995986 -10.064717
+v -7.440855 -7.250104 -9.972323
+v -7.388168 -7.213698 -10.064717
+v -9.859871 -3.524154 -10.157105
+v -9.018411 -4.741867 -10.157106
+v -9.912554 -3.560558 -10.064711
+v -9.071090 -4.778271 -10.064711
+v -9.965233 -3.596962 -9.972320
+v -9.912554 -3.560559 -10.064715
+v -9.123774 -4.814675 -9.972321
+v -9.071091 -4.778271 -10.064715
+v -9.123774 -4.814677 -9.972319
+v -8.282313 -6.032389 -9.972319
+v -8.229628 -5.995986 -10.064713
+v -9.071090 -4.778271 -10.064713
+v 10.234662 -3.031481 -9.713912
+v 9.351811 -4.394021 -9.713912
+v 3.033339 -0.122568 -6.313230
+v 6.703258 -8.481592 -9.713912
+v 1.105718 -3.097496 -6.313229
+v 7.586107 -7.119074 -9.713912
+v 8.468960 -5.756548 -9.713912
+v 7.768226 -6.893379 -10.008342
+v 7.042228 -8.013843 -10.008342
+v 7.821973 -6.928203 -9.915948
+v 7.095977 -8.048659 -9.915948
+v 6.488286 -8.342315 -10.083490
+v 7.371142 -6.979791 -10.083490
+v 0.890755 -2.958224 -6.682804
+v 10.019690 -2.892193 -10.083489
+v 2.818369 0.016723 -6.682804
+v 9.136838 -4.254724 -10.083490
+v 8.253986 -5.617253 -10.083490
+v 10.073428 -2.927015 -9.991095
+v 10.127175 -2.961844 -9.898701
+v 10.180918 -2.996665 -9.806306
+v 6.649512 -8.446777 -9.806306
+v 6.595770 -8.411952 -9.898701
+v 6.542036 -8.377136 -9.991095
+v 8.547974 -5.807747 -9.915948
+v 8.601716 -5.842569 -9.823555
+v 9.273975 -4.687283 -9.915948
+v 9.327713 -4.722099 -9.823554
+v 9.220233 -4.652455 -10.008344
+v 9.946234 -3.532002 -10.008346
+v 9.166487 -4.617637 -10.100738
+v 9.892494 -3.497178 -10.100741
+v 8.440488 -5.738091 -10.100735
+v 8.386749 -5.703272 -10.193130
+v 7.714481 -6.858547 -10.100735
+v 7.660744 -6.823726 -10.193130
+v 7.095969 -8.048652 -9.915946
+v 7.149715 -8.083481 -9.823553
+v 7.821971 -6.928198 -9.915945
+v 7.875708 -6.963012 -9.823551
+v 7.875708 -6.963012 -9.823555
+v 8.601715 -5.842568 -9.823556
+v 7.821972 -6.928200 -9.915950
+v 8.547974 -5.807747 -9.915950
+v 8.547974 -5.807747 -9.915948
+v 8.494233 -5.772909 -10.008342
+v 7.821972 -6.928200 -9.915948
+v 7.768227 -6.893379 -10.008343
+v 9.327717 -4.722104 -9.823556
+v 10.053723 -3.601651 -9.823557
+v 9.273975 -4.687283 -9.915950
+v 9.999975 -3.566815 -9.915951
+v 9.999972 -3.566815 -9.915945
+v 9.946234 -3.532002 -10.008340
+v 9.273975 -4.687283 -9.915945
+v 9.220233 -4.652455 -10.008339
+v 9.220233 -4.652455 -10.008343
+v 8.494233 -5.772909 -10.008343
+v 9.273975 -4.687283 -9.915948
+v 8.547974 -5.807747 -9.915948
+v 9.892494 -3.497180 -10.100735
+v 9.838750 -3.462359 -10.193130
+v 9.166486 -4.617637 -10.100735
+v 9.112748 -4.582820 -10.193130
+v 9.112748 -4.582818 -10.193130
+v 8.386749 -5.703272 -10.193130
+v 9.166487 -4.617637 -10.100735
+v 8.440488 -5.738091 -10.100735
+v 8.440488 -5.738091 -10.100741
+v 8.494233 -5.772909 -10.008347
+v 9.166487 -4.617637 -10.100741
+v 9.220233 -4.652455 -10.008346
+v 7.660744 -6.823726 -10.193131
+v 6.934748 -7.944193 -10.193131
+v 7.714481 -6.858547 -10.100735
+v 6.988491 -7.979020 -10.100735
+v 6.988489 -7.979017 -10.100736
+v 7.042226 -8.013843 -10.008341
+v 7.714478 -6.858544 -10.100737
+v 7.768225 -6.893376 -10.008342
+v 7.768227 -6.893379 -10.008343
+v 8.494233 -5.772909 -10.008343
+v 7.714481 -6.858547 -10.100737
+v 8.440488 -5.738091 -10.100737
+v 6.840857 -8.229055 -9.972318
+v 7.478619 -7.049423 -9.898701
+v 7.645736 -6.986861 -9.972319
+v 6.894597 -8.263867 -9.879924
+v 7.532365 -7.084248 -9.806306
+v 7.699475 -7.021680 -9.879924
+v 8.558092 -5.814299 -9.787530
+v 8.415217 -5.721729 -9.806306
+v 8.504350 -5.779475 -9.879924
+v 9.362975 -4.572107 -9.787530
+v 9.298068 -4.359189 -9.806306
+v 9.309227 -4.537278 -9.879924
+v 10.060371 -3.260260 -9.972323
+v 9.244318 -4.324362 -9.898701
+v 9.255503 -4.502472 -9.972323
+v 10.006630 -3.225446 -10.064717
+v 9.190580 -4.289535 -9.991095
+v 9.201745 -4.467634 -10.064717
+v 8.307725 -5.652070 -9.991095
+v 8.396867 -5.709824 -10.064711
+v 8.343127 -5.675005 -10.157106
+v 7.538249 -6.917209 -10.157107
+v 7.424873 -7.014602 -9.991095
+v 7.591989 -6.952034 -10.064711
+v 6.948333 -8.298692 -9.787528
+v 6.894591 -8.263862 -9.879922
+v 7.753224 -7.056508 -9.787528
+v 7.699471 -7.021674 -9.879922
+v 7.753226 -7.056509 -9.787530
+v 8.558096 -5.814301 -9.787530
+v 8.504350 -5.779475 -9.879924
+v 7.699471 -7.021674 -9.879924
+v 8.361469 -5.686892 -9.898701
+v 8.504355 -5.779477 -9.879924
+v 8.450615 -5.744661 -9.972319
+v 7.645736 -6.986860 -9.972319
+v 7.699476 -7.021680 -9.879924
+v 10.167864 -3.329914 -9.787532
+v 9.362983 -4.572113 -9.787532
+v 10.114112 -3.295084 -9.879925
+v 9.309237 -4.537283 -9.879926
+v 10.114109 -3.295083 -9.879922
+v 10.060369 -3.260257 -9.972317
+v 9.255501 -4.502472 -9.972317
+v 9.309227 -4.537278 -9.879922
+v 9.255501 -4.502472 -9.972319
+v 8.450613 -5.744658 -9.972319
+v 8.504350 -5.779475 -9.879924
+v 9.309227 -4.537278 -9.879924
+v 10.006631 -3.225448 -10.064713
+v 9.952891 -3.190616 -10.157108
+v 9.148009 -4.432816 -10.157108
+v 9.201745 -4.467635 -10.064713
+v 9.148009 -4.432814 -10.157108
+v 8.343127 -5.675005 -10.157108
+v 8.396867 -5.709824 -10.064713
+v 9.201745 -4.467634 -10.064713
+v 8.450615 -5.744661 -9.972323
+v 8.396867 -5.709824 -10.064717
+v 9.255503 -4.502472 -9.972323
+v 9.201745 -4.467634 -10.064717
+v 6.733365 -8.159404 -10.157105
+v 7.538249 -6.917210 -10.157106
+v 6.787107 -8.194223 -10.064711
+v 7.591989 -6.952034 -10.064711
+v 6.840853 -8.229052 -9.972320
+v 6.787107 -8.194223 -10.064715
+v 7.645733 -6.986860 -9.972321
+v 7.591988 -6.952034 -10.064715
+v 7.645733 -6.986860 -9.972319
+v 8.450613 -5.744658 -9.972319
+v 8.396867 -5.709824 -10.064713
+v 7.591989 -6.952034 -10.064713
+vt 0.586446 0.625324
+vt 0.423721 0.621659
+vt 0.348313 0.967063
+vt 0.277089 0.967999
+vt 0.279974 0.620277
+vt 0.063419 0.970807
+vt 0.124465 0.622320
+vt 0.569311 0.984252
+vt 0.623231 0.983794
+vt 0.569342 0.988247
+vt 0.623262 0.987789
+vt 0.515422 0.988705
+vt 0.515453 0.992700
+vt 0.461502 0.989163
+vt 0.461533 0.993159
+vt 0.461471 0.985168
+vt 0.443777 0.623280
+vt 0.606823 0.623573
+vt 0.407552 0.985626
+vt 0.461440 0.981173
+vt 0.407520 0.981631
+vt -1.109658 1.052762
+vt 0.515360 0.980715
+vt 0.515329 0.976719
+vt 0.569280 0.980257
+vt 0.134641 0.969871
+vt 0.205865 0.968935
+vt 0.569248 0.976261
+vt 0.623262 0.987789
+vt 0.623293 0.991784
+vt 0.569342 0.988247
+vt 0.569373 0.992242
+vt 0.569373 0.992242
+vt 0.515453 0.992700
+vt 0.569342 0.988247
+vt 0.515422 0.988705
+vt 0.515422 0.988705
+vt 0.270878 0.973543
+vt 0.205944 0.974397
+vt 0.515391 0.984710
+vt 0.076078 0.976104
+vt 0.141011 0.975250
+vt 0.569342 0.988247
+vt 0.569311 0.984252
+vt 0.461533 0.993159
+vt 0.407614 0.993617
+vt 0.461502 0.989163
+vt 0.407583 0.989621
+vt 0.141011 0.975250
+vt 0.205944 0.974397
+vt 0.407583 0.989621
+vt 0.407551 0.985626
+vt 0.461502 0.989163
+vt 0.461471 0.985168
+vt 0.461471 0.985168
+vt 0.515391 0.984710
+vt 0.461502 0.989163
+vt 0.515422 0.988705
+vt 0.407520 0.981631
+vt 0.407489 0.977636
+vt 0.461440 0.981173
+vt 0.461409 0.977178
+vt 0.461409 0.977178
+vt 0.515329 0.976719
+vt 0.461440 0.981173
+vt 0.515360 0.980715
+vt 0.515360 0.980715
+vt 0.515391 0.984710
+vt 0.461440 0.981173
+vt 0.461471 0.985168
+vt 0.569248 0.976261
+vt 0.623168 0.975803
+vt 0.569280 0.980257
+vt 0.623200 0.979799
+vt 0.623200 0.979798
+vt 0.623231 0.983794
+vt 0.569280 0.980257
+vt 0.569311 0.984252
+vt 0.569311 0.984252
+vt 0.515391 0.984710
+vt 0.569280 0.980257
+vt 0.515360 0.980715
+vt 0.646515 0.983771
+vt 0.634943 0.983752
+vt 0.580946 0.984328
+vt 0.575165 0.984260
+vt 0.646547 0.987766
+vt -1.101399 1.056013
+vt -1.062898 1.052762
+vt 0.634974 0.987747
+vt 0.580978 0.988323
+vt 0.335812 0.972690
+vt 0.575196 0.988255
+vt 0.270878 0.973544
+vt 0.515440 0.992875
+vt 0.515449 0.992758
+vt 0.515409 0.988880
+vt 0.515418 0.988763
+vt 0.449871 0.993432
+vt 0.449839 0.989437
+vt 0.455671 0.993266
+vt 0.455639 0.989271
+vt -1.016138 1.048841
+vt 0.384239 0.985999
+vt 0.395830 0.985783
+vt 0.449808 0.985442
+vt -1.062898 1.048841
+vt 0.455608 0.985275
+vt 0.277188 0.967933
+vt 0.384208 0.982004
+vt 0.270977 0.973478
+vt 0.395799 0.981788
+vt 0.335911 0.972624
+vt 0.264553 0.976299
+vt 0.449777 0.981447
+vt 0.455577 0.981280
+vt 0.515346 0.980890
+vt 0.515315 0.976894
+vt 0.515355 0.980772
+vt 0.515324 0.976777
+vt 0.580915 0.980333
+vt 0.205983 0.977070
+vt 0.088844 0.978609
+vt 0.575134 0.980265
+vt 0.580884 0.976337
+vt 0.575102 0.976269
+vt 0.646578 0.991761
+vt 0.635006 0.991742
+vt 0.634974 0.987747
+vt 0.581009 0.992318
+vt 0.575227 0.992250
+vt 0.575196 0.988255
+vt 0.515449 0.992758
+vt 0.515418 0.988763
+vt 0.575196 0.988255
+vt 0.575227 0.992250
+vt 0.515377 0.984885
+vt 0.515418 0.988763
+vt 0.515386 0.984767
+vt 0.575165 0.984260
+vt 0.575196 0.988255
+vt 0.384302 0.993990
+vt -1.016138 1.052092
+vt 0.384271 0.989994
+vt -0.973507 1.052092
+vt 0.395893 0.993774
+vt 0.395862 0.989778
+vt 0.455639 0.989271
+vt 0.455671 0.993266
+vt 0.395862 0.989778
+vt 0.395830 0.985783
+vt 0.455608 0.985275
+vt 0.455639 0.989271
+vt 0.455608 0.985275
+vt 0.515386 0.984767
+vt 0.515418 0.988763
+vt -1.058769 1.052092
+vt 0.147413 0.977839
+vt 0.147413 0.977839
+vt 0.205983 0.977069
+vt 0.323123 0.975530
+vt 0.264553 0.976300
+vt 0.575134 0.980265
+vt 0.515355 0.980772
+vt 0.645504 0.966708
+vt 0.580726 0.966873
+vt 0.585245 0.624239
+vt 0.386390 0.967369
+vt 0.443808 0.624599
+vt 0.451169 0.967204
+vt 0.515947 0.967039
+vt 0.575035 0.971915
+vt 0.515978 0.972066
+vt 0.397863 0.972368
+vt 0.456920 0.972217
+vt 0.456921 0.972217
+vt 0.515978 0.972066
+vt 0.634093 0.971765
+vt 0.575035 0.971915
+vt 0.569263 0.974391
+vt 0.515993 0.974526
+vt 0.409453 0.974798
+vt 0.462723 0.974662
+vt 0.462723 0.974662
+vt 0.515993 0.974526
+vt 0.622533 0.974255
+vt 0.569263 0.974391
+vt 0.667286 0.964263
+vt 0.662191 0.964701
+vt 0.657097 0.965138
+vt 0.652004 0.965576
+vt 0.646909 0.966014
+vt 0.386201 0.967556
+vt 0.381187 0.967150
+vt 0.376174 0.966745
+vt 0.371160 0.966340
+vt 0.366145 0.965935
+vt 0.455639 0.989271
+vt 0.384177 0.978009
+vt 0.395799 0.981788
+vt 0.395768 0.977793
+vt 0.455577 0.981280
+vt 0.449746 0.977452
+vt 0.455546 0.977285
+vt 0.515355 0.980772
+vt 0.515324 0.976777
+vt 0.455577 0.981280
+vt 0.455546 0.977285
+vt 0.515386 0.984767
+vt 0.515355 0.980772
+vt 0.455608 0.985275
+vt 0.455577 0.981280
+vt 0.646484 0.979776
+vt 0.634912 0.979757
+vt 0.646453 0.975780
+vt 0.634881 0.975761
+vt 0.575134 0.980265
+vt 0.575102 0.976269
+vt 0.634943 0.983752
+vt 0.634912 0.979757
+vt 0.575165 0.984260
+vt 0.575134 0.980265
+vt 0.575165 0.984260
+vt 0.515386 0.984767
+vt 0.348313 0.967063
+vt 0.277089 0.967999
+vt 0.279974 0.620277
+vt 0.063419 0.970807
+vt 0.124465 0.622320
+vt 0.134641 0.969871
+vt 0.205865 0.968935
+vt 0.569311 0.984252
+vt 0.623231 0.983794
+vt 0.569342 0.988247
+vt 0.623262 0.987789
+vt 0.645504 0.966708
+vt 0.580726 0.966873
+vt 0.585245 0.624239
+vt 0.386390 0.967369
+vt 0.443808 0.624599
+vt 0.451169 0.967204
+vt 0.515947 0.967039
+vt 0.423721 0.621659
+vt 0.443777 0.623280
+vt 0.386201 0.967556
+vt 0.381187 0.967150
+vt 0.376174 0.966745
+vt 0.371160 0.966340
+vt 0.366145 0.965935
+vt 0.586446 0.625324
+vt 0.606823 0.623573
+vt 0.667286 0.964263
+vt 0.662191 0.964701
+vt 0.657097 0.965138
+vt 0.652004 0.965576
+vt 0.646909 0.966014
+vt 0.515422 0.988705
+vt 0.515453 0.992700
+vt 0.461502 0.989163
+vt 0.461533 0.993159
+vt 0.461471 0.985168
+vt 0.407552 0.985626
+vt 0.461440 0.981173
+vt 0.407520 0.981631
+vt 0.515360 0.980715
+vt 0.515329 0.976719
+vt 0.569280 0.980257
+vt 0.569248 0.976261
+vt 0.623262 0.987789
+vt 0.623293 0.991784
+vt 0.569342 0.988247
+vt 0.569373 0.992242
+vt 0.569373 0.992242
+vt 0.515453 0.992700
+vt 0.569342 0.988247
+vt 0.515422 0.988705
+vt 0.515422 0.988705
+vt 0.515391 0.984710
+vt 0.569342 0.988247
+vt 0.569311 0.984252
+vt 0.461533 0.993159
+vt 0.407614 0.993617
+vt 0.461502 0.989163
+vt 0.407583 0.989621
+vt 0.407583 0.989621
+vt 0.407551 0.985626
+vt 0.461502 0.989163
+vt 0.461471 0.985168
+vt 0.461471 0.985168
+vt 0.515391 0.984710
+vt 0.461502 0.989163
+vt 0.515422 0.988705
+vt 0.407520 0.981631
+vt 0.407489 0.977636
+vt 0.461440 0.981173
+vt 0.461409 0.977178
+vt 0.461409 0.977178
+vt 0.515329 0.976719
+vt 0.461440 0.981173
+vt 0.515360 0.980715
+vt 0.515360 0.980715
+vt 0.515391 0.984710
+vt 0.461440 0.981173
+vt 0.461471 0.985168
+vt 0.569248 0.976261
+vt 0.623168 0.975803
+vt 0.569280 0.980257
+vt 0.623200 0.979799
+vt 0.623200 0.979798
+vt 0.623231 0.983794
+vt 0.569280 0.980257
+vt 0.569311 0.984252
+vt 0.569311 0.984252
+vt 0.515391 0.984710
+vt 0.569280 0.980257
+vt 0.515360 0.980715
+vt 0.646515 0.983771
+vt 0.634943 0.983752
+vt 0.580946 0.984328
+vt 0.575165 0.984260
+vt 0.646547 0.987766
+vt 0.634974 0.987747
+vt -1.109658 1.052762
+vt -1.062898 1.052762
+vt -1.101399 1.056013
+vt 0.580978 0.988323
+vt 0.575196 0.988255
+vt 0.515440 0.992875
+vt 0.515449 0.992758
+vt 0.515409 0.988880
+vt 0.515418 0.988763
+vt 0.270878 0.973543
+vt 0.205944 0.974397
+vt 0.449871 0.993432
+vt 0.449839 0.989437
+vt 0.455671 0.993266
+vt 0.455639 0.989271
+vt 0.384239 0.985999
+vt 0.395830 0.985783
+vt 0.449808 0.985442
+vt 0.455608 0.985275
+vt 0.384208 0.982004
+vt 0.395799 0.981788
+vt 0.449777 0.981447
+vt 0.455577 0.981280
+vt 0.515346 0.980890
+vt 0.515315 0.976894
+vt 0.515355 0.980772
+vt 0.515324 0.976777
+vt 0.575035 0.971915
+vt 0.515978 0.972066
+vt 0.580915 0.980333
+vt 0.575134 0.980265
+vt 0.580884 0.976337
+vt 0.575102 0.976269
+vt 0.646578 0.991761
+vt 0.635006 0.991742
+vt 0.634974 0.987747
+vt 0.076078 0.976104
+vt 0.141011 0.975250
+vt 0.581009 0.992318
+vt 0.575227 0.992250
+vt 0.575196 0.988255
+vt 0.141011 0.975250
+vt 0.205944 0.974397
+vt 0.515449 0.992758
+vt 0.515418 0.988763
+vt 0.575196 0.988255
+vt 0.575227 0.992250
+vt 0.515377 0.984885
+vt 0.515418 0.988763
+vt 0.515386 0.984767
+vt 0.575165 0.984260
+vt 0.575196 0.988255
+vt 0.335812 0.972690
+vt 0.270878 0.973544
+vt 0.384302 0.993990
+vt 0.384271 0.989994
+vt 0.395893 0.993774
+vt 0.395862 0.989778
+vt 0.277188 0.967933
+vt 0.270977 0.973478
+vt 0.335911 0.972624
+vt 0.455671 0.993266
+vt 0.455639 0.989271
+vt 0.395862 0.989778
+vt 0.395830 0.985783
+vt 0.455608 0.985275
+vt 0.455639 0.989271
+vt 0.455608 0.985275
+vt 0.515386 0.984767
+vt 0.515418 0.988763
+vt 0.455639 0.989271
+vt 0.384177 0.978009
+vt 0.395799 0.981788
+vt 0.395768 0.977793
+vt 0.397863 0.972368
+vt 0.456920 0.972217
+vt 0.455577 0.981280
+vt 0.449746 0.977452
+vt 0.455546 0.977285
+vt 0.456921 0.972217
+vt 0.515978 0.972066
+vt 0.515355 0.980772
+vt 0.515324 0.976777
+vt 0.455577 0.981280
+vt 0.455546 0.977285
+vt 0.515386 0.984767
+vt 0.515355 0.980772
+vt 0.455608 0.985275
+vt 0.455577 0.981280
+vt -1.016138 1.048841
+vt -1.016138 1.052092
+vt -0.973507 1.052092
+vt 0.634093 0.971765
+vt 0.575035 0.971915
+vt 0.646484 0.979776
+vt 0.634912 0.979757
+vt 0.646453 0.975780
+vt 0.634881 0.975761
+vt 0.575134 0.980265
+vt 0.575102 0.976269
+vt 0.634943 0.983752
+vt 0.634912 0.979757
+vt 0.575165 0.984260
+vt 0.575134 0.980265
+vt 0.575165 0.984260
+vt 0.515386 0.984767
+vt 0.515355 0.980772
+vt -1.062898 1.048841
+vt -1.058769 1.052092
+vt 0.575134 0.980265
+vt 0.264553 0.976299
+vt 0.205983 0.977070
+vt 0.569263 0.974391
+vt 0.515993 0.974526
+vt 0.088844 0.978609
+vt 0.147413 0.977839
+vt 0.147413 0.977839
+vt 0.205983 0.977069
+vt 0.323123 0.975530
+vt 0.264553 0.976300
+vt 0.409453 0.974798
+vt 0.462723 0.974662
+vt 0.462723 0.974662
+vt 0.515993 0.974526
+vt 0.622533 0.974255
+vt 0.569263 0.974391
+vt 0.348313 0.967063
+vt 0.277089 0.967999
+vt 0.279974 0.620277
+vt 0.063419 0.970807
+vt 0.124465 0.622320
+vt 0.134641 0.969871
+vt 0.205865 0.968935
+vt 0.569311 0.984252
+vt 0.623231 0.983794
+vt 0.569342 0.988247
+vt 0.623262 0.987789
+vt 0.645504 0.966708
+vt 0.580726 0.966873
+vt 0.585245 0.624239
+vt 0.386390 0.967369
+vt 0.443808 0.624599
+vt 0.451169 0.967204
+vt 0.515947 0.967039
+vt 0.423721 0.621659
+vt 0.443777 0.623280
+vt 0.386201 0.967556
+vt 0.381187 0.967150
+vt 0.376174 0.966745
+vt 0.371160 0.966340
+vt 0.366145 0.965935
+vt 0.586446 0.625324
+vt 0.606823 0.623573
+vt 0.667286 0.964263
+vt 0.662191 0.964701
+vt 0.657097 0.965138
+vt 0.652004 0.965576
+vt 0.646909 0.966014
+vt 0.515422 0.988705
+vt 0.515453 0.992700
+vt 0.461502 0.989163
+vt 0.461533 0.993159
+vt 0.461471 0.985168
+vt 0.407552 0.985626
+vt 0.461440 0.981173
+vt 0.407520 0.981631
+vt 0.515360 0.980715
+vt 0.515329 0.976719
+vt 0.569280 0.980257
+vt 0.569248 0.976261
+vt 0.623262 0.987789
+vt 0.623293 0.991784
+vt 0.569342 0.988247
+vt 0.569373 0.992242
+vt 0.569373 0.992242
+vt 0.515453 0.992700
+vt 0.569342 0.988247
+vt 0.515422 0.988705
+vt 0.515422 0.988705
+vt 0.515391 0.984710
+vt 0.569342 0.988247
+vt 0.569311 0.984252
+vt 0.461533 0.993159
+vt 0.407614 0.993617
+vt 0.461502 0.989163
+vt 0.407583 0.989621
+vt 0.407583 0.989621
+vt 0.407551 0.985626
+vt 0.461502 0.989163
+vt 0.461471 0.985168
+vt 0.461471 0.985168
+vt 0.515391 0.984710
+vt 0.461502 0.989163
+vt 0.515422 0.988705
+vt 0.407520 0.981631
+vt 0.407489 0.977636
+vt 0.461440 0.981173
+vt 0.461409 0.977178
+vt 0.461409 0.977178
+vt 0.515329 0.976719
+vt 0.461440 0.981173
+vt 0.515360 0.980715
+vt 0.515360 0.980715
+vt 0.515391 0.984710
+vt 0.461440 0.981173
+vt 0.461471 0.985168
+vt 0.569248 0.976261
+vt 0.623168 0.975803
+vt 0.569280 0.980257
+vt 0.623200 0.979799
+vt 0.623200 0.979798
+vt 0.623231 0.983794
+vt 0.569280 0.980257
+vt 0.569311 0.984252
+vt 0.569311 0.984252
+vt 0.515391 0.984710
+vt 0.569280 0.980257
+vt 0.515360 0.980715
+vt 0.646515 0.983771
+vt 0.634943 0.983752
+vt 0.580946 0.984328
+vt 0.575165 0.984260
+vt 0.646547 0.987766
+vt 0.634974 0.987747
+vt -1.109658 1.052762
+vt -1.062898 1.052762
+vt -1.101399 1.056013
+vt 0.580978 0.988323
+vt 0.575196 0.988255
+vt 0.515440 0.992875
+vt 0.515449 0.992758
+vt 0.515409 0.988880
+vt 0.515418 0.988763
+vt 0.270878 0.973543
+vt 0.205944 0.974397
+vt 0.449871 0.993432
+vt 0.449839 0.989437
+vt 0.455671 0.993266
+vt 0.455639 0.989271
+vt 0.384239 0.985999
+vt 0.395830 0.985783
+vt 0.449808 0.985442
+vt 0.455608 0.985275
+vt 0.384208 0.982004
+vt 0.395799 0.981788
+vt 0.449777 0.981447
+vt 0.455577 0.981280
+vt 0.515346 0.980890
+vt 0.515315 0.976894
+vt 0.515355 0.980772
+vt 0.515324 0.976777
+vt 0.575035 0.971915
+vt 0.515978 0.972066
+vt 0.580915 0.980333
+vt 0.575134 0.980265
+vt 0.580884 0.976337
+vt 0.575102 0.976269
+vt 0.646578 0.991761
+vt 0.635006 0.991742
+vt 0.634974 0.987747
+vt 0.076078 0.976104
+vt 0.141011 0.975250
+vt 0.581009 0.992318
+vt 0.575227 0.992250
+vt 0.575196 0.988255
+vt 0.141011 0.975250
+vt 0.205944 0.974397
+vt 0.515449 0.992758
+vt 0.515418 0.988763
+vt 0.575196 0.988255
+vt 0.575227 0.992250
+vt 0.515377 0.984885
+vt 0.515418 0.988763
+vt 0.515386 0.984767
+vt 0.575165 0.984260
+vt 0.575196 0.988255
+vt 0.335812 0.972690
+vt 0.270878 0.973544
+vt 0.384302 0.993990
+vt 0.384271 0.989994
+vt 0.395893 0.993774
+vt 0.395862 0.989778
+vt 0.277188 0.967933
+vt 0.270977 0.973478
+vt 0.335911 0.972624
+vt 0.455671 0.993266
+vt 0.455639 0.989271
+vt 0.395862 0.989778
+vt 0.395830 0.985783
+vt 0.455608 0.985275
+vt 0.455639 0.989271
+vt 0.455608 0.985275
+vt 0.515386 0.984767
+vt 0.515418 0.988763
+vt 0.455639 0.989271
+vt 0.384177 0.978009
+vt 0.395799 0.981788
+vt 0.395768 0.977793
+vt 0.397863 0.972368
+vt 0.456920 0.972217
+vt 0.455577 0.981280
+vt 0.449746 0.977452
+vt 0.455546 0.977285
+vt 0.456921 0.972217
+vt 0.515978 0.972066
+vt 0.515355 0.980772
+vt 0.515324 0.976777
+vt 0.455577 0.981280
+vt 0.455546 0.977285
+vt 0.515386 0.984767
+vt 0.515355 0.980772
+vt 0.455608 0.985275
+vt 0.455577 0.981280
+vt -1.016138 1.048841
+vt -1.016138 1.052092
+vt -0.973507 1.052092
+vt 0.634093 0.971765
+vt 0.575035 0.971915
+vt 0.646484 0.979776
+vt 0.634912 0.979757
+vt 0.646453 0.975780
+vt 0.634881 0.975761
+vt 0.575134 0.980265
+vt 0.575102 0.976269
+vt 0.634943 0.983752
+vt 0.634912 0.979757
+vt 0.575165 0.984260
+vt 0.575134 0.980265
+vt 0.575165 0.984260
+vt 0.515386 0.984767
+vt 0.515355 0.980772
+vt -1.062898 1.048841
+vt -1.058769 1.052092
+vt 0.575134 0.980265
+vt 0.264553 0.976299
+vt 0.205983 0.977070
+vt 0.569263 0.974391
+vt 0.515993 0.974526
+vt 0.088844 0.978609
+vt 0.147413 0.977839
+vt 0.147413 0.977839
+vt 0.205983 0.977069
+vt 0.323123 0.975530
+vt 0.264553 0.976300
+vt 0.409453 0.974798
+vt 0.462723 0.974662
+vt 0.462723 0.974662
+vt 0.515993 0.974526
+vt 0.622533 0.974255
+vt 0.569263 0.974391
+vn 0.000000 0.477243 0.878771
+vn 0.000000 0.493704 0.869630
+vn 0.000000 0.407301 0.913294
+vn 0.000000 0.477242 0.878772
+vn 0.000000 0.407301 0.913294
+vn 0.000000 0.477242 0.878772
+vn 0.000000 0.505204 0.863000
+vn 0.000000 0.821898 -0.569635
+vn 0.000000 0.821898 -0.569635
+vn 0.000000 0.821898 -0.569635
+vn 0.000000 0.821898 -0.569635
+vn 0.000000 -0.477236 -0.878775
+vn 0.000000 -0.493694 -0.869636
+vn 0.000000 -0.407302 -0.913294
+vn 0.000000 -0.477240 -0.878773
+vn 0.000000 -0.407302 -0.913294
+vn 0.000000 -0.477240 -0.878773
+vn 0.000000 -0.505194 -0.863006
+vn 0.984228 -0.145398 0.100774
+vn 0.984228 -0.145398 0.100774
+vn 0.999716 -0.019572 0.013564
+vn 0.946146 0.266082 -0.184414
+vn 0.973652 0.187422 -0.129903
+vn 0.973652 0.187423 -0.129900
+vn 0.973652 0.187423 -0.129904
+vn -0.984228 -0.145398 0.100774
+vn -0.999716 -0.019572 0.013564
+vn -0.984228 -0.145398 0.100774
+vn -0.946146 0.266082 -0.184415
+vn -0.973652 0.187423 -0.129899
+vn -0.973652 0.187422 -0.129900
+vn -0.973652 0.187423 -0.129904
+vn 0.000000 0.821895 -0.569639
+vn 0.000000 0.821895 -0.569639
+vn 0.000000 0.821895 -0.569639
+vn 0.000000 0.821895 -0.569639
+vn -0.000001 0.821886 -0.569651
+vn -0.000001 0.821887 -0.569651
+vn -0.000001 0.821887 -0.569651
+vn -0.000001 0.821887 -0.569651
+vn 0.000000 0.821889 -0.569647
+vn 0.000000 0.821889 -0.569647
+vn 0.000000 0.821889 -0.569647
+vn 0.000000 0.821889 -0.569647
+vn 0.000001 0.821875 -0.569668
+vn 0.000002 0.821885 -0.569653
+vn 0.000002 0.821885 -0.569653
+vn 0.000004 0.821895 -0.569639
+vn 0.000000 0.821895 -0.569639
+vn 0.000000 0.821895 -0.569639
+vn 0.000000 0.821895 -0.569639
+vn 0.000000 0.821895 -0.569639
+vn 0.000000 0.821898 -0.569635
+vn 0.000000 0.821898 -0.569635
+vn 0.000000 0.821898 -0.569635
+vn 0.000000 0.821898 -0.569635
+vn -0.000001 0.821875 -0.569667
+vn -0.000002 0.821885 -0.569653
+vn -0.000002 0.821885 -0.569653
+vn -0.000004 0.821895 -0.569639
+vn 0.000000 0.821898 -0.569635
+vn 0.000000 0.821898 -0.569635
+vn 0.000000 0.821898 -0.569635
+vn 0.000000 0.821898 -0.569635
+vn 0.000000 0.821898 -0.569635
+vn 0.000000 0.821898 -0.569635
+vn 0.000000 0.821898 -0.569635
+vn 0.000000 0.821898 -0.569635
+vn 0.000000 0.821898 -0.569635
+vn 0.000000 0.821898 -0.569635
+vn 0.000000 0.821898 -0.569635
+vn 0.000000 0.821898 -0.569635
+vn 0.000000 0.821898 -0.569635
+vn 0.000000 0.821898 -0.569635
+vn 0.000000 0.821898 -0.569635
+vn 0.000000 0.821898 -0.569635
+vn 0.000000 0.821895 -0.569639
+vn 0.000000 0.821895 -0.569639
+vn 0.000000 0.821895 -0.569639
+vn 0.000000 0.821895 -0.569639
+vn 0.000000 0.821889 -0.569647
+vn 0.000000 0.821889 -0.569647
+vn 0.000000 0.821889 -0.569647
+vn 0.000000 0.821889 -0.569647
+vn -0.000001 0.821895 -0.569639
+vn -0.000001 0.821895 -0.569639
+vn -0.000001 0.821895 -0.569639
+vn -0.000001 0.821895 -0.569639
+vn 0.000000 0.821887 -0.569651
+vn 0.000000 0.821887 -0.569651
+vn 0.000000 0.821887 -0.569651
+vn 0.000000 0.821887 -0.569651
+vn 0.000000 -0.569626 -0.821904
+vn 0.000000 -0.569641 -0.821894
+vn 0.000000 -0.569626 -0.821904
+vn 0.000000 -0.569655 -0.821884
+vn -0.410867 0.749311 -0.519347
+vn -0.410872 0.749319 -0.519332
+vn 0.000000 0.569643 0.821892
+vn 0.000000 0.569643 0.821892
+vn 0.000000 0.569652 0.821886
+vn 0.000000 0.569662 0.821879
+vn 0.669504 -0.610498 0.423151
+vn 0.669510 -0.610501 0.423137
+vn 0.669510 -0.610501 0.423137
+vn 0.669515 -0.610504 0.423124
+vn -1.000000 -0.000001 0.000000
+vn -1.000000 -0.000000 0.000000
+vn -1.000000 -0.000001 0.000000
+vn -1.000000 0.000000 -0.000000
+vn 0.000000 0.569657 0.821882
+vn 0.000000 0.569654 0.821885
+vn 0.669490 0.610514 -0.423149
+vn 0.669490 0.610514 -0.423149
+vn 0.669490 0.610514 -0.423149
+vn 0.669490 0.610514 -0.423149
+vn 0.000000 -0.569661 -0.821880
+vn 0.000000 -0.569661 -0.821880
+vn 0.000000 -0.569652 -0.821886
+vn 0.000000 -0.569644 -0.821892
+vn 0.000000 0.569646 0.821890
+vn 0.000000 0.569654 0.821884
+vn 0.000000 0.569646 0.821890
+vn 0.000000 0.569657 0.821882
+vn 0.410873 0.749307 -0.519349
+vn 0.410868 0.749300 -0.519363
+vn 0.000000 -0.569663 -0.821878
+vn 0.000000 -0.569663 -0.821878
+vn 0.000000 -0.569659 -0.821881
+vn -0.000000 -0.569649 -0.821888
+vn -0.669520 -0.610498 0.423126
+vn -0.669515 -0.610495 0.423138
+vn -0.669515 -0.610495 0.423138
+vn -0.669510 -0.610492 0.423151
+vn 1.000000 -0.000001 0.000001
+vn 1.000000 -0.000001 0.000001
+vn 1.000000 -0.000001 0.000000
+vn 1.000000 -0.000001 0.000001
+vn 0.000000 -0.569640 -0.821895
+vn 0.000000 -0.569645 -0.821891
+vn -0.669499 0.610516 -0.423132
+vn -0.669499 0.610516 -0.423132
+vn -0.669499 0.610516 -0.423132
+vn -0.669499 0.610516 -0.423132
+vn 0.000000 0.569634 0.821899
+vn 0.000000 0.569634 0.821899
+vn 0.000000 0.569635 0.821898
+vn 0.000000 0.569636 0.821897
+vn -0.410847 0.749318 -0.519353
+vn -0.410847 0.749318 -0.519353
+vn 0.000000 0.569651 0.821887
+vn 0.000000 0.569655 0.821884
+vn 0.669486 -0.610518 0.423151
+vn 0.669486 -0.610518 0.423151
+vn 0.669486 -0.610518 0.423151
+vn 0.669486 -0.610518 0.423151
+vn 0.000000 -0.569650 -0.821887
+vn 0.000000 -0.569658 -0.821882
+vn 0.000000 -0.569650 -0.821887
+vn 0.000000 -0.569659 -0.821881
+vn 0.000000 0.569664 0.821878
+vn 0.000000 0.569678 0.821868
+vn 1.000000 -0.000000 0.000000
+vn 1.000000 -0.000000 0.000000
+vn 1.000000 -0.000000 0.000000
+vn 1.000000 -0.000000 0.000000
+vn 0.000000 -0.569660 -0.821880
+vn 0.000000 -0.569659 -0.821881
+vn 0.000000 -0.569661 -0.821880
+vn 0.000000 -0.569658 -0.821882
+vn -0.669498 0.610509 -0.423145
+vn -0.669494 0.610507 -0.423153
+vn -0.669494 0.610507 -0.423153
+vn -0.669491 0.610505 -0.423161
+vn 1.000000 -0.000001 0.000001
+vn 1.000000 -0.000001 0.000001
+vn 1.000000 -0.000000 0.000000
+vn 1.000000 0.000000 -0.000000
+vn 0.000000 -0.569626 -0.821904
+vn 0.000000 -0.569641 -0.821894
+vn 0.000000 -0.569627 -0.821904
+vn 0.000000 -0.569655 -0.821884
+vn -0.669502 0.610499 -0.423152
+vn -0.669508 0.610502 -0.423138
+vn -0.669508 0.610502 -0.423138
+vn -0.669514 0.610506 -0.423125
+vn 0.000000 0.569643 0.821892
+vn 0.000000 0.569643 0.821892
+vn 0.000000 0.569652 0.821886
+vn 0.000000 0.569662 0.821879
+vn 0.000000 0.569659 0.821881
+vn 0.000000 0.569659 0.821881
+vn 0.410864 0.749311 -0.519349
+vn 0.410864 0.749311 -0.519349
+vn 0.000000 -0.569653 -0.821885
+vn 0.000000 -0.569653 -0.821885
+vn 0.000000 -0.569654 -0.821884
+vn 0.000000 -0.569660 -0.821880
+vn -0.669505 -0.610504 0.423141
+vn -0.669505 -0.610504 0.423141
+vn -0.669505 -0.610504 0.423141
+vn -0.669505 -0.610504 0.423141
+vn 0.410853 0.749316 -0.519350
+vn 0.410858 0.749323 -0.519336
+vn 0.000000 -0.569633 -0.821899
+vn 0.000000 -0.569633 -0.821899
+vn 0.000000 -0.569628 -0.821903
+vn 0.000000 -0.569622 -0.821907
+vn -0.669487 -0.610510 0.423160
+vn -0.669493 -0.610513 0.423146
+vn -0.669493 -0.610513 0.423146
+vn -0.669498 -0.610517 0.423133
+vn 0.000000 0.569650 0.821887
+vn 0.000000 0.569639 0.821895
+vn 0.000000 0.569650 0.821887
+vn 0.000000 0.569628 0.821903
+vn 0.000000 -0.569644 -0.821892
+vn 0.000000 -0.569644 -0.821892
+vn 0.000000 -0.569641 -0.821894
+vn 0.000000 -0.569637 -0.821896
+vn -1.000000 -0.000000 0.000000
+vn -1.000000 -0.000001 0.000000
+vn -1.000000 -0.000000 0.000000
+vn -1.000000 -0.000001 0.000001
+vn 0.000000 0.569661 0.821880
+vn 0.000000 0.569652 0.821886
+vn 0.000000 0.569661 0.821880
+vn 0.000000 0.569644 0.821892
+vn 0.669491 0.610507 -0.423158
+vn 0.669497 0.610510 -0.423144
+vn 0.669497 0.610510 -0.423144
+vn 0.669503 0.610514 -0.423130
+vn 0.410861 0.749323 -0.519335
+vn 0.410861 0.749323 -0.519335
+vn 0.000000 -0.569639 -0.821895
+vn 0.000000 -0.569635 -0.821897
+vn -0.669501 -0.610516 0.423130
+vn -0.669501 -0.610516 0.423130
+vn -0.669501 -0.610516 0.423130
+vn -0.669501 -0.610516 0.423130
+vn 0.000000 0.569643 0.821892
+vn 0.000000 0.569639 0.821895
+vn 0.000000 0.569643 0.821892
+vn 0.000000 0.569635 0.821897
+vn 0.000000 -0.569639 -0.821895
+vn 0.000000 -0.569635 -0.821897
+vn -1.000000 0.000000 -0.000000
+vn -1.000000 0.000001 -0.000000
+vn -1.000000 0.000000 -0.000000
+vn -1.000000 0.000001 -0.000001
+vn 0.000000 0.569643 0.821892
+vn 0.000000 0.569639 0.821895
+vn 0.000000 0.569643 0.821892
+vn 0.000000 0.569635 0.821897
+vn 0.669503 0.610514 -0.423129
+vn 0.669503 0.610514 -0.423130
+vn 0.669503 0.610514 -0.423130
+vn 0.669502 0.610514 -0.423131
+vn -1.000000 0.000001 -0.000001
+vn -1.000000 0.000000 -0.000000
+vn -1.000000 0.000001 -0.000001
+vn -1.000000 -0.000000 0.000000
+vn 0.000000 0.569646 0.821890
+vn 0.000000 0.569654 0.821884
+vn 0.000000 0.569646 0.821890
+vn 0.000000 0.569663 0.821878
+vn 0.669520 0.610498 -0.423126
+vn 0.669515 0.610495 -0.423138
+vn 0.669515 0.610495 -0.423138
+vn 0.669510 0.610492 -0.423151
+vn 0.000000 -0.569663 -0.821878
+vn 0.000000 -0.569663 -0.821878
+vn 0.000000 -0.569654 -0.821884
+vn 0.000000 -0.569645 -0.821891
+vn 0.000000 -0.569640 -0.821895
+vn 0.000000 -0.569645 -0.821891
+vn -0.410859 0.749323 -0.519336
+vn -0.410859 0.749323 -0.519336
+vn 0.000000 0.569634 0.821899
+vn 0.000000 0.569634 0.821899
+vn 0.000000 0.569635 0.821898
+vn 0.000000 0.569636 0.821897
+vn 0.669500 -0.610516 0.423132
+vn 0.669500 -0.610516 0.423132
+vn 0.669500 -0.610516 0.423132
+vn 0.669500 -0.610516 0.423132
+vn -0.410864 0.749319 -0.519338
+vn -0.410864 0.749319 -0.519338
+vn 0.000000 0.569653 0.821885
+vn 0.000000 0.569653 0.821885
+vn 0.000000 0.569646 0.821890
+vn 0.000000 0.569644 0.821892
+vn 0.669506 -0.610509 0.423132
+vn 0.669506 -0.610509 0.423132
+vn 0.669506 -0.610509 0.423132
+vn 0.669506 -0.610509 0.423132
+vn 0.000000 -0.569653 -0.821885
+vn 0.000000 -0.569646 -0.821890
+vn 0.000000 -0.569653 -0.821885
+vn -0.000000 -0.569645 -0.821891
+vn 0.000000 0.569644 0.821892
+vn 0.000000 0.569644 0.821892
+vn 0.000000 0.569641 0.821894
+vn 0.000000 0.569637 0.821896
+vn 1.000000 -0.000001 0.000001
+vn 1.000000 -0.000001 0.000001
+vn 1.000000 -0.000000 0.000000
+vn 1.000000 0.000000 -0.000000
+vn 0.000000 -0.569643 -0.821892
+vn 0.000000 -0.569646 -0.821890
+vn 0.000000 -0.569643 -0.821892
+vn 0.000000 -0.569649 -0.821888
+vn -0.669502 0.610512 -0.423134
+vn -0.669502 0.610512 -0.423134
+vn -0.669502 0.610512 -0.423134
+vn -0.669502 0.610512 -0.423134
+vn 0.000000 -0.569670 -0.821874
+vn 0.000000 -0.569670 -0.821874
+vn -0.212970 0.803043 -0.556567
+vn -0.212970 0.803042 -0.556567
+vn -0.212970 0.803042 -0.556567
+vn -0.212970 0.803042 -0.556567
+vn 0.000000 0.569671 0.821873
+vn 0.000000 0.569671 0.821873
+vn 0.399618 -0.753419 0.522174
+vn 0.399618 -0.753419 0.522174
+vn 0.399618 -0.753419 0.522174
+vn 0.399618 -0.753419 0.522174
+vn -1.000000 0.000000 -0.000000
+vn -1.000000 0.000000 -0.000000
+vn 0.000000 0.569650 0.821887
+vn 0.000000 0.569650 0.821887
+vn 0.399631 0.753404 -0.522186
+vn 0.399635 0.753406 -0.522179
+vn 0.399635 0.753406 -0.522179
+vn 0.399639 0.753408 -0.522172
+vn 0.000000 -0.569635 -0.821897
+vn 0.000000 -0.569635 -0.821897
+vn 0.000001 0.569663 0.821878
+vn 0.000001 0.569654 0.821884
+vn 0.212970 0.803021 -0.556598
+vn 0.212973 0.803026 -0.556590
+vn 0.212973 0.803026 -0.556590
+vn 0.212977 0.803031 -0.556581
+vn -0.000001 -0.569641 -0.821893
+vn -0.000001 -0.569632 -0.821900
+vn -0.399613 -0.753400 0.522205
+vn -0.399619 -0.753403 0.522196
+vn -0.399619 -0.753403 0.522196
+vn -0.399625 -0.753406 0.522187
+vn 1.000000 -0.000001 0.000001
+vn 1.000000 -0.000001 0.000001
+vn 0.000000 -0.569651 -0.821887
+vn 0.000000 -0.569651 -0.821887
+vn -0.399639 0.753411 -0.522169
+vn -0.399635 0.753409 -0.522176
+vn -0.399635 0.753409 -0.522176
+vn -0.399630 0.753406 -0.522182
+vn 0.000000 0.569637 0.821897
+vn 0.000000 0.569637 0.821897
+vn -0.212977 0.803030 -0.556582
+vn -0.212973 0.803025 -0.556590
+vn -0.212973 0.803025 -0.556590
+vn -0.212969 0.803020 -0.556599
+vn 0.000000 0.569658 0.821882
+vn 0.000001 0.569664 0.821877
+vn 0.399604 -0.753414 0.522192
+vn 0.399608 -0.753416 0.522185
+vn 0.399608 -0.753416 0.522185
+vn 0.399613 -0.753418 0.522179
+vn 0.000001 -0.569663 -0.821878
+vn 0.000001 -0.569654 -0.821884
+vn 0.000000 0.569691 0.821859
+vn 0.000000 0.569691 0.821859
+vn 1.000000 0.000000 0.000000
+vn 1.000000 0.000000 0.000000
+vn 0.000000 -0.569657 -0.821882
+vn 0.000000 -0.569657 -0.821882
+vn -0.399624 0.753396 -0.522203
+vn -0.399634 0.753401 -0.522187
+vn -0.399634 0.753401 -0.522187
+vn -0.399645 0.753407 -0.522171
+vn 1.000000 0.000000 -0.000000
+vn 1.000000 0.000000 -0.000000
+vn 0.000000 -0.569670 -0.821874
+vn 0.000000 -0.569670 -0.821874
+vn -0.399618 0.753419 -0.522174
+vn -0.399618 0.753419 -0.522174
+vn -0.399618 0.753419 -0.522174
+vn -0.399618 0.753419 -0.522174
+vn 0.000000 0.569671 0.821873
+vn 0.000000 0.569671 0.821873
+vn 0.000001 0.569663 0.821879
+vn 0.000001 0.569654 0.821885
+vn 0.212981 0.803030 -0.556581
+vn 0.212983 0.803033 -0.556575
+vn 0.212983 0.803033 -0.556575
+vn 0.212986 0.803037 -0.556569
+vn 0.000000 -0.569664 -0.821878
+vn 0.000001 -0.569671 -0.821873
+vn -0.399631 -0.753404 0.522186
+vn -0.399625 -0.753401 0.522194
+vn -0.399625 -0.753401 0.522194
+vn -0.399619 -0.753398 0.522203
+vn 0.212979 0.803041 -0.556566
+vn 0.212979 0.803041 -0.556566
+vn 0.212979 0.803041 -0.556566
+vn 0.212979 0.803041 -0.556566
+vn 0.000000 -0.569617 -0.821910
+vn 0.000000 -0.569617 -0.821910
+vn -0.399634 -0.753413 0.522170
+vn -0.399634 -0.753413 0.522170
+vn -0.399634 -0.753413 0.522170
+vn -0.399634 -0.753413 0.522170
+vn 0.000000 0.569617 0.821910
+vn 0.000000 0.569617 0.821910
+vn 0.000000 -0.569634 -0.821898
+vn 0.000000 -0.569634 -0.821898
+vn -1.000000 -0.000001 0.000001
+vn -1.000000 -0.000001 0.000001
+vn 0.000000 0.569635 0.821898
+vn 0.000000 0.569635 0.821898
+vn 0.399639 0.753411 -0.522169
+vn 0.399639 0.753411 -0.522169
+vn 0.399639 0.753411 -0.522169
+vn 0.399639 0.753411 -0.522169
+vn 0.212974 0.803042 -0.556567
+vn 0.212974 0.803042 -0.556567
+vn 0.212974 0.803042 -0.556567
+vn 0.212974 0.803042 -0.556567
+vn 0.000000 -0.569632 -0.821900
+vn 0.000000 -0.569632 -0.821900
+vn -0.399625 -0.753417 0.522171
+vn -0.399625 -0.753416 0.522172
+vn -0.399625 -0.753416 0.522172
+vn -0.399625 -0.753416 0.522172
+vn 0.000000 0.569632 0.821900
+vn 0.000000 0.569632 0.821900
+vn 0.000000 -0.569632 -0.821900
+vn 0.000000 -0.569632 -0.821900
+vn -1.000000 0.000001 -0.000001
+vn -1.000000 0.000001 -0.000001
+vn 0.000000 0.569632 0.821900
+vn 0.000000 0.569632 0.821900
+vn 0.399625 0.753416 -0.522172
+vn 0.399625 0.753416 -0.522172
+vn 0.399625 0.753416 -0.522172
+vn 0.399625 0.753416 -0.522172
+vn -1.000000 -0.000001 0.000001
+vn -1.000000 -0.000001 0.000001
+vn 0.000000 0.569672 0.821872
+vn 0.000000 0.569672 0.821872
+vn 0.399620 0.753398 -0.522203
+vn 0.399630 0.753403 -0.522188
+vn 0.399630 0.753403 -0.522188
+vn 0.399640 0.753408 -0.522172
+vn 0.000000 -0.569636 -0.821897
+vn 0.000000 -0.569637 -0.821897
+vn 0.000000 -0.569651 -0.821887
+vn 0.000000 -0.569651 -0.821887
+vn -0.212982 0.803040 -0.556566
+vn -0.212979 0.803037 -0.556572
+vn -0.212979 0.803037 -0.556572
+vn -0.212977 0.803033 -0.556578
+vn 0.000000 0.569637 0.821897
+vn 0.000000 0.569637 0.821897
+vn 0.399639 -0.753411 0.522169
+vn 0.399635 -0.753409 0.522176
+vn 0.399635 -0.753409 0.522176
+vn 0.399630 -0.753407 0.522182
+vn -0.212962 0.803041 -0.556572
+vn -0.212962 0.803041 -0.556572
+vn -0.212962 0.803041 -0.556572
+vn -0.212962 0.803041 -0.556571
+vn 0.000001 0.569639 0.821895
+vn 0.000001 0.569648 0.821889
+vn 0.399612 -0.753418 0.522180
+vn 0.399612 -0.753418 0.522179
+vn 0.399612 -0.753418 0.522179
+vn 0.399612 -0.753418 0.522179
+vn -0.000001 -0.569641 -0.821893
+vn -0.000001 -0.569650 -0.821887
+vn 0.000000 0.569634 0.821898
+vn 0.000000 0.569634 0.821898
+vn 1.000000 0.000001 -0.000001
+vn 1.000000 0.000001 -0.000001
+vn 0.000000 -0.569651 -0.821887
+vn 0.000000 -0.569651 -0.821887
+vn -0.399638 0.753409 -0.522173
+vn -0.399634 0.753406 -0.522179
+vn -0.399634 0.753406 -0.522179
+vn -0.399630 0.753404 -0.522185
+vn -0.392967 -0.271550 0.878543
+vn -0.335082 -0.231548 0.913294
+vn -0.406521 -0.280913 0.869384
+vn -0.392970 -0.271549 0.878542
+vn -0.392970 -0.271549 0.878542
+vn -0.335082 -0.231548 0.913294
+vn -0.415966 -0.287440 0.862757
+vn -0.676165 -0.467243 -0.569636
+vn -0.676169 -0.467245 -0.569629
+vn -0.676169 -0.467245 -0.569629
+vn -0.676173 -0.467247 -0.569622
+vn 0.392964 0.271546 -0.878545
+vn 0.335082 0.231548 -0.913294
+vn 0.406509 0.280905 -0.869392
+vn 0.392968 0.271547 -0.878543
+vn 0.392965 0.271546 -0.878545
+vn 0.335083 0.231548 -0.913293
+vn 0.415953 0.287432 -0.862767
+vn 0.679141 -0.727056 0.100779
+vn 0.408556 -0.904358 -0.123367
+vn 0.679143 -0.727055 0.100774
+vn -0.024652 -0.925226 -0.378614
+vn 0.064642 -0.940458 -0.333708
+vn 0.064635 -0.940459 -0.333705
+vn 0.064635 -0.940455 -0.333717
+vn -0.439910 0.892369 0.100777
+vn -0.439909 0.892370 0.100774
+vn -0.879224 0.261212 -0.398413
+vn -0.870574 0.011384 -0.491906
+vn -0.875105 0.043015 -0.482017
+vn -0.875097 0.043018 -0.482033
+vn -0.875092 0.043012 -0.482041
+vn -0.676167 -0.467245 -0.569631
+vn -0.676165 -0.467243 -0.569635
+vn -0.676165 -0.467243 -0.569635
+vn -0.676163 -0.467241 -0.569639
+vn -0.676148 -0.467231 -0.569666
+vn -0.676154 -0.467234 -0.569657
+vn -0.676154 -0.467234 -0.569657
+vn -0.676160 -0.467237 -0.569647
+vn -0.676156 -0.467234 -0.569653
+vn -0.676156 -0.467234 -0.569654
+vn -0.676156 -0.467234 -0.569654
+vn -0.676156 -0.467234 -0.569654
+vn -0.676144 -0.467225 -0.569676
+vn -0.676153 -0.467234 -0.569657
+vn -0.676153 -0.467234 -0.569657
+vn -0.676162 -0.467243 -0.569639
+vn -0.676171 -0.467247 -0.569626
+vn -0.676172 -0.467247 -0.569624
+vn -0.676172 -0.467247 -0.569624
+vn -0.676173 -0.467248 -0.569622
+vn -0.676153 -0.467233 -0.569658
+vn -0.676156 -0.467237 -0.569652
+vn -0.676156 -0.467237 -0.569652
+vn -0.676159 -0.467240 -0.569645
+vn -0.676142 -0.467227 -0.569676
+vn -0.676146 -0.467229 -0.569670
+vn -0.676146 -0.467229 -0.569670
+vn -0.676150 -0.467231 -0.569664
+vn -0.676178 -0.467254 -0.569611
+vn -0.676173 -0.467249 -0.569622
+vn -0.676173 -0.467249 -0.569622
+vn -0.676167 -0.467244 -0.569633
+vn -0.676168 -0.467243 -0.569633
+vn -0.676162 -0.467240 -0.569642
+vn -0.676162 -0.467240 -0.569642
+vn -0.676156 -0.467237 -0.569652
+vn -0.676165 -0.467241 -0.569637
+vn -0.676171 -0.467247 -0.569625
+vn -0.676171 -0.467247 -0.569625
+vn -0.676177 -0.467252 -0.569614
+vn -0.676173 -0.467248 -0.569623
+vn -0.676168 -0.467245 -0.569631
+vn -0.676168 -0.467245 -0.569631
+vn -0.676163 -0.467243 -0.569639
+vn -0.676178 -0.467253 -0.569612
+vn -0.676172 -0.467248 -0.569623
+vn -0.676172 -0.467248 -0.569623
+vn -0.676167 -0.467243 -0.569634
+vn -0.676156 -0.467235 -0.569653
+vn -0.676154 -0.467234 -0.569656
+vn -0.676154 -0.467234 -0.569656
+vn -0.676152 -0.467233 -0.569660
+vn -0.676168 -0.467244 -0.569632
+vn -0.676166 -0.467242 -0.569635
+vn -0.676166 -0.467242 -0.569635
+vn -0.676164 -0.467241 -0.569639
+vn -0.676147 -0.467232 -0.569666
+vn -0.676159 -0.467238 -0.569646
+vn -0.676159 -0.467238 -0.569646
+vn -0.676172 -0.467245 -0.569626
+vn 0.468627 0.323831 -0.821902
+vn 0.468625 0.323829 -0.821904
+vn 0.468631 0.323833 -0.821898
+vn 0.468638 0.323838 -0.821892
+vn -0.850023 -0.087969 -0.519348
+vn -0.850029 -0.087969 -0.519338
+vn -0.468644 -0.323842 0.821888
+vn -0.468648 -0.323844 0.821885
+vn -0.468641 -0.323839 0.821891
+vn -0.468654 -0.323848 0.821880
+vn 0.882861 -0.203728 0.423144
+vn 0.882865 -0.203730 0.423134
+vn 0.882865 -0.203730 0.423134
+vn 0.882870 -0.203732 0.423124
+vn -0.568501 0.822683 0.000002
+vn -0.568501 0.822683 0.000001
+vn -0.568496 0.822686 0.000005
+vn -0.568491 0.822689 0.000008
+vn -0.468653 -0.323847 0.821880
+vn -0.468648 -0.323844 0.821885
+vn -0.121673 -0.897849 -0.423157
+vn -0.121673 -0.897851 -0.423154
+vn -0.121673 -0.897851 -0.423154
+vn -0.121673 -0.897853 -0.423150
+vn 0.468654 0.323849 -0.821879
+vn 0.468648 0.323844 -0.821885
+vn 0.468655 0.323849 -0.821878
+vn 0.468636 0.323836 -0.821895
+vn -0.468638 -0.323838 0.821892
+vn -0.468639 -0.323838 0.821892
+vn -0.468646 -0.323843 0.821886
+vn -0.468646 -0.323844 0.821886
+vn -0.382862 -0.763992 -0.519358
+vn -0.382857 -0.763978 -0.519383
+vn 0.468663 0.323855 -0.821871
+vn 0.468649 0.323847 -0.821883
+vn 0.468657 0.323852 -0.821876
+vn 0.468642 0.323843 -0.821888
+vn 0.121635 0.897872 0.423121
+vn 0.121636 0.897869 0.423126
+vn 0.121636 0.897869 0.423126
+vn 0.121636 0.897867 0.423132
+vn 0.568505 -0.822680 0.000021
+vn 0.568498 -0.822685 0.000004
+vn 0.568504 -0.822680 0.000012
+vn 0.568491 -0.822690 -0.000010
+vn 0.468636 0.323836 -0.821895
+vn 0.468640 0.323838 -0.821892
+vn -0.882866 0.203708 -0.423144
+vn -0.882874 0.203712 -0.423124
+vn -0.882874 0.203712 -0.423124
+vn -0.882883 0.203717 -0.423104
+vn -0.468638 -0.323838 0.821892
+vn -0.468632 -0.323833 0.821898
+vn -0.468638 -0.323837 0.821893
+vn -0.468623 -0.323827 0.821906
+vn -0.850017 -0.087985 -0.519356
+vn -0.850014 -0.087985 -0.519360
+vn -0.468647 -0.323843 0.821885
+vn -0.468652 -0.323847 0.821881
+vn 0.882858 -0.203706 0.423162
+vn 0.882861 -0.203708 0.423153
+vn 0.882861 -0.203708 0.423153
+vn 0.882865 -0.203710 0.423144
+vn 0.468648 0.323845 -0.821884
+vn 0.468645 0.323842 -0.821887
+vn 0.468654 0.323848 -0.821880
+vn 0.468656 0.323848 -0.821878
+vn -0.468655 -0.323850 0.821878
+vn -0.468665 -0.323857 0.821869
+vn 0.568498 -0.822684 -0.000004
+vn 0.568497 -0.822685 0.000008
+vn 0.568499 -0.822684 0.000007
+vn 0.568488 -0.822691 -0.000003
+vn 0.468651 0.323846 -0.821882
+vn 0.468652 0.323847 -0.821881
+vn 0.468651 0.323846 -0.821882
+vn 0.468649 0.323845 -0.821884
+vn -0.882857 0.203718 -0.423157
+vn -0.882858 0.203719 -0.423156
+vn -0.882858 0.203719 -0.423156
+vn -0.882859 0.203719 -0.423154
+vn 0.568496 -0.822686 -0.000001
+vn 0.568492 -0.822688 -0.000003
+vn 0.568496 -0.822686 -0.000000
+vn 0.568494 -0.822687 0.000007
+vn 0.468623 0.323825 -0.821906
+vn 0.468626 0.323828 -0.821903
+vn 0.468641 0.323839 -0.821891
+vn 0.468658 0.323851 -0.821876
+vn -0.882861 0.203725 -0.423146
+vn -0.882866 0.203728 -0.423134
+vn -0.882866 0.203728 -0.423134
+vn -0.882872 0.203730 -0.423122
+vn -0.468639 -0.323838 0.821892
+vn -0.468645 -0.323842 0.821887
+vn -0.468640 -0.323839 0.821891
+vn -0.468649 -0.323845 0.821883
+vn -0.468651 -0.323848 0.821881
+vn -0.468650 -0.323847 0.821882
+vn -0.382880 -0.763993 -0.519344
+vn -0.382877 -0.763984 -0.519359
+vn 0.468644 0.323842 -0.821888
+vn 0.468656 0.323849 -0.821878
+vn 0.468648 0.323844 -0.821885
+vn 0.468660 0.323852 -0.821874
+vn 0.121654 0.897856 0.423149
+vn 0.121654 0.897855 0.423150
+vn 0.121654 0.897855 0.423150
+vn 0.121654 0.897855 0.423151
+vn -0.382886 -0.763983 -0.519354
+vn -0.382891 -0.763997 -0.519330
+vn 0.468630 0.323832 -0.821899
+vn 0.468626 0.323830 -0.821903
+vn 0.468628 0.323831 -0.821901
+vn 0.468624 0.323828 -0.821904
+vn 0.121662 0.897841 0.423178
+vn 0.121661 0.897858 0.423143
+vn 0.121661 0.897858 0.423143
+vn 0.121660 0.897874 0.423108
+vn -0.468645 -0.323842 0.821887
+vn -0.468646 -0.323843 0.821886
+vn -0.468647 -0.323844 0.821885
+vn -0.468638 -0.323839 0.821892
+vn 0.468635 0.323837 -0.821895
+vn 0.468638 0.323838 -0.821892
+vn 0.468639 0.323839 -0.821892
+vn 0.468643 0.323841 -0.821888
+vn -0.568506 0.822679 -0.000008
+vn -0.568505 0.822680 0.000002
+vn -0.568494 0.822687 0.000014
+vn -0.568491 0.822690 0.000010
+vn -0.468654 -0.323849 0.821879
+vn -0.468654 -0.323849 0.821879
+vn -0.468647 -0.323844 0.821885
+vn -0.468638 -0.323837 0.821893
+vn -0.121659 -0.897843 -0.423176
+vn -0.121657 -0.897859 -0.423141
+vn -0.121657 -0.897859 -0.423141
+vn -0.121656 -0.897876 -0.423106
+vn -0.382883 -0.763989 -0.519347
+vn -0.382883 -0.763989 -0.519347
+vn 0.468630 0.323831 -0.821900
+vn 0.468618 0.323824 -0.821909
+vn 0.121637 0.897853 0.423159
+vn 0.121637 0.897854 0.423159
+vn 0.121637 0.897854 0.423159
+vn 0.121637 0.897854 0.423158
+vn -0.468645 -0.323842 0.821887
+vn -0.468640 -0.323840 0.821891
+vn -0.468632 -0.323835 0.821897
+vn -0.468633 -0.323835 0.821897
+vn 0.468624 0.323829 -0.821904
+vn 0.468622 0.323827 -0.821906
+vn -0.568505 0.822680 -0.000021
+vn -0.568504 0.822680 -0.000012
+vn -0.568494 0.822688 0.000000
+vn -0.568485 0.822694 0.000010
+vn -0.468637 -0.323837 0.821894
+vn -0.468641 -0.323840 0.821890
+vn -0.468638 -0.323837 0.821893
+vn -0.468628 -0.323831 0.821901
+vn -0.121637 -0.897853 -0.423159
+vn -0.121637 -0.897858 -0.423149
+vn -0.121637 -0.897858 -0.423149
+vn -0.121637 -0.897863 -0.423138
+vn -0.568495 0.822687 -0.000001
+vn -0.568497 0.822686 -0.000017
+vn -0.568496 0.822686 -0.000022
+vn -0.568491 0.822689 -0.000020
+vn -0.468639 -0.323840 0.821891
+vn -0.468642 -0.323841 0.821889
+vn -0.468646 -0.323844 0.821886
+vn -0.468659 -0.323852 0.821875
+vn -0.121635 -0.897872 -0.423121
+vn -0.121636 -0.897866 -0.423133
+vn -0.121636 -0.897866 -0.423133
+vn -0.121636 -0.897860 -0.423145
+vn 0.468653 0.323849 -0.821880
+vn 0.468649 0.323845 -0.821883
+vn 0.468658 0.323851 -0.821876
+vn 0.468634 0.323835 -0.821896
+vn 0.468643 0.323841 -0.821888
+vn 0.468653 0.323848 -0.821880
+vn -0.850027 -0.087978 -0.519340
+vn -0.850021 -0.087978 -0.519349
+vn -0.468632 -0.323833 0.821898
+vn -0.468632 -0.323833 0.821898
+vn -0.468635 -0.323836 0.821895
+vn -0.468627 -0.323830 0.821902
+vn 0.882866 -0.203709 0.423144
+vn 0.882871 -0.203712 0.423131
+vn 0.882871 -0.203712 0.423131
+vn 0.882877 -0.203714 0.423118
+vn -0.850031 -0.087977 -0.519333
+vn -0.850041 -0.087976 -0.519317
+vn -0.468652 -0.323848 0.821881
+vn -0.468641 -0.323840 0.821890
+vn -0.468649 -0.323846 0.821883
+vn -0.468632 -0.323834 0.821897
+vn 0.882872 -0.203722 0.423125
+vn 0.882869 -0.203720 0.423132
+vn 0.882869 -0.203720 0.423132
+vn 0.882866 -0.203719 0.423139
+vn 0.468647 0.323843 -0.821886
+vn 0.468650 0.323846 -0.821883
+vn 0.468645 0.323842 -0.821887
+vn 0.468641 0.323840 -0.821890
+vn -0.468638 -0.323836 0.821894
+vn -0.468635 -0.323835 0.821896
+vn -0.468641 -0.323838 0.821891
+vn -0.468639 -0.323838 0.821892
+vn 0.568497 -0.822686 0.000003
+vn 0.568496 -0.822686 0.000020
+vn 0.568498 -0.822685 0.000017
+vn 0.568488 -0.822691 0.000011
+vn 0.468646 0.323843 -0.821886
+vn 0.468646 0.323843 -0.821886
+vn 0.468645 0.323842 -0.821887
+vn 0.468638 0.323837 -0.821893
+vn -0.882872 0.203716 -0.423127
+vn -0.882868 0.203714 -0.423136
+vn -0.882868 0.203714 -0.423136
+vn -0.882864 0.203713 -0.423145
+vn 0.468646 0.323843 -0.821886
+vn 0.468649 0.323845 -0.821884
+vn -0.781723 -0.281314 -0.556571
+vn -0.781731 -0.281314 -0.556561
+vn -0.781731 -0.281314 -0.556561
+vn -0.781738 -0.281314 -0.556550
+vn -0.468662 -0.323853 0.821873
+vn -0.468661 -0.323853 0.821873
+vn 0.847010 0.099547 0.522172
+vn 0.847009 0.099548 0.522174
+vn 0.847009 0.099548 0.522174
+vn 0.847008 0.099549 0.522176
+vn -0.568487 0.822692 0.000012
+vn -0.568487 0.822692 0.000012
+vn -0.468646 -0.323842 0.821887
+vn -0.468652 -0.323846 0.821881
+vn -0.392624 -0.757083 -0.522179
+vn -0.392624 -0.757086 -0.522175
+vn -0.392624 -0.757086 -0.522175
+vn -0.392623 -0.757089 -0.522172
+vn 0.468625 0.323829 -0.821904
+vn 0.468617 0.323824 -0.821910
+vn -0.468650 -0.323847 0.821883
+vn -0.468639 -0.323840 0.821891
+vn -0.539556 -0.631706 -0.556621
+vn -0.539561 -0.631721 -0.556599
+vn -0.539561 -0.631721 -0.556599
+vn -0.539567 -0.631736 -0.556577
+vn 0.468638 0.323839 -0.821892
+vn 0.468643 0.323842 -0.821888
+vn 0.392640 0.757066 0.522192
+vn 0.392641 0.757060 0.522200
+vn 0.392641 0.757060 0.522200
+vn 0.392642 0.757054 0.522208
+vn 0.568485 -0.822694 -0.000015
+vn 0.568484 -0.822695 -0.000018
+vn 0.468646 0.323842 -0.821886
+vn 0.468641 0.323838 -0.821891
+vn -0.847031 -0.099531 -0.522141
+vn -0.847013 -0.099540 -0.522169
+vn -0.847013 -0.099540 -0.522169
+vn -0.846995 -0.099550 -0.522197
+vn -0.468616 -0.323821 0.821912
+vn -0.468610 -0.323817 0.821917
+vn -0.781716 -0.281303 -0.556587
+vn -0.781709 -0.281303 -0.556596
+vn -0.781709 -0.281303 -0.556596
+vn -0.781702 -0.281303 -0.556606
+vn -0.468656 -0.323850 0.821878
+vn -0.468661 -0.323854 0.821873
+vn 0.846999 0.099555 0.522189
+vn 0.847004 0.099552 0.522181
+vn 0.847004 0.099552 0.522181
+vn 0.847009 0.099550 0.522173
+vn 0.468663 0.323853 -0.821872
+vn 0.468654 0.323846 -0.821880
+vn -0.468675 -0.323864 0.821861
+vn -0.468679 -0.323866 0.821858
+vn 0.568482 -0.822696 -0.000014
+vn 0.568472 -0.822703 -0.000040
+vn 0.468646 0.323843 -0.821886
+vn 0.468644 0.323841 -0.821888
+vn -0.846994 -0.099540 -0.522199
+vn -0.847008 -0.099533 -0.522178
+vn -0.847008 -0.099533 -0.522178
+vn -0.847022 -0.099526 -0.522157
+vn 0.568493 -0.822688 0.000011
+vn 0.568501 -0.822683 0.000030
+vn 0.468672 0.323860 -0.821865
+vn 0.468673 0.323862 -0.821863
+vn -0.847014 -0.099545 -0.522167
+vn -0.847007 -0.099549 -0.522177
+vn -0.847007 -0.099549 -0.522177
+vn -0.847000 -0.099553 -0.522188
+vn -0.468653 -0.323848 0.821880
+vn -0.468652 -0.323847 0.821881
+vn -0.468646 -0.323843 0.821886
+vn -0.468638 -0.323839 0.821892
+vn -0.539563 -0.631729 -0.556588
+vn -0.539562 -0.631727 -0.556591
+vn -0.539562 -0.631727 -0.556591
+vn -0.539562 -0.631724 -0.556595
+vn 0.468665 0.323855 -0.821871
+vn 0.468657 0.323851 -0.821877
+vn 0.392617 0.757080 0.522189
+vn 0.392618 0.757073 0.522199
+vn 0.392618 0.757073 0.522199
+vn 0.392619 0.757066 0.522208
+vn -0.539582 -0.631732 -0.556567
+vn -0.539584 -0.631740 -0.556554
+vn -0.539584 -0.631740 -0.556554
+vn -0.539587 -0.631749 -0.556542
+vn 0.468623 0.323828 -0.821905
+vn 0.468623 0.323828 -0.821905
+vn 0.392639 0.757093 0.522154
+vn 0.392640 0.757088 0.522161
+vn 0.392640 0.757088 0.522161
+vn 0.392640 0.757083 0.522167
+vn -0.468635 -0.323837 0.821895
+vn -0.468620 -0.323828 0.821907
+vn 0.468643 0.323841 -0.821889
+vn 0.468649 0.323844 -0.821883
+vn -0.568483 0.822695 0.000009
+vn -0.568495 0.822686 -0.000021
+vn -0.468629 -0.323832 0.821900
+vn -0.468626 -0.323830 0.821903
+vn -0.392635 -0.757096 -0.522152
+vn -0.392635 -0.757091 -0.522159
+vn -0.392635 -0.757091 -0.522159
+vn -0.392636 -0.757086 -0.522166
+vn -0.539573 -0.631736 -0.556571
+vn -0.539573 -0.631738 -0.556567
+vn -0.539573 -0.631738 -0.556567
+vn -0.539574 -0.631741 -0.556564
+vn 0.468611 0.323819 -0.821915
+vn 0.468606 0.323816 -0.821919
+vn 0.392639 0.757060 0.522202
+vn 0.392636 0.757080 0.522176
+vn 0.392636 0.757080 0.522176
+vn 0.392634 0.757099 0.522149
+vn -0.468632 -0.323834 0.821898
+vn -0.468647 -0.323843 0.821886
+vn 0.468617 0.323823 -0.821911
+vn 0.468624 0.323828 -0.821904
+vn -0.568476 0.822700 0.000016
+vn -0.568479 0.822698 0.000009
+vn -0.468620 -0.323825 0.821908
+vn -0.468607 -0.323818 0.821918
+vn -0.392634 -0.757074 -0.522186
+vn -0.392633 -0.757084 -0.522172
+vn -0.392633 -0.757084 -0.522172
+vn -0.392632 -0.757094 -0.522158
+vn -0.568488 0.822692 -0.000013
+vn -0.568481 0.822697 0.000004
+vn -0.468667 -0.323857 0.821869
+vn -0.468680 -0.323865 0.821858
+vn -0.392630 -0.757066 -0.522199
+vn -0.392629 -0.757077 -0.522185
+vn -0.392629 -0.757077 -0.522185
+vn -0.392628 -0.757087 -0.522171
+vn 0.468620 0.323826 -0.821907
+vn 0.468609 0.323819 -0.821917
+vn 0.468665 0.323856 -0.821870
+vn 0.468663 0.323854 -0.821872
+vn -0.781725 -0.281297 -0.556577
+vn -0.781720 -0.281297 -0.556584
+vn -0.781720 -0.281297 -0.556584
+vn -0.781715 -0.281297 -0.556591
+vn -0.468621 -0.323826 0.821907
+vn -0.468618 -0.323824 0.821909
+vn 0.847025 0.099525 0.522153
+vn 0.847012 0.099532 0.522172
+vn 0.847012 0.099532 0.522172
+vn 0.847000 0.099538 0.522190
+vn -0.781735 -0.281321 -0.556550
+vn -0.781731 -0.281321 -0.556557
+vn -0.781731 -0.281321 -0.556557
+vn -0.781726 -0.281322 -0.556564
+vn -0.468625 -0.323829 0.821903
+vn -0.468627 -0.323830 0.821902
+vn 0.847004 0.099551 0.522183
+vn 0.847005 0.099550 0.522180
+vn 0.847005 0.099550 0.522180
+vn 0.847007 0.099550 0.522178
+vn 0.468635 0.323836 -0.821895
+vn 0.468635 0.323836 -0.821895
+vn -0.468636 -0.323837 0.821894
+vn -0.468648 -0.323846 0.821883
+vn 0.568483 -0.822695 0.000001
+vn 0.568473 -0.822702 -0.000023
+vn 0.468634 0.323834 -0.821896
+vn 0.468625 0.323827 -0.821904
+vn -0.847009 -0.099520 -0.522180
+vn -0.847004 -0.099523 -0.522188
+vn -0.847004 -0.099523 -0.522188
+vn -0.846998 -0.099525 -0.522196
+vn 0.400908 -0.259767 0.878518
+vn 0.341819 -0.221482 0.913294
+vn 0.414732 -0.268725 0.869358
+vn 0.400908 -0.259770 0.878517
+vn 0.400900 -0.259765 0.878522
+vn 0.341818 -0.221483 0.913294
+vn 0.424370 -0.274970 0.862729
+vn 0.689739 -0.446913 -0.569674
+vn 0.689744 -0.446917 -0.569666
+vn 0.689744 -0.446917 -0.569666
+vn 0.689748 -0.446920 -0.569658
+vn -0.400910 0.259772 -0.878516
+vn -0.341820 0.221482 -0.913294
+vn -0.414734 0.268726 -0.869357
+vn -0.400913 0.259772 -0.878514
+vn -0.400911 0.259771 -0.878515
+vn -0.341819 0.221482 -0.913294
+vn -0.424367 0.274968 -0.862731
+vn 0.413180 0.905056 0.100777
+vn 0.872980 0.270598 -0.405812
+vn 0.413178 0.905057 0.100770
+vn 0.869111 0.031553 -0.493609
+vn 0.872683 0.061599 -0.484386
+vn 0.872674 0.061583 -0.484405
+vn 0.872662 0.061593 -0.484426
+vn -0.657216 -0.746932 0.100792
+vn -0.657215 -0.746933 0.100796
+vn -0.371377 -0.919282 -0.130385
+vn 0.063523 -0.921114 -0.384076
+vn -0.023883 -0.939991 -0.340364
+vn -0.023904 -0.939999 -0.340339
+vn -0.023888 -0.939988 -0.340370
+vn 0.689752 -0.446923 -0.569650
+vn 0.689768 -0.446930 -0.569626
+vn 0.689768 -0.446930 -0.569626
+vn 0.689783 -0.446937 -0.569602
+vn 0.689752 -0.446928 -0.569646
+vn 0.689756 -0.446931 -0.569640
+vn 0.689756 -0.446931 -0.569640
+vn 0.689759 -0.446934 -0.569633
+vn 0.689770 -0.446941 -0.569615
+vn 0.689770 -0.446941 -0.569614
+vn 0.689770 -0.446941 -0.569614
+vn 0.689771 -0.446942 -0.569613
+vn 0.689729 -0.446912 -0.569687
+vn 0.689758 -0.446925 -0.569641
+vn 0.689758 -0.446925 -0.569641
+vn 0.689787 -0.446938 -0.569596
+vn 0.689788 -0.446958 -0.569580
+vn 0.689773 -0.446945 -0.569609
+vn 0.689773 -0.446945 -0.569609
+vn 0.689758 -0.446932 -0.569637
+vn 0.689729 -0.446912 -0.569687
+vn 0.689741 -0.446918 -0.569669
+vn 0.689741 -0.446918 -0.569669
+vn 0.689752 -0.446923 -0.569650
+vn 0.689755 -0.446933 -0.569640
+vn 0.689733 -0.446914 -0.569681
+vn 0.689733 -0.446914 -0.569681
+vn 0.689711 -0.446894 -0.569722
+vn 0.689789 -0.446943 -0.569591
+vn 0.689766 -0.446932 -0.569627
+vn 0.689766 -0.446932 -0.569627
+vn 0.689743 -0.446922 -0.569663
+vn 0.689742 -0.446919 -0.569666
+vn 0.689737 -0.446915 -0.569675
+vn 0.689737 -0.446915 -0.569675
+vn 0.689733 -0.446911 -0.569684
+vn 0.689752 -0.446929 -0.569647
+vn 0.689764 -0.446935 -0.569627
+vn 0.689764 -0.446935 -0.569627
+vn 0.689777 -0.446941 -0.569606
+vn 0.689770 -0.446937 -0.569618
+vn 0.689771 -0.446937 -0.569616
+vn 0.689771 -0.446937 -0.569616
+vn 0.689772 -0.446938 -0.569615
+vn 0.689753 -0.446926 -0.569646
+vn 0.689755 -0.446927 -0.569644
+vn 0.689755 -0.446927 -0.569644
+vn 0.689756 -0.446927 -0.569642
+vn 0.689778 -0.446935 -0.569609
+vn 0.689765 -0.446924 -0.569635
+vn 0.689765 -0.446924 -0.569635
+vn 0.689752 -0.446912 -0.569660
+vn 0.689770 -0.446924 -0.569629
+vn 0.689747 -0.446913 -0.569664
+vn 0.689747 -0.446913 -0.569664
+vn 0.689725 -0.446903 -0.569700
+vn 0.689725 -0.446906 -0.569696
+vn 0.689738 -0.446918 -0.569671
+vn 0.689738 -0.446918 -0.569671
+vn 0.689752 -0.446929 -0.569646
+vn -0.478022 0.309734 -0.821925
+vn -0.478022 0.309734 -0.821924
+vn -0.478051 0.309752 -0.821901
+vn -0.478086 0.309774 -0.821872
+vn 0.405431 -0.752287 -0.519317
+vn 0.405440 -0.752313 -0.519272
+vn 0.478056 -0.309757 0.821896
+vn 0.478054 -0.309756 0.821898
+vn 0.478054 -0.309756 0.821898
+vn 0.478063 -0.309761 0.821891
+vn -0.148254 0.893848 0.423150
+vn -0.148254 0.893863 0.423119
+vn -0.148254 0.893863 0.423119
+vn -0.148253 0.893878 0.423087
+vn -0.543757 -0.839243 0.000017
+vn -0.543754 -0.839245 -0.000010
+vn -0.543777 -0.839230 0.000000
+vn -0.543802 -0.839214 0.000008
+vn 0.478094 -0.309782 0.821864
+vn 0.478076 -0.309769 0.821880
+vn 0.876425 0.229862 -0.423133
+vn 0.876415 0.229856 -0.423158
+vn 0.876415 0.229856 -0.423158
+vn 0.876404 0.229851 -0.423183
+vn -0.478097 0.309781 -0.821863
+vn -0.478069 0.309763 -0.821886
+vn -0.478100 0.309783 -0.821861
+vn -0.478042 0.309746 -0.821909
+vn 0.478097 -0.309788 0.821860
+vn 0.478059 -0.309756 0.821894
+vn 0.478058 -0.309753 0.821897
+vn 0.478076 -0.309763 0.821882
+vn 0.852259 -0.062649 -0.519356
+vn 0.852275 -0.062648 -0.519329
+vn -0.478064 0.309763 -0.821889
+vn -0.478063 0.309764 -0.821889
+vn -0.478070 0.309768 -0.821884
+vn -0.478048 0.309753 -0.821902
+vn -0.876434 -0.229921 0.423084
+vn -0.876405 -0.229906 0.423153
+vn -0.876405 -0.229906 0.423153
+vn -0.876375 -0.229891 0.423221
+vn 0.543746 0.839250 0.000001
+vn 0.543761 0.839240 -0.000005
+vn 0.543745 0.839250 0.000007
+vn 0.543775 0.839231 -0.000011
+vn -0.478082 0.309770 -0.821876
+vn -0.478067 0.309763 -0.821888
+vn 0.148318 -0.893890 -0.423039
+vn 0.148320 -0.893860 -0.423103
+vn 0.148320 -0.893860 -0.423103
+vn 0.148322 -0.893829 -0.423167
+vn 0.478029 -0.309738 0.821919
+vn 0.478076 -0.309766 0.821881
+vn 0.478044 -0.309746 0.821907
+vn 0.478080 -0.309770 0.821877
+vn 0.405432 -0.752262 -0.519352
+vn 0.405423 -0.752238 -0.519394
+vn 0.478048 -0.309756 0.821901
+vn 0.478096 -0.309785 0.821862
+vn -0.148249 0.893852 0.423145
+vn -0.148250 0.893832 0.423185
+vn -0.148250 0.893832 0.423185
+vn -0.148251 0.893813 0.423225
+vn -0.478072 0.309767 -0.821883
+vn -0.478068 0.309766 -0.821886
+vn -0.478068 0.309766 -0.821886
+vn -0.478065 0.309764 -0.821888
+vn 0.478115 -0.309790 0.821849
+vn 0.478130 -0.309801 0.821836
+vn 0.543752 0.839246 -0.000014
+vn 0.543773 0.839233 -0.000002
+vn 0.543750 0.839247 0.000009
+vn 0.543798 0.839216 -0.000014
+vn -0.478075 0.309771 -0.821880
+vn -0.478088 0.309778 -0.821869
+vn -0.478083 0.309774 -0.821874
+vn -0.478069 0.309764 -0.821886
+vn 0.148237 -0.893856 -0.423140
+vn 0.148238 -0.893833 -0.423189
+vn 0.148238 -0.893833 -0.423189
+vn 0.148240 -0.893809 -0.423237
+vn 0.543777 0.839230 0.000098
+vn 0.543799 0.839216 -0.000012
+vn 0.543784 0.839225 0.000023
+vn 0.543775 0.839231 0.000028
+vn -0.478026 0.309736 -0.821921
+vn -0.478029 0.309738 -0.821919
+vn -0.478061 0.309759 -0.821892
+vn -0.478091 0.309778 -0.821868
+vn 0.148254 -0.893848 -0.423150
+vn 0.148253 -0.893860 -0.423125
+vn 0.148253 -0.893860 -0.423125
+vn 0.148253 -0.893872 -0.423101
+vn 0.478051 -0.309755 0.821900
+vn 0.478080 -0.309771 0.821877
+vn 0.478069 -0.309765 0.821885
+vn 0.478078 -0.309769 0.821879
+vn 0.478068 -0.309763 0.821887
+vn 0.478092 -0.309780 0.821867
+vn 0.852242 -0.062643 -0.519384
+vn 0.852219 -0.062645 -0.519422
+vn -0.478091 0.309780 -0.821867
+vn -0.478087 0.309775 -0.821871
+vn -0.478083 0.309773 -0.821875
+vn -0.478084 0.309772 -0.821874
+vn -0.876424 -0.229892 0.423121
+vn -0.876416 -0.229888 0.423139
+vn -0.876416 -0.229888 0.423139
+vn -0.876408 -0.229884 0.423157
+vn 0.852261 -0.062682 -0.519348
+vn 0.852266 -0.062682 -0.519340
+vn -0.478083 0.309778 -0.821872
+vn -0.478040 0.309741 -0.821911
+vn -0.478042 0.309745 -0.821908
+vn -0.478062 0.309754 -0.821893
+vn -0.876397 -0.229852 0.423198
+vn -0.876429 -0.229868 0.423123
+vn -0.876429 -0.229868 0.423123
+vn -0.876461 -0.229884 0.423048
+vn 0.478088 -0.309778 0.821869
+vn 0.478087 -0.309777 0.821870
+vn 0.478078 -0.309771 0.821878
+vn 0.478049 -0.309751 0.821902
+vn -0.478001 0.309720 -0.821942
+vn -0.478066 0.309766 -0.821887
+vn -0.478021 0.309736 -0.821924
+vn -0.478098 0.309787 -0.821860
+vn -0.543783 -0.839226 -0.000092
+vn -0.543789 -0.839222 -0.000032
+vn -0.543801 -0.839214 -0.000004
+vn -0.543780 -0.839228 -0.000042
+vn 0.478097 -0.309781 0.821863
+vn 0.478100 -0.309783 0.821861
+vn 0.478069 -0.309763 0.821886
+vn 0.478042 -0.309746 0.821909
+vn 0.876397 0.229856 -0.423196
+vn 0.876429 0.229872 -0.423121
+vn 0.876429 0.229872 -0.423121
+vn 0.876461 0.229888 -0.423046
+vn 0.852277 -0.062655 -0.519324
+vn 0.852273 -0.062656 -0.519332
+vn -0.478055 0.309756 -0.821897
+vn -0.478047 0.309750 -0.821904
+vn -0.876410 -0.229859 0.423166
+vn -0.876423 -0.229866 0.423136
+vn -0.876423 -0.229866 0.423136
+vn -0.876436 -0.229872 0.423106
+vn 0.478041 -0.309748 0.821908
+vn 0.478049 -0.309754 0.821901
+vn 0.478046 -0.309753 0.821903
+vn 0.478044 -0.309752 0.821905
+vn -0.478057 0.309758 -0.821895
+vn -0.478043 0.309749 -0.821907
+vn -0.543746 -0.839250 -0.000001
+vn -0.543745 -0.839250 -0.000007
+vn -0.543761 -0.839240 0.000005
+vn -0.543775 -0.839231 0.000011
+vn 0.478065 -0.309763 0.821889
+vn 0.478066 -0.309763 0.821888
+vn 0.478051 -0.309754 0.821900
+vn 0.478038 -0.309745 0.821911
+vn 0.876410 0.229858 -0.423167
+vn 0.876425 0.229866 -0.423131
+vn 0.876425 0.229866 -0.423131
+vn 0.876440 0.229874 -0.423096
+vn -0.543802 -0.839213 0.000030
+vn -0.543797 -0.839216 -0.000025
+vn -0.543759 -0.839242 -0.000075
+vn -0.543749 -0.839248 -0.000065
+vn 0.478012 -0.309727 0.821933
+vn 0.478029 -0.309740 0.821918
+vn 0.478073 -0.309770 0.821881
+vn 0.478110 -0.309794 0.821851
+vn 0.876434 0.229921 -0.423084
+vn 0.876403 0.229906 -0.423155
+vn 0.876403 0.229906 -0.423155
+vn 0.876373 0.229890 -0.423227
+vn -0.478082 0.309774 -0.821874
+vn -0.478068 0.309764 -0.821886
+vn -0.478083 0.309774 -0.821874
+vn -0.478054 0.309756 -0.821897
+vn -0.478065 0.309764 -0.821888
+vn -0.478087 0.309775 -0.821871
+vn 0.405446 -0.752258 -0.519347
+vn 0.405450 -0.752267 -0.519331
+vn 0.478080 -0.309766 0.821878
+vn 0.478040 -0.309746 0.821909
+vn 0.478055 -0.309754 0.821898
+vn 0.478059 -0.309757 0.821894
+vn -0.148318 0.893890 0.423039
+vn -0.148320 0.893862 0.423098
+vn -0.148320 0.893862 0.423098
+vn -0.148321 0.893834 0.423158
+vn 0.405432 -0.752273 -0.519337
+vn 0.405419 -0.752241 -0.519393
+vn 0.478045 -0.309749 0.821905
+vn 0.478050 -0.309752 0.821902
+vn 0.478044 -0.309748 0.821907
+vn 0.478069 -0.309764 0.821886
+vn -0.148246 0.893869 0.423110
+vn -0.148246 0.893860 0.423129
+vn -0.148246 0.893860 0.423129
+vn -0.148247 0.893850 0.423148
+vn -0.478096 0.309777 -0.821865
+vn -0.478072 0.309764 -0.821884
+vn -0.478051 0.309752 -0.821900
+vn -0.478067 0.309761 -0.821888
+vn 0.478032 -0.309741 0.821916
+vn 0.478063 -0.309759 0.821891
+vn 0.478038 -0.309744 0.821911
+vn 0.478084 -0.309773 0.821873
+vn 0.543796 0.839217 -0.000025
+vn 0.543757 0.839243 0.000067
+vn 0.543792 0.839220 0.000024
+vn 0.543750 0.839247 0.000055
+vn -0.478037 0.309744 -0.821912
+vn -0.478052 0.309752 -0.821900
+vn -0.478082 0.309770 -0.821876
+vn -0.478083 0.309772 -0.821875
+vn 0.148249 -0.893867 -0.423111
+vn 0.148249 -0.893858 -0.423130
+vn 0.148249 -0.893858 -0.423130
+vn 0.148250 -0.893849 -0.423149
+vn -0.478117 0.309794 -0.821846
+vn -0.478127 0.309800 -0.821838
+vn 0.558144 -0.615436 -0.556520
+vn 0.558136 -0.615417 -0.556548
+vn 0.558136 -0.615417 -0.556548
+vn 0.558129 -0.615398 -0.556577
+vn 0.478068 -0.309764 0.821886
+vn 0.478082 -0.309772 0.821875
+vn -0.415003 0.745067 0.522156
+vn -0.415005 0.745044 0.522187
+vn -0.415005 0.745044 0.522187
+vn -0.415008 0.745021 0.522218
+vn -0.543827 -0.839197 0.000032
+vn -0.543832 -0.839194 0.000043
+vn 0.478065 -0.309761 0.821889
+vn 0.478031 -0.309736 0.821919
+vn 0.849565 -0.074305 -0.522224
+vn 0.849593 -0.074289 -0.522181
+vn 0.849593 -0.074289 -0.522181
+vn 0.849621 -0.074273 -0.522137
+vn -0.478012 0.309726 -0.821934
+vn -0.478015 0.309728 -0.821931
+vn 0.478103 -0.309783 0.821859
+vn 0.478152 -0.309819 0.821817
+vn 0.789759 -0.257935 -0.556552
+vn 0.789757 -0.257935 -0.556555
+vn 0.789757 -0.257935 -0.556555
+vn 0.789754 -0.257936 -0.556558
+vn -0.478033 0.309743 -0.821914
+vn -0.478017 0.309731 -0.821929
+vn -0.849514 0.074333 0.522304
+vn -0.849548 0.074313 0.522250
+vn -0.849548 0.074313 0.522250
+vn -0.849583 0.074294 0.522197
+vn 0.543791 0.839221 -0.000022
+vn 0.543788 0.839222 -0.000016
+vn -0.478068 0.309765 -0.821886
+vn -0.478033 0.309745 -0.821914
+vn 0.415029 -0.745020 -0.522203
+vn 0.415028 -0.745034 -0.522185
+vn 0.415028 -0.745034 -0.522185
+vn 0.415026 -0.745047 -0.522167
+vn 0.478090 -0.309778 0.821868
+vn 0.478040 -0.309749 0.821908
+vn 0.558091 -0.615400 -0.556612
+vn 0.558090 -0.615397 -0.556616
+vn 0.558090 -0.615397 -0.556616
+vn 0.558089 -0.615394 -0.556621
+vn 0.478131 -0.309806 0.821834
+vn 0.478199 -0.309844 0.821780
+vn -0.415025 0.744950 0.522306
+vn -0.415019 0.745017 0.522216
+vn -0.415019 0.745017 0.522216
+vn -0.415012 0.745083 0.522126
+vn -0.478065 0.309764 -0.821888
+vn -0.478062 0.309763 -0.821891
+vn 0.478151 -0.309817 0.821818
+vn 0.478069 -0.309771 0.821883
+vn 0.543823 0.839200 -0.000038
+vn 0.543828 0.839197 -0.000050
+vn -0.478052 0.309754 -0.821899
+vn -0.478032 0.309742 -0.821916
+vn 0.415022 -0.744939 -0.522324
+vn 0.415014 -0.745021 -0.522215
+vn 0.415014 -0.745021 -0.522215
+vn 0.415006 -0.745102 -0.522105
+vn 0.543767 0.839236 0.000068
+vn 0.543706 0.839276 0.000217
+vn -0.478120 0.309797 -0.821843
+vn -0.478114 0.309794 -0.821848
+vn 0.415013 -0.745051 -0.522172
+vn 0.415013 -0.745045 -0.522180
+vn 0.415013 -0.745045 -0.522180
+vn 0.415014 -0.745038 -0.522189
+vn 0.478072 -0.309767 0.821883
+vn 0.478043 -0.309750 0.821906
+vn 0.478105 -0.309790 0.821855
+vn 0.478125 -0.309804 0.821838
+vn 0.789694 -0.257908 -0.556656
+vn 0.789701 -0.257908 -0.556647
+vn 0.789701 -0.257908 -0.556647
+vn 0.789708 -0.257907 -0.556637
+vn -0.478089 0.309775 -0.821870
+vn -0.478082 0.309769 -0.821876
+vn -0.849564 0.074328 0.522222
+vn -0.849578 0.074321 0.522201
+vn -0.849578 0.074321 0.522201
+vn -0.849591 0.074313 0.522181
+vn 0.789745 -0.257938 -0.556571
+vn 0.789760 -0.257937 -0.556550
+vn 0.789760 -0.257937 -0.556550
+vn 0.789775 -0.257936 -0.556529
+vn -0.478093 0.309776 -0.821868
+vn -0.478150 0.309818 -0.821819
+vn -0.849665 0.074311 0.522061
+vn -0.849622 0.074336 0.522127
+vn -0.849622 0.074336 0.522127
+vn -0.849579 0.074360 0.522193
+vn 0.478031 -0.309738 0.821918
+vn 0.478002 -0.309717 0.821942
+vn -0.478126 0.309805 -0.821837
+vn -0.478097 0.309783 -0.821863
+vn -0.543773 -0.839233 -0.000076
+vn -0.543720 -0.839267 -0.000206
+vn 0.478012 -0.309726 0.821934
+vn 0.478015 -0.309728 0.821931
+vn 0.849667 -0.074303 -0.522058
+vn 0.849622 -0.074328 -0.522127
+vn 0.849622 -0.074328 -0.522127
+vn 0.849578 -0.074354 -0.522196
+vn 0.789740 -0.257936 -0.556579
+vn 0.789739 -0.257936 -0.556580
+vn 0.789739 -0.257936 -0.556580
+vn 0.789738 -0.257936 -0.556581
+vn -0.478040 0.309746 -0.821910
+vn -0.478041 0.309746 -0.821909
+vn -0.849614 0.074319 0.522142
+vn -0.849611 0.074321 0.522146
+vn -0.849611 0.074321 0.522146
+vn -0.849609 0.074322 0.522151
+vn 0.478037 -0.309748 0.821910
+vn 0.478033 -0.309745 0.821914
+vn -0.478029 0.309740 -0.821918
+vn -0.478018 0.309732 -0.821927
+vn -0.543791 -0.839221 0.000022
+vn -0.543788 -0.839222 0.000016
+vn 0.478024 -0.309736 0.821923
+vn 0.478025 -0.309737 0.821922
+vn 0.849622 -0.074311 -0.522131
+vn 0.849612 -0.074317 -0.522146
+vn 0.849612 -0.074317 -0.522146
+vn 0.849603 -0.074322 -0.522161
+vn -0.543728 -0.839262 -0.000057
+vn -0.543775 -0.839231 0.000059
+vn 0.478142 -0.309815 0.821824
+vn 0.478123 -0.309801 0.821841
+vn 0.849513 -0.074326 -0.522306
+vn 0.849550 -0.074304 -0.522248
+vn 0.849550 -0.074304 -0.522248
+vn 0.849588 -0.074283 -0.522190
+vn -0.478040 0.309746 -0.821909
+vn -0.478041 0.309747 -0.821908
+vn -0.478093 0.309779 -0.821866
+vn -0.478125 0.309796 -0.821841
+vn 0.558106 -0.615434 -0.556559
+vn 0.558101 -0.615423 -0.556577
+vn 0.558101 -0.615423 -0.556577
+vn 0.558097 -0.615411 -0.556594
+vn 0.478074 -0.309765 0.821882
+vn 0.478136 -0.309800 0.821833
+vn -0.415032 0.745022 0.522198
+vn -0.415031 0.745035 0.522181
+vn -0.415031 0.745035 0.522181
+vn -0.415029 0.745048 0.522163
+vn 0.558101 -0.615385 -0.556619
+vn 0.558107 -0.615403 -0.556593
+vn 0.558107 -0.615403 -0.556593
+vn 0.558114 -0.615420 -0.556567
+vn 0.478083 -0.309772 0.821875
+vn 0.478104 -0.309784 0.821858
+vn -0.415012 0.745015 0.522224
+vn -0.415014 0.744998 0.522247
+vn -0.415014 0.744998 0.522247
+vn -0.415015 0.744981 0.522270
+vn -0.478077 0.309766 -0.821880
+vn -0.478144 0.309803 -0.821828
+vn 0.478105 -0.309786 0.821857
+vn 0.478097 -0.309782 0.821863
+vn 0.543732 0.839259 0.000047
+vn 0.543775 0.839231 -0.000059
+vn -0.478090 0.309778 -0.821868
+vn -0.478040 0.309749 -0.821908
+vn 0.414991 -0.745031 -0.522217
+vn 0.414993 -0.745014 -0.522240
+vn 0.414993 -0.745014 -0.522240
+vn 0.414994 -0.744998 -0.522263
+s 1
+g pCube1
+usemtl initialShadingGroup
+f 246/370/474 262/371/475 244/372/476
+f 245/373/477 243/374/478 258/393/479
+f 243/374/478 244/372/476 258/393/479
+f 258/393/479 244/372/476 252/394/480
+f 244/372/476 262/371/475 252/394/480
+s 2
+f 337/375/481 336/376/482 339/377/483
+f 336/376/482 338/378/484 339/377/483
+s 3
+f 247/532/485 270/533/486 249/534/487
+f 248/535/488 250/536/489 267/537/490
+f 250/536/489 249/534/487 267/537/490
+f 267/537/490 249/534/487 254/538/491
+f 270/533/486 254/538/491 249/534/487
+s 4
+f 244/369/492 250/384/493 246/564/494
+f 248/560/495 266/561/496 250/384/493
+f 266/561/496 253/562/497 250/384/493
+f 253/562/497 263/563/498 250/384/493
+f 250/384/493 263/563/498 246/564/494
+s 5
+f 243/385/499 245/555/500 249/368/501
+f 247/559/502 249/368/501 271/558/503
+f 271/558/503 249/368/501 255/557/504
+f 255/557/504 249/368/501 257/556/505
+f 249/368/501 245/555/500 257/556/505
+s 6
+f 341/379/506 340/380/507 343/381/508
+f 340/380/507 342/382/509 343/381/508
+s 7
+f 345/383/510 344/386/511 347/387/512
+f 344/386/511 346/388/513 347/387/512
+s 8
+f 349/390/514 348/391/515 351/392/516
+f 348/391/515 350/395/517 351/392/516
+s 9
+f 353/396/518 352/397/519 355/398/520
+f 352/397/519 354/399/521 355/398/520
+s 10
+f 356/400/522 357/401/523 359/402/524
+f 357/401/523 358/403/525 359/402/524
+s 11
+f 360/404/526 361/407/527 363/410/528
+f 361/407/527 362/411/529 363/410/528
+s 12
+f 364/412/530 365/413/531 367/414/532
+f 365/413/531 366/415/533 367/414/532
+s 13
+f 368/418/534 369/419/535 371/420/536
+f 369/419/535 370/421/537 371/420/536
+s 14
+f 372/422/538 373/423/539 375/424/540
+f 373/423/539 374/425/541 375/424/540
+s 15
+f 376/426/542 377/427/543 379/428/544
+f 377/427/543 378/429/545 379/428/544
+s 16
+f 381/430/546 380/431/547 383/432/548
+f 380/431/547 382/433/549 383/432/548
+s 17
+f 384/434/550 385/435/551 387/436/552
+f 385/435/551 386/437/553 387/436/552
+s 18
+f 389/438/554 388/439/555 391/440/556
+f 388/439/555 390/441/557 391/440/556
+s 19
+f 393/442/558 392/443/559 395/444/560
+f 392/443/559 394/445/561 395/444/560
+s 20
+f 396/446/562 397/447/563 399/448/564
+f 397/447/563 398/449/565 399/448/564
+s 21
+f 255/450/566 272/451/567 260/452/568
+f 260/452/568 272/451/567 273/453/569
+s 5
+f 257/454/505 274/457/570 255/450/504
+f 255/450/504 274/457/570 272/451/571
+s 22
+f 257/389/572 256/456/573 274/455/574
+f 256/458/573 275/460/575 274/457/574
+s 23
+f 256/458/576 260/452/577 275/460/578
+f 260/452/577 273/453/579 275/460/578
+s 24
+f 252/462/580 276/463/581 259/464/582
+f 259/464/582 276/463/581 277/465/583
+s 1
+f 262/371/475 278/405/584 252/394/480
+f 252/394/480 278/405/584 276/406/585
+s 25
+f 262/466/586 261/467/587 278/468/588
+f 261/467/587 279/469/589 278/468/588
+s 26
+f 261/467/590 259/464/591 279/469/592
+f 259/464/591 277/465/593 279/469/592
+s 27
+f 253/471/594 280/472/595 264/473/596
+f 264/473/596 280/472/595 281/475/597
+s 4
+f 253/471/497 266/477/496 280/472/598
+f 266/477/496 282/479/599 280/472/598
+s 28
+f 266/477/600 265/482/601 282/479/602
+f 265/482/601 283/483/603 282/479/602
+s 29
+f 264/473/604 281/475/605 265/482/606
+f 265/482/606 281/475/605 283/483/607
+s 30
+f 268/484/608 254/485/609 285/486/610
+f 254/485/609 284/487/611 285/486/610
+s 3
+f 270/533/486 286/539/612 254/538/491
+f 254/538/491 286/539/612 284/540/613
+s 31
+f 269/488/614 287/491/615 270/492/616
+f 270/492/616 287/491/615 286/493/617
+s 32
+f 269/488/618 268/484/619 287/491/620
+f 268/484/619 285/486/621 287/491/620
+s 5
+f 245/494/500 288/495/622 257/454/505
+f 257/454/505 288/495/622 289/496/623
+s 1
+f 245/373/477 258/393/479 288/408/624
+f 258/393/479 290/409/625 288/408/624
+s 33
+f 258/497/626 256/458/627 290/498/628
+f 256/458/627 291/499/629 290/498/628
+s 34
+f 257/454/630 289/496/631 256/458/632
+f 256/458/632 289/496/631 291/499/633
+s 1
+f 258/393/479 252/394/480 292/416/634
+f 252/394/480 293/417/635 292/416/634
+s 35
+f 252/462/636 259/464/637 293/500/638
+f 259/464/637 294/501/639 293/500/638
+s 36
+f 256/458/640 295/502/641 259/464/642
+f 259/464/642 295/502/641 294/501/643
+s 37
+f 258/497/644 292/503/645 256/458/646
+f 256/458/646 292/503/645 295/502/647
+s 38
+f 259/464/648 251/504/649 296/505/650
+f 251/504/649 297/506/651 296/505/650
+s 39
+f 260/452/652 298/507/653 251/504/654
+f 251/504/654 298/507/653 297/506/655
+s 40
+f 256/458/656 299/508/657 260/452/658
+f 260/452/658 299/508/657 298/507/659
+s 41
+f 256/458/660 259/464/661 299/508/662
+f 259/464/661 296/505/663 299/508/662
+s 1
+f 246/370/474 301/459/664 262/371/475
+f 262/371/475 301/459/664 300/461/665
+s 4
+f 246/509/494 263/511/498 301/513/666
+f 263/511/498 302/514/667 301/513/666
+s 42
+f 263/511/668 261/467/669 302/514/670
+f 261/476/669 303/478/671 302/480/670
+s 43
+f 262/466/672 300/516/673 261/467/674
+f 261/467/674 300/516/673 303/515/675
+s 4
+f 263/511/498 253/471/497 304/517/676
+f 253/471/497 305/518/677 304/517/676
+s 44
+f 253/471/678 264/473/679 305/518/680
+f 264/473/679 306/519/681 305/518/680
+s 45
+f 261/467/682 307/520/683 264/473/684
+f 264/473/684 307/520/683 306/519/685
+s 46
+f 263/511/686 304/517/687 261/467/688
+f 261/467/688 304/517/687 307/520/689
+s 47
+f 264/473/690 251/504/691 308/521/692
+f 251/504/691 309/522/693 308/521/692
+s 48
+f 259/464/694 310/523/695 251/504/696
+f 251/504/696 310/523/695 309/522/697
+s 49
+f 261/467/698 311/565/699 259/464/700
+f 259/464/700 311/565/699 310/523/701
+s 50
+f 261/467/702 264/473/703 311/565/704
+f 264/473/703 308/521/705 311/565/704
+s 4
+f 266/477/496 248/566/495 312/567/706
+f 248/566/495 313/568/707 312/567/706
+s 3
+f 248/535/488 267/537/490 313/541/708
+f 267/537/490 314/542/709 313/541/708
+s 51
+f 265/482/710 315/569/711 267/570/712
+f 267/570/712 315/569/711 314/571/713
+s 52
+f 266/477/714 312/567/715 265/482/716
+f 265/482/716 312/567/715 315/569/717
+s 3
+f 267/537/490 254/538/491 317/543/718
+f 254/538/491 316/544/719 317/543/718
+s 53
+f 268/484/720 318/572/721 254/485/722
+f 254/485/722 318/572/721 316/573/723
+s 54
+f 265/482/724 319/574/725 268/484/726
+f 268/484/726 319/574/725 318/572/727
+s 55
+f 265/482/728 267/570/729 319/574/730
+f 267/570/729 317/575/731 319/574/730
+s 56
+f 251/504/732 321/576/733 268/484/734
+f 268/484/734 321/576/733 320/577/735
+s 57
+f 264/473/736 322/578/737 251/504/738
+f 251/504/738 322/578/737 321/576/739
+s 58
+f 264/473/740 265/482/741 322/578/742
+f 265/482/741 323/579/743 322/578/742
+s 59
+f 265/482/744 268/484/745 323/579/746
+f 268/470/745 320/510/747 323/512/746
+s 3
+f 247/532/485 324/545/748 270/533/486
+f 270/533/486 324/545/748 325/546/749
+s 5
+f 271/580/503 326/581/750 247/582/502
+f 247/582/502 326/581/750 324/583/751
+s 60
+f 271/580/752 269/488/753 326/581/754
+f 269/488/753 327/584/755 326/581/754
+s 61
+f 269/488/756 270/492/757 327/584/758
+f 270/492/757 325/585/759 327/584/758
+s 5
+f 255/450/504 328/586/760 271/580/503
+f 271/580/503 328/586/760 329/587/761
+s 62
+f 255/450/762 260/452/763 328/586/764
+f 260/452/763 330/588/765 328/586/764
+s 63
+f 260/452/766 269/488/767 330/588/768
+f 269/488/767 331/589/769 330/588/768
+s 64
+f 271/580/770 329/587/771 269/488/772
+f 269/488/772 329/587/771 331/589/773
+s 65
+f 260/452/774 251/504/775 332/590/776
+f 251/504/775 333/591/777 332/590/776
+s 66
+f 251/504/778 268/484/779 333/591/780
+f 268/484/779 334/531/781 333/591/780
+s 67
+f 269/474/782 335/524/783 268/470/784
+f 268/484/784 335/530/783 334/531/785
+s 68
+f 260/452/786 332/590/787 269/488/788
+f 269/488/788 332/590/787 335/530/789
+s 21
+f 272/451/567 336/376/790 273/453/569
+f 273/453/569 336/376/790 337/375/791
+s 69
+f 274/457/792 338/378/793 272/451/794
+f 272/451/794 338/378/793 336/376/795
+s 22
+f 274/457/574 275/460/575 338/378/796
+f 275/460/575 339/377/797 338/378/796
+s 70
+f 275/460/798 273/453/799 339/377/800
+f 273/453/799 337/375/801 339/377/800
+s 24
+f 276/463/581 340/380/802 277/465/583
+f 277/465/583 340/380/802 341/379/803
+s 1
+f 278/405/584 342/481/804 276/406/585
+f 276/406/585 342/481/804 340/489/805
+s 71
+f 278/468/806 279/469/807 342/382/808
+f 279/469/807 343/381/809 342/382/808
+s 26
+f 279/469/592 277/465/593 343/381/810
+f 277/465/593 341/379/811 343/381/810
+s 27
+f 280/472/595 344/386/812 281/475/597
+f 281/475/597 344/386/812 345/383/813
+s 72
+f 280/472/814 282/479/815 344/386/816
+f 282/479/815 346/388/817 344/386/816
+s 28
+f 282/479/602 283/483/603 346/388/818
+f 283/483/603 347/387/819 346/388/818
+s 73
+f 281/475/820 345/383/821 283/483/822
+f 283/483/822 345/383/821 347/387/823
+s 30
+f 285/486/610 284/487/611 349/390/824
+f 284/487/611 348/391/825 349/390/824
+s 3
+f 286/539/612 350/547/826 284/540/613
+f 284/540/613 350/547/826 348/548/827
+s 74
+f 287/491/828 351/392/829 286/493/830
+f 286/493/830 351/392/829 350/395/831
+s 32
+f 287/491/620 285/486/621 351/392/832
+f 285/486/621 349/390/833 351/392/832
+s 75
+f 288/495/834 352/397/835 289/496/836
+f 289/496/836 352/397/835 353/396/837
+s 1
+f 288/408/624 290/409/625 352/490/838
+f 290/409/625 354/525/839 352/490/838
+s 76
+f 290/498/840 291/499/841 354/399/842
+f 291/499/841 355/398/843 354/399/842
+s 34
+f 289/496/631 353/396/844 291/499/633
+f 291/499/633 353/396/844 355/398/845
+s 1
+f 292/416/634 293/417/635 356/526/846
+f 293/417/635 357/527/847 356/526/846
+s 35
+f 293/500/638 294/501/639 357/401/848
+f 294/501/639 358/403/849 357/401/848
+s 36
+f 295/502/641 359/402/850 294/501/643
+f 294/501/643 359/402/850 358/403/851
+s 77
+f 292/503/852 356/400/853 295/502/854
+f 295/502/854 356/400/853 359/402/855
+s 38
+f 296/505/650 297/506/651 360/404/856
+f 297/506/651 361/407/857 360/404/856
+s 39
+f 298/507/653 362/411/858 297/506/655
+f 297/506/655 362/411/858 361/407/859
+s 78
+f 299/508/860 363/410/861 298/507/862
+f 298/507/862 363/410/861 362/411/863
+s 41
+f 299/508/662 296/505/663 363/410/864
+f 296/505/663 360/404/865 363/410/864
+s 1
+f 301/459/664 365/528/866 300/461/665
+f 300/461/665 365/528/866 364/529/867
+s 79
+f 301/513/868 302/514/869 365/413/870
+f 302/514/869 366/415/871 365/413/870
+s 42
+f 302/514/670 303/515/671 366/415/872
+f 303/515/671 367/414/873 366/415/872
+s 80
+f 300/516/874 364/412/875 303/515/876
+f 303/515/876 364/412/875 367/414/877
+s 81
+f 304/517/878 305/518/879 368/418/880
+f 305/518/879 369/419/881 368/418/880
+s 44
+f 305/518/680 306/519/681 369/419/882
+f 306/519/681 370/421/883 369/419/882
+s 82
+f 307/520/884 371/420/885 306/519/886
+f 306/519/886 371/420/885 370/421/887
+s 46
+f 304/517/687 368/418/888 307/520/689
+f 307/520/689 368/418/888 371/420/889
+s 47
+f 308/521/692 309/522/693 372/422/890
+f 309/522/693 373/423/891 372/422/890
+s 48
+f 310/523/695 374/425/892 309/522/697
+f 309/522/697 374/425/892 373/423/893
+s 49
+f 311/565/699 375/424/894 310/523/701
+f 310/523/701 375/424/894 374/425/895
+s 83
+f 311/565/896 308/521/897 375/424/898
+f 308/521/897 372/422/899 375/424/898
+s 84
+f 312/567/900 313/568/901 376/426/902
+f 313/568/901 377/427/903 376/426/902
+s 3
+f 313/541/708 314/542/709 377/549/904
+f 314/542/709 378/550/905 377/549/904
+s 85
+f 315/569/906 379/428/907 314/571/908
+f 314/571/908 379/428/907 378/429/909
+s 52
+f 312/567/715 376/426/910 315/569/717
+f 315/569/717 376/426/910 379/428/911
+s 3
+f 317/543/718 316/544/719 381/551/912
+f 316/544/719 380/552/913 381/551/912
+s 53
+f 318/572/721 382/433/914 316/573/723
+f 316/573/723 382/433/914 380/431/915
+s 54
+f 319/574/725 383/432/916 318/572/727
+f 318/572/727 383/432/916 382/433/917
+s 86
+f 319/574/918 317/575/919 383/432/920
+f 317/575/919 381/430/921 383/432/920
+s 56
+f 321/576/733 385/435/922 320/577/735
+f 320/577/735 385/435/922 384/434/923
+s 57
+f 322/578/737 386/437/924 321/576/739
+f 321/576/739 386/437/924 385/435/925
+s 87
+f 322/578/926 323/579/927 386/437/928
+f 323/579/927 387/436/929 386/437/928
+s 59
+f 323/579/746 320/577/747 387/436/930
+f 320/577/747 384/434/931 387/436/930
+s 3
+f 324/545/748 388/553/932 325/546/749
+f 325/546/749 388/553/932 389/554/933
+s 88
+f 326/581/934 390/441/935 324/583/936
+f 324/583/936 390/441/935 388/439/937
+s 60
+f 326/581/754 327/584/755 390/441/938
+f 327/584/755 391/440/939 390/441/938
+s 89
+f 327/584/940 325/585/941 391/440/942
+f 325/585/941 389/438/943 391/440/942
+s 90
+f 328/586/944 392/443/945 329/587/946
+f 329/587/946 392/443/945 393/442/947
+s 62
+f 328/586/764 330/588/765 392/443/948
+f 330/588/765 394/445/949 392/443/948
+s 91
+f 330/588/950 331/589/951 394/445/952
+f 331/589/951 395/444/953 394/445/952
+s 64
+f 329/587/771 393/442/954 331/589/773
+f 331/589/773 393/442/954 395/444/955
+s 65
+f 332/590/776 333/591/777 396/446/956
+f 333/591/777 397/447/957 396/446/956
+s 66
+f 333/591/780 334/531/781 397/447/958
+f 334/531/781 398/449/959 397/447/958
+s 67
+f 335/530/783 399/448/960 334/531/785
+f 334/531/785 399/448/960 398/449/961
+s 92
+f 332/590/962 396/446/963 335/530/964
+f 335/530/964 396/446/963 399/448/965
+s 93
+f 400/592/966 402/594/967 401/593/968
+f 403/595/969 405/597/970 404/596/971
+f 404/596/971 405/597/970 402/594/967
+f 405/597/970 406/598/972 402/594/967
+f 402/594/967 406/598/972 401/593/968
+s 94
+f 407/599/973 409/601/974 408/600/975
+f 408/600/975 409/601/974 410/602/976
+s 95
+f 411/603/977 413/605/978 412/604/979
+f 414/606/980 416/608/981 415/607/982
+f 415/607/982 416/608/981 413/605/978
+f 416/608/981 417/609/983 413/605/978
+f 412/604/979 413/605/978 417/609/983
+s 96
+f 402/610/984 400/616/985 415/611/986
+f 414/612/987 415/611/986 418/613/988
+f 418/613/988 415/611/986 419/614/989
+f 419/614/989 415/611/986 420/615/990
+f 400/616/985 420/615/990 415/611/986
+s 97
+f 404/618/991 413/617/992 403/619/993
+f 411/623/994 423/622/995 413/617/992
+f 423/622/995 422/621/996 413/617/992
+f 422/621/996 421/620/997 413/617/992
+f 413/617/992 421/620/997 403/619/993
+s 98
+f 424/624/998 426/626/999 425/625/1000
+f 425/625/1000 426/626/999 427/627/1001
+s 99
+f 428/628/1002 430/630/1003 429/629/1004
+f 429/629/1004 430/630/1003 431/631/1005
+s 100
+f 432/632/1006 434/634/1007 433/633/1008
+f 433/633/1008 434/634/1007 435/635/1009
+s 101
+f 436/636/1010 438/638/1011 437/637/1012
+f 437/637/1012 438/638/1011 439/639/1013
+s 102
+f 440/640/1014 442/642/1015 441/641/1016
+f 441/641/1016 442/642/1015 443/643/1017
+s 103
+f 444/644/1018 446/646/1019 445/645/1020
+f 445/645/1020 446/646/1019 447/647/1021
+s 104
+f 448/648/1022 450/650/1023 449/649/1024
+f 449/649/1024 450/650/1023 451/651/1025
+s 105
+f 452/652/1026 454/654/1027 453/653/1028
+f 453/653/1028 454/654/1027 455/655/1029
+s 106
+f 456/656/1030 458/658/1031 457/657/1032
+f 457/657/1032 458/658/1031 459/659/1033
+s 107
+f 460/660/1034 462/662/1035 461/661/1036
+f 461/661/1036 462/662/1035 463/663/1037
+s 108
+f 464/664/1038 466/666/1039 465/665/1040
+f 465/665/1040 466/666/1039 467/667/1041
+s 109
+f 468/668/1042 470/670/1043 469/669/1044
+f 469/669/1044 470/670/1043 471/671/1045
+s 110
+f 472/672/1046 474/674/1047 473/673/1048
+f 473/673/1048 474/674/1047 475/675/1049
+s 111
+f 476/676/1050 478/678/1051 477/677/1052
+f 477/677/1052 478/678/1051 479/679/1053
+s 112
+f 480/680/1054 482/682/1055 481/681/1056
+f 481/681/1056 482/682/1055 483/683/1057
+s 113
+f 422/684/1058 485/686/1059 484/685/1060
+f 485/686/1059 486/687/1061 484/685/1060
+s 97
+f 421/688/997 422/684/996 487/689/1062
+f 422/684/996 484/685/1063 487/689/1062
+s 114
+f 421/690/1064 487/692/1065 488/691/1066
+f 488/693/1066 487/689/1065 489/694/1067
+s 115
+f 488/693/1068 489/694/1069 485/686/1070
+f 485/686/1070 489/694/1069 486/687/1071
+s 116
+f 406/695/1072 491/697/1073 490/696/1074
+f 491/697/1073 492/698/1075 490/696/1074
+s 93
+f 401/593/968 406/598/972 493/699/1076
+f 406/598/972 490/700/1077 493/699/1076
+s 117
+f 401/701/1078 493/703/1079 494/702/1080
+f 494/702/1080 493/703/1079 495/704/1081
+s 118
+f 494/702/1082 495/704/1083 491/697/1084
+f 491/697/1084 495/704/1083 492/698/1085
+s 119
+f 419/705/1086 497/707/1087 496/706/1088
+f 497/707/1087 498/708/1089 496/706/1088
+s 96
+f 419/705/989 496/706/1090 418/709/988
+f 418/709/988 496/706/1090 499/710/1091
+s 120
+f 418/709/1092 499/710/1093 500/711/1094
+f 500/711/1094 499/710/1093 501/712/1095
+s 121
+f 497/707/1096 500/711/1097 498/708/1098
+f 500/711/1097 501/712/1099 498/708/1098
+s 122
+f 502/713/1100 503/715/1101 417/714/1102
+f 417/714/1102 503/715/1101 504/716/1103
+s 95
+f 412/604/979 417/609/983 505/717/1104
+f 417/609/983 504/718/1105 505/717/1104
+s 123
+f 506/719/1106 412/721/1107 507/720/1108
+f 412/721/1107 505/722/1109 507/720/1108
+s 124
+f 506/719/1110 507/720/1111 502/713/1112
+f 502/713/1112 507/720/1111 503/715/1113
+s 97
+f 403/723/993 421/688/997 508/724/1114
+f 421/688/997 509/725/1115 508/724/1114
+s 93
+f 403/595/969 508/726/1116 405/597/970
+f 405/597/970 508/726/1116 510/727/1117
+s 125
+f 405/728/1118 510/729/1119 488/693/1120
+f 488/693/1120 510/729/1119 511/730/1121
+s 126
+f 421/688/1122 488/693/1123 509/725/1124
+f 488/693/1123 511/730/1125 509/725/1124
+s 93
+f 405/597/970 512/731/1126 406/598/972
+f 406/598/972 512/731/1126 513/732/1127
+s 127
+f 406/695/1128 513/733/1129 491/697/1130
+f 491/697/1130 513/733/1129 514/734/1131
+s 128
+f 488/693/1132 491/697/1133 515/735/1134
+f 491/697/1133 514/734/1135 515/735/1134
+s 129
+f 405/728/1136 488/693/1137 512/736/1138
+f 488/693/1137 515/735/1139 512/736/1138
+s 130
+f 491/697/1140 517/738/1141 516/737/1142
+f 516/737/1142 517/738/1141 518/739/1143
+s 131
+f 485/686/1144 516/737/1145 519/740/1146
+f 516/737/1145 518/739/1147 519/740/1146
+s 132
+f 488/693/1148 485/686/1149 520/741/1150
+f 485/686/1149 519/740/1151 520/741/1150
+s 133
+f 488/693/1152 520/741/1153 491/697/1154
+f 491/697/1154 520/741/1153 517/738/1155
+s 93
+f 400/592/966 401/593/968 521/742/1156
+f 401/593/968 522/743/1157 521/742/1156
+s 96
+f 400/744/985 521/746/1158 420/745/990
+f 420/745/990 521/746/1158 523/747/1159
+s 134
+f 420/745/1160 523/747/1161 494/702/1162
+f 494/748/1162 523/750/1161 524/749/1163
+s 135
+f 401/701/1164 494/702/1165 522/751/1166
+f 494/702/1165 524/752/1167 522/751/1166
+s 96
+f 420/745/990 525/753/1168 419/705/989
+f 419/705/989 525/753/1168 526/754/1169
+s 136
+f 419/705/1170 526/754/1171 497/707/1172
+f 497/707/1172 526/754/1171 527/755/1173
+s 137
+f 494/702/1174 497/707/1175 528/756/1176
+f 497/707/1175 527/755/1177 528/756/1176
+s 138
+f 420/745/1178 494/702/1179 525/753/1180
+f 494/702/1179 528/756/1181 525/753/1180
+s 139
+f 497/707/1182 529/757/1183 516/737/1184
+f 516/737/1184 529/757/1183 530/758/1185
+s 140
+f 491/697/1186 516/737/1187 531/759/1188
+f 516/737/1187 530/758/1189 531/759/1188
+s 141
+f 494/702/1190 491/697/1191 532/760/1192
+f 491/697/1191 531/759/1193 532/760/1192
+s 142
+f 494/702/1194 532/760/1195 497/707/1196
+f 497/707/1196 532/760/1195 529/757/1197
+s 96
+f 418/709/988 533/762/1198 414/761/987
+f 414/761/987 533/762/1198 534/763/1199
+s 95
+f 414/606/980 534/764/1200 416/608/981
+f 416/608/981 534/764/1200 535/765/1201
+s 143
+f 500/711/1202 416/767/1203 536/766/1204
+f 416/767/1203 535/768/1205 536/766/1204
+s 144
+f 418/709/1206 500/711/1207 533/762/1208
+f 500/711/1207 536/766/1209 533/762/1208
+s 95
+f 416/608/981 537/769/1210 417/609/983
+f 417/609/983 537/769/1210 538/770/1211
+s 145
+f 502/713/1212 417/714/1213 539/771/1214
+f 417/714/1213 538/772/1215 539/771/1214
+s 146
+f 500/711/1216 502/713/1217 540/773/1218
+f 502/713/1217 539/771/1219 540/773/1218
+s 147
+f 500/711/1220 540/773/1221 416/767/1222
+f 416/767/1222 540/773/1221 537/774/1223
+s 148
+f 516/737/1224 502/713/1225 541/775/1226
+f 502/713/1225 542/776/1227 541/775/1226
+s 149
+f 497/707/1228 516/737/1229 543/777/1230
+f 516/737/1229 541/775/1231 543/777/1230
+s 150
+f 497/707/1232 543/777/1233 500/711/1234
+f 500/711/1234 543/777/1233 544/778/1235
+s 151
+f 500/711/1236 544/778/1237 502/713/1238
+f 502/779/1238 544/781/1237 542/780/1239
+s 95
+f 411/603/977 412/604/979 545/782/1240
+f 412/604/979 546/783/1241 545/782/1240
+s 97
+f 423/784/995 411/786/994 547/785/1242
+f 411/786/994 545/787/1243 547/785/1242
+s 152
+f 423/784/1244 547/785/1245 506/719/1246
+f 506/719/1246 547/785/1245 548/788/1247
+s 153
+f 506/719/1248 548/788/1249 412/721/1250
+f 412/721/1250 548/788/1249 546/789/1251
+s 97
+f 422/684/996 423/784/995 549/790/1252
+f 423/784/995 550/791/1253 549/790/1252
+s 154
+f 422/684/1254 549/790/1255 485/686/1256
+f 485/686/1256 549/790/1255 551/792/1257
+s 155
+f 485/686/1258 551/792/1259 506/719/1260
+f 506/719/1260 551/792/1259 552/793/1261
+s 156
+f 423/784/1262 506/719/1263 550/791/1264
+f 506/719/1263 552/793/1265 550/791/1264
+s 157
+f 485/686/1266 553/794/1267 516/737/1268
+f 516/737/1268 553/794/1267 554/795/1269
+s 158
+f 516/737/1270 554/795/1271 502/713/1272
+f 502/713/1272 554/795/1271 555/796/1273
+s 159
+f 506/797/1274 502/779/1275 556/798/1276
+f 502/713/1275 555/796/1277 556/799/1276
+s 160
+f 485/686/1278 506/719/1279 553/794/1280
+f 506/719/1279 556/799/1281 553/794/1280
+s 113
+f 484/685/1060 486/687/1061 408/600/1282
+f 486/687/1061 407/599/1283 408/600/1282
+s 161
+f 487/689/1284 484/685/1285 410/602/1286
+f 484/685/1285 408/600/1287 410/602/1286
+s 114
+f 487/689/1065 410/602/1288 489/694/1067
+f 489/694/1067 410/602/1288 409/601/1289
+s 162
+f 489/694/1290 409/601/1291 486/687/1292
+f 486/687/1292 409/601/1291 407/599/1293
+s 116
+f 490/696/1074 492/698/1075 425/625/1294
+f 492/698/1075 424/624/1295 425/625/1294
+s 93
+f 493/699/1076 490/700/1077 427/800/1296
+f 490/700/1077 425/801/1297 427/800/1296
+s 163
+f 493/703/1298 427/627/1299 495/704/1300
+f 495/704/1300 427/627/1299 426/626/1301
+s 118
+f 495/704/1083 426/626/1302 492/698/1085
+f 492/698/1085 426/626/1302 424/624/1303
+s 119
+f 496/706/1088 498/708/1089 429/629/1304
+f 498/708/1089 428/628/1305 429/629/1304
+s 164
+f 496/706/1306 429/629/1307 499/710/1308
+f 499/710/1308 429/629/1307 431/631/1309
+s 120
+f 499/710/1093 431/631/1310 501/712/1095
+f 501/712/1095 431/631/1310 430/630/1311
+s 165
+f 498/708/1312 501/712/1313 428/628/1314
+f 501/712/1313 430/630/1315 428/628/1314
+s 122
+f 503/715/1101 432/632/1316 504/716/1103
+f 504/716/1103 432/632/1316 433/633/1317
+s 95
+f 505/717/1104 504/718/1105 435/802/1318
+f 504/718/1105 433/803/1319 435/802/1318
+s 166
+f 507/720/1320 505/722/1321 434/634/1322
+f 505/722/1321 435/635/1323 434/634/1322
+s 124
+f 507/720/1111 434/634/1324 503/715/1113
+f 503/715/1113 434/634/1324 432/632/1325
+s 167
+f 508/724/1326 509/725/1327 437/637/1328
+f 509/725/1327 436/636/1329 437/637/1328
+s 93
+f 508/726/1116 437/804/1330 510/727/1117
+f 510/727/1117 437/804/1330 439/805/1331
+s 168
+f 510/729/1332 439/639/1333 511/730/1334
+f 511/730/1334 439/639/1333 438/638/1335
+s 126
+f 509/725/1124 511/730/1125 436/636/1336
+f 511/730/1125 438/638/1337 436/636/1336
+s 93
+f 512/731/1126 440/806/1338 513/732/1127
+f 513/732/1127 440/806/1338 441/807/1339
+s 127
+f 513/733/1129 441/641/1340 514/734/1131
+f 514/734/1131 441/641/1340 443/643/1341
+s 128
+f 515/735/1134 514/734/1135 442/642/1342
+f 514/734/1135 443/643/1343 442/642/1342
+s 169
+f 512/736/1344 515/735/1345 440/640/1346
+f 515/735/1345 442/642/1347 440/640/1346
+s 130
+f 517/738/1141 444/644/1348 518/739/1143
+f 518/739/1143 444/644/1348 445/645/1349
+s 131
+f 519/740/1146 518/739/1147 447/647/1350
+f 518/739/1147 445/645/1351 447/647/1350
+s 170
+f 520/741/1352 519/740/1353 446/646/1354
+f 519/740/1353 447/647/1355 446/646/1354
+s 133
+f 520/741/1153 446/646/1356 517/738/1155
+f 517/738/1155 446/646/1356 444/644/1357
+s 93
+f 521/742/1156 522/743/1157 449/808/1358
+f 522/743/1157 448/809/1359 449/808/1358
+s 171
+f 521/746/1360 449/649/1361 523/747/1362
+f 523/747/1362 449/649/1361 451/651/1363
+s 134
+f 523/747/1161 451/651/1364 524/752/1163
+f 524/752/1163 451/651/1364 450/650/1365
+s 172
+f 522/751/1366 524/752/1367 448/648/1368
+f 524/752/1367 450/650/1369 448/648/1368
+s 173
+f 525/753/1370 452/652/1371 526/754/1372
+f 526/754/1372 452/652/1371 453/653/1373
+s 136
+f 526/754/1171 453/653/1374 527/755/1173
+f 527/755/1173 453/653/1374 455/655/1375
+s 174
+f 528/756/1376 527/755/1377 454/654/1378
+f 527/755/1377 455/655/1379 454/654/1378
+s 138
+f 525/753/1180 528/756/1181 452/652/1380
+f 528/756/1181 454/654/1381 452/652/1380
+s 139
+f 529/757/1183 456/656/1382 530/758/1185
+f 530/758/1185 456/656/1382 457/657/1383
+s 140
+f 531/759/1188 530/758/1189 459/659/1384
+f 530/758/1189 457/657/1385 459/659/1384
+s 141
+f 532/760/1192 531/759/1193 458/658/1386
+f 531/759/1193 459/659/1387 458/658/1386
+s 175
+f 532/760/1388 458/658/1389 529/757/1390
+f 529/757/1390 458/658/1389 456/656/1391
+s 176
+f 533/762/1392 460/660/1393 534/763/1394
+f 534/763/1394 460/660/1393 461/661/1395
+s 95
+f 534/764/1200 461/810/1396 535/765/1201
+f 535/765/1201 461/810/1396 463/811/1397
+s 177
+f 536/766/1398 535/768/1399 462/662/1400
+f 535/768/1399 463/663/1401 462/662/1400
+s 144
+f 533/762/1208 536/766/1209 460/660/1402
+f 536/766/1209 462/662/1403 460/660/1402
+s 95
+f 537/769/1210 464/812/1404 538/770/1211
+f 538/770/1211 464/812/1404 465/813/1405
+s 145
+f 539/771/1214 538/772/1215 467/667/1406
+f 538/772/1215 465/665/1407 467/667/1406
+s 146
+f 540/773/1218 539/771/1219 466/666/1408
+f 539/771/1219 467/667/1409 466/666/1408
+s 178
+f 540/773/1410 466/666/1411 537/774/1412
+f 537/774/1412 466/666/1411 464/664/1413
+s 148
+f 541/775/1226 542/776/1227 469/669/1414
+f 542/776/1227 468/668/1415 469/669/1414
+s 149
+f 543/777/1230 541/775/1231 471/671/1416
+f 541/775/1231 469/669/1417 471/671/1416
+s 179
+f 543/777/1418 471/671/1419 544/778/1420
+f 544/778/1420 471/671/1419 470/670/1421
+s 151
+f 544/778/1237 470/670/1422 542/776/1239
+f 542/776/1239 470/670/1422 468/668/1423
+s 95
+f 545/782/1240 546/783/1241 473/814/1424
+f 546/783/1241 472/815/1425 473/814/1424
+s 180
+f 547/785/1426 545/787/1427 475/675/1428
+f 545/787/1427 473/673/1429 475/675/1428
+s 152
+f 547/785/1245 475/675/1430 548/788/1247
+f 548/788/1247 475/675/1430 474/674/1431
+s 181
+f 548/788/1432 474/674/1433 546/789/1434
+f 546/789/1434 474/674/1433 472/672/1435
+s 182
+f 549/790/1436 550/791/1437 477/677/1438
+f 550/791/1437 476/676/1439 477/677/1438
+s 154
+f 549/790/1255 477/677/1440 551/792/1257
+f 551/792/1257 477/677/1440 479/679/1441
+s 183
+f 551/792/1442 479/679/1443 552/793/1444
+f 552/793/1444 479/679/1443 478/678/1445
+s 156
+f 550/791/1264 552/793/1265 476/676/1446
+f 552/793/1265 478/678/1447 476/676/1446
+s 157
+f 553/794/1267 480/680/1448 554/795/1269
+f 554/795/1269 480/680/1448 481/681/1449
+s 158
+f 554/795/1271 481/681/1450 555/796/1273
+f 555/796/1273 481/681/1450 483/683/1451
+s 159
+f 556/799/1276 555/796/1277 482/682/1452
+f 555/796/1277 483/683/1453 482/682/1452
+s 184
+f 553/794/1454 556/799/1455 480/680/1456
+f 556/799/1455 482/682/1457 480/680/1456
+s 185
+f 557/816/1458 559/818/1459 558/817/1460
+f 560/819/1461 562/821/1462 561/820/1463
+f 561/820/1463 562/821/1462 559/818/1459
+f 562/821/1462 563/822/1464 559/818/1459
+f 559/818/1459 563/822/1464 558/817/1460
+s 186
+f 564/823/1465 566/825/1466 565/824/1467
+f 565/824/1467 566/825/1466 567/826/1468
+s 187
+f 568/827/1469 570/829/1470 569/828/1471
+f 571/830/1472 573/832/1473 572/831/1474
+f 572/831/1474 573/832/1473 570/829/1470
+f 573/832/1473 574/833/1475 570/829/1470
+f 569/828/1471 570/829/1470 574/833/1475
+s 188
+f 559/834/1476 557/840/1477 572/835/1478
+f 571/836/1479 572/835/1478 575/837/1480
+f 575/837/1480 572/835/1478 576/838/1481
+f 576/838/1481 572/835/1478 577/839/1482
+f 557/840/1477 577/839/1482 572/835/1478
+s 189
+f 561/842/1483 570/841/1484 560/843/1485
+f 568/847/1486 580/846/1487 570/841/1484
+f 580/846/1487 579/845/1488 570/841/1484
+f 579/845/1488 578/844/1489 570/841/1484
+f 570/841/1484 578/844/1489 560/843/1485
+s 190
+f 581/848/1490 583/850/1491 582/849/1492
+f 582/849/1492 583/850/1491 584/851/1493
+s 191
+f 585/852/1494 587/854/1495 586/853/1496
+f 586/853/1496 587/854/1495 588/855/1497
+s 192
+f 589/856/1498 591/858/1499 590/857/1500
+f 590/857/1500 591/858/1499 592/859/1501
+s 193
+f 593/860/1502 595/862/1503 594/861/1504
+f 594/861/1504 595/862/1503 596/863/1505
+s 194
+f 597/864/1506 599/866/1507 598/865/1508
+f 598/865/1508 599/866/1507 600/867/1509
+s 195
+f 601/868/1510 603/870/1511 602/869/1512
+f 602/869/1512 603/870/1511 604/871/1513
+s 196
+f 605/872/1514 607/874/1515 606/873/1516
+f 606/873/1516 607/874/1515 608/875/1517
+s 197
+f 609/876/1518 611/878/1519 610/877/1520
+f 610/877/1520 611/878/1519 612/879/1521
+s 198
+f 613/880/1522 615/882/1523 614/881/1524
+f 614/881/1524 615/882/1523 616/883/1525
+s 199
+f 617/884/1526 619/886/1527 618/885/1528
+f 618/885/1528 619/886/1527 620/887/1529
+s 200
+f 621/888/1530 623/890/1531 622/889/1532
+f 622/889/1532 623/890/1531 624/891/1533
+s 201
+f 625/892/1534 627/894/1535 626/893/1536
+f 626/893/1536 627/894/1535 628/895/1537
+s 202
+f 629/896/1538 631/898/1539 630/897/1540
+f 630/897/1540 631/898/1539 632/899/1541
+s 203
+f 633/900/1542 635/902/1543 634/901/1544
+f 634/901/1544 635/902/1543 636/903/1545
+s 204
+f 637/904/1546 639/906/1547 638/905/1548
+f 638/905/1548 639/906/1547 640/907/1549
+s 205
+f 579/908/1550 642/910/1551 641/909/1552
+f 642/910/1551 643/911/1553 641/909/1552
+s 189
+f 578/912/1489 579/908/1488 644/913/1554
+f 579/908/1488 641/909/1555 644/913/1554
+s 206
+f 578/914/1556 644/916/1557 645/915/1558
+f 645/917/1558 644/913/1557 646/918/1559
+s 207
+f 645/917/1560 646/918/1561 642/910/1562
+f 642/910/1562 646/918/1561 643/911/1563
+s 208
+f 563/919/1564 648/921/1565 647/920/1566
+f 648/921/1565 649/922/1567 647/920/1566
+s 185
+f 558/817/1460 563/822/1464 650/923/1568
+f 563/822/1464 647/924/1569 650/923/1568
+s 209
+f 558/925/1570 650/927/1571 651/926/1572
+f 651/926/1572 650/927/1571 652/928/1573
+s 210
+f 651/926/1574 652/928/1575 648/921/1576
+f 648/921/1576 652/928/1575 649/922/1577
+s 211
+f 576/929/1578 654/931/1579 653/930/1580
+f 654/931/1579 655/932/1581 653/930/1580
+s 188
+f 576/929/1481 653/930/1582 575/933/1480
+f 575/933/1480 653/930/1582 656/934/1583
+s 212
+f 575/933/1584 656/934/1585 657/935/1586
+f 657/935/1586 656/934/1585 658/936/1587
+s 213
+f 654/931/1588 657/935/1589 655/932/1590
+f 657/935/1589 658/936/1591 655/932/1590
+s 214
+f 659/937/1592 660/939/1593 574/938/1594
+f 574/938/1594 660/939/1593 661/940/1595
+s 187
+f 569/828/1471 574/833/1475 662/941/1596
+f 574/833/1475 661/942/1597 662/941/1596
+s 215
+f 663/943/1598 569/945/1599 664/944/1600
+f 569/945/1599 662/946/1601 664/944/1600
+s 216
+f 663/943/1602 664/944/1603 659/937/1604
+f 659/937/1604 664/944/1603 660/939/1605
+s 189
+f 560/947/1485 578/912/1489 665/948/1606
+f 578/912/1489 666/949/1607 665/948/1606
+s 185
+f 560/819/1461 665/950/1608 562/821/1462
+f 562/821/1462 665/950/1608 667/951/1609
+s 217
+f 562/952/1610 667/953/1611 645/917/1612
+f 645/917/1612 667/953/1611 668/954/1613
+s 218
+f 578/912/1614 645/917/1615 666/949/1616
+f 645/917/1615 668/954/1617 666/949/1616
+s 185
+f 562/821/1462 669/955/1618 563/822/1464
+f 563/822/1464 669/955/1618 670/956/1619
+s 219
+f 563/919/1620 670/957/1621 648/921/1622
+f 648/921/1622 670/957/1621 671/958/1623
+s 220
+f 645/917/1624 648/921/1625 672/959/1626
+f 648/921/1625 671/958/1627 672/959/1626
+s 221
+f 562/952/1628 645/917/1629 669/960/1630
+f 645/917/1629 672/959/1631 669/960/1630
+s 222
+f 648/921/1632 674/962/1633 673/961/1634
+f 673/961/1634 674/962/1633 675/963/1635
+s 223
+f 642/910/1636 673/961/1637 676/964/1638
+f 673/961/1637 675/963/1639 676/964/1638
+s 224
+f 645/917/1640 642/910/1641 677/965/1642
+f 642/910/1641 676/964/1643 677/965/1642
+s 225
+f 645/917/1644 677/965/1645 648/921/1646
+f 648/921/1646 677/965/1645 674/962/1647
+s 185
+f 557/816/1458 558/817/1460 678/966/1648
+f 558/817/1460 679/967/1649 678/966/1648
+s 188
+f 557/968/1477 678/970/1650 577/969/1482
+f 577/969/1482 678/970/1650 680/971/1651
+s 226
+f 577/969/1652 680/971/1653 651/926/1654
+f 651/972/1654 680/974/1653 681/973/1655
+s 227
+f 558/925/1656 651/926/1657 679/975/1658
+f 651/926/1657 681/976/1659 679/975/1658
+s 188
+f 577/969/1482 682/977/1660 576/929/1481
+f 576/929/1481 682/977/1660 683/978/1661
+s 228
+f 576/929/1662 683/978/1663 654/931/1664
+f 654/931/1664 683/978/1663 684/979/1665
+s 229
+f 651/926/1666 654/931/1667 685/980/1668
+f 654/931/1667 684/979/1669 685/980/1668
+s 230
+f 577/969/1670 651/926/1671 682/977/1672
+f 651/926/1671 685/980/1673 682/977/1672
+s 231
+f 654/931/1674 686/981/1675 673/961/1676
+f 673/961/1676 686/981/1675 687/982/1677
+s 232
+f 648/921/1678 673/961/1679 688/983/1680
+f 673/961/1679 687/982/1681 688/983/1680
+s 233
+f 651/926/1682 648/921/1683 689/984/1684
+f 648/921/1683 688/983/1685 689/984/1684
+s 234
+f 651/926/1686 689/984/1687 654/931/1688
+f 654/931/1688 689/984/1687 686/981/1689
+s 188
+f 575/933/1480 690/986/1690 571/985/1479
+f 571/985/1479 690/986/1690 691/987/1691
+s 187
+f 571/830/1472 691/988/1692 573/832/1473
+f 573/832/1473 691/988/1692 692/989/1693
+s 235
+f 657/935/1694 573/991/1695 693/990/1696
+f 573/991/1695 692/992/1697 693/990/1696
+s 236
+f 575/933/1698 657/935/1699 690/986/1700
+f 657/935/1699 693/990/1701 690/986/1700
+s 187
+f 573/832/1473 694/993/1702 574/833/1475
+f 574/833/1475 694/993/1702 695/994/1703
+s 237
+f 659/937/1704 574/938/1705 696/995/1706
+f 574/938/1705 695/996/1707 696/995/1706
+s 238
+f 657/935/1708 659/937/1709 697/997/1710
+f 659/937/1709 696/995/1711 697/997/1710
+s 239
+f 657/935/1712 697/997/1713 573/991/1714
+f 573/991/1714 697/997/1713 694/998/1715
+s 240
+f 673/961/1716 659/937/1717 698/999/1718
+f 659/937/1717 699/1000/1719 698/999/1718
+s 241
+f 654/931/1720 673/961/1721 700/1001/1722
+f 673/961/1721 698/999/1723 700/1001/1722
+s 242
+f 654/931/1724 700/1001/1725 657/935/1726
+f 657/935/1726 700/1001/1725 701/1002/1727
+s 243
+f 657/935/1728 701/1002/1729 659/937/1730
+f 659/1003/1730 701/1005/1729 699/1004/1731
+s 187
+f 568/827/1469 569/828/1471 702/1006/1732
+f 569/828/1471 703/1007/1733 702/1006/1732
+s 189
+f 580/1008/1487 568/1010/1486 704/1009/1734
+f 568/1010/1486 702/1011/1735 704/1009/1734
+s 244
+f 580/1008/1736 704/1009/1737 663/943/1738
+f 663/943/1738 704/1009/1737 705/1012/1739
+s 245
+f 663/943/1740 705/1012/1741 569/945/1742
+f 569/945/1742 705/1012/1741 703/1013/1743
+s 189
+f 579/908/1488 580/1008/1487 706/1014/1744
+f 580/1008/1487 707/1015/1745 706/1014/1744
+s 246
+f 579/908/1746 706/1014/1747 642/910/1748
+f 642/910/1748 706/1014/1747 708/1016/1749
+s 247
+f 642/910/1750 708/1016/1751 663/943/1752
+f 663/943/1752 708/1016/1751 709/1017/1753
+s 248
+f 580/1008/1754 663/943/1755 707/1015/1756
+f 663/943/1755 709/1017/1757 707/1015/1756
+s 249
+f 642/910/1758 710/1018/1759 673/961/1760
+f 673/961/1760 710/1018/1759 711/1019/1761
+s 250
+f 673/961/1762 711/1019/1763 659/937/1764
+f 659/937/1764 711/1019/1763 712/1020/1765
+s 251
+f 663/1021/1766 659/1003/1767 713/1022/1768
+f 659/937/1767 712/1020/1769 713/1023/1768
+s 252
+f 642/910/1770 663/943/1771 710/1018/1772
+f 663/943/1771 713/1023/1773 710/1018/1772
+s 205
+f 641/909/1552 643/911/1553 565/824/1774
+f 643/911/1553 564/823/1775 565/824/1774
+s 253
+f 644/913/1776 641/909/1777 567/826/1778
+f 641/909/1777 565/824/1779 567/826/1778
+s 206
+f 644/913/1557 567/826/1780 646/918/1559
+f 646/918/1559 567/826/1780 566/825/1781
+s 254
+f 646/918/1782 566/825/1783 643/911/1784
+f 643/911/1784 566/825/1783 564/823/1785
+s 208
+f 647/920/1566 649/922/1567 582/849/1786
+f 649/922/1567 581/848/1787 582/849/1786
+s 185
+f 650/923/1568 647/924/1569 584/1024/1788
+f 647/924/1569 582/1025/1789 584/1024/1788
+s 255
+f 650/927/1790 584/851/1791 652/928/1792
+f 652/928/1792 584/851/1791 583/850/1793
+s 210
+f 652/928/1575 583/850/1794 649/922/1577
+f 649/922/1577 583/850/1794 581/848/1795
+s 211
+f 653/930/1580 655/932/1581 586/853/1796
+f 655/932/1581 585/852/1797 586/853/1796
+s 256
+f 653/930/1798 586/853/1799 656/934/1800
+f 656/934/1800 586/853/1799 588/855/1801
+s 212
+f 656/934/1585 588/855/1802 658/936/1587
+f 658/936/1587 588/855/1802 587/854/1803
+s 257
+f 655/932/1804 658/936/1805 585/852/1806
+f 658/936/1805 587/854/1807 585/852/1806
+s 214
+f 660/939/1593 589/856/1808 661/940/1595
+f 661/940/1595 589/856/1808 590/857/1809
+s 187
+f 662/941/1596 661/942/1597 592/1026/1810
+f 661/942/1597 590/1027/1811 592/1026/1810
+s 258
+f 664/944/1812 662/946/1813 591/858/1814
+f 662/946/1813 592/859/1815 591/858/1814
+s 216
+f 664/944/1603 591/858/1816 660/939/1605
+f 660/939/1605 591/858/1816 589/856/1817
+s 259
+f 665/948/1818 666/949/1819 594/861/1820
+f 666/949/1819 593/860/1821 594/861/1820
+s 185
+f 665/950/1608 594/1028/1822 667/951/1609
+f 667/951/1609 594/1028/1822 596/1029/1823
+s 260
+f 667/953/1824 596/863/1825 668/954/1826
+f 668/954/1826 596/863/1825 595/862/1827
+s 218
+f 666/949/1616 668/954/1617 593/860/1828
+f 668/954/1617 595/862/1829 593/860/1828
+s 185
+f 669/955/1618 597/1030/1830 670/956/1619
+f 670/956/1619 597/1030/1830 598/1031/1831
+s 219
+f 670/957/1621 598/865/1832 671/958/1623
+f 671/958/1623 598/865/1832 600/867/1833
+s 220
+f 672/959/1626 671/958/1627 599/866/1834
+f 671/958/1627 600/867/1835 599/866/1834
+s 261
+f 669/960/1836 672/959/1837 597/864/1838
+f 672/959/1837 599/866/1839 597/864/1838
+s 222
+f 674/962/1633 601/868/1840 675/963/1635
+f 675/963/1635 601/868/1840 602/869/1841
+s 223
+f 676/964/1638 675/963/1639 604/871/1842
+f 675/963/1639 602/869/1843 604/871/1842
+s 262
+f 677/965/1844 676/964/1845 603/870/1846
+f 676/964/1845 604/871/1847 603/870/1846
+s 225
+f 677/965/1645 603/870/1848 674/962/1647
+f 674/962/1647 603/870/1848 601/868/1849
+s 185
+f 678/966/1648 679/967/1649 606/1032/1850
+f 679/967/1649 605/1033/1851 606/1032/1850
+s 263
+f 678/970/1852 606/873/1853 680/971/1854
+f 680/971/1854 606/873/1853 608/875/1855
+s 226
+f 680/971/1653 608/875/1856 681/976/1655
+f 681/976/1655 608/875/1856 607/874/1857
+s 264
+f 679/975/1858 681/976/1859 605/872/1860
+f 681/976/1859 607/874/1861 605/872/1860
+s 265
+f 682/977/1862 609/876/1863 683/978/1864
+f 683/978/1864 609/876/1863 610/877/1865
+s 228
+f 683/978/1663 610/877/1866 684/979/1665
+f 684/979/1665 610/877/1866 612/879/1867
+s 266
+f 685/980/1868 684/979/1869 611/878/1870
+f 684/979/1869 612/879/1871 611/878/1870
+s 230
+f 682/977/1672 685/980/1673 609/876/1872
+f 685/980/1673 611/878/1873 609/876/1872
+s 231
+f 686/981/1675 613/880/1874 687/982/1677
+f 687/982/1677 613/880/1874 614/881/1875
+s 232
+f 688/983/1680 687/982/1681 616/883/1876
+f 687/982/1681 614/881/1877 616/883/1876
+s 233
+f 689/984/1684 688/983/1685 615/882/1878
+f 688/983/1685 616/883/1879 615/882/1878
+s 267
+f 689/984/1880 615/882/1881 686/981/1882
+f 686/981/1882 615/882/1881 613/880/1883
+s 268
+f 690/986/1884 617/884/1885 691/987/1886
+f 691/987/1886 617/884/1885 618/885/1887
+s 187
+f 691/988/1692 618/1034/1888 692/989/1693
+f 692/989/1693 618/1034/1888 620/1035/1889
+s 269
+f 693/990/1890 692/992/1891 619/886/1892
+f 692/992/1891 620/887/1893 619/886/1892
+s 236
+f 690/986/1700 693/990/1701 617/884/1894
+f 693/990/1701 619/886/1895 617/884/1894
+s 187
+f 694/993/1702 621/1036/1896 695/994/1703
+f 695/994/1703 621/1036/1896 622/1037/1897
+s 237
+f 696/995/1706 695/996/1707 624/891/1898
+f 695/996/1707 622/889/1899 624/891/1898
+s 238
+f 697/997/1710 696/995/1711 623/890/1900
+f 696/995/1711 624/891/1901 623/890/1900
+s 270
+f 697/997/1902 623/890/1903 694/998/1904
+f 694/998/1904 623/890/1903 621/888/1905
+s 240
+f 698/999/1718 699/1000/1719 626/893/1906
+f 699/1000/1719 625/892/1907 626/893/1906
+s 241
+f 700/1001/1722 698/999/1723 628/895/1908
+f 698/999/1723 626/893/1909 628/895/1908
+s 271
+f 700/1001/1910 628/895/1911 701/1002/1912
+f 701/1002/1912 628/895/1911 627/894/1913
+s 243
+f 701/1002/1729 627/894/1914 699/1000/1731
+f 699/1000/1731 627/894/1914 625/892/1915
+s 187
+f 702/1006/1732 703/1007/1733 630/1038/1916
+f 703/1007/1733 629/1039/1917 630/1038/1916
+s 272
+f 704/1009/1918 702/1011/1919 632/899/1920
+f 702/1011/1919 630/897/1921 632/899/1920
+s 244
+f 704/1009/1737 632/899/1922 705/1012/1739
+f 705/1012/1739 632/899/1922 631/898/1923
+s 273
+f 705/1012/1924 631/898/1925 703/1013/1926
+f 703/1013/1926 631/898/1925 629/896/1927
+s 274
+f 706/1014/1928 707/1015/1929 634/901/1930
+f 707/1015/1929 633/900/1931 634/901/1930
+s 246
+f 706/1014/1747 634/901/1932 708/1016/1749
+f 708/1016/1749 634/901/1932 636/903/1933
+s 275
+f 708/1016/1934 636/903/1935 709/1017/1936
+f 709/1017/1936 636/903/1935 635/902/1937
+s 248
+f 707/1015/1756 709/1017/1757 633/900/1938
+f 709/1017/1757 635/902/1939 633/900/1938
+s 249
+f 710/1018/1759 637/904/1940 711/1019/1761
+f 711/1019/1761 637/904/1940 638/905/1941
+s 250
+f 711/1019/1763 638/905/1942 712/1020/1765
+f 712/1020/1765 638/905/1942 640/907/1943
+s 251
+f 713/1023/1768 712/1020/1769 639/906/1944
+f 712/1020/1769 640/907/1945 639/906/1944
+s 276
+f 710/1018/1946 713/1023/1947 637/904/1948
+f 713/1023/1947 639/906/1949 637/904/1948

Added: trunk/skorpion/assets/starmap.dds
===================================================================
(Binary files differ)


Property changes on: trunk/skorpion/assets/starmap.dds
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/skorpion/dedicated/App.ico
===================================================================
(Binary files differ)


Property changes on: trunk/skorpion/dedicated/App.ico
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/skorpion/dedicated/AssemblyInfo.cs
===================================================================
--- trunk/skorpion/dedicated/AssemblyInfo.cs                            (rev 0)
+++ trunk/skorpion/dedicated/AssemblyInfo.cs    2006-11-07 21:30:44 UTC (rev 
116)
@@ -0,0 +1,58 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+//
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+//
+[assembly: AssemblyTitle("")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]                
+
+//
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Revision and Build 
Numbers 
+// by using the '*' as shown below:
+
+[assembly: AssemblyVersion("1.0.*")]
+
+//
+// In order to sign your assembly you must specify a key to use. Refer to the 
+// Microsoft .NET Framework documentation for more information on assembly 
signing.
+//
+// Use the attributes below to control which key is used for signing. 
+//
+// Notes: 
+//   (*) If no key is specified, the assembly is not signed.
+//   (*) KeyName refers to a key that has been installed in the Crypto Service
+//       Provider (CSP) on your machine. KeyFile refers to a file which 
contains
+//       a key.
+//   (*) If the KeyFile and the KeyName values are both specified, the 
+//       following processing occurs:
+//       (1) If the KeyName can be found in the CSP, that key is used.
+//       (2) If the KeyName does not exist and the KeyFile does exist, the key 
+//           in the KeyFile is installed into the CSP and used.
+//   (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) 
utility.
+//       When specifying the KeyFile, the location of the KeyFile should be
+//       relative to the project output directory which is
+//       %Project Directory%\obj\<configuration>. For example, if your KeyFile 
is
+//       located in the project directory, you would specify the 
AssemblyKeyFile 
+//       attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
+//   (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
+//       documentation for more information on this.
+//
+[assembly: AssemblyDelaySign(false)]
+[assembly: AssemblyKeyFile("")]
+[assembly: AssemblyKeyName("")]

Added: trunk/skorpion/dedicated/MainClass.cs
===================================================================
--- trunk/skorpion/dedicated/MainClass.cs                               (rev 0)
+++ trunk/skorpion/dedicated/MainClass.cs       2006-11-07 21:30:44 UTC (rev 
116)
@@ -0,0 +1,23 @@
+using System;
+using System.Threading;
+using skorpion;
+
+namespace dedicated {
+       class MainClass {
+               [STAThread]
+               static void Main(string[] args) {
+                       ushort port = ServerConfig.DEFAULTPORT;
+
+                       try {
+                               if (args.Length > 0) {
+                                       port = Convert.ToUInt16(args[0]);
+                               }
+
+                               ServerState.NetServer = new NetServer(port, new 
GameServer(new Universe()));
+                               ServerState.NetServer.Start();
+                       } catch (Exception e) {
+                               Console.Error.WriteLine(e);
+                       }
+               }
+       }
+}

Added: trunk/skorpion/dedicated/dedicated.csproj
===================================================================
--- trunk/skorpion/dedicated/dedicated.csproj                           (rev 0)
+++ trunk/skorpion/dedicated/dedicated.csproj   2006-11-07 21:30:44 UTC (rev 
116)
@@ -0,0 +1,109 @@
+<VisualStudioProject>
+    <CSHARP
+        ProjectType = "Local"
+        ProductVersion = "7.10.3077"
+        SchemaVersion = "2.0"
+        ProjectGuid = "{4902F9DD-5E54-4634-84D1-D2FB9440E3C2}"
+    >
+        <Build>
+            <Settings
+                ApplicationIcon = "App.ico"
+                AssemblyKeyContainerName = ""
+                AssemblyName = "dedicated"
+                AssemblyOriginatorKeyFile = ""
+                DefaultClientScript = "JScript"
+                DefaultHTMLPageLayout = "Grid"
+                DefaultTargetSchema = "IE50"
+                DelaySign = "false"
+                OutputType = "Exe"
+                PreBuildEvent = ""
+                PostBuildEvent = ""
+                RootNamespace = "dedicated"
+                RunPostBuildEvent = "OnBuildSuccess"
+                StartupObject = ""
+            >
+                <Config
+                    Name = "Debug"
+                    AllowUnsafeBlocks = "false"
+                    BaseAddress = "285212672"
+                    CheckForOverflowUnderflow = "false"
+                    ConfigurationOverrideFile = ""
+                    DefineConstants = "DEBUG;TRACE"
+                    DocumentationFile = ""
+                    DebugSymbols = "true"
+                    FileAlignment = "4096"
+                    IncrementalBuild = "false"
+                    NoStdLib = "false"
+                    NoWarn = ""
+                    Optimize = "false"
+                    OutputPath = "bin\Debug\"
+                    RegisterForComInterop = "false"
+                    RemoveIntegerChecks = "false"
+                    TreatWarningsAsErrors = "false"
+                    WarningLevel = "4"
+                />
+                <Config
+                    Name = "Release"
+                    AllowUnsafeBlocks = "false"
+                    BaseAddress = "285212672"
+                    CheckForOverflowUnderflow = "false"
+                    ConfigurationOverrideFile = ""
+                    DefineConstants = "TRACE"
+                    DocumentationFile = ""
+                    DebugSymbols = "false"
+                    FileAlignment = "4096"
+                    IncrementalBuild = "false"
+                    NoStdLib = "false"
+                    NoWarn = ""
+                    Optimize = "true"
+                    OutputPath = "bin\Release\"
+                    RegisterForComInterop = "false"
+                    RemoveIntegerChecks = "false"
+                    TreatWarningsAsErrors = "false"
+                    WarningLevel = "4"
+                />
+            </Settings>
+            <References>
+                <Reference
+                    Name = "System"
+                    AssemblyName = "System"
+                    HintPath = 
"..\..\..\..\..\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.dll"
+                />
+                <Reference
+                    Name = "System.Data"
+                    AssemblyName = "System.Data"
+                    HintPath = 
"..\..\..\..\..\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.Data.dll"
+                />
+                <Reference
+                    Name = "System.XML"
+                    AssemblyName = "System.XML"
+                    HintPath = 
"..\..\..\..\..\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.XML.dll"
+                />
+                <Reference
+                    Name = "server"
+                    Project = "{62CECD29-0D9B-4D68-9D4B-F9BBAA225758}"
+                    Package = "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}"
+                />
+            </References>
+        </Build>
+        <Files>
+            <Include>
+                <File
+                    RelPath = "App.ico"
+                    BuildAction = "Content"
+                />
+                <File
+                    RelPath = "AssemblyInfo.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+                <File
+                    RelPath = "MainClass.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+            </Include>
+        </Files>
+    </CSHARP>
+</VisualStudioProject>
+

Added: trunk/skorpion/server/AssemblyInfo.cs
===================================================================
--- trunk/skorpion/server/AssemblyInfo.cs                               (rev 0)
+++ trunk/skorpion/server/AssemblyInfo.cs       2006-11-07 21:30:44 UTC (rev 
116)
@@ -0,0 +1,58 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+//
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+//
+[assembly: AssemblyTitle("")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]                
+
+//
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Revision and Build 
Numbers 
+// by using the '*' as shown below:
+
+[assembly: AssemblyVersion("1.0.*")]
+
+//
+// In order to sign your assembly you must specify a key to use. Refer to the 
+// Microsoft .NET Framework documentation for more information on assembly 
signing.
+//
+// Use the attributes below to control which key is used for signing. 
+//
+// Notes: 
+//   (*) If no key is specified, the assembly is not signed.
+//   (*) KeyName refers to a key that has been installed in the Crypto Service
+//       Provider (CSP) on your machine. KeyFile refers to a file which 
contains
+//       a key.
+//   (*) If the KeyFile and the KeyName values are both specified, the 
+//       following processing occurs:
+//       (1) If the KeyName can be found in the CSP, that key is used.
+//       (2) If the KeyName does not exist and the KeyFile does exist, the key 
+//           in the KeyFile is installed into the CSP and used.
+//   (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) 
utility.
+//       When specifying the KeyFile, the location of the KeyFile should be
+//       relative to the project output directory which is
+//       %Project Directory%\obj\<configuration>. For example, if your KeyFile 
is
+//       located in the project directory, you would specify the 
AssemblyKeyFile 
+//       attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
+//   (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
+//       documentation for more information on this.
+//
+[assembly: AssemblyDelaySign(false)]
+[assembly: AssemblyKeyFile("")]
+[assembly: AssemblyKeyName("")]

Added: trunk/skorpion/server/game/Server.cs
===================================================================
--- trunk/skorpion/server/game/Server.cs                                (rev 0)
+++ trunk/skorpion/server/game/Server.cs        2006-11-07 21:30:44 UTC (rev 
116)
@@ -0,0 +1,319 @@
+using System;
+using System.Collections;
+
+namespace skorpion
+{
+       public class GameServer
+       {
+               public  Universe  Universe;
+
+               private Hashtable Conns;
+               private Hashtable Clients;
+               private Pinger    Pinger;
+               private DateTime  LastRefreshTime;
+
+               private ushort    IDnext;
+               
+               public GameServer(Universe u)
+               {
+                       Universe        = u;
+                       Conns           = new Hashtable();
+                       Clients         = new Hashtable();
+                       Pinger          = new Pinger();
+                       LastRefreshTime = DateTime.Now;
+
+                       for (int i=0; i<ServerConfig.GameBalls; i++)
+                               NewBall(AllocID());
+               }
+
+               Random random = new Random(System.DateTime.Now.Millisecond);
+               public void NewBall(ushort id)
+               {
+                       // 0 to .25
+                       //float ballXVel = (float)random.Next(100) / 400;
+                       //float ballYVel = (float)random.Next(100) / 400;
+                       //float ballZVel = (float)random.Next(100) / 400;
+                       
+                       // a slow moving ball for debugging purposes
+                       float ballXVel = (float).05f;
+                       float ballYVel = (float)0;
+                       float ballZVel = (float)0;
+
+                       Entity b = new Ball(id);
+                       b.Position = new Vector3(id*4%20,0,0);
+                       b.Velocity = new Vector3(ballXVel, ballYVel, ballZVel); 
+
+                       Universe.Entities.Add(id, b);
+               }
+
+               public void NewShip(ushort id)
+               {
+                       Ship s = new Ship(id);
+
+                       s.Active      = false;
+                       s.Position    = new Vector3(0,0,2);
+                       s.Orientation = new Vector3(0,0,-1);
+                       s.UpDirection = new Vector3(0,1,0);
+
+                       Universe.Entities.Add(id, s);
+               }
+
+               private ushort AllocID()
+               {
+                       do 
+                       {
+                               IDnext++;
+                               if (IDnext == 0) IDnext++;
+                       }
+                       while(Universe.Entities.Contains(IDnext));
+
+                       return IDnext;
+               }
+               
+               public void Join(NetServer.Connection c, NetServer.Client p)
+               {
+                       ushort id = AllocID();
+                       Conns[c] = id;
+                       Clients[id] = p;
+                       NewShip(id);
+               }
+
+               public void Part(NetServer.Connection c, NetServer.Client p)
+               {
+                       ushort id = (ushort)Conns[c];
+                       Conns.Remove(c);
+                       Universe.Entities.Remove(id);
+               }
+
+               public void Msg(NetServer.Connection conn, NetServer.Client 
player, GameMsg GameMsg)
+               {
+                       // announce move to logging and analysis class
+                       // clear received message with client validity class
+                       // affect change to the associated entity consistent 
with the received message
+                       // unpack the message
+                       // switch on message type
+                       // if movement message, assign new position to given 
entity
+                       // if orientation message, assign new orientation to 
given entity
+                       // if velocity message, assign new velocity to given 
entity
+
+                       ushort id = (ushort)Conns[conn];
+                       Ship   s  = (Ship)Universe.Entities[id];
+
+                       if (JoinReq.TYPE == GameMsg.Type)
+                       {
+                               JoinReq m = (JoinReq)GameMsg;
+
+                               JoinAck r = new JoinAck();
+                               r.ACK = m.Seq;
+                               r.YouAreID = (ushort)id;
+                               r.ShipPos.SetVector(s.Position);
+                               r.ShipOrt.SetVector(s.Orientation);
+                               r.ShipUp.SetVector(s.UpDirection);
+
+                               player.SendQueue.Add(r);
+                               player.Name = m.PlayerName;
+                               player.InGame = true;
+
+                               s.Active = true;
+                               s.Name = m.PlayerName;
+
+                               LOG.info(conn.addr.ToString() + ":" + 
conn.port.ToString() + " GAME: '" + player.Name + "' joins");
+
+                               DisplayReq displayReq = new DisplayReq();
+                               displayReq.Message = "*** " + player.Name + " 
joins";
+                               
ServerState.NetServer.broadcastViaACKQueue(displayReq);
+                       }
+                       else if (PlayerRefresh.TYPE == GameMsg.Type)
+                       {
+                               PlayerRefresh m = (PlayerRefresh)GameMsg;
+
+                               // this may have to get more advanced as in: 
accumulating velocities
+                               s.Orientation = m.ShipOrt.GetVector();
+                               s.UpDirection = m.ShipUp.GetVector();
+                               s.Velocity    = m.Velocity.GetVector();
+
+                               s.Orientation.Normalize();
+                               s.UpDirection.Normalize();
+                               s.Velocity.Normalize();
+
+                               if (m.Burst != 0)
+                                       s.Burst = m.Burst;
+
+                               player.Pinger.Receive(m.Ping, ref player.Ping);
+                       }
+                       else if (RconReq.TYPE == GameMsg.Type)
+                       {
+                               RconReq m = (RconReq)GameMsg;
+
+                               string cmd  = m.Cmd;
+                               string args = "";
+                               int space = cmd.IndexOf(" ");
+                               if (space != -1)
+                               {
+                                       args = cmd.Substring(space + 1);
+                                       cmd  = cmd.Remove(space, cmd.Length - 
space);
+                               }
+                               
+                               RconAck r = new RconAck();
+                               r.ACK = m.Seq;
+
+                               if (cmd == "auth")
+                               {
+                                       if (args == ServerConfig.RconPassword)
+                                       {
+                                               r.Response = "Authentication 
succeeded.";
+                                               player.Authd = true;
+                                       }
+                                       else
+                                               r.Response = "Authentication 
failed.";
+                               }
+                               else if (cmd == "shutdown")
+                               {
+                                       if (player.Authd)
+                                       {
+                                               r.Response = "Shutdown in 
progress";
+                                               ServerState.Live = false;
+                                       }
+                                       else
+                                               r.Response = "Not 
Authenticated";                                               
+                               }
+                               else if (cmd == "say")
+                               {
+                                       r.Response = "Message Sent: " + args;
+                                       DisplayReq displayReq = new 
DisplayReq();
+                                       displayReq.Message = "<" + player.Name 
+ "> " + args;
+
+                                       
ServerState.NetServer.broadcastViaACKQueue(displayReq);
+                               }
+                               else if (cmd == "name")
+                               {
+                                       r.Response = "*** '" + player.Name + "' 
changed name to '" + args + "'";
+                                       player.Name = args;
+
+                                       DisplayReq displayReq = new 
DisplayReq();
+                                       displayReq.Message = r.Response;
+
+                                       
ServerState.NetServer.broadcastViaACKQueue(displayReq);
+                               }
+                               else
+                                       r.Response = "Unknown command";
+
+                               player.SendQueue.Add(r);
+                       }
+                       else if (DisplayAck.TYPE == GameMsg.Type)
+                       {
+                               DisplayAck m = (DisplayAck)GameMsg;
+                                       
+                               player.ACKQueue.ACK(m.ACK);
+                       }
+                       else if(PlayerInfoReq.TYPE == GameMsg.Type)
+                       {
+                               PlayerInfo playerInfo = new PlayerInfo();
+                               // XXX - race condition, if number of clients 
increases between next 3 lines and the foreach
+                               playerInfo.Name = new string[Clients.Count];
+                               playerInfo.ID = new ushort[Clients.Count];
+                               playerInfo.Ping = new ushort[Clients.Count];
+                               playerInfo.Team = new ushort[Clients.Count];
+
+                               int playerIndex = 0;
+                               foreach(DictionaryEntry de in Clients)
+                               {
+                                       NetServer.Client client = 
(NetServer.Client)de.Value;
+                                       ushort clientID = (ushort)de.Key;
+                                       playerInfo.Name[playerIndex] = 
client.Name;
+                                       playerInfo.ID[playerIndex] = clientID;
+                                       playerInfo.Ping[playerIndex] = 
client.Ping;
+                                       playerInfo.Team[playerIndex] = 
client.Team;
+                                       playerIndex++;
+                               }
+
+                               player.SendQueue.Add(playerInfo);
+                       }
+                       else if(TeamReq.TYPE == GameMsg.Type)
+                       {
+                               TeamReq teamReq = (TeamReq)GameMsg;
+                               player.Team = teamReq.Team;
+
+                               TeamAck teamAck = new TeamAck();
+                               teamAck.ACK = teamReq.Seq;
+                               teamAck.Team = teamReq.Team;
+
+                               player.SendQueue.Add(teamAck);
+                       }
+                       else
+                       {
+                               Console.Out.WriteLine("game msg type was " + 
GameMsg.Type);
+                       }
+               }
+
+               public GameMsg Refresh()
+               {       
+                       DateTime freshtime = 
DateTime.Now.Subtract(ServerConfig.ServerRefresh);
+                       if (LastRefreshTime >= freshtime)
+                               return null;
+
+                       Universe.Run();
+
+                       ArrayList ship = new ArrayList();
+                       ArrayList ball = new ArrayList();
+
+                       foreach(Entity e in Universe.Entities.Values)
+                       {
+                               if (e.Type == Ship.TYPE)
+                                       ship.Add(e);
+
+                               if (e.Type == Ball.TYPE)
+                                       ball.Add(e);
+                       }
+
+                       if (ship.Count == 0)
+                               return null;
+
+                       WorldRefresh r = new WorldRefresh();
+                       r.ShipID  = new ushort   [ship.Count];
+                       r.ShipPos = new NetVector[ship.Count];
+                       r.ShipOrt = new NetVector[ship.Count];
+                       r.ShipUp  = new NetVector[ship.Count];
+                       r.ShipVel = new NetVector[ship.Count];
+                       for (int i=0; i<ship.Count; i++)
+                       {
+                               r.ShipID [i] = (ushort)((Ship)ship[i]).ID;
+                               
r.ShipPos[i].SetVector(((Ship)ship[i]).Position);
+                               
r.ShipOrt[i].SetVector(((Ship)ship[i]).Orientation);
+                               r.ShipUp 
[i].SetVector(((Ship)ship[i]).UpDirection);
+                               
r.ShipVel[i].SetVector(((Ship)ship[i]).Velocity);
+                       }
+
+                       r.BallID  = new ushort   [ball.Count];
+                       r.BallPos = new NetVector[ball.Count];
+                       r.BallVel = new NetVector[ball.Count];
+                       for (int i=0; i<ball.Count; i++)
+                       {
+                               r.BallID [i] = (ushort)((Ball)ball[i]).ID;
+                               
r.BallPos[i].SetVector(((Ball)ball[i]).Position);
+                               
r.BallVel[i].SetVector(((Ball)ball[i]).Velocity);
+                       }
+
+                       r.Collided1           = new 
ushort[Universe.Events.Count];
+                       r.Collided2           = new 
ushort[Universe.Events.Count];
+                       r.CollidedTime        = new 
ushort[Universe.Events.Count];
+                       r.CollisionPoint1     = new 
NetVector[Universe.Events.Count];
+                       r.CollisionPoint2     = new 
NetVector[Universe.Events.Count];
+                       for (int i=0; i<Universe.Events.Count; i++)
+                       {
+                               Universe.CollisionEvent CE   = 
(Universe.CollisionEvent)Universe.Events[i];
+                               r.Collided1[i]               = CE.r1.e.ID;
+                               r.Collided2[i]               = CE.r2.e.ID;
+                               r.CollidedTime[i]            = 
(ushort)CE.gameTime;
+                               
r.CollisionPoint1[i].SetVector(CE.collisionPoint1);
+                               
r.CollisionPoint2[i].SetVector(CE.collisionPoint2);
+                       }
+                       Universe.Events.Clear();
+
+                       r.Ping = Pinger.Send();
+
+                       LastRefreshTime = DateTime.Now;
+                       return r;
+               }
+       }
+}

Added: trunk/skorpion/server/network/ACKQueue.cs
===================================================================
--- trunk/skorpion/server/network/ACKQueue.cs                           (rev 0)
+++ trunk/skorpion/server/network/ACKQueue.cs   2006-11-07 21:30:44 UTC (rev 
116)
@@ -0,0 +1,153 @@
+using System;
+using System.Collections;
+using System.Threading;
+using System.Net;
+using System.Net.Sockets;
+
+namespace skorpion
+{
+       public class Pinger
+       {
+               byte     NextID       = 0;
+               DateTime LastSent     = DateTime.Now;
+               DateTime LastReceived = DateTime.Now;
+               ushort   LastPing     = 0;
+
+               public ushort Send()
+               {
+                       NextID = (byte)((NextID + 1) % 16);
+
+                       ushort   ping         = 0;
+                       TimeSpan sentInterval = DateTime.Now.Subtract(LastSent);
+
+                       if (sentInterval.TotalMilliseconds >= 1<<12)
+                               ping = 0xffff;
+                       else    
+                               ping = (ushort)sentInterval.TotalMilliseconds;
+
+                       ping <<= 4;
+                       ping |= NextID;
+
+                       return ping;
+               }
+
+               public void Receive(ushort ThisPing, ref ushort Ping)
+               {
+                       byte lastRefreshID = (byte)(LastPing & 0x000f);
+                       byte thisRefreshID = (byte)(ThisPing & 0x000f);
+
+                       if (thisRefreshID == ((lastRefreshID + 1) % 16))
+                       {
+                               TimeSpan receivedInterval = 
DateTime.Now.Subtract(LastReceived);
+                       
+                               ushort sentInterval = ThisPing;
+                               sentInterval >>= 4;
+
+                               if (receivedInterval.TotalMilliseconds >= 
sentInterval)
+                               {
+                                       Ping = 
(ushort)(receivedInterval.TotalMilliseconds - sentInterval);
+                               }
+                       }
+
+                       LastPing     = ThisPing;
+                       LastReceived = DateTime.Now;
+               }
+       }
+
+       public class ACKQueue
+       {
+               public ArrayList SendQueue = new ArrayList();
+               public Hashtable WaitQueue = new Hashtable();
+
+               public ushort   Seq = 0;
+               public TimeSpan Retry;
+
+               public ACKQueue(TimeSpan retry) { Retry = retry; }
+
+               public void Add(GameMsg m)
+               {
+                       SendQueue.Add(m);
+               }
+
+               public void Clear()
+               {
+                       SendQueue.Clear();
+                       WaitQueue.Clear();
+               }
+
+               public void ACK(ushort id)
+               {
+                       if (WaitQueue.Contains(id))
+                               WaitQueue.Remove(id);
+               }
+
+               public void Communicate(Communicator c)
+               {
+                       if (SendQueue.Count > 0)
+                       {
+                               foreach (GameMsg m in SendQueue)
+                               {
+                                       do
+                                       {
+                                               Seq++;
+                                               if (Seq == 0) Seq++;
+                                       }
+                                       while(WaitQueue.Contains(Seq));
+
+                                       m.Seq = Seq;
+                                       byte[] b = Parser.Write(m);
+                                       c.Send(b);
+                               
+                                       WaitQueue[m.Seq] = new TimeOut(b);
+                               }
+                               SendQueue.Clear();
+                       }
+                       if (WaitQueue.Count > 0)
+                       {
+                               DateTime timeout = DateTime.Now.Subtract(Retry);
+
+                               foreach (TimeOut t in WaitQueue.Values)
+                               {
+                                       if (t.lastSent < timeout)
+                                       {
+                                               c.Send(t.msg);
+                                               t.lastSent = DateTime.Now;
+                                       }
+                               }
+                       }
+               }
+
+               public class TimeOut
+               {
+                       public byte[]   msg;
+                       public DateTime lastSent;
+
+                       public TimeOut(byte[] m) { msg=m; 
lastSent=DateTime.Now; }
+               }
+
+               public class Communicator
+               {
+                       public Socket   sock;
+                       public EndPoint endPoint;
+
+                       public Communicator(Socket s) { sock = s; endPoint = 
null; }
+                       public Communicator(Socket s, EndPoint ep) { sock = s; 
endPoint = ep; }
+
+                       public int Send(byte[] b)
+                       {
+                               return endPoint != null ? sock.SendTo(b, 
endPoint) : sock.Send(b);
+                       }
+               }
+
+               public void Communicate(Socket s, EndPoint ep)
+               {
+                       Communicate(new Communicator(s, ep));
+               }
+
+               public void Communicate(Socket s)
+               {
+                       Communicate(new Communicator(s));
+               }
+
+       }
+}      
\ No newline at end of file

Added: trunk/skorpion/server/network/Client.cs
===================================================================
--- trunk/skorpion/server/network/Client.cs                             (rev 0)
+++ trunk/skorpion/server/network/Client.cs     2006-11-07 21:30:44 UTC (rev 
116)
@@ -0,0 +1,115 @@
+using System;
+using System.Collections;
+using System.Net;
+using System.Net.Sockets;
+
+namespace skorpion
+{
+       public class NetClient
+       {
+               public bool         Connected;
+
+               public IPEndPoint   remote;
+               public Socket       sock;
+               public DateTime     lastReceived;
+
+               public ACKQueue     ACKQueue;
+
+               public TimeSpan     Timeout;
+               public TimeSpan     ACKRetry;
+
+               public NetClient(TimeSpan timeout, TimeSpan ackRetry)
+               {
+                       Timeout = timeout;
+                       ACKRetry = ackRetry;
+               }
+
+               public bool connect(string addr, ushort port, string 
playerName, ushort preferredTeam)
+               {
+                       IPHostEntry ip = null;
+                       try { ip = Dns.Resolve(addr); }
+                       catch { return false; }
+
+                       remote = new IPEndPoint(ip.AddressList[0], port);
+
+                       sock = new Socket(AddressFamily.InterNetwork, 
SocketType.Dgram, ProtocolType.Udp);
+                       sock.Connect(remote);
+                       sock.Blocking = false;
+
+                       Connected = true;
+
+                       JoinReq join = new JoinReq();
+                       join.PlayerName = playerName;
+
+                       ACKQueue = new ACKQueue(ACKRetry);
+                       ACKQueue.Add(join);
+
+                       TeamReq team = new TeamReq();
+                       team.Team = preferredTeam;
+                       ACKQueue.Add(team);
+
+                       lastReceived = DateTime.Now;
+                       return true;
+               }
+
+               public ArrayList communicate()
+               {       
+                       ArrayList ret = new ArrayList();
+
+                       if (lastReceived < DateTime.Now.Subtract(Timeout))
+                               Connected = false;
+
+                       if (!Connected)
+                               return ret;
+
+                       try
+                       {
+                               ACKQueue.Communicate(sock);
+                       }
+                       catch
+                       {
+                               Connected = false;
+                       }
+
+                       if (!Connected || sock.Available <= 0)
+                               return ret;
+
+                       byte[] buf = new byte[16384];
+                       int read = 0;
+                       try
+                       {
+                               read = sock.Receive(buf);
+                               lastReceived = DateTime.Now;
+                       }
+                       catch
+                       {
+                               Connected = false;
+                       }
+
+                       try
+                       {
+                               ret = Parser.Read(buf, read);
+                       }
+                       catch {}
+
+                       return ret;
+               }
+
+               public void send(GameMsg m)
+               {
+                       if (!Connected)
+                               return;
+
+                       byte[] buf = Parser.Write(m);
+
+                       try
+                       {
+                               sock.Send(buf);
+                       }
+                       catch
+                       {
+                               Connected = false;
+                       }
+               }
+       }
+}
\ No newline at end of file

Added: trunk/skorpion/server/network/Parser.cs
===================================================================
--- trunk/skorpion/server/network/Parser.cs                             (rev 0)
+++ trunk/skorpion/server/network/Parser.cs     2006-11-07 21:30:44 UTC (rev 
116)
@@ -0,0 +1,444 @@
+using System;
+using System.IO;
+using System.Text;
+using System.Reflection;
+using System.Collections;
+
+namespace skorpion
+{
+       public class Parser 
+       {
+               private static Hashtable _simples;
+               private static Hashtable _msgtype;
+
+               static Parser() 
+               {
+                       _simples = new Hashtable();
+                       _simples[typeof(byte)] = 1;
+                       _simples[typeof(sbyte)] = 1;
+                       _simples[typeof(short)] = 2;
+                       _simples[typeof(ushort)] = 2;
+                       _simples[typeof(int)] = 4;
+                       _simples[typeof(uint)] = 4;
+                       _simples[typeof(long)] = 8;
+                       _simples[typeof(ulong)] = 8;
+                       _simples[typeof(DateTime)] = 8;
+
+                       _msgtype = new Hashtable();
+                       Type[] types = typeof(GameMsg).Assembly.GetTypes();
+                       foreach (Type t in types)
+                       {
+                               if (t.BaseType == typeof(GameMsg))
+                               {
+                                       ushort TYPE = 
(ushort)t.InvokeMember("TYPE", BindingFlags.Default | BindingFlags.GetField, 
null, null, null);
+                                       _msgtype[TYPE] = t;
+                               }
+                       }
+               }
+
+               private static bool IsSimple(Type type) 
+               {
+                       return _simples.Contains(type) || 
typeof(Enum).IsAssignableFrom(type);
+               }
+
+               public static ArrayList Read(byte[] b, int length)
+               {
+                       MemoryStream s = new MemoryStream(b,0,length);
+                       BinaryReader r = new BinaryReader(s);
+                       ArrayList msgs = new ArrayList();
+                       while (r.PeekChar() != -1)
+                       {
+                               ushort  type = (ushort)ReadSimple(r, true, 
typeof(ushort));
+                               ushort  seq  = (ushort)ReadSimple(r, true, 
typeof(ushort));
+                               Type    t    = (Type)_msgtype[type];
+                               GameMsg msg  = (GameMsg)ReadStruct(r, true, t);
+                               msg.Type     = type;
+                               msg.Seq      = seq;
+                               msgs.Add(msg);
+                       }
+                       return msgs;
+               }
+
+               public static byte[] Write(GameMsg m)
+               {
+                       Object       o    = m;
+                       Type         t    = o.GetType();
+                       MemoryStream s    = new MemoryStream();
+                       BinaryWriter w    = new BinaryWriter(s);
+                       ushort       type = (ushort)t.InvokeMember("TYPE", 
BindingFlags.Default | BindingFlags.GetField, null, null, null);
+                       WriteSimple(w, true, type);
+                       WriteSimple(w, true, m.Seq);
+                       WriteStruct(w, true, t, o);
+                       return s.ToArray();
+               }
+
+               private static object ReadStruct(BinaryReader reader, bool 
bigendian, Type type) 
+               {
+                       FieldInfo[] fields = 
type.GetFields(BindingFlags.Instance|BindingFlags.Public);
+                       Object obj = Activator.CreateInstance(type);
+
+                       foreach (FieldInfo field in fields) 
+                       {
+                               if (field.DeclaringType != type)
+                                       continue;
+
+                               Type fieldtype = field.FieldType;
+                               object fieldobj;
+
+                               if (IsSimple(fieldtype))
+                                       fieldobj = ReadSimple(reader, 
bigendian, fieldtype);
+                               else if (fieldtype.IsArray)
+                                       fieldobj = ReadArray(reader, bigendian, 
fieldtype);
+                               else if (fieldtype.Equals(typeof(string)))
+                                       fieldobj = ReadString(reader, 
bigendian);
+                               else
+                                       fieldobj = ReadStruct(reader, 
bigendian, fieldtype);
+
+                               field.SetValue(obj, fieldobj);
+                       }
+
+                       return obj;
+               }
+
+               private static void WriteStruct(BinaryWriter writer, bool 
bigendian, Type type, object obj) 
+               {
+                       FieldInfo[] fields = 
type.GetFields(BindingFlags.Instance|BindingFlags.Public);
+
+                       foreach (FieldInfo field in fields) 
+                       {
+                               if (field.DeclaringType != type)
+                                       continue;
+
+                               Type fieldtype = field.FieldType;
+                               object fieldobj = field.GetValue(obj);
+                               if (fieldobj == null) continue;
+
+                               if (IsSimple(fieldtype))
+                                       WriteSimple(writer, bigendian, 
fieldobj);
+                               else if (fieldtype.Equals(typeof(string)))
+                                       WriteString(writer, bigendian, 
(string)fieldobj, field);
+                               else if (fieldtype.IsArray)
+                                       WriteArray(writer, bigendian, 
fieldtype, fieldobj);
+                               else
+                                       WriteStruct(writer, bigendian, 
fieldtype, fieldobj);
+                       }
+               }
+
+               private static object ReadArray(BinaryReader reader, bool 
bigendian, Type type) 
+               {
+                       ushort len = (ushort)ReadSimple(reader, bigendian, 
typeof(ushort));
+
+                       Type eltype = type.GetElementType();
+                       Object obj = Array.CreateInstance(eltype, len);
+
+                       for (ushort i = 0; i < len; i++) 
+                       {
+                               object el;
+                               if (IsSimple(eltype))
+                                       el = ReadSimple(reader, bigendian, 
eltype);
+                               else if (eltype.IsArray)
+                                       el = ReadArray(reader, bigendian, 
eltype);
+                               else if (eltype.Equals(typeof(string)))
+                                       el = ReadString(reader, bigendian);
+                               else
+                                       el = ReadStruct(reader, bigendian, 
eltype);
+                               ((Array)obj).SetValue(el, i);
+                       }
+                       return obj;
+               }
+
+               private static void WriteArray(BinaryWriter writer, bool 
bigendian, Type type, object obj) 
+               {
+                       ushort len = (ushort)((Array)obj).Length;
+                       WriteSimple(writer, bigendian, len);
+
+                       Type eltype = type.GetElementType();
+
+                       foreach (object elobj in (Array)obj) 
+                       {
+                               if (IsSimple(eltype))
+                                       WriteSimple(writer, bigendian, elobj);
+                               else if (eltype.IsArray)
+                                       WriteArray(writer, bigendian, eltype, 
elobj);
+                               else if (eltype.Equals(typeof(string)))
+                                       WriteString(writer, bigendian, 
(string)elobj, null);
+                               else
+                                       WriteStruct(writer, bigendian, eltype, 
elobj);
+                       }
+               }
+
+               private static object ReadString(BinaryReader reader, bool 
bigendian) 
+               {
+                       ushort len = (ushort)ReadSimple(reader, bigendian, 
typeof(ushort));
+
+                       StringBuilder ret = new StringBuilder();
+//                     StreamReader sreader = new 
StreamReader(reader.BaseStream, Encoding.ASCII, false);
+                       for (ushort i = 0; i < len; i++)
+                       {
+                               int c = reader.Read();
+                               if (c == -1)
+                                       throw new EndOfStreamException();
+                               else
+                                       ret.Append((char)c);
+                       }
+                       return ret.ToString();
+               }
+
+               private static void WriteString(BinaryWriter writer, bool 
bigendian, string obj, ICustomAttributeProvider cust) 
+               {
+                       ushort len = (ushort)obj.Length;
+                       WriteSimple(writer, bigendian, len);
+                       writer.Write(Encoding.ASCII.GetBytes(obj));
+               }
+
+               private static object ReadSimple(BinaryReader reader, bool 
bigendian, Type type) 
+               {
+                       object obj;
+                       if (type.Equals(typeof(byte)))
+                               obj = reader.ReadByte();
+                       else if (type.Equals(typeof(sbyte)))
+                               obj = reader.ReadSByte();
+                       else if (type.Equals(typeof(short)))
+                               obj = Fix(reader.ReadInt16(), bigendian);
+                       else if (type.Equals(typeof(ushort)))
+                               obj = Fix(reader.ReadUInt16(), bigendian);
+                       else if (type.Equals(typeof(int)))
+                               obj = Fix(reader.ReadInt32(), bigendian);
+                       else if (type.Equals(typeof(uint)))
+                               obj = Fix(reader.ReadUInt32(), bigendian);
+                       else if (type.Equals(typeof(long)))
+                               obj = Fix(reader.ReadInt64(), bigendian);
+                       else if (type.Equals(typeof(ulong)))
+                               obj = Fix(reader.ReadUInt64(), bigendian);
+                       else if (type.Equals(typeof(DateTime)))
+                               obj = new DateTime(Fix(reader.ReadInt64(), 
bigendian));
+                       else if (typeof(Enum).IsAssignableFrom(type))
+                               obj = Enum.ToObject(type, 
Fix(reader.ReadInt32(), bigendian));
+                       else
+                               throw new Exception("developer error");
+                       return obj;
+               }
+               private static void WriteSimple(BinaryWriter writer, bool 
bigendian, object obj) 
+               {
+                       if (obj is byte)
+                               writer.Write((byte)obj);
+                       else if (obj is sbyte)
+                               writer.Write((sbyte)obj);
+                       else if (obj is short)
+                               writer.Write(Fix((short)obj, bigendian));
+                       else if (obj is ushort)
+                               writer.Write(Fix((ushort)obj, bigendian));
+                       else if (obj is int)
+                               writer.Write(Fix((int)obj, bigendian));
+                       else if (obj is uint)
+                               writer.Write(Fix((uint)obj, bigendian));
+                       else if (obj is long)
+                               writer.Write(Fix((long)obj, bigendian));
+                       else if (obj is ulong)
+                               writer.Write(Fix((ulong)obj, bigendian));
+                       else if (obj is DateTime)
+                               writer.Write(Fix(((DateTime)obj).Ticks, 
bigendian));
+                       else if (obj is Enum)
+                               writer.Write(Fix((int)obj, bigendian));
+                       else
+                               throw new Exception("developer error");
+               }
+
+               private static ushort Fix(ushort val, bool big) 
+               {
+                       if (big)
+                               return ByteOrder.ToBigEndian(val);
+                       else
+                               return ByteOrder.ToLittleEndian(val);
+               }
+               private static short Fix(short val, bool big) 
+               {
+                       if (big)
+                               return ByteOrder.ToBigEndian(val);
+                       else
+                               return ByteOrder.ToLittleEndian(val);
+               }
+               private static uint Fix(uint val, bool big) 
+               {
+                       if (big)
+                               return ByteOrder.ToBigEndian(val);
+                       else
+                               return ByteOrder.ToLittleEndian(val);
+               }
+               private static int Fix(int val, bool big) 
+               {
+                       if (big)
+                               return ByteOrder.ToBigEndian(val);
+                       else
+                               return ByteOrder.ToLittleEndian(val);
+               }
+               private static ulong Fix(ulong val, bool big) 
+               {
+                       if (big)
+                               return ByteOrder.ToBigEndian(val);
+                       else
+                               return ByteOrder.ToLittleEndian(val);
+               }
+               private static long Fix(long val, bool big) 
+               {
+                       if (big)
+                               return ByteOrder.ToBigEndian(val);
+                       else
+                               return ByteOrder.ToLittleEndian(val);
+               }
+       }
+
+       public class ByteOrder 
+       {
+               private static bool _big = !BitConverter.IsLittleEndian;
+               
+               public static short HostToNet(short s) 
+               {
+                       return ToBigEndian(s);
+               }
+               public static ushort HostToNet(ushort s) 
+               {
+                       return ToBigEndian(s);
+               }
+               public static int HostToNet(int s) 
+               {
+                       return ToBigEndian(s);
+               }
+               public static uint HostToNet(uint s) 
+               {
+                       return ToBigEndian(s);
+               }
+               public static long HostToNet(long s) 
+               {
+                       return ToBigEndian(s);
+               }
+               public static ulong HostToNet(ulong s) 
+               {
+                       return ToBigEndian(s);
+               }
+
+               public static short NetToHost(short s) 
+               {
+                       return HostToNet(s);
+               }
+               public static ushort NetToHost(ushort s) 
+               {
+                       return HostToNet(s);
+               }
+               public static int NetToHost(int s) 
+               {
+                       return HostToNet(s);
+               }
+               public static uint NetToHost(uint s) 
+               {
+                       return HostToNet(s);
+               }
+               public static long NetToHost(long s) 
+               {
+                       return HostToNet(s);
+               }
+               public static ulong NetToHost(ulong s) 
+               {
+                       return HostToNet(s);
+               }
+
+               public static short ToLittleEndian(short s) 
+               {
+                       if (!_big)
+                               return s;
+                       return Swap(s);
+               }
+               public static ushort ToLittleEndian(ushort s) 
+               {
+                       if (!_big)
+                               return s;
+                       return Swap(s);
+               }
+               public static int ToLittleEndian(int s) 
+               {
+                       if (!_big)
+                               return s;
+                       return Swap(s);
+               }
+               public static uint ToLittleEndian(uint s) 
+               {
+                       if (!_big)
+                               return s;
+                       return Swap(s);
+               }
+               public static long ToLittleEndian(long s) 
+               {
+                       if (!_big)
+                               return s;
+                       return Swap(s);
+               }
+               public static ulong ToLittleEndian(ulong s) 
+               {
+                       if (!_big)
+                               return s;
+                       return Swap(s);
+               }
+
+               public static short ToBigEndian(short s) 
+               {
+                       if (_big)
+                               return s;
+                       return Swap(s);
+               }
+               public static ushort ToBigEndian(ushort s) 
+               {
+                       if (_big)
+                               return s;
+                       return Swap(s);
+               }
+               public static int ToBigEndian(int s) 
+               {
+                       if (_big)
+                               return s;
+                       return Swap(s);
+               }
+               public static uint ToBigEndian(uint s) 
+               {
+                       if (_big)
+                               return s;
+                       return Swap(s);
+               }
+               public static long ToBigEndian(long s) 
+               {
+                       if (_big)
+                               return s;
+                       return Swap(s);
+               }
+               public static ulong ToBigEndian(ulong s) 
+               {
+                       if (_big)
+                               return s;
+                       return Swap(s);
+               }
+
+               private static ushort Swap(ushort s) 
+               {
+                       return (ushort)((s << 8) | (s >> 8));
+               }
+               private static short Swap(short s) 
+               {
+                       return (short)Swap((ushort)s);
+               }
+               private static uint Swap(uint s) 
+               {
+                       return (s << 24) | ((s << 8) & 0xFF0000) | ((s >> 8) & 
0xFF00) | (s >> 24);
+               }
+               private static int Swap(int s) 
+               {
+                       return (int)Swap((uint)s);
+               }
+               private static ulong Swap(ulong s) 
+               {
+                       return (s << 56) | ((s << 40) & 0xFF000000000000) | ((s 
<< 24) & 0xFF0000000000) | ((s << 8) & 0xFF00000000) | ((s >> 8) & 0xFF000000) 
| ((s >> 24) & 0xFF0000) | ((s >> 40) & 0xFF00) | (s >> 56);
+               }
+               private static long Swap(long s) 
+               {
+                       return (long)Swap((ulong)s);
+               }
+       }
+}

Added: trunk/skorpion/server/network/Protocol.cs
===================================================================
--- trunk/skorpion/server/network/Protocol.cs                           (rev 0)
+++ trunk/skorpion/server/network/Protocol.cs   2006-11-07 21:30:44 UTC (rev 
116)
@@ -0,0 +1,177 @@
+using System;
+
+namespace skorpion
+{
+       public class GameMsg
+       {
+               public ushort Type;
+               public ushort Seq;
+       }
+
+       // this is good enough for now should keep more resolution for right of 
decimal tho
+       public struct NetVector
+       {
+               public  short x,  y,  z;        // left  of decimal position 
values
+               public ushort xF, yF, zF;       // right of decimal position 
values
+
+               public void SetVector(Vector3 p)
+               {
+                       // get rid of decimals
+                       x = (short)p.X;
+                       y = (short)p.Y;
+                       z = (short)p.Z;
+
+                       // get multiplied values prserving sign
+                       p.X = ((float)(p.X - x) * 65535.0f);
+                       p.Y = ((float)(p.Y - y) * 65535.0f);
+                       p.Z = ((float)(p.Z - z) * 65535.0f);
+
+                       // positive values to use only the ushort's sign bit
+                       xF = (ushort)(p.X > 0 ? p.X : -p.X);
+                       yF = (ushort)(p.Y > 0 ? p.Y : -p.Y);
+                       zF = (ushort)(p.Z > 0 ? p.Z : -p.Z);
+
+                       // let MIN_SHORT double for "negative 0"
+                       if (p.X < 0 && x == 0) x = short.MinValue;
+                       if (p.Y < 0 && y == 0) y = short.MinValue;
+                       if (p.Z < 0 && z == 0) z = short.MinValue;
+               }
+
+               public Vector3 GetVector()
+               {
+                       Vector3 ret = new Vector3();
+
+                       // scale value back down
+                       ret.X = ((float)xF / 65535.0f);
+                       ret.Y = ((float)yF / 65535.0f);
+                       ret.Z = ((float)zF / 65535.0f);
+
+                       // bring right of decimal sign back
+                       ret.X = (x < 0 || x == short.MinValue ? -ret.X : ret.X);
+                       ret.Y = (y < 0 || y == short.MinValue ? -ret.Y : ret.Y);
+                       ret.Z = (z < 0 || z == short.MinValue ? -ret.Z : ret.Z);
+
+                       // add left of decimal value
+                       if (x != short.MinValue) ret.X += x;
+                       if (y != short.MinValue) ret.Y += y;
+                       if (z != short.MinValue) ret.Z += z;
+
+                       return ret;
+               }
+       }
+
+       public class JoinReq : GameMsg
+       {
+               public string PlayerName;
+               public static ushort TYPE = 0x0010;
+       }
+
+       public class JoinAck : GameMsg
+       {
+               public ushort    ACK;
+               public ushort    YouAreID;
+               public NetVector ShipPos;
+               public NetVector ShipOrt;
+               public NetVector ShipUp;
+
+               public static ushort TYPE = 0x0020;
+       }
+
+       public class RconReq : GameMsg
+       {
+               public string Cmd;
+               public static ushort TYPE = 0x0011;
+       }
+
+       public class RconAck : GameMsg
+       {
+               public ushort ACK;
+               public string Response;
+               public static ushort TYPE = 0x0021;
+       }
+
+       public class DisplayReq : GameMsg
+       {
+               public string Message;
+               public static ushort TYPE = 0x0012;
+       }
+
+       public class DisplayAck : GameMsg
+       {
+               public ushort ACK;
+               public string Response;
+               public static ushort TYPE = 0x0022;
+       }
+
+       // looks like some NAT firewalls will change UDP port mid-game
+       // so may need the player to send its id in updates
+       public class PlayerRefresh : GameMsg
+       {
+               public ushort    Ping;
+
+               public NetVector Velocity;
+               public NetVector ShipOrt;
+               public NetVector ShipUp;
+
+               public ushort    Burst;
+
+               public static ushort TYPE = 0x0040;
+       }
+
+       // this is getting to be too big. over 20 ships gonna get close to 1500
+       // bytes.  this could be crammed down a lot smaller
+       public class WorldRefresh : GameMsg
+       {
+               public ushort      Ping;
+
+               public ushort[]    ShipID;
+               public NetVector[] ShipPos;
+               public NetVector[] ShipOrt;
+               public NetVector[] ShipUp;
+               public NetVector[] ShipVel;
+
+               public ushort[]    BallID;
+               public NetVector[] BallPos;
+               public NetVector[] BallVel;
+
+               // if we used clientside prediction this could be velocity based
+               // but since were interpolating position to position we need cp 
1&2
+               public ushort[]    CollidedTime;
+               public ushort[]    Collided1;
+               public ushort[]    Collided2;
+               public NetVector[] CollisionPoint1;
+               public NetVector[] CollisionPoint2;
+
+               public static ushort TYPE = 0x0080;
+       }
+
+       public class PlayerInfoReq : GameMsg
+       {
+               public static ushort TYPE = 0x0090;
+       }
+
+       public class PlayerInfo : GameMsg
+       {
+               public string[] Name;
+               public ushort[] ID;
+               public ushort[] Ping;
+               public ushort[] Team;
+
+               public static ushort TYPE = 0x0091;
+       }
+
+       public class TeamReq : GameMsg
+       {
+               public ushort Team;
+
+               public static ushort TYPE = 0x00a0;
+       }
+
+       public class TeamAck : GameMsg
+       {
+               public ushort ACK;
+               public ushort Team;
+
+               public static ushort TYPE = 0x00a1;
+       }
+}

Added: trunk/skorpion/server/network/Server.cs
===================================================================
--- trunk/skorpion/server/network/Server.cs                             (rev 0)
+++ trunk/skorpion/server/network/Server.cs     2006-11-07 21:30:44 UTC (rev 
116)
@@ -0,0 +1,187 @@
+using System;
+using System.Collections;
+using System.Net;
+using System.Net.Sockets;
+
+namespace skorpion
+{
+       public class ServerConfig 
+       {
+               public const ushort DEFAULTPORT = 27640;
+
+               public static int           GameBalls           = 1;
+               public static bool          LogConsole          = true;
+       
+               public static ushort        ServerPort          = DEFAULTPORT;
+               public static TimeSpan      ServerRefresh       = new 
TimeSpan(0, 0, 0, 0, 100);
+               public static TimeSpan      ServerTimeout       = new 
TimeSpan(0, 0, 0, 8, 0);
+               public static TimeSpan      ServerACKRetry      = new 
TimeSpan(0, 0, 0, 1, 0);
+
+               public static string        RconPassword        = "grace";
+       }
+
+       public struct ServerState 
+       {
+               public static bool                Live                = true;
+               
+               // ||client|| -- [netserver] -- [gameserver] -- [universe]
+               public static NetServer           NetServer           = null;
+       }
+
+       public class NetServer
+       {
+               public struct Connection
+               {
+                       public IPAddress addr;
+                       public int       port;
+
+                       public Connection(IPAddress a, int p) { addr = a; port 
= p;}
+               }
+
+               public class  Client
+               {
+                       public string    Name;
+                       public DateTime  LastRead;
+                       public bool      InGame;
+                       public ushort    Ping;
+                       public ushort    Team;
+                       public bool      Authd;
+                       public ACKQueue  ACKQueue = new 
ACKQueue(ServerConfig.ServerACKRetry);
+
+                       public ArrayList SendQueue = new ArrayList();
+                       public Pinger    Pinger    = new Pinger();
+               }
+
+               private ushort       _port;
+               private GameServer   _serv;
+               private Hashtable    _conn;
+               
+
+               public NetServer(ushort port, GameServer serv)
+               {
+                       _port = port;
+                       _serv = serv;
+                       _conn = new Hashtable();
+               }
+
+               public void broadcastViaACKQueue(GameMsg m)
+               {
+                       foreach (DictionaryEntry de in _conn)
+                       {
+                               ((Client)de.Value).ACKQueue.Add(m);
+                       }
+               }
+
+               public void Start()
+               {
+                       IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 
_port);
+
+                       Socket sock;
+                       sock = new Socket(endPoint.AddressFamily, 
SocketType.Dgram, ProtocolType.Udp);
+                       sock.Bind(endPoint);
+                       sock.Blocking = false;
+
+                       byte[]    buf    = new byte[16384];
+                       EndPoint  remote = (EndPoint)endPoint;
+                       ArrayList prune  = new ArrayList();
+
+                       while (ServerState.Live)
+                       {
+                               if (sock.Available == 0)
+                                       System.Threading.Thread.Sleep(1);
+
+                               while (sock.Available > 0)
+                               {
+                                       int read = 0;
+                                       try
+                                       {
+                                               read = sock.ReceiveFrom(buf, 
ref remote);
+                                               endPoint = (IPEndPoint)remote; 
// dunno why u have to do this
+                                       }
+                                       catch { continue; }
+
+                                       // echo "ping" | nc -u 24.5.78.48 27640
+                                       if (read == 5 && buf[0]=='p' && 
buf[1]=='i' && buf[2]=='n' && buf[3]=='g' && buf[4] == '\n')
+                                       {
+                                               LOG.info(remote.ToString() + " 
ping");
+                                               byte[] pong = new byte[5];
+                                               pong[0] = (byte)'p'; 
pong[1]=(byte)'o'; pong[2]=(byte)'n'; pong[3]=(byte)'g'; pong[4]=(byte)'\n';
+                                               sock.SendTo(pong, endPoint);
+                                               continue;
+                                       }
+
+                                       Connection c = new 
Connection(endPoint.Address, endPoint.Port);
+                                       if (!_conn.Contains(c))
+                                       {
+                                               LOG.info(remote.ToString() + " 
connect");
+                                               _conn[c] = new Client();
+                                               _serv.Join(c, (Client)_conn[c]);
+                                       }
+
+                                       Client p = (Client)_conn[c];
+                                       p.LastRead = DateTime.Now;
+       
+                                       ArrayList msgs = null;
+                                       try
+                                       {
+                                               msgs = Parser.Read(buf, read);
+                                       }
+                                       catch
+                                       {
+                                               continue;
+                                       }
+
+                                       for (int i = 0; i < msgs.Count; i++)
+                                               _serv.Msg(c, p, 
(GameMsg)msgs[i]);
+                               }
+
+                               // refresh calls universe run now
+                               GameMsg broadcast = _serv.Refresh();
+                               if (broadcast == null)
+                                       continue;
+
+                               byte[] worldFresh = Parser.Write(broadcast);
+
+                               DateTime timeout = 
DateTime.Now.Subtract(ServerConfig.ServerTimeout);
+                               foreach (DictionaryEntry de in _conn)
+                               {
+                                       if (((Client)de.Value).LastRead < 
timeout)
+                                       {
+                                               prune.Add(de.Key);
+                                               continue;
+                                       }
+
+                                       endPoint.Address = 
((Connection)de.Key).addr;
+                                       endPoint.Port    = 
((Connection)de.Key).port;
+
+                                       if (((Client)de.Value).SendQueue.Count 
> 0)
+                                       {
+                                               foreach (GameMsg m in 
((Client)de.Value).SendQueue)
+                                                       
sock.SendTo(Parser.Write(m), endPoint);
+
+                                               
((Client)de.Value).SendQueue.Clear();
+                                       }
+
+                                       
((Client)de.Value).ACKQueue.Communicate(sock, endPoint);
+
+                                       if (!((Client)de.Value).InGame)
+                                               continue;
+
+                                       sock.SendTo(worldFresh, endPoint);
+                               }
+
+                               if (prune.Count > 0)
+                               {
+                                       for (int i=0; i<prune.Count; i++)
+                                       {
+                                               Connection c = 
(Connection)prune[i];
+                                               LOG.info(c.addr.ToString() + 
":" + c.port.ToString() + " disconnect");
+                                               _serv.Part(c, 
(Client)_conn[prune[i]]);
+                                               _conn.Remove(prune[i]);
+                                       }
+                                       prune.Clear();
+                               }
+                       }
+               }
+       }
+}

Added: trunk/skorpion/server/server.csproj
===================================================================
--- trunk/skorpion/server/server.csproj                         (rev 0)
+++ trunk/skorpion/server/server.csproj 2006-11-07 21:30:44 UTC (rev 116)
@@ -0,0 +1,155 @@
+<VisualStudioProject>
+    <CSHARP
+        ProjectType = "Local"
+        ProductVersion = "7.10.3077"
+        SchemaVersion = "2.0"
+        ProjectGuid = "{62CECD29-0D9B-4D68-9D4B-F9BBAA225758}"
+    >
+        <Build>
+            <Settings
+                ApplicationIcon = ""
+                AssemblyKeyContainerName = ""
+                AssemblyName = "server"
+                AssemblyOriginatorKeyFile = ""
+                DefaultClientScript = "JScript"
+                DefaultHTMLPageLayout = "Grid"
+                DefaultTargetSchema = "IE50"
+                DelaySign = "false"
+                OutputType = "Library"
+                PreBuildEvent = ""
+                PostBuildEvent = ""
+                RootNamespace = "skorpion"
+                RunPostBuildEvent = "OnBuildSuccess"
+                StartupObject = ""
+            >
+                <Config
+                    Name = "Debug"
+                    AllowUnsafeBlocks = "false"
+                    BaseAddress = "285212672"
+                    CheckForOverflowUnderflow = "false"
+                    ConfigurationOverrideFile = ""
+                    DefineConstants = "DEBUG;TRACE"
+                    DocumentationFile = ""
+                    DebugSymbols = "true"
+                    FileAlignment = "4096"
+                    IncrementalBuild = "false"
+                    NoStdLib = "false"
+                    NoWarn = ""
+                    Optimize = "false"
+                    OutputPath = "bin\Debug\"
+                    RegisterForComInterop = "false"
+                    RemoveIntegerChecks = "false"
+                    TreatWarningsAsErrors = "false"
+                    WarningLevel = "4"
+                />
+                <Config
+                    Name = "Release"
+                    AllowUnsafeBlocks = "false"
+                    BaseAddress = "285212672"
+                    CheckForOverflowUnderflow = "false"
+                    ConfigurationOverrideFile = ""
+                    DefineConstants = "TRACE"
+                    DocumentationFile = ""
+                    DebugSymbols = "false"
+                    FileAlignment = "4096"
+                    IncrementalBuild = "false"
+                    NoStdLib = "false"
+                    NoWarn = ""
+                    Optimize = "true"
+                    OutputPath = "bin\Release\"
+                    RegisterForComInterop = "false"
+                    RemoveIntegerChecks = "false"
+                    TreatWarningsAsErrors = "false"
+                    WarningLevel = "4"
+                />
+            </Settings>
+            <References>
+                <Reference
+                    Name = "System"
+                    AssemblyName = "System"
+                    HintPath = 
"..\..\..\..\..\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.dll"
+                />
+                <Reference
+                    Name = "System.Data"
+                    AssemblyName = "System.Data"
+                    HintPath = 
"..\..\..\..\..\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.Data.dll"
+                />
+                <Reference
+                    Name = "System.XML"
+                    AssemblyName = "System.Xml"
+                    HintPath = 
"..\..\..\..\..\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.XML.dll"
+                />
+            </References>
+        </Build>
+        <Files>
+            <Include>
+                <File
+                    RelPath = "AssemblyInfo.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+                <File
+                    RelPath = "game\Server.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+                <File
+                    RelPath = "network\ACKQueue.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+                <File
+                    RelPath = "network\Client.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+                <File
+                    RelPath = "network\Parser.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+                <File
+                    RelPath = "network\Protocol.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+                <File
+                    RelPath = "network\Server.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+                <File
+                    RelPath = "universe\Entity.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+                <File
+                    RelPath = "universe\Log.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+                <File
+                    RelPath = "universe\Physics.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+                <File
+                    RelPath = "universe\Rules.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+                <File
+                    RelPath = "universe\Universe.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+                <File
+                    RelPath = "universe\Vector.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+            </Include>
+        </Files>
+    </CSHARP>
+</VisualStudioProject>
+

Added: trunk/skorpion/server/universe/Entity.cs
===================================================================
--- trunk/skorpion/server/universe/Entity.cs                            (rev 0)
+++ trunk/skorpion/server/universe/Entity.cs    2006-11-07 21:30:44 UTC (rev 
116)
@@ -0,0 +1,46 @@
+using System;
+
+namespace skorpion
+{
+       public class Entity
+       {
+               public ushort  ID;
+               public ushort  Type;
+               public float   Radius;
+               public Vector3 LastPosition;
+               public Vector3 Position;
+               public Vector3 Velocity;
+               public ushort  Burst;
+               public string  Asset;
+               public string  Texture;
+               public bool    Active;
+
+               public Entity(ushort id, ushort type, float radius, string 
asset, string texture)
+               {
+                       ID = id; Type = type; Radius = radius; Asset = asset; 
Active = true; Texture = texture;
+               }
+       }
+
+       public class Ship : Entity
+       {
+               public Vector3 Orientation;
+               public Vector3 UpDirection;
+               public string  Name;
+               public ushort Ping;
+               public ushort Team;
+
+               public static ushort TYPE  = 0x0001;
+               public static string ASSET = "a1a";
+               public static string TEXTURE = "default";
+
+               public Ship(ushort id) : base(id, TYPE, 2.0f, ASSET, TEXTURE) { 
}
+       }
+
+       public class Ball : Entity
+       {
+               public static ushort TYPE  = 0x0060;
+               public static string ASSET = "";
+               public static string TEXTURE = "";
+               public Ball(ushort id) : base(id, TYPE, 1.0f, ASSET, TEXTURE) {}
+       }
+}

Added: trunk/skorpion/server/universe/Log.cs
===================================================================
--- trunk/skorpion/server/universe/Log.cs                               (rev 0)
+++ trunk/skorpion/server/universe/Log.cs       2006-11-07 21:30:44 UTC (rev 
116)
@@ -0,0 +1,30 @@
+using System;
+
+namespace skorpion
+{
+       /// Allow for selective activation of detailed logging for targetted 
users
+       public class LOG
+       {
+               public enum Level { FATAL=0, ERROR=1, INFO=2, DEBUG=3 }
+               public static Level level = Level.INFO;
+
+               public delegate void CallBack(string s);
+               public static CallBack Callback = new 
CallBack(Console.WriteLine);
+
+               public static void debug(string msg)
+               {
+                       if (Callback == null || level < Level.DEBUG)
+                               return;
+
+                       Callback(DateTime.Now.ToString() + " [DEBUG] " + msg);
+               }
+
+               public static void info(string msg)
+               {
+                       if (Callback == null || level < Level.INFO)
+                               return;
+
+                       Callback(DateTime.Now.ToString() + " [INFO] " + msg);
+               }
+       }
+}

Added: trunk/skorpion/server/universe/Physics.cs
===================================================================
--- trunk/skorpion/server/universe/Physics.cs                           (rev 0)
+++ trunk/skorpion/server/universe/Physics.cs   2006-11-07 21:30:44 UTC (rev 
116)
@@ -0,0 +1,12 @@
+using System;
+
+namespace skorpion
+{
+       /// Apply simulation of interplanetary gravitational interaction to 
Entities
+       public class Physics
+       {
+               public Physics()
+               {
+               }
+       }
+}

Added: trunk/skorpion/server/universe/Rules.cs
===================================================================
--- trunk/skorpion/server/universe/Rules.cs                             (rev 0)
+++ trunk/skorpion/server/universe/Rules.cs     2006-11-07 21:30:44 UTC (rev 
116)
@@ -0,0 +1,17 @@
+using System;
+
+namespace skorpion
+{
+       /// <summary>
+       /// Summary description for Rules.
+       /// </summary>
+       public class Rules
+       {
+               public Rules()
+               {
+                       //
+                       // TODO: Add constructor logic here
+                       //
+               }
+       }
+}

Added: trunk/skorpion/server/universe/Universe.cs
===================================================================
--- trunk/skorpion/server/universe/Universe.cs                          (rev 0)
+++ trunk/skorpion/server/universe/Universe.cs  2006-11-07 21:30:44 UTC (rev 
116)
@@ -0,0 +1,516 @@
+using System;
+using System.Collections;
+using System.Net;
+
+namespace skorpion
+{
+       /// Object Reality Basis (orb) - an interactive world consisting of a 
kinematics framework and classes to handle: 
+       /// enforcement of physics schema; logging, statistics, trends; and 
game rules.
+       /// 
+       /// Run calculates the next frame of a sliding quantitized reality.  
WorleRefresh provides a snapshot of the current state.
+
+       public class Universe
+       {
+               // these publics are the cliens interface
+               public Hashtable  Entities = null;
+               public ArrayList  Events   = null;
+               public DateTime   LastTime;
+               public Hashtable  Players = null;
+
+               // these are what a universe is made uV
+               Physics   Physics   = null;
+               Rules     Rules     = null;
+               Field     BallField = null;
+               float     Epsilon   = 0.01f;
+               
+               public Universe()
+               {
+                       Entities  = new System.Collections.Hashtable();
+                       Players   = new System.Collections.Hashtable();
+                       Events    = new System.Collections.ArrayList();
+
+                       Physics   = new Physics();
+                       Rules     = new Rules();
+
+                       BallField = new Field();
+
+                       LastTime  = DateTime.Now;
+               }
+
+               public struct FieldDefintion
+               {
+                       // way back - upper left
+                       public static Vector3 A = new Vector3(-340,  100,  540);
+                       // way back - lower left
+                       public static Vector3 B = new Vector3(-340, -100,  540);
+                       // way back - lower right
+                       public static Vector3 C = new Vector3( 340, -100,  540);
+                       // way back - uper right
+                       public static Vector3 D = new Vector3( 340,  100,  540);
+
+                       // up front - upper left
+                       public static Vector3 E = new Vector3(-340,  100, -540);
+                       // up front - lower left
+                       public static Vector3 F = new Vector3(-340, -100, -540);
+                       // up front - lower right
+                       public static Vector3 G = new Vector3( 340, -100, -540);
+                       // up front - upper right
+                       public static Vector3 H = new Vector3( 340,  100, -540);
+               }
+
+               public struct BallDefinition
+               {
+                       public static float radius = 2.8f;
+               }
+
+               public class Field
+               {
+                       public Plane[] Planes;
+
+                       public Field()
+                       {
+                               Planes = new Plane[6];
+                               // way back
+                               Planes[0] = Plane.FromPoints(FieldDefintion.C, 
FieldDefintion.B, FieldDefintion.A);
+                               // left
+                               Planes[1] = Plane.FromPoints(FieldDefintion.A, 
FieldDefintion.B, FieldDefintion.E);
+                               // top
+                               Planes[2] = Plane.FromPoints(FieldDefintion.E, 
FieldDefintion.D, FieldDefintion.A);
+                               // right
+                               Planes[3] = Plane.FromPoints(FieldDefintion.C, 
FieldDefintion.D, FieldDefintion.G);
+                               // bottom
+                               Planes[4] = Plane.FromPoints(FieldDefintion.B, 
FieldDefintion.C, FieldDefintion.F);
+                               // up front
+                               Planes[5] = Plane.FromPoints(FieldDefintion.E, 
FieldDefintion.F, FieldDefintion.G);
+                       }
+               }
+               
+               public void Bounce(Entity e, Vector3 bounceNormal, Vector3 
normalVel)
+               {
+                       /*
+                       // adjust to ships or walls velocity
+                        e.Velocity -= normalVel;
+                       // stationary wall bounce
+                       e.Velocity = bounceNormal * 2.0f *
+                               Vector3.Dot(e.Velocity * -1.0f, bounceNormal)
+                               + e.Velocity;
+                       // add back velocity
+                       e.Velocity += normalVel;
+                       */
+
+                       e.Velocity -= normalVel;
+
+                       Vector3 n = bounceNormal;
+                       n *= Vector3.Dot(e.Velocity, bounceNormal);
+                       e.Velocity -= n;
+
+                       float friction =   1.0f;
+                       float resilience = 0.2f;
+
+                       e.Velocity = e.Velocity * (1.0f - friction) - n * 
resilience;
+//                     e.Velocity.X = (1.0f - friction) * e.Velocity.X - 
resilience * n.X;
+//                     e.Velocity.Y = (1.0f - friction) * e.Velocity.Y - 
resilience * n.Y;
+//                     e.Velocity.Z = (1.0f - friction) * e.Velocity.Z - 
resilience * n.Z;
+
+                       e.Velocity += normalVel;
+               }
+
+               public float distanceSquared(Vector3 v1, Vector3 v2)
+               {
+                       float dx = v1.X - v2.X;
+                       float dy = v1.Y - v2.Y;
+                       float dz = v1.Z - v2.Z;
+
+                       return dx*dx + dy*dy + dz*dz;
+               }
+
+               public float clipPlane(Vector3 v, Plane p)
+               {
+                       float A = p.A;
+                       float B = p.B;
+                       float C = p.C;
+                       float D = p.D;
+                       float X = v.X;
+                       float Y = v.Y;
+                       float Z = v.Z;
+                       
+                       // possible to ignore the square root since we can just 
store the square of the ball's radius
+                       // (this would potentially be tons faster if the plane 
was expressed in Hessian normal form)
+                       float distance = ((A * X) + (B * Y) + (C * Z) + D);/// 
(float)/*Math.Sqrt*/(Math.Pow((double)A, 2) + Math.Pow((double)B, 2) + 
Math.Pow((double)C, 2));
+
+                       return(distance);
+               }
+
+               public class RunState
+               {
+                       public Entity e;
+                       public float  time;
+                       public bool   collided;
+
+                       public RunState(Entity E, float deltaTime)
+                       {
+                               e        = E;
+                               time     = deltaTime;
+                               collided = false;
+                       }
+               }
+
+               public class CollisionEvent
+               {
+                       public float    gameTime;
+                       public RunState r1;
+                       public RunState r2;
+                       public Vector3  collisionPoint1;
+                       public Vector3  collisionPoint2;
+
+                       public CollisionEvent(float t, RunState R1, RunState R2)
+                       {
+                               gameTime = t;
+                               r1 = R1;
+                               r2 = R2;
+                       }
+               }
+
+               // ganked this from mathematica
+               public float MovingPlaneLineDistance(Vector3 ort, Vector3 p2, 
Vector3 v2, Vector3 p1, Vector3 v1, float dSqd)
+               {
+                       ort.Normalize();
+
+                       float A    = ort.X;
+                       float B    = ort.Y;
+                       float C    = ort.Z;
+                       float ABC  = A*A+B*B+C*C;
+
+                       float denom = ABC*(A*v1.X + B*v1.Y + C*v1.Z - A*v2.X - 
B*v2.Y - C*v2.Z);
+                       if (denom == 0)
+                               return -1.0f;
+
+                       float num = dSqd-ABC*(A*p1.X + B*p1.Y + C*p1.Z - A*p2.X 
- B*p2.Y - C*p2.Z);
+
+                       return num / denom;
+               }
+
+               public void Run()
+               {
+                       System.DateTime now = DateTime.Now;
+                       double deltaTime = 
(now.Subtract(LastTime)).TotalMilliseconds;
+                       LastTime = now;
+
+                       // game time is in 100ths of seconds, just because 
given our worldpspace
+                       // this interval makes unit vector velocities fly at a 
nice speed
+                       deltaTime /= 10.0;
+                       if (deltaTime == 0)
+                               return;
+
+                       // keep all the ships on the left
+                       ArrayList RunSet = new ArrayList();
+                       foreach(Entity e in Entities.Values)
+                       {
+                               if (e.Type == Ship.TYPE)
+                               {
+                                       RunSet.Add(new RunState(e, 
(float)deltaTime));
+                                       if (e.Burst != 0)
+                                       {
+                                               Ship s = (Ship)e;
+
+                                               if (s.Velocity.Length() < 
Epsilon)
+                                                       s.Velocity  = 
s.Orientation;
+
+                                               float f = s.Burst;
+                                               if (f > 1000.0f)
+                                                       f = 1000.0f;
+
+                                               f /= 200.0f;
+
+                                               s.Velocity *= f;
+
+                                               // LOG.debug("burst val = " + 
f.ToString());
+                                       }
+                               }
+                       }
+                       foreach(Entity e in Entities.Values)
+                               if (e.Type != Ship.TYPE)
+                                       RunSet.Add(new RunState(e, 
(float)deltaTime));
+
+                       bool collisionsOccured = true;
+                       while(collisionsOccured)
+                       {
+                               // do {} while(collisionsOccured)
+                               collisionsOccured = false;
+
+                               // sort collisions by time
+                               SortedList collisions = new SortedList();
+
+                               // check every object agains every other
+                               for (int i=0; i<RunSet.Count; i++)
+                               {
+                                       RunState r1 = (RunState)RunSet[i];
+                                       Entity   e1 = r1.e;
+
+                                       for (int j=i+1; j<RunSet.Count; j++)
+                                       {
+                                               RunState r2 = 
(RunState)RunSet[j];
+                                               Entity   e2 = r2.e;
+
+                                               // only ships n balls for now
+                                               if (e1.Type == Ship.TYPE || 
e2.Type == Ball.TYPE)
+                                               {
+                                                       Ship s = (Ship)e1;
+
+                                                       float t = 
MovingPlaneLineDistance(s.Orientation, s.Position,
+                                                               s.Velocity, 
e2.Position, e2.Velocity, Universe.BallDefinition.radius);
+
+                                                       float minTime = r1.time 
< r2.time ? r1.time : r2.time;
+
+                                                       if (t < 0 || t > 
(float)minTime)
+                                                               continue;
+
+                                                       if ((r1.collided || 
r2.collided) && t < Epsilon)
+                                                               continue;
+
+                                                       Vector3 c1 =  
s.Position+ s.Velocity*t;
+                                                       Vector3 c2 = 
e2.Position+e2.Velocity*t;
+
+                                                       float side = 
clipPlane(c2, new Plane(s.Orientation, c1));
+
+                                                       // add the ships 
orientation to the balls position
+                                                       // to get the collision 
point
+                                                       Vector3 cp = new 
Vector3();
+                                                       if (side < 0)
+                                                               cp = c2 + 
s.Orientation * Universe.BallDefinition.radius;
+                                                       else
+                                                               cp = c2 - 
s.Orientation * Universe.BallDefinition.radius;
+
+                                                       // ciruclar radius of 
11 around the ship
+                                                       float d = 
distanceSquared(c1,cp);
+                                                       if (d >= 14.0*14.0)
+                                                               continue;
+
+                                                       // we collided
+                                                       r1.collided = true;
+                                                       r2.collided = true;
+                                                       collisions[t] = new 
CollisionEvent(t, r1, r2);
+                                                       collisionsOccured = 
true;
+
+                                                       // LOG.debug("col: " + 
e1.ID + " with " + e2.ID + " t=" + t + " sp=" + s.Position.ToString() + " sbp= 
" + e2.Position.ToString());
+                                               }
+                                       }
+                               }
+
+                               if (collisionsOccured)
+                               {
+                                       // traverse collisions in order of time
+                                       IDictionaryEnumerator col = 
collisions.GetEnumerator();
+
+                                       // and remember who's already collided
+                                       Hashtable alreadyCollided = new 
Hashtable();
+
+                                       while (col.MoveNext())
+                                       {
+                                               CollisionEvent CE = 
(CollisionEvent)col.Value;
+                                               RunState       r1 = CE.r1;
+                                               RunState       r2 = CE.r2;
+                                               Entity         e1 = CE.r1.e;
+                                               Entity         e2 = CE.r2.e;
+
+                                               if 
(alreadyCollided.Contains(r1) || alreadyCollided.Contains(r2))
+                                                       continue;
+
+                                               // again only for balls n ships
+                                               if (e1.Type == Ship.TYPE || 
e2.Type == Ball.TYPE)
+                                               {
+                                                       Ship s = (Ship)e1;
+
+                                                       // advance to collision 
point
+                                                       s.Position  += 
s.Velocity * CE.gameTime;
+                                                       e2.Position += 
e2.Velocity * CE.gameTime;
+
+                                                       // add for exposed net 
interface
+                                                       CE.collisionPoint1 = 
s.Position;
+                                                       CE.collisionPoint2 = 
e2.Position;
+                                                       Events.Add(CE);
+
+                                                       r1.time -= CE.gameTime;
+                                                       r2.time -= CE.gameTime;
+
+                                                       Bounce(e2, 
s.Orientation, s.Velocity);
+
+                                                       alreadyCollided[r1] = 
true;
+                                                       alreadyCollided[r2] = 
true;
+                                               }
+                                       }
+                               }
+                       }
+
+                       // no more collisions left just advance everything by 
its velocity
+                       foreach(RunState r in RunSet)
+                       {
+                               if (r.e.Type == Ball.TYPE)
+                               {
+                                       r.e.Velocity *= 0.96f;
+                               }
+
+                               r.e.Position += r.e.Velocity * r.time;
+
+                               if (r.e.Burst != 0)
+                               {
+                                       r.e.Velocity.Normalize();
+                                       r.e.Burst = 0;
+                               }
+
+                               if (r.e.Type == Ball.TYPE)
+                               {
+                                       BounceBallOffWalls(r.e);
+                                       if (r.e.Position.Y <= 
Universe.FieldDefintion.B.Y + BallDefinition.radius)
+                                       {
+                                               r.e.Position.Y = 
Universe.FieldDefintion.B.Y + BallDefinition.radius;
+                                               r.e.Velocity.Y = 0;
+                                       }
+                                       else
+                                       {
+                                               Vector3 gravity = new 
Vector3(0,-0.008f,0);
+                                               r.e.Velocity += gravity * 
(float)deltaTime;
+                                       }
+                               }
+                       }
+               }
+
+               public void BounceBallOffWalls(Entity e1)
+               {               
+                       // slow the ball down a bit
+                       // e1.Velocity *= f;
+
+                       // compute game field wall collisions
+                       for (int k = 0; k < BallField.Planes.Length; k++)
+                       {
+                               float distance = clipPlane(e1.Position, 
BallField.Planes[k]);
+                               if (distance > 0)
+                                       continue;
+                               /*
+                               Vector3 normal = new Vector3();
+                               normal.X = BallField.Planes[k].A;
+                               normal.Y = BallField.Planes[k].B;
+                               normal.Z = BallField.Planes[k].C;
+
+                               Bounce(e1, normal, new Vector3(0,0,0));
+                               */
+
+                               switch(k)
+                               {
+                                       case 0:
+                                               if(e1.Velocity.Z > 0)
+                                                       e1.Velocity.Z *= -1;
+                                               break;
+                                       case 1:
+                                               if(e1.Velocity.X < 0)
+                                                       e1.Velocity.X *= -1;
+                                               break;
+                                       case 2:
+                                               if(e1.Velocity.Y > 0)
+                                                       e1.Velocity.Y *= -1;
+                                               break;
+                                       case 3:
+                                               if(e1.Velocity.X > 0)
+                                                       e1.Velocity.X *= -1;
+                                               break;
+                                       case 4:
+                                               if(e1.Velocity.Y < 0)
+                                                       e1.Velocity.Y *= -1;
+                                               break;
+                                       case 5:
+                                               if(e1.Velocity.Z < 0)
+                                                       e1.Velocity.Z *= -1;
+                                               break;
+                               }
+                       }
+               }
+       }
+}
+
+// this stuff is to be reused later for shipSheild2shipShield & ball2ball 
collisions
+
+                                       /*
+                                       // along the lines of velocity do two 
entities come as near as
+                                       // the sum of their radiuses and if so 
at what point in time?
+                                       //
+                                       // distance formula over time at 
current velocity:
+                                       // (e1.r+e2.r)^2 = 
((e1.x+e1.v*t)-(e2.x+e2.v*t))^2 ...
+                                       //
+                                       // expanded & simplified solving for t 
with quadratic equation:
+                                       // t = -dp.dv/dv.dv +/- 
sqrt((dp.dv/dv.dv)^2 - (dp.dp-R^2)/dv.dv )
+                                       // where dp = e1.p-e2.p, dv = 
e1.v-e2.v, etc
+
+                                       Vector3 dp = e1.Position - e2.Position;
+                                       Vector3 dv = e1.Velocity - e2.Velocity;
+
+                                       float dpDotdv = Vector3.Dot(dp, dv);
+                                       float dvDotdv = Vector3.Dot(dv, dv);
+                                       float dpDotdp = Vector3.Dot(dp, dp);
+
+                                       float R       = e1.Radius + e2.Radius;
+                                       float Rsqrd   = R * R;
+
+                                       float eq      = dpDotdv / dvDotdv;
+                                             eq     *= eq;
+                                                 eq     -= (dpDotdp - Rsqrd) / 
dvDotdv;
+
+                                       // if eq is negative the square root is 
imaginary as in never near enough
+                                       if (eq > 0)
+                                       {
+                                               eq        = 
(float)Math.Sqrt(eq);
+
+                                               float t1  = eq;
+                                               float t2  = -eq;
+
+                                               eq        = -(dpDotdv / 
dvDotdv);
+
+                                               t1       += eq;
+                                               t2       += eq;
+
+                                               // if t is negative its in the 
past
+                                               // if t over our time interval 
its too far in the future
+                                               // if 2 collisions occur in 
timeframe, put the earliest one in eq
+                                               eq = 0;
+                                               if (t1 >= 0 && t1 <= 
(float)deltaTime)
+                                                       eq = t1;
+                                               if (t2 >= 0 && t2 <= 
(float)deltaTime)
+                                                       if (eq == 0)
+                                                               eq = t2;
+                                                       else
+                                                               eq = t1 < t2 ? 
t1 : t2;
+
+                                               if (eq != 0)
+                                               {
+                                                       Vector3 e1cp = 
e1.Position + e1.Velocity * eq;
+                                                       Vector3 e2cp = 
e2.Position + e2.Velocity * eq;
+
+                                                       collision = true;
+                                                       // round off the ships 
cylinder with a clipping plane when it hits ball
+                                                       // for another ship use 
the rounded sphere cylinder for a ship2ship shield collision
+                                                       if (e1.Type == 
Ship.TYPE && e2.Type == Ball.TYPE)
+                                                       {
+                                                               Ship s = 
(Ship)e1;
+                                                               float d = 
clipPlane(e2cp, new Plane(s.Orientation, s.Position));
+                                                               //if (d < 1)
+                                                               //      
System.Windows.Forms.MessageBox.Show(d.ToString());
+                                                               r2.collided = 
true;
+
+                                                               // reflect the 
velocity around the ships normal
+                                                               // e2.Velocity 
-= s.Velocity;
+
+                                                               e2.Velocity = 
s.Orientation * 2.0f *
+                                                                       
Vector3.Dot(e2.Velocity * -1.0f, s.Orientation)
+                                                                       + 
e2.Velocity;
+                                                               e2.Velocity *= 
2;
+                                                               //e2.Velocity 
+= s.Velocity;
+
+                                                               
LOG.debug("collision ship" + s.ID.ToString() + " with ball" + e2.ID + " with d 
=" + d.ToString());
+                                                       }
+
+                                                       if (collision)
+                                                       {
+                                                       }
+                                               }       
+                                       }
+                                       */
+

Added: trunk/skorpion/server/universe/Vector.cs
===================================================================
--- trunk/skorpion/server/universe/Vector.cs                            (rev 0)
+++ trunk/skorpion/server/universe/Vector.cs    2006-11-07 21:30:44 UTC (rev 
116)
@@ -0,0 +1,91 @@
+using System;
+
+namespace skorpion {
+       public struct Vector3 {
+               public Vector3(float x, float y, float z) { X = x; Y = y; Z = 
z; }
+
+               public float X;
+               public float Y;
+               public float Z;
+
+               public void Scale(float scalingFactor) {
+                       X *= scalingFactor;
+                       Y *= scalingFactor;
+                       Z *= scalingFactor;
+               }
+               public void Add(Vector3 vect) {
+                       X += vect.X;
+                       Y += vect.Y;
+                       Z += vect.Z;
+               }
+
+               public float Length()
+               {
+                       return (float)System.Math.Sqrt(X*X + Y*Y + Z*Z);
+               }
+
+               public void Normalize() {
+                       float length = (float)System.Math.Sqrt(X*X + Y*Y + Z*Z);
+                       if (length == 0)
+                               return;
+                       X /= length;
+                       Y /= length;
+                       Z /= length;
+               }
+               
+               public static Vector3 operator*(Vector3 vect, float f) {
+                       return new Vector3(vect.X * f, vect.Y * f, vect.Z * f);
+               }
+               public static Vector3 operator-(Vector3 vect1, Vector3 vect2) {
+                       return new Vector3(vect1.X - vect2.X, vect1.Y - 
vect2.Y, vect1.Z - vect2.Z);
+               }
+               public static Vector3 operator+(Vector3 vect1, Vector3 vect2) {
+                       return new Vector3(vect1.X + vect2.X, vect1.Y + 
vect2.Y, vect1.Z + vect2.Z);
+               }
+
+               public static float Dot(Vector3 vect1, Vector3 vect2) {
+                       return (vect1.X * vect2.X + vect1.Y * vect2.Y + vect1.Z 
* vect2.Z);
+               }
+               public static Vector3 Cross(Vector3 vect1, Vector3 vect2) {
+                       return new Vector3( 
+                               vect1.Y*vect2.Z - vect1.Z*vect2.Y, 
+                               vect1.Z*vect2.X - vect1.X*vect2.Z, 
+                               vect1.X*vect2.Y - vect1.Y*vect2.X );
+               }
+               
+               public override string ToString()
+               {
+                       return X.ToString() + "," + Y.ToString() + "," + 
Z.ToString();
+               }
+       }
+
+       public struct Plane {
+               public float A;
+               public float B;
+               public float C;
+               public float D;
+
+               public Plane(Vector3 orientation, Vector3 position)
+               {
+                       orientation.Normalize();
+                       A = orientation.X;
+                       B = orientation.Y;
+                       C = orientation.Z;
+                       D = -A*position.X - B*position.Y - C*position.Z;
+               }
+               
+               public Plane(Vector3 p1, Vector3 p2, Vector3 p3)  
+               {
+                       Vector3 normal = Vector3.Cross(p3-p2, p1-p2);
+                       normal.Normalize();
+                       A = normal.X;
+                       B = normal.Y;
+                       C = normal.Z;
+                       D = -A*p1.X - B*p1.Y - C*p1.Z;
+               }
+
+               public static Plane FromPoints(Vector3 p1, Vector3 p2, Vector3 
p3) {
+                       return new Plane(p1, p2, p3);
+               }
+       }
+}

Added: trunk/skorpion/skorpion.cs
===================================================================
--- trunk/skorpion/skorpion.cs                          (rev 0)
+++ trunk/skorpion/skorpion.cs  2006-11-07 21:30:44 UTC (rev 116)
@@ -0,0 +1,473 @@
+using System;
+using System.Drawing;
+using System.Windows.Forms;
+using System.Threading;
+using System.Collections;
+using System.Reflection;
+using Microsoft.DirectX;
+using Microsoft.DirectX.Direct3D;
+
+namespace skorpion
+{
+       public class ClientConfig
+       {
+               public static bool          Debug               = false;
+
+               public static int           DevIndex            = 0;
+               public static DeviceType    DevType             = 
DeviceType.Hardware;
+               public static CreateFlags   DevFlags            = 
CreateFlags.HardwareVertexProcessing;
+
+               public static int           FormWidth           = 800;
+               public static int           FormHeight          = 600;
+
+               public static string        PlayerName          = "player";
+               public static ushort        Team                = 2;
+
+               public static bool          ClientStart         = true;
+               public static string        ClientConnect       = "pleep.com";
+               public static ushort        ClientPort          = 
ServerConfig.DEFAULTPORT;
+                       
+               public static bool          ServerStart         = true;
+
+               public static TimeSpan      ConsoleOpen         = new 
TimeSpan(0,0,0,0,500);
+               public static TimeSpan      ClientKeyRepeat     = new 
TimeSpan(0,0,0,0,200);
+               public static TimeSpan      ClientACKRetry      = new 
TimeSpan(0,0,0,1,0);
+               public static TimeSpan      ClientNetTimeout    = new 
TimeSpan(0,0,0,20,0);
+               public static TimeSpan      ClientGameTimeout   = new 
TimeSpan(0,0,0,5,0);
+               public static TimeSpan      ClientRefresh       = new 
TimeSpan(0,0,0,0,100);
+               public static bool          ClientPrediction    = true;
+               public static TimeSpan      PlayerInfoInterval  = new 
TimeSpan(0,0,0,5,0);
+       }
+
+       public struct GlobalState
+       {
+               public static bool                Pause               = false;
+               public static Skorpion            Skorpion            = null;
+               public static Form1               Form                = null;
+               public static int                 CamNum              = 1;
+               public static float               MouseSensitivity    = 0.002f;
+               public static int                 KeyboardSensitivity = 50;
+               public static Controller          Controller          = null;
+
+               //     [renderer] -.      .- [controller]
+               //                  |    |
+               // [universe] -- [gameclient] -- [netclient] -- ||server||
+               //
+               public static GameClient          Client              = null;
+               public static Console             Console             = null;
+               public static PlayerList          PlayerList          = null;
+               public static Chat                Chat                = null;
+               public static Command             Command             = null;
+               public static Bind                Bind                = null;
+       }
+
+       public class Skorpion
+       {
+               PresentParameters iPresentParams  = null;
+               Device            iDevice         = null;
+               bool              iDeviceReady    = false;
+
+               public struct PCVertex
+               {
+                       public Vector3 p;
+                       public int     color;
+                       public static readonly VertexFormats Format = 
VertexFormats.Position | VertexFormats.Diffuse;
+                       public static int StrideSize = 16;
+               }
+
+               Material          iShipMaterial;
+
+               VertexBuffer      iFieldVerts       = null;
+               IndexBuffer       iFieldIndex       = null;
+               IndexBuffer       iFieldBorderIndex = null;
+               Material          iFieldMaterial;
+               
+               Mesh              iBall             = null;
+               Material          iBallMaterial;
+
+               Mesh              iStars            = null;
+               Texture           iStarTexture      = null;
+
+               Hashtable         iAssets           = null;
+
+               DateTime          iLastPlayerInfoRequest = new DateTime(0);
+
+               public Skorpion()
+               {
+                       iAssets = new Hashtable();
+                       Type[] types = typeof(Entity).Assembly.GetTypes();
+                       foreach (Type t in types)
+                       {
+                               if (t.BaseType == typeof(Entity))
+                               {
+                                       ushort TYPE   = 
(ushort)t.InvokeMember("TYPE",  BindingFlags.Default | BindingFlags.GetField, 
null, null, null);
+                                       string ASSET  = 
(string)t.InvokeMember("ASSET", BindingFlags.Default | BindingFlags.GetField, 
null, null, null);
+                                       string TEXTURE = 
(string)t.InvokeMember("TEXTURE", BindingFlags.Default | BindingFlags.GetField, 
null, null, null);
+
+                                       if (ASSET.Length > 0)
+                                               iAssets[TYPE] = new string[] { 
ASSET, TEXTURE };
+                               }
+                       }
+               }
+
+               public void go()
+               {
+                       iPresentParams = new PresentParameters();
+                       iPresentParams.Windowed = true;
+                       iPresentParams.SwapEffect = SwapEffect.Discard;
+                       iPresentParams.EnableAutoDepthStencil = true;
+                       iPresentParams.AutoDepthStencilFormat = DepthFormat.D16;
+
+                       CreateDevice();
+
+                       
GlobalState.Client.Net.connect(ClientConfig.ClientConnect, 
ClientConfig.ClientPort, ClientConfig.PlayerName, ClientConfig.Team);
+
+                       while(ServerState.Live)
+                       {
+                               Application.DoEvents();
+
+                               // dont take 99% cpu
+                               System.Threading.Thread.Sleep(1);
+                               
+                               GlobalState.Client.Run();
+
+                               if (!GlobalState.Pause) 
+                               {
+                                       if (iDeviceReady)
+                                       {
+                                               Render();
+                                               try { iDevice.Present(); }
+                                               catch { iDeviceReady = false; }
+                                       }
+                                       else
+                                       {
+                                               
System.Threading.Thread.Sleep(10);
+
+                                               int deviceStatus;
+                                               
iDevice.CheckCooperativeLevel(out deviceStatus);
+                                               if ((int)ResultCode.Success == 
deviceStatus)
+                                               {
+                                                       iDeviceReady = true;
+                                               }
+                                               else if 
((int)ResultCode.DeviceNotReset == deviceStatus)
+                                               {
+                                                       iDeviceReady = true;
+                                                       
iDevice.Reset(iPresentParams);
+                                               }
+                                       }
+                               }
+
+                               if (!GlobalState.Pause && 
GlobalState.Form.Focused) 
+                               {
+                                       GlobalState.Controller.mouseInput();
+                                       GlobalState.Controller.keyboardInput();
+                               }
+
+                               GlobalState.Client.UpdateServer();
+
+                               if(GlobalState.PlayerList.IsVisible)
+                               {
+                                       DateTime refresh = 
DateTime.Now.Subtract(ClientConfig.PlayerInfoInterval);
+                                       if(iLastPlayerInfoRequest.Ticks == 0 || 
iLastPlayerInfoRequest < refresh)
+                                       {
+                                               PlayerInfoReq m = new 
PlayerInfoReq();
+                                               GlobalState.Client.Net.send(m);
+
+                                               iLastPlayerInfoRequest = 
DateTime.Now;
+                                       }
+                               }
+                       }
+               }
+
+               public static void SV(out Vector3 s, double x, double y, double 
z)
+               {
+                       s.X = (float)x;
+                       s.Y = (float)y;
+                       s.Z = (float)z;
+               }
+
+               public IndexBuffer ConstructIndexBuffer(Int16[] input)
+               {
+                       IndexBuffer ret = new IndexBuffer(typeof(Int16), 
input.Length, iDevice, 0, Pool.Default);
+                       Int16[] index = (Int16[])ret.Lock(0,0);
+                       for (int i = 0; i < input.Length; i++)
+                               index[i] = input[i];
+                       ret.Unlock();
+                       return ret;
+               }
+               
+               public void CreateDevice()
+               {
+                       iDevice = new Device(ClientConfig.DevIndex, 
ClientConfig.DevType, GlobalState.Form, ClientConfig.DevFlags, iPresentParams);
+                       iDevice.DeviceReset += new 
System.EventHandler(this.RestoreDeviceObjects);
+
+                       iDeviceReady = true;
+                       RestoreDeviceObjects(null, null);
+               }
+
+               public void RestoreDeviceObjects(object sender, EventArgs e)
+               {
+                       iDevice.RenderState.Lighting = true;
+                       iDevice.RenderState.ZBufferEnable = true;
+                       iDevice.RenderState.DitherEnable = false;
+                       iDevice.RenderState.SpecularEnable = false;
+                       iDevice.RenderState.AntiAliasedLineEnable = false;
+                       iDevice.RenderState.AlphaBlendOperation = 
BlendOperation.Add;
+                       iDevice.RenderState.SourceBlend = Blend.SourceAlpha;
+                       iDevice.RenderState.DestinationBlend = 
Blend.InvSourceAlpha;
+
+                       iDevice.Lights[0].Type = LightType.Directional;
+                       iDevice.Lights[0].Direction = new 
Microsoft.DirectX.Vector3(-0.2f, -1f, -0.4f);
+                       iDevice.Lights[0].Diffuse = Color.White;
+                       iDevice.Lights[0].Enabled = true;
+                       iDevice.Lights[0].Commit();
+
+                       iDevice.Lights[1].Type = LightType.Directional;
+                       iDevice.Lights[1].Direction = new 
Microsoft.DirectX.Vector3(0.2f, -1f, 0.4f);
+                       iDevice.Lights[1].Diffuse = Color.White;
+                       iDevice.Lights[1].Enabled = true;
+                       iDevice.Lights[1].Commit();
+
+                       iDevice.RenderState.Ambient = 
System.Drawing.Color.FromArgb(0x404040);
+
+                       iFieldMaterial = new Material();
+                       Color fc = Color.MediumAquamarine;
+                       iFieldMaterial.Emissive = fc;
+                       iFieldMaterial.Diffuse  = Color.White;
+
+                       // field
+                       iFieldVerts = new VertexBuffer(typeof(PCVertex), 8, 
iDevice, Usage.WriteOnly, PCVertex.Format, Pool.Default);
+                       PCVertex[] v = (PCVertex[])iFieldVerts.Lock(0, 0);
+                       v[0].p = Universe.FieldDefintion.A;
+                       v[1].p = Universe.FieldDefintion.B;
+                       v[2].p = Universe.FieldDefintion.C;
+                       v[3].p = Universe.FieldDefintion.D;
+                       v[4].p = Universe.FieldDefintion.E;
+                       v[5].p = Universe.FieldDefintion.F;
+                       v[6].p = Universe.FieldDefintion.G;
+                       v[7].p = Universe.FieldDefintion.H;
+                       for (int i=0; i<8; i++)
+                               v[i].color = Color.FromArgb(10+i*6, fc.R, fc.G, 
fc.B).ToArgb();
+                       iFieldVerts.Unlock();
+
+               //      Int16[] fieldIndex = { 0,1,2, 3,0,2, 3,2,6, 7,3,6, 
2,1,5, 2,5,6,
+               //              1,0,4, 1,4,5, 5,4,6, 4,7,6, 0,7,4, 7,0,3 };
+
+                       Int16[] fieldIndex = { 6,2,1, 5,6,1 };
+                       iFieldIndex = ConstructIndexBuffer(fieldIndex);
+
+               //      Int16[] fieldBorderIndex = { 0,1, 1,2, 2,3, 3,0, 
+               //                                                              
   4,5, 5,6, 6,7, 7,4,
+               //                                                              
   0,4, 1,5, 2,6, 3,7
+               //                                                         };
+
+                       Int16[] fieldBorderIndex = { 1,2, 2,6, 6,5, 5,1 };
+                       iFieldBorderIndex = 
ConstructIndexBuffer(fieldBorderIndex);
+
+                       // ball
+                       iBall = Mesh.Sphere(iDevice, 
Universe.BallDefinition.radius, 9, 9);
+
+                       iBallMaterial = new Material();
+                       iBallMaterial.Diffuse = Color.White;
+                       iBallMaterial.Emissive = Color.OrangeRed;
+                               
+
+                       // ship
+                       iShipMaterial = new Material();
+                       iShipMaterial.Diffuse = Color.White;
+
+                       // stars
+                       iStars = Mesh.Sphere(iDevice, 1000.0f, 20, 20);
+                       iStars = iStars.Clone(MeshFlags.WriteOnly, 
CustomVertex.PositionTextured.Format, iDevice);
+                       
+                       CustomVertex.PositionTextured[] starVerts = 
(CustomVertex.PositionTextured[])
+                               
iStars.LockVertexBuffer(typeof(CustomVertex.PositionTextured),
+                               LockFlags.None, iStars.NumberVertices);
+
+                       for (int i=0; i<iStars.NumberVertices; i++)
+                       {
+                               starVerts[i].Tu = 
(float)Math.Asin(starVerts[i].X/1000.0f)/(float)Math.PI+0.5f;
+                               starVerts[i].Tv = 
(float)Math.Asin(starVerts[i].Y/1000.0f)/(float)Math.PI+0.5f;
+                       }
+
+                       iStars.UnlockVertexBuffer();
+                       iStarTexture = TextureLoader.FromFile(iDevice, 
".\\assets\\starmap.dds");
+
+                       // assets
+                       Assets.Reset();
+                       foreach (DictionaryEntry de in iAssets)
+                       {
+                               string[] pair = (string[])de.Value;
+                               Assets.AddAsset(iDevice, pair[0], pair[1]);
+                       }
+
+                       GlobalState.Console.RestoreDeviceObjects(iDevice);
+                       GlobalState.Chat.RestoreDeviceObjects(iDevice);
+                       GlobalState.PlayerList.RestoreDeviceObjects(iDevice);
+               }
+
+               public void DrawShip(Ship s)
+               {       
+                       Vector3 ort = s.Orientation;
+                       ort.Normalize();
+
+                       Vector3 up = s.UpDirection;
+                       up.Normalize();
+
+                       Vector3 right = Vector3.Cross(ort, up);
+                       right.Normalize();
+
+                       Matrix m = new Matrix();                
+                       m.M11 = right.X;
+                       m.M12 = right.Y;
+                       m.M13 = right.Z;
+                       m.M14 = 0;
+
+                       m.M21 = up.X;
+                       m.M22 = up.Y;
+                       m.M23 = up.Z;
+                       m.M24 = 0;
+
+                       m.M31 = ort.X;
+                       m.M32 = ort.Y;
+                       m.M33 = ort.Z;
+                       m.M34 = 0;
+
+                       m.M41 = 0;
+                       m.M42 = 0;
+                       m.M43 = 0;
+                       m.M44 = 1;
+
+                       iDevice.Transform.World = m * 
Matrix.Translation(ClientUtils.Vec(s.Position));
+
+                       Assets.RenderAsset(iDevice, s.Asset, s.Texture);
+               }
+
+               public void Render()
+               {
+                       Ship Me = GlobalState.Client.Me;
+                       // LOG.debug(Me.Position.ToString());
+
+                       Vector3 ort     = GlobalState.Client.HoldCamera ? 
GlobalState.Client.LastOrientation : Me.Orientation;
+                       Vector3 camPos  = Me.Position;
+                       Vector3 camTarg = Me.Position + ort; 
+                       Vector3 camUp   = GlobalState.Client.HoldCamera ? 
GlobalState.Client.LastUpDirection : Me.UpDirection;
+
+                       if (GlobalState.CamNum == 1)
+                       {
+                               camPos -= ort * 40;
+                       }
+                       else if (GlobalState.CamNum == 2)
+                       {
+                               camPos -= ort   * 40;
+                               camPos += camUp * 2;
+                       }
+                       else if (GlobalState.CamNum == 3)
+                       {
+                       }
+                       else if (GlobalState.CamNum == 4)
+                       {
+                               camPos  = new Vector3(0,76,0);
+                               camTarg = new Vector3(0,0,0);
+                               camUp   = new Vector3(0,0,-1);
+                       }
+
+                       iDevice.Clear(ClearFlags.Target|ClearFlags.ZBuffer, 
System.Drawing.Color.Black, 1.0f, 0);
+                       iDevice.BeginScene();
+                       iDevice.Transform.World = Matrix.Identity;
+                       iDevice.Transform.View = 
Matrix.LookAtLH(ClientUtils.Vec(camPos), ClientUtils.Vec(camTarg), 
ClientUtils.Vec(camUp));
+                       float aspect = 
((float)iDevice.PresentationParameters.BackBufferWidth) / 
iDevice.PresentationParameters.BackBufferHeight;
+                       iDevice.Transform.Projection = 
Matrix.PerspectiveFovLH((float)Math.PI/2.0f, aspect, 1.0f, 2000.0f);
+
+                       // draw stars
+                       iDevice.RenderState.Lighting = false;
+                       iDevice.RenderState.ZBufferEnable = false;
+                       iDevice.RenderState.CullMode = Cull.Clockwise;
+                       iDevice.TextureState[0].ColorOperation = 
TextureOperation.SelectArg1;
+                       iDevice.TextureState[0].ColorArgument1 = 
TextureArgument.TextureColor;
+                       iDevice.SetTexture(0, iStarTexture);
+                       iStars.DrawSubset(0);
+                       iDevice.RenderState.Lighting = true;
+                       iDevice.RenderState.ZBufferEnable = true;
+
+                       // draw ball(s) ?
+                       // should sort entitys by type
+                       iDevice.TextureState[0].ColorOperation = 
TextureOperation.SelectArg1;
+                       iDevice.TextureState[0].ColorArgument1 = 
TextureArgument.Diffuse;
+                       iDevice.Material = iBallMaterial;
+
+                       foreach(Entity e in GlobalState.Client.ThisFrame.Values)
+                       {
+                               if (e.Type == Ball.TYPE)
+                               {
+                                       iDevice.Transform.World = 
Matrix.Translation(ClientUtils.Vec(e.Position));
+                                       iBall.DrawSubset(0);
+                               }
+                       }
+
+                       // draw field
+                       iDevice.Transform.World = Matrix.Identity;
+                       iDevice.Material = iFieldMaterial;
+                       iDevice.Indices = iFieldBorderIndex;
+                       iDevice.VertexFormat = PCVertex.Format;
+                       iDevice.RenderState.Lighting = false;
+                       iDevice.RenderState.AlphaBlendEnable = true;
+                       iDevice.RenderState.ZBufferWriteEnable = false;
+                       iDevice.TextureState[0].ColorOperation = 
TextureOperation.SelectArg1;
+                       iDevice.TextureState[0].ColorArgument1 = 
TextureArgument.Diffuse;
+                       iDevice.TextureState[0].ColorArgument2 = 
TextureArgument.TextureColor;
+                       iDevice.TextureState[0].AlphaOperation = 
TextureOperation.SelectArg1;
+                       iDevice.TextureState[0].AlphaArgument1 = 
TextureArgument.Diffuse;
+                       iDevice.TextureState[0].AlphaArgument2 = 
TextureArgument.TextureColor;
+                       iDevice.SetStreamSource(0, iFieldVerts, 0, 
PCVertex.StrideSize);
+                       iDevice.DrawIndexedPrimitives(PrimitiveType.LineList, 
0, 0, 8, 0, 4);
+
+                       iDevice.RenderState.CullMode = Cull.None;               
        
+                       iDevice.TextureState[0].ColorOperation = 
TextureOperation.SelectArg1;
+                       iDevice.TextureState[0].ColorArgument1 = 
TextureArgument.Diffuse;
+                       iDevice.TextureState[0].ColorArgument2 = 
TextureArgument.TextureColor;
+                       iDevice.TextureState[0].AlphaOperation = 
TextureOperation.SelectArg1;
+                       iDevice.TextureState[0].AlphaArgument1 = 
TextureArgument.Diffuse;
+                   iDevice.TextureState[0].AlphaArgument2 = 
TextureArgument.TextureColor;
+                       iDevice.Indices = iFieldIndex;
+                       
iDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 8, 0, 2);
+                       iDevice.RenderState.ZBufferWriteEnable = true;
+                       iDevice.RenderState.AlphaBlendEnable = false;
+                       iDevice.RenderState.Lighting = true;
+
+                       // draw ships
+                       iDevice.RenderState.AlphaBlendEnable = true;
+                       iDevice.TextureState[0].ColorOperation = 
TextureOperation.Modulate;
+                       iDevice.TextureState[0].ColorArgument1 = 
TextureArgument.TextureColor;
+                       iDevice.TextureState[0].ColorArgument2 = 
TextureArgument.Diffuse;
+                       iDevice.TextureState[0].AlphaOperation = 
TextureOperation.SelectArg1;
+                       iDevice.TextureState[0].AlphaArgument1 = 
TextureArgument.TextureColor;
+
+                       // the material should be related to asset & texture
+                       iDevice.Material = iShipMaterial;
+                       iDevice.RenderState.FillMode = FillMode.Solid;
+                       iDevice.VertexFormat = 
CustomVertex.PositionNormalTextured.Format;
+                       iDevice.RenderState.CullMode = Cull.Clockwise;
+
+                       bool drawme = false;
+                       foreach(Entity e in 
GlobalState.Client.ThisFrame.Values) {
+                               if (e.ID == Me.ID) {
+                                       drawme = true;
+                               }
+                               else if (e.Type == Ship.TYPE) {
+                                       DrawShip((Ship)e);
+                               }
+                       }
+                       // allows local orientation to vary freely
+                       if (drawme)
+                               DrawShip(Me);
+                       iDevice.RenderState.AlphaBlendEnable = false;
+
+                       GlobalState.Console.Render();
+                       GlobalState.Chat.Render();
+                       GlobalState.PlayerList.Render();
+
+                       iDevice.EndScene();
+               }       
+       }
+}

Added: trunk/skorpion/skorpion.csproj
===================================================================
--- trunk/skorpion/skorpion.csproj                              (rev 0)
+++ trunk/skorpion/skorpion.csproj      2006-11-07 21:30:44 UTC (rev 116)
@@ -0,0 +1,179 @@
+<VisualStudioProject>
+    <CSHARP
+        ProjectType = "Local"
+        ProductVersion = "7.10.3077"
+        SchemaVersion = "2.0"
+        ProjectGuid = "{5745EA9D-6F0E-43E5-9904-42C13BA38731}"
+    >
+        <Build>
+            <Settings
+                ApplicationIcon = "App.ico"
+                AssemblyKeyContainerName = ""
+                AssemblyName = "skorpion"
+                AssemblyOriginatorKeyFile = ""
+                DefaultClientScript = "JScript"
+                DefaultHTMLPageLayout = "Grid"
+                DefaultTargetSchema = "IE50"
+                DelaySign = "false"
+                OutputType = "WinExe"
+                PreBuildEvent = ""
+                PostBuildEvent = ""
+                RootNamespace = "skorpion"
+                RunPostBuildEvent = "OnBuildSuccess"
+                StartupObject = ""
+            >
+                <Config
+                    Name = "Debug"
+                    AllowUnsafeBlocks = "false"
+                    BaseAddress = "285212672"
+                    CheckForOverflowUnderflow = "false"
+                    ConfigurationOverrideFile = ""
+                    DefineConstants = "DEBUG;TRACE"
+                    DocumentationFile = ""
+                    DebugSymbols = "true"
+                    FileAlignment = "4096"
+                    IncrementalBuild = "false"
+                    NoStdLib = "false"
+                    NoWarn = ""
+                    Optimize = "false"
+                    OutputPath = "bin\Debug\"
+                    RegisterForComInterop = "false"
+                    RemoveIntegerChecks = "false"
+                    TreatWarningsAsErrors = "false"
+                    WarningLevel = "4"
+                />
+                <Config
+                    Name = "Release"
+                    AllowUnsafeBlocks = "false"
+                    BaseAddress = "285212672"
+                    CheckForOverflowUnderflow = "false"
+                    ConfigurationOverrideFile = ""
+                    DefineConstants = "TRACE"
+                    DocumentationFile = ""
+                    DebugSymbols = "false"
+                    FileAlignment = "4096"
+                    IncrementalBuild = "false"
+                    NoStdLib = "false"
+                    NoWarn = ""
+                    Optimize = "true"
+                    OutputPath = "bin\Release\"
+                    RegisterForComInterop = "false"
+                    RemoveIntegerChecks = "false"
+                    TreatWarningsAsErrors = "false"
+                    WarningLevel = "4"
+                />
+            </Settings>
+            <References>
+                <Reference
+                    Name = "System"
+                    AssemblyName = "System"
+                    HintPath = 
"..\..\..\..\..\WINNT\Microsoft.NET\Framework\v1.1.4322\System.dll"
+                />
+                <Reference
+                    Name = "System.Data"
+                    AssemblyName = "System.Data"
+                    HintPath = 
"..\..\..\..\..\WINNT\Microsoft.NET\Framework\v1.1.4322\System.Data.dll"
+                />
+                <Reference
+                    Name = "System.Drawing"
+                    AssemblyName = "System.Drawing"
+                    HintPath = 
"..\..\..\..\..\WINNT\Microsoft.NET\Framework\v1.1.4322\System.Drawing.dll"
+                />
+                <Reference
+                    Name = "System.Windows.Forms"
+                    AssemblyName = "System.Windows.Forms"
+                    HintPath = 
"..\..\..\..\..\WINNT\Microsoft.NET\Framework\v1.1.4322\System.Windows.Forms.dll"
+                />
+                <Reference
+                    Name = "System.XML"
+                    AssemblyName = "System.Xml"
+                    HintPath = 
"..\..\..\..\..\WINNT\Microsoft.NET\Framework\v1.1.4322\System.XML.dll"
+                />
+                <Reference
+                    Name = "server"
+                    Project = "{62CECD29-0D9B-4D68-9D4B-F9BBAA225758}"
+                    Package = "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}"
+                />
+                <Reference
+                    Name = "Microsoft.DirectX.Direct3D"
+                    AssemblyName = "Microsoft.DirectX.Direct3D"
+                    HintPath = "..\DXLINK\Microsoft.DirectX.Direct3D.dll"
+                />
+                <Reference
+                    Name = "Microsoft.DirectX.Direct3DX"
+                    AssemblyName = "Microsoft.DirectX.Direct3DX"
+                    HintPath = "..\DXLINK\Microsoft.DirectX.Direct3DX.dll"
+                />
+                <Reference
+                    Name = "Microsoft.DirectX.DirectInput"
+                    AssemblyName = "Microsoft.DirectX.DirectInput"
+                    HintPath = "..\DXLINK\Microsoft.DirectX.DirectInput.dll"
+                />
+                <Reference
+                    Name = "Microsoft.DirectX"
+                    AssemblyName = "Microsoft.DirectX"
+                    HintPath = "..\DXLINK\Microsoft.DirectX.dll"
+                />
+            </References>
+        </Build>
+        <Files>
+            <Include>
+                <File
+                    RelPath = "App.ico"
+                    BuildAction = "Content"
+                />
+                <File
+                    RelPath = "AssemblyInfo.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+                <File
+                    RelPath = "Assets.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+                <File
+                    RelPath = "Chat.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+                <File
+                    RelPath = "Client.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+                <File
+                    RelPath = "Console.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+                <File
+                    RelPath = "Controller.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+                <File
+                    RelPath = "Form1.cs"
+                    SubType = "Form"
+                    BuildAction = "Compile"
+                />
+                <File
+                    RelPath = "Form1.resx"
+                    DependentUpon = "Form1.cs"
+                    BuildAction = "EmbeddedResource"
+                />
+                <File
+                    RelPath = "PlayerList.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+                <File
+                    RelPath = "skorpion.cs"
+                    SubType = "Code"
+                    BuildAction = "Compile"
+                />
+            </Include>
+        </Files>
+    </CSHARP>
+</VisualStudioProject>
+

Added: trunk/skorpion/skorpion.sln
===================================================================
--- trunk/skorpion/skorpion.sln                         (rev 0)
+++ trunk/skorpion/skorpion.sln 2006-11-07 21:30:44 UTC (rev 116)
@@ -0,0 +1,37 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "server", 
"server\server.csproj", "{62CECD29-0D9B-4D68-9D4B-F9BBAA225758}"
+       ProjectSection(ProjectDependencies) = postProject
+       EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "dedicated", 
"dedicated\dedicated.csproj", "{4902F9DD-5E54-4634-84D1-D2FB9440E3C2}"
+       ProjectSection(ProjectDependencies) = postProject
+       EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "skorpion", 
"skorpion.csproj", "{5745EA9D-6F0E-43E5-9904-42C13BA38731}"
+       ProjectSection(ProjectDependencies) = postProject
+       EndProjectSection
+EndProject
+Global
+       GlobalSection(SolutionConfiguration) = preSolution
+               Debug = Debug
+               Release = Release
+       EndGlobalSection
+       GlobalSection(ProjectConfiguration) = postSolution
+               {62CECD29-0D9B-4D68-9D4B-F9BBAA225758}.Debug.ActiveCfg = 
Debug|.NET
+               {62CECD29-0D9B-4D68-9D4B-F9BBAA225758}.Debug.Build.0 = 
Debug|.NET
+               {62CECD29-0D9B-4D68-9D4B-F9BBAA225758}.Release.ActiveCfg = 
Release|.NET
+               {62CECD29-0D9B-4D68-9D4B-F9BBAA225758}.Release.Build.0 = 
Release|.NET
+               {4902F9DD-5E54-4634-84D1-D2FB9440E3C2}.Debug.ActiveCfg = 
Debug|.NET
+               {4902F9DD-5E54-4634-84D1-D2FB9440E3C2}.Debug.Build.0 = 
Debug|.NET
+               {4902F9DD-5E54-4634-84D1-D2FB9440E3C2}.Release.ActiveCfg = 
Release|.NET
+               {4902F9DD-5E54-4634-84D1-D2FB9440E3C2}.Release.Build.0 = 
Release|.NET
+               {5745EA9D-6F0E-43E5-9904-42C13BA38731}.Debug.ActiveCfg = 
Debug|.NET
+               {5745EA9D-6F0E-43E5-9904-42C13BA38731}.Debug.Build.0 = 
Debug|.NET
+               {5745EA9D-6F0E-43E5-9904-42C13BA38731}.Release.ActiveCfg = 
Release|.NET
+               {5745EA9D-6F0E-43E5-9904-42C13BA38731}.Release.Build.0 = 
Release|.NET
+       EndGlobalSection
+       GlobalSection(ExtensibilityGlobals) = postSolution
+       EndGlobalSection
+       GlobalSection(ExtensibilityAddIns) = postSolution
+       EndGlobalSection
+EndGlobal





reply via email to

[Prev in Thread] Current Thread [Next in Thread]