public static Formats.Skel ParseSkel(this SsbhParser parser)
        {
            var result = new Formats.Skel();

            result.Magic        = parser.ReadUInt32();
            result.MajorVersion = parser.ReadUInt16();
            result.MinorVersion = parser.ReadUInt16();
            {
                // TODO: Extract this code to a method?
                long absoluteOffset   = parser.ReadRelativeGetAbsoluteOffset();
                long elementCount     = parser.ReadInt64();
                long previousPosition = parser.Position;
                parser.Seek(absoluteOffset);


                result.BoneEntries = new Formats.SkelBoneEntry[elementCount];
                for (int i = 0; i < elementCount; i++)
                {
                    result.BoneEntries[i] = parser.ParseSkelBoneEntry();
                }

                parser.Seek(previousPosition);
            }
            {
                // TODO: Extract this code to a method?
                long absoluteOffset   = parser.ReadRelativeGetAbsoluteOffset();
                long elementCount     = parser.ReadInt64();
                long previousPosition = parser.Position;
                parser.Seek(absoluteOffset);


                result.WorldTransform = new Formats.Matrix4x4[elementCount];
                for (int i = 0; i < elementCount; i++)
                {
                    result.WorldTransform[i] = parser.ReadMatrix4x4();
                }

                parser.Seek(previousPosition);
            }
            {
                // TODO: Extract this code to a method?
                long absoluteOffset   = parser.ReadRelativeGetAbsoluteOffset();
                long elementCount     = parser.ReadInt64();
                long previousPosition = parser.Position;
                parser.Seek(absoluteOffset);


                result.InvWorldTransform = new Formats.Matrix4x4[elementCount];
                for (int i = 0; i < elementCount; i++)
                {
                    result.InvWorldTransform[i] = parser.ReadMatrix4x4();
                }

                parser.Seek(previousPosition);
            }
            {
                // TODO: Extract this code to a method?
                long absoluteOffset   = parser.ReadRelativeGetAbsoluteOffset();
                long elementCount     = parser.ReadInt64();
                long previousPosition = parser.Position;
                parser.Seek(absoluteOffset);


                result.Transform = new Formats.Matrix4x4[elementCount];
                for (int i = 0; i < elementCount; i++)
                {
                    result.Transform[i] = parser.ReadMatrix4x4();
                }

                parser.Seek(previousPosition);
            }
            {
                // TODO: Extract this code to a method?
                long absoluteOffset   = parser.ReadRelativeGetAbsoluteOffset();
                long elementCount     = parser.ReadInt64();
                long previousPosition = parser.Position;
                parser.Seek(absoluteOffset);


                result.InvTransform = new Formats.Matrix4x4[elementCount];
                for (int i = 0; i < elementCount; i++)
                {
                    result.InvTransform[i] = parser.ReadMatrix4x4();
                }

                parser.Seek(previousPosition);
            }
            return(result);
        }