public class io.dropwizard.auth.CachingAuthenticator<C, P extends java.security.Principal> implements io.dropwizard.auth.Authenticator<C, P>
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: io.dropwizard.auth.CachingAuthenticator
  super_class: java.lang.Object
{
  private final com.google.common.cache.LoadingCache<C, java.util.Optional<P>> cache;
    descriptor: Lcom/google/common/cache/LoadingCache;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Lcom/google/common/cache/LoadingCache<TC;Ljava/util/Optional<TP;>;>;

  private final com.codahale.metrics.Meter cacheMisses;
    descriptor: Lcom/codahale/metrics/Meter;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final com.codahale.metrics.Timer gets;
    descriptor: Lcom/codahale/metrics/Timer;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  public void <init>(com.codahale.metrics.MetricRegistry, io.dropwizard.auth.Authenticator<C, P>, com.google.common.cache.CacheBuilderSpec);
    descriptor: (Lcom/codahale/metrics/MetricRegistry;Lio/dropwizard/auth/Authenticator;Lcom/google/common/cache/CacheBuilderSpec;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // io.dropwizard.auth.CachingAuthenticator this
        start local 1 // com.codahale.metrics.MetricRegistry metricRegistry
        start local 2 // io.dropwizard.auth.Authenticator authenticator
        start local 3 // com.google.common.cache.CacheBuilderSpec cacheSpec
         0: .line 44
            aload 0 /* this */
            aload 1 /* metricRegistry */
            aload 2 /* authenticator */
            aload 3 /* cacheSpec */
            invokestatic com.google.common.cache.CacheBuilder.from:(Lcom/google/common/cache/CacheBuilderSpec;)Lcom/google/common/cache/CacheBuilder;
            invokespecial io.dropwizard.auth.CachingAuthenticator.<init>:(Lcom/codahale/metrics/MetricRegistry;Lio/dropwizard/auth/Authenticator;Lcom/google/common/cache/CacheBuilder;)V
         1: .line 45
            return
        end local 3 // com.google.common.cache.CacheBuilderSpec cacheSpec
        end local 2 // io.dropwizard.auth.Authenticator authenticator
        end local 1 // com.codahale.metrics.MetricRegistry metricRegistry
        end local 0 // io.dropwizard.auth.CachingAuthenticator this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    2     0            this  Lio/dropwizard/auth/CachingAuthenticator<TC;TP;>;
            0    2     1  metricRegistry  Lcom/codahale/metrics/MetricRegistry;
            0    2     2   authenticator  Lio/dropwizard/auth/Authenticator<TC;TP;>;
            0    2     3       cacheSpec  Lcom/google/common/cache/CacheBuilderSpec;
    Signature: (Lcom/codahale/metrics/MetricRegistry;Lio/dropwizard/auth/Authenticator<TC;TP;>;Lcom/google/common/cache/CacheBuilderSpec;)V
    MethodParameters:
                Name  Flags
      metricRegistry  final
      authenticator   final
      cacheSpec       final

  public void <init>(com.codahale.metrics.MetricRegistry, io.dropwizard.auth.Authenticator<C, P>, com.google.common.cache.CacheBuilder<java.lang.Object, java.lang.Object>);
    descriptor: (Lcom/codahale/metrics/MetricRegistry;Lio/dropwizard/auth/Authenticator;Lcom/google/common/cache/CacheBuilder;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=4, args_size=4
        start local 0 // io.dropwizard.auth.CachingAuthenticator this
        start local 1 // com.codahale.metrics.MetricRegistry metricRegistry
        start local 2 // io.dropwizard.auth.Authenticator authenticator
        start local 3 // com.google.common.cache.CacheBuilder builder
         0: .line 54
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 57
            aload 0 /* this */
            aload 1 /* metricRegistry */
            aload 2 /* authenticator */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            iconst_1
            anewarray java.lang.String
            dup
            iconst_0
            ldc "cache-misses"
            aastore
            invokestatic com.codahale.metrics.MetricRegistry.name:(Ljava/lang/Class;[Ljava/lang/String;)Ljava/lang/String;
            invokevirtual com.codahale.metrics.MetricRegistry.meter:(Ljava/lang/String;)Lcom/codahale/metrics/Meter;
            putfield io.dropwizard.auth.CachingAuthenticator.cacheMisses:Lcom/codahale/metrics/Meter;
         2: .line 58
            aload 0 /* this */
            aload 1 /* metricRegistry */
            aload 2 /* authenticator */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            iconst_1
            anewarray java.lang.String
            dup
            iconst_0
            ldc "gets"
            aastore
            invokestatic com.codahale.metrics.MetricRegistry.name:(Ljava/lang/Class;[Ljava/lang/String;)Ljava/lang/String;
            invokevirtual com.codahale.metrics.MetricRegistry.timer:(Ljava/lang/String;)Lcom/codahale/metrics/Timer;
            putfield io.dropwizard.auth.CachingAuthenticator.gets:Lcom/codahale/metrics/Timer;
         3: .line 59
            aload 0 /* this */
            aload 3 /* builder */
            invokevirtual com.google.common.cache.CacheBuilder.recordStats:()Lcom/google/common/cache/CacheBuilder;
            new io.dropwizard.auth.CachingAuthenticator$1
            dup
            aload 0 /* this */
            aload 2 /* authenticator */
            invokespecial io.dropwizard.auth.CachingAuthenticator$1.<init>:(Lio/dropwizard/auth/CachingAuthenticator;Lio/dropwizard/auth/Authenticator;)V
            invokevirtual com.google.common.cache.CacheBuilder.build:(Lcom/google/common/cache/CacheLoader;)Lcom/google/common/cache/LoadingCache;
            putfield io.dropwizard.auth.CachingAuthenticator.cache:Lcom/google/common/cache/LoadingCache;
         4: .line 71
            return
        end local 3 // com.google.common.cache.CacheBuilder builder
        end local 2 // io.dropwizard.auth.Authenticator authenticator
        end local 1 // com.codahale.metrics.MetricRegistry metricRegistry
        end local 0 // io.dropwizard.auth.CachingAuthenticator this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    5     0            this  Lio/dropwizard/auth/CachingAuthenticator<TC;TP;>;
            0    5     1  metricRegistry  Lcom/codahale/metrics/MetricRegistry;
            0    5     2   authenticator  Lio/dropwizard/auth/Authenticator<TC;TP;>;
            0    5     3         builder  Lcom/google/common/cache/CacheBuilder<Ljava/lang/Object;Ljava/lang/Object;>;
    Signature: (Lcom/codahale/metrics/MetricRegistry;Lio/dropwizard/auth/Authenticator<TC;TP;>;Lcom/google/common/cache/CacheBuilder<Ljava/lang/Object;Ljava/lang/Object;>;)V
    MethodParameters:
                Name  Flags
      metricRegistry  final
      authenticator   final
      builder         final

  public java.util.Optional<P> authenticate(C);
    descriptor: (Ljava/lang/Object;)Ljava/util/Optional;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=7, args_size=2
        start local 0 // io.dropwizard.auth.CachingAuthenticator this
        start local 1 // java.lang.Object credentials
         0: .line 75
            aload 0 /* this */
            getfield io.dropwizard.auth.CachingAuthenticator.gets:Lcom/codahale/metrics/Timer;
            invokevirtual com.codahale.metrics.Timer.time:()Lcom/codahale/metrics/Timer$Context;
            astore 2 /* context */
        start local 2 // com.codahale.metrics.Timer$Context context
         1: .line 77
            aload 0 /* this */
            getfield io.dropwizard.auth.CachingAuthenticator.cache:Lcom/google/common/cache/LoadingCache;
            aload 1 /* credentials */
            invokeinterface com.google.common.cache.LoadingCache.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.Optional
            astore 6
         2: .line 90
            aload 2 /* context */
            invokevirtual com.codahale.metrics.Timer$Context.stop:()J
            pop2
         3: .line 77
            aload 6
            areturn
         4: .line 78
      StackMap locals: io.dropwizard.auth.CachingAuthenticator java.lang.Object com.codahale.metrics.Timer$Context
      StackMap stack: java.util.concurrent.ExecutionException
            astore 3 /* e */
        start local 3 // java.util.concurrent.ExecutionException e
         5: .line 79
            aload 3 /* e */
            invokevirtual java.util.concurrent.ExecutionException.getCause:()Ljava/lang/Throwable;
            astore 4 /* cause */
        start local 4 // java.lang.Throwable cause
         6: .line 80
            aload 4 /* cause */
            instanceof io.dropwizard.auth.CachingAuthenticator$InvalidCredentialsException
            ifeq 10
         7: .line 81
            invokestatic java.util.Optional.empty:()Ljava/util/Optional;
            astore 6
         8: .line 90
            aload 2 /* context */
            invokevirtual com.codahale.metrics.Timer$Context.stop:()J
            pop2
         9: .line 81
            aload 6
            areturn
        10: .line 84
      StackMap locals: java.util.concurrent.ExecutionException java.lang.Throwable
      StackMap stack:
            aload 4 /* cause */
            ldc Lio/dropwizard/auth/AuthenticationException;
            invokestatic com.google.common.base.Throwables.propagateIfPossible:(Ljava/lang/Throwable;Ljava/lang/Class;)V
        11: .line 85
            new io.dropwizard.auth.AuthenticationException
            dup
            aload 4 /* cause */
            invokespecial io.dropwizard.auth.AuthenticationException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 4 // java.lang.Throwable cause
        end local 3 // java.util.concurrent.ExecutionException e
        12: .line 86
      StackMap locals: io.dropwizard.auth.CachingAuthenticator java.lang.Object com.codahale.metrics.Timer$Context
      StackMap stack: com.google.common.util.concurrent.UncheckedExecutionException
            astore 3 /* e */
        start local 3 // com.google.common.util.concurrent.UncheckedExecutionException e
        13: .line 87
            aload 3 /* e */
            invokevirtual com.google.common.util.concurrent.UncheckedExecutionException.getCause:()Ljava/lang/Throwable;
            invokestatic com.google.common.base.Throwables.throwIfUnchecked:(Ljava/lang/Throwable;)V
        14: .line 88
            aload 3 /* e */
            athrow
        end local 3 // com.google.common.util.concurrent.UncheckedExecutionException e
        15: .line 89
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 5
        16: .line 90
            aload 2 /* context */
            invokevirtual com.codahale.metrics.Timer$Context.stop:()J
            pop2
        17: .line 91
            aload 5
            athrow
        end local 2 // com.codahale.metrics.Timer$Context context
        end local 1 // java.lang.Object credentials
        end local 0 // io.dropwizard.auth.CachingAuthenticator this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   18     0         this  Lio/dropwizard/auth/CachingAuthenticator<TC;TP;>;
            0   18     1  credentials  TC;
            1   18     2      context  Lcom/codahale/metrics/Timer$Context;
            5   12     3            e  Ljava/util/concurrent/ExecutionException;
            6   12     4        cause  Ljava/lang/Throwable;
           13   15     3            e  Lcom/google/common/util/concurrent/UncheckedExecutionException;
      Exception table:
        from    to  target  type
           1     2       4  Class java.util.concurrent.ExecutionException
           1     2      12  Class com.google.common.util.concurrent.UncheckedExecutionException
           1     2      15  any
           4     8      15  any
          10    15      15  any
    Exceptions:
      throws io.dropwizard.auth.AuthenticationException
    Signature: (TC;)Ljava/util/Optional<TP;>;
    MethodParameters:
             Name  Flags
      credentials  

  public void invalidate();
    descriptor: (Ljava/lang/Object;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // io.dropwizard.auth.CachingAuthenticator this
        start local 1 // java.lang.Object credentials
         0: .line 100
            aload 0 /* this */
            getfield io.dropwizard.auth.CachingAuthenticator.cache:Lcom/google/common/cache/LoadingCache;
            aload 1 /* credentials */
            invokeinterface com.google.common.cache.LoadingCache.invalidate:(Ljava/lang/Object;)V
         1: .line 101
            return
        end local 1 // java.lang.Object credentials
        end local 0 // io.dropwizard.auth.CachingAuthenticator this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    2     0         this  Lio/dropwizard/auth/CachingAuthenticator<TC;TP;>;
            0    2     1  credentials  TC;
    Signature: (TC;)V
    MethodParameters:
             Name  Flags
      credentials  

  public void invalidateAll(java.lang.Iterable<C>);
    descriptor: (Ljava/lang/Iterable;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // io.dropwizard.auth.CachingAuthenticator this
        start local 1 // java.lang.Iterable credentials
         0: .line 109
            aload 0 /* this */
            getfield io.dropwizard.auth.CachingAuthenticator.cache:Lcom/google/common/cache/LoadingCache;
            aload 1 /* credentials */
            invokeinterface com.google.common.cache.LoadingCache.invalidateAll:(Ljava/lang/Iterable;)V
         1: .line 110
            return
        end local 1 // java.lang.Iterable credentials
        end local 0 // io.dropwizard.auth.CachingAuthenticator this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    2     0         this  Lio/dropwizard/auth/CachingAuthenticator<TC;TP;>;
            0    2     1  credentials  Ljava/lang/Iterable<TC;>;
    Signature: (Ljava/lang/Iterable<TC;>;)V
    MethodParameters:
             Name  Flags
      credentials  

  public void invalidateAll(com.google.common.base.Predicate<? super C>);
    descriptor: (Lcom/google/common/base/Predicate;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // io.dropwizard.auth.CachingAuthenticator this
        start local 1 // com.google.common.base.Predicate predicate
         0: .line 118
            aload 0 /* this */
            getfield io.dropwizard.auth.CachingAuthenticator.cache:Lcom/google/common/cache/LoadingCache;
            aload 0 /* this */
            getfield io.dropwizard.auth.CachingAuthenticator.cache:Lcom/google/common/cache/LoadingCache;
            invokeinterface com.google.common.cache.LoadingCache.asMap:()Ljava/util/concurrent/ConcurrentMap;
            invokeinterface java.util.concurrent.ConcurrentMap.keySet:()Ljava/util/Set;
            aload 1 /* predicate */
            invokestatic com.google.common.collect.Sets.filter:(Ljava/util/Set;Lcom/google/common/base/Predicate;)Ljava/util/Set;
            invokeinterface com.google.common.cache.LoadingCache.invalidateAll:(Ljava/lang/Iterable;)V
         1: .line 119
            return
        end local 1 // com.google.common.base.Predicate predicate
        end local 0 // io.dropwizard.auth.CachingAuthenticator this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    2     0       this  Lio/dropwizard/auth/CachingAuthenticator<TC;TP;>;
            0    2     1  predicate  Lcom/google/common/base/Predicate<-TC;>;
    Signature: (Lcom/google/common/base/Predicate<-TC;>;)V
    MethodParameters:
           Name  Flags
      predicate  

  public void invalidateAll();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // io.dropwizard.auth.CachingAuthenticator this
         0: .line 125
            aload 0 /* this */
            getfield io.dropwizard.auth.CachingAuthenticator.cache:Lcom/google/common/cache/LoadingCache;
            invokeinterface com.google.common.cache.LoadingCache.invalidateAll:()V
         1: .line 126
            return
        end local 0 // io.dropwizard.auth.CachingAuthenticator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lio/dropwizard/auth/CachingAuthenticator<TC;TP;>;

  public long size();
    descriptor: ()J
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // io.dropwizard.auth.CachingAuthenticator this
         0: .line 134
            aload 0 /* this */
            getfield io.dropwizard.auth.CachingAuthenticator.cache:Lcom/google/common/cache/LoadingCache;
            invokeinterface com.google.common.cache.LoadingCache.size:()J
            lreturn
        end local 0 // io.dropwizard.auth.CachingAuthenticator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lio/dropwizard/auth/CachingAuthenticator<TC;TP;>;

  public com.google.common.cache.CacheStats stats();
    descriptor: ()Lcom/google/common/cache/CacheStats;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // io.dropwizard.auth.CachingAuthenticator this
         0: .line 143
            aload 0 /* this */
            getfield io.dropwizard.auth.CachingAuthenticator.cache:Lcom/google/common/cache/LoadingCache;
            invokeinterface com.google.common.cache.LoadingCache.stats:()Lcom/google/common/cache/CacheStats;
            areturn
        end local 0 // io.dropwizard.auth.CachingAuthenticator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lio/dropwizard/auth/CachingAuthenticator<TC;TP;>;
}
Signature: <C:Ljava/lang/Object;P::Ljava/security/Principal;>Ljava/lang/Object;Lio/dropwizard/auth/Authenticator<TC;TP;>;
SourceFile: "CachingAuthenticator.java"
NestMembers:
  io.dropwizard.auth.CachingAuthenticator$1  io.dropwizard.auth.CachingAuthenticator$InvalidCredentialsException
InnerClasses:
  public Context = com.codahale.metrics.Timer$Context of com.codahale.metrics.Timer
  io.dropwizard.auth.CachingAuthenticator$1
  private InvalidCredentialsException = io.dropwizard.auth.CachingAuthenticator$InvalidCredentialsException of io.dropwizard.auth.CachingAuthenticator