public abstract class java.util.concurrent.locks.AbstractQueuedSynchronizer extends java.util.concurrent.locks.AbstractOwnableSynchronizer implements java.io.Serializable
  minor version: 0
  major version: 59
  flags: flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
  this_class: java.util.concurrent.locks.AbstractQueuedSynchronizer
  super_class: java.util.concurrent.locks.AbstractOwnableSynchronizer
{
  private static final long serialVersionUID;
    descriptor: J
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 7373984972572414691

  private volatile transient java.util.concurrent.locks.AbstractQueuedSynchronizer$Node head;
    descriptor: Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
    flags: (0x00c2) ACC_PRIVATE, ACC_VOLATILE, ACC_TRANSIENT

  private volatile transient java.util.concurrent.locks.AbstractQueuedSynchronizer$Node tail;
    descriptor: Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
    flags: (0x00c2) ACC_PRIVATE, ACC_VOLATILE, ACC_TRANSIENT

  private volatile int state;
    descriptor: I
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE

  static final long SPIN_FOR_TIMEOUT_THRESHOLD;
    descriptor: J
    flags: (0x0018) ACC_STATIC, ACC_FINAL
    ConstantValue: 1000

  private static final java.lang.invoke.VarHandle STATE;
    descriptor: Ljava/lang/invoke/VarHandle;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.lang.invoke.VarHandle HEAD;
    descriptor: Ljava/lang/invoke/VarHandle;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.lang.invoke.VarHandle TAIL;
    descriptor: Ljava/lang/invoke/VarHandle;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=4, locals=1, args_size=0
         0: .line 2306
            invokestatic java.lang.invoke.MethodHandles.lookup:()Ljava/lang/invoke/MethodHandles$Lookup;
            astore 0 /* l */
        start local 0 // java.lang.invoke.MethodHandles$Lookup l
         1: .line 2307
            aload 0 /* l */
            ldc Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            ldc "state"
            getstatic java.lang.Integer.TYPE:Ljava/lang/Class;
            invokevirtual java.lang.invoke.MethodHandles$Lookup.findVarHandle:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/invoke/VarHandle;
            putstatic java.util.concurrent.locks.AbstractQueuedSynchronizer.STATE:Ljava/lang/invoke/VarHandle;
         2: .line 2308
            aload 0 /* l */
            ldc Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            ldc "head"
            ldc Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            invokevirtual java.lang.invoke.MethodHandles$Lookup.findVarHandle:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/invoke/VarHandle;
            putstatic java.util.concurrent.locks.AbstractQueuedSynchronizer.HEAD:Ljava/lang/invoke/VarHandle;
         3: .line 2309
            aload 0 /* l */
            ldc Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            ldc "tail"
            ldc Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            invokevirtual java.lang.invoke.MethodHandles$Lookup.findVarHandle:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/invoke/VarHandle;
            putstatic java.util.concurrent.locks.AbstractQueuedSynchronizer.TAIL:Ljava/lang/invoke/VarHandle;
        end local 0 // java.lang.invoke.MethodHandles$Lookup l
         4: .line 2310
            goto 7
      StackMap locals:
      StackMap stack: java.lang.ReflectiveOperationException
         5: astore 0 /* e */
        start local 0 // java.lang.ReflectiveOperationException e
         6: .line 2311
            new java.lang.ExceptionInInitializerError
            dup
            aload 0 /* e */
            invokespecial java.lang.ExceptionInInitializerError.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 0 // java.lang.ReflectiveOperationException e
         7: .line 2317
      StackMap locals:
      StackMap stack:
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            1    4     0     l  Ljava/lang/invoke/MethodHandles$Lookup;
            6    7     0     e  Ljava/lang/ReflectiveOperationException;
      Exception table:
        from    to  target  type
           0     4       5  Class java.lang.ReflectiveOperationException

  protected void <init>();
    descriptor: ()V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
         0: .line 313
            aload 0 /* this */
            invokespecial java.util.concurrent.locks.AbstractOwnableSynchronizer.<init>:()V
            return
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;

  protected final int getState();
    descriptor: ()I
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
         0: .line 588
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.state:I
            ireturn
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;

  protected final void setState(int);
    descriptor: (I)V
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // int newState
         0: .line 597
            aload 0 /* this */
            iload 1 /* newState */
            putfield java.util.concurrent.locks.AbstractQueuedSynchronizer.state:I
         1: .line 598
            return
        end local 1 // int newState
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     0      this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0    2     1  newState  I
    MethodParameters:
          Name  Flags
      newState  

  protected final boolean compareAndSetState(int, int);
    descriptor: (II)Z
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // int expect
        start local 2 // int update
         0: .line 612
            getstatic java.util.concurrent.locks.AbstractQueuedSynchronizer.STATE:Ljava/lang/invoke/VarHandle;
            aload 0 /* this */
            iload 1 /* expect */
            iload 2 /* update */
            invokevirtual java.lang.invoke.VarHandle.compareAndSet:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;II)Z
            ireturn
        end local 2 // int update
        end local 1 // int expect
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0    this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0    1     1  expect  I
            0    1     2  update  I
    MethodParameters:
        Name  Flags
      expect  
      update  

  private java.util.concurrent.locks.AbstractQueuedSynchronizer$Node enq(java.util.concurrent.locks.AbstractQueuedSynchronizer$Node);
    descriptor: (Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
         0: .line 631
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.tail:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 2 /* oldTail */
        start local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node oldTail
         1: .line 632
            aload 2 /* oldTail */
            ifnull 6
         2: .line 633
            aload 1 /* node */
            aload 2 /* oldTail */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.setPrevRelaxed:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
         3: .line 634
            aload 0 /* this */
            aload 2 /* oldTail */
            aload 1 /* node */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.compareAndSetTail:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
            ifeq 0
         4: .line 635
            aload 2 /* oldTail */
            aload 1 /* node */
            putfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.next:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
         5: .line 636
            aload 2 /* oldTail */
            areturn
         6: .line 639
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            aload 0 /* this */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.initializeSyncQueue:()V
        end local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node oldTail
         7: .line 630
            goto 0
        end local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    8     0     this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0    8     1     node  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            1    7     2  oldTail  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
    MethodParameters:
      Name  Flags
      node  

  private java.util.concurrent.locks.AbstractQueuedSynchronizer$Node addWaiter(java.util.concurrent.locks.AbstractQueuedSynchronizer$Node);
    descriptor: (Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=4, args_size=2
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node mode
         0: .line 651
            new java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
            dup
            aload 1 /* mode */
            invokespecial java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.<init>:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
            astore 2 /* node */
        start local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
         1: .line 654
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.tail:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 3 /* oldTail */
        start local 3 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node oldTail
         2: .line 655
            aload 3 /* oldTail */
            ifnull 7
         3: .line 656
            aload 2 /* node */
            aload 3 /* oldTail */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.setPrevRelaxed:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
         4: .line 657
            aload 0 /* this */
            aload 3 /* oldTail */
            aload 2 /* node */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.compareAndSetTail:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
            ifeq 1
         5: .line 658
            aload 3 /* oldTail */
            aload 2 /* node */
            putfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.next:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
         6: .line 659
            aload 2 /* node */
            areturn
         7: .line 662
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            aload 0 /* this */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.initializeSyncQueue:()V
        end local 3 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node oldTail
         8: .line 653
            goto 1
        end local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
        end local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node mode
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    9     0     this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0    9     1     mode  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            1    9     2     node  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            2    8     3  oldTail  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
    MethodParameters:
      Name  Flags
      mode  

  private void setHead(java.util.concurrent.locks.AbstractQueuedSynchronizer$Node);
    descriptor: (Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
         0: .line 675
            aload 0 /* this */
            aload 1 /* node */
            putfield java.util.concurrent.locks.AbstractQueuedSynchronizer.head:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
         1: .line 676
            aload 1 /* node */
            aconst_null
            putfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.thread:Ljava/lang/Thread;
         2: .line 677
            aload 1 /* node */
            aconst_null
            putfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.prev:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
         3: .line 678
            return
        end local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0    4     1  node  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
    MethodParameters:
      Name  Flags
      node  

  private void unparkSuccessor(java.util.concurrent.locks.AbstractQueuedSynchronizer$Node);
    descriptor: (Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=5, args_size=2
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
         0: .line 691
            aload 1 /* node */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.waitStatus:I
            istore 2 /* ws */
        start local 2 // int ws
         1: .line 692
            iload 2 /* ws */
            ifge 3
         2: .line 693
            aload 1 /* node */
            iload 2 /* ws */
            iconst_0
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.compareAndSetWaitStatus:(II)Z
            pop
         3: .line 701
      StackMap locals: int
      StackMap stack:
            aload 1 /* node */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.next:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 3 /* s */
        start local 3 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node s
         4: .line 702
            aload 3 /* s */
            ifnull 5
            aload 3 /* s */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.waitStatus:I
            ifle 12
         5: .line 703
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            aconst_null
            astore 3 /* s */
         6: .line 704
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.tail:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 4 /* p */
        start local 4 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
         7: goto 11
         8: .line 705
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            aload 4 /* p */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.waitStatus:I
            ifgt 10
         9: .line 706
            aload 4 /* p */
            astore 3 /* s */
        10: .line 704
      StackMap locals:
      StackMap stack:
            aload 4 /* p */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.prev:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 4 /* p */
      StackMap locals:
      StackMap stack:
        11: aload 4 /* p */
            aload 1 /* node */
            if_acmpeq 12
            aload 4 /* p */
            ifnonnull 8
        end local 4 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
        12: .line 708
      StackMap locals:
      StackMap stack:
            aload 3 /* s */
            ifnull 14
        13: .line 709
            aload 3 /* s */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.thread:Ljava/lang/Thread;
            invokestatic java.util.concurrent.locks.LockSupport.unpark:(Ljava/lang/Thread;)V
        14: .line 710
      StackMap locals:
      StackMap stack:
            return
        end local 3 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node s
        end local 2 // int ws
        end local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   15     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0   15     1  node  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            1   15     2    ws  I
            4   15     3     s  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            7   12     4     p  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
    MethodParameters:
      Name  Flags
      node  

  private void doReleaseShared();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=3, args_size=1
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
         0: .line 730
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.head:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 1 /* h */
        start local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node h
         1: .line 731
            aload 1 /* h */
            ifnull 11
            aload 1 /* h */
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.tail:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            if_acmpeq 11
         2: .line 732
            aload 1 /* h */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.waitStatus:I
            istore 2 /* ws */
        start local 2 // int ws
         3: .line 733
            iload 2 /* ws */
            iconst_m1
            if_icmpne 8
         4: .line 734
            aload 1 /* h */
            iconst_m1
            iconst_0
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.compareAndSetWaitStatus:(II)Z
            ifne 6
         5: .line 735
            goto 0
         6: .line 736
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node int
      StackMap stack:
            aload 0 /* this */
            aload 1 /* h */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.unparkSuccessor:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
         7: .line 737
            goto 11
         8: .line 738
      StackMap locals:
      StackMap stack:
            iload 2 /* ws */
            ifne 11
         9: .line 739
            aload 1 /* h */
            iconst_0
            bipush -3
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.compareAndSetWaitStatus:(II)Z
            ifne 11
        10: .line 740
            goto 0
        end local 2 // int ws
        11: .line 742
      StackMap locals:
      StackMap stack:
            aload 1 /* h */
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.head:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            if_acmpne 0
        end local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node h
        12: .line 745
            return
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   13     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            1   12     1     h  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            3   11     2    ws  I

  private void setHeadAndPropagate(java.util.concurrent.locks.AbstractQueuedSynchronizer$Node, int);
    descriptor: (Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;I)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=5, args_size=3
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
        start local 2 // int propagate
         0: .line 756
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.head:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 3 /* h */
        start local 3 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node h
         1: .line 757
            aload 0 /* this */
            aload 1 /* node */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.setHead:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
         2: .line 774
            iload 2 /* propagate */
            ifgt 4
            aload 3 /* h */
            ifnull 4
            aload 3 /* h */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.waitStatus:I
            iflt 4
         3: .line 775
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.head:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            dup
            astore 3 /* h */
            ifnull 4
            aload 3 /* h */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.waitStatus:I
            ifge 7
         4: .line 776
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            aload 1 /* node */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.next:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 4 /* s */
        start local 4 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node s
         5: .line 777
            aload 4 /* s */
            ifnull 6
            aload 4 /* s */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.isShared:()Z
            ifeq 7
         6: .line 778
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            aload 0 /* this */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.doReleaseShared:()V
        end local 4 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node s
         7: .line 780
      StackMap locals:
      StackMap stack:
            return
        end local 3 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node h
        end local 2 // int propagate
        end local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    8     0       this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0    8     1       node  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            0    8     2  propagate  I
            1    8     3          h  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            5    7     4          s  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
    MethodParameters:
           Name  Flags
      node       
      propagate  

  private void cancelAcquire(java.util.concurrent.locks.AbstractQueuedSynchronizer$Node);
    descriptor: (Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=6, args_size=2
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
         0: .line 791
            aload 1 /* node */
            ifnonnull 2
         1: .line 792
            return
         2: .line 794
      StackMap locals:
      StackMap stack:
            aload 1 /* node */
            aconst_null
            putfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.thread:Ljava/lang/Thread;
         3: .line 797
            aload 1 /* node */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.prev:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 2 /* pred */
        start local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node pred
         4: .line 798
            goto 6
         5: .line 799
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            aload 1 /* node */
            aload 2 /* pred */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.prev:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            dup
            astore 2 /* pred */
            putfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.prev:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
         6: .line 798
      StackMap locals:
      StackMap stack:
            aload 2 /* pred */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.waitStatus:I
            ifgt 5
         7: .line 806
            aload 2 /* pred */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.next:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 3 /* predNext */
        start local 3 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node predNext
         8: .line 811
            aload 1 /* node */
            iconst_1
            putfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.waitStatus:I
         9: .line 814
            aload 1 /* node */
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.tail:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            if_acmpne 12
            aload 0 /* this */
            aload 1 /* node */
            aload 2 /* pred */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.compareAndSetTail:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
            ifeq 12
        10: .line 815
            aload 2 /* pred */
            aload 3 /* predNext */
            aconst_null
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.compareAndSetNext:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
            pop
        11: .line 816
            goto 23
        12: .line 820
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            aload 2 /* pred */
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.head:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            if_acmpeq 21
        13: .line 821
            aload 2 /* pred */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.waitStatus:I
            dup
            istore 4 /* ws */
        start local 4 // int ws
        14: iconst_m1
            if_icmpeq 16
        15: .line 822
            iload 4 /* ws */
            ifgt 21
            aload 2 /* pred */
            iload 4 /* ws */
            iconst_m1
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.compareAndSetWaitStatus:(II)Z
            ifeq 21
        16: .line 823
      StackMap locals: int
      StackMap stack:
            aload 2 /* pred */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.thread:Ljava/lang/Thread;
            ifnull 21
        17: .line 824
            aload 1 /* node */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.next:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 5 /* next */
        start local 5 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node next
        18: .line 825
            aload 5 /* next */
            ifnull 22
            aload 5 /* next */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.waitStatus:I
            ifgt 22
        19: .line 826
            aload 2 /* pred */
            aload 3 /* predNext */
            aload 5 /* next */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.compareAndSetNext:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
            pop
        end local 5 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node next
        20: .line 827
            goto 22
        end local 4 // int ws
        21: .line 828
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* node */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.unparkSuccessor:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
        22: .line 831
      StackMap locals:
      StackMap stack:
            aload 1 /* node */
            aload 1 /* node */
            putfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.next:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
        23: .line 833
      StackMap locals:
      StackMap stack:
            return
        end local 3 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node predNext
        end local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node pred
        end local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   24     0      this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0   24     1      node  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            4   24     2      pred  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            8   24     3  predNext  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
           14   21     4        ws  I
           18   20     5      next  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
    MethodParameters:
      Name  Flags
      node  

  private static boolean shouldParkAfterFailedAcquire(java.util.concurrent.locks.AbstractQueuedSynchronizer$Node, java.util.concurrent.locks.AbstractQueuedSynchronizer$Node);
    descriptor: (Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node pred
        start local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
         0: .line 845
            aload 0 /* pred */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.waitStatus:I
            istore 2 /* ws */
        start local 2 // int ws
         1: .line 846
            iload 2 /* ws */
            iconst_m1
            if_icmpne 3
         2: .line 851
            iconst_1
            ireturn
         3: .line 852
      StackMap locals: int
      StackMap stack:
            iload 2 /* ws */
            ifle 9
         4: .line 858
      StackMap locals:
      StackMap stack:
            aload 1 /* node */
            aload 0 /* pred */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.prev:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            dup
            astore 0 /* pred */
            putfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.prev:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
         5: .line 859
            aload 0 /* pred */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.waitStatus:I
         6: .line 857
            ifgt 4
         7: .line 860
            aload 0 /* pred */
            aload 1 /* node */
            putfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.next:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
         8: .line 861
            goto 10
         9: .line 867
      StackMap locals:
      StackMap stack:
            aload 0 /* pred */
            iload 2 /* ws */
            iconst_m1
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.compareAndSetWaitStatus:(II)Z
            pop
        10: .line 869
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        end local 2 // int ws
        end local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node pred
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   11     0  pred  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            0   11     1  node  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            1   11     2    ws  I
    MethodParameters:
      Name  Flags
      pred  
      node  

  static void selfInterrupt();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 876
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            invokevirtual java.lang.Thread.interrupt:()V
         1: .line 877
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  private final boolean parkAndCheckInterrupt();
    descriptor: ()Z
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
         0: .line 885
            aload 0 /* this */
            invokestatic java.util.concurrent.locks.LockSupport.park:(Ljava/lang/Object;)V
         1: .line 886
            invokestatic java.lang.Thread.interrupted:()Z
            ireturn
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;

  final boolean acquireQueued(java.util.concurrent.locks.AbstractQueuedSynchronizer$Node, int);
    descriptor: (Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;I)Z
    flags: (0x0010) ACC_FINAL
    Code:
      stack=2, locals=5, args_size=3
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
        start local 2 // int arg
         0: .line 907
            iconst_0
            istore 3 /* interrupted */
        start local 3 // boolean interrupted
         1: .line 910
      StackMap locals: int
      StackMap stack:
            aload 1 /* node */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.predecessor:()Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 4 /* p */
        start local 4 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
         2: .line 911
            aload 4 /* p */
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.head:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            if_acmpne 7
            aload 0 /* this */
            iload 2 /* arg */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquire:(I)Z
            ifeq 7
         3: .line 912
            aload 0 /* this */
            aload 1 /* node */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.setHead:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
         4: .line 913
            aload 4 /* p */
            aconst_null
            putfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.next:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
         5: .line 914
            iload 3 /* interrupted */
         6: ireturn
         7: .line 916
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            aload 4 /* p */
            aload 1 /* node */
            invokestatic java.util.concurrent.locks.AbstractQueuedSynchronizer.shouldParkAfterFailedAcquire:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
            ifeq 1
         8: .line 917
            iload 3 /* interrupted */
            aload 0 /* this */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt:()Z
            ior
            istore 3 /* interrupted */
        end local 4 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
         9: .line 909
            goto 1
        10: .line 919
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer java.util.concurrent.locks.AbstractQueuedSynchronizer$Node int int
      StackMap stack: java.lang.Throwable
            astore 4 /* t */
        start local 4 // java.lang.Throwable t
        11: .line 920
            aload 0 /* this */
            aload 1 /* node */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.cancelAcquire:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
        12: .line 921
            iload 3 /* interrupted */
            ifeq 14
        13: .line 922
            invokestatic java.util.concurrent.locks.AbstractQueuedSynchronizer.selfInterrupt:()V
        14: .line 923
      StackMap locals: java.lang.Throwable
      StackMap stack:
            aload 4 /* t */
            athrow
        end local 4 // java.lang.Throwable t
        end local 3 // boolean interrupted
        end local 2 // int arg
        end local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   15     0         this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0   15     1         node  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            0   15     2          arg  I
            1   15     3  interrupted  Z
            2    9     4            p  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
           11   15     4            t  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           1     6      10  Class java.lang.Throwable
           7    10      10  Class java.lang.Throwable
    MethodParameters:
      Name  Flags
      node  final
      arg   

  private void doAcquireInterruptibly(int);
    descriptor: (I)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=4, args_size=2
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // int arg
         0: .line 933
            aload 0 /* this */
            getstatic java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.EXCLUSIVE:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.addWaiter:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 2 /* node */
        start local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
         1: .line 936
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            aload 2 /* node */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.predecessor:()Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 3 /* p */
        start local 3 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
         2: .line 937
            aload 3 /* p */
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.head:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            if_acmpne 6
            aload 0 /* this */
            iload 1 /* arg */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquire:(I)Z
            ifeq 6
         3: .line 938
            aload 0 /* this */
            aload 2 /* node */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.setHead:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
         4: .line 939
            aload 3 /* p */
            aconst_null
            putfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.next:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
         5: .line 940
            return
         6: .line 942
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            aload 3 /* p */
            aload 2 /* node */
            invokestatic java.util.concurrent.locks.AbstractQueuedSynchronizer.shouldParkAfterFailedAcquire:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
            ifeq 1
         7: .line 943
            aload 0 /* this */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt:()Z
            ifeq 1
         8: .line 944
            new java.lang.InterruptedException
            dup
            invokespecial java.lang.InterruptedException.<init>:()V
            athrow
        end local 3 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
         9: .line 946
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer int java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack: java.lang.Throwable
            astore 3 /* t */
        start local 3 // java.lang.Throwable t
        10: .line 947
            aload 0 /* this */
            aload 2 /* node */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.cancelAcquire:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
        11: .line 948
            aload 3 /* t */
            athrow
        end local 3 // java.lang.Throwable t
        end local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
        end local 1 // int arg
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   12     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0   12     1   arg  I
            1   12     2  node  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            2    9     3     p  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
           10   12     3     t  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           1     5       9  Class java.lang.Throwable
           6     9       9  Class java.lang.Throwable
    Exceptions:
      throws java.lang.InterruptedException
    MethodParameters:
      Name  Flags
      arg   

  private boolean doAcquireNanos(int, long);
    descriptor: (IJ)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=8, args_size=3
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // int arg
        start local 2 // long nanosTimeout
         0: .line 961
            lload 2 /* nanosTimeout */
            lconst_0
            lcmp
            ifgt 2
         1: .line 962
            iconst_0
            ireturn
         2: .line 963
      StackMap locals:
      StackMap stack:
            invokestatic java.lang.System.nanoTime:()J
            lload 2 /* nanosTimeout */
            ladd
            lstore 4 /* deadline */
        start local 4 // long deadline
         3: .line 964
            aload 0 /* this */
            getstatic java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.EXCLUSIVE:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.addWaiter:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 6 /* node */
        start local 6 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
         4: .line 967
      StackMap locals: long java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            aload 6 /* node */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.predecessor:()Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 7 /* p */
        start local 7 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
         5: .line 968
            aload 7 /* p */
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.head:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            if_acmpne 9
            aload 0 /* this */
            iload 1 /* arg */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquire:(I)Z
            ifeq 9
         6: .line 969
            aload 0 /* this */
            aload 6 /* node */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.setHead:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
         7: .line 970
            aload 7 /* p */
            aconst_null
            putfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.next:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
         8: .line 971
            iconst_1
            ireturn
         9: .line 973
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            lload 4 /* deadline */
            invokestatic java.lang.System.nanoTime:()J
            lsub
            lstore 2 /* nanosTimeout */
        10: .line 974
            lload 2 /* nanosTimeout */
            lconst_0
            lcmp
            ifgt 13
        11: .line 975
            aload 0 /* this */
            aload 6 /* node */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.cancelAcquire:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
        12: .line 976
            iconst_0
            ireturn
        13: .line 978
      StackMap locals:
      StackMap stack:
            aload 7 /* p */
            aload 6 /* node */
            invokestatic java.util.concurrent.locks.AbstractQueuedSynchronizer.shouldParkAfterFailedAcquire:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
            ifeq 16
        14: .line 979
            lload 2 /* nanosTimeout */
            ldc 1000
            lcmp
            ifle 16
        15: .line 980
            aload 0 /* this */
            lload 2 /* nanosTimeout */
            invokestatic java.util.concurrent.locks.LockSupport.parkNanos:(Ljava/lang/Object;J)V
        16: .line 981
      StackMap locals:
      StackMap stack:
            invokestatic java.lang.Thread.interrupted:()Z
            ifeq 4
        17: .line 982
            new java.lang.InterruptedException
            dup
            invokespecial java.lang.InterruptedException.<init>:()V
            athrow
        end local 7 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
        18: .line 984
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer int long long java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack: java.lang.Throwable
            astore 7 /* t */
        start local 7 // java.lang.Throwable t
        19: .line 985
            aload 0 /* this */
            aload 6 /* node */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.cancelAcquire:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
        20: .line 986
            aload 7 /* t */
            athrow
        end local 7 // java.lang.Throwable t
        end local 6 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
        end local 4 // long deadline
        end local 2 // long nanosTimeout
        end local 1 // int arg
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   21     0          this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0   21     1           arg  I
            0   21     2  nanosTimeout  J
            3   21     4      deadline  J
            4   21     6          node  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            5   18     7             p  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
           19   21     7             t  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           4     8      18  Class java.lang.Throwable
           9    12      18  Class java.lang.Throwable
          13    18      18  Class java.lang.Throwable
    Exceptions:
      throws java.lang.InterruptedException
    MethodParameters:
              Name  Flags
      arg           
      nanosTimeout  

  private void doAcquireShared(int);
    descriptor: (I)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=7, args_size=2
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // int arg
         0: .line 995
            aload 0 /* this */
            getstatic java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.SHARED:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.addWaiter:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 2 /* node */
        start local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
         1: .line 996
            iconst_0
            istore 3 /* interrupted */
        start local 3 // boolean interrupted
         2: .line 999
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node int
      StackMap stack:
            aload 2 /* node */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.predecessor:()Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 4 /* p */
        start local 4 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
         3: .line 1000
            aload 4 /* p */
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.head:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            if_acmpne 11
         4: .line 1001
            aload 0 /* this */
            iload 1 /* arg */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireShared:(I)I
            istore 5 /* r */
        start local 5 // int r
         5: .line 1002
            iload 5 /* r */
            iflt 11
         6: .line 1003
            aload 0 /* this */
            aload 2 /* node */
            iload 5 /* r */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.setHeadAndPropagate:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;I)V
         7: .line 1004
            aload 4 /* p */
            aconst_null
            putfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.next:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
         8: .line 1015
            iload 3 /* interrupted */
            ifeq 10
         9: .line 1016
            invokestatic java.util.concurrent.locks.AbstractQueuedSynchronizer.selfInterrupt:()V
        10: .line 1005
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node int
      StackMap stack:
            return
        end local 5 // int r
        11: .line 1008
      StackMap locals:
      StackMap stack:
            aload 4 /* p */
            aload 2 /* node */
            invokestatic java.util.concurrent.locks.AbstractQueuedSynchronizer.shouldParkAfterFailedAcquire:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
            ifeq 2
        12: .line 1009
            iload 3 /* interrupted */
            aload 0 /* this */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt:()Z
            ior
            istore 3 /* interrupted */
        end local 4 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
        13: .line 998
            goto 2
        14: .line 1011
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer int java.util.concurrent.locks.AbstractQueuedSynchronizer$Node int
      StackMap stack: java.lang.Throwable
            astore 4 /* t */
        start local 4 // java.lang.Throwable t
        15: .line 1012
            aload 0 /* this */
            aload 2 /* node */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.cancelAcquire:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
        16: .line 1013
            aload 4 /* t */
            athrow
        end local 4 // java.lang.Throwable t
        17: .line 1014
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 6
        18: .line 1015
            iload 3 /* interrupted */
            ifeq 20
        19: .line 1016
            invokestatic java.util.concurrent.locks.AbstractQueuedSynchronizer.selfInterrupt:()V
        20: .line 1017
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer int java.util.concurrent.locks.AbstractQueuedSynchronizer$Node int top top java.lang.Throwable
      StackMap stack:
            aload 6
            athrow
        end local 3 // boolean interrupted
        end local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
        end local 1 // int arg
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   21     0         this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0   21     1          arg  I
            1   21     2         node  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            2   21     3  interrupted  Z
            3   13     4            p  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            5   11     5            r  I
           15   17     4            t  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           2     8      14  Class java.lang.Throwable
          11    14      14  Class java.lang.Throwable
           2     8      17  any
          11    17      17  any
    MethodParameters:
      Name  Flags
      arg   

  private void doAcquireSharedInterruptibly(int);
    descriptor: (I)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=5, args_size=2
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // int arg
         0: .line 1026
            aload 0 /* this */
            getstatic java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.SHARED:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.addWaiter:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 2 /* node */
        start local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
         1: .line 1029
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            aload 2 /* node */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.predecessor:()Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 3 /* p */
        start local 3 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
         2: .line 1030
            aload 3 /* p */
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.head:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            if_acmpne 8
         3: .line 1031
            aload 0 /* this */
            iload 1 /* arg */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireShared:(I)I
            istore 4 /* r */
        start local 4 // int r
         4: .line 1032
            iload 4 /* r */
            iflt 8
         5: .line 1033
            aload 0 /* this */
            aload 2 /* node */
            iload 4 /* r */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.setHeadAndPropagate:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;I)V
         6: .line 1034
            aload 3 /* p */
            aconst_null
            putfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.next:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
         7: .line 1035
            return
        end local 4 // int r
         8: .line 1038
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            aload 3 /* p */
            aload 2 /* node */
            invokestatic java.util.concurrent.locks.AbstractQueuedSynchronizer.shouldParkAfterFailedAcquire:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
            ifeq 1
         9: .line 1039
            aload 0 /* this */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt:()Z
            ifeq 1
        10: .line 1040
            new java.lang.InterruptedException
            dup
            invokespecial java.lang.InterruptedException.<init>:()V
            athrow
        end local 3 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
        11: .line 1042
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer int java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack: java.lang.Throwable
            astore 3 /* t */
        start local 3 // java.lang.Throwable t
        12: .line 1043
            aload 0 /* this */
            aload 2 /* node */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.cancelAcquire:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
        13: .line 1044
            aload 3 /* t */
            athrow
        end local 3 // java.lang.Throwable t
        end local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
        end local 1 // int arg
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   14     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0   14     1   arg  I
            1   14     2  node  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            2   11     3     p  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            4    8     4     r  I
           12   14     3     t  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           1     7      11  Class java.lang.Throwable
           8    11      11  Class java.lang.Throwable
    Exceptions:
      throws java.lang.InterruptedException
    MethodParameters:
      Name  Flags
      arg   

  private boolean doAcquireSharedNanos(int, long);
    descriptor: (IJ)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=9, args_size=3
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // int arg
        start local 2 // long nanosTimeout
         0: .line 1057
            lload 2 /* nanosTimeout */
            lconst_0
            lcmp
            ifgt 2
         1: .line 1058
            iconst_0
            ireturn
         2: .line 1059
      StackMap locals:
      StackMap stack:
            invokestatic java.lang.System.nanoTime:()J
            lload 2 /* nanosTimeout */
            ladd
            lstore 4 /* deadline */
        start local 4 // long deadline
         3: .line 1060
            aload 0 /* this */
            getstatic java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.SHARED:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.addWaiter:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 6 /* node */
        start local 6 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
         4: .line 1063
      StackMap locals: long java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            aload 6 /* node */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.predecessor:()Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 7 /* p */
        start local 7 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
         5: .line 1064
            aload 7 /* p */
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.head:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            if_acmpne 11
         6: .line 1065
            aload 0 /* this */
            iload 1 /* arg */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireShared:(I)I
            istore 8 /* r */
        start local 8 // int r
         7: .line 1066
            iload 8 /* r */
            iflt 11
         8: .line 1067
            aload 0 /* this */
            aload 6 /* node */
            iload 8 /* r */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.setHeadAndPropagate:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;I)V
         9: .line 1068
            aload 7 /* p */
            aconst_null
            putfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.next:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
        10: .line 1069
            iconst_1
            ireturn
        end local 8 // int r
        11: .line 1072
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            lload 4 /* deadline */
            invokestatic java.lang.System.nanoTime:()J
            lsub
            lstore 2 /* nanosTimeout */
        12: .line 1073
            lload 2 /* nanosTimeout */
            lconst_0
            lcmp
            ifgt 15
        13: .line 1074
            aload 0 /* this */
            aload 6 /* node */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.cancelAcquire:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
        14: .line 1075
            iconst_0
            ireturn
        15: .line 1077
      StackMap locals:
      StackMap stack:
            aload 7 /* p */
            aload 6 /* node */
            invokestatic java.util.concurrent.locks.AbstractQueuedSynchronizer.shouldParkAfterFailedAcquire:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
            ifeq 18
        16: .line 1078
            lload 2 /* nanosTimeout */
            ldc 1000
            lcmp
            ifle 18
        17: .line 1079
            aload 0 /* this */
            lload 2 /* nanosTimeout */
            invokestatic java.util.concurrent.locks.LockSupport.parkNanos:(Ljava/lang/Object;J)V
        18: .line 1080
      StackMap locals:
      StackMap stack:
            invokestatic java.lang.Thread.interrupted:()Z
            ifeq 4
        19: .line 1081
            new java.lang.InterruptedException
            dup
            invokespecial java.lang.InterruptedException.<init>:()V
            athrow
        end local 7 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
        20: .line 1083
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer int long long java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack: java.lang.Throwable
            astore 7 /* t */
        start local 7 // java.lang.Throwable t
        21: .line 1084
            aload 0 /* this */
            aload 6 /* node */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.cancelAcquire:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
        22: .line 1085
            aload 7 /* t */
            athrow
        end local 7 // java.lang.Throwable t
        end local 6 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
        end local 4 // long deadline
        end local 2 // long nanosTimeout
        end local 1 // int arg
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   23     0          this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0   23     1           arg  I
            0   23     2  nanosTimeout  J
            3   23     4      deadline  J
            4   23     6          node  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            5   20     7             p  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            7   11     8             r  I
           21   23     7             t  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           4    10      20  Class java.lang.Throwable
          11    14      20  Class java.lang.Throwable
          15    20      20  Class java.lang.Throwable
    Exceptions:
      throws java.lang.InterruptedException
    MethodParameters:
              Name  Flags
      arg           
      nanosTimeout  

  protected boolean tryAcquire(int);
    descriptor: (I)Z
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // int arg
         0: .line 1118
            new java.lang.UnsupportedOperationException
            dup
            invokespecial java.lang.UnsupportedOperationException.<init>:()V
            athrow
        end local 1 // int arg
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0    1     1   arg  I
    MethodParameters:
      Name  Flags
      arg   

  protected boolean tryRelease(int);
    descriptor: (I)Z
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // int arg
         0: .line 1144
            new java.lang.UnsupportedOperationException
            dup
            invokespecial java.lang.UnsupportedOperationException.<init>:()V
            athrow
        end local 1 // int arg
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0    1     1   arg  I
    MethodParameters:
      Name  Flags
      arg   

  protected int tryAcquireShared(int);
    descriptor: (I)I
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // int arg
         0: .line 1180
            new java.lang.UnsupportedOperationException
            dup
            invokespecial java.lang.UnsupportedOperationException.<init>:()V
            athrow
        end local 1 // int arg
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0    1     1   arg  I
    MethodParameters:
      Name  Flags
      arg   

  protected boolean tryReleaseShared(int);
    descriptor: (I)Z
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // int arg
         0: .line 1205
            new java.lang.UnsupportedOperationException
            dup
            invokespecial java.lang.UnsupportedOperationException.<init>:()V
            athrow
        end local 1 // int arg
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0    1     1   arg  I
    MethodParameters:
      Name  Flags
      arg   

  protected boolean isHeldExclusively();
    descriptor: ()Z
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
         0: .line 1223
            new java.lang.UnsupportedOperationException
            dup
            invokespecial java.lang.UnsupportedOperationException.<init>:()V
            athrow
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;

  public final void acquire(int);
    descriptor: (I)V
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // int arg
         0: .line 1239
            aload 0 /* this */
            iload 1 /* arg */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquire:(I)Z
            ifne 3
         1: .line 1240
            aload 0 /* this */
            aload 0 /* this */
            getstatic java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.EXCLUSIVE:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.addWaiter:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            iload 1 /* arg */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;I)Z
            ifeq 3
         2: .line 1241
            invokestatic java.util.concurrent.locks.AbstractQueuedSynchronizer.selfInterrupt:()V
         3: .line 1242
      StackMap locals:
      StackMap stack:
            return
        end local 1 // int arg
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0    4     1   arg  I
    MethodParameters:
      Name  Flags
      arg   

  public final void acquireInterruptibly(int);
    descriptor: (I)V
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // int arg
         0: .line 1260
            invokestatic java.lang.Thread.interrupted:()Z
            ifeq 2
         1: .line 1261
            new java.lang.InterruptedException
            dup
            invokespecial java.lang.InterruptedException.<init>:()V
            athrow
         2: .line 1262
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 1 /* arg */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquire:(I)Z
            ifne 4
         3: .line 1263
            aload 0 /* this */
            iload 1 /* arg */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireInterruptibly:(I)V
         4: .line 1264
      StackMap locals:
      StackMap stack:
            return
        end local 1 // int arg
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0    5     1   arg  I
    Exceptions:
      throws java.lang.InterruptedException
    MethodParameters:
      Name  Flags
      arg   

  public final boolean tryAcquireNanos(int, long);
    descriptor: (IJ)Z
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=4, locals=4, args_size=3
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // int arg
        start local 2 // long nanosTimeout
         0: .line 1285
            invokestatic java.lang.Thread.interrupted:()Z
            ifeq 2
         1: .line 1286
            new java.lang.InterruptedException
            dup
            invokespecial java.lang.InterruptedException.<init>:()V
            athrow
         2: .line 1287
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 1 /* arg */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquire:(I)Z
            ifne 5
         3: .line 1288
            aload 0 /* this */
            iload 1 /* arg */
            lload 2 /* nanosTimeout */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireNanos:(IJ)Z
            ifne 5
         4: .line 1287
            iconst_0
            ireturn
      StackMap locals:
      StackMap stack:
         5: iconst_1
            ireturn
        end local 2 // long nanosTimeout
        end local 1 // int arg
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    6     0          this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0    6     1           arg  I
            0    6     2  nanosTimeout  J
    Exceptions:
      throws java.lang.InterruptedException
    MethodParameters:
              Name  Flags
      arg           
      nanosTimeout  

  public final boolean release(int);
    descriptor: (I)Z
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // int arg
         0: .line 1302
            aload 0 /* this */
            iload 1 /* arg */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.tryRelease:(I)Z
            ifeq 5
         1: .line 1303
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.head:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 2 /* h */
        start local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node h
         2: .line 1304
            aload 2 /* h */
            ifnull 4
            aload 2 /* h */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.waitStatus:I
            ifeq 4
         3: .line 1305
            aload 0 /* this */
            aload 2 /* h */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.unparkSuccessor:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
         4: .line 1306
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            iconst_1
            ireturn
        end local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node h
         5: .line 1308
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        end local 1 // int arg
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    6     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0    6     1   arg  I
            2    5     2     h  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
    MethodParameters:
      Name  Flags
      arg   

  public final void acquireShared(int);
    descriptor: (I)V
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // int arg
         0: .line 1323
            aload 0 /* this */
            iload 1 /* arg */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireShared:(I)I
            ifge 2
         1: .line 1324
            aload 0 /* this */
            iload 1 /* arg */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireShared:(I)V
         2: .line 1325
      StackMap locals:
      StackMap stack:
            return
        end local 1 // int arg
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0    3     1   arg  I
    MethodParameters:
      Name  Flags
      arg   

  public final void acquireSharedInterruptibly(int);
    descriptor: (I)V
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // int arg
         0: .line 1342
            invokestatic java.lang.Thread.interrupted:()Z
            ifeq 2
         1: .line 1343
            new java.lang.InterruptedException
            dup
            invokespecial java.lang.InterruptedException.<init>:()V
            athrow
         2: .line 1344
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 1 /* arg */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireShared:(I)I
            ifge 4
         3: .line 1345
            aload 0 /* this */
            iload 1 /* arg */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly:(I)V
         4: .line 1346
      StackMap locals:
      StackMap stack:
            return
        end local 1 // int arg
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0    5     1   arg  I
    Exceptions:
      throws java.lang.InterruptedException
    MethodParameters:
      Name  Flags
      arg   

  public final boolean tryAcquireSharedNanos(int, long);
    descriptor: (IJ)Z
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=4, locals=4, args_size=3
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // int arg
        start local 2 // long nanosTimeout
         0: .line 1366
            invokestatic java.lang.Thread.interrupted:()Z
            ifeq 2
         1: .line 1367
            new java.lang.InterruptedException
            dup
            invokespecial java.lang.InterruptedException.<init>:()V
            athrow
         2: .line 1368
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 1 /* arg */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireShared:(I)I
            ifge 5
         3: .line 1369
            aload 0 /* this */
            iload 1 /* arg */
            lload 2 /* nanosTimeout */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedNanos:(IJ)Z
            ifne 5
         4: .line 1368
            iconst_0
            ireturn
      StackMap locals:
      StackMap stack:
         5: iconst_1
            ireturn
        end local 2 // long nanosTimeout
        end local 1 // int arg
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    6     0          this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0    6     1           arg  I
            0    6     2  nanosTimeout  J
    Exceptions:
      throws java.lang.InterruptedException
    MethodParameters:
              Name  Flags
      arg           
      nanosTimeout  

  public final boolean releaseShared(int);
    descriptor: (I)Z
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // int arg
         0: .line 1382
            aload 0 /* this */
            iload 1 /* arg */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.tryReleaseShared:(I)Z
            ifeq 3
         1: .line 1383
            aload 0 /* this */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.doReleaseShared:()V
         2: .line 1384
            iconst_1
            ireturn
         3: .line 1386
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        end local 1 // int arg
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0    4     1   arg  I
    MethodParameters:
      Name  Flags
      arg   

  public final boolean hasQueuedThreads();
    descriptor: ()Z
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=2, locals=3, args_size=1
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
         0: .line 1400
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.tail:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 1 /* p */
        start local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
         1: aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.head:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 2 /* h */
        start local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node h
         2: goto 6
         3: .line 1401
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            aload 1 /* p */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.waitStatus:I
            ifgt 5
         4: .line 1402
            iconst_1
            ireturn
         5: .line 1400
      StackMap locals:
      StackMap stack:
            aload 1 /* p */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.prev:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 1 /* p */
      StackMap locals:
      StackMap stack:
         6: aload 1 /* p */
            aload 2 /* h */
            if_acmpeq 7
            aload 1 /* p */
            ifnonnull 3
        end local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node h
        end local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
         7: .line 1403
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    8     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            1    7     1     p  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            2    7     2     h  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;

  public final boolean hasContended();
    descriptor: ()Z
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
         0: .line 1416
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.head:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            ifnull 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;

  public final java.lang.Thread getFirstQueuedThread();
    descriptor: ()Ljava/lang/Thread;
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
         0: .line 1432
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.head:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.tail:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            if_acmpne 1
            aconst_null
            goto 2
      StackMap locals:
      StackMap stack:
         1: aload 0 /* this */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.fullGetFirstQueuedThread:()Ljava/lang/Thread;
      StackMap locals:
      StackMap stack: java.lang.Thread
         2: areturn
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;

  private java.lang.Thread fullGetFirstQueuedThread();
    descriptor: ()Ljava/lang/Thread;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=7, args_size=1
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
         0: .line 1449
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.head:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            dup
            astore 1 /* h */
        start local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node h
         1: ifnull 5
            aload 1 /* h */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.next:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            dup
            astore 2 /* s */
        start local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node s
         2: ifnull 5
         3: .line 1450
            aload 2 /* s */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.prev:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.head:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            if_acmpne 5
            aload 2 /* s */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.thread:Ljava/lang/Thread;
            dup
            astore 3 /* st */
        start local 3 // java.lang.Thread st
         4: ifnonnull 9
        end local 3 // java.lang.Thread st
        end local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node s
         5: .line 1451
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.head:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            dup
            astore 1 /* h */
            ifnull 10
            aload 1 /* h */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.next:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            dup
            astore 2 /* s */
        start local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node s
         6: ifnull 10
         7: .line 1452
            aload 2 /* s */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.prev:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.head:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            if_acmpne 10
            aload 2 /* s */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.thread:Ljava/lang/Thread;
            dup
            astore 3 /* st */
        start local 3 // java.lang.Thread st
         8: ifnull 10
         9: .line 1453
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node java.lang.Thread
      StackMap stack:
            aload 3 /* st */
            areturn
        end local 3 // java.lang.Thread st
        end local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node s
        10: .line 1463
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 4 /* firstThread */
        start local 4 // java.lang.Thread firstThread
        11: .line 1464
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.tail:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 5 /* p */
        start local 5 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
        12: goto 17
        13: .line 1465
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer java.util.concurrent.locks.AbstractQueuedSynchronizer$Node top top java.lang.Thread java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            aload 5 /* p */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.thread:Ljava/lang/Thread;
            astore 6 /* t */
        start local 6 // java.lang.Thread t
        14: .line 1466
            aload 6 /* t */
            ifnull 16
        15: .line 1467
            aload 6 /* t */
            astore 4 /* firstThread */
        end local 6 // java.lang.Thread t
        16: .line 1464
      StackMap locals:
      StackMap stack:
            aload 5 /* p */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.prev:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 5 /* p */
      StackMap locals:
      StackMap stack:
        17: aload 5 /* p */
            ifnull 18
            aload 5 /* p */
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.head:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            if_acmpne 13
        end local 5 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
        18: .line 1469
      StackMap locals:
      StackMap stack:
            aload 4 /* firstThread */
            areturn
        end local 4 // java.lang.Thread firstThread
        end local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node h
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   19     0         this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            1   19     1            h  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            2    5     2            s  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            6   10     2            s  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            4    5     3           st  Ljava/lang/Thread;
            8   10     3           st  Ljava/lang/Thread;
           11   19     4  firstThread  Ljava/lang/Thread;
           12   18     5            p  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
           14   16     6            t  Ljava/lang/Thread;

  public final boolean isQueued(java.lang.Thread);
    descriptor: (Ljava/lang/Thread;)Z
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // java.lang.Thread thread
         0: .line 1483
            aload 1 /* thread */
            ifnonnull 2
         1: .line 1484
            new java.lang.NullPointerException
            dup
            invokespecial java.lang.NullPointerException.<init>:()V
            athrow
         2: .line 1485
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.tail:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 2 /* p */
        start local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
         3: goto 7
         4: .line 1486
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            aload 2 /* p */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.thread:Ljava/lang/Thread;
            aload 1 /* thread */
            if_acmpne 6
         5: .line 1487
            iconst_1
            ireturn
         6: .line 1485
      StackMap locals:
      StackMap stack:
            aload 2 /* p */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.prev:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 2 /* p */
      StackMap locals:
      StackMap stack:
         7: aload 2 /* p */
            ifnonnull 4
        end local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
         8: .line 1488
            iconst_0
            ireturn
        end local 1 // java.lang.Thread thread
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    9     0    this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0    9     1  thread  Ljava/lang/Thread;
            3    8     2       p  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
    MethodParameters:
        Name  Flags
      thread  

  final boolean apparentlyFirstQueuedIsExclusive();
    descriptor: ()Z
    flags: (0x0010) ACC_FINAL
    Code:
      stack=2, locals=3, args_size=1
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
         0: .line 1502
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.head:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            dup
            astore 1 /* h */
        start local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node h
         1: ifnull 7
         2: .line 1503
            aload 1 /* h */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.next:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            dup
            astore 2 /* s */
        start local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node s
         3: ifnull 7
         4: .line 1504
            aload 2 /* s */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.isShared:()Z
            ifne 7
         5: .line 1505
            aload 2 /* s */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.thread:Ljava/lang/Thread;
            ifnull 7
        end local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node s
         6: .line 1502
            iconst_1
            ireturn
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
         7: iconst_0
            ireturn
        end local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node h
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    8     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            1    8     1     h  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            3    6     2     s  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;

  public final boolean hasQueuedPredecessors();
    descriptor: ()Z
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=2, locals=4, args_size=1
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
         0: .line 1553
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.head:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            dup
            astore 1 /* h */
        start local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node h
         1: ifnull 13
         2: .line 1554
            aload 1 /* h */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.next:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            dup
            astore 2 /* s */
        start local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node s
         3: ifnull 4
            aload 2 /* s */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.waitStatus:I
            ifle 11
         4: .line 1555
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            aconst_null
            astore 2 /* s */
         5: .line 1556
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.tail:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 3 /* p */
        start local 3 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
         6: goto 10
         7: .line 1557
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            aload 3 /* p */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.waitStatus:I
            ifgt 9
         8: .line 1558
            aload 3 /* p */
            astore 2 /* s */
         9: .line 1556
      StackMap locals:
      StackMap stack:
            aload 3 /* p */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.prev:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 3 /* p */
      StackMap locals:
      StackMap stack:
        10: aload 3 /* p */
            aload 1 /* h */
            if_acmpeq 11
            aload 3 /* p */
            ifnonnull 7
        end local 3 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
        11: .line 1561
      StackMap locals:
      StackMap stack:
            aload 2 /* s */
            ifnull 13
            aload 2 /* s */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.thread:Ljava/lang/Thread;
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            if_acmpeq 13
        12: .line 1562
            iconst_1
            ireturn
        end local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node s
        13: .line 1564
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        end local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node h
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   14     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            1   14     1     h  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            3   13     2     s  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            6   11     3     p  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;

  public final int getQueueLength();
    descriptor: ()I
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=1, locals=3, args_size=1
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
         0: .line 1579
            iconst_0
            istore 1 /* n */
        start local 1 // int n
         1: .line 1580
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.tail:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 2 /* p */
        start local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
         2: goto 6
         3: .line 1581
      StackMap locals: int java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            aload 2 /* p */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.thread:Ljava/lang/Thread;
            ifnull 5
         4: .line 1582
            iinc 1 /* n */ 1
         5: .line 1580
      StackMap locals:
      StackMap stack:
            aload 2 /* p */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.prev:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 2 /* p */
      StackMap locals:
      StackMap stack:
         6: aload 2 /* p */
            ifnonnull 3
        end local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
         7: .line 1584
            iload 1 /* n */
            ireturn
        end local 1 // int n
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    8     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            1    8     1     n  I
            2    7     2     p  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;

  public final java.util.Collection<java.lang.Thread> getQueuedThreads();
    descriptor: ()Ljava/util/Collection;
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=2, locals=4, args_size=1
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
         0: .line 1599
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 1 /* list */
        start local 1 // java.util.ArrayList list
         1: .line 1600
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.tail:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 2 /* p */
        start local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
         2: goto 7
         3: .line 1601
      StackMap locals: java.util.ArrayList java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            aload 2 /* p */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.thread:Ljava/lang/Thread;
            astore 3 /* t */
        start local 3 // java.lang.Thread t
         4: .line 1602
            aload 3 /* t */
            ifnull 6
         5: .line 1603
            aload 1 /* list */
            aload 3 /* t */
            invokevirtual java.util.ArrayList.add:(Ljava/lang/Object;)Z
            pop
        end local 3 // java.lang.Thread t
         6: .line 1600
      StackMap locals:
      StackMap stack:
            aload 2 /* p */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.prev:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 2 /* p */
      StackMap locals:
      StackMap stack:
         7: aload 2 /* p */
            ifnonnull 3
        end local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
         8: .line 1605
            aload 1 /* list */
            areturn
        end local 1 // java.util.ArrayList list
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    9     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            1    9     1  list  Ljava/util/ArrayList<Ljava/lang/Thread;>;
            2    8     2     p  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            4    6     3     t  Ljava/lang/Thread;
    Signature: ()Ljava/util/Collection<Ljava/lang/Thread;>;

  public final java.util.Collection<java.lang.Thread> getExclusiveQueuedThreads();
    descriptor: ()Ljava/util/Collection;
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=2, locals=4, args_size=1
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
         0: .line 1617
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 1 /* list */
        start local 1 // java.util.ArrayList list
         1: .line 1618
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.tail:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 2 /* p */
        start local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
         2: goto 8
         3: .line 1619
      StackMap locals: java.util.ArrayList java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            aload 2 /* p */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.isShared:()Z
            ifne 7
         4: .line 1620
            aload 2 /* p */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.thread:Ljava/lang/Thread;
            astore 3 /* t */
        start local 3 // java.lang.Thread t
         5: .line 1621
            aload 3 /* t */
            ifnull 7
         6: .line 1622
            aload 1 /* list */
            aload 3 /* t */
            invokevirtual java.util.ArrayList.add:(Ljava/lang/Object;)Z
            pop
        end local 3 // java.lang.Thread t
         7: .line 1618
      StackMap locals:
      StackMap stack:
            aload 2 /* p */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.prev:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 2 /* p */
      StackMap locals:
      StackMap stack:
         8: aload 2 /* p */
            ifnonnull 3
        end local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
         9: .line 1625
            aload 1 /* list */
            areturn
        end local 1 // java.util.ArrayList list
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   10     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            1   10     1  list  Ljava/util/ArrayList<Ljava/lang/Thread;>;
            2    9     2     p  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            5    7     3     t  Ljava/lang/Thread;
    Signature: ()Ljava/util/Collection<Ljava/lang/Thread;>;

  public final java.util.Collection<java.lang.Thread> getSharedQueuedThreads();
    descriptor: ()Ljava/util/Collection;
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=2, locals=4, args_size=1
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
         0: .line 1637
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 1 /* list */
        start local 1 // java.util.ArrayList list
         1: .line 1638
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.tail:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 2 /* p */
        start local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
         2: goto 8
         3: .line 1639
      StackMap locals: java.util.ArrayList java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            aload 2 /* p */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.isShared:()Z
            ifeq 7
         4: .line 1640
            aload 2 /* p */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.thread:Ljava/lang/Thread;
            astore 3 /* t */
        start local 3 // java.lang.Thread t
         5: .line 1641
            aload 3 /* t */
            ifnull 7
         6: .line 1642
            aload 1 /* list */
            aload 3 /* t */
            invokevirtual java.util.ArrayList.add:(Ljava/lang/Object;)Z
            pop
        end local 3 // java.lang.Thread t
         7: .line 1638
      StackMap locals:
      StackMap stack:
            aload 2 /* p */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.prev:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 2 /* p */
      StackMap locals:
      StackMap stack:
         8: aload 2 /* p */
            ifnonnull 3
        end local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
         9: .line 1645
            aload 1 /* list */
            areturn
        end local 1 // java.util.ArrayList list
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   10     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            1   10     1  list  Ljava/util/ArrayList<Ljava/lang/Thread;>;
            2    9     2     p  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            5    7     3     t  Ljava/lang/Thread;
    Signature: ()Ljava/util/Collection<Ljava/lang/Thread;>;

  public java.lang.String toString();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
         0: .line 1658
            new java.lang.StringBuilder
            dup
            aload 0 /* this */
            invokespecial java.lang.Object.toString:()Ljava/lang/String;
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
         1: .line 1659
            ldc "[State = "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* this */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.getState:()I
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc ", "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
         2: .line 1660
            aload 0 /* this */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.hasQueuedThreads:()Z
            ifeq 3
            ldc "non"
            goto 4
      StackMap locals:
      StackMap stack: java.lang.StringBuilder
         3: ldc ""
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer
      StackMap stack: java.lang.StringBuilder java.lang.String
         4: invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "empty queue]"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
         5: .line 1658
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            areturn
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    6     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;

  final boolean isOnSyncQueue(java.util.concurrent.locks.AbstractQueuedSynchronizer$Node);
    descriptor: (Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
    flags: (0x0010) ACC_FINAL
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
         0: .line 1673
            aload 1 /* node */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.waitStatus:I
            bipush -2
            if_icmpeq 1
            aload 1 /* node */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.prev:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            ifnonnull 2
         1: .line 1674
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
         2: .line 1675
      StackMap locals:
      StackMap stack:
            aload 1 /* node */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.next:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            ifnull 4
         3: .line 1676
            iconst_1
            ireturn
         4: .line 1685
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* node */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.findNodeFromTail:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
            ireturn
        end local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0    5     1  node  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
    MethodParameters:
      Name  Flags
      node  

  private boolean findNodeFromTail(java.util.concurrent.locks.AbstractQueuedSynchronizer$Node);
    descriptor: (Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
         0: .line 1697
            aload 0 /* this */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer.tail:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 2 /* p */
        start local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
         1: .line 1698
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            aload 2 /* p */
            aload 1 /* node */
            if_acmpne 3
         2: .line 1699
            iconst_1
            ireturn
         3: .line 1700
      StackMap locals:
      StackMap stack:
            aload 2 /* p */
            ifnonnull 5
         4: .line 1701
            iconst_0
            ireturn
         5: .line 1702
      StackMap locals:
      StackMap stack:
            aload 2 /* p */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.prev:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 2 /* p */
         6: .line 1697
            goto 1
        end local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
        end local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    7     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0    7     1  node  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            1    7     2     p  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
    MethodParameters:
      Name  Flags
      node  

  final boolean transferForSignal(java.util.concurrent.locks.AbstractQueuedSynchronizer$Node);
    descriptor: (Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
    flags: (0x0010) ACC_FINAL
    Code:
      stack=3, locals=4, args_size=2
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
         0: .line 1717
            aload 1 /* node */
            bipush -2
            iconst_0
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.compareAndSetWaitStatus:(II)Z
            ifne 2
         1: .line 1718
            iconst_0
            ireturn
         2: .line 1726
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* node */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.enq:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            astore 2 /* p */
        start local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
         3: .line 1727
            aload 2 /* p */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.waitStatus:I
            istore 3 /* ws */
        start local 3 // int ws
         4: .line 1728
            iload 3 /* ws */
            ifgt 5
            aload 2 /* p */
            iload 3 /* ws */
            iconst_m1
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.compareAndSetWaitStatus:(II)Z
            ifne 6
         5: .line 1729
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node int
      StackMap stack:
            aload 1 /* node */
            getfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.thread:Ljava/lang/Thread;
            invokestatic java.util.concurrent.locks.LockSupport.unpark:(Ljava/lang/Thread;)V
         6: .line 1730
      StackMap locals:
      StackMap stack:
            iconst_1
            ireturn
        end local 3 // int ws
        end local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node p
        end local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    7     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0    7     1  node  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            3    7     2     p  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            4    7     3    ws  I
    MethodParameters:
      Name  Flags
      node  

  final boolean transferAfterCancelledWait(java.util.concurrent.locks.AbstractQueuedSynchronizer$Node);
    descriptor: (Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
    flags: (0x0010) ACC_FINAL
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
         0: .line 1741
            aload 1 /* node */
            bipush -2
            iconst_0
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.compareAndSetWaitStatus:(II)Z
            ifeq 4
         1: .line 1742
            aload 0 /* this */
            aload 1 /* node */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.enq:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            pop
         2: .line 1743
            iconst_1
            ireturn
         3: .line 1752
      StackMap locals:
      StackMap stack:
            invokestatic java.lang.Thread.yield:()V
         4: .line 1751
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* node */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.isOnSyncQueue:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
            ifeq 3
         5: .line 1753
            iconst_0
            ireturn
        end local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    6     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0    6     1  node  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
    MethodParameters:
      Name  Flags
      node  

  final int fullyRelease(java.util.concurrent.locks.AbstractQueuedSynchronizer$Node);
    descriptor: (Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)I
    flags: (0x0010) ACC_FINAL
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
         0: .line 1764
            aload 0 /* this */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.getState:()I
            istore 2 /* savedState */
        start local 2 // int savedState
         1: .line 1765
            aload 0 /* this */
            iload 2 /* savedState */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.release:(I)Z
            ifeq 4
         2: .line 1766
            iload 2 /* savedState */
         3: ireturn
         4: .line 1767
      StackMap locals: int
      StackMap stack:
            new java.lang.IllegalMonitorStateException
            dup
            invokespecial java.lang.IllegalMonitorStateException.<init>:()V
            athrow
        end local 2 // int savedState
         5: .line 1768
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack: java.lang.Throwable
            astore 2 /* t */
        start local 2 // java.lang.Throwable t
         6: .line 1769
            aload 1 /* node */
            iconst_1
            putfield java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.waitStatus:I
         7: .line 1770
            aload 2 /* t */
            athrow
        end local 2 // java.lang.Throwable t
        end local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node node
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    8     0        this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0    8     1        node  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            1    5     2  savedState  I
            6    8     2           t  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           0     3       5  Class java.lang.Throwable
           4     5       5  Class java.lang.Throwable
    MethodParameters:
      Name  Flags
      node  

  public final boolean owns(java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject);
    descriptor: (Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)Z
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject condition
         0: .line 1785
            aload 1 /* condition */
            aload 0 /* this */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.isOwnedBy:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;)Z
            ireturn
        end local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject condition
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    1     0       this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0    1     1  condition  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;
    MethodParameters:
           Name  Flags
      condition  

  public final boolean hasWaiters(java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject);
    descriptor: (Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)Z
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject condition
         0: .line 1805
            aload 0 /* this */
            aload 1 /* condition */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.owns:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)Z
            ifne 2
         1: .line 1806
            new java.lang.IllegalArgumentException
            dup
            ldc "Not owner"
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 1807
      StackMap locals:
      StackMap stack:
            aload 1 /* condition */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.hasWaiters:()Z
            ireturn
        end local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject condition
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    3     0       this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0    3     1  condition  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;
    MethodParameters:
           Name  Flags
      condition  

  public final int getWaitQueueLength(java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject);
    descriptor: (Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)I
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject condition
         0: .line 1827
            aload 0 /* this */
            aload 1 /* condition */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.owns:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)Z
            ifne 2
         1: .line 1828
            new java.lang.IllegalArgumentException
            dup
            ldc "Not owner"
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 1829
      StackMap locals:
      StackMap stack:
            aload 1 /* condition */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.getWaitQueueLength:()I
            ireturn
        end local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject condition
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    3     0       this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0    3     1  condition  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;
    MethodParameters:
           Name  Flags
      condition  

  public final java.util.Collection<java.lang.Thread> getWaitingThreads(java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject);
    descriptor: (Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)Ljava/util/Collection;
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject condition
         0: .line 1849
            aload 0 /* this */
            aload 1 /* condition */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer.owns:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)Z
            ifne 2
         1: .line 1850
            new java.lang.IllegalArgumentException
            dup
            ldc "Not owner"
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 1851
      StackMap locals:
      StackMap stack:
            aload 1 /* condition */
            invokevirtual java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.getWaitingThreads:()Ljava/util/Collection;
            areturn
        end local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject condition
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    3     0       this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0    3     1  condition  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;
    Signature: (Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)Ljava/util/Collection<Ljava/lang/Thread;>;
    MethodParameters:
           Name  Flags
      condition  

  private final void initializeSyncQueue();
    descriptor: ()V
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Code:
      stack=5, locals=2, args_size=1
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
         0: .line 2324
            getstatic java.util.concurrent.locks.AbstractQueuedSynchronizer.HEAD:Ljava/lang/invoke/VarHandle;
            aload 0 /* this */
            aconst_null
            new java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
            dup
            invokespecial java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.<init>:()V
            dup
            astore 1 /* h */
        start local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node h
         1: invokevirtual java.lang.invoke.VarHandle.compareAndSet:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;Ljava/lang/Void;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
            ifeq 3
         2: .line 2325
            aload 0 /* this */
            aload 1 /* h */
            putfield java.util.concurrent.locks.AbstractQueuedSynchronizer.tail:Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
         3: .line 2326
      StackMap locals: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
      StackMap stack:
            return
        end local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node h
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            1    4     1     h  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;

  private final boolean compareAndSetTail(java.util.concurrent.locks.AbstractQueuedSynchronizer$Node, java.util.concurrent.locks.AbstractQueuedSynchronizer$Node);
    descriptor: (Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
        start local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node expect
        start local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node update
         0: .line 2332
            getstatic java.util.concurrent.locks.AbstractQueuedSynchronizer.TAIL:Ljava/lang/invoke/VarHandle;
            aload 0 /* this */
            aload 1 /* expect */
            aload 2 /* update */
            invokevirtual java.lang.invoke.VarHandle.compareAndSet:(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
            ireturn
        end local 2 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node update
        end local 1 // java.util.concurrent.locks.AbstractQueuedSynchronizer$Node expect
        end local 0 // java.util.concurrent.locks.AbstractQueuedSynchronizer this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0    this  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;
            0    1     1  expect  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
            0    1     2  update  Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
    MethodParameters:
        Name  Flags
      expect  
      update  
}
SourceFile: "AbstractQueuedSynchronizer.java"
NestMembers:
  java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject  java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
InnerClasses:
  public final Lookup = java.lang.invoke.MethodHandles$Lookup of java.lang.invoke.MethodHandles
  public ConditionObject = java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject of java.util.concurrent.locks.AbstractQueuedSynchronizer
  final Node = java.util.concurrent.locks.AbstractQueuedSynchronizer$Node of java.util.concurrent.locks.AbstractQueuedSynchronizer