public class org.springframework.security.crypto.scrypt.SCryptPasswordEncoder implements org.springframework.security.crypto.password.PasswordEncoder
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.springframework.security.crypto.scrypt.SCryptPasswordEncoder
  super_class: java.lang.Object
{
  private final org.apache.commons.logging.Log logger;
    descriptor: Lorg/apache/commons/logging/Log;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final int cpuCost;
    descriptor: I
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final int memoryCost;
    descriptor: I
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final int parallelization;
    descriptor: I
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final int keyLength;
    descriptor: I
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final org.springframework.security.crypto.keygen.BytesKeyGenerator saltGenerator;
    descriptor: Lorg/springframework/security/crypto/keygen/BytesKeyGenerator;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=1, args_size=1
        start local 0 // org.springframework.security.crypto.scrypt.SCryptPasswordEncoder this
         0: .line 74
            aload 0 /* this */
            sipush 16384
            bipush 8
            iconst_1
            bipush 32
            bipush 64
            invokespecial org.springframework.security.crypto.scrypt.SCryptPasswordEncoder.<init>:(IIIII)V
         1: .line 75
            return
        end local 0 // org.springframework.security.crypto.scrypt.SCryptPasswordEncoder this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/springframework/security/crypto/scrypt/SCryptPasswordEncoder;

  public void <init>(int, int, int, int, int);
    descriptor: (IIIII)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=7, args_size=6
        start local 0 // org.springframework.security.crypto.scrypt.SCryptPasswordEncoder this
        start local 1 // int cpuCost
        start local 2 // int memoryCost
        start local 3 // int parallelization
        start local 4 // int keyLength
        start local 5 // int saltLength
         0: .line 91
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 61
            aload 0 /* this */
            aload 0 /* this */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokestatic org.apache.commons.logging.LogFactory.getLog:(Ljava/lang/Class;)Lorg/apache/commons/logging/Log;
            putfield org.springframework.security.crypto.scrypt.SCryptPasswordEncoder.logger:Lorg/apache/commons/logging/Log;
         2: .line 92
            iload 1 /* cpuCost */
            iconst_1
            if_icmpgt 4
         3: .line 93
            new java.lang.IllegalArgumentException
            dup
            ldc "Cpu cost parameter must be > 1."
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 95
      StackMap locals: org.springframework.security.crypto.scrypt.SCryptPasswordEncoder int int int int int
      StackMap stack:
            iload 2 /* memoryCost */
            iconst_1
            if_icmpne 6
            iload 1 /* cpuCost */
            ldc 65536
            if_icmple 6
         5: .line 96
            new java.lang.IllegalArgumentException
            dup
            ldc "Cpu cost parameter must be > 1 and < 65536."
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         6: .line 98
      StackMap locals:
      StackMap stack:
            iload 2 /* memoryCost */
            iconst_1
            if_icmpge 8
         7: .line 99
            new java.lang.IllegalArgumentException
            dup
            ldc "Memory cost must be >= 1."
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         8: .line 101
      StackMap locals:
      StackMap stack:
            ldc 2147483647
            sipush 128
            iload 2 /* memoryCost */
            imul
            bipush 8
            imul
            idiv
            istore 6 /* maxParallel */
        start local 6 // int maxParallel
         9: .line 102
            iload 3 /* parallelization */
            iconst_1
            if_icmplt 10
            iload 3 /* parallelization */
            iload 6 /* maxParallel */
            if_icmple 13
        10: .line 103
      StackMap locals: int
      StackMap stack:
            new java.lang.IllegalArgumentException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Parallelisation parameter p must be >= 1 and <= "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 6 /* maxParallel */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
        11: .line 104
            ldc " (based on block size r of "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            iload 2 /* memoryCost */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc ")"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        12: .line 103
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        13: .line 106
      StackMap locals:
      StackMap stack:
            iload 4 /* keyLength */
            iconst_1
            if_icmplt 14
            iload 4 /* keyLength */
            ldc 2147483647
            if_icmple 15
        14: .line 107
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalArgumentException
            dup
            ldc "Key length must be >= 1 and <= 2147483647"
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        15: .line 109
      StackMap locals:
      StackMap stack:
            iload 5 /* saltLength */
            iconst_1
            if_icmplt 16
            iload 5 /* saltLength */
            ldc 2147483647
            if_icmple 17
        16: .line 110
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalArgumentException
            dup
            ldc "Salt length must be >= 1 and <= 2147483647"
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        17: .line 112
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 1 /* cpuCost */
            putfield org.springframework.security.crypto.scrypt.SCryptPasswordEncoder.cpuCost:I
        18: .line 113
            aload 0 /* this */
            iload 2 /* memoryCost */
            putfield org.springframework.security.crypto.scrypt.SCryptPasswordEncoder.memoryCost:I
        19: .line 114
            aload 0 /* this */
            iload 3 /* parallelization */
            putfield org.springframework.security.crypto.scrypt.SCryptPasswordEncoder.parallelization:I
        20: .line 115
            aload 0 /* this */
            iload 4 /* keyLength */
            putfield org.springframework.security.crypto.scrypt.SCryptPasswordEncoder.keyLength:I
        21: .line 116
            aload 0 /* this */
            iload 5 /* saltLength */
            invokestatic org.springframework.security.crypto.keygen.KeyGenerators.secureRandom:(I)Lorg/springframework/security/crypto/keygen/BytesKeyGenerator;
            putfield org.springframework.security.crypto.scrypt.SCryptPasswordEncoder.saltGenerator:Lorg/springframework/security/crypto/keygen/BytesKeyGenerator;
        22: .line 117
            return
        end local 6 // int maxParallel
        end local 5 // int saltLength
        end local 4 // int keyLength
        end local 3 // int parallelization
        end local 2 // int memoryCost
        end local 1 // int cpuCost
        end local 0 // org.springframework.security.crypto.scrypt.SCryptPasswordEncoder this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   23     0             this  Lorg/springframework/security/crypto/scrypt/SCryptPasswordEncoder;
            0   23     1          cpuCost  I
            0   23     2       memoryCost  I
            0   23     3  parallelization  I
            0   23     4        keyLength  I
            0   23     5       saltLength  I
            9   23     6      maxParallel  I
    MethodParameters:
                 Name  Flags
      cpuCost          
      memoryCost       
      parallelization  
      keyLength        
      saltLength       

  public java.lang.String encode(java.lang.CharSequence);
    descriptor: (Ljava/lang/CharSequence;)Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.springframework.security.crypto.scrypt.SCryptPasswordEncoder this
        start local 1 // java.lang.CharSequence rawPassword
         0: .line 121
            aload 0 /* this */
            aload 1 /* rawPassword */
            aload 0 /* this */
            getfield org.springframework.security.crypto.scrypt.SCryptPasswordEncoder.saltGenerator:Lorg/springframework/security/crypto/keygen/BytesKeyGenerator;
            invokeinterface org.springframework.security.crypto.keygen.BytesKeyGenerator.generateKey:()[B
            invokevirtual org.springframework.security.crypto.scrypt.SCryptPasswordEncoder.digest:(Ljava/lang/CharSequence;[B)Ljava/lang/String;
            areturn
        end local 1 // java.lang.CharSequence rawPassword
        end local 0 // org.springframework.security.crypto.scrypt.SCryptPasswordEncoder this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    1     0         this  Lorg/springframework/security/crypto/scrypt/SCryptPasswordEncoder;
            0    1     1  rawPassword  Ljava/lang/CharSequence;
    MethodParameters:
             Name  Flags
      rawPassword  

  public boolean matches(java.lang.CharSequence, java.lang.String);
    descriptor: (Ljava/lang/CharSequence;Ljava/lang/String;)Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // org.springframework.security.crypto.scrypt.SCryptPasswordEncoder this
        start local 1 // java.lang.CharSequence rawPassword
        start local 2 // java.lang.String encodedPassword
         0: .line 126
            aload 2 /* encodedPassword */
            ifnull 1
            aload 2 /* encodedPassword */
            invokevirtual java.lang.String.length:()I
            aload 0 /* this */
            getfield org.springframework.security.crypto.scrypt.SCryptPasswordEncoder.keyLength:I
            if_icmpge 3
         1: .line 127
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.springframework.security.crypto.scrypt.SCryptPasswordEncoder.logger:Lorg/apache/commons/logging/Log;
            ldc "Empty encoded password"
            invokeinterface org.apache.commons.logging.Log.warn:(Ljava/lang/Object;)V
         2: .line 128
            iconst_0
            ireturn
         3: .line 130
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* rawPassword */
            aload 2 /* encodedPassword */
            invokevirtual org.springframework.security.crypto.scrypt.SCryptPasswordEncoder.decodeAndCheckMatches:(Ljava/lang/CharSequence;Ljava/lang/String;)Z
            ireturn
        end local 2 // java.lang.String encodedPassword
        end local 1 // java.lang.CharSequence rawPassword
        end local 0 // org.springframework.security.crypto.scrypt.SCryptPasswordEncoder this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    4     0             this  Lorg/springframework/security/crypto/scrypt/SCryptPasswordEncoder;
            0    4     1      rawPassword  Ljava/lang/CharSequence;
            0    4     2  encodedPassword  Ljava/lang/String;
    MethodParameters:
                 Name  Flags
      rawPassword      
      encodedPassword  

  public boolean upgradeEncoding(java.lang.String);
    descriptor: (Ljava/lang/String;)Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=8, args_size=2
        start local 0 // org.springframework.security.crypto.scrypt.SCryptPasswordEncoder this
        start local 1 // java.lang.String encodedPassword
         0: .line 135
            aload 1 /* encodedPassword */
            ifnull 1
            aload 1 /* encodedPassword */
            invokevirtual java.lang.String.isEmpty:()Z
            ifeq 2
         1: .line 136
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
         2: .line 138
      StackMap locals:
      StackMap stack:
            aload 1 /* encodedPassword */
            ldc "\\$"
            invokevirtual java.lang.String.split:(Ljava/lang/String;)[Ljava/lang/String;
            astore 2 /* parts */
        start local 2 // java.lang.String[] parts
         3: .line 139
            aload 2 /* parts */
            arraylength
            iconst_4
            if_icmpeq 5
         4: .line 140
            new java.lang.IllegalArgumentException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Encoded password does not look like SCrypt: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* encodedPassword */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         5: .line 142
      StackMap locals: java.lang.String[]
      StackMap stack:
            aload 2 /* parts */
            iconst_1
            aaload
            bipush 16
            invokestatic java.lang.Long.parseLong:(Ljava/lang/String;I)J
            lstore 3 /* params */
        start local 3 // long params
         6: .line 143
            ldc 2.0
            lload 3 /* params */
            bipush 16
            lshr
            ldc 65535
            land
            l2d
            invokestatic java.lang.Math.pow:(DD)D
            d2i
            istore 5 /* cpuCost */
        start local 5 // int cpuCost
         7: .line 144
            lload 3 /* params */
            l2i
            bipush 8
            ishr
            sipush 255
            iand
            istore 6 /* memoryCost */
        start local 6 // int memoryCost
         8: .line 145
            lload 3 /* params */
            l2i
            sipush 255
            iand
            istore 7 /* parallelization */
        start local 7 // int parallelization
         9: .line 146
            iload 5 /* cpuCost */
            aload 0 /* this */
            getfield org.springframework.security.crypto.scrypt.SCryptPasswordEncoder.cpuCost:I
            if_icmplt 10
            iload 6 /* memoryCost */
            aload 0 /* this */
            getfield org.springframework.security.crypto.scrypt.SCryptPasswordEncoder.memoryCost:I
            if_icmplt 10
            iload 7 /* parallelization */
            aload 0 /* this */
            getfield org.springframework.security.crypto.scrypt.SCryptPasswordEncoder.parallelization:I
            if_icmplt 10
            iconst_0
            ireturn
      StackMap locals: org.springframework.security.crypto.scrypt.SCryptPasswordEncoder java.lang.String java.lang.String[] long int int int
      StackMap stack:
        10: iconst_1
            ireturn
        end local 7 // int parallelization
        end local 6 // int memoryCost
        end local 5 // int cpuCost
        end local 3 // long params
        end local 2 // java.lang.String[] parts
        end local 1 // java.lang.String encodedPassword
        end local 0 // org.springframework.security.crypto.scrypt.SCryptPasswordEncoder this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   11     0             this  Lorg/springframework/security/crypto/scrypt/SCryptPasswordEncoder;
            0   11     1  encodedPassword  Ljava/lang/String;
            3   11     2            parts  [Ljava/lang/String;
            6   11     3           params  J
            7   11     5          cpuCost  I
            8   11     6       memoryCost  I
            9   11     7  parallelization  I
    MethodParameters:
                 Name  Flags
      encodedPassword  

  private boolean decodeAndCheckMatches(java.lang.CharSequence, java.lang.String);
    descriptor: (Ljava/lang/CharSequence;Ljava/lang/String;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=12, args_size=3
        start local 0 // org.springframework.security.crypto.scrypt.SCryptPasswordEncoder this
        start local 1 // java.lang.CharSequence rawPassword
        start local 2 // java.lang.String encodedPassword
         0: .line 150
            aload 2 /* encodedPassword */
            ldc "\\$"
            invokevirtual java.lang.String.split:(Ljava/lang/String;)[Ljava/lang/String;
            astore 3 /* parts */
        start local 3 // java.lang.String[] parts
         1: .line 151
            aload 3 /* parts */
            arraylength
            iconst_4
            if_icmpeq 3
         2: .line 152
            iconst_0
            ireturn
         3: .line 154
      StackMap locals: java.lang.String[]
      StackMap stack:
            aload 3 /* parts */
            iconst_1
            aaload
            bipush 16
            invokestatic java.lang.Long.parseLong:(Ljava/lang/String;I)J
            lstore 4 /* params */
        start local 4 // long params
         4: .line 155
            aload 0 /* this */
            aload 3 /* parts */
            iconst_2
            aaload
            invokevirtual org.springframework.security.crypto.scrypt.SCryptPasswordEncoder.decodePart:(Ljava/lang/String;)[B
            astore 6 /* salt */
        start local 6 // byte[] salt
         5: .line 156
            aload 0 /* this */
            aload 3 /* parts */
            iconst_3
            aaload
            invokevirtual org.springframework.security.crypto.scrypt.SCryptPasswordEncoder.decodePart:(Ljava/lang/String;)[B
            astore 7 /* derived */
        start local 7 // byte[] derived
         6: .line 157
            ldc 2.0
            lload 4 /* params */
            bipush 16
            lshr
            ldc 65535
            land
            l2d
            invokestatic java.lang.Math.pow:(DD)D
            d2i
            istore 8 /* cpuCost */
        start local 8 // int cpuCost
         7: .line 158
            lload 4 /* params */
            l2i
            bipush 8
            ishr
            sipush 255
            iand
            istore 9 /* memoryCost */
        start local 9 // int memoryCost
         8: .line 159
            lload 4 /* params */
            l2i
            sipush 255
            iand
            istore 10 /* parallelization */
        start local 10 // int parallelization
         9: .line 160
            aload 1 /* rawPassword */
            invokestatic org.springframework.security.crypto.codec.Utf8.encode:(Ljava/lang/CharSequence;)[B
            aload 6 /* salt */
            iload 8 /* cpuCost */
            iload 9 /* memoryCost */
            iload 10 /* parallelization */
        10: .line 161
            aload 0 /* this */
            getfield org.springframework.security.crypto.scrypt.SCryptPasswordEncoder.keyLength:I
        11: .line 160
            invokestatic org.bouncycastle.crypto.generators.SCrypt.generate:([B[BIIII)[B
            astore 11 /* generated */
        start local 11 // byte[] generated
        12: .line 162
            aload 7 /* derived */
            aload 11 /* generated */
            invokestatic java.security.MessageDigest.isEqual:([B[B)Z
            ireturn
        end local 11 // byte[] generated
        end local 10 // int parallelization
        end local 9 // int memoryCost
        end local 8 // int cpuCost
        end local 7 // byte[] derived
        end local 6 // byte[] salt
        end local 4 // long params
        end local 3 // java.lang.String[] parts
        end local 2 // java.lang.String encodedPassword
        end local 1 // java.lang.CharSequence rawPassword
        end local 0 // org.springframework.security.crypto.scrypt.SCryptPasswordEncoder this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   13     0             this  Lorg/springframework/security/crypto/scrypt/SCryptPasswordEncoder;
            0   13     1      rawPassword  Ljava/lang/CharSequence;
            0   13     2  encodedPassword  Ljava/lang/String;
            1   13     3            parts  [Ljava/lang/String;
            4   13     4           params  J
            5   13     6             salt  [B
            6   13     7          derived  [B
            7   13     8          cpuCost  I
            8   13     9       memoryCost  I
            9   13    10  parallelization  I
           12   13    11        generated  [B
    MethodParameters:
                 Name  Flags
      rawPassword      
      encodedPassword  

  private java.lang.String digest(java.lang.CharSequence, byte[]);
    descriptor: (Ljava/lang/CharSequence;[B)Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=6, args_size=3
        start local 0 // org.springframework.security.crypto.scrypt.SCryptPasswordEncoder this
        start local 1 // java.lang.CharSequence rawPassword
        start local 2 // byte[] salt
         0: .line 166
            aload 1 /* rawPassword */
            invokestatic org.springframework.security.crypto.codec.Utf8.encode:(Ljava/lang/CharSequence;)[B
            aload 2 /* salt */
            aload 0 /* this */
            getfield org.springframework.security.crypto.scrypt.SCryptPasswordEncoder.cpuCost:I
            aload 0 /* this */
            getfield org.springframework.security.crypto.scrypt.SCryptPasswordEncoder.memoryCost:I
         1: .line 167
            aload 0 /* this */
            getfield org.springframework.security.crypto.scrypt.SCryptPasswordEncoder.parallelization:I
            aload 0 /* this */
            getfield org.springframework.security.crypto.scrypt.SCryptPasswordEncoder.keyLength:I
         2: .line 166
            invokestatic org.bouncycastle.crypto.generators.SCrypt.generate:([B[BIIII)[B
            astore 3 /* derived */
        start local 3 // byte[] derived
         3: .line 169
            aload 0 /* this */
            getfield org.springframework.security.crypto.scrypt.SCryptPasswordEncoder.cpuCost:I
            i2d
            invokestatic java.lang.Math.log:(D)D
            ldc 2.0
            invokestatic java.lang.Math.log:(D)D
            ddiv
            d2i
            bipush 16
            ishl
            aload 0 /* this */
            getfield org.springframework.security.crypto.scrypt.SCryptPasswordEncoder.memoryCost:I
            bipush 8
            ishl
            ior
            aload 0 /* this */
            getfield org.springframework.security.crypto.scrypt.SCryptPasswordEncoder.parallelization:I
            ior
            i2l
         4: .line 170
            bipush 16
         5: .line 168
            invokestatic java.lang.Long.toString:(JI)Ljava/lang/String;
            astore 4 /* params */
        start local 4 // java.lang.String params
         6: .line 171
            new java.lang.StringBuilder
            dup
            aload 2 /* salt */
            arraylength
            aload 3 /* derived */
            arraylength
            iadd
            iconst_2
            imul
            invokespecial java.lang.StringBuilder.<init>:(I)V
            astore 5 /* sb */
        start local 5 // java.lang.StringBuilder sb
         7: .line 172
            aload 5 /* sb */
            ldc "$"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 4 /* params */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            bipush 36
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            pop
         8: .line 173
            aload 5 /* sb */
            aload 0 /* this */
            aload 2 /* salt */
            invokevirtual org.springframework.security.crypto.scrypt.SCryptPasswordEncoder.encodePart:([B)Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            bipush 36
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            pop
         9: .line 174
            aload 5 /* sb */
            aload 0 /* this */
            aload 3 /* derived */
            invokevirtual org.springframework.security.crypto.scrypt.SCryptPasswordEncoder.encodePart:([B)Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        10: .line 175
            aload 5 /* sb */
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            areturn
        end local 5 // java.lang.StringBuilder sb
        end local 4 // java.lang.String params
        end local 3 // byte[] derived
        end local 2 // byte[] salt
        end local 1 // java.lang.CharSequence rawPassword
        end local 0 // org.springframework.security.crypto.scrypt.SCryptPasswordEncoder this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   11     0         this  Lorg/springframework/security/crypto/scrypt/SCryptPasswordEncoder;
            0   11     1  rawPassword  Ljava/lang/CharSequence;
            0   11     2         salt  [B
            3   11     3      derived  [B
            6   11     4       params  Ljava/lang/String;
            7   11     5           sb  Ljava/lang/StringBuilder;
    MethodParameters:
             Name  Flags
      rawPassword  
      salt         

  private byte[] decodePart(java.lang.String);
    descriptor: (Ljava/lang/String;)[B
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.springframework.security.crypto.scrypt.SCryptPasswordEncoder this
        start local 1 // java.lang.String part
         0: .line 179
            invokestatic java.util.Base64.getDecoder:()Ljava/util/Base64$Decoder;
            aload 1 /* part */
            invokestatic org.springframework.security.crypto.codec.Utf8.encode:(Ljava/lang/CharSequence;)[B
            invokevirtual java.util.Base64$Decoder.decode:([B)[B
            areturn
        end local 1 // java.lang.String part
        end local 0 // org.springframework.security.crypto.scrypt.SCryptPasswordEncoder this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/springframework/security/crypto/scrypt/SCryptPasswordEncoder;
            0    1     1  part  Ljava/lang/String;
    MethodParameters:
      Name  Flags
      part  

  private java.lang.String encodePart(byte[]);
    descriptor: ([B)Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.springframework.security.crypto.scrypt.SCryptPasswordEncoder this
        start local 1 // byte[] part
         0: .line 183
            invokestatic java.util.Base64.getEncoder:()Ljava/util/Base64$Encoder;
            aload 1 /* part */
            invokevirtual java.util.Base64$Encoder.encode:([B)[B
            invokestatic org.springframework.security.crypto.codec.Utf8.decode:([B)Ljava/lang/String;
            areturn
        end local 1 // byte[] part
        end local 0 // org.springframework.security.crypto.scrypt.SCryptPasswordEncoder this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/springframework/security/crypto/scrypt/SCryptPasswordEncoder;
            0    1     1  part  [B
    MethodParameters:
      Name  Flags
      part  
}
SourceFile: "SCryptPasswordEncoder.java"
InnerClasses:
  public Decoder = java.util.Base64$Decoder of java.util.Base64
  public Encoder = java.util.Base64$Encoder of java.util.Base64