public class org.jruby.util.ShellLauncher$POpenProcess extends java.lang.Process
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.jruby.util.ShellLauncher$POpenProcess
  super_class: java.lang.Process
{
  private final java.lang.Process child;
    descriptor: Ljava/lang/Process;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final boolean waitForChild;
    descriptor: Z
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private java.io.InputStream realInput;
    descriptor: Ljava/io/InputStream;
    flags: (0x0002) ACC_PRIVATE

  private java.io.OutputStream realOutput;
    descriptor: Ljava/io/OutputStream;
    flags: (0x0002) ACC_PRIVATE

  private java.io.InputStream realInerr;
    descriptor: Ljava/io/InputStream;
    flags: (0x0002) ACC_PRIVATE

  private java.io.InputStream input;
    descriptor: Ljava/io/InputStream;
    flags: (0x0002) ACC_PRIVATE

  private java.io.OutputStream output;
    descriptor: Ljava/io/OutputStream;
    flags: (0x0002) ACC_PRIVATE

  private java.io.InputStream inerr;
    descriptor: Ljava/io/InputStream;
    flags: (0x0002) ACC_PRIVATE

  private java.nio.channels.FileChannel inputChannel;
    descriptor: Ljava/nio/channels/FileChannel;
    flags: (0x0002) ACC_PRIVATE

  private java.nio.channels.FileChannel outputChannel;
    descriptor: Ljava/nio/channels/FileChannel;
    flags: (0x0002) ACC_PRIVATE

  private java.nio.channels.FileChannel inerrChannel;
    descriptor: Ljava/nio/channels/FileChannel;
    flags: (0x0002) ACC_PRIVATE

  private org.jruby.util.ShellLauncher$Pumper inputPumper;
    descriptor: Lorg/jruby/util/ShellLauncher$Pumper;
    flags: (0x0002) ACC_PRIVATE

  private org.jruby.util.ShellLauncher$Pumper inerrPumper;
    descriptor: Lorg/jruby/util/ShellLauncher$Pumper;
    flags: (0x0002) ACC_PRIVATE

  public void <init>(java.lang.Process, org.jruby.Ruby, org.jruby.util.io.IOOptions);
    descriptor: (Ljava/lang/Process;Lorg/jruby/Ruby;Lorg/jruby/util/io/IOOptions;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // org.jruby.util.ShellLauncher$POpenProcess this
        start local 1 // java.lang.Process child
        start local 2 // org.jruby.Ruby runtime
        start local 3 // org.jruby.util.io.IOOptions modes
         0: .line 871
            aload 0 /* this */
            aload 1 /* child */
            aload 2 /* runtime */
            aload 3 /* modes */
            invokevirtual org.jruby.util.io.IOOptions.getModeFlags:()Lorg/jruby/util/io/ModeFlags;
            invokespecial org.jruby.util.ShellLauncher$POpenProcess.<init>:(Ljava/lang/Process;Lorg/jruby/Ruby;Lorg/jruby/util/io/ModeFlags;)V
         1: .line 872
            return
        end local 3 // org.jruby.util.io.IOOptions modes
        end local 2 // org.jruby.Ruby runtime
        end local 1 // java.lang.Process child
        end local 0 // org.jruby.util.ShellLauncher$POpenProcess this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    2     0     this  Lorg/jruby/util/ShellLauncher$POpenProcess;
            0    2     1    child  Ljava/lang/Process;
            0    2     2  runtime  Lorg/jruby/Ruby;
            0    2     3    modes  Lorg/jruby/util/io/IOOptions;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
         Name  Flags
      child    
      runtime  
      modes    

  public void <init>(java.lang.Process, org.jruby.Ruby, org.jruby.util.io.ModeFlags);
    descriptor: (Ljava/lang/Process;Lorg/jruby/Ruby;Lorg/jruby/util/io/ModeFlags;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=4, args_size=4
        start local 0 // org.jruby.util.ShellLauncher$POpenProcess this
        start local 1 // java.lang.Process child
        start local 2 // org.jruby.Ruby runtime
        start local 3 // org.jruby.util.io.ModeFlags modes
         0: .line 874
            aload 0 /* this */
            invokespecial java.lang.Process.<init>:()V
         1: .line 875
            aload 0 /* this */
            aload 1 /* child */
            putfield org.jruby.util.ShellLauncher$POpenProcess.child:Ljava/lang/Process;
         2: .line 877
            aload 3 /* modes */
            invokevirtual org.jruby.util.io.ModeFlags.isWritable:()Z
            ifeq 6
         3: .line 878
            aload 0 /* this */
            iconst_1
            putfield org.jruby.util.ShellLauncher$POpenProcess.waitForChild:Z
         4: .line 879
            aload 0 /* this */
            aload 1 /* child */
            invokevirtual org.jruby.util.ShellLauncher$POpenProcess.prepareOutput:(Ljava/lang/Process;)V
         5: .line 880
            goto 10
         6: .line 881
      StackMap locals: org.jruby.util.ShellLauncher$POpenProcess java.lang.Process org.jruby.Ruby org.jruby.util.io.ModeFlags
      StackMap stack:
            aload 0 /* this */
            iconst_0
            putfield org.jruby.util.ShellLauncher$POpenProcess.waitForChild:Z
         7: .line 885
            aload 1 /* child */
            invokevirtual java.lang.Process.getOutputStream:()Ljava/io/OutputStream;
            invokevirtual java.io.OutputStream.close:()V
         8: goto 10
      StackMap locals:
      StackMap stack: java.io.IOException
         9: pop
        10: .line 888
      StackMap locals:
      StackMap stack:
            aload 3 /* modes */
            invokevirtual org.jruby.util.io.ModeFlags.isReadable:()Z
            ifeq 13
        11: .line 889
            aload 0 /* this */
            aload 1 /* child */
            invokevirtual org.jruby.util.ShellLauncher$POpenProcess.prepareInput:(Ljava/lang/Process;)V
        12: .line 890
            goto 14
        13: .line 891
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* child */
            aload 2 /* runtime */
            invokevirtual org.jruby.util.ShellLauncher$POpenProcess.pumpInput:(Ljava/lang/Process;Lorg/jruby/Ruby;)V
        14: .line 894
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* child */
            aload 2 /* runtime */
            invokevirtual org.jruby.util.ShellLauncher$POpenProcess.pumpInerr:(Ljava/lang/Process;Lorg/jruby/Ruby;)V
        15: .line 895
            return
        end local 3 // org.jruby.util.io.ModeFlags modes
        end local 2 // org.jruby.Ruby runtime
        end local 1 // java.lang.Process child
        end local 0 // org.jruby.util.ShellLauncher$POpenProcess this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   16     0     this  Lorg/jruby/util/ShellLauncher$POpenProcess;
            0   16     1    child  Ljava/lang/Process;
            0   16     2  runtime  Lorg/jruby/Ruby;
            0   16     3    modes  Lorg/jruby/util/io/ModeFlags;
      Exception table:
        from    to  target  type
           7     8       9  Class java.io.IOException
    MethodParameters:
         Name  Flags
      child    
      runtime  
      modes    

  public void <init>(java.lang.Process);
    descriptor: (Ljava/lang/Process;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.jruby.util.ShellLauncher$POpenProcess this
        start local 1 // java.lang.Process child
         0: .line 897
            aload 0 /* this */
            invokespecial java.lang.Process.<init>:()V
         1: .line 898
            aload 0 /* this */
            aload 1 /* child */
            putfield org.jruby.util.ShellLauncher$POpenProcess.child:Ljava/lang/Process;
         2: .line 899
            aload 0 /* this */
            iconst_0
            putfield org.jruby.util.ShellLauncher$POpenProcess.waitForChild:Z
         3: .line 901
            aload 0 /* this */
            aload 1 /* child */
            invokevirtual org.jruby.util.ShellLauncher$POpenProcess.prepareOutput:(Ljava/lang/Process;)V
         4: .line 902
            aload 0 /* this */
            aload 1 /* child */
            invokevirtual org.jruby.util.ShellLauncher$POpenProcess.prepareInput:(Ljava/lang/Process;)V
         5: .line 903
            aload 0 /* this */
            aload 1 /* child */
            invokevirtual org.jruby.util.ShellLauncher$POpenProcess.prepareInerr:(Ljava/lang/Process;)V
         6: .line 904
            return
        end local 1 // java.lang.Process child
        end local 0 // org.jruby.util.ShellLauncher$POpenProcess this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    7     0   this  Lorg/jruby/util/ShellLauncher$POpenProcess;
            0    7     1  child  Ljava/lang/Process;
    MethodParameters:
       Name  Flags
      child  

  public java.io.OutputStream getOutputStream();
    descriptor: ()Ljava/io/OutputStream;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.jruby.util.ShellLauncher$POpenProcess this
         0: .line 908
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.output:Ljava/io/OutputStream;
            areturn
        end local 0 // org.jruby.util.ShellLauncher$POpenProcess this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/jruby/util/ShellLauncher$POpenProcess;

  public java.io.InputStream getInputStream();
    descriptor: ()Ljava/io/InputStream;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.jruby.util.ShellLauncher$POpenProcess this
         0: .line 913
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.input:Ljava/io/InputStream;
            areturn
        end local 0 // org.jruby.util.ShellLauncher$POpenProcess this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/jruby/util/ShellLauncher$POpenProcess;

  public java.io.InputStream getErrorStream();
    descriptor: ()Ljava/io/InputStream;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.jruby.util.ShellLauncher$POpenProcess this
         0: .line 918
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.inerr:Ljava/io/InputStream;
            areturn
        end local 0 // org.jruby.util.ShellLauncher$POpenProcess this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/jruby/util/ShellLauncher$POpenProcess;

  public java.nio.channels.FileChannel getInput();
    descriptor: ()Ljava/nio/channels/FileChannel;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.jruby.util.ShellLauncher$POpenProcess this
         0: .line 922
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.inputChannel:Ljava/nio/channels/FileChannel;
            areturn
        end local 0 // org.jruby.util.ShellLauncher$POpenProcess this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/jruby/util/ShellLauncher$POpenProcess;

  public java.nio.channels.FileChannel getOutput();
    descriptor: ()Ljava/nio/channels/FileChannel;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.jruby.util.ShellLauncher$POpenProcess this
         0: .line 926
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.outputChannel:Ljava/nio/channels/FileChannel;
            areturn
        end local 0 // org.jruby.util.ShellLauncher$POpenProcess this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/jruby/util/ShellLauncher$POpenProcess;

  public java.nio.channels.FileChannel getError();
    descriptor: ()Ljava/nio/channels/FileChannel;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.jruby.util.ShellLauncher$POpenProcess this
         0: .line 930
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.inerrChannel:Ljava/nio/channels/FileChannel;
            areturn
        end local 0 // org.jruby.util.ShellLauncher$POpenProcess this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/jruby/util/ShellLauncher$POpenProcess;

  public boolean hasOutput();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.jruby.util.ShellLauncher$POpenProcess this
         0: .line 934
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.output:Ljava/io/OutputStream;
            ifnonnull 1
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.outputChannel:Ljava/nio/channels/FileChannel;
            ifnonnull 1
            iconst_0
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_1
            ireturn
        end local 0 // org.jruby.util.ShellLauncher$POpenProcess this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/jruby/util/ShellLauncher$POpenProcess;

  public java.lang.Process getChild();
    descriptor: ()Ljava/lang/Process;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.jruby.util.ShellLauncher$POpenProcess this
         0: .line 938
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.child:Ljava/lang/Process;
            areturn
        end local 0 // org.jruby.util.ShellLauncher$POpenProcess this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/jruby/util/ShellLauncher$POpenProcess;

  public int waitFor();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.jruby.util.ShellLauncher$POpenProcess this
         0: .line 943
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.child:Ljava/lang/Process;
            invokevirtual java.lang.Process.waitFor:()I
            ireturn
        end local 0 // org.jruby.util.ShellLauncher$POpenProcess this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/jruby/util/ShellLauncher$POpenProcess;
    Exceptions:
      throws java.lang.InterruptedException

  public int exitValue();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.jruby.util.ShellLauncher$POpenProcess this
         0: .line 948
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.child:Ljava/lang/Process;
            invokevirtual java.lang.Process.exitValue:()I
            ireturn
        end local 0 // org.jruby.util.ShellLauncher$POpenProcess this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/jruby/util/ShellLauncher$POpenProcess;

  public void destroy();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=3, args_size=1
        start local 0 // org.jruby.util.ShellLauncher$POpenProcess this
         0: .line 956
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.input:Ljava/io/InputStream;
            ifnull 3
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.input:Ljava/io/InputStream;
            invokevirtual java.io.InputStream.close:()V
         1: goto 3
      StackMap locals:
      StackMap stack: java.lang.Exception
         2: pop
         3: .line 957
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.inerr:Ljava/io/InputStream;
            ifnull 6
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.inerr:Ljava/io/InputStream;
            invokevirtual java.io.InputStream.close:()V
         4: goto 6
      StackMap locals:
      StackMap stack: java.lang.Exception
         5: pop
         6: .line 958
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.output:Ljava/io/OutputStream;
            ifnull 9
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.output:Ljava/io/OutputStream;
            invokevirtual java.io.OutputStream.close:()V
         7: goto 9
      StackMap locals:
      StackMap stack: java.lang.Exception
         8: pop
         9: .line 959
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.inputChannel:Ljava/nio/channels/FileChannel;
            ifnull 12
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.inputChannel:Ljava/nio/channels/FileChannel;
            invokevirtual java.nio.channels.FileChannel.close:()V
        10: goto 12
      StackMap locals:
      StackMap stack: java.lang.Exception
        11: pop
        12: .line 960
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.inerrChannel:Ljava/nio/channels/FileChannel;
            ifnull 15
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.inerrChannel:Ljava/nio/channels/FileChannel;
            invokevirtual java.nio.channels.FileChannel.close:()V
        13: goto 15
      StackMap locals:
      StackMap stack: java.lang.Exception
        14: pop
        15: .line 961
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.outputChannel:Ljava/nio/channels/FileChannel;
            ifnull 18
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.outputChannel:Ljava/nio/channels/FileChannel;
            invokevirtual java.nio.channels.FileChannel.close:()V
        16: goto 18
      StackMap locals:
      StackMap stack: java.lang.Exception
        17: pop
        18: .line 965
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            dup
            astore 1
            monitorenter
        19: .line 966
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.inputPumper:Lorg/jruby/util/ShellLauncher$Pumper;
            ifnull 24
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.inputPumper:Lorg/jruby/util/ShellLauncher$Pumper;
            dup
            astore 2
            monitorenter
        20: aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.inputPumper:Lorg/jruby/util/ShellLauncher$Pumper;
            invokeinterface org.jruby.util.ShellLauncher$Pumper.quit:()V
            aload 2
            monitorexit
        21: goto 24
      StackMap locals: org.jruby.util.ShellLauncher$POpenProcess org.jruby.util.ShellLauncher$POpenProcess org.jruby.util.ShellLauncher$Pumper
      StackMap stack: java.lang.Throwable
        22: aload 2
            monitorexit
        23: athrow
        24: .line 967
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.inerrPumper:Lorg/jruby/util/ShellLauncher$Pumper;
            ifnull 29
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.inerrPumper:Lorg/jruby/util/ShellLauncher$Pumper;
            dup
            astore 2
            monitorenter
        25: aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.inerrPumper:Lorg/jruby/util/ShellLauncher$Pumper;
            invokeinterface org.jruby.util.ShellLauncher$Pumper.quit:()V
            aload 2
            monitorexit
        26: goto 29
      StackMap locals: org.jruby.util.ShellLauncher$POpenProcess org.jruby.util.ShellLauncher$POpenProcess org.jruby.util.ShellLauncher$Pumper
      StackMap stack: java.lang.Throwable
        27: aload 2
            monitorexit
        28: athrow
        29: .line 968
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.waitForChild:Z
            ifeq 32
        30: .line 969
            aload 0 /* this */
            invokevirtual org.jruby.util.ShellLauncher$POpenProcess.waitFor:()I
            pop
        31: .line 970
            goto 33
        32: .line 971
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.child:Ljava/lang/Process;
            invokestatic org.jruby.RubyIO.obliterateProcess:(Ljava/lang/Process;)V
        33: .line 965
      StackMap locals:
      StackMap stack:
            aload 1
            monitorexit
        34: goto 39
      StackMap locals:
      StackMap stack: java.lang.Throwable
        35: aload 1
            monitorexit
        36: athrow
        37: .line 974
      StackMap locals: org.jruby.util.ShellLauncher$POpenProcess
      StackMap stack: java.lang.InterruptedException
            pop
        38: .line 975
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            invokevirtual java.lang.Thread.interrupt:()V
        39: .line 977
      StackMap locals:
      StackMap stack:
            return
        end local 0 // org.jruby.util.ShellLauncher$POpenProcess this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   40     0  this  Lorg/jruby/util/ShellLauncher$POpenProcess;
      Exception table:
        from    to  target  type
           0     1       2  Class java.lang.Exception
           3     4       5  Class java.lang.Exception
           6     7       8  Class java.lang.Exception
           9    10      11  Class java.lang.Exception
          12    13      14  Class java.lang.Exception
          15    16      17  Class java.lang.Exception
          20    21      22  any
          22    23      22  any
          25    26      27  any
          27    28      27  any
          19    34      35  any
          35    36      35  any
           0    37      37  Class java.lang.InterruptedException

  private void prepareInput(java.lang.Process);
    descriptor: (Ljava/lang/Process;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.jruby.util.ShellLauncher$POpenProcess this
        start local 1 // java.lang.Process child
         0: .line 981
            aload 0 /* this */
            aload 1 /* child */
            invokevirtual java.lang.Process.getInputStream:()Ljava/io/InputStream;
            putfield org.jruby.util.ShellLauncher$POpenProcess.realInput:Ljava/io/InputStream;
         1: .line 984
            aload 0 /* this */
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.realInput:Ljava/io/InputStream;
            putfield org.jruby.util.ShellLauncher$POpenProcess.input:Ljava/io/InputStream;
         2: .line 985
            aload 0 /* this */
            aconst_null
            putfield org.jruby.util.ShellLauncher$POpenProcess.inputChannel:Ljava/nio/channels/FileChannel;
         3: .line 986
            aload 0 /* this */
            aconst_null
            putfield org.jruby.util.ShellLauncher$POpenProcess.inputPumper:Lorg/jruby/util/ShellLauncher$Pumper;
         4: .line 987
            return
        end local 1 // java.lang.Process child
        end local 0 // org.jruby.util.ShellLauncher$POpenProcess this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    5     0   this  Lorg/jruby/util/ShellLauncher$POpenProcess;
            0    5     1  child  Ljava/lang/Process;
    MethodParameters:
       Name  Flags
      child  

  private void prepareInerr(java.lang.Process);
    descriptor: (Ljava/lang/Process;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.jruby.util.ShellLauncher$POpenProcess this
        start local 1 // java.lang.Process child
         0: .line 991
            aload 0 /* this */
            aload 1 /* child */
            invokevirtual java.lang.Process.getErrorStream:()Ljava/io/InputStream;
            putfield org.jruby.util.ShellLauncher$POpenProcess.realInerr:Ljava/io/InputStream;
         1: .line 994
            aload 0 /* this */
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.realInerr:Ljava/io/InputStream;
            putfield org.jruby.util.ShellLauncher$POpenProcess.inerr:Ljava/io/InputStream;
         2: .line 995
            aload 0 /* this */
            aconst_null
            putfield org.jruby.util.ShellLauncher$POpenProcess.inerrChannel:Ljava/nio/channels/FileChannel;
         3: .line 996
            aload 0 /* this */
            aconst_null
            putfield org.jruby.util.ShellLauncher$POpenProcess.inerrPumper:Lorg/jruby/util/ShellLauncher$Pumper;
         4: .line 997
            return
        end local 1 // java.lang.Process child
        end local 0 // org.jruby.util.ShellLauncher$POpenProcess this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    5     0   this  Lorg/jruby/util/ShellLauncher$POpenProcess;
            0    5     1  child  Ljava/lang/Process;
    MethodParameters:
       Name  Flags
      child  

  private void prepareOutput(java.lang.Process);
    descriptor: (Ljava/lang/Process;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.jruby.util.ShellLauncher$POpenProcess this
        start local 1 // java.lang.Process child
         0: .line 1001
            aload 0 /* this */
            aload 1 /* child */
            invokevirtual java.lang.Process.getOutputStream:()Ljava/io/OutputStream;
            putfield org.jruby.util.ShellLauncher$POpenProcess.realOutput:Ljava/io/OutputStream;
         1: .line 1002
            aload 0 /* this */
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.realOutput:Ljava/io/OutputStream;
            invokestatic org.jruby.util.io.ChannelHelper.unwrapBufferedStream:(Ljava/io/OutputStream;)Ljava/io/OutputStream;
            putfield org.jruby.util.ShellLauncher$POpenProcess.output:Ljava/io/OutputStream;
         2: .line 1003
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.output:Ljava/io/OutputStream;
            instanceof java.io.FileOutputStream
            ifeq 5
         3: .line 1004
            aload 0 /* this */
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.output:Ljava/io/OutputStream;
            checkcast java.io.FileOutputStream
            invokevirtual java.io.FileOutputStream.getChannel:()Ljava/nio/channels/FileChannel;
            putfield org.jruby.util.ShellLauncher$POpenProcess.outputChannel:Ljava/nio/channels/FileChannel;
         4: .line 1005
            goto 6
         5: .line 1006
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aconst_null
            putfield org.jruby.util.ShellLauncher$POpenProcess.outputChannel:Ljava/nio/channels/FileChannel;
         6: .line 1008
      StackMap locals:
      StackMap stack:
            return
        end local 1 // java.lang.Process child
        end local 0 // org.jruby.util.ShellLauncher$POpenProcess this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    7     0   this  Lorg/jruby/util/ShellLauncher$POpenProcess;
            0    7     1  child  Ljava/lang/Process;
    MethodParameters:
       Name  Flags
      child  

  private void pumpInput(java.lang.Process, org.jruby.Ruby);
    descriptor: (Ljava/lang/Process;Lorg/jruby/Ruby;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=9, locals=7, args_size=3
        start local 0 // org.jruby.util.ShellLauncher$POpenProcess this
        start local 1 // java.lang.Process child
        start local 2 // org.jruby.Ruby runtime
         0: .line 1012
            aload 1 /* child */
            invokevirtual java.lang.Process.getInputStream:()Ljava/io/InputStream;
            invokestatic org.jruby.util.io.ChannelHelper.unwrapBufferedStream:(Ljava/io/InputStream;)Ljava/io/InputStream;
            astore 3 /* childIn */
        start local 3 // java.io.InputStream childIn
         1: .line 1013
            aconst_null
            astore 4 /* childInChannel */
        start local 4 // java.nio.channels.FileChannel childInChannel
         2: .line 1014
            aload 3 /* childIn */
            instanceof java.io.FileInputStream
            ifeq 4
         3: .line 1015
            aload 3 /* childIn */
            checkcast java.io.FileInputStream
            invokevirtual java.io.FileInputStream.getChannel:()Ljava/nio/channels/FileChannel;
            astore 4 /* childInChannel */
         4: .line 1017
      StackMap locals: java.io.InputStream java.nio.channels.FileChannel
      StackMap stack:
            aload 2 /* runtime */
            invokevirtual org.jruby.Ruby.getOut:()Ljava/io/PrintStream;
            invokestatic org.jruby.util.io.ChannelHelper.unwrapBufferedStream:(Ljava/io/OutputStream;)Ljava/io/OutputStream;
            astore 5 /* parentOut */
        start local 5 // java.io.OutputStream parentOut
         5: .line 1018
            aconst_null
            astore 6 /* parentOutChannel */
        start local 6 // java.nio.channels.FileChannel parentOutChannel
         6: .line 1019
            aload 5 /* parentOut */
            instanceof java.io.FileOutputStream
            ifeq 8
         7: .line 1020
            aload 5 /* parentOut */
            checkcast java.io.FileOutputStream
            invokevirtual java.io.FileOutputStream.getChannel:()Ljava/nio/channels/FileChannel;
            astore 6 /* parentOutChannel */
         8: .line 1022
      StackMap locals: java.io.OutputStream java.nio.channels.FileChannel
      StackMap stack:
            aload 4 /* childInChannel */
            ifnull 11
            aload 6 /* parentOutChannel */
            ifnull 11
         9: .line 1023
            aload 0 /* this */
            new org.jruby.util.ShellLauncher$ChannelPumper
            dup
            aload 2 /* runtime */
            aload 4 /* childInChannel */
            aload 6 /* parentOutChannel */
            getstatic org.jruby.util.ShellLauncher$Pumper$Slave.IN:Lorg/jruby/util/ShellLauncher$Pumper$Slave;
            aload 0 /* this */
            invokespecial org.jruby.util.ShellLauncher$ChannelPumper.<init>:(Lorg/jruby/Ruby;Ljava/nio/channels/FileChannel;Ljava/nio/channels/FileChannel;Lorg/jruby/util/ShellLauncher$Pumper$Slave;Ljava/lang/Object;)V
            putfield org.jruby.util.ShellLauncher$POpenProcess.inputPumper:Lorg/jruby/util/ShellLauncher$Pumper;
        10: .line 1024
            goto 12
        11: .line 1025
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            new org.jruby.util.ShellLauncher$StreamPumper
            dup
            aload 2 /* runtime */
            aload 3 /* childIn */
            aload 5 /* parentOut */
            iconst_0
            getstatic org.jruby.util.ShellLauncher$Pumper$Slave.IN:Lorg/jruby/util/ShellLauncher$Pumper$Slave;
            aload 0 /* this */
            invokespecial org.jruby.util.ShellLauncher$StreamPumper.<init>:(Lorg/jruby/Ruby;Ljava/io/InputStream;Ljava/io/OutputStream;ZLorg/jruby/util/ShellLauncher$Pumper$Slave;Ljava/lang/Object;)V
            putfield org.jruby.util.ShellLauncher$POpenProcess.inputPumper:Lorg/jruby/util/ShellLauncher$Pumper;
        12: .line 1027
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.inputPumper:Lorg/jruby/util/ShellLauncher$Pumper;
            invokeinterface org.jruby.util.ShellLauncher$Pumper.start:()V
        13: .line 1028
            aload 0 /* this */
            aconst_null
            putfield org.jruby.util.ShellLauncher$POpenProcess.input:Ljava/io/InputStream;
        14: .line 1029
            aload 0 /* this */
            aconst_null
            putfield org.jruby.util.ShellLauncher$POpenProcess.inputChannel:Ljava/nio/channels/FileChannel;
        15: .line 1030
            return
        end local 6 // java.nio.channels.FileChannel parentOutChannel
        end local 5 // java.io.OutputStream parentOut
        end local 4 // java.nio.channels.FileChannel childInChannel
        end local 3 // java.io.InputStream childIn
        end local 2 // org.jruby.Ruby runtime
        end local 1 // java.lang.Process child
        end local 0 // org.jruby.util.ShellLauncher$POpenProcess this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0   16     0              this  Lorg/jruby/util/ShellLauncher$POpenProcess;
            0   16     1             child  Ljava/lang/Process;
            0   16     2           runtime  Lorg/jruby/Ruby;
            1   16     3           childIn  Ljava/io/InputStream;
            2   16     4    childInChannel  Ljava/nio/channels/FileChannel;
            5   16     5         parentOut  Ljava/io/OutputStream;
            6   16     6  parentOutChannel  Ljava/nio/channels/FileChannel;
    MethodParameters:
         Name  Flags
      child    
      runtime  

  private void pumpInerr(java.lang.Process, org.jruby.Ruby);
    descriptor: (Ljava/lang/Process;Lorg/jruby/Ruby;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=9, locals=7, args_size=3
        start local 0 // org.jruby.util.ShellLauncher$POpenProcess this
        start local 1 // java.lang.Process child
        start local 2 // org.jruby.Ruby runtime
         0: .line 1034
            aload 1 /* child */
            invokevirtual java.lang.Process.getErrorStream:()Ljava/io/InputStream;
            invokestatic org.jruby.util.io.ChannelHelper.unwrapBufferedStream:(Ljava/io/InputStream;)Ljava/io/InputStream;
            astore 3 /* childIn */
        start local 3 // java.io.InputStream childIn
         1: .line 1035
            aconst_null
            astore 4 /* childInChannel */
        start local 4 // java.nio.channels.FileChannel childInChannel
         2: .line 1036
            aload 3 /* childIn */
            instanceof java.io.FileInputStream
            ifeq 4
         3: .line 1037
            aload 3 /* childIn */
            checkcast java.io.FileInputStream
            invokevirtual java.io.FileInputStream.getChannel:()Ljava/nio/channels/FileChannel;
            astore 4 /* childInChannel */
         4: .line 1039
      StackMap locals: java.io.InputStream java.nio.channels.FileChannel
      StackMap stack:
            aload 2 /* runtime */
            invokevirtual org.jruby.Ruby.getOut:()Ljava/io/PrintStream;
            invokestatic org.jruby.util.io.ChannelHelper.unwrapBufferedStream:(Ljava/io/OutputStream;)Ljava/io/OutputStream;
            astore 5 /* parentOut */
        start local 5 // java.io.OutputStream parentOut
         5: .line 1040
            aconst_null
            astore 6 /* parentOutChannel */
        start local 6 // java.nio.channels.FileChannel parentOutChannel
         6: .line 1041
            aload 5 /* parentOut */
            instanceof java.io.FileOutputStream
            ifeq 8
         7: .line 1042
            aload 5 /* parentOut */
            checkcast java.io.FileOutputStream
            invokevirtual java.io.FileOutputStream.getChannel:()Ljava/nio/channels/FileChannel;
            astore 6 /* parentOutChannel */
         8: .line 1044
      StackMap locals: java.io.OutputStream java.nio.channels.FileChannel
      StackMap stack:
            aload 4 /* childInChannel */
            ifnull 11
            aload 6 /* parentOutChannel */
            ifnull 11
         9: .line 1045
            aload 0 /* this */
            new org.jruby.util.ShellLauncher$ChannelPumper
            dup
            aload 2 /* runtime */
            aload 4 /* childInChannel */
            aload 6 /* parentOutChannel */
            getstatic org.jruby.util.ShellLauncher$Pumper$Slave.IN:Lorg/jruby/util/ShellLauncher$Pumper$Slave;
            aload 0 /* this */
            invokespecial org.jruby.util.ShellLauncher$ChannelPumper.<init>:(Lorg/jruby/Ruby;Ljava/nio/channels/FileChannel;Ljava/nio/channels/FileChannel;Lorg/jruby/util/ShellLauncher$Pumper$Slave;Ljava/lang/Object;)V
            putfield org.jruby.util.ShellLauncher$POpenProcess.inerrPumper:Lorg/jruby/util/ShellLauncher$Pumper;
        10: .line 1046
            goto 12
        11: .line 1047
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            new org.jruby.util.ShellLauncher$StreamPumper
            dup
            aload 2 /* runtime */
            aload 3 /* childIn */
            aload 5 /* parentOut */
            iconst_0
            getstatic org.jruby.util.ShellLauncher$Pumper$Slave.IN:Lorg/jruby/util/ShellLauncher$Pumper$Slave;
            aload 0 /* this */
            invokespecial org.jruby.util.ShellLauncher$StreamPumper.<init>:(Lorg/jruby/Ruby;Ljava/io/InputStream;Ljava/io/OutputStream;ZLorg/jruby/util/ShellLauncher$Pumper$Slave;Ljava/lang/Object;)V
            putfield org.jruby.util.ShellLauncher$POpenProcess.inerrPumper:Lorg/jruby/util/ShellLauncher$Pumper;
        12: .line 1049
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.ShellLauncher$POpenProcess.inerrPumper:Lorg/jruby/util/ShellLauncher$Pumper;
            invokeinterface org.jruby.util.ShellLauncher$Pumper.start:()V
        13: .line 1050
            aload 0 /* this */
            aconst_null
            putfield org.jruby.util.ShellLauncher$POpenProcess.inerr:Ljava/io/InputStream;
        14: .line 1051
            aload 0 /* this */
            aconst_null
            putfield org.jruby.util.ShellLauncher$POpenProcess.inerrChannel:Ljava/nio/channels/FileChannel;
        15: .line 1052
            return
        end local 6 // java.nio.channels.FileChannel parentOutChannel
        end local 5 // java.io.OutputStream parentOut
        end local 4 // java.nio.channels.FileChannel childInChannel
        end local 3 // java.io.InputStream childIn
        end local 2 // org.jruby.Ruby runtime
        end local 1 // java.lang.Process child
        end local 0 // org.jruby.util.ShellLauncher$POpenProcess this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0   16     0              this  Lorg/jruby/util/ShellLauncher$POpenProcess;
            0   16     1             child  Ljava/lang/Process;
            0   16     2           runtime  Lorg/jruby/Ruby;
            1   16     3           childIn  Ljava/io/InputStream;
            2   16     4    childInChannel  Ljava/nio/channels/FileChannel;
            5   16     5         parentOut  Ljava/io/OutputStream;
            6   16     6  parentOutChannel  Ljava/nio/channels/FileChannel;
    MethodParameters:
         Name  Flags
      child    
      runtime  
}
SourceFile: "ShellLauncher.java"
NestHost: org.jruby.util.ShellLauncher
InnerClasses:
  private ChannelPumper = org.jruby.util.ShellLauncher$ChannelPumper of org.jruby.util.ShellLauncher
  public POpenProcess = org.jruby.util.ShellLauncher$POpenProcess of org.jruby.util.ShellLauncher
  private abstract Pumper = org.jruby.util.ShellLauncher$Pumper of org.jruby.util.ShellLauncher
  public final Slave = org.jruby.util.ShellLauncher$Pumper$Slave of org.jruby.util.ShellLauncher$Pumper
  private StreamPumper = org.jruby.util.ShellLauncher$StreamPumper of org.jruby.util.ShellLauncher