public RacialGenderScalingParameter(RacialScalingParameter rsp, XivSubRace race, XivGender gender)
        {
            Race   = race;
            Gender = gender;

            if (gender == XivGender.Male)
            {
                MinSize = rsp.MaleMinSize;
                MaxSize = rsp.MaleMaxSize;
                MinTail = rsp.MaleMinTail;
                MaxTail = rsp.MaleMaxTail;
            }
            else if (gender == XivGender.Female)
            {
                MinSize = rsp.FemaleMinSize;
                MaxSize = rsp.FemaleMaxSize;
                MinTail = rsp.FemaleMinTail;
                MaxTail = rsp.FemaleMaxTail;

                BustMinX = rsp.BustMinX;
                BustMinY = rsp.BustMinY;
                BustMinZ = rsp.BustMinZ;

                BustMaxX = rsp.BustMaxX;
                BustMaxY = rsp.BustMaxY;
                BustMaxZ = rsp.BustMaxZ;
            }
        }
        public CharaMakeParameterSet(byte[] data)
        {
            ColorPixels.Capacity = MetadataStart / 4;

            var nextOffset = 0;

            for (int i = 0; i < MetadataStart; i += 4)
            {
                var r = data[i];
                var g = data[i + 1];
                var b = data[i + 2];
                var a = data[i + 3];

                ColorPixels.Add(new byte[4] {
                    r, g, b, a
                });
                nextOffset = i + 4;
            }

            if (nextOffset != MetadataStart)
            {
                throw new Exception("CMP Format Changed - Unable to read all CMP data.");
            }

            var rem     = data.Length - MetadataStart;
            var entries = rem / RacialScalingParameter.TotalByteSize;

            for (int i = 0; i < entries; i++)
            {
                var offset = MetadataStart + (i * RacialScalingParameter.TotalByteSize);
                var arr    = new byte[RacialScalingParameter.TotalByteSize];

                Array.Copy(data, offset, arr, 0, RacialScalingParameter.TotalByteSize);

                var rsp = new RacialScalingParameter(arr);
                RawRacialData.Add(rsp);

                nextOffset = offset + RacialScalingParameter.TotalByteSize;
            }

            if (nextOffset != data.Length)
            {
                throw new Exception("CMP Format Changed - Unable to read all CMP data.");
            }
        }