private void ParseBundleFormat6(EndianStream stream, bool isPadding) { long bundleSize = stream.ReadInt64(); int compressSize = stream.ReadInt32(); int decompressSize = stream.ReadInt32(); int flag = stream.ReadInt32(); if (isPadding) { stream.BaseStream.Position++; } long blockPosition; long dataPosition; int isDataFirst = flag & 0x80; if (isDataFirst != 0) { blockPosition = stream.BaseStream.Length - compressSize; dataPosition = stream.BaseStream.Position; } else { blockPosition = stream.BaseStream.Position; dataPosition = stream.BaseStream.Position + compressSize; } stream.BaseStream.Position = blockPosition; BundleCompressType compressType = (BundleCompressType)(flag & 0x3F); switch (compressType) { case BundleCompressType.None: ParseBundle6BlockInfo(stream, ref blockPosition, stream, ref dataPosition); ParseBundle6Files(stream, ref blockPosition, stream, ref dataPosition); break; case BundleCompressType.LZMA: using (MemoryStream memStream = SevenZipHelper.DecompressLZMASSizeStream(stream.BaseStream, compressSize)) { using (EndianStream decBlockStream = new EndianStream(memStream, EndianType.BigEndian)) { // update position acerding to newly created stream blockPosition = 0; using (EndianStream decDataStream = ParseBundle6BlockInfo(decBlockStream, ref blockPosition, stream, ref dataPosition)) { ParseBundle6Files(decBlockStream, ref blockPosition, decDataStream, ref dataPosition); } } } break; case BundleCompressType.LZ4: case BundleCompressType.LZ4HZ: using (MemoryStream memStream = new MemoryStream(decompressSize)) { using (Lz4Stream lzStream = new Lz4Stream(stream.BaseStream, compressSize)) { lzStream.Read(memStream, decompressSize); } using (EndianStream decBlockStream = new EndianStream(memStream, EndianType.BigEndian)) { // update position acerding to newly created stream blockPosition = 0; using (EndianStream decDataStream = ParseBundle6BlockInfo(decBlockStream, ref blockPosition, stream, ref dataPosition)) { ParseBundle6Files(decBlockStream, ref blockPosition, decDataStream, ref dataPosition); } } } break; default: throw new NotImplementedException($"Bundle compression '{compressType}' isn't supported"); } }