public abstract class com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal extends com.googlecode.lanterna.terminal.AbstractTerminal
  minor version: 0
  major version: 59
  flags: flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
  this_class: com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal
  super_class: com.googlecode.lanterna.terminal.AbstractTerminal
{
  private static final java.nio.charset.Charset UTF8_REFERENCE;
    descriptor: Ljava/nio/charset/Charset;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private final java.io.InputStream terminalInput;
    descriptor: Ljava/io/InputStream;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.io.OutputStream terminalOutput;
    descriptor: Ljava/io/OutputStream;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.nio.charset.Charset terminalCharset;
    descriptor: Ljava/nio/charset/Charset;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final com.googlecode.lanterna.input.InputDecoder inputDecoder;
    descriptor: Lcom/googlecode/lanterna/input/InputDecoder;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.util.Queue<com.googlecode.lanterna.input.KeyStroke> keyQueue;
    descriptor: Ljava/util/Queue;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/Queue<Lcom/googlecode/lanterna/input/KeyStroke;>;

  private final java.util.concurrent.locks.Lock readLock;
    descriptor: Ljava/util/concurrent/locks/Lock;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private volatile com.googlecode.lanterna.TerminalPosition lastReportedCursorPosition;
    descriptor: Lcom/googlecode/lanterna/TerminalPosition;
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 54
            getstatic java.nio.charset.StandardCharsets.UTF_8:Ljava/nio/charset/Charset;
            putstatic com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.UTF8_REFERENCE:Ljava/nio/charset/Charset;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>(java.io.InputStream, java.io.OutputStream, java.nio.charset.Charset);
    descriptor: (Ljava/io/InputStream;Ljava/io/OutputStream;Ljava/nio/charset/Charset;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=4, args_size=4
        start local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
        start local 1 // java.io.InputStream terminalInput
        start local 2 // java.io.OutputStream terminalOutput
        start local 3 // java.nio.charset.Charset terminalCharset
         0: .line 67
            aload 0 /* this */
            invokespecial com.googlecode.lanterna.terminal.AbstractTerminal.<init>:()V
         1: .line 68
            aload 0 /* this */
            aload 1 /* terminalInput */
            putfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.terminalInput:Ljava/io/InputStream;
         2: .line 69
            aload 0 /* this */
            aload 2 /* terminalOutput */
            putfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.terminalOutput:Ljava/io/OutputStream;
         3: .line 70
            aload 3 /* terminalCharset */
            ifnonnull 6
         4: .line 71
            aload 0 /* this */
            invokestatic java.nio.charset.Charset.defaultCharset:()Ljava/nio/charset/Charset;
            putfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.terminalCharset:Ljava/nio/charset/Charset;
         5: .line 72
            goto 7
         6: .line 74
      StackMap locals: com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal java.io.InputStream java.io.OutputStream java.nio.charset.Charset
      StackMap stack:
            aload 0 /* this */
            aload 3 /* terminalCharset */
            putfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.terminalCharset:Ljava/nio/charset/Charset;
         7: .line 76
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            new com.googlecode.lanterna.input.InputDecoder
            dup
            new java.io.InputStreamReader
            dup
            aload 0 /* this */
            getfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.terminalInput:Ljava/io/InputStream;
            aload 0 /* this */
            getfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.terminalCharset:Ljava/nio/charset/Charset;
            invokespecial java.io.InputStreamReader.<init>:(Ljava/io/InputStream;Ljava/nio/charset/Charset;)V
            invokespecial com.googlecode.lanterna.input.InputDecoder.<init>:(Ljava/io/Reader;)V
            putfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.inputDecoder:Lcom/googlecode/lanterna/input/InputDecoder;
         8: .line 77
            aload 0 /* this */
            new java.util.LinkedList
            dup
            invokespecial java.util.LinkedList.<init>:()V
            putfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.keyQueue:Ljava/util/Queue;
         9: .line 78
            aload 0 /* this */
            new java.util.concurrent.locks.ReentrantLock
            dup
            invokespecial java.util.concurrent.locks.ReentrantLock.<init>:()V
            putfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.readLock:Ljava/util/concurrent/locks/Lock;
        10: .line 79
            aload 0 /* this */
            aconst_null
            putfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.lastReportedCursorPosition:Lcom/googlecode/lanterna/TerminalPosition;
        11: .line 80
            return
        end local 3 // java.nio.charset.Charset terminalCharset
        end local 2 // java.io.OutputStream terminalOutput
        end local 1 // java.io.InputStream terminalInput
        end local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   12     0             this  Lcom/googlecode/lanterna/terminal/ansi/StreamBasedTerminal;
            0   12     1    terminalInput  Ljava/io/InputStream;
            0   12     2   terminalOutput  Ljava/io/OutputStream;
            0   12     3  terminalCharset  Ljava/nio/charset/Charset;
    MethodParameters:
                 Name  Flags
      terminalInput    
      terminalOutput   
      terminalCharset  

  public void putCharacter(char);
    descriptor: (C)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
        start local 1 // char c
         0: .line 90
            iload 1 /* c */
            invokestatic com.googlecode.lanterna.TerminalTextUtils.isPrintableCharacter:(C)Z
            ifeq 2
         1: .line 91
            aload 0 /* this */
            aload 0 /* this */
            iload 1 /* c */
            invokevirtual com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.translateCharacter:(C)[B
            invokevirtual com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.writeToTerminal:([B)V
         2: .line 93
      StackMap locals:
      StackMap stack:
            return
        end local 1 // char c
        end local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lcom/googlecode/lanterna/terminal/ansi/StreamBasedTerminal;
            0    3     1     c  C
    Exceptions:
      throws java.io.IOException
    MethodParameters:
      Name  Flags
      c     

  public void putString(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
        start local 1 // java.lang.String string
         0: .line 103
            iconst_0
            istore 2 /* i */
        start local 2 // int i
         1: goto 4
         2: .line 104
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            aload 1 /* string */
            iload 2 /* i */
            invokevirtual java.lang.String.charAt:(I)C
            invokevirtual com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.putCharacter:(C)V
         3: .line 103
            iinc 2 /* i */ 1
      StackMap locals:
      StackMap stack:
         4: iload 2 /* i */
            aload 1 /* string */
            invokevirtual java.lang.String.length:()I
            if_icmplt 2
        end local 2 // int i
         5: .line 106
            return
        end local 1 // java.lang.String string
        end local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    6     0    this  Lcom/googlecode/lanterna/terminal/ansi/StreamBasedTerminal;
            0    6     1  string  Ljava/lang/String;
            1    5     2       i  I
    Exceptions:
      throws java.io.IOException
    MethodParameters:
        Name  Flags
      string  

  protected void writeToTerminal(byte[]);
    descriptor: ([B)V
    flags: (0x0084) ACC_PROTECTED, ACC_VARARGS
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
        start local 1 // byte[] bytes
         0: .line 115
            aload 0 /* this */
            getfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.terminalOutput:Ljava/io/OutputStream;
            dup
            astore 2
            monitorenter
         1: .line 116
            aload 0 /* this */
            getfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.terminalOutput:Ljava/io/OutputStream;
            aload 1 /* bytes */
            invokevirtual java.io.OutputStream.write:([B)V
         2: .line 115
            aload 2
            monitorexit
         3: goto 6
      StackMap locals: com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal byte[] java.io.OutputStream
      StackMap stack: java.lang.Throwable
         4: aload 2
            monitorexit
         5: athrow
         6: .line 118
      StackMap locals:
      StackMap stack:
            return
        end local 1 // byte[] bytes
        end local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    7     0   this  Lcom/googlecode/lanterna/terminal/ansi/StreamBasedTerminal;
            0    7     1  bytes  [B
      Exception table:
        from    to  target  type
           1     3       4  any
           4     5       4  any
    Exceptions:
      throws java.io.IOException
    MethodParameters:
       Name  Flags
      bytes  

  public byte[] enquireTerminal(int, java.util.concurrent.TimeUnit);
    descriptor: (ILjava/util/concurrent/TimeUnit;)[B
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=6, args_size=3
        start local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
        start local 1 // int timeout
        start local 2 // java.util.concurrent.TimeUnit timeoutTimeUnit
         0: .line 122
            aload 0 /* this */
            getfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.terminalOutput:Ljava/io/OutputStream;
            dup
            astore 3
            monitorenter
         1: .line 123
            aload 0 /* this */
            getfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.terminalOutput:Ljava/io/OutputStream;
            iconst_5
            invokevirtual java.io.OutputStream.write:(I)V
         2: .line 124
            aload 0 /* this */
            invokevirtual com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.flush:()V
         3: .line 122
            aload 3
            monitorexit
         4: goto 7
      StackMap locals: com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal int java.util.concurrent.TimeUnit java.io.OutputStream
      StackMap stack: java.lang.Throwable
         5: aload 3
            monitorexit
         6: athrow
         7: .line 128
      StackMap locals:
      StackMap stack:
            invokestatic java.lang.System.currentTimeMillis:()J
            lstore 3 /* startTime */
        start local 3 // long startTime
         8: .line 129
            goto 15
         9: .line 130
      StackMap locals: long
      StackMap stack:
            invokestatic java.lang.System.currentTimeMillis:()J
            lload 3 /* startTime */
            lsub
            aload 2 /* timeoutTimeUnit */
            iload 1 /* timeout */
            i2l
            invokevirtual java.util.concurrent.TimeUnit.toMillis:(J)J
            lcmp
            ifle 11
        10: .line 131
            iconst_0
            newarray 8
            areturn
        11: .line 134
      StackMap locals:
      StackMap stack:
            lconst_1
            invokestatic java.lang.Thread.sleep:(J)V
        12: .line 135
            goto 15
        13: .line 136
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
            pop
        14: .line 137
            iconst_0
            newarray 8
            areturn
        15: .line 129
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.terminalInput:Ljava/io/InputStream;
            invokevirtual java.io.InputStream.available:()I
            ifeq 9
        16: .line 142
            new java.io.ByteArrayOutputStream
            dup
            invokespecial java.io.ByteArrayOutputStream.<init>:()V
            astore 5 /* buffer */
        start local 5 // java.io.ByteArrayOutputStream buffer
        17: .line 143
            goto 19
        18: .line 144
      StackMap locals: java.io.ByteArrayOutputStream
      StackMap stack:
            aload 5 /* buffer */
            aload 0 /* this */
            getfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.terminalInput:Ljava/io/InputStream;
            invokevirtual java.io.InputStream.read:()I
            invokevirtual java.io.ByteArrayOutputStream.write:(I)V
        19: .line 143
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.terminalInput:Ljava/io/InputStream;
            invokevirtual java.io.InputStream.available:()I
            ifgt 18
        20: .line 146
            aload 5 /* buffer */
            invokevirtual java.io.ByteArrayOutputStream.toByteArray:()[B
            areturn
        end local 5 // java.io.ByteArrayOutputStream buffer
        end local 3 // long startTime
        end local 2 // java.util.concurrent.TimeUnit timeoutTimeUnit
        end local 1 // int timeout
        end local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   21     0             this  Lcom/googlecode/lanterna/terminal/ansi/StreamBasedTerminal;
            0   21     1          timeout  I
            0   21     2  timeoutTimeUnit  Ljava/util/concurrent/TimeUnit;
            8   21     3        startTime  J
           17   21     5           buffer  Ljava/io/ByteArrayOutputStream;
      Exception table:
        from    to  target  type
           1     4       5  any
           5     6       5  any
          11    12      13  Class java.lang.InterruptedException
    Exceptions:
      throws java.io.IOException
    MethodParameters:
                 Name  Flags
      timeout          
      timeoutTimeUnit  

  public void bell();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
         0: .line 151
            aload 0 /* this */
            getfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.terminalOutput:Ljava/io/OutputStream;
            bipush 7
            invokevirtual java.io.OutputStream.write:(I)V
         1: .line 152
            aload 0 /* this */
            getfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.terminalOutput:Ljava/io/OutputStream;
            invokevirtual java.io.OutputStream.flush:()V
         2: .line 153
            return
        end local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lcom/googlecode/lanterna/terminal/ansi/StreamBasedTerminal;
    Exceptions:
      throws java.io.IOException

  public com.googlecode.lanterna.input.InputDecoder getInputDecoder();
    descriptor: ()Lcom/googlecode/lanterna/input/InputDecoder;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
         0: .line 161
            aload 0 /* this */
            getfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.inputDecoder:Lcom/googlecode/lanterna/input/InputDecoder;
            areturn
        end local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/googlecode/lanterna/terminal/ansi/StreamBasedTerminal;

  void resetMemorizedCursorPosition();
    descriptor: ()V
    flags: (0x0000) 
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
         0: .line 169
            aload 0 /* this */
            aconst_null
            putfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.lastReportedCursorPosition:Lcom/googlecode/lanterna/TerminalPosition;
         1: .line 170
            return
        end local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/googlecode/lanterna/terminal/ansi/StreamBasedTerminal;

  synchronized com.googlecode.lanterna.TerminalPosition waitForCursorPositionReport();
    descriptor: ()Lcom/googlecode/lanterna/TerminalPosition;
    flags: (0x0020) ACC_SYNCHRONIZED
    Code:
      stack=4, locals=5, args_size=1
        start local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
         0: .line 180
            invokestatic java.lang.System.currentTimeMillis:()J
            lstore 1 /* startTime */
        start local 1 // long startTime
         1: .line 181
            aload 0 /* this */
            getfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.lastReportedCursorPosition:Lcom/googlecode/lanterna/TerminalPosition;
            astore 3 /* cursorPosition */
        start local 3 // com.googlecode.lanterna.TerminalPosition cursorPosition
         2: .line 182
            goto 13
         3: .line 183
      StackMap locals: long com.googlecode.lanterna.TerminalPosition
      StackMap stack:
            invokestatic java.lang.System.currentTimeMillis:()J
            lload 1 /* startTime */
            lsub
            ldc 5000
            lcmp
            ifle 5
         4: .line 185
            aconst_null
            areturn
         5: .line 187
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iconst_0
            iconst_0
            invokevirtual com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.readInput:(ZZ)Lcom/googlecode/lanterna/input/KeyStroke;
            astore 4 /* keyStroke */
        start local 4 // com.googlecode.lanterna.input.KeyStroke keyStroke
         6: .line 188
            aload 4 /* keyStroke */
            ifnull 9
         7: .line 189
            aload 0 /* this */
            getfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.keyQueue:Ljava/util/Queue;
            aload 4 /* keyStroke */
            invokeinterface java.util.Queue.add:(Ljava/lang/Object;)Z
            pop
         8: .line 190
            goto 12
         9: .line 192
      StackMap locals: com.googlecode.lanterna.input.KeyStroke
      StackMap stack:
            lconst_1
            invokestatic java.lang.Thread.sleep:(J)V
        10: goto 12
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
        11: pop
        12: .line 194
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.lastReportedCursorPosition:Lcom/googlecode/lanterna/TerminalPosition;
            astore 3 /* cursorPosition */
        end local 4 // com.googlecode.lanterna.input.KeyStroke keyStroke
        13: .line 182
      StackMap locals:
      StackMap stack:
            aload 3 /* cursorPosition */
            ifnull 3
        14: .line 196
            aload 3 /* cursorPosition */
            areturn
        end local 3 // com.googlecode.lanterna.TerminalPosition cursorPosition
        end local 1 // long startTime
        end local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   15     0            this  Lcom/googlecode/lanterna/terminal/ansi/StreamBasedTerminal;
            1   15     1       startTime  J
            2   15     3  cursorPosition  Lcom/googlecode/lanterna/TerminalPosition;
            6   13     4       keyStroke  Lcom/googlecode/lanterna/input/KeyStroke;
      Exception table:
        from    to  target  type
           9    10      11  Class java.lang.InterruptedException
    Exceptions:
      throws java.io.IOException

  public com.googlecode.lanterna.input.KeyStroke pollInput();
    descriptor: ()Lcom/googlecode/lanterna/input/KeyStroke;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
         0: .line 201
            aload 0 /* this */
            iconst_0
            iconst_1
            invokevirtual com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.readInput:(ZZ)Lcom/googlecode/lanterna/input/KeyStroke;
            areturn
        end local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/googlecode/lanterna/terminal/ansi/StreamBasedTerminal;
    Exceptions:
      throws java.io.IOException

  public com.googlecode.lanterna.input.KeyStroke readInput();
    descriptor: ()Lcom/googlecode/lanterna/input/KeyStroke;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
         0: .line 206
            aload 0 /* this */
            iconst_1
            iconst_1
            invokevirtual com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.readInput:(ZZ)Lcom/googlecode/lanterna/input/KeyStroke;
            areturn
        end local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/googlecode/lanterna/terminal/ansi/StreamBasedTerminal;
    Exceptions:
      throws java.io.IOException

  private com.googlecode.lanterna.input.KeyStroke readInput(boolean, boolean);
    descriptor: (ZZ)Lcom/googlecode/lanterna/input/KeyStroke;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=7, args_size=3
        start local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
        start local 1 // boolean blocking
        start local 2 // boolean useKeyQueue
         0: .line 211
      StackMap locals:
      StackMap stack:
            iload 2 /* useKeyQueue */
            ifeq 4
         1: .line 212
            aload 0 /* this */
            getfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.keyQueue:Ljava/util/Queue;
            invokeinterface java.util.Queue.poll:()Ljava/lang/Object;
            checkcast com.googlecode.lanterna.input.KeyStroke
            astore 3 /* previouslyReadKey */
        start local 3 // com.googlecode.lanterna.input.KeyStroke previouslyReadKey
         2: .line 213
            aload 3 /* previouslyReadKey */
            ifnull 4
         3: .line 214
            aload 3 /* previouslyReadKey */
            areturn
        end local 3 // com.googlecode.lanterna.input.KeyStroke previouslyReadKey
         4: .line 217
      StackMap locals:
      StackMap stack:
            iload 1 /* blocking */
            ifeq 7
         5: .line 218
            aload 0 /* this */
            getfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.readLock:Ljava/util/concurrent/locks/Lock;
            invokeinterface java.util.concurrent.locks.Lock.lock:()V
         6: .line 219
            goto 9
         7: .line 222
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.readLock:Ljava/util/concurrent/locks/Lock;
            invokeinterface java.util.concurrent.locks.Lock.tryLock:()Z
            ifne 9
         8: .line 223
            aconst_null
            areturn
         9: .line 227
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.inputDecoder:Lcom/googlecode/lanterna/input/InputDecoder;
            iload 1 /* blocking */
            invokevirtual com.googlecode.lanterna.input.InputDecoder.getNextCharacter:(Z)Lcom/googlecode/lanterna/input/KeyStroke;
            astore 3 /* key */
        start local 3 // com.googlecode.lanterna.input.KeyStroke key
        10: .line 228
            aload 3 /* key */
            invokestatic com.googlecode.lanterna.input.ScreenInfoCharacterPattern.tryToAdopt:(Lcom/googlecode/lanterna/input/KeyStroke;)Lcom/googlecode/lanterna/input/ScreenInfoAction;
            astore 4 /* report */
        start local 4 // com.googlecode.lanterna.input.ScreenInfoAction report
        11: .line 229
            aload 0 /* this */
            getfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.lastReportedCursorPosition:Lcom/googlecode/lanterna/TerminalPosition;
            ifnonnull 14
            aload 4 /* report */
            ifnull 14
        12: .line 230
            aload 0 /* this */
            aload 4 /* report */
            invokevirtual com.googlecode.lanterna.input.ScreenInfoAction.getPosition:()Lcom/googlecode/lanterna/TerminalPosition;
            putfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.lastReportedCursorPosition:Lcom/googlecode/lanterna/TerminalPosition;
        13: .line 231
            goto 20
        14: .line 233
      StackMap locals: com.googlecode.lanterna.input.KeyStroke com.googlecode.lanterna.input.ScreenInfoAction
      StackMap stack:
            aload 3 /* key */
            astore 6
        15: .line 237
            aload 0 /* this */
            getfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.readLock:Ljava/util/concurrent/locks/Lock;
            invokeinterface java.util.concurrent.locks.Lock.unlock:()V
        16: .line 233
            aload 6
            areturn
        end local 4 // com.googlecode.lanterna.input.ScreenInfoAction report
        end local 3 // com.googlecode.lanterna.input.KeyStroke key
        17: .line 236
      StackMap locals: com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal int int
      StackMap stack: java.lang.Throwable
            astore 5
        18: .line 237
            aload 0 /* this */
            getfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.readLock:Ljava/util/concurrent/locks/Lock;
            invokeinterface java.util.concurrent.locks.Lock.unlock:()V
        19: .line 238
            aload 5
            athrow
        20: .line 237
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.readLock:Ljava/util/concurrent/locks/Lock;
            invokeinterface java.util.concurrent.locks.Lock.unlock:()V
        21: .line 210
            goto 0
        end local 2 // boolean useKeyQueue
        end local 1 // boolean blocking
        end local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   22     0               this  Lcom/googlecode/lanterna/terminal/ansi/StreamBasedTerminal;
            0   22     1           blocking  Z
            0   22     2        useKeyQueue  Z
            2    4     3  previouslyReadKey  Lcom/googlecode/lanterna/input/KeyStroke;
           10   17     3                key  Lcom/googlecode/lanterna/input/KeyStroke;
           11   17     4             report  Lcom/googlecode/lanterna/input/ScreenInfoAction;
      Exception table:
        from    to  target  type
           9    15      17  any
    Exceptions:
      throws java.io.IOException
    MethodParameters:
             Name  Flags
      blocking     
      useKeyQueue  

  public void flush();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
         0: .line 244
            aload 0 /* this */
            getfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.terminalOutput:Ljava/io/OutputStream;
            dup
            astore 1
            monitorenter
         1: .line 245
            aload 0 /* this */
            getfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.terminalOutput:Ljava/io/OutputStream;
            invokevirtual java.io.OutputStream.flush:()V
         2: .line 244
            aload 1
            monitorexit
         3: goto 6
      StackMap locals: com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal java.io.OutputStream
      StackMap stack: java.lang.Throwable
         4: aload 1
            monitorexit
         5: athrow
         6: .line 247
      StackMap locals:
      StackMap stack:
            return
        end local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    7     0  this  Lcom/googlecode/lanterna/terminal/ansi/StreamBasedTerminal;
      Exception table:
        from    to  target  type
           1     3       4  any
           4     5       4  any
    Exceptions:
      throws java.io.IOException

  public void close();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=0, locals=1, args_size=1
        start local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
         0: .line 254
            return
        end local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/googlecode/lanterna/terminal/ansi/StreamBasedTerminal;
    Exceptions:
      throws java.io.IOException

  protected java.nio.charset.Charset getCharset();
    descriptor: ()Ljava/nio/charset/Charset;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
         0: .line 257
            aload 0 /* this */
            getfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.terminalCharset:Ljava/nio/charset/Charset;
            areturn
        end local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/googlecode/lanterna/terminal/ansi/StreamBasedTerminal;

  protected byte[] translateCharacter(char);
    descriptor: (C)[B
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
        start local 1 // char input
         0: .line 262
            getstatic com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.UTF8_REFERENCE:Ljava/nio/charset/Charset;
            ifnull 2
            getstatic com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.UTF8_REFERENCE:Ljava/nio/charset/Charset;
            aload 0 /* this */
            getfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.terminalCharset:Ljava/nio/charset/Charset;
            if_acmpne 2
         1: .line 263
            aload 0 /* this */
            iload 1 /* input */
            invokevirtual com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.convertToCharset:(C)[B
            areturn
         2: .line 266
      StackMap locals:
      StackMap stack:
            iload 1 /* input */
            lookupswitch { // 45
                 8226: 10
                 8592: 4
                 8593: 6
                 8594: 5
                 8595: 3
                 9472: 12
                 9474: 21
                 9484: 19
                 9488: 20
                 9492: 13
                 9496: 14
                 9500: 17
                 9508: 16
                 9516: 15
                 9524: 18
                 9532: 11
                 9552: 12
                 9553: 21
                 9556: 19
                 9559: 20
                 9562: 13
                 9565: 14
                 9566: 17
                 9567: 17
                 9568: 17
                 9569: 16
                 9570: 16
                 9571: 16
                 9572: 15
                 9573: 15
                 9574: 15
                 9575: 18
                 9576: 18
                 9577: 18
                 9580: 11
                 9608: 7
                 9617: 7
                 9618: 7
                 9619: 7
                 9786: 9
                 9787: 9
                 9824: 8
                 9827: 8
                 9829: 8
                 9830: 9
              default: 22
          }
         3: .line 268
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            bipush 118
            invokevirtual com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.convertToVT100:(C)[B
            areturn
         4: .line 270
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            bipush 60
            invokevirtual com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.convertToVT100:(C)[B
            areturn
         5: .line 272
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            bipush 62
            invokevirtual com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.convertToVT100:(C)[B
            areturn
         6: .line 274
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            bipush 94
            invokevirtual com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.convertToVT100:(C)[B
            areturn
         7: .line 279
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            bipush 97
            invokevirtual com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.convertToVT100:(C)[B
            areturn
         8: .line 283
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            bipush 63
            invokevirtual com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.convertToVT100:(C)[B
            areturn
         9: .line 287
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            bipush 96
            invokevirtual com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.convertToVT100:(C)[B
            areturn
        10: .line 289
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            bipush 102
            invokevirtual com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.convertToVT100:(C)[B
            areturn
        11: .line 292
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            bipush 110
            invokevirtual com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.convertToVT100:(C)[B
            areturn
        12: .line 295
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            bipush 113
            invokevirtual com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.convertToVT100:(C)[B
            areturn
        13: .line 298
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            bipush 109
            invokevirtual com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.convertToVT100:(C)[B
            areturn
        14: .line 301
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            bipush 106
            invokevirtual com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.convertToVT100:(C)[B
            areturn
        15: .line 306
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            bipush 119
            invokevirtual com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.convertToVT100:(C)[B
            areturn
        16: .line 311
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            bipush 117
            invokevirtual com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.convertToVT100:(C)[B
            areturn
        17: .line 316
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            bipush 116
            invokevirtual com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.convertToVT100:(C)[B
            areturn
        18: .line 321
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            bipush 118
            invokevirtual com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.convertToVT100:(C)[B
            areturn
        19: .line 324
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            bipush 108
            invokevirtual com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.convertToVT100:(C)[B
            areturn
        20: .line 327
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            bipush 107
            invokevirtual com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.convertToVT100:(C)[B
            areturn
        21: .line 330
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            bipush 120
            invokevirtual com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.convertToVT100:(C)[B
            areturn
        22: .line 332
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 1 /* input */
            invokevirtual com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.convertToCharset:(C)[B
            areturn
        end local 1 // char input
        end local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   23     0   this  Lcom/googlecode/lanterna/terminal/ansi/StreamBasedTerminal;
            0   23     1  input  C
    MethodParameters:
       Name  Flags
      input  

  private byte[] convertToVT100(char);
    descriptor: (C)[B
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
        start local 1 // char code
         0: .line 339
            bipush 7
            newarray 8
            dup
            iconst_0
            bipush 27
            bastore
            dup
            iconst_1
            bipush 40
            bastore
            dup
            iconst_2
            bipush 48
            bastore
            dup
            iconst_3
            iload 1 /* code */
            i2b
            bastore
            dup
            iconst_4
            bipush 27
            bastore
            dup
            iconst_5
            bipush 40
            bastore
            dup
            bipush 6
            bipush 66
            bastore
            areturn
        end local 1 // char code
        end local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/googlecode/lanterna/terminal/ansi/StreamBasedTerminal;
            0    1     1  code  C
    MethodParameters:
      Name  Flags
      code  

  private byte[] convertToCharset(char);
    descriptor: (C)[B
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
        start local 1 // char input
         0: .line 343
            aload 0 /* this */
            getfield com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal.terminalCharset:Ljava/nio/charset/Charset;
            iload 1 /* input */
            invokestatic java.lang.Character.toString:(C)Ljava/lang/String;
            invokevirtual java.nio.charset.Charset.encode:(Ljava/lang/String;)Ljava/nio/ByteBuffer;
            invokevirtual java.nio.ByteBuffer.array:()[B
            areturn
        end local 1 // char input
        end local 0 // com.googlecode.lanterna.terminal.ansi.StreamBasedTerminal this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0   this  Lcom/googlecode/lanterna/terminal/ansi/StreamBasedTerminal;
            0    1     1  input  C
    MethodParameters:
       Name  Flags
      input  
}
SourceFile: "StreamBasedTerminal.java"