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 250
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 246
            aload 0 /* this */
            iconst_0
            putfield com.sun.media.sound.SMFParser.trackLength:I
         2: .line 247
            aload 0 /* this */
            aconst_null
            putfield com.sun.media.sound.SMFParser.trackData:[B
         3: .line 248
            aload 0 /* this */
            iconst_0
            putfield com.sun.media.sound.SMFParser.pos:I
         4: .line 251
            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 254
            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 258
            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 259
            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 260
            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 263
            lconst_0
            lstore 1 /* value */
        start local 1 // long value
         1: .line 264
            iconst_0
            istore 3 /* currentByte */
        start local 3 // int currentByte
         2: .line 266
      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 267
            lload 1 /* value */
            bipush 7
            lshl
            iload 3 /* currentByte */
            bipush 127
            iand
            i2l
            ladd
            lstore 1 /* value */
         4: .line 268
            iload 3 /* currentByte */
            sipush 128
            iand
            ifne 2
         5: .line 269
            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 274
            aload 0 /* this */
            getfield com.sun.media.sound.SMFParser.stream:Ljava/io/DataInputStream;
            invokevirtual java.io.DataInputStream.readInt:()I
         1: ireturn
         2: .line 275
      StackMap locals:
      StackMap stack: java.io.EOFException
            pop
         3: .line 276
            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=3, locals=2, args_size=1
        start local 0 // com.sun.media.sound.SMFParser this
         0: .line 282
            aload 0 /* this */
            iconst_0
            putfield com.sun.media.sound.SMFParser.trackLength:I
         1: .line 285
      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 287
            iconst_0
            ireturn
         3: .line 289
      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 291
      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 292
            aload 0 /* this */
            aload 0 /* this */
            invokevirtual com.sun.media.sound.SMFParser.readIntFromStream:()I
            putfield com.sun.media.sound.SMFParser.trackLength:I
         6: .line 293
            iload 1 /* magic */
            ldc 1297379947
            if_icmpne 1
         7: .line 295
            aload 0 /* this */
            getfield com.sun.media.sound.SMFParser.trackLength:I
            ifge 9
         8: .line 296
            iconst_0
            ireturn
         9: .line 300
      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 303
            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
        11: .line 304
            goto 15
      StackMap locals:
      StackMap stack: java.io.EOFException
        12: pop
        13: .line 306
            iconst_0
            ireturn
        14: .line 308
      StackMap locals:
      StackMap stack:
            new java.io.EOFException
            dup
            ldc "invalid MIDI file"
            invokespecial java.io.EOFException.<init>:(Ljava/lang/String;)V
            athrow
        15: .line 310
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iconst_0
            putfield com.sun.media.sound.SMFParser.pos:I
        16: .line 311
            iconst_1
            ireturn
        end local 1 // int magic
        end local 0 // com.sun.media.sound.SMFParser this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   17     0   this  Lcom/sun/media/sound/SMFParser;
            5   17     1  magic  I
      Exception table:
        from    to  target  type
          10    11      12  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 315
            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 321
            lconst_0
            lstore 2 /* tick */
        start local 2 // long tick
         1: .line 326
            iconst_0
            istore 4 /* status */
        start local 4 // int status
         2: .line 327
            iconst_0
            istore 5 /* endOfTrackFound */
        start local 5 // boolean endOfTrackFound
         3: .line 329
            goto 43
         4: .line 332
      StackMap locals: long int int
      StackMap stack:
            iconst_m1
            istore 7 /* data1 */
        start local 7 // int data1
         5: .line 333
            iconst_0
            istore 8 /* data2 */
        start local 8 // int data2
         6: .line 338
            lload 2 /* tick */
            aload 0 /* this */
            invokevirtual com.sun.media.sound.SMFParser.readVarInt:()J
            ladd
            lstore 2 /* tick */
         7: .line 341
            aload 0 /* this */
            invokevirtual com.sun.media.sound.SMFParser.readUnsigned:()I
            istore 9 /* byteValue */
        start local 9 // int byteValue
         8: .line 343
            iload 9 /* byteValue */
            sipush 128
            if_icmplt 11
         9: .line 344
            iload 9 /* byteValue */
            istore 4 /* status */
        10: .line 345
            goto 12
        11: .line 346
      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 349
      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: 41
          }
        13: .line 356
      StackMap locals:
      StackMap stack:
            iload 7 /* data1 */
            iconst_m1
            if_icmpne 15
        14: .line 357
            aload 0 /* this */
            invokevirtual com.sun.media.sound.SMFParser.readUnsigned:()I
            istore 7 /* data1 */
        15: .line 359
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.sun.media.sound.SMFParser.readUnsigned:()I
            istore 8 /* data2 */
        16: .line 360
            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 361
            goto 42
        end local 6 // javax.sound.midi.MidiMessage message
        18: .line 365
      StackMap locals:
      StackMap stack:
            iload 7 /* data1 */
            iconst_m1
            if_icmpne 20
        19: .line 366
            aload 0 /* this */
            invokevirtual com.sun.media.sound.SMFParser.readUnsigned:()I
            istore 7 /* data1 */
        20: .line 368
      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 369
            goto 42
        end local 6 // javax.sound.midi.MidiMessage message
        22: .line 372
      StackMap locals:
      StackMap stack:
            iload 4 /* status */
            lookupswitch { // 3
                  240: 23
                  247: 23
                  255: 30
              default: 40
          }
        23: .line 376
      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 377
            iload 10 /* sysexLength */
            newarray 8
            astore 11 /* sysexData */
        start local 11 // byte[] sysexData
        25: .line 378
            aload 0 /* this */
            aload 11 /* sysexData */
            invokevirtual com.sun.media.sound.SMFParser.read:([B)V
        26: .line 380
            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 381
            aload 12 /* sysexMessage */
            iload 4 /* status */
            aload 11 /* sysexData */
            iload 10 /* sysexLength */
            invokevirtual javax.sound.midi.SysexMessage.setMessage:(I[BI)V
        28: .line 382
            aload 12 /* sysexMessage */
            astore 6 /* message */
        start local 6 // javax.sound.midi.MidiMessage message
        29: .line 383
            goto 42
        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 387
      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 388
            aload 0 /* this */
            invokevirtual com.sun.media.sound.SMFParser.readVarInt:()J
            l2i
            istore 14 /* metaLength */
        start local 14 // int metaLength
        32: .line 390
            iload 14 /* metaLength */
            newarray 8
            astore 15 /* metaData */
        start local 15 // byte[] metaData
        33: .line 391
            aload 0 /* this */
            aload 15 /* metaData */
            invokevirtual com.sun.media.sound.SMFParser.read:([B)V
        34: .line 393
            new javax.sound.midi.MetaMessage
            dup
            invokespecial javax.sound.midi.MetaMessage.<init>:()V
            astore 16 /* metaMessage */
        start local 16 // javax.sound.midi.MetaMessage metaMessage
        35: .line 394
            aload 16 /* metaMessage */
            iload 13 /* metaType */
            aload 15 /* metaData */
            iload 14 /* metaLength */
            invokevirtual javax.sound.midi.MetaMessage.setMessage:(I[BI)V
        36: .line 395
            aload 16 /* metaMessage */
            astore 6 /* message */
        start local 6 // javax.sound.midi.MidiMessage message
        37: .line 396
            iload 13 /* metaType */
            bipush 47
            if_icmpne 42
        38: .line 398
            iconst_1
            istore 5 /* endOfTrackFound */
        39: .line 400
            goto 42
        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
        40: .line 402
      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
        41: .line 406
      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
        42: .line 408
      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
        43: .line 329
      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 47
            iload 5 /* endOfTrackFound */
            ifeq 4
        end local 5 // boolean endOfTrackFound
        end local 4 // int status
        end local 2 // long tick
        44: .line 410
            goto 47
      StackMap locals: com.sun.media.sound.SMFParser javax.sound.midi.Track
      StackMap stack: java.lang.ArrayIndexOutOfBoundsException
        45: astore 2 /* e */
        start local 2 // java.lang.ArrayIndexOutOfBoundsException e
        46: .line 413
            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
        47: .line 415
      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   48     0             this  Lcom/sun/media/sound/SMFParser;
            0   48     1            track  Ljavax/sound/midi/Track;
            1   44     2             tick  J
            2   44     4           status  I
            3   44     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;
           37   40     6          message  Ljavax/sound/midi/MidiMessage;
           42   43     6          message  Ljavax/sound/midi/MidiMessage;
            5   43     7            data1  I
            6   43     8            data2  I
            8   43     9        byteValue  I
           24   30    10      sysexLength  I
           25   30    11        sysexData  [B
           27   30    12     sysexMessage  Ljavax/sound/midi/SysexMessage;
           31   40    13         metaType  I
           32   40    14       metaLength  I
           33   40    15         metaData  [B
           35   40    16      metaMessage  Ljavax/sound/midi/MetaMessage;
           46   47     2                e  Ljava/lang/ArrayIndexOutOfBoundsException;
      Exception table:
        from    to  target  type
           0    44      45  Class java.lang.ArrayIndexOutOfBoundsException
    Exceptions:
      throws java.io.IOException, javax.sound.midi.InvalidMidiDataException
    MethodParameters:
       Name  Flags
      track  
}
SourceFile: "StandardMidiFileReader.java"