public class com.mongodb.connection.ByteBufferBsonOutput extends org.bson.io.OutputBuffer
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: com.mongodb.connection.ByteBufferBsonOutput
  super_class: org.bson.io.OutputBuffer
{
  private static final int MAX_SHIFT;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 31

  private static final int INITIAL_SHIFT;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 10

  public static final int INITIAL_BUFFER_SIZE;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 1024

  public static final int MAX_BUFFER_SIZE;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 16777216

  private final com.mongodb.connection.BufferProvider bufferProvider;
    descriptor: Lcom/mongodb/connection/BufferProvider;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.util.List<org.bson.ByteBuf> bufferList;
    descriptor: Ljava/util/List;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/List<Lorg/bson/ByteBuf;>;

  private int curBufferIndex;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  private int position;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  private boolean closed;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  public void <init>(com.mongodb.connection.BufferProvider);
    descriptor: (Lcom/mongodb/connection/BufferProvider;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // com.mongodb.connection.ByteBufferBsonOutput this
        start local 1 // com.mongodb.connection.BufferProvider bufferProvider
         0: .line 53
            aload 0 /* this */
            invokespecial org.bson.io.OutputBuffer.<init>:()V
         1: .line 43
            aload 0 /* this */
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            putfield com.mongodb.connection.ByteBufferBsonOutput.bufferList:Ljava/util/List;
         2: .line 44
            aload 0 /* this */
            iconst_0
            putfield com.mongodb.connection.ByteBufferBsonOutput.curBufferIndex:I
         3: .line 45
            aload 0 /* this */
            iconst_0
            putfield com.mongodb.connection.ByteBufferBsonOutput.position:I
         4: .line 54
            aload 0 /* this */
            ldc "bufferProvider"
            aload 1 /* bufferProvider */
            invokestatic com.mongodb.assertions.Assertions.notNull:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.mongodb.connection.BufferProvider
            putfield com.mongodb.connection.ByteBufferBsonOutput.bufferProvider:Lcom/mongodb/connection/BufferProvider;
         5: .line 55
            return
        end local 1 // com.mongodb.connection.BufferProvider bufferProvider
        end local 0 // com.mongodb.connection.ByteBufferBsonOutput this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    6     0            this  Lcom/mongodb/connection/ByteBufferBsonOutput;
            0    6     1  bufferProvider  Lcom/mongodb/connection/BufferProvider;
    MethodParameters:
                Name  Flags
      bufferProvider  final

  public void writeBytes(byte[], int, int);
    descriptor: ([BII)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=8, args_size=4
        start local 0 // com.mongodb.connection.ByteBufferBsonOutput this
        start local 1 // byte[] bytes
        start local 2 // int offset
        start local 3 // int length
         0: .line 59
            aload 0 /* this */
            invokevirtual com.mongodb.connection.ByteBufferBsonOutput.ensureOpen:()V
         1: .line 61
            iload 2 /* offset */
            istore 4 /* currentOffset */
        start local 4 // int currentOffset
         2: .line 62
            iload 3 /* length */
            istore 5 /* remainingLen */
        start local 5 // int remainingLen
         3: .line 63
            goto 9
         4: .line 64
      StackMap locals: int int
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.mongodb.connection.ByteBufferBsonOutput.getCurrentByteBuffer:()Lorg/bson/ByteBuf;
            astore 6 /* buf */
        start local 6 // org.bson.ByteBuf buf
         5: .line 65
            aload 6 /* buf */
            invokeinterface org.bson.ByteBuf.remaining:()I
            iload 5 /* remainingLen */
            invokestatic java.lang.Math.min:(II)I
            istore 7 /* bytesToPutInCurrentBuffer */
        start local 7 // int bytesToPutInCurrentBuffer
         6: .line 66
            aload 6 /* buf */
            aload 1 /* bytes */
            iload 4 /* currentOffset */
            iload 7 /* bytesToPutInCurrentBuffer */
            invokeinterface org.bson.ByteBuf.put:([BII)Lorg/bson/ByteBuf;
            pop
         7: .line 67
            iload 5 /* remainingLen */
            iload 7 /* bytesToPutInCurrentBuffer */
            isub
            istore 5 /* remainingLen */
         8: .line 68
            iload 4 /* currentOffset */
            iload 7 /* bytesToPutInCurrentBuffer */
            iadd
            istore 4 /* currentOffset */
        end local 7 // int bytesToPutInCurrentBuffer
        end local 6 // org.bson.ByteBuf buf
         9: .line 63
      StackMap locals:
      StackMap stack:
            iload 5 /* remainingLen */
            ifgt 4
        10: .line 70
            aload 0 /* this */
            dup
            getfield com.mongodb.connection.ByteBufferBsonOutput.position:I
            iload 3 /* length */
            iadd
            putfield com.mongodb.connection.ByteBufferBsonOutput.position:I
        11: .line 71
            return
        end local 5 // int remainingLen
        end local 4 // int currentOffset
        end local 3 // int length
        end local 2 // int offset
        end local 1 // byte[] bytes
        end local 0 // com.mongodb.connection.ByteBufferBsonOutput this
      LocalVariableTable:
        Start  End  Slot                       Name  Signature
            0   12     0                       this  Lcom/mongodb/connection/ByteBufferBsonOutput;
            0   12     1                      bytes  [B
            0   12     2                     offset  I
            0   12     3                     length  I
            2   12     4              currentOffset  I
            3   12     5               remainingLen  I
            5    9     6                        buf  Lorg/bson/ByteBuf;
            6    9     7  bytesToPutInCurrentBuffer  I
    MethodParameters:
        Name  Flags
      bytes   final
      offset  final
      length  final

  public void writeByte(int);
    descriptor: (I)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // com.mongodb.connection.ByteBufferBsonOutput this
        start local 1 // int value
         0: .line 75
            aload 0 /* this */
            invokevirtual com.mongodb.connection.ByteBufferBsonOutput.ensureOpen:()V
         1: .line 77
            aload 0 /* this */
            invokevirtual com.mongodb.connection.ByteBufferBsonOutput.getCurrentByteBuffer:()Lorg/bson/ByteBuf;
            iload 1 /* value */
            i2b
            invokeinterface org.bson.ByteBuf.put:(B)Lorg/bson/ByteBuf;
            pop
         2: .line 78
            aload 0 /* this */
            dup
            getfield com.mongodb.connection.ByteBufferBsonOutput.position:I
            iconst_1
            iadd
            putfield com.mongodb.connection.ByteBufferBsonOutput.position:I
         3: .line 79
            return
        end local 1 // int value
        end local 0 // com.mongodb.connection.ByteBufferBsonOutput this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    4     0   this  Lcom/mongodb/connection/ByteBufferBsonOutput;
            0    4     1  value  I
    MethodParameters:
       Name  Flags
      value  final

  private org.bson.ByteBuf getCurrentByteBuffer();
    descriptor: ()Lorg/bson/ByteBuf;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // com.mongodb.connection.ByteBufferBsonOutput this
         0: .line 82
            aload 0 /* this */
            aload 0 /* this */
            getfield com.mongodb.connection.ByteBufferBsonOutput.curBufferIndex:I
            invokevirtual com.mongodb.connection.ByteBufferBsonOutput.getByteBufferAtIndex:(I)Lorg/bson/ByteBuf;
            astore 1 /* curByteBuffer */
        start local 1 // org.bson.ByteBuf curByteBuffer
         1: .line 83
            aload 1 /* curByteBuffer */
            invokeinterface org.bson.ByteBuf.hasRemaining:()Z
            ifeq 3
         2: .line 84
            aload 1 /* curByteBuffer */
            areturn
         3: .line 87
      StackMap locals: org.bson.ByteBuf
      StackMap stack:
            aload 0 /* this */
            dup
            getfield com.mongodb.connection.ByteBufferBsonOutput.curBufferIndex:I
            iconst_1
            iadd
            putfield com.mongodb.connection.ByteBufferBsonOutput.curBufferIndex:I
         4: .line 88
            aload 0 /* this */
            aload 0 /* this */
            getfield com.mongodb.connection.ByteBufferBsonOutput.curBufferIndex:I
            invokevirtual com.mongodb.connection.ByteBufferBsonOutput.getByteBufferAtIndex:(I)Lorg/bson/ByteBuf;
            areturn
        end local 1 // org.bson.ByteBuf curByteBuffer
        end local 0 // com.mongodb.connection.ByteBufferBsonOutput this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    5     0           this  Lcom/mongodb/connection/ByteBufferBsonOutput;
            1    5     1  curByteBuffer  Lorg/bson/ByteBuf;

  private org.bson.ByteBuf getByteBufferAtIndex(int);
    descriptor: (I)Lorg/bson/ByteBuf;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // com.mongodb.connection.ByteBufferBsonOutput this
        start local 1 // int index
         0: .line 92
            aload 0 /* this */
            getfield com.mongodb.connection.ByteBufferBsonOutput.bufferList:Ljava/util/List;
            invokeinterface java.util.List.size:()I
            iload 1 /* index */
            iconst_1
            iadd
            if_icmpge 5
         1: .line 93
            aload 0 /* this */
            getfield com.mongodb.connection.ByteBufferBsonOutput.bufferList:Ljava/util/List;
            aload 0 /* this */
            getfield com.mongodb.connection.ByteBufferBsonOutput.bufferProvider:Lcom/mongodb/connection/BufferProvider;
            iload 1 /* index */
            bipush 21
            if_icmplt 3
         2: .line 94
            ldc 16777216
            goto 4
         3: .line 95
      StackMap locals: com.mongodb.connection.ByteBufferBsonOutput int
      StackMap stack: java.util.List com.mongodb.connection.BufferProvider
            sipush 1024
            iload 1 /* index */
            ishl
            ldc 16777216
            invokestatic java.lang.Math.min:(II)I
         4: .line 93
      StackMap locals: com.mongodb.connection.ByteBufferBsonOutput int
      StackMap stack: java.util.List com.mongodb.connection.BufferProvider int
            invokeinterface com.mongodb.connection.BufferProvider.getBuffer:(I)Lorg/bson/ByteBuf;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
         5: .line 97
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.mongodb.connection.ByteBufferBsonOutput.bufferList:Ljava/util/List;
            iload 1 /* index */
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast org.bson.ByteBuf
            areturn
        end local 1 // int index
        end local 0 // com.mongodb.connection.ByteBufferBsonOutput this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    6     0   this  Lcom/mongodb/connection/ByteBufferBsonOutput;
            0    6     1  index  I
    MethodParameters:
       Name  Flags
      index  final

  public int getPosition();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.mongodb.connection.ByteBufferBsonOutput this
         0: .line 102
            aload 0 /* this */
            invokevirtual com.mongodb.connection.ByteBufferBsonOutput.ensureOpen:()V
         1: .line 103
            aload 0 /* this */
            getfield com.mongodb.connection.ByteBufferBsonOutput.position:I
            ireturn
        end local 0 // com.mongodb.connection.ByteBufferBsonOutput this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/mongodb/connection/ByteBufferBsonOutput;

  public int getSize();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.mongodb.connection.ByteBufferBsonOutput this
         0: .line 108
            aload 0 /* this */
            invokevirtual com.mongodb.connection.ByteBufferBsonOutput.ensureOpen:()V
         1: .line 109
            aload 0 /* this */
            getfield com.mongodb.connection.ByteBufferBsonOutput.position:I
            ireturn
        end local 0 // com.mongodb.connection.ByteBufferBsonOutput this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/mongodb/connection/ByteBufferBsonOutput;

  protected void write(int, int);
    descriptor: (II)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=8, locals=5, args_size=3
        start local 0 // com.mongodb.connection.ByteBufferBsonOutput this
        start local 1 // int absolutePosition
        start local 2 // int value
         0: .line 113
            aload 0 /* this */
            invokevirtual com.mongodb.connection.ByteBufferBsonOutput.ensureOpen:()V
         1: .line 115
            iload 1 /* absolutePosition */
            ifge 3
         2: .line 116
            new java.lang.IllegalArgumentException
            dup
            ldc "position must be >= 0 but was %d"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            iload 1 /* absolutePosition */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         3: .line 118
      StackMap locals:
      StackMap stack:
            iload 1 /* absolutePosition */
            aload 0 /* this */
            getfield com.mongodb.connection.ByteBufferBsonOutput.position:I
            iconst_1
            isub
            if_icmple 5
         4: .line 119
            new java.lang.IllegalArgumentException
            dup
            ldc "position must be <= %d but was %d"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* this */
            getfield com.mongodb.connection.ByteBufferBsonOutput.position:I
            iconst_1
            isub
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            dup
            iconst_1
            iload 1 /* absolutePosition */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         5: .line 122
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 1 /* absolutePosition */
            invokevirtual com.mongodb.connection.ByteBufferBsonOutput.getBufferPositionPair:(I)Lcom/mongodb/connection/ByteBufferBsonOutput$BufferPositionPair;
            astore 3 /* bufferPositionPair */
        start local 3 // com.mongodb.connection.ByteBufferBsonOutput$BufferPositionPair bufferPositionPair
         6: .line 123
            aload 0 /* this */
            aload 3 /* bufferPositionPair */
            getfield com.mongodb.connection.ByteBufferBsonOutput$BufferPositionPair.bufferIndex:I
            invokevirtual com.mongodb.connection.ByteBufferBsonOutput.getByteBufferAtIndex:(I)Lorg/bson/ByteBuf;
            astore 4 /* byteBuffer */
        start local 4 // org.bson.ByteBuf byteBuffer
         7: .line 124
            aload 4 /* byteBuffer */
            aload 3 /* bufferPositionPair */
            dup
            getfield com.mongodb.connection.ByteBufferBsonOutput$BufferPositionPair.position:I
            dup_x1
            iconst_1
            iadd
            putfield com.mongodb.connection.ByteBufferBsonOutput$BufferPositionPair.position:I
            iload 2 /* value */
            i2b
            invokeinterface org.bson.ByteBuf.put:(IB)Lorg/bson/ByteBuf;
            pop
         8: .line 125
            return
        end local 4 // org.bson.ByteBuf byteBuffer
        end local 3 // com.mongodb.connection.ByteBufferBsonOutput$BufferPositionPair bufferPositionPair
        end local 2 // int value
        end local 1 // int absolutePosition
        end local 0 // com.mongodb.connection.ByteBufferBsonOutput this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0    9     0                this  Lcom/mongodb/connection/ByteBufferBsonOutput;
            0    9     1    absolutePosition  I
            0    9     2               value  I
            6    9     3  bufferPositionPair  Lcom/mongodb/connection/ByteBufferBsonOutput$BufferPositionPair;
            7    9     4          byteBuffer  Lorg/bson/ByteBuf;
    MethodParameters:
                  Name  Flags
      absolutePosition  final
      value             final

  public java.util.List<org.bson.ByteBuf> getByteBuffers();
    descriptor: ()Ljava/util/List;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=4, args_size=1
        start local 0 // com.mongodb.connection.ByteBufferBsonOutput this
         0: .line 129
            aload 0 /* this */
            invokevirtual com.mongodb.connection.ByteBufferBsonOutput.ensureOpen:()V
         1: .line 131
            new java.util.ArrayList
            dup
            aload 0 /* this */
            getfield com.mongodb.connection.ByteBufferBsonOutput.bufferList:Ljava/util/List;
            invokeinterface java.util.List.size:()I
            invokespecial java.util.ArrayList.<init>:(I)V
            astore 1 /* buffers */
        start local 1 // java.util.List buffers
         2: .line 132
            aload 0 /* this */
            getfield com.mongodb.connection.ByteBufferBsonOutput.bufferList:Ljava/util/List;
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 3
            goto 5
      StackMap locals: com.mongodb.connection.ByteBufferBsonOutput java.util.List top java.util.Iterator
      StackMap stack:
         3: aload 3
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.bson.ByteBuf
            astore 2 /* cur */
        start local 2 // org.bson.ByteBuf cur
         4: .line 133
            aload 1 /* buffers */
            aload 2 /* cur */
            invokeinterface org.bson.ByteBuf.duplicate:()Lorg/bson/ByteBuf;
            getstatic java.nio.ByteOrder.LITTLE_ENDIAN:Ljava/nio/ByteOrder;
            invokeinterface org.bson.ByteBuf.order:(Ljava/nio/ByteOrder;)Lorg/bson/ByteBuf;
            invokeinterface org.bson.ByteBuf.flip:()Lorg/bson/ByteBuf;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 2 // org.bson.ByteBuf cur
         5: .line 132
      StackMap locals:
      StackMap stack:
            aload 3
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 3
         6: .line 135
            aload 1 /* buffers */
            areturn
        end local 1 // java.util.List buffers
        end local 0 // com.mongodb.connection.ByteBufferBsonOutput this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    7     0     this  Lcom/mongodb/connection/ByteBufferBsonOutput;
            2    7     1  buffers  Ljava/util/List<Lorg/bson/ByteBuf;>;
            4    5     2      cur  Lorg/bson/ByteBuf;
    Signature: ()Ljava/util/List<Lorg/bson/ByteBuf;>;

  public int pipe(java.io.OutputStream);
    descriptor: (Ljava/io/OutputStream;)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=8, args_size=2
        start local 0 // com.mongodb.connection.ByteBufferBsonOutput this
        start local 1 // java.io.OutputStream out
         0: .line 141
            aload 0 /* this */
            invokevirtual com.mongodb.connection.ByteBufferBsonOutput.ensureOpen:()V
         1: .line 143
            sipush 1024
            newarray 8
            astore 2 /* tmp */
        start local 2 // byte[] tmp
         2: .line 145
            iconst_0
            istore 3 /* total */
        start local 3 // int total
         3: .line 146
            aload 0 /* this */
            invokevirtual com.mongodb.connection.ByteBufferBsonOutput.getByteBuffers:()Ljava/util/List;
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 5
            goto 12
      StackMap locals: com.mongodb.connection.ByteBufferBsonOutput java.io.OutputStream byte[] int top java.util.Iterator
      StackMap stack:
         4: aload 5
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.bson.ByteBuf
            astore 4 /* cur */
        start local 4 // org.bson.ByteBuf cur
         5: .line 147
            aload 4 /* cur */
            invokeinterface org.bson.ByteBuf.duplicate:()Lorg/bson/ByteBuf;
            astore 6 /* dup */
        start local 6 // org.bson.ByteBuf dup
         6: .line 148
            goto 10
         7: .line 149
      StackMap locals: com.mongodb.connection.ByteBufferBsonOutput java.io.OutputStream byte[] int org.bson.ByteBuf java.util.Iterator org.bson.ByteBuf
      StackMap stack:
            aload 6 /* dup */
            invokeinterface org.bson.ByteBuf.remaining:()I
            aload 2 /* tmp */
            arraylength
            invokestatic java.lang.Math.min:(II)I
            istore 7 /* numBytesToCopy */
        start local 7 // int numBytesToCopy
         8: .line 150
            aload 6 /* dup */
            aload 2 /* tmp */
            iconst_0
            iload 7 /* numBytesToCopy */
            invokeinterface org.bson.ByteBuf.get:([BII)Lorg/bson/ByteBuf;
            pop
         9: .line 151
            aload 1 /* out */
            aload 2 /* tmp */
            iconst_0
            iload 7 /* numBytesToCopy */
            invokevirtual java.io.OutputStream.write:([BII)V
        end local 7 // int numBytesToCopy
        10: .line 148
      StackMap locals:
      StackMap stack:
            aload 6 /* dup */
            invokeinterface org.bson.ByteBuf.hasRemaining:()Z
            ifne 7
        11: .line 153
            iload 3 /* total */
            aload 6 /* dup */
            invokeinterface org.bson.ByteBuf.limit:()I
            iadd
            istore 3 /* total */
        end local 6 // org.bson.ByteBuf dup
        end local 4 // org.bson.ByteBuf cur
        12: .line 146
      StackMap locals: com.mongodb.connection.ByteBufferBsonOutput java.io.OutputStream byte[] int top java.util.Iterator
      StackMap stack:
            aload 5
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 4
        13: .line 155
            iload 3 /* total */
            ireturn
        end local 3 // int total
        end local 2 // byte[] tmp
        end local 1 // java.io.OutputStream out
        end local 0 // com.mongodb.connection.ByteBufferBsonOutput this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   14     0            this  Lcom/mongodb/connection/ByteBufferBsonOutput;
            0   14     1             out  Ljava/io/OutputStream;
            2   14     2             tmp  [B
            3   14     3           total  I
            5   12     4             cur  Lorg/bson/ByteBuf;
            6   12     6             dup  Lorg/bson/ByteBuf;
            8   10     7  numBytesToCopy  I
    Exceptions:
      throws java.io.IOException
    MethodParameters:
      Name  Flags
      out   final

  public void truncateToPosition(int);
    descriptor: (I)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=4, args_size=2
        start local 0 // com.mongodb.connection.ByteBufferBsonOutput this
        start local 1 // int newPosition
         0: .line 160
            aload 0 /* this */
            invokevirtual com.mongodb.connection.ByteBufferBsonOutput.ensureOpen:()V
         1: .line 162
            iload 1 /* newPosition */
            aload 0 /* this */
            getfield com.mongodb.connection.ByteBufferBsonOutput.position:I
            if_icmpgt 2
            iload 1 /* newPosition */
            ifge 3
         2: .line 163
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalArgumentException
            dup
            invokespecial java.lang.IllegalArgumentException.<init>:()V
            athrow
         3: .line 166
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 1 /* newPosition */
            invokevirtual com.mongodb.connection.ByteBufferBsonOutput.getBufferPositionPair:(I)Lcom/mongodb/connection/ByteBufferBsonOutput$BufferPositionPair;
            astore 2 /* bufferPositionPair */
        start local 2 // com.mongodb.connection.ByteBufferBsonOutput$BufferPositionPair bufferPositionPair
         4: .line 168
            aload 0 /* this */
            getfield com.mongodb.connection.ByteBufferBsonOutput.bufferList:Ljava/util/List;
            aload 2 /* bufferPositionPair */
            getfield com.mongodb.connection.ByteBufferBsonOutput$BufferPositionPair.bufferIndex:I
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast org.bson.ByteBuf
            aload 2 /* bufferPositionPair */
            getfield com.mongodb.connection.ByteBufferBsonOutput$BufferPositionPair.position:I
            invokeinterface org.bson.ByteBuf.position:(I)Lorg/bson/ByteBuf;
            pop
         5: .line 170
            goto 8
         6: .line 171
      StackMap locals: com.mongodb.connection.ByteBufferBsonOutput$BufferPositionPair
      StackMap stack:
            aload 0 /* this */
            getfield com.mongodb.connection.ByteBufferBsonOutput.bufferList:Ljava/util/List;
            aload 0 /* this */
            getfield com.mongodb.connection.ByteBufferBsonOutput.bufferList:Ljava/util/List;
            invokeinterface java.util.List.size:()I
            iconst_1
            isub
            invokeinterface java.util.List.remove:(I)Ljava/lang/Object;
            checkcast org.bson.ByteBuf
            astore 3 /* buffer */
        start local 3 // org.bson.ByteBuf buffer
         7: .line 172
            aload 3 /* buffer */
            invokeinterface org.bson.ByteBuf.release:()V
        end local 3 // org.bson.ByteBuf buffer
         8: .line 170
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.mongodb.connection.ByteBufferBsonOutput.bufferList:Ljava/util/List;
            invokeinterface java.util.List.size:()I
            aload 2 /* bufferPositionPair */
            getfield com.mongodb.connection.ByteBufferBsonOutput$BufferPositionPair.bufferIndex:I
            iconst_1
            iadd
            if_icmpgt 6
         9: .line 175
            aload 0 /* this */
            aload 2 /* bufferPositionPair */
            getfield com.mongodb.connection.ByteBufferBsonOutput$BufferPositionPair.bufferIndex:I
            putfield com.mongodb.connection.ByteBufferBsonOutput.curBufferIndex:I
        10: .line 176
            aload 0 /* this */
            iload 1 /* newPosition */
            putfield com.mongodb.connection.ByteBufferBsonOutput.position:I
        11: .line 177
            return
        end local 2 // com.mongodb.connection.ByteBufferBsonOutput$BufferPositionPair bufferPositionPair
        end local 1 // int newPosition
        end local 0 // com.mongodb.connection.ByteBufferBsonOutput this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0   12     0                this  Lcom/mongodb/connection/ByteBufferBsonOutput;
            0   12     1         newPosition  I
            4   12     2  bufferPositionPair  Lcom/mongodb/connection/ByteBufferBsonOutput$BufferPositionPair;
            7    8     3              buffer  Lorg/bson/ByteBuf;
    MethodParameters:
             Name  Flags
      newPosition  final

  public void close();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=3, args_size=1
        start local 0 // com.mongodb.connection.ByteBufferBsonOutput this
         0: .line 181
            aload 0 /* this */
            getfield com.mongodb.connection.ByteBufferBsonOutput.bufferList:Ljava/util/List;
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 2
            goto 3
      StackMap locals: com.mongodb.connection.ByteBufferBsonOutput top java.util.Iterator
      StackMap stack:
         1: aload 2
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.bson.ByteBuf
            astore 1 /* cur */
        start local 1 // org.bson.ByteBuf cur
         2: .line 182
            aload 1 /* cur */
            invokeinterface org.bson.ByteBuf.release:()V
        end local 1 // org.bson.ByteBuf cur
         3: .line 181
      StackMap locals:
      StackMap stack:
            aload 2
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 1
         4: .line 184
            aload 0 /* this */
            getfield com.mongodb.connection.ByteBufferBsonOutput.bufferList:Ljava/util/List;
            invokeinterface java.util.List.clear:()V
         5: .line 185
            aload 0 /* this */
            iconst_1
            putfield com.mongodb.connection.ByteBufferBsonOutput.closed:Z
         6: .line 186
            return
        end local 0 // com.mongodb.connection.ByteBufferBsonOutput this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    7     0  this  Lcom/mongodb/connection/ByteBufferBsonOutput;
            2    3     1   cur  Lorg/bson/ByteBuf;

  private com.mongodb.connection.ByteBufferBsonOutput$BufferPositionPair getBufferPositionPair(int);
    descriptor: (I)Lcom/mongodb/connection/ByteBufferBsonOutput$BufferPositionPair;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=6, args_size=2
        start local 0 // com.mongodb.connection.ByteBufferBsonOutput this
        start local 1 // int absolutePosition
         0: .line 189
            iload 1 /* absolutePosition */
            istore 2 /* positionInBuffer */
        start local 2 // int positionInBuffer
         1: .line 190
            iconst_0
            istore 3 /* bufferIndex */
        start local 3 // int bufferIndex
         2: .line 191
            sipush 1024
            istore 4 /* bufferSize */
        start local 4 // int bufferSize
         3: .line 192
            iconst_0
            istore 5 /* startPositionOfBuffer */
        start local 5 // int startPositionOfBuffer
         4: .line 193
            goto 9
         5: .line 194
      StackMap locals: com.mongodb.connection.ByteBufferBsonOutput int int int int int
      StackMap stack:
            iinc 3 /* bufferIndex */ 1
         6: .line 195
            iload 5 /* startPositionOfBuffer */
            iload 4 /* bufferSize */
            iadd
            istore 5 /* startPositionOfBuffer */
         7: .line 196
            iload 2 /* positionInBuffer */
            iload 4 /* bufferSize */
            isub
            istore 2 /* positionInBuffer */
         8: .line 197
            aload 0 /* this */
            getfield com.mongodb.connection.ByteBufferBsonOutput.bufferList:Ljava/util/List;
            iload 3 /* bufferIndex */
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast org.bson.ByteBuf
            invokeinterface org.bson.ByteBuf.limit:()I
            istore 4 /* bufferSize */
         9: .line 193
      StackMap locals:
      StackMap stack:
            iload 5 /* startPositionOfBuffer */
            iload 4 /* bufferSize */
            iadd
            iload 1 /* absolutePosition */
            if_icmple 5
        10: .line 200
            new com.mongodb.connection.ByteBufferBsonOutput$BufferPositionPair
            dup
            iload 3 /* bufferIndex */
            iload 2 /* positionInBuffer */
            invokespecial com.mongodb.connection.ByteBufferBsonOutput$BufferPositionPair.<init>:(II)V
            areturn
        end local 5 // int startPositionOfBuffer
        end local 4 // int bufferSize
        end local 3 // int bufferIndex
        end local 2 // int positionInBuffer
        end local 1 // int absolutePosition
        end local 0 // com.mongodb.connection.ByteBufferBsonOutput this
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0   11     0                   this  Lcom/mongodb/connection/ByteBufferBsonOutput;
            0   11     1       absolutePosition  I
            1   11     2       positionInBuffer  I
            2   11     3            bufferIndex  I
            3   11     4             bufferSize  I
            4   11     5  startPositionOfBuffer  I
    MethodParameters:
                  Name  Flags
      absolutePosition  final

  private void ensureOpen();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // com.mongodb.connection.ByteBufferBsonOutput this
         0: .line 204
            aload 0 /* this */
            getfield com.mongodb.connection.ByteBufferBsonOutput.closed:Z
            ifeq 2
         1: .line 205
            new java.lang.IllegalStateException
            dup
            ldc "The output is closed"
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 207
      StackMap locals:
      StackMap stack:
            return
        end local 0 // com.mongodb.connection.ByteBufferBsonOutput this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lcom/mongodb/connection/ByteBufferBsonOutput;
}
SourceFile: "ByteBufferBsonOutput.java"
NestMembers:
  com.mongodb.connection.ByteBufferBsonOutput$BufferPositionPair
InnerClasses:
  private final BufferPositionPair = com.mongodb.connection.ByteBufferBsonOutput$BufferPositionPair of com.mongodb.connection.ByteBufferBsonOutput
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()