public void Serialize(SerializingContainer Container)
            {
                //Sections
                int count = 0;

                if (!Container.isLoading)
                {
                    count = Sections.Count();
                }
                count = Container + count;
                if (Container.isLoading)
                {
                    Sections = new List <SectionStruct>();
                    for (int i = 0; i < count; i++)
                    {
                        Sections.Add(new SectionStruct());
                    }
                }
                for (int i = 0; i < count; i++)
                {
                    SectionStruct sec = Sections[i];
                    sec.Serialize(Container);
                    Sections[i] = sec;
                }
                //IndexBuffer
                if (Container.isLoading)
                {
                    IndexBuffer = new MultiSizeIndexContainerStruct();
                }
                IndexBuffer.Serialize(Container);
                //Active Bones
                if (!Container.isLoading)
                {
                    count = ActiveBones.Count();
                }
                count = Container + count;
                if (Container.isLoading)
                {
                    ActiveBones = new List <ushort>();
                    for (int i = 0; i < count; i++)
                    {
                        ActiveBones.Add(0);
                    }
                }
                for (int i = 0; i < count; i++)
                {
                    ActiveBones[i] = Container + ActiveBones[i];
                }
                //Chunks
                if (!Container.isLoading)
                {
                    count = Chunks.Count();
                }
                count = Container + count;
                if (Container.isLoading)
                {
                    Chunks = new List <SkelMeshChunkStruct>();
                    for (int i = 0; i < count; i++)
                    {
                        Chunks.Add(new SkelMeshChunkStruct());
                    }
                }
                for (int i = 0; i < count; i++)
                {
                    SkelMeshChunkStruct c = Chunks[i];
                    c.Serialize(Container);
                    Chunks[i] = c;
                }
                //Size
                Size = Container + Size;
                //NumVertices
                NumVertices = Container + NumVertices;
                //RequiredBones
                if (!Container.isLoading)
                {
                    count = RequiredBones.Count();
                }
                count = Container + count;
                if (Container.isLoading)
                {
                    RequiredBones = new List <byte>();
                    for (int i = 0; i < count; i++)
                    {
                        RequiredBones.Add(0);
                    }
                }
                for (int i = 0; i < count; i++)
                {
                    RequiredBones[i] = Container + RequiredBones[i];
                }
                //RawPointIndicesFlag
                RawPointIndicesFlag = Container + RawPointIndicesFlag;
                //RawPointIndicesCount
                RawPointIndicesCount = Container + RawPointIndicesCount;
                //RawPointIndicesSize
                RawPointIndicesSize = Container + RawPointIndicesSize;
                //RawPointIndicesOffset
                RawPointIndicesOffset = Container + RawPointIndicesOffset;
                //RawPointIndices
                if (Container.isLoading)
                {
                    RawPointIndices = new List <int>();
                    for (int i = 0; i < RawPointIndicesCount; i++)
                    {
                        RawPointIndices.Add(0);
                    }
                }
                for (int i = 0; i < RawPointIndicesCount; i++)
                {
                    RawPointIndices[i] = Container + RawPointIndices[i];
                }
                //NumTexCoords
                NumTexCoords = Container + NumTexCoords;
                //VertexBufferGPUSkin
                if (Container.isLoading)
                {
                    VertexBufferGPUSkin = new VertexBufferGPUSkinStruct();
                }
                VertexBufferGPUSkin.Serialize(Container);
                //unknown stuff
                Unk1 = Container + Unk1;
                Unk2 = Container + Unk2;
                Unk3 = Container + Unk3;
                //GPU index buffer
                IndexSize = Container + IndexSize;
                if (!Container.isLoading)
                {
                    count = IndexBufferGPUSkin.Count();
                }
                count = Container + count;
                if (Container.isLoading)
                {
                    IndexBufferGPUSkin = new List <ushort>();
                    for (int i = 0; i < count; i++)
                    {
                        IndexBufferGPUSkin.Add(0);
                    }
                }
                for (int i = 0; i < count; i++)
                {
                    IndexBufferGPUSkin[i] = Container + IndexBufferGPUSkin[i];
                }
            }
            public void Serialize(SerializingContainer Container, MEVersion version)
            {
                //Sections
                int count = 0;

                if (!Container.isLoading)
                {
                    count = Sections.Count();
                }
                count = Container + count;
                if (Container.isLoading)
                {
                    Sections = new List <SectionStruct>();
                    for (int i = 0; i < count; i++)
                    {
                        Sections.Add(new SectionStruct());
                    }
                }
                for (int i = 0; i < count; i++)
                {
                    SectionStruct sec = Sections[i];
                    sec.Serialize(Container, version);
                    Sections[i] = sec;
                }
                //IndexBuffer
                if (Container.isLoading)
                {
                    IndexBuffer = new MultiSizeIndexContainerStruct();
                }
                IndexBuffer.Serialize(Container);
                //unk1
                Unk1 = Container + Unk1;
                if (Unk1 > 0)
                {
                    ushort[] indices = new ushort[Unk1];
                    for (int i = 0; i < Unk1; i++)
                    {
                        indices[i] = Container + indices[i];
                    }
                }
                //Active Bones
                int activeBonesCount = 0;

                if (!Container.isLoading)
                {
                    activeBonesCount = (short)ActiveBones.Count();
                }
                activeBonesCount = Container + activeBonesCount;
                if (Container.isLoading)
                {
                    ActiveBones = new List <ushort>();
                    for (int i = 0; i < activeBonesCount; i++)
                    {
                        ActiveBones.Add(0);
                    }
                }
                for (int i = 0; i < activeBonesCount; i++)
                {
                    ActiveBones[i] = Container + ActiveBones[i];
                }
                //unk2
                Unk2 = Container + Unk2;
                if (Unk2 > 0)
                {
                    byte[] f74 = new byte[Unk2];
                    for (int i = 0; i < Unk2; i++)
                    {
                        f74[i] = Container + f74[i];
                    }
                }
                //Chunks
                if (!Container.isLoading)
                {
                    count = Chunks.Count();
                }
                count = Container + count;
                if (Container.isLoading)
                {
                    Chunks = new List <SkelMeshChunkStruct>();
                    for (int i = 0; i < count; i++)
                    {
                        Chunks.Add(new SkelMeshChunkStruct());
                    }
                }
                for (int i = 0; i < count; i++)
                {
                    SkelMeshChunkStruct c = Chunks[i];
                    c.Serialize(Container);
                    Chunks[i] = c;
                }
                //Size
                Size = Container + Size;
                //NumVertices
                NumVertices = Container + NumVertices;
                //unk3
                Unk3 = Container + Unk3;
                if (Unk3 > 0)
                {
                    for (int i = 0; i < Unk3; i++)
                    {
                        int[] fedge3 = new int[4];
                        fedge3[0] = Container + fedge3[0];
                        fedge3[1] = Container + fedge3[1];
                        fedge3[2] = Container + fedge3[2];
                        fedge3[3] = Container + fedge3[3];
                    }
                }
                //RequiredBones (f24)
                if (!Container.isLoading)
                {
                    count = RequiredBones.Count();
                }
                count = Container + count;
                if (Container.isLoading)
                {
                    RequiredBones = new List <byte>();
                    for (int i = 0; i < count; i++)
                    {
                        RequiredBones.Add(0);
                    }
                }
                for (int i = 0; i < count; i++)
                {
                    RequiredBones[i] = Container + RequiredBones[i];
                }
                //RawPointIndicesFlag
                RawPointIndicesFlag = Container + RawPointIndicesFlag;
                //RawPointIndicesCount
                RawPointIndicesCount = Container + RawPointIndicesCount;
                RawPointIndices      = new List <ushort>();
                if (RawPointIndicesCount > 0)
                {
                    //RawPointIndices
                    if (Container.isLoading)
                    {
                        for (int i = 0; i < RawPointIndicesCount; i++)
                        {
                            RawPointIndices.Add(0);
                        }
                    }
                    for (int i = 0; i < RawPointIndicesCount; i++)
                    {
                        RawPointIndices[i] = Container + RawPointIndices[i];
                    }
                }
                //RawPointIndicesSize
                RawPointIndicesSize = Container + RawPointIndicesSize;
                //RawPointIndicesOffset
                RawPointIndicesOffset = Container + RawPointIndicesOffset;

                //VertexBufferGPUSkin
                if (Container.isLoading)
                {
                    VertexBufferGPUSkin = new VertexBufferGPUSkinStruct();
                }

                VertexBufferGPUSkin.Serialize(Container, version);

                //unk4
                Unk4 = Container + Unk4;
            }