abstract class com.mongodb.async.client.AbstractSubscription<TResult> implements com.mongodb.async.client.Subscription
  minor version: 0
  major version: 59
  flags: flags: (0x0420) ACC_SUPER, ACC_ABSTRACT
  this_class: com.mongodb.async.client.AbstractSubscription
  super_class: java.lang.Object
{
  private static final com.mongodb.diagnostics.logging.Logger LOGGER;
    descriptor: Lcom/mongodb/diagnostics/logging/Logger;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private final com.mongodb.async.client.Observer<? super TResult> observer;
    descriptor: Lcom/mongodb/async/client/Observer;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Lcom/mongodb/async/client/Observer<-TTResult;>;

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

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

  private long requested;
    descriptor: J
    flags: (0x0002) ACC_PRIVATE

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

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

  private final java.util.concurrent.ConcurrentLinkedQueue<TResult> resultsQueue;
    descriptor: Ljava/util/concurrent/ConcurrentLinkedQueue;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/concurrent/ConcurrentLinkedQueue<TTResult;>;

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 28
            ldc "client"
            invokestatic com.mongodb.diagnostics.logging.Loggers.getLogger:(Ljava/lang/String;)Lcom/mongodb/diagnostics/logging/Logger;
            putstatic com.mongodb.async.client.AbstractSubscription.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  void <init>(com.mongodb.async.client.Observer<? super TResult>);
    descriptor: (Lcom/mongodb/async/client/Observer;)V
    flags: (0x0000) 
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // com.mongodb.async.client.AbstractSubscription this
        start local 1 // com.mongodb.async.client.Observer observer
         0: .line 41
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 34
            aload 0 /* this */
            lconst_0
            putfield com.mongodb.async.client.AbstractSubscription.requested:J
         2: .line 35
            aload 0 /* this */
            iconst_0
            putfield com.mongodb.async.client.AbstractSubscription.isUnsubscribed:Z
         3: .line 36
            aload 0 /* this */
            iconst_0
            putfield com.mongodb.async.client.AbstractSubscription.isTerminated:Z
         4: .line 39
            aload 0 /* this */
            new java.util.concurrent.ConcurrentLinkedQueue
            dup
            invokespecial java.util.concurrent.ConcurrentLinkedQueue.<init>:()V
            putfield com.mongodb.async.client.AbstractSubscription.resultsQueue:Ljava/util/concurrent/ConcurrentLinkedQueue;
         5: .line 42
            aload 0 /* this */
            aload 1 /* observer */
            putfield com.mongodb.async.client.AbstractSubscription.observer:Lcom/mongodb/async/client/Observer;
         6: .line 43
            return
        end local 1 // com.mongodb.async.client.Observer observer
        end local 0 // com.mongodb.async.client.AbstractSubscription this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    7     0      this  Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;
            0    7     1  observer  Lcom/mongodb/async/client/Observer<-TTResult;>;
    Signature: (Lcom/mongodb/async/client/Observer<-TTResult;>;)V
    MethodParameters:
          Name  Flags
      observer  final

  public void unsubscribe();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=3, args_size=1
        start local 0 // com.mongodb.async.client.AbstractSubscription this
         0: .line 47
            iconst_0
            istore 1 /* unsubscribe */
        start local 1 // boolean unsubscribe
         1: .line 49
            aload 0 /* this */
            dup
            astore 2
            monitorenter
         2: .line 50
            aload 0 /* this */
            getfield com.mongodb.async.client.AbstractSubscription.isUnsubscribed:Z
            ifne 6
         3: .line 51
            iconst_1
            istore 1 /* unsubscribe */
         4: .line 52
            aload 0 /* this */
            iconst_1
            putfield com.mongodb.async.client.AbstractSubscription.isUnsubscribed:Z
         5: .line 53
            aload 0 /* this */
            iconst_1
            putfield com.mongodb.async.client.AbstractSubscription.isTerminated:Z
         6: .line 49
      StackMap locals: int com.mongodb.async.client.AbstractSubscription
      StackMap stack:
            aload 2
            monitorexit
         7: goto 10
      StackMap locals:
      StackMap stack: java.lang.Throwable
         8: aload 2
            monitorexit
         9: athrow
        10: .line 57
      StackMap locals:
      StackMap stack:
            iload 1 /* unsubscribe */
            ifeq 12
        11: .line 58
            aload 0 /* this */
            invokevirtual com.mongodb.async.client.AbstractSubscription.postTerminate:()V
        12: .line 60
      StackMap locals:
      StackMap stack:
            return
        end local 1 // boolean unsubscribe
        end local 0 // com.mongodb.async.client.AbstractSubscription this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   13     0         this  Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;
            1   13     1  unsubscribe  Z
      Exception table:
        from    to  target  type
           2     7       8  any
           8     9       8  any

  public synchronized boolean isUnsubscribed();
    descriptor: ()Z
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.mongodb.async.client.AbstractSubscription this
         0: .line 64
            aload 0 /* this */
            getfield com.mongodb.async.client.AbstractSubscription.isUnsubscribed:Z
            ireturn
        end local 0 // com.mongodb.async.client.AbstractSubscription this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;

  public void request(long);
    descriptor: (J)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=5, args_size=2
        start local 0 // com.mongodb.async.client.AbstractSubscription this
        start local 1 // long n
         0: .line 69
            lload 1 /* n */
            lconst_1
            lcmp
            ifge 2
         1: .line 70
            new java.lang.IllegalArgumentException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Number requested must be > 0: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            lload 1 /* n */
            invokevirtual java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 73
      StackMap locals:
      StackMap stack:
            iconst_0
            istore 3 /* requestData */
        start local 3 // boolean requestData
         3: .line 74
            aload 0 /* this */
            dup
            astore 4
            monitorenter
         4: .line 75
            aload 0 /* this */
            getfield com.mongodb.async.client.AbstractSubscription.requested:J
            lload 1 /* n */
            ladd
            lconst_1
            lcmp
            ifge 7
         5: .line 76
            aload 0 /* this */
            ldc 9223372036854775807
            putfield com.mongodb.async.client.AbstractSubscription.requested:J
         6: .line 77
            goto 8
         7: .line 78
      StackMap locals: int com.mongodb.async.client.AbstractSubscription
      StackMap stack:
            aload 0 /* this */
            dup
            getfield com.mongodb.async.client.AbstractSubscription.requested:J
            lload 1 /* n */
            ladd
            putfield com.mongodb.async.client.AbstractSubscription.requested:J
         8: .line 80
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.mongodb.async.client.AbstractSubscription.requestedData:Z
            ifne 11
         9: .line 81
            aload 0 /* this */
            iconst_1
            putfield com.mongodb.async.client.AbstractSubscription.requestedData:Z
        10: .line 82
            iconst_1
            istore 3 /* requestData */
        11: .line 74
      StackMap locals:
      StackMap stack:
            aload 4
            monitorexit
        12: goto 15
      StackMap locals:
      StackMap stack: java.lang.Throwable
        13: aload 4
            monitorexit
        14: athrow
        15: .line 86
      StackMap locals:
      StackMap stack:
            iload 3 /* requestData */
            ifeq 18
        16: .line 87
            aload 0 /* this */
            invokevirtual com.mongodb.async.client.AbstractSubscription.tryRequestInitialData:()V
        17: .line 88
            goto 19
        18: .line 89
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.mongodb.async.client.AbstractSubscription.tryProcessResultsQueue:()V
        19: .line 91
      StackMap locals:
      StackMap stack:
            return
        end local 3 // boolean requestData
        end local 1 // long n
        end local 0 // com.mongodb.async.client.AbstractSubscription this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   20     0         this  Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;
            0   20     1            n  J
            3   20     3  requestData  Z
      Exception table:
        from    to  target  type
           4    12      13  any
          13    14      13  any
    MethodParameters:
      Name  Flags
      n     final

  abstract void requestInitialData();
    descriptor: ()V
    flags: (0x0400) ACC_ABSTRACT

  void requestMoreData();
    descriptor: ()V
    flags: (0x0000) 
    Code:
      stack=0, locals=1, args_size=1
        start local 0 // com.mongodb.async.client.AbstractSubscription this
         0: .line 96
            return
        end local 0 // com.mongodb.async.client.AbstractSubscription this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;

  void postTerminate();
    descriptor: ()V
    flags: (0x0000) 
    Code:
      stack=0, locals=1, args_size=1
        start local 0 // com.mongodb.async.client.AbstractSubscription this
         0: .line 99
            return
        end local 0 // com.mongodb.async.client.AbstractSubscription this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;

  abstract boolean checkCompleted();
    descriptor: ()Z
    flags: (0x0400) ACC_ABSTRACT

  synchronized boolean isTerminated();
    descriptor: ()Z
    flags: (0x0020) ACC_SYNCHRONIZED
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.mongodb.async.client.AbstractSubscription this
         0: .line 104
            aload 0 /* this */
            getfield com.mongodb.async.client.AbstractSubscription.isTerminated:Z
            ireturn
        end local 0 // com.mongodb.async.client.AbstractSubscription this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;

  synchronized long getRequested();
    descriptor: ()J
    flags: (0x0020) ACC_SYNCHRONIZED
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // com.mongodb.async.client.AbstractSubscription this
         0: .line 108
            aload 0 /* this */
            getfield com.mongodb.async.client.AbstractSubscription.requested:J
            lreturn
        end local 0 // com.mongodb.async.client.AbstractSubscription this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;

  void addToQueue();
    descriptor: (Ljava/lang/Object;)V
    flags: (0x0000) 
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.mongodb.async.client.AbstractSubscription this
        start local 1 // java.lang.Object result
         0: .line 112
            aload 1 /* result */
            ifnull 2
         1: .line 113
            aload 0 /* this */
            getfield com.mongodb.async.client.AbstractSubscription.resultsQueue:Ljava/util/concurrent/ConcurrentLinkedQueue;
            aload 1 /* result */
            invokevirtual java.util.concurrent.ConcurrentLinkedQueue.add:(Ljava/lang/Object;)Z
            pop
         2: .line 115
      StackMap locals:
      StackMap stack:
            return
        end local 1 // java.lang.Object result
        end local 0 // com.mongodb.async.client.AbstractSubscription this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    3     0    this  Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;
            0    3     1  result  TTResult;
    Signature: (TTResult;)V
    RuntimeVisibleParameterAnnotations: 
      0:
        com.mongodb.lang.Nullable()
    MethodParameters:
        Name  Flags
      result  final

  void addToQueue(java.util.List<TResult>);
    descriptor: (Ljava/util/List;)V
    flags: (0x0000) 
    Code:
      stack=2, locals=4, args_size=2
        start local 0 // com.mongodb.async.client.AbstractSubscription this
        start local 1 // java.util.List results
         0: .line 118
            aload 1 /* results */
            ifnull 5
         1: .line 119
            aload 1 /* results */
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 3
            goto 4
      StackMap locals: com.mongodb.async.client.AbstractSubscription java.util.List top java.util.Iterator
      StackMap stack:
         2: aload 3
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.Object
            astore 2 /* cur */
        start local 2 // java.lang.Object cur
         3: .line 120
            aload 0 /* this */
            aload 2 /* cur */
            invokevirtual com.mongodb.async.client.AbstractSubscription.addToQueue:(Ljava/lang/Object;)V
        end local 2 // java.lang.Object cur
         4: .line 119
      StackMap locals:
      StackMap stack:
            aload 3
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 2
         5: .line 123
      StackMap locals: com.mongodb.async.client.AbstractSubscription java.util.List
      StackMap stack:
            return
        end local 1 // java.util.List results
        end local 0 // com.mongodb.async.client.AbstractSubscription this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    6     0     this  Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;
            0    6     1  results  Ljava/util/List<TTResult;>;
            3    4     2      cur  TTResult;
    Signature: (Ljava/util/List<TTResult;>;)V
    RuntimeVisibleParameterAnnotations: 
      0:
        com.mongodb.lang.Nullable()
    MethodParameters:
         Name  Flags
      results  final

  void onError(java.lang.Throwable);
    descriptor: (Ljava/lang/Throwable;)V
    flags: (0x0000) 
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // com.mongodb.async.client.AbstractSubscription this
        start local 1 // java.lang.Throwable t
         0: .line 126
            aload 0 /* this */
            invokevirtual com.mongodb.async.client.AbstractSubscription.terminalAction:()Z
            ifeq 7
         1: .line 127
            aload 0 /* this */
            invokevirtual com.mongodb.async.client.AbstractSubscription.postTerminate:()V
         2: .line 129
            aload 0 /* this */
            getfield com.mongodb.async.client.AbstractSubscription.observer:Lcom/mongodb/async/client/Observer;
            aload 1 /* t */
            invokeinterface com.mongodb.async.client.Observer.onError:(Ljava/lang/Throwable;)V
         3: .line 130
            goto 8
      StackMap locals:
      StackMap stack: java.lang.Throwable
         4: astore 2 /* t1 */
        start local 2 // java.lang.Throwable t1
         5: .line 131
            getstatic com.mongodb.async.client.AbstractSubscription.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            ldc "Calling onError threw an exception"
            aload 2 /* t1 */
            invokeinterface com.mongodb.diagnostics.logging.Logger.error:(Ljava/lang/String;Ljava/lang/Throwable;)V
         6: .line 132
            aload 2 /* t1 */
            invokestatic com.mongodb.MongoException.fromThrowableNonNull:(Ljava/lang/Throwable;)Lcom/mongodb/MongoException;
            athrow
        end local 2 // java.lang.Throwable t1
         7: .line 135
      StackMap locals:
      StackMap stack:
            aload 1 /* t */
            invokestatic com.mongodb.MongoException.fromThrowableNonNull:(Ljava/lang/Throwable;)Lcom/mongodb/MongoException;
            athrow
         8: .line 137
      StackMap locals:
      StackMap stack:
            return
        end local 1 // java.lang.Throwable t
        end local 0 // com.mongodb.async.client.AbstractSubscription this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    9     0  this  Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;
            0    9     1     t  Ljava/lang/Throwable;
            5    7     2    t1  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           2     3       4  Class java.lang.Throwable
    MethodParameters:
      Name  Flags
      t     final

  private void onNext();
    descriptor: (Ljava/lang/Object;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // com.mongodb.async.client.AbstractSubscription this
        start local 1 // java.lang.Object next
         0: .line 140
            aload 0 /* this */
            invokevirtual com.mongodb.async.client.AbstractSubscription.isTerminated:()Z
            ifne 6
         1: .line 142
            aload 0 /* this */
            getfield com.mongodb.async.client.AbstractSubscription.observer:Lcom/mongodb/async/client/Observer;
            aload 1 /* next */
            invokeinterface com.mongodb.async.client.Observer.onNext:(Ljava/lang/Object;)V
         2: .line 143
            goto 6
      StackMap locals:
      StackMap stack: java.lang.Throwable
         3: astore 2 /* t */
        start local 2 // java.lang.Throwable t
         4: .line 144
            getstatic com.mongodb.async.client.AbstractSubscription.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            ldc "Calling onNext threw an exception"
            aload 2 /* t */
            invokeinterface com.mongodb.diagnostics.logging.Logger.error:(Ljava/lang/String;Ljava/lang/Throwable;)V
         5: .line 145
            aload 0 /* this */
            aload 2 /* t */
            invokevirtual com.mongodb.async.client.AbstractSubscription.onError:(Ljava/lang/Throwable;)V
        end local 2 // java.lang.Throwable t
         6: .line 148
      StackMap locals:
      StackMap stack:
            return
        end local 1 // java.lang.Object next
        end local 0 // com.mongodb.async.client.AbstractSubscription this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    7     0  this  Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;
            0    7     1  next  TTResult;
            4    6     2     t  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           1     2       3  Class java.lang.Throwable
    Signature: (TTResult;)V
    MethodParameters:
      Name  Flags
      next  final

  private void onComplete();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // com.mongodb.async.client.AbstractSubscription this
         0: .line 151
            aload 0 /* this */
            invokevirtual com.mongodb.async.client.AbstractSubscription.terminalAction:()Z
            ifeq 7
         1: .line 152
            aload 0 /* this */
            invokevirtual com.mongodb.async.client.AbstractSubscription.postTerminate:()V
         2: .line 154
            aload 0 /* this */
            getfield com.mongodb.async.client.AbstractSubscription.observer:Lcom/mongodb/async/client/Observer;
            invokeinterface com.mongodb.async.client.Observer.onComplete:()V
         3: .line 155
            goto 7
      StackMap locals:
      StackMap stack: java.lang.Throwable
         4: astore 1 /* t */
        start local 1 // java.lang.Throwable t
         5: .line 156
            getstatic com.mongodb.async.client.AbstractSubscription.LOGGER:Lcom/mongodb/diagnostics/logging/Logger;
            ldc "Calling onComplete threw an exception"
            aload 1 /* t */
            invokeinterface com.mongodb.diagnostics.logging.Logger.error:(Ljava/lang/String;Ljava/lang/Throwable;)V
         6: .line 157
            aload 1 /* t */
            invokestatic com.mongodb.MongoException.fromThrowableNonNull:(Ljava/lang/Throwable;)Lcom/mongodb/MongoException;
            athrow
        end local 1 // java.lang.Throwable t
         7: .line 160
      StackMap locals:
      StackMap stack:
            return
        end local 0 // com.mongodb.async.client.AbstractSubscription this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    8     0  this  Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;
            5    7     1     t  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           2     3       4  Class java.lang.Throwable

  private void tryRequestInitialData();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // com.mongodb.async.client.AbstractSubscription this
         0: .line 164
            aload 0 /* this */
            invokevirtual com.mongodb.async.client.AbstractSubscription.requestInitialData:()V
         1: .line 165
            goto 4
      StackMap locals:
      StackMap stack: java.lang.Throwable
         2: astore 1 /* t */
        start local 1 // java.lang.Throwable t
         3: .line 166
            aload 0 /* this */
            aload 1 /* t */
            invokevirtual com.mongodb.async.client.AbstractSubscription.onError:(Ljava/lang/Throwable;)V
        end local 1 // java.lang.Throwable t
         4: .line 168
      StackMap locals:
      StackMap stack:
            return
        end local 0 // com.mongodb.async.client.AbstractSubscription this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;
            3    4     1     t  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           0     1       2  Class java.lang.Throwable

  void tryProcessResultsQueue();
    descriptor: ()V
    flags: (0x0000) 
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // com.mongodb.async.client.AbstractSubscription this
         0: .line 172
            aload 0 /* this */
            invokevirtual com.mongodb.async.client.AbstractSubscription.processResultsQueue:()V
         1: .line 173
            goto 4
      StackMap locals:
      StackMap stack: java.lang.Throwable
         2: astore 1 /* t */
        start local 1 // java.lang.Throwable t
         3: .line 174
            aload 0 /* this */
            aload 1 /* t */
            invokevirtual com.mongodb.async.client.AbstractSubscription.onError:(Ljava/lang/Throwable;)V
        end local 1 // java.lang.Throwable t
         4: .line 176
      StackMap locals:
      StackMap stack:
            return
        end local 0 // com.mongodb.async.client.AbstractSubscription this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;
            3    4     1     t  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           0     1       2  Class java.lang.Throwable

  private void processResultsQueue();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=9, args_size=1
        start local 0 // com.mongodb.async.client.AbstractSubscription this
         0: .line 180
            iconst_0
            istore 1 /* mustProcess */
        start local 1 // boolean mustProcess
         1: .line 182
            aload 0 /* this */
            dup
            astore 2
            monitorenter
         2: .line 183
            aload 0 /* this */
            getfield com.mongodb.async.client.AbstractSubscription.isProcessing:Z
            ifne 5
            aload 0 /* this */
            getfield com.mongodb.async.client.AbstractSubscription.isTerminated:Z
            ifne 5
         3: .line 184
            aload 0 /* this */
            iconst_1
            putfield com.mongodb.async.client.AbstractSubscription.isProcessing:Z
         4: .line 185
            iconst_1
            istore 1 /* mustProcess */
         5: .line 182
      StackMap locals: int com.mongodb.async.client.AbstractSubscription
      StackMap stack:
            aload 2
            monitorexit
         6: goto 9
      StackMap locals:
      StackMap stack: java.lang.Throwable
         7: aload 2
            monitorexit
         8: athrow
         9: .line 189
      StackMap locals:
      StackMap stack:
            iload 1 /* mustProcess */
            ifeq 47
        10: .line 190
            iconst_0
            istore 2 /* requestMore */
        start local 2 // boolean requestMore
        11: .line 192
            lconst_0
            lstore 3 /* processedCount */
        start local 3 // long processedCount
        12: .line 193
            iconst_0
            istore 5 /* completed */
        start local 5 // boolean completed
        13: .line 197
      StackMap locals: int long int
      StackMap stack:
            aload 0 /* this */
            dup
            astore 8
            monitorenter
        14: .line 198
            aload 0 /* this */
            dup
            getfield com.mongodb.async.client.AbstractSubscription.requested:J
            lload 3 /* processedCount */
            lsub
            putfield com.mongodb.async.client.AbstractSubscription.requested:J
        15: .line 199
            aload 0 /* this */
            getfield com.mongodb.async.client.AbstractSubscription.resultsQueue:Ljava/util/concurrent/ConcurrentLinkedQueue;
            invokevirtual java.util.concurrent.ConcurrentLinkedQueue.isEmpty:()Z
            ifeq 23
        16: .line 200
            aload 0 /* this */
            invokevirtual com.mongodb.async.client.AbstractSubscription.checkCompleted:()Z
            istore 5 /* completed */
        17: .line 201
            aload 0 /* this */
            getfield com.mongodb.async.client.AbstractSubscription.requested:J
            lconst_0
            lcmp
            ifle 18
            iconst_1
            goto 19
      StackMap locals: com.mongodb.async.client.AbstractSubscription int int long int top top com.mongodb.async.client.AbstractSubscription
      StackMap stack:
        18: iconst_0
      StackMap locals:
      StackMap stack: int
        19: istore 2 /* requestMore */
        20: .line 202
            aload 0 /* this */
            iconst_0
            putfield com.mongodb.async.client.AbstractSubscription.isProcessing:Z
        21: .line 203
            aload 8
            monitorexit
        22: goto 42
        23: .line 204
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.mongodb.async.client.AbstractSubscription.requested:J
            lconst_0
            lcmp
            ifne 27
        24: .line 205
            aload 0 /* this */
            iconst_0
            putfield com.mongodb.async.client.AbstractSubscription.isProcessing:Z
        25: .line 206
            aload 8
            monitorexit
        26: goto 42
        27: .line 208
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.mongodb.async.client.AbstractSubscription.requested:J
            lstore 6 /* localWanted */
        start local 6 // long localWanted
        28: .line 197
            aload 8
            monitorexit
        29: goto 32
        end local 6 // long localWanted
      StackMap locals:
      StackMap stack: java.lang.Throwable
        30: aload 8
            monitorexit
        31: athrow
        start local 6 // long localWanted
        32: .line 210
      StackMap locals: com.mongodb.async.client.AbstractSubscription int int long int long
      StackMap stack:
            lconst_0
            lstore 3 /* processedCount */
        33: .line 212
            goto 40
        34: .line 213
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.mongodb.async.client.AbstractSubscription.resultsQueue:Ljava/util/concurrent/ConcurrentLinkedQueue;
            invokevirtual java.util.concurrent.ConcurrentLinkedQueue.poll:()Ljava/lang/Object;
            astore 8 /* item */
        start local 8 // java.lang.Object item
        35: .line 214
            aload 8 /* item */
            ifnonnull 37
        36: .line 215
            goto 13
        37: .line 217
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 0 /* this */
            aload 8 /* item */
            invokevirtual com.mongodb.async.client.AbstractSubscription.onNext:(Ljava/lang/Object;)V
        38: .line 218
            lload 6 /* localWanted */
            lconst_1
            lsub
            lstore 6 /* localWanted */
        39: .line 219
            lload 3 /* processedCount */
            lconst_1
            ladd
            lstore 3 /* processedCount */
        end local 8 // java.lang.Object item
        40: .line 212
      StackMap locals:
      StackMap stack:
            lload 6 /* localWanted */
            lconst_0
            lcmp
            ifgt 34
        end local 6 // long localWanted
        41: .line 194
            goto 13
        42: .line 224
      StackMap locals:
      StackMap stack:
            iload 5 /* completed */
            ifeq 45
        43: .line 225
            aload 0 /* this */
            invokevirtual com.mongodb.async.client.AbstractSubscription.onComplete:()V
        44: .line 226
            goto 47
      StackMap locals:
      StackMap stack:
        45: iload 2 /* requestMore */
            ifeq 47
        46: .line 227
            aload 0 /* this */
            invokevirtual com.mongodb.async.client.AbstractSubscription.requestMoreData:()V
        end local 5 // boolean completed
        end local 3 // long processedCount
        end local 2 // boolean requestMore
        47: .line 230
      StackMap locals:
      StackMap stack:
            return
        end local 1 // boolean mustProcess
        end local 0 // com.mongodb.async.client.AbstractSubscription this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   48     0            this  Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;
            1   48     1     mustProcess  Z
           11   47     2     requestMore  Z
           12   47     3  processedCount  J
           13   47     5       completed  Z
           28   30     6     localWanted  J
           32   41     6     localWanted  J
           35   40     8            item  TTResult;
      Exception table:
        from    to  target  type
           2     6       7  any
           7     8       7  any
          14    22      30  any
          23    26      30  any
          27    29      30  any
          30    31      30  any

  private boolean terminalAction();
    descriptor: ()Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=3, args_size=1
        start local 0 // com.mongodb.async.client.AbstractSubscription this
         0: .line 233
            iconst_0
            istore 1 /* isTerminal */
        start local 1 // boolean isTerminal
         1: .line 234
            aload 0 /* this */
            dup
            astore 2
            monitorenter
         2: .line 235
            aload 0 /* this */
            getfield com.mongodb.async.client.AbstractSubscription.isTerminated:Z
            ifne 5
         3: .line 236
            aload 0 /* this */
            iconst_1
            putfield com.mongodb.async.client.AbstractSubscription.isTerminated:Z
         4: .line 237
            iconst_1
            istore 1 /* isTerminal */
         5: .line 234
      StackMap locals: int com.mongodb.async.client.AbstractSubscription
      StackMap stack:
            aload 2
            monitorexit
         6: goto 9
      StackMap locals:
      StackMap stack: java.lang.Throwable
         7: aload 2
            monitorexit
         8: athrow
         9: .line 240
      StackMap locals:
      StackMap stack:
            iload 1 /* isTerminal */
            ireturn
        end local 1 // boolean isTerminal
        end local 0 // com.mongodb.async.client.AbstractSubscription this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   10     0        this  Lcom/mongodb/async/client/AbstractSubscription<TTResult;>;
            1   10     1  isTerminal  Z
      Exception table:
        from    to  target  type
           2     6       7  any
           7     8       7  any
}
Signature: <TResult:Ljava/lang/Object;>Ljava/lang/Object;Lcom/mongodb/async/client/Subscription;
SourceFile: "AbstractSubscription.java"