public class org.apache.tomcat.util.net.IPv6Utils
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.apache.tomcat.util.net.IPv6Utils
  super_class: java.lang.Object
{
  private static final int MAX_NUMBER_OF_GROUPS;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 8

  private static final int MAX_GROUP_LENGTH;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 4

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

  public static java.lang.String canonize(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/lang/String;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=19, args_size=1
        start local 0 // java.lang.String ipv6Address
         0: .line 49
            aload 0 /* ipv6Address */
            ifnonnull 2
         1: .line 50
            aconst_null
            areturn
         2: .line 54
      StackMap locals:
      StackMap stack:
            aload 0 /* ipv6Address */
            invokestatic org.apache.tomcat.util.net.IPv6Utils.mayBeIPv6Address:(Ljava/lang/String;)Z
            ifne 4
         3: .line 55
            aload 0 /* ipv6Address */
            areturn
         4: .line 59
      StackMap locals:
      StackMap stack:
            aload 0 /* ipv6Address */
            invokevirtual java.lang.String.length:()I
            istore 1 /* ipv6AddressLength */
        start local 1 // int ipv6AddressLength
         5: .line 60
            aload 0 /* ipv6Address */
            ldc "."
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifeq 13
         6: .line 63
            aload 0 /* ipv6Address */
            ldc ":"
            invokevirtual java.lang.String.lastIndexOf:(Ljava/lang/String;)I
            istore 2 /* lastColonPos */
        start local 2 // int lastColonPos
         7: .line 64
            aload 0 /* ipv6Address */
            ldc "::"
            invokevirtual java.lang.String.lastIndexOf:(Ljava/lang/String;)I
            istore 3 /* lastColonsPos */
        start local 3 // int lastColonsPos
         8: .line 65
            iload 3 /* lastColonsPos */
            iflt 11
            iload 2 /* lastColonPos */
            iload 3 /* lastColonsPos */
            iconst_1
            iadd
            if_icmpne 11
         9: .line 71
            iload 2 /* lastColonPos */
            iconst_1
            iadd
            istore 1 /* ipv6AddressLength */
        10: .line 72
            goto 15
        11: .line 78
      StackMap locals: int int int
      StackMap stack:
            iload 2 /* lastColonPos */
            istore 1 /* ipv6AddressLength */
        end local 3 // int lastColonsPos
        end local 2 // int lastColonPos
        12: .line 80
            goto 15
      StackMap locals:
      StackMap stack:
        13: aload 0 /* ipv6Address */
            ldc "%"
            invokevirtual java.lang.String.contains:(Ljava/lang/CharSequence;)Z
            ifeq 15
        14: .line 83
            aload 0 /* ipv6Address */
            ldc "%"
            invokevirtual java.lang.String.lastIndexOf:(Ljava/lang/String;)I
            istore 1 /* ipv6AddressLength */
        15: .line 86
      StackMap locals:
      StackMap stack:
            new java.lang.StringBuilder
            dup
            invokespecial java.lang.StringBuilder.<init>:()V
            astore 2 /* result */
        start local 2 // java.lang.StringBuilder result
        16: .line 87
            bipush 8
            iconst_4
            multianewarray [[C 2
            astore 3 /* groups */
        start local 3 // char[][] groups
        17: .line 88
            iconst_0
            istore 4 /* groupCounter */
        start local 4 // int groupCounter
        18: .line 89
            iconst_0
            istore 5 /* charInGroupCounter */
        start local 5 // int charInGroupCounter
        19: .line 92
            iconst_m1
            istore 6 /* zeroGroupIndex */
        start local 6 // int zeroGroupIndex
        20: .line 93
            iconst_0
            istore 7 /* zeroGroupLength */
        start local 7 // int zeroGroupLength
        21: .line 96
            iconst_m1
            istore 8 /* maxZeroGroupIndex */
        start local 8 // int maxZeroGroupIndex
        22: .line 97
            iconst_0
            istore 9 /* maxZeroGroupLength */
        start local 9 // int maxZeroGroupLength
        23: .line 99
            iconst_1
            istore 10 /* isZero */
        start local 10 // boolean isZero
        24: .line 100
            iconst_1
            istore 11 /* groupStart */
        start local 11 // boolean groupStart
        25: .line 107
            new java.lang.StringBuilder
            dup
            aload 0 /* ipv6Address */
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            astore 12 /* expanded */
        start local 12 // java.lang.StringBuilder expanded
        26: .line 108
            aload 0 /* ipv6Address */
            ldc "::"
            invokevirtual java.lang.String.indexOf:(Ljava/lang/String;)I
            istore 13 /* colonsPos */
        start local 13 // int colonsPos
        27: .line 109
            iload 1 /* ipv6AddressLength */
            istore 14 /* length */
        start local 14 // int length
        28: .line 110
            iconst_0
            istore 15 /* change */
        start local 15 // int change
        29: .line 112
            iload 13 /* colonsPos */
            iflt 52
            iload 13 /* colonsPos */
            iload 1 /* ipv6AddressLength */
            iconst_1
            isub
            if_icmpge 52
        30: .line 113
            iconst_0
            istore 16 /* colonCounter */
        start local 16 // int colonCounter
        31: .line 114
            iconst_0
            istore 17 /* i */
        start local 17 // int i
        32: goto 36
        33: .line 115
      StackMap locals: java.lang.String int java.lang.StringBuilder char[][] int int int int int int int int java.lang.StringBuilder int int int int int
      StackMap stack:
            aload 0 /* ipv6Address */
            iload 17 /* i */
            invokevirtual java.lang.String.charAt:(I)C
            bipush 58
            if_icmpne 35
        34: .line 116
            iinc 16 /* colonCounter */ 1
        35: .line 114
      StackMap locals:
      StackMap stack:
            iinc 17 /* i */ 1
      StackMap locals:
      StackMap stack:
        36: iload 17 /* i */
            iload 1 /* ipv6AddressLength */
            if_icmplt 33
        end local 17 // int i
        37: .line 120
            iload 13 /* colonsPos */
            ifne 40
        38: .line 121
            aload 12 /* expanded */
            iconst_0
            ldc "0"
            invokevirtual java.lang.StringBuilder.insert:(ILjava/lang/String;)Ljava/lang/StringBuilder;
            pop
        39: .line 122
            iinc 15 /* change */ 1
        40: .line 125
      StackMap locals:
      StackMap stack:
            iconst_0
            istore 17 /* i */
        start local 17 // int i
        41: goto 45
        42: .line 126
      StackMap locals: int
      StackMap stack:
            aload 12 /* expanded */
            iload 13 /* colonsPos */
            iconst_1
            iadd
            ldc "0:"
            invokevirtual java.lang.StringBuilder.insert:(ILjava/lang/String;)Ljava/lang/StringBuilder;
            pop
        43: .line 127
            iinc 15 /* change */ 2
        44: .line 125
            iinc 17 /* i */ 1
      StackMap locals:
      StackMap stack:
        45: iload 17 /* i */
            bipush 8
            iload 16 /* colonCounter */
            isub
            if_icmplt 42
        end local 17 // int i
        46: .line 131
            iload 13 /* colonsPos */
            iload 1 /* ipv6AddressLength */
            iconst_2
            isub
            if_icmpne 49
        47: .line 132
            aload 12 /* expanded */
            iload 13 /* colonsPos */
            iload 15 /* change */
            iadd
            iconst_1
            iadd
            bipush 48
            invokevirtual java.lang.StringBuilder.setCharAt:(IC)V
        48: .line 133
            goto 51
        49: .line 134
      StackMap locals:
      StackMap stack:
            aload 12 /* expanded */
            iload 13 /* colonsPos */
            iload 15 /* change */
            iadd
            iconst_1
            iadd
            invokevirtual java.lang.StringBuilder.deleteCharAt:(I)Ljava/lang/StringBuilder;
            pop
        50: .line 135
            iinc 15 /* change */ -1
        51: .line 137
      StackMap locals:
      StackMap stack:
            iload 14 /* length */
            iload 15 /* change */
            iadd
            istore 14 /* length */
        end local 16 // int colonCounter
        52: .line 142
      StackMap locals:
      StackMap stack:
            iconst_0
            istore 16 /* charCounter */
        start local 16 // int charCounter
        53: goto 80
        54: .line 143
      StackMap locals: int
      StackMap stack:
            aload 12 /* expanded */
            iload 16 /* charCounter */
            invokevirtual java.lang.StringBuilder.charAt:(I)C
            istore 17 /* c */
        start local 17 // char c
        55: .line 144
            iload 17 /* c */
            bipush 65
            if_icmplt 57
            iload 17 /* c */
            bipush 70
            if_icmpgt 57
        56: .line 145
            iload 17 /* c */
            bipush 32
            iadd
            i2c
            istore 17 /* c */
        57: .line 147
      StackMap locals: int
      StackMap stack:
            iload 17 /* c */
            bipush 58
            if_icmpeq 64
        58: .line 148
            aload 3 /* groups */
            iload 4 /* groupCounter */
            aaload
            iload 5 /* charInGroupCounter */
            iload 17 /* c */
            castore
        59: .line 149
            iload 11 /* groupStart */
            ifeq 60
            iload 17 /* c */
            bipush 48
            if_icmpeq 62
        60: .line 150
      StackMap locals:
      StackMap stack:
            iinc 5 /* charInGroupCounter */ 1
        61: .line 151
            iconst_0
            istore 11 /* groupStart */
        62: .line 153
      StackMap locals:
      StackMap stack:
            iload 17 /* c */
            bipush 48
            if_icmpeq 64
        63: .line 154
            iconst_0
            istore 10 /* isZero */
        64: .line 157
      StackMap locals:
      StackMap stack:
            iload 17 /* c */
            bipush 58
            if_icmpeq 65
            iload 16 /* charCounter */
            iload 14 /* length */
            iconst_1
            isub
            if_icmpne 79
        65: .line 159
      StackMap locals:
      StackMap stack:
            iload 10 /* isZero */
            ifeq 69
        66: .line 160
            iinc 7 /* zeroGroupLength */ 1
        67: .line 161
            iload 6 /* zeroGroupIndex */
            iconst_m1
            if_icmpne 69
        68: .line 162
            iload 4 /* groupCounter */
            istore 6 /* zeroGroupIndex */
        69: .line 166
      StackMap locals:
      StackMap stack:
            iload 10 /* isZero */
            ifeq 70
            iload 16 /* charCounter */
            iload 14 /* length */
            iconst_1
            isub
            if_icmpne 75
        70: .line 168
      StackMap locals:
      StackMap stack:
            iload 7 /* zeroGroupLength */
            iload 9 /* maxZeroGroupLength */
            if_icmple 73
        71: .line 169
            iload 7 /* zeroGroupLength */
            istore 9 /* maxZeroGroupLength */
        72: .line 170
            iload 6 /* zeroGroupIndex */
            istore 8 /* maxZeroGroupIndex */
        73: .line 172
      StackMap locals:
      StackMap stack:
            iconst_0
            istore 7 /* zeroGroupLength */
        74: .line 173
            iconst_m1
            istore 6 /* zeroGroupIndex */
        75: .line 175
      StackMap locals:
      StackMap stack:
            iinc 4 /* groupCounter */ 1
        76: .line 176
            iconst_0
            istore 5 /* charInGroupCounter */
        77: .line 177
            iconst_1
            istore 10 /* isZero */
        78: .line 178
            iconst_1
            istore 11 /* groupStart */
        end local 17 // char c
        79: .line 142
      StackMap locals:
      StackMap stack:
            iinc 16 /* charCounter */ 1
      StackMap locals:
      StackMap stack:
        80: iload 16 /* charCounter */
            iload 14 /* length */
            if_icmplt 54
        end local 16 // int charCounter
        81: .line 182
            iload 4 /* groupCounter */
            istore 16 /* numberOfGroups */
        start local 16 // int numberOfGroups
        82: .line 185
            iconst_0
            istore 4 /* groupCounter */
            goto 99
        83: .line 186
      StackMap locals:
      StackMap stack:
            iload 9 /* maxZeroGroupLength */
            iconst_1
            if_icmple 85
            iload 4 /* groupCounter */
            iload 8 /* maxZeroGroupIndex */
            if_icmplt 85
        84: .line 187
            iload 4 /* groupCounter */
            iload 8 /* maxZeroGroupIndex */
            iload 9 /* maxZeroGroupLength */
            iadd
            if_icmplt 96
        85: .line 188
      StackMap locals:
      StackMap stack:
            iconst_0
            istore 17 /* j */
        start local 17 // int j
        86: goto 90
        87: .line 189
      StackMap locals: int
      StackMap stack:
            aload 3 /* groups */
            iload 4 /* groupCounter */
            aaload
            iload 17 /* j */
            caload
            ifeq 89
        88: .line 190
            aload 2 /* result */
            aload 3 /* groups */
            iload 4 /* groupCounter */
            aaload
            iload 17 /* j */
            caload
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            pop
        89: .line 188
      StackMap locals:
      StackMap stack:
            iinc 17 /* j */ 1
      StackMap locals:
      StackMap stack:
        90: iload 17 /* j */
            iconst_4
            if_icmplt 87
        end local 17 // int j
        91: .line 193
            iload 4 /* groupCounter */
            iload 16 /* numberOfGroups */
            iconst_1
            isub
            if_icmpge 98
        92: .line 194
            iload 4 /* groupCounter */
            iload 8 /* maxZeroGroupIndex */
            iconst_1
            isub
            if_icmpne 94
        93: .line 195
            iload 9 /* maxZeroGroupLength */
            iconst_1
            if_icmpgt 98
        94: .line 196
      StackMap locals:
      StackMap stack:
            aload 2 /* result */
            bipush 58
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            pop
        95: .line 198
            goto 98
      StackMap locals:
      StackMap stack:
        96: iload 4 /* groupCounter */
            iload 8 /* maxZeroGroupIndex */
            if_icmpne 98
        97: .line 199
            aload 2 /* result */
            ldc "::"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        98: .line 185
      StackMap locals:
      StackMap stack:
            iinc 4 /* groupCounter */ 1
      StackMap locals:
      StackMap stack:
        99: iload 4 /* groupCounter */
            iload 16 /* numberOfGroups */
            if_icmplt 83
       100: .line 205
            aload 2 /* result */
            invokevirtual java.lang.StringBuilder.length:()I
            istore 17 /* resultLength */
        start local 17 // int resultLength
       101: .line 206
            aload 2 /* result */
            iload 17 /* resultLength */
            iconst_1
            isub
            invokevirtual java.lang.StringBuilder.charAt:(I)C
            bipush 58
            if_icmpne 104
            iload 1 /* ipv6AddressLength */
            aload 0 /* ipv6Address */
            invokevirtual java.lang.String.length:()I
            if_icmpge 104
       102: .line 207
            aload 0 /* ipv6Address */
            iload 1 /* ipv6AddressLength */
            invokevirtual java.lang.String.charAt:(I)C
            bipush 58
            if_icmpne 104
       103: .line 208
            aload 2 /* result */
            iload 17 /* resultLength */
            iconst_1
            isub
            iload 17 /* resultLength */
            invokevirtual java.lang.StringBuilder.delete:(II)Ljava/lang/StringBuilder;
            pop
       104: .line 214
      StackMap locals: int
      StackMap stack:
            iload 1 /* ipv6AddressLength */
            istore 18 /* i */
        start local 18 // int i
       105: goto 108
       106: .line 215
      StackMap locals: int
      StackMap stack:
            aload 2 /* result */
            aload 0 /* ipv6Address */
            iload 18 /* i */
            invokevirtual java.lang.String.charAt:(I)C
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            pop
       107: .line 214
            iinc 18 /* i */ 1
      StackMap locals:
      StackMap stack:
       108: iload 18 /* i */
            aload 0 /* ipv6Address */
            invokevirtual java.lang.String.length:()I
            if_icmplt 106
        end local 18 // int i
       109: .line 218
            aload 2 /* result */
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            areturn
        end local 17 // int resultLength
        end local 16 // int numberOfGroups
        end local 15 // int change
        end local 14 // int length
        end local 13 // int colonsPos
        end local 12 // java.lang.StringBuilder expanded
        end local 11 // boolean groupStart
        end local 10 // boolean isZero
        end local 9 // int maxZeroGroupLength
        end local 8 // int maxZeroGroupIndex
        end local 7 // int zeroGroupLength
        end local 6 // int zeroGroupIndex
        end local 5 // int charInGroupCounter
        end local 4 // int groupCounter
        end local 3 // char[][] groups
        end local 2 // java.lang.StringBuilder result
        end local 1 // int ipv6AddressLength
        end local 0 // java.lang.String ipv6Address
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0  110     0         ipv6Address  Ljava/lang/String;
            5  110     1   ipv6AddressLength  I
            7   12     2        lastColonPos  I
            8   12     3       lastColonsPos  I
           16  110     2              result  Ljava/lang/StringBuilder;
           17  110     3              groups  [[C
           18  110     4        groupCounter  I
           19  110     5  charInGroupCounter  I
           20  110     6      zeroGroupIndex  I
           21  110     7     zeroGroupLength  I
           22  110     8   maxZeroGroupIndex  I
           23  110     9  maxZeroGroupLength  I
           24  110    10              isZero  Z
           25  110    11          groupStart  Z
           26  110    12            expanded  Ljava/lang/StringBuilder;
           27  110    13           colonsPos  I
           28  110    14              length  I
           29  110    15              change  I
           31   52    16        colonCounter  I
           32   37    17                   i  I
           41   46    17                   i  I
           53   81    16         charCounter  I
           55   79    17                   c  C
           82  110    16      numberOfGroups  I
           86   91    17                   j  I
          101  110    17        resultLength  I
          105  109    18                   i  I
    Exceptions:
      throws java.lang.IllegalArgumentException
    MethodParameters:
             Name  Flags
      ipv6Address  

  static boolean mayBeIPv6Address(java.lang.String);
    descriptor: (Ljava/lang/String;)Z
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=5, args_size=1
        start local 0 // java.lang.String input
         0: .line 228
            aload 0 /* input */
            ifnonnull 2
         1: .line 229
            iconst_0
            ireturn
         2: .line 232
      StackMap locals:
      StackMap stack:
            iconst_0
            istore 1 /* colonsCounter */
        start local 1 // int colonsCounter
         3: .line 233
            aload 0 /* input */
            invokevirtual java.lang.String.length:()I
            istore 2 /* length */
        start local 2 // int length
         4: .line 234
            iconst_0
            istore 3 /* i */
        start local 3 // int i
         5: goto 17
         6: .line 235
      StackMap locals: int int int
      StackMap stack:
            aload 0 /* input */
            iload 3 /* i */
            invokevirtual java.lang.String.charAt:(I)C
            istore 4 /* c */
        start local 4 // char c
         7: .line 236
            iload 4 /* c */
            bipush 46
            if_icmpeq 18
            iload 4 /* c */
            bipush 37
            if_icmpne 9
         8: .line 238
            goto 18
         9: .line 240
      StackMap locals: int
      StackMap stack:
            iload 4 /* c */
            bipush 48
            if_icmplt 10
            iload 4 /* c */
            bipush 57
            if_icmple 14
      StackMap locals:
      StackMap stack:
        10: iload 4 /* c */
            bipush 97
            if_icmplt 11
            iload 4 /* c */
            bipush 102
            if_icmple 14
        11: .line 241
      StackMap locals:
      StackMap stack:
            iload 4 /* c */
            bipush 65
            if_icmplt 12
            iload 4 /* c */
            bipush 70
            if_icmple 14
      StackMap locals:
      StackMap stack:
        12: iload 4 /* c */
            bipush 58
            if_icmpeq 14
        13: .line 242
            iconst_0
            ireturn
        14: .line 243
      StackMap locals:
      StackMap stack:
            iload 4 /* c */
            bipush 58
            if_icmpne 16
        15: .line 244
            iinc 1 /* colonsCounter */ 1
        end local 4 // char c
        16: .line 234
      StackMap locals:
      StackMap stack:
            iinc 3 /* i */ 1
      StackMap locals:
      StackMap stack:
        17: iload 3 /* i */
            iload 2 /* length */
            if_icmplt 6
        end local 3 // int i
        18: .line 247
      StackMap locals:
      StackMap stack:
            iload 1 /* colonsCounter */
            iconst_2
            if_icmpge 20
        19: .line 248
            iconst_0
            ireturn
        20: .line 250
      StackMap locals:
      StackMap stack:
            iconst_1
            ireturn
        end local 2 // int length
        end local 1 // int colonsCounter
        end local 0 // java.lang.String input
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   21     0          input  Ljava/lang/String;
            3   21     1  colonsCounter  I
            4   21     2         length  I
            5   18     3              i  I
            7   16     4              c  C
    MethodParameters:
       Name  Flags
      input  
}
SourceFile: "IPv6Utils.java"