final class com.sun.media.sound.SMFParser
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: com.sun.media.sound.SMFParser
  super_class: java.lang.Object
{
  private static final int MTrk_MAGIC;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 1297379947

  private static final boolean STRICT_PARSER;
    descriptor: Z
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 0

  private static final boolean DEBUG;
    descriptor: Z
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 0

  int tracks;
    descriptor: I
    flags: (0x0000) 

  java.io.DataInputStream stream;
    descriptor: Ljava/io/DataInputStream;
    flags: (0x0000) 

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

  private byte[] trackData;
    descriptor: [B
    flags: (0x0002) ACC_PRIVATE

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

  void <init>();
    descriptor: ()V
    flags: (0x0000) 
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // com.sun.media.sound.SMFParser this
         0: .line 252
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 248
            aload 0 /* this */
            iconst_0
            putfield com.sun.media.sound.SMFParser.trackLength:I
         2: .line 249
            aload 0 /* this */
            aconst_null
            putfield com.sun.media.sound.SMFParser.trackData:[B
         3: .line 250
            aload 0 /* this */
            iconst_0
            putfield com.sun.media.sound.SMFParser.pos:I
         4: .line 253
            return
        end local 0 // com.sun.media.sound.SMFParser this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Lcom/sun/media/sound/SMFParser;

  private int readUnsigned();
    descriptor: ()I
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=1, args_size=1
        start local 0 // com.sun.media.sound.SMFParser this
         0: .line 256
            aload 0 /* this */
            getfield com.sun.media.sound.SMFParser.trackData:[B
            aload 0 /* this */
            dup
            getfield com.sun.media.sound.SMFParser.pos:I
            dup_x1
            iconst_1
            iadd
            putfield com.sun.media.sound.SMFParser.pos:I
            baload
            sipush 255
            iand
            ireturn
        end local 0 // com.sun.media.sound.SMFParser this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/sun/media/sound/SMFParser;
    Exceptions:
      throws java.io.IOException

  private void read(byte[]);
    descriptor: ([B)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=2, args_size=2
        start local 0 // com.sun.media.sound.SMFParser this
        start local 1 // byte[] data
         0: .line 260
            aload 0 /* this */
            getfield com.sun.media.sound.SMFParser.trackData:[B
            aload 0 /* this */
            getfield com.sun.media.sound.SMFParser.pos:I
            aload 1 /* data */
            iconst_0
            aload 1 /* data */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         1: .line 261
            aload 0 /* this */
            dup
            getfield com.sun.media.sound.SMFParser.pos:I
            aload 1 /* data */
            arraylength
            iadd
            putfield com.sun.media.sound.SMFParser.pos:I
         2: .line 262
            return
        end local 1 // byte[] data
        end local 0 // com.sun.media.sound.SMFParser this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lcom/sun/media/sound/SMFParser;
            0    3     1  data  [B
    Exceptions:
      throws java.io.IOException
    MethodParameters:
      Name  Flags
      data  

  private long readVarInt();
    descriptor: ()J
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=4, args_size=1
        start local 0 // com.sun.media.sound.SMFParser this
         0: .line 265
            lconst_0
            lstore 1 /* value */
        start local 1 // long value
         1: .line 266
            iconst_0
            istore 3 /* currentByte */
        start local 3 // int currentByte
         2: .line 268
      StackMap locals: long int
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.media.sound.SMFParser.trackData:[B
            aload 0 /* this */
            dup
            getfield com.sun.media.sound.SMFParser.pos:I
            dup_x1
            iconst_1
            iadd
            putfield com.sun.media.sound.SMFParser.pos:I
            baload
            sipush 255
            iand
            istore 3 /* currentByte */
         3: .line 269
            lload 1 /* value */
            bipush 7
            lshl
            iload 3 /* currentByte */
            bipush 127
            iand
            i2l
            ladd
            lstore 1 /* value */
         4: .line 270
            iload 3 /* currentByte */
            sipush 128
            iand
            ifne 2
         5: .line 271
            lload 1 /* value */
            lreturn
        end local 3 // int currentByte
        end local 1 // long value
        end local 0 // com.sun.media.sound.SMFParser this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    6     0         this  Lcom/sun/media/sound/SMFParser;
            1    6     1        value  J
            2    6     3  currentByte  I
    Exceptions:
      throws java.io.IOException

  private int readIntFromStream();
    descriptor: ()I
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // com.sun.media.sound.SMFParser this
         0: .line 276
            aload 0 /* this */
            getfield com.sun.media.sound.SMFParser.stream:Ljava/io/DataInputStream;
            invokevirtual java.io.DataInputStream.readInt:()I
         1: ireturn
         2: .line 277
      StackMap locals:
      StackMap stack: java.io.EOFException
            pop
         3: .line 278
            new java.io.EOFException
            dup
            ldc "invalid MIDI file"
            invokespecial java.io.EOFException.<init>:(Ljava/lang/String;)V
            athrow
        end local 0 // com.sun.media.sound.SMFParser this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lcom/sun/media/sound/SMFParser;
      Exception table:
        from    to  target  type
           0     1       2  Class java.io.EOFException
    Exceptions:
      throws java.io.IOException

  boolean nextTrack();
    descriptor: ()Z
    flags: (0x0000) 
    Code:
      stack=4, locals=3, args_size=1
        start local 0 // com.sun.media.sound.SMFParser this
         0: .line 284
            aload 0 /* this */
            iconst_0
            putfield com.sun.media.sound.SMFParser.trackLength:I
         1: .line 287
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.media.sound.SMFParser.stream:Ljava/io/DataInputStream;
            aload 0 /* this */
            getfield com.sun.media.sound.SMFParser.trackLength:I
            invokevirtual java.io.DataInputStream.skipBytes:(I)I
            aload 0 /* this */
            getfield com.sun.media.sound.SMFParser.trackLength:I
            if_icmpeq 4
         2: .line 289
            iconst_0
            ireturn
         3: .line 291
      StackMap locals:
      StackMap stack:
            new java.io.EOFException
            dup
            ldc "invalid MIDI file"
            invokespecial java.io.EOFException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 293
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.sun.media.sound.SMFParser.readIntFromStream:()I
            istore 1 /* magic */
        start local 1 // int magic
         5: .line 294
            aload 0 /* this */
            aload 0 /* this */
            invokevirtual com.sun.media.sound.SMFParser.readIntFromStream:()I
            putfield com.sun.media.sound.SMFParser.trackLength:I
         6: .line 295
            iload 1 /* magic */
            ldc 1297379947
            if_icmpne 1
         7: .line 297
            aload 0 /* this */
            getfield com.sun.media.sound.SMFParser.trackLength:I
            ifge 9
         8: .line 298
            iconst_0
            ireturn
         9: .line 303
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            aload 0 /* this */
            getfield com.sun.media.sound.SMFParser.trackLength:I
            newarray 8
            putfield com.sun.media.sound.SMFParser.trackData:[B
        10: .line 304
            goto 13
      StackMap locals:
      StackMap stack: java.lang.OutOfMemoryError
        11: astore 2 /* oom */
        start local 2 // java.lang.OutOfMemoryError oom
        12: .line 305
            new java.io.IOException
            dup
            ldc "Track length too big"
            aload 2 /* oom */
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 2 // java.lang.OutOfMemoryError oom
        13: .line 309
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.media.sound.SMFParser.stream:Ljava/io/DataInputStream;
            aload 0 /* this */
            getfield com.sun.media.sound.SMFParser.trackData:[B
            invokevirtual java.io.DataInputStream.readFully:([B)V
        14: .line 310
            goto 18
      StackMap locals:
      StackMap stack: java.io.EOFException
        15: pop
        16: .line 312
            iconst_0
            ireturn
        17: .line 314
      StackMap locals:
      StackMap stack:
            new java.io.EOFException
            dup
            ldc "invalid MIDI file"
            invokespecial java.io.EOFException.<init>:(Ljava/lang/String;)V
            athrow
        18: .line 316
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iconst_0
            putfield com.sun.media.sound.SMFParser.pos:I
        19: .line 317
            iconst_1
            ireturn
        end local 1 // int magic
        end local 0 // com.sun.media.sound.SMFParser this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   20     0   this  Lcom/sun/media/sound/SMFParser;
            5   20     1  magic  I
           12   13     2    oom  Ljava/lang/OutOfMemoryError;
      Exception table:
        from    to  target  type
           9    10      11  Class java.lang.OutOfMemoryError
          13    14      15  Class java.io.EOFException
    Exceptions:
      throws java.io.IOException, javax.sound.midi.InvalidMidiDataException

  private boolean trackFinished();
    descriptor: ()Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // com.sun.media.sound.SMFParser this
         0: .line 321
            aload 0 /* this */
            getfield com.sun.media.sound.SMFParser.pos:I
            aload 0 /* this */
            getfield com.sun.media.sound.SMFParser.trackLength:I
            if_icmplt 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
        end local 0 // com.sun.media.sound.SMFParser this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/sun/media/sound/SMFParser;

  void readTrack(javax.sound.midi.Track);
    descriptor: (Ljavax/sound/midi/Track;)V
    flags: (0x0000) 
    Code:
      stack=6, locals=17, args_size=2
        start local 0 // com.sun.media.sound.SMFParser this
        start local 1 // javax.sound.midi.Track track
         0: .line 327
            lconst_0
            lstore 2 /* tick */
        start local 2 // long tick
         1: .line 332
            iconst_0
            istore 4 /* status */
        start local 4 // int status
         2: .line 333
            iconst_0
            istore 5 /* endOfTrackFound */
        start local 5 // boolean endOfTrackFound
         3: .line 335
            goto 46
         4: .line 338
      StackMap locals: long int int
      StackMap stack:
            iconst_m1
            istore 7 /* data1 */
        start local 7 // int data1
         5: .line 339
            iconst_0
            istore 8 /* data2 */
        start local 8 // int data2
         6: .line 344
            lload 2 /* tick */
            aload 0 /* this */
            invokevirtual com.sun.media.sound.SMFParser.readVarInt:()J
            ladd
            lstore 2 /* tick */
         7: .line 347
            aload 0 /* this */
            invokevirtual com.sun.media.sound.SMFParser.readUnsigned:()I
            istore 9 /* byteValue */
        start local 9 // int byteValue
         8: .line 349
            iload 9 /* byteValue */
            sipush 128
            if_icmplt 11
         9: .line 350
            iload 9 /* byteValue */
            istore 4 /* status */
        10: .line 351
            goto 12
        11: .line 352
      StackMap locals: com.sun.media.sound.SMFParser javax.sound.midi.Track long int int top int int int
      StackMap stack:
            iload 9 /* byteValue */
            istore 7 /* data1 */
        12: .line 355
      StackMap locals:
      StackMap stack:
            iload 4 /* status */
            sipush 240
            iand
            lookupswitch { // 8
                  128: 13
                  144: 13
                  160: 13
                  176: 13
                  192: 18
                  208: 18
                  224: 13
                  240: 22
              default: 44
          }
        13: .line 362
      StackMap locals:
      StackMap stack:
            iload 7 /* data1 */
            iconst_m1
            if_icmpne 15
        14: .line 363
            aload 0 /* this */
            invokevirtual com.sun.media.sound.SMFParser.readUnsigned:()I
            istore 7 /* data1 */
        15: .line 365
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.sun.media.sound.SMFParser.readUnsigned:()I
            istore 8 /* data2 */
        16: .line 366
            new com.sun.media.sound.FastShortMessage
            dup
            iload 4 /* status */
            iload 7 /* data1 */
            bipush 8
            ishl
            ior
            iload 8 /* data2 */
            bipush 16
            ishl
            ior
            invokespecial com.sun.media.sound.FastShortMessage.<init>:(I)V
            astore 6 /* message */
        start local 6 // javax.sound.midi.MidiMessage message
        17: .line 367
            goto 45
        end local 6 // javax.sound.midi.MidiMessage message
        18: .line 371
      StackMap locals:
      StackMap stack:
            iload 7 /* data1 */
            iconst_m1
            if_icmpne 20
        19: .line 372
            aload 0 /* this */
            invokevirtual com.sun.media.sound.SMFParser.readUnsigned:()I
            istore 7 /* data1 */
        20: .line 374
      StackMap locals:
      StackMap stack:
            new com.sun.media.sound.FastShortMessage
            dup
            iload 4 /* status */
            iload 7 /* data1 */
            bipush 8
            ishl
            ior
            invokespecial com.sun.media.sound.FastShortMessage.<init>:(I)V
            astore 6 /* message */
        start local 6 // javax.sound.midi.MidiMessage message
        21: .line 375
            goto 45
        end local 6 // javax.sound.midi.MidiMessage message
        22: .line 378
      StackMap locals:
      StackMap stack:
            iload 4 /* status */
            lookupswitch { // 3
                  240: 23
                  247: 23
                  255: 30
              default: 43
          }
        23: .line 382
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.sun.media.sound.SMFParser.readVarInt:()J
            l2i
            istore 10 /* sysexLength */
        start local 10 // int sysexLength
        24: .line 383
            iload 10 /* sysexLength */
            newarray 8
            astore 11 /* sysexData */
        start local 11 // byte[] sysexData
        25: .line 384
            aload 0 /* this */
            aload 11 /* sysexData */
            invokevirtual com.sun.media.sound.SMFParser.read:([B)V
        26: .line 386
            new javax.sound.midi.SysexMessage
            dup
            invokespecial javax.sound.midi.SysexMessage.<init>:()V
            astore 12 /* sysexMessage */
        start local 12 // javax.sound.midi.SysexMessage sysexMessage
        27: .line 387
            aload 12 /* sysexMessage */
            iload 4 /* status */
            aload 11 /* sysexData */
            iload 10 /* sysexLength */
            invokevirtual javax.sound.midi.SysexMessage.setMessage:(I[BI)V
        28: .line 388
            aload 12 /* sysexMessage */
            astore 6 /* message */
        start local 6 // javax.sound.midi.MidiMessage message
        29: .line 389
            goto 45
        end local 12 // javax.sound.midi.SysexMessage sysexMessage
        end local 11 // byte[] sysexData
        end local 10 // int sysexLength
        end local 6 // javax.sound.midi.MidiMessage message
        30: .line 393
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.sun.media.sound.SMFParser.readUnsigned:()I
            istore 13 /* metaType */
        start local 13 // int metaType
        31: .line 394
            aload 0 /* this */
            invokevirtual com.sun.media.sound.SMFParser.readVarInt:()J
            l2i
            istore 14 /* metaLength */
        start local 14 // int metaLength
        32: .line 397
            iload 14 /* metaLength */
            newarray 8
            astore 15 /* metaData */
        start local 15 // byte[] metaData
        33: .line 398
            goto 36
        end local 15 // byte[] metaData
      StackMap locals: com.sun.media.sound.SMFParser javax.sound.midi.Track long int int top int int int top top top int int
      StackMap stack: java.lang.OutOfMemoryError
        34: astore 16 /* oom */
        start local 16 // java.lang.OutOfMemoryError oom
        35: .line 399
            new java.io.IOException
            dup
            ldc "Meta length too big"
            aload 16 /* oom */
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 16 // java.lang.OutOfMemoryError oom
        start local 15 // byte[] metaData
        36: .line 402
      StackMap locals: byte[]
      StackMap stack:
            aload 0 /* this */
            aload 15 /* metaData */
            invokevirtual com.sun.media.sound.SMFParser.read:([B)V
        37: .line 404
            new javax.sound.midi.MetaMessage
            dup
            invokespecial javax.sound.midi.MetaMessage.<init>:()V
            astore 16 /* metaMessage */
        start local 16 // javax.sound.midi.MetaMessage metaMessage
        38: .line 405
            aload 16 /* metaMessage */
            iload 13 /* metaType */
            aload 15 /* metaData */
            iload 14 /* metaLength */
            invokevirtual javax.sound.midi.MetaMessage.setMessage:(I[BI)V
        39: .line 406
            aload 16 /* metaMessage */
            astore 6 /* message */
        start local 6 // javax.sound.midi.MidiMessage message
        40: .line 407
            iload 13 /* metaType */
            bipush 47
            if_icmpne 45
        41: .line 409
            iconst_1
            istore 5 /* endOfTrackFound */
        42: .line 411
            goto 45
        end local 16 // javax.sound.midi.MetaMessage metaMessage
        end local 15 // byte[] metaData
        end local 14 // int metaLength
        end local 13 // int metaType
        end local 6 // javax.sound.midi.MidiMessage message
        43: .line 413
      StackMap locals: com.sun.media.sound.SMFParser javax.sound.midi.Track long int int top int int int
      StackMap stack:
            new javax.sound.midi.InvalidMidiDataException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Invalid status byte: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 4 /* status */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial javax.sound.midi.InvalidMidiDataException.<init>:(Ljava/lang/String;)V
            athrow
        44: .line 417
      StackMap locals:
      StackMap stack:
            new javax.sound.midi.InvalidMidiDataException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Invalid status byte: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 4 /* status */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial javax.sound.midi.InvalidMidiDataException.<init>:(Ljava/lang/String;)V
            athrow
        start local 6 // javax.sound.midi.MidiMessage message
        45: .line 419
      StackMap locals: com.sun.media.sound.SMFParser javax.sound.midi.Track long int int javax.sound.midi.MidiMessage int int int
      StackMap stack:
            aload 1 /* track */
            new javax.sound.midi.MidiEvent
            dup
            aload 6 /* message */
            lload 2 /* tick */
            invokespecial javax.sound.midi.MidiEvent.<init>:(Ljavax/sound/midi/MidiMessage;J)V
            invokevirtual javax.sound.midi.Track.add:(Ljavax/sound/midi/MidiEvent;)Z
            pop
        end local 9 // int byteValue
        end local 8 // int data2
        end local 7 // int data1
        end local 6 // javax.sound.midi.MidiMessage message
        46: .line 335
      StackMap locals: com.sun.media.sound.SMFParser javax.sound.midi.Track long int int
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.sun.media.sound.SMFParser.trackFinished:()Z
            ifne 50
            iload 5 /* endOfTrackFound */
            ifeq 4
        end local 5 // boolean endOfTrackFound
        end local 4 // int status
        end local 2 // long tick
        47: .line 421
            goto 50
      StackMap locals: com.sun.media.sound.SMFParser javax.sound.midi.Track
      StackMap stack: java.lang.ArrayIndexOutOfBoundsException
        48: astore 2 /* e */
        start local 2 // java.lang.ArrayIndexOutOfBoundsException e
        49: .line 424
            new java.io.EOFException
            dup
            ldc "invalid MIDI file"
            invokespecial java.io.EOFException.<init>:(Ljava/lang/String;)V
            athrow
        end local 2 // java.lang.ArrayIndexOutOfBoundsException e
        50: .line 426
      StackMap locals:
      StackMap stack:
            return
        end local 1 // javax.sound.midi.Track track
        end local 0 // com.sun.media.sound.SMFParser this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   51     0             this  Lcom/sun/media/sound/SMFParser;
            0   51     1            track  Ljavax/sound/midi/Track;
            1   47     2             tick  J
            2   47     4           status  I
            3   47     5  endOfTrackFound  Z
           17   18     6          message  Ljavax/sound/midi/MidiMessage;
           21   22     6          message  Ljavax/sound/midi/MidiMessage;
           29   30     6          message  Ljavax/sound/midi/MidiMessage;
           40   43     6          message  Ljavax/sound/midi/MidiMessage;
           45   46     6          message  Ljavax/sound/midi/MidiMessage;
            5   46     7            data1  I
            6   46     8            data2  I
            8   46     9        byteValue  I
           24   30    10      sysexLength  I
           25   30    11        sysexData  [B
           27   30    12     sysexMessage  Ljavax/sound/midi/SysexMessage;
           31   43    13         metaType  I
           32   43    14       metaLength  I
           33   34    15         metaData  [B
           36   43    15         metaData  [B
           35   36    16              oom  Ljava/lang/OutOfMemoryError;
           38   43    16      metaMessage  Ljavax/sound/midi/MetaMessage;
           49   50     2                e  Ljava/lang/ArrayIndexOutOfBoundsException;
      Exception table:
        from    to  target  type
          32    33      34  Class java.lang.OutOfMemoryError
           0    47      48  Class java.lang.ArrayIndexOutOfBoundsException
    Exceptions:
      throws java.io.IOException, javax.sound.midi.InvalidMidiDataException
    MethodParameters:
       Name  Flags
      track  
}
SourceFile: "StandardMidiFileReader.java"