public class org.objectweb.asm.optimizer.JarOptimizer
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.objectweb.asm.optimizer.JarOptimizer
  super_class: java.lang.Object
{
  static final java.util.Set<java.lang.String> API;
    descriptor: Ljava/util/Set;
    flags: (0x0018) ACC_STATIC, ACC_FINAL
    Signature: Ljava/util/Set<Ljava/lang/String;>;

  static final java.util.Map<java.lang.String, java.lang.String> HIERARCHY;
    descriptor: Ljava/util/Map;
    flags: (0x0018) ACC_STATIC, ACC_FINAL
    Signature: Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;

  static boolean nodebug;
    descriptor: Z
    flags: (0x0008) ACC_STATIC

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=0, args_size=0
         0: .line 63
            new java.util.HashSet
            dup
            invokespecial java.util.HashSet.<init>:()V
            putstatic org.objectweb.asm.optimizer.JarOptimizer.API:Ljava/util/Set;
         1: .line 64
            new java.util.HashMap
            dup
            invokespecial java.util.HashMap.<init>:()V
            putstatic org.objectweb.asm.optimizer.JarOptimizer.HIERARCHY:Ljava/util/Map;
         2: .line 65
            iconst_0
            putstatic org.objectweb.asm.optimizer.JarOptimizer.nodebug:Z
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.objectweb.asm.optimizer.JarOptimizer this
         0: .line 61
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // org.objectweb.asm.optimizer.JarOptimizer this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/objectweb/asm/optimizer/JarOptimizer;

  public static void main(java.lang.String[]);
    descriptor: ([Ljava/lang/String;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=7, args_size=1
        start local 0 // java.lang.String[] args
         0: .line 68
            new java.io.File
            dup
            aload 0 /* args */
            iconst_0
            aaload
            invokespecial java.io.File.<init>:(Ljava/lang/String;)V
            astore 1 /* f */
        start local 1 // java.io.File f
         1: .line 69
            new java.util.zip.GZIPInputStream
            dup
            new java.io.FileInputStream
            dup
            aload 1 /* f */
            invokespecial java.io.FileInputStream.<init>:(Ljava/io/File;)V
            invokespecial java.util.zip.GZIPInputStream.<init>:(Ljava/io/InputStream;)V
            astore 2 /* is */
        start local 2 // java.io.InputStream is
         2: .line 70
            new java.io.LineNumberReader
            dup
            new java.io.InputStreamReader
            dup
            aload 2 /* is */
            invokespecial java.io.InputStreamReader.<init>:(Ljava/io/InputStream;)V
            invokespecial java.io.LineNumberReader.<init>:(Ljava/io/Reader;)V
            astore 3 /* lnr */
        start local 3 // java.io.BufferedReader lnr
         3: .line 72
      StackMap locals: java.io.File java.io.InputStream java.io.BufferedReader
      StackMap stack:
            aload 3 /* lnr */
            invokevirtual java.io.BufferedReader.readLine:()Ljava/lang/String;
            astore 4 /* line */
        start local 4 // java.lang.String line
         4: .line 73
            aload 4 /* line */
            ifnull 12
         5: .line 74
            aload 4 /* line */
            ldc "class"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifeq 10
         6: .line 75
            aload 4 /* line */
            bipush 6
            aload 4 /* line */
            bipush 32
            invokevirtual java.lang.String.lastIndexOf:(I)I
            invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
            astore 5 /* c */
        start local 5 // java.lang.String c
         7: .line 76
            aload 4 /* line */
            aload 4 /* line */
            bipush 32
            invokevirtual java.lang.String.lastIndexOf:(I)I
            iconst_1
            iadd
            invokevirtual java.lang.String.substring:(I)Ljava/lang/String;
            astore 6 /* sc */
        start local 6 // java.lang.String sc
         8: .line 77
            getstatic org.objectweb.asm.optimizer.JarOptimizer.HIERARCHY:Ljava/util/Map;
            aload 5 /* c */
            aload 6 /* sc */
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        end local 6 // java.lang.String sc
        end local 5 // java.lang.String c
         9: .line 78
            goto 3
        10: .line 79
      StackMap locals: java.lang.String
      StackMap stack:
            getstatic org.objectweb.asm.optimizer.JarOptimizer.API:Ljava/util/Set;
            aload 4 /* line */
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
        end local 4 // java.lang.String line
        11: .line 71
            goto 3
        12: .line 86
      StackMap locals:
      StackMap stack:
            iconst_1
            istore 4 /* argIndex */
        start local 4 // int argIndex
        13: .line 87
            aload 0 /* args */
            iload 4 /* argIndex */
            aaload
            ldc "-nodebug"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 16
        14: .line 88
            iconst_1
            putstatic org.objectweb.asm.optimizer.JarOptimizer.nodebug:Z
        15: .line 89
            iinc 4 /* argIndex */ 1
        16: .line 92
      StackMap locals: int
      StackMap stack:
            new java.io.File
            dup
            aload 0 /* args */
            iload 4 /* argIndex */
            aaload
            invokespecial java.io.File.<init>:(Ljava/lang/String;)V
            invokestatic org.objectweb.asm.optimizer.JarOptimizer.optimize:(Ljava/io/File;)V
        17: .line 93
            return
        end local 4 // int argIndex
        end local 3 // java.io.BufferedReader lnr
        end local 2 // java.io.InputStream is
        end local 1 // java.io.File f
        end local 0 // java.lang.String[] args
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   18     0      args  [Ljava/lang/String;
            1   18     1         f  Ljava/io/File;
            2   18     2        is  Ljava/io/InputStream;
            3   18     3       lnr  Ljava/io/BufferedReader;
            4   11     4      line  Ljava/lang/String;
            7    9     5         c  Ljava/lang/String;
            8    9     6        sc  Ljava/lang/String;
           13   18     4  argIndex  I
    Exceptions:
      throws java.io.IOException
    MethodParameters:
      Name  Flags
      args  final

  static void optimize(java.io.File);
    descriptor: (Ljava/io/File;)V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=6, locals=9, args_size=1
        start local 0 // java.io.File f
         0: .line 96
            getstatic org.objectweb.asm.optimizer.JarOptimizer.nodebug:Z
            ifeq 2
            aload 0 /* f */
            invokevirtual java.io.File.getName:()Ljava/lang/String;
            ldc "debug"
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifeq 2
         1: .line 97
            return
         2: .line 100
      StackMap locals:
      StackMap stack:
            aload 0 /* f */
            invokevirtual java.io.File.isDirectory:()Z
            ifeq 10
         3: .line 101
            aload 0 /* f */
            invokevirtual java.io.File.listFiles:()[Ljava/io/File;
            astore 1 /* files */
        start local 1 // java.io.File[] files
         4: .line 102
            iconst_0
            istore 2 /* i */
        start local 2 // int i
         5: goto 8
         6: .line 103
      StackMap locals: java.io.File[] int
      StackMap stack:
            aload 1 /* files */
            iload 2 /* i */
            aaload
            invokestatic org.objectweb.asm.optimizer.JarOptimizer.optimize:(Ljava/io/File;)V
         7: .line 102
            iinc 2 /* i */ 1
      StackMap locals:
      StackMap stack:
         8: iload 2 /* i */
            aload 1 /* files */
            arraylength
            if_icmplt 6
        end local 2 // int i
        end local 1 // java.io.File[] files
         9: .line 105
            goto 38
      StackMap locals:
      StackMap stack:
        10: aload 0 /* f */
            invokevirtual java.io.File.getName:()Ljava/lang/String;
            ldc ".jar"
            invokevirtual java.lang.String.endsWith:(Ljava/lang/String;)Z
            ifeq 38
        11: .line 106
            new java.io.File
            dup
            aload 0 /* f */
            invokevirtual java.io.File.getParentFile:()Ljava/io/File;
            new java.lang.StringBuilder
            dup
            aload 0 /* f */
            invokevirtual java.io.File.getName:()Ljava/lang/String;
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc ".new"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.io.File.<init>:(Ljava/io/File;Ljava/lang/String;)V
            astore 1 /* g */
        start local 1 // java.io.File g
        12: .line 107
            new java.util.zip.ZipFile
            dup
            aload 0 /* f */
            invokespecial java.util.zip.ZipFile.<init>:(Ljava/io/File;)V
            astore 2 /* zf */
        start local 2 // java.util.zip.ZipFile zf
        13: .line 108
            new java.util.zip.ZipOutputStream
            dup
            new java.io.FileOutputStream
            dup
            aload 1 /* g */
            invokespecial java.io.FileOutputStream.<init>:(Ljava/io/File;)V
            invokespecial java.util.zip.ZipOutputStream.<init>:(Ljava/io/OutputStream;)V
            astore 3 /* out */
        start local 3 // java.util.zip.ZipOutputStream out
        14: .line 109
            aload 2 /* zf */
            invokevirtual java.util.zip.ZipFile.entries:()Ljava/util/Enumeration;
            astore 4 /* e */
        start local 4 // java.util.Enumeration e
        15: .line 110
            sipush 10000
            newarray 8
            astore 5 /* buf */
        start local 5 // byte[] buf
        16: .line 111
            goto 31
        17: .line 112
      StackMap locals: java.io.File java.io.File java.util.zip.ZipFile java.util.zip.ZipOutputStream java.util.Enumeration byte[]
      StackMap stack:
            aload 4 /* e */
            invokeinterface java.util.Enumeration.nextElement:()Ljava/lang/Object;
            checkcast java.util.zip.ZipEntry
            astore 6 /* ze */
        start local 6 // java.util.zip.ZipEntry ze
        18: .line 113
            aload 6 /* ze */
            invokevirtual java.util.zip.ZipEntry.isDirectory:()Z
            ifeq 21
        19: .line 114
            aload 3 /* out */
            aload 6 /* ze */
            invokevirtual java.util.zip.ZipOutputStream.putNextEntry:(Ljava/util/zip/ZipEntry;)V
        20: .line 115
            goto 31
        21: .line 117
      StackMap locals: java.util.zip.ZipEntry
      StackMap stack:
            aload 3 /* out */
            aload 6 /* ze */
            invokevirtual java.util.zip.ZipOutputStream.putNextEntry:(Ljava/util/zip/ZipEntry;)V
        22: .line 118
            aload 6 /* ze */
            invokevirtual java.util.zip.ZipEntry.getName:()Ljava/lang/String;
            ldc ".class"
            invokevirtual java.lang.String.endsWith:(Ljava/lang/String;)Z
            ifeq 25
        23: .line 119
            new org.objectweb.asm.ClassReader
            dup
            aload 2 /* zf */
            aload 6 /* ze */
            invokevirtual java.util.zip.ZipFile.getInputStream:(Ljava/util/zip/ZipEntry;)Ljava/io/InputStream;
            invokespecial org.objectweb.asm.ClassReader.<init>:(Ljava/io/InputStream;)V
            astore 7 /* cr */
        start local 7 // org.objectweb.asm.ClassReader cr
        24: .line 121
            aload 7 /* cr */
            new org.objectweb.asm.optimizer.JarOptimizer$ClassVerifier
            dup
            invokespecial org.objectweb.asm.optimizer.JarOptimizer$ClassVerifier.<init>:()V
            iconst_0
            invokevirtual org.objectweb.asm.ClassReader.accept:(Lorg/objectweb/asm/ClassVisitor;I)V
        end local 7 // org.objectweb.asm.ClassReader cr
        25: .line 123
      StackMap locals:
      StackMap stack:
            aload 2 /* zf */
            aload 6 /* ze */
            invokevirtual java.util.zip.ZipFile.getInputStream:(Ljava/util/zip/ZipEntry;)Ljava/io/InputStream;
            astore 7 /* is */
        start local 7 // java.io.InputStream is
        26: .line 126
      StackMap locals: java.io.InputStream
      StackMap stack:
            aload 7 /* is */
            aload 5 /* buf */
            iconst_0
            aload 5 /* buf */
            arraylength
            invokevirtual java.io.InputStream.read:([BII)I
            istore 8 /* n */
        start local 8 // int n
        27: .line 127
            iload 8 /* n */
            iconst_m1
            if_icmpeq 29
        28: .line 128
            aload 3 /* out */
            aload 5 /* buf */
            iconst_0
            iload 8 /* n */
            invokevirtual java.util.zip.ZipOutputStream.write:([BII)V
        29: .line 130
      StackMap locals: int
      StackMap stack:
            iload 8 /* n */
            iconst_m1
            if_icmpne 26
        30: .line 131
            aload 3 /* out */
            invokevirtual java.util.zip.ZipOutputStream.closeEntry:()V
        end local 8 // int n
        end local 7 // java.io.InputStream is
        end local 6 // java.util.zip.ZipEntry ze
        31: .line 111
      StackMap locals:
      StackMap stack:
            aload 4 /* e */
            invokeinterface java.util.Enumeration.hasMoreElements:()Z
            ifne 17
        32: .line 133
            aload 3 /* out */
            invokevirtual java.util.zip.ZipOutputStream.close:()V
        33: .line 134
            aload 2 /* zf */
            invokevirtual java.util.zip.ZipFile.close:()V
        34: .line 135
            aload 0 /* f */
            invokevirtual java.io.File.delete:()Z
            ifne 36
        35: .line 136
            new java.io.IOException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Cannot delete file "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* f */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
            athrow
        36: .line 138
      StackMap locals:
      StackMap stack:
            aload 1 /* g */
            aload 0 /* f */
            invokevirtual java.io.File.renameTo:(Ljava/io/File;)Z
            ifne 38
        37: .line 139
            new java.io.IOException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Cannot rename file "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* g */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
            athrow
        end local 5 // byte[] buf
        end local 4 // java.util.Enumeration e
        end local 3 // java.util.zip.ZipOutputStream out
        end local 2 // java.util.zip.ZipFile zf
        end local 1 // java.io.File g
        38: .line 142
      StackMap locals: java.io.File
      StackMap stack:
            return
        end local 0 // java.io.File f
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   39     0      f  Ljava/io/File;
            4    9     1  files  [Ljava/io/File;
            5    9     2      i  I
           12   38     1      g  Ljava/io/File;
           13   38     2     zf  Ljava/util/zip/ZipFile;
           14   38     3    out  Ljava/util/zip/ZipOutputStream;
           15   38     4      e  Ljava/util/Enumeration<+Ljava/util/zip/ZipEntry;>;
           16   38     5    buf  [B
           18   31     6     ze  Ljava/util/zip/ZipEntry;
           24   25     7     cr  Lorg/objectweb/asm/ClassReader;
           26   31     7     is  Ljava/io/InputStream;
           27   31     8      n  I
    Exceptions:
      throws java.io.IOException
    MethodParameters:
      Name  Flags
      f     final
}
SourceFile: "JarOptimizer.java"
NestMembers:
  org.objectweb.asm.optimizer.JarOptimizer$ClassDump  org.objectweb.asm.optimizer.JarOptimizer$ClassVerifier  org.objectweb.asm.optimizer.JarOptimizer$ClassVerifier$1
InnerClasses:
  ClassDump = org.objectweb.asm.optimizer.JarOptimizer$ClassDump of org.objectweb.asm.optimizer.JarOptimizer
  ClassVerifier = org.objectweb.asm.optimizer.JarOptimizer$ClassVerifier of org.objectweb.asm.optimizer.JarOptimizer