// private methods
            private void ChangeMoreToComeFromTrueToFalse()
            {
                var flagsPosition = _messageStartPosition + 16;

                _stream.Position = flagsPosition;
                var flags = (OpMsgFlags)_stream.ReadInt32();

                if ((flags & OpMsgFlags.MoreToCome) == 0)
                {
                    throw new InvalidOperationException("MoreToCome was not true.");
                }
                flags            = flags & ~OpMsgFlags.MoreToCome;
                _stream.Position = flagsPosition;
                _stream.WriteInt32((int)flags);
            }
        private void CopyType1Section(BsonStream inputStream, BsonStream outputStream)
        {
            var payloadType = (PayloadType)inputStream.ReadByte();

            if (payloadType != PayloadType.Type1)
            {
                throw new FormatException("Expected subsequent sections to be of type 1.");
            }

            var sectionStartPosition = inputStream.Position;
            var sectionSize          = inputStream.ReadInt32();
            var sectionEndPosition   = sectionStartPosition + sectionSize;
            var identifier           = inputStream.ReadCString(Utf8Encodings.Lenient);

            outputStream.WriteByte((byte)BsonType.Array);
            outputStream.WriteCString(identifier);
            var arrayStartPosition = outputStream.Position;

            outputStream.WriteInt32(0); // array length will be backpatched
            var index = 0;

            while (inputStream.Position < sectionEndPosition)
            {
                outputStream.WriteByte((byte)BsonType.Document);
                outputStream.WriteCString(index.ToString());
                CopyBsonDocument(inputStream, outputStream);
                index++;
            }
            outputStream.WriteByte(0);
            outputStream.BackpatchSize(arrayStartPosition);
        }
            // private methods
            private void ChangeWFrom0To1()
            {
                var wPosition = FindWPosition();

                _stream.Position = wPosition;
                var w = _stream.ReadInt32();

                if (w != 0)
                {
                    throw new InvalidOperationException("w was not 0.");
                }
                _stream.Position = wPosition;
                _stream.WriteInt32(1);
            }