public class org.apache.catalina.realm.DataSourceRealm extends org.apache.catalina.realm.RealmBase
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.apache.catalina.realm.DataSourceRealm
  super_class: org.apache.catalina.realm.RealmBase
{
  private java.lang.String preparedRoles;
    descriptor: Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE

  private java.lang.String preparedCredentials;
    descriptor: Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE

  protected java.lang.String dataSourceName;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  protected boolean localDataSource;
    descriptor: Z
    flags: (0x0004) ACC_PROTECTED

  protected java.lang.String roleNameCol;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  protected java.lang.String userCredCol;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  protected java.lang.String userNameCol;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  protected java.lang.String userRoleTable;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  protected java.lang.String userTable;
    descriptor: Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED

  private volatile boolean connectionSuccess;
    descriptor: Z
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.DataSourceRealm this
         0: .line 44
            aload 0 /* this */
            invokespecial org.apache.catalina.realm.RealmBase.<init>:()V
         1: .line 53
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.DataSourceRealm.preparedRoles:Ljava/lang/String;
         2: .line 59
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.DataSourceRealm.preparedCredentials:Ljava/lang/String;
         3: .line 65
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.DataSourceRealm.dataSourceName:Ljava/lang/String;
         4: .line 71
            aload 0 /* this */
            iconst_0
            putfield org.apache.catalina.realm.DataSourceRealm.localDataSource:Z
         5: .line 77
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.DataSourceRealm.roleNameCol:Ljava/lang/String;
         6: .line 83
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.DataSourceRealm.userCredCol:Ljava/lang/String;
         7: .line 89
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.DataSourceRealm.userNameCol:Ljava/lang/String;
         8: .line 95
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.DataSourceRealm.userRoleTable:Ljava/lang/String;
         9: .line 101
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.realm.DataSourceRealm.userTable:Ljava/lang/String;
        10: .line 107
            aload 0 /* this */
            iconst_1
            putfield org.apache.catalina.realm.DataSourceRealm.connectionSuccess:Z
        11: .line 44
            return
        end local 0 // org.apache.catalina.realm.DataSourceRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   12     0  this  Lorg/apache/catalina/realm/DataSourceRealm;

  public java.lang.String getDataSourceName();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.DataSourceRealm this
         0: .line 117
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.dataSourceName:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.DataSourceRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/DataSourceRealm;

  public void setDataSourceName(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.DataSourceRealm this
        start local 1 // java.lang.String dataSourceName
         0: .line 126
            aload 0 /* this */
            aload 1 /* dataSourceName */
            putfield org.apache.catalina.realm.DataSourceRealm.dataSourceName:Ljava/lang/String;
         1: .line 127
            return
        end local 1 // java.lang.String dataSourceName
        end local 0 // org.apache.catalina.realm.DataSourceRealm this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    2     0            this  Lorg/apache/catalina/realm/DataSourceRealm;
            0    2     1  dataSourceName  Ljava/lang/String;
    MethodParameters:
                Name  Flags
      dataSourceName  

  public boolean getLocalDataSource();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.DataSourceRealm this
         0: .line 133
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.localDataSource:Z
            ireturn
        end local 0 // org.apache.catalina.realm.DataSourceRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/DataSourceRealm;

  public void setLocalDataSource(boolean);
    descriptor: (Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.DataSourceRealm this
        start local 1 // boolean localDataSource
         0: .line 143
            aload 0 /* this */
            iload 1 /* localDataSource */
            putfield org.apache.catalina.realm.DataSourceRealm.localDataSource:Z
         1: .line 144
            return
        end local 1 // boolean localDataSource
        end local 0 // org.apache.catalina.realm.DataSourceRealm this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    2     0             this  Lorg/apache/catalina/realm/DataSourceRealm;
            0    2     1  localDataSource  Z
    MethodParameters:
                 Name  Flags
      localDataSource  

  public java.lang.String getRoleNameCol();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.DataSourceRealm this
         0: .line 150
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.roleNameCol:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.DataSourceRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/DataSourceRealm;

  public void setRoleNameCol(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.DataSourceRealm this
        start local 1 // java.lang.String roleNameCol
         0: .line 159
            aload 0 /* this */
            aload 1 /* roleNameCol */
            putfield org.apache.catalina.realm.DataSourceRealm.roleNameCol:Ljava/lang/String;
         1: .line 160
            return
        end local 1 // java.lang.String roleNameCol
        end local 0 // org.apache.catalina.realm.DataSourceRealm this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    2     0         this  Lorg/apache/catalina/realm/DataSourceRealm;
            0    2     1  roleNameCol  Ljava/lang/String;
    MethodParameters:
             Name  Flags
      roleNameCol  

  public java.lang.String getUserCredCol();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.DataSourceRealm this
         0: .line 166
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.userCredCol:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.DataSourceRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/DataSourceRealm;

  public void setUserCredCol(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.DataSourceRealm this
        start local 1 // java.lang.String userCredCol
         0: .line 175
            aload 0 /* this */
            aload 1 /* userCredCol */
            putfield org.apache.catalina.realm.DataSourceRealm.userCredCol:Ljava/lang/String;
         1: .line 176
            return
        end local 1 // java.lang.String userCredCol
        end local 0 // org.apache.catalina.realm.DataSourceRealm this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    2     0         this  Lorg/apache/catalina/realm/DataSourceRealm;
            0    2     1  userCredCol  Ljava/lang/String;
    MethodParameters:
             Name  Flags
      userCredCol  

  public java.lang.String getUserNameCol();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.DataSourceRealm this
         0: .line 182
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.userNameCol:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.DataSourceRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/DataSourceRealm;

  public void setUserNameCol(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.DataSourceRealm this
        start local 1 // java.lang.String userNameCol
         0: .line 191
            aload 0 /* this */
            aload 1 /* userNameCol */
            putfield org.apache.catalina.realm.DataSourceRealm.userNameCol:Ljava/lang/String;
         1: .line 192
            return
        end local 1 // java.lang.String userNameCol
        end local 0 // org.apache.catalina.realm.DataSourceRealm this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    2     0         this  Lorg/apache/catalina/realm/DataSourceRealm;
            0    2     1  userNameCol  Ljava/lang/String;
    MethodParameters:
             Name  Flags
      userNameCol  

  public java.lang.String getUserRoleTable();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.DataSourceRealm this
         0: .line 198
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.userRoleTable:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.DataSourceRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/DataSourceRealm;

  public void setUserRoleTable(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.DataSourceRealm this
        start local 1 // java.lang.String userRoleTable
         0: .line 207
            aload 0 /* this */
            aload 1 /* userRoleTable */
            putfield org.apache.catalina.realm.DataSourceRealm.userRoleTable:Ljava/lang/String;
         1: .line 208
            return
        end local 1 // java.lang.String userRoleTable
        end local 0 // org.apache.catalina.realm.DataSourceRealm this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    2     0           this  Lorg/apache/catalina/realm/DataSourceRealm;
            0    2     1  userRoleTable  Ljava/lang/String;
    MethodParameters:
               Name  Flags
      userRoleTable  

  public java.lang.String getUserTable();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.DataSourceRealm this
         0: .line 214
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.userTable:Ljava/lang/String;
            areturn
        end local 0 // org.apache.catalina.realm.DataSourceRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/DataSourceRealm;

  public void setUserTable(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.realm.DataSourceRealm this
        start local 1 // java.lang.String userTable
         0: .line 223
            aload 0 /* this */
            aload 1 /* userTable */
            putfield org.apache.catalina.realm.DataSourceRealm.userTable:Ljava/lang/String;
         1: .line 224
            return
        end local 1 // java.lang.String userTable
        end local 0 // org.apache.catalina.realm.DataSourceRealm this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    2     0       this  Lorg/apache/catalina/realm/DataSourceRealm;
            0    2     1  userTable  Ljava/lang/String;
    MethodParameters:
           Name  Flags
      userTable  

  public java.security.Principal authenticate(java.lang.String, java.lang.String);
    descriptor: (Ljava/lang/String;Ljava/lang/String;)Ljava/security/Principal;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=6, args_size=3
        start local 0 // org.apache.catalina.realm.DataSourceRealm this
        start local 1 // java.lang.String username
        start local 2 // java.lang.String credentials
         0: .line 248
            aload 1 /* username */
            ifnull 1
            aload 2 /* credentials */
            ifnonnull 2
         1: .line 249
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
         2: .line 252
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 3 /* dbConnection */
        start local 3 // java.sql.Connection dbConnection
         3: .line 255
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.DataSourceRealm.open:()Ljava/sql/Connection;
            astore 3 /* dbConnection */
         4: .line 256
            aload 3 /* dbConnection */
            ifnonnull 6
         5: .line 258
            aconst_null
            areturn
         6: .line 264
      StackMap locals: java.sql.Connection
      StackMap stack:
            aload 0 /* this */
            aload 3 /* dbConnection */
            aload 1 /* username */
            aload 2 /* credentials */
            invokevirtual org.apache.catalina.realm.DataSourceRealm.authenticate:(Ljava/sql/Connection;Ljava/lang/String;Ljava/lang/String;)Ljava/security/Principal;
            astore 5
         7: .line 268
            aload 0 /* this */
            aload 3 /* dbConnection */
            invokevirtual org.apache.catalina.realm.DataSourceRealm.close:(Ljava/sql/Connection;)V
         8: .line 264
            aload 5
            areturn
         9: .line 267
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 4
        10: .line 268
            aload 0 /* this */
            aload 3 /* dbConnection */
            invokevirtual org.apache.catalina.realm.DataSourceRealm.close:(Ljava/sql/Connection;)V
        11: .line 269
            aload 4
            athrow
        end local 3 // java.sql.Connection dbConnection
        end local 2 // java.lang.String credentials
        end local 1 // java.lang.String username
        end local 0 // org.apache.catalina.realm.DataSourceRealm this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   12     0          this  Lorg/apache/catalina/realm/DataSourceRealm;
            0   12     1      username  Ljava/lang/String;
            0   12     2   credentials  Ljava/lang/String;
            3   12     3  dbConnection  Ljava/sql/Connection;
      Exception table:
        from    to  target  type
           6     7       9  any
    MethodParameters:
             Name  Flags
      username     
      credentials  

  public boolean isAvailable();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.DataSourceRealm this
         0: .line 275
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.connectionSuccess:Z
            ireturn
        end local 0 // org.apache.catalina.realm.DataSourceRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/realm/DataSourceRealm;

  protected java.security.Principal authenticate(java.sql.Connection, java.lang.String, java.lang.String);
    descriptor: (Ljava/sql/Connection;Ljava/lang/String;Ljava/lang/String;)Ljava/security/Principal;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=7, locals=7, args_size=4
        start local 0 // org.apache.catalina.realm.DataSourceRealm this
        start local 1 // java.sql.Connection dbConnection
        start local 2 // java.lang.String username
        start local 3 // java.lang.String credentials
         0: .line 299
            aload 2 /* username */
            ifnull 1
            aload 3 /* credentials */
            ifnonnull 6
         1: .line 300
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isTraceEnabled:()Z
            ifeq 5
         2: .line 301
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.containerLog:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.DataSourceRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "dataSourceRealm.authenticateFailure"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
         3: .line 302
            aload 2 /* username */
            aastore
         4: .line 301
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.trace:(Ljava/lang/Object;)V
         5: .line 303
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
         6: .line 307
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* dbConnection */
            aload 2 /* username */
            invokevirtual org.apache.catalina.realm.DataSourceRealm.getPassword:(Ljava/sql/Connection;Ljava/lang/String;)Ljava/lang/String;
            astore 4 /* dbCredentials */
        start local 4 // java.lang.String dbCredentials
         7: .line 309
            aload 4 /* dbCredentials */
            ifnonnull 14
         8: .line 312
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.DataSourceRealm.getCredentialHandler:()Lorg/apache/catalina/CredentialHandler;
            aload 3 /* credentials */
            invokeinterface org.apache.catalina.CredentialHandler.mutate:(Ljava/lang/String;)Ljava/lang/String;
            pop
         9: .line 314
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isTraceEnabled:()Z
            ifeq 13
        10: .line 315
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.containerLog:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.DataSourceRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "dataSourceRealm.authenticateFailure"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
        11: .line 316
            aload 2 /* username */
            aastore
        12: .line 315
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.trace:(Ljava/lang/Object;)V
        13: .line 317
      StackMap locals: java.lang.String
      StackMap stack:
            aconst_null
            areturn
        14: .line 321
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.DataSourceRealm.getCredentialHandler:()Lorg/apache/catalina/CredentialHandler;
            aload 3 /* credentials */
            aload 4 /* dbCredentials */
            invokeinterface org.apache.catalina.CredentialHandler.matches:(Ljava/lang/String;Ljava/lang/String;)Z
            istore 5 /* validated */
        start local 5 // boolean validated
        15: .line 323
            iload 5 /* validated */
            ifeq 21
        16: .line 324
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isTraceEnabled:()Z
            ifeq 26
        17: .line 325
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.containerLog:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.DataSourceRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "dataSourceRealm.authenticateSuccess"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
        18: .line 326
            aload 2 /* username */
            aastore
        19: .line 325
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.trace:(Ljava/lang/Object;)V
        20: .line 327
            goto 26
        21: .line 328
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.containerLog:Lorg/apache/juli/logging/Log;
            invokeinterface org.apache.juli.logging.Log.isTraceEnabled:()Z
            ifeq 25
        22: .line 329
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.containerLog:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.DataSourceRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "dataSourceRealm.authenticateFailure"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
        23: .line 330
            aload 2 /* username */
            aastore
        24: .line 329
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.trace:(Ljava/lang/Object;)V
        25: .line 331
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
        26: .line 334
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* dbConnection */
            aload 2 /* username */
            invokevirtual org.apache.catalina.realm.DataSourceRealm.getRoles:(Ljava/sql/Connection;Ljava/lang/String;)Ljava/util/ArrayList;
            astore 6 /* list */
        start local 6 // java.util.ArrayList list
        27: .line 337
            new org.apache.catalina.realm.GenericPrincipal
            dup
            aload 2 /* username */
            aload 6 /* list */
            invokespecial org.apache.catalina.realm.GenericPrincipal.<init>:(Ljava/lang/String;Ljava/util/List;)V
            areturn
        end local 6 // java.util.ArrayList list
        end local 5 // boolean validated
        end local 4 // java.lang.String dbCredentials
        end local 3 // java.lang.String credentials
        end local 2 // java.lang.String username
        end local 1 // java.sql.Connection dbConnection
        end local 0 // org.apache.catalina.realm.DataSourceRealm this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   28     0           this  Lorg/apache/catalina/realm/DataSourceRealm;
            0   28     1   dbConnection  Ljava/sql/Connection;
            0   28     2       username  Ljava/lang/String;
            0   28     3    credentials  Ljava/lang/String;
            7   28     4  dbCredentials  Ljava/lang/String;
           15   28     5      validated  Z
           27   28     6           list  Ljava/util/ArrayList<Ljava/lang/String;>;
    MethodParameters:
              Name  Flags
      dbConnection  
      username      
      credentials   

  protected void close(java.sql.Connection);
    descriptor: (Ljava/sql/Connection;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // org.apache.catalina.realm.DataSourceRealm this
        start local 1 // java.sql.Connection dbConnection
         0: .line 349
            aload 1 /* dbConnection */
            ifnonnull 2
         1: .line 350
            return
         2: .line 354
      StackMap locals:
      StackMap stack:
            aload 1 /* dbConnection */
            invokeinterface java.sql.Connection.getAutoCommit:()Z
            ifne 7
         3: .line 355
            aload 1 /* dbConnection */
            invokeinterface java.sql.Connection.commit:()V
         4: .line 357
            goto 7
      StackMap locals:
      StackMap stack: java.sql.SQLException
         5: astore 2 /* e */
        start local 2 // java.sql.SQLException e
         6: .line 358
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.containerLog:Lorg/apache/juli/logging/Log;
            ldc "Exception committing connection before closing:"
            aload 2 /* e */
            invokeinterface org.apache.juli.logging.Log.error:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        end local 2 // java.sql.SQLException e
         7: .line 363
      StackMap locals:
      StackMap stack:
            aload 1 /* dbConnection */
            invokeinterface java.sql.Connection.close:()V
         8: .line 364
            goto 11
      StackMap locals:
      StackMap stack: java.sql.SQLException
         9: astore 2 /* e */
        start local 2 // java.sql.SQLException e
        10: .line 365
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.containerLog:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.DataSourceRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "dataSourceRealm.close"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            aload 2 /* e */
            invokeinterface org.apache.juli.logging.Log.error:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        end local 2 // java.sql.SQLException e
        11: .line 368
      StackMap locals:
      StackMap stack:
            return
        end local 1 // java.sql.Connection dbConnection
        end local 0 // org.apache.catalina.realm.DataSourceRealm this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   12     0          this  Lorg/apache/catalina/realm/DataSourceRealm;
            0   12     1  dbConnection  Ljava/sql/Connection;
            6    7     2             e  Ljava/sql/SQLException;
           10   11     2             e  Ljava/sql/SQLException;
      Exception table:
        from    to  target  type
           2     4       5  Class java.sql.SQLException
           7     8       9  Class java.sql.SQLException
    MethodParameters:
              Name  Flags
      dbConnection  

  protected java.sql.Connection open();
    descriptor: ()Ljava/sql/Connection;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=4, args_size=1
        start local 0 // org.apache.catalina.realm.DataSourceRealm this
         0: .line 378
            aconst_null
            astore 1 /* context */
        start local 1 // javax.naming.Context context
         1: .line 379
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.localDataSource:Z
            ifeq 5
         2: .line 380
            invokestatic org.apache.naming.ContextBindings.getClassLoader:()Ljavax/naming/Context;
            astore 1 /* context */
         3: .line 381
            aload 1 /* context */
            ldc "comp/env"
            invokeinterface javax.naming.Context.lookup:(Ljava/lang/String;)Ljava/lang/Object;
            checkcast javax.naming.Context
            astore 1 /* context */
         4: .line 382
            goto 6
         5: .line 383
      StackMap locals: javax.naming.Context
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.DataSourceRealm.getServer:()Lorg/apache/catalina/Server;
            invokeinterface org.apache.catalina.Server.getGlobalNamingContext:()Ljavax/naming/Context;
            astore 1 /* context */
         6: .line 385
      StackMap locals:
      StackMap stack:
            aload 1 /* context */
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.dataSourceName:Ljava/lang/String;
            invokeinterface javax.naming.Context.lookup:(Ljava/lang/String;)Ljava/lang/Object;
            checkcast javax.sql.DataSource
            astore 2 /* dataSource */
        start local 2 // javax.sql.DataSource dataSource
         7: .line 386
            aload 2 /* dataSource */
            invokeinterface javax.sql.DataSource.getConnection:()Ljava/sql/Connection;
            astore 3 /* connection */
        start local 3 // java.sql.Connection connection
         8: .line 387
            aload 0 /* this */
            iconst_1
            putfield org.apache.catalina.realm.DataSourceRealm.connectionSuccess:Z
         9: .line 388
            aload 3 /* connection */
        10: areturn
        end local 3 // java.sql.Connection connection
        end local 2 // javax.sql.DataSource dataSource
        end local 1 // javax.naming.Context context
        11: .line 389
      StackMap locals: org.apache.catalina.realm.DataSourceRealm
      StackMap stack: java.lang.Exception
            astore 1 /* e */
        start local 1 // java.lang.Exception e
        12: .line 390
            aload 0 /* this */
            iconst_0
            putfield org.apache.catalina.realm.DataSourceRealm.connectionSuccess:Z
        13: .line 392
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.containerLog:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.DataSourceRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "dataSourceRealm.exception"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            aload 1 /* e */
            invokeinterface org.apache.juli.logging.Log.error:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        end local 1 // java.lang.Exception e
        14: .line 394
            aconst_null
            areturn
        end local 0 // org.apache.catalina.realm.DataSourceRealm this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   15     0        this  Lorg/apache/catalina/realm/DataSourceRealm;
            1   11     1     context  Ljavax/naming/Context;
            7   11     2  dataSource  Ljavax/sql/DataSource;
            8   11     3  connection  Ljava/sql/Connection;
           12   14     1           e  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
           0    10      11  Class java.lang.Exception

  protected java.lang.String getPassword(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=5, args_size=2
        start local 0 // org.apache.catalina.realm.DataSourceRealm this
        start local 1 // java.lang.String username
         0: .line 403
            aconst_null
            astore 2 /* dbConnection */
        start local 2 // java.sql.Connection dbConnection
         1: .line 406
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.DataSourceRealm.open:()Ljava/sql/Connection;
            astore 2 /* dbConnection */
         2: .line 407
            aload 2 /* dbConnection */
            ifnonnull 4
         3: .line 408
            aconst_null
            areturn
         4: .line 412
      StackMap locals: java.sql.Connection
      StackMap stack:
            aload 0 /* this */
            aload 2 /* dbConnection */
            aload 1 /* username */
            invokevirtual org.apache.catalina.realm.DataSourceRealm.getPassword:(Ljava/sql/Connection;Ljava/lang/String;)Ljava/lang/String;
            astore 4
         5: .line 414
            aload 0 /* this */
            aload 2 /* dbConnection */
            invokevirtual org.apache.catalina.realm.DataSourceRealm.close:(Ljava/sql/Connection;)V
         6: .line 412
            aload 4
            areturn
         7: .line 413
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 3
         8: .line 414
            aload 0 /* this */
            aload 2 /* dbConnection */
            invokevirtual org.apache.catalina.realm.DataSourceRealm.close:(Ljava/sql/Connection;)V
         9: .line 415
            aload 3
            athrow
        end local 2 // java.sql.Connection dbConnection
        end local 1 // java.lang.String username
        end local 0 // org.apache.catalina.realm.DataSourceRealm this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   10     0          this  Lorg/apache/catalina/realm/DataSourceRealm;
            0   10     1      username  Ljava/lang/String;
            1   10     2  dbConnection  Ljava/sql/Connection;
      Exception table:
        from    to  target  type
           4     5       7  any
    MethodParameters:
          Name  Flags
      username  

  protected java.lang.String getPassword(java.sql.Connection, java.lang.String);
    descriptor: (Ljava/sql/Connection;Ljava/lang/String;)Ljava/lang/String;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=7, locals=10, args_size=3
        start local 0 // org.apache.catalina.realm.DataSourceRealm this
        start local 1 // java.sql.Connection dbConnection
        start local 2 // java.lang.String username
         0: .line 429
            aconst_null
            astore 3 /* dbCredentials */
        start local 3 // java.lang.String dbCredentials
         1: .line 431
            aconst_null
            astore 4
            aconst_null
            astore 5
         2: aload 1 /* dbConnection */
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.preparedCredentials:Ljava/lang/String;
            invokeinterface java.sql.Connection.prepareStatement:(Ljava/lang/String;)Ljava/sql/PreparedStatement;
            astore 6 /* stmt */
        start local 6 // java.sql.PreparedStatement stmt
         3: .line 432
            aload 6 /* stmt */
            iconst_1
            aload 2 /* username */
            invokeinterface java.sql.PreparedStatement.setString:(ILjava/lang/String;)V
         4: .line 434
            aconst_null
            astore 7
            aconst_null
            astore 8
         5: aload 6 /* stmt */
            invokeinterface java.sql.PreparedStatement.executeQuery:()Ljava/sql/ResultSet;
            astore 9 /* rs */
        start local 9 // java.sql.ResultSet rs
         6: .line 435
            aload 9 /* rs */
            invokeinterface java.sql.ResultSet.next:()Z
            ifeq 8
         7: .line 436
            aload 9 /* rs */
            iconst_1
            invokeinterface java.sql.ResultSet.getString:(I)Ljava/lang/String;
            astore 3 /* dbCredentials */
         8: .line 439
      StackMap locals: org.apache.catalina.realm.DataSourceRealm java.sql.Connection java.lang.String java.lang.String java.lang.Throwable java.lang.Throwable java.sql.PreparedStatement java.lang.Throwable java.lang.Throwable java.sql.ResultSet
      StackMap stack:
            aload 3 /* dbCredentials */
            ifnull 9
            aload 3 /* dbCredentials */
            invokevirtual java.lang.String.trim:()Ljava/lang/String;
            goto 10
      StackMap locals:
      StackMap stack:
         9: aconst_null
        10: .line 440
      StackMap locals:
      StackMap stack: java.lang.String
            aload 9 /* rs */
            ifnull 11
            aload 9 /* rs */
            invokeinterface java.sql.ResultSet.close:()V
        11: .line 441
      StackMap locals:
      StackMap stack: java.lang.String
            aload 6 /* stmt */
            ifnull 12
            aload 6 /* stmt */
            invokeinterface java.sql.PreparedStatement.close:()V
        12: .line 439
      StackMap locals:
      StackMap stack: java.lang.String
            areturn
      StackMap locals:
      StackMap stack: java.lang.Throwable
        13: astore 7
        14: .line 440
            aload 9 /* rs */
            ifnull 15
            aload 9 /* rs */
            invokeinterface java.sql.ResultSet.close:()V
        end local 9 // java.sql.ResultSet rs
      StackMap locals:
      StackMap stack:
        15: aload 7
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        16: astore 8
            aload 7
            ifnonnull 17
            aload 8
            astore 7
            goto 18
      StackMap locals:
      StackMap stack:
        17: aload 7
            aload 8
            if_acmpeq 18
            aload 7
            aload 8
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        18: aload 7
            athrow
      StackMap locals: org.apache.catalina.realm.DataSourceRealm java.sql.Connection java.lang.String java.lang.String java.lang.Throwable java.lang.Throwable java.sql.PreparedStatement
      StackMap stack: java.lang.Throwable
        19: astore 4
        20: .line 441
            aload 6 /* stmt */
            ifnull 21
            aload 6 /* stmt */
            invokeinterface java.sql.PreparedStatement.close:()V
        end local 6 // java.sql.PreparedStatement stmt
      StackMap locals:
      StackMap stack:
        21: aload 4
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        22: astore 5
            aload 4
            ifnonnull 23
            aload 5
            astore 4
            goto 24
      StackMap locals:
      StackMap stack:
        23: aload 4
            aload 5
            if_acmpeq 24
            aload 4
            aload 5
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        24: aload 4
            athrow
      StackMap locals: org.apache.catalina.realm.DataSourceRealm java.sql.Connection java.lang.String java.lang.String
      StackMap stack: java.sql.SQLException
        25: astore 4 /* e */
        start local 4 // java.sql.SQLException e
        26: .line 442
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.containerLog:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.DataSourceRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "dataSourceRealm.getPassword.exception"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 2 /* username */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            aload 4 /* e */
            invokeinterface org.apache.juli.logging.Log.error:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        end local 4 // java.sql.SQLException e
        27: .line 445
            aconst_null
            areturn
        end local 3 // java.lang.String dbCredentials
        end local 2 // java.lang.String username
        end local 1 // java.sql.Connection dbConnection
        end local 0 // org.apache.catalina.realm.DataSourceRealm this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   28     0           this  Lorg/apache/catalina/realm/DataSourceRealm;
            0   28     1   dbConnection  Ljava/sql/Connection;
            0   28     2       username  Ljava/lang/String;
            1   28     3  dbCredentials  Ljava/lang/String;
            3   21     6           stmt  Ljava/sql/PreparedStatement;
            6   15     9             rs  Ljava/sql/ResultSet;
           26   27     4              e  Ljava/sql/SQLException;
      Exception table:
        from    to  target  type
           6    10      13  any
           5    11      16  any
          13    16      16  any
           3    11      19  any
          13    19      19  any
           2    12      22  any
          13    22      22  any
           1    12      25  Class java.sql.SQLException
          13    25      25  Class java.sql.SQLException
    MethodParameters:
              Name  Flags
      dbConnection  
      username      

  protected java.security.Principal getPrincipal(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/security/Principal;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=6, locals=5, args_size=2
        start local 0 // org.apache.catalina.realm.DataSourceRealm this
        start local 1 // java.lang.String username
         0: .line 456
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.DataSourceRealm.open:()Ljava/sql/Connection;
            astore 2 /* dbConnection */
        start local 2 // java.sql.Connection dbConnection
         1: .line 457
            aload 2 /* dbConnection */
            ifnonnull 3
         2: .line 458
            new org.apache.catalina.realm.GenericPrincipal
            dup
            aload 1 /* username */
            aconst_null
            invokespecial org.apache.catalina.realm.GenericPrincipal.<init>:(Ljava/lang/String;Ljava/util/List;)V
            areturn
         3: .line 461
      StackMap locals: java.sql.Connection
      StackMap stack:
            new org.apache.catalina.realm.GenericPrincipal
            dup
            aload 1 /* username */
         4: .line 462
            aload 0 /* this */
            aload 2 /* dbConnection */
            aload 1 /* username */
            invokevirtual org.apache.catalina.realm.DataSourceRealm.getRoles:(Ljava/sql/Connection;Ljava/lang/String;)Ljava/util/ArrayList;
         5: .line 461
            invokespecial org.apache.catalina.realm.GenericPrincipal.<init>:(Ljava/lang/String;Ljava/util/List;)V
            astore 4
         6: .line 464
            aload 0 /* this */
            aload 2 /* dbConnection */
            invokevirtual org.apache.catalina.realm.DataSourceRealm.close:(Ljava/sql/Connection;)V
         7: .line 461
            aload 4
            areturn
         8: .line 463
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 3
         9: .line 464
            aload 0 /* this */
            aload 2 /* dbConnection */
            invokevirtual org.apache.catalina.realm.DataSourceRealm.close:(Ljava/sql/Connection;)V
        10: .line 465
            aload 3
            athrow
        end local 2 // java.sql.Connection dbConnection
        end local 1 // java.lang.String username
        end local 0 // org.apache.catalina.realm.DataSourceRealm this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   11     0          this  Lorg/apache/catalina/realm/DataSourceRealm;
            0   11     1      username  Ljava/lang/String;
            1   11     2  dbConnection  Ljava/sql/Connection;
      Exception table:
        from    to  target  type
           3     6       8  any
    MethodParameters:
          Name  Flags
      username  

  protected java.util.ArrayList<java.lang.String> getRoles(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/util/ArrayList;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=5, args_size=2
        start local 0 // org.apache.catalina.realm.DataSourceRealm this
        start local 1 // java.lang.String username
         0: .line 476
            aconst_null
            astore 2 /* dbConnection */
        start local 2 // java.sql.Connection dbConnection
         1: .line 479
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.DataSourceRealm.open:()Ljava/sql/Connection;
            astore 2 /* dbConnection */
         2: .line 480
            aload 2 /* dbConnection */
            ifnonnull 4
         3: .line 481
            aconst_null
            areturn
         4: .line 485
      StackMap locals: java.sql.Connection
      StackMap stack:
            aload 0 /* this */
            aload 2 /* dbConnection */
            aload 1 /* username */
            invokevirtual org.apache.catalina.realm.DataSourceRealm.getRoles:(Ljava/sql/Connection;Ljava/lang/String;)Ljava/util/ArrayList;
            astore 4
         5: .line 487
            aload 0 /* this */
            aload 2 /* dbConnection */
            invokevirtual org.apache.catalina.realm.DataSourceRealm.close:(Ljava/sql/Connection;)V
         6: .line 485
            aload 4
            areturn
         7: .line 486
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 3
         8: .line 487
            aload 0 /* this */
            aload 2 /* dbConnection */
            invokevirtual org.apache.catalina.realm.DataSourceRealm.close:(Ljava/sql/Connection;)V
         9: .line 488
            aload 3
            athrow
        end local 2 // java.sql.Connection dbConnection
        end local 1 // java.lang.String username
        end local 0 // org.apache.catalina.realm.DataSourceRealm this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   10     0          this  Lorg/apache/catalina/realm/DataSourceRealm;
            0   10     1      username  Ljava/lang/String;
            1   10     2  dbConnection  Ljava/sql/Connection;
      Exception table:
        from    to  target  type
           4     5       7  any
    Signature: (Ljava/lang/String;)Ljava/util/ArrayList<Ljava/lang/String;>;
    MethodParameters:
          Name  Flags
      username  

  protected java.util.ArrayList<java.lang.String> getRoles(java.sql.Connection, java.lang.String);
    descriptor: (Ljava/sql/Connection;Ljava/lang/String;)Ljava/util/ArrayList;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=7, locals=11, args_size=3
        start local 0 // org.apache.catalina.realm.DataSourceRealm this
        start local 1 // java.sql.Connection dbConnection
        start local 2 // java.lang.String username
         0: .line 502
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.allRolesMode:Lorg/apache/catalina/realm/RealmBase$AllRolesMode;
            getstatic org.apache.catalina.realm.RealmBase$AllRolesMode.STRICT_MODE:Lorg/apache/catalina/realm/RealmBase$AllRolesMode;
            if_acmpeq 2
            aload 0 /* this */
            invokevirtual org.apache.catalina.realm.DataSourceRealm.isRoleStoreDefined:()Z
            ifne 2
         1: .line 505
            aconst_null
            areturn
         2: .line 508
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 3 /* list */
        start local 3 // java.util.ArrayList list
         3: .line 510
            aconst_null
            astore 4
            aconst_null
            astore 5
         4: aload 1 /* dbConnection */
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.preparedRoles:Ljava/lang/String;
            invokeinterface java.sql.Connection.prepareStatement:(Ljava/lang/String;)Ljava/sql/PreparedStatement;
            astore 6 /* stmt */
        start local 6 // java.sql.PreparedStatement stmt
         5: .line 511
            aload 6 /* stmt */
            iconst_1
            aload 2 /* username */
            invokeinterface java.sql.PreparedStatement.setString:(ILjava/lang/String;)V
         6: .line 513
            aconst_null
            astore 7
            aconst_null
            astore 8
         7: aload 6 /* stmt */
            invokeinterface java.sql.PreparedStatement.executeQuery:()Ljava/sql/ResultSet;
            astore 9 /* rs */
        start local 9 // java.sql.ResultSet rs
         8: .line 514
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 3 /* list */
         9: .line 516
            goto 13
        10: .line 517
      StackMap locals: org.apache.catalina.realm.DataSourceRealm java.sql.Connection java.lang.String java.util.ArrayList java.lang.Throwable java.lang.Throwable java.sql.PreparedStatement java.lang.Throwable java.lang.Throwable java.sql.ResultSet
      StackMap stack:
            aload 9 /* rs */
            iconst_1
            invokeinterface java.sql.ResultSet.getString:(I)Ljava/lang/String;
            astore 10 /* role */
        start local 10 // java.lang.String role
        11: .line 518
            aload 10 /* role */
            ifnull 13
        12: .line 519
            aload 3 /* list */
            aload 10 /* role */
            invokevirtual java.lang.String.trim:()Ljava/lang/String;
            invokevirtual java.util.ArrayList.add:(Ljava/lang/Object;)Z
            pop
        end local 10 // java.lang.String role
        13: .line 516
      StackMap locals:
      StackMap stack:
            aload 9 /* rs */
            invokeinterface java.sql.ResultSet.next:()Z
            ifne 10
        14: .line 522
            aload 3 /* list */
        15: .line 523
            aload 9 /* rs */
            ifnull 16
            aload 9 /* rs */
            invokeinterface java.sql.ResultSet.close:()V
        16: .line 524
      StackMap locals:
      StackMap stack: java.util.ArrayList
            aload 6 /* stmt */
            ifnull 17
            aload 6 /* stmt */
            invokeinterface java.sql.PreparedStatement.close:()V
        17: .line 522
      StackMap locals:
      StackMap stack: java.util.ArrayList
            areturn
      StackMap locals:
      StackMap stack: java.lang.Throwable
        18: astore 7
        19: .line 523
            aload 9 /* rs */
            ifnull 20
            aload 9 /* rs */
            invokeinterface java.sql.ResultSet.close:()V
        end local 9 // java.sql.ResultSet rs
      StackMap locals:
      StackMap stack:
        20: aload 7
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        21: astore 8
            aload 7
            ifnonnull 22
            aload 8
            astore 7
            goto 23
      StackMap locals:
      StackMap stack:
        22: aload 7
            aload 8
            if_acmpeq 23
            aload 7
            aload 8
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        23: aload 7
            athrow
      StackMap locals: org.apache.catalina.realm.DataSourceRealm java.sql.Connection java.lang.String java.util.ArrayList java.lang.Throwable java.lang.Throwable java.sql.PreparedStatement
      StackMap stack: java.lang.Throwable
        24: astore 4
        25: .line 524
            aload 6 /* stmt */
            ifnull 26
            aload 6 /* stmt */
            invokeinterface java.sql.PreparedStatement.close:()V
        end local 6 // java.sql.PreparedStatement stmt
      StackMap locals:
      StackMap stack:
        26: aload 4
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        27: astore 5
            aload 4
            ifnonnull 28
            aload 5
            astore 4
            goto 29
      StackMap locals:
      StackMap stack:
        28: aload 4
            aload 5
            if_acmpeq 29
            aload 4
            aload 5
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        29: aload 4
            athrow
      StackMap locals: org.apache.catalina.realm.DataSourceRealm java.sql.Connection java.lang.String java.util.ArrayList
      StackMap stack: java.sql.SQLException
        30: astore 4 /* e */
        start local 4 // java.sql.SQLException e
        31: .line 525
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.containerLog:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.realm.DataSourceRealm.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "dataSourceRealm.getRoles.exception"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 2 /* username */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            aload 4 /* e */
            invokeinterface org.apache.juli.logging.Log.error:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        end local 4 // java.sql.SQLException e
        32: .line 528
            aconst_null
            areturn
        end local 3 // java.util.ArrayList list
        end local 2 // java.lang.String username
        end local 1 // java.sql.Connection dbConnection
        end local 0 // org.apache.catalina.realm.DataSourceRealm this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   33     0          this  Lorg/apache/catalina/realm/DataSourceRealm;
            0   33     1  dbConnection  Ljava/sql/Connection;
            0   33     2      username  Ljava/lang/String;
            3   33     3          list  Ljava/util/ArrayList<Ljava/lang/String;>;
            5   26     6          stmt  Ljava/sql/PreparedStatement;
            8   20     9            rs  Ljava/sql/ResultSet;
           11   13    10          role  Ljava/lang/String;
           31   32     4             e  Ljava/sql/SQLException;
      Exception table:
        from    to  target  type
           8    15      18  any
           7    16      21  any
          18    21      21  any
           5    16      24  any
          18    24      24  any
           4    17      27  any
          18    27      27  any
           3    17      30  Class java.sql.SQLException
          18    30      30  Class java.sql.SQLException
    Signature: (Ljava/sql/Connection;Ljava/lang/String;)Ljava/util/ArrayList<Ljava/lang/String;>;
    MethodParameters:
              Name  Flags
      dbConnection  
      username      

  private boolean isRoleStoreDefined();
    descriptor: ()Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.realm.DataSourceRealm this
         0: .line 533
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.userRoleTable:Ljava/lang/String;
            ifnonnull 1
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.roleNameCol:Ljava/lang/String;
            ifnonnull 1
            iconst_0
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_1
            ireturn
        end local 0 // org.apache.catalina.realm.DataSourceRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/apache/catalina/realm/DataSourceRealm;

  protected void startInternal();
    descriptor: ()V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // org.apache.catalina.realm.DataSourceRealm this
         0: .line 551
            new java.lang.StringBuilder
            dup
            ldc "SELECT "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            astore 1 /* temp */
        start local 1 // java.lang.StringBuilder temp
         1: .line 552
            aload 1 /* temp */
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.roleNameCol:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
         2: .line 553
            aload 1 /* temp */
            ldc " FROM "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
         3: .line 554
            aload 1 /* temp */
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.userRoleTable:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
         4: .line 555
            aload 1 /* temp */
            ldc " WHERE "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
         5: .line 556
            aload 1 /* temp */
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.userNameCol:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
         6: .line 557
            aload 1 /* temp */
            ldc " = ?"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
         7: .line 558
            aload 0 /* this */
            aload 1 /* temp */
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            putfield org.apache.catalina.realm.DataSourceRealm.preparedRoles:Ljava/lang/String;
         8: .line 561
            new java.lang.StringBuilder
            dup
            ldc "SELECT "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            astore 1 /* temp */
         9: .line 562
            aload 1 /* temp */
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.userCredCol:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        10: .line 563
            aload 1 /* temp */
            ldc " FROM "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        11: .line 564
            aload 1 /* temp */
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.userTable:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        12: .line 565
            aload 1 /* temp */
            ldc " WHERE "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        13: .line 566
            aload 1 /* temp */
            aload 0 /* this */
            getfield org.apache.catalina.realm.DataSourceRealm.userNameCol:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        14: .line 567
            aload 1 /* temp */
            ldc " = ?"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        15: .line 568
            aload 0 /* this */
            aload 1 /* temp */
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            putfield org.apache.catalina.realm.DataSourceRealm.preparedCredentials:Ljava/lang/String;
        16: .line 570
            aload 0 /* this */
            invokespecial org.apache.catalina.realm.RealmBase.startInternal:()V
        17: .line 571
            return
        end local 1 // java.lang.StringBuilder temp
        end local 0 // org.apache.catalina.realm.DataSourceRealm this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   18     0  this  Lorg/apache/catalina/realm/DataSourceRealm;
            1   18     1  temp  Ljava/lang/StringBuilder;
    Exceptions:
      throws org.apache.catalina.LifecycleException
}
SourceFile: "DataSourceRealm.java"
InnerClasses:
  protected AllRolesMode = org.apache.catalina.realm.RealmBase$AllRolesMode of org.apache.catalina.realm.RealmBase