final class com.android.providers.settings.GenerationRegistry
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: com.android.providers.settings.GenerationRegistry
  super_class: java.lang.Object
{
  private static final java.lang.String LOG_TAG;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "GenerationRegistry"

  private static final boolean DEBUG;
    descriptor: Z
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 0

  private final java.lang.Object mLock;
    descriptor: Ljava/lang/Object;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final android.util.SparseIntArray mKeyToIndexMap;
    descriptor: Landroid/util/SparseIntArray;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    RuntimeInvisibleAnnotations: 
      com.android.internal.annotations.GuardedBy(value = "mLock")

  private android.util.MemoryIntArray mBackingStore;
    descriptor: Landroid/util/MemoryIntArray;
    flags: (0x0002) ACC_PRIVATE
    RuntimeInvisibleAnnotations: 
      com.android.internal.annotations.GuardedBy(value = "mLock")

  public void <init>(java.lang.Object);
    descriptor: (Ljava/lang/Object;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // com.android.providers.settings.GenerationRegistry this
        start local 1 // java.lang.Object lock
         0: .line 47
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 42
            aload 0 /* this */
            new android.util.SparseIntArray
            dup
            invokespecial android.util.SparseIntArray.<init>:()V
            putfield com.android.providers.settings.GenerationRegistry.mKeyToIndexMap:Landroid/util/SparseIntArray;
         2: .line 48
            aload 0 /* this */
            aload 1 /* lock */
            putfield com.android.providers.settings.GenerationRegistry.mLock:Ljava/lang/Object;
         3: .line 49
            return
        end local 1 // java.lang.Object lock
        end local 0 // com.android.providers.settings.GenerationRegistry this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lcom/android/providers/settings/GenerationRegistry;
            0    4     1  lock  Ljava/lang/Object;
    MethodParameters:
      Name  Flags
      lock  

  public void incrementGeneration(int);
    descriptor: (I)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=6, args_size=2
        start local 0 // com.android.providers.settings.GenerationRegistry this
        start local 1 // int key
         0: .line 52
            aload 0 /* this */
            getfield com.android.providers.settings.GenerationRegistry.mLock:Ljava/lang/Object;
            dup
            astore 2
            monitorenter
         1: .line 53
            aload 0 /* this */
            invokevirtual com.android.providers.settings.GenerationRegistry.getBackingStoreLocked:()Landroid/util/MemoryIntArray;
            astore 3 /* backingStore */
        start local 3 // android.util.MemoryIntArray backingStore
         2: .line 54
            aload 3 /* backingStore */
            ifnull 11
         3: .line 56
            iload 1 /* key */
            aload 0 /* this */
            getfield com.android.providers.settings.GenerationRegistry.mKeyToIndexMap:Landroid/util/SparseIntArray;
            aload 3 /* backingStore */
            invokestatic com.android.providers.settings.GenerationRegistry.getKeyIndexLocked:(ILandroid/util/SparseIntArray;Landroid/util/MemoryIntArray;)I
            istore 4 /* index */
        start local 4 // int index
         4: .line 57
            iload 4 /* index */
            iflt 11
         5: .line 58
            aload 3 /* backingStore */
            iload 4 /* index */
            invokevirtual android.util.MemoryIntArray.get:(I)I
            iconst_1
            iadd
            istore 5 /* generation */
        start local 5 // int generation
         6: .line 59
            aload 3 /* backingStore */
            iload 4 /* index */
            iload 5 /* generation */
            invokevirtual android.util.MemoryIntArray.set:(II)V
        end local 5 // int generation
        end local 4 // int index
         7: .line 61
            goto 11
      StackMap locals: com.android.providers.settings.GenerationRegistry int java.lang.Object android.util.MemoryIntArray
      StackMap stack: java.io.IOException
         8: astore 4 /* e */
        start local 4 // java.io.IOException e
         9: .line 62
            ldc "GenerationRegistry"
            ldc "Error updating generation id"
            aload 4 /* e */
            invokestatic android.util.Slog.e:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
            pop
        10: .line 63
            aload 0 /* this */
            invokevirtual com.android.providers.settings.GenerationRegistry.destroyBackingStore:()V
        end local 4 // java.io.IOException e
        end local 3 // android.util.MemoryIntArray backingStore
        11: .line 52
      StackMap locals:
      StackMap stack:
            aload 2
            monitorexit
        12: goto 15
      StackMap locals:
      StackMap stack: java.lang.Throwable
        13: aload 2
            monitorexit
        14: athrow
        15: .line 67
      StackMap locals:
      StackMap stack:
            return
        end local 1 // int key
        end local 0 // com.android.providers.settings.GenerationRegistry this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   16     0          this  Lcom/android/providers/settings/GenerationRegistry;
            0   16     1           key  I
            2   11     3  backingStore  Landroid/util/MemoryIntArray;
            4    7     4         index  I
            6    7     5    generation  I
            9   11     4             e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           3     7       8  Class java.io.IOException
           1    12      13  any
          13    14      13  any
    MethodParameters:
      Name  Flags
      key   

  public void addGenerationData(android.os.Bundle, int);
    descriptor: (Landroid/os/Bundle;I)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=6, args_size=3
        start local 0 // com.android.providers.settings.GenerationRegistry this
        start local 1 // android.os.Bundle bundle
        start local 2 // int key
         0: .line 70
            aload 0 /* this */
            getfield com.android.providers.settings.GenerationRegistry.mLock:Ljava/lang/Object;
            dup
            astore 3
            monitorenter
         1: .line 71
            aload 0 /* this */
            invokevirtual com.android.providers.settings.GenerationRegistry.getBackingStoreLocked:()Landroid/util/MemoryIntArray;
            astore 4 /* backingStore */
        start local 4 // android.util.MemoryIntArray backingStore
         2: .line 73
            aload 4 /* backingStore */
            ifnull 16
         3: .line 74
            iload 2 /* key */
            aload 0 /* this */
            getfield com.android.providers.settings.GenerationRegistry.mKeyToIndexMap:Landroid/util/SparseIntArray;
            aload 4 /* backingStore */
            invokestatic com.android.providers.settings.GenerationRegistry.getKeyIndexLocked:(ILandroid/util/SparseIntArray;Landroid/util/MemoryIntArray;)I
            istore 5 /* index */
        start local 5 // int index
         4: .line 75
            iload 5 /* index */
            iflt 16
         5: .line 76
            aload 1 /* bundle */
            ldc "_track_generation"
         6: .line 77
            aload 4 /* backingStore */
         7: .line 76
            invokevirtual android.os.Bundle.putParcelable:(Ljava/lang/String;Landroid/os/Parcelable;)V
         8: .line 78
            aload 1 /* bundle */
            ldc "_generation_index"
            iload 5 /* index */
            invokevirtual android.os.Bundle.putInt:(Ljava/lang/String;I)V
         9: .line 79
            aload 1 /* bundle */
            ldc "_generation"
        10: .line 80
            aload 4 /* backingStore */
            iload 5 /* index */
            invokevirtual android.util.MemoryIntArray.get:(I)I
        11: .line 79
            invokevirtual android.os.Bundle.putInt:(Ljava/lang/String;I)V
        end local 5 // int index
        12: .line 87
            goto 16
      StackMap locals: com.android.providers.settings.GenerationRegistry android.os.Bundle int java.lang.Object android.util.MemoryIntArray
      StackMap stack: java.io.IOException
        13: astore 5 /* e */
        start local 5 // java.io.IOException e
        14: .line 88
            ldc "GenerationRegistry"
            ldc "Error adding generation data"
            aload 5 /* e */
            invokestatic android.util.Slog.e:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
            pop
        15: .line 89
            aload 0 /* this */
            invokevirtual com.android.providers.settings.GenerationRegistry.destroyBackingStore:()V
        end local 5 // java.io.IOException e
        end local 4 // android.util.MemoryIntArray backingStore
        16: .line 70
      StackMap locals:
      StackMap stack:
            aload 3
            monitorexit
        17: goto 20
      StackMap locals:
      StackMap stack: java.lang.Throwable
        18: aload 3
            monitorexit
        19: athrow
        20: .line 92
      StackMap locals:
      StackMap stack:
            return
        end local 2 // int key
        end local 1 // android.os.Bundle bundle
        end local 0 // com.android.providers.settings.GenerationRegistry this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   21     0          this  Lcom/android/providers/settings/GenerationRegistry;
            0   21     1        bundle  Landroid/os/Bundle;
            0   21     2           key  I
            2   16     4  backingStore  Landroid/util/MemoryIntArray;
            4   12     5         index  I
           14   16     5             e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           2    12      13  Class java.io.IOException
           1    17      18  any
          18    19      18  any
    MethodParameters:
        Name  Flags
      bundle  
      key     

  public void onUserRemoved(int);
    descriptor: (I)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=6, args_size=2
        start local 0 // com.android.providers.settings.GenerationRegistry this
        start local 1 // int userId
         0: .line 95
            aload 0 /* this */
            getfield com.android.providers.settings.GenerationRegistry.mLock:Ljava/lang/Object;
            dup
            astore 2
            monitorenter
         1: .line 96
            aload 0 /* this */
            invokevirtual com.android.providers.settings.GenerationRegistry.getBackingStoreLocked:()Landroid/util/MemoryIntArray;
            astore 3 /* backingStore */
        start local 3 // android.util.MemoryIntArray backingStore
         2: .line 97
            aload 3 /* backingStore */
            ifnull 13
            aload 0 /* this */
            getfield com.android.providers.settings.GenerationRegistry.mKeyToIndexMap:Landroid/util/SparseIntArray;
            invokevirtual android.util.SparseIntArray.size:()I
            ifle 13
         3: .line 100
            iconst_2
            iload 1 /* userId */
         4: .line 99
            invokestatic com.android.providers.settings.SettingsProvider.makeKey:(II)I
            istore 4 /* secureKey */
        start local 4 // int secureKey
         5: .line 101
            iload 4 /* secureKey */
            aload 0 /* this */
            getfield com.android.providers.settings.GenerationRegistry.mKeyToIndexMap:Landroid/util/SparseIntArray;
            aload 3 /* backingStore */
            invokestatic com.android.providers.settings.GenerationRegistry.resetSlotForKeyLocked:(ILandroid/util/SparseIntArray;Landroid/util/MemoryIntArray;)V
         6: .line 104
            iconst_1
            iload 1 /* userId */
         7: .line 103
            invokestatic com.android.providers.settings.SettingsProvider.makeKey:(II)I
            istore 5 /* systemKey */
        start local 5 // int systemKey
         8: .line 105
            iload 5 /* systemKey */
            aload 0 /* this */
            getfield com.android.providers.settings.GenerationRegistry.mKeyToIndexMap:Landroid/util/SparseIntArray;
            aload 3 /* backingStore */
            invokestatic com.android.providers.settings.GenerationRegistry.resetSlotForKeyLocked:(ILandroid/util/SparseIntArray;Landroid/util/MemoryIntArray;)V
        end local 5 // int systemKey
        end local 4 // int secureKey
         9: .line 106
            goto 13
      StackMap locals: com.android.providers.settings.GenerationRegistry int java.lang.Object android.util.MemoryIntArray
      StackMap stack: java.io.IOException
        10: astore 4 /* e */
        start local 4 // java.io.IOException e
        11: .line 107
            ldc "GenerationRegistry"
            ldc "Error cleaning up for user"
            aload 4 /* e */
            invokestatic android.util.Slog.e:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
            pop
        12: .line 108
            aload 0 /* this */
            invokevirtual com.android.providers.settings.GenerationRegistry.destroyBackingStore:()V
        end local 4 // java.io.IOException e
        end local 3 // android.util.MemoryIntArray backingStore
        13: .line 95
      StackMap locals:
      StackMap stack:
            aload 2
            monitorexit
        14: goto 17
      StackMap locals:
      StackMap stack: java.lang.Throwable
        15: aload 2
            monitorexit
        16: athrow
        17: .line 112
      StackMap locals:
      StackMap stack:
            return
        end local 1 // int userId
        end local 0 // com.android.providers.settings.GenerationRegistry this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   18     0          this  Lcom/android/providers/settings/GenerationRegistry;
            0   18     1        userId  I
            2   13     3  backingStore  Landroid/util/MemoryIntArray;
            5    9     4     secureKey  I
            8    9     5     systemKey  I
           11   13     4             e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           3     9      10  Class java.io.IOException
           1    14      15  any
          15    16      15  any
    MethodParameters:
        Name  Flags
      userId  

  private android.util.MemoryIntArray getBackingStoreLocked();
    descriptor: ()Landroid/util/MemoryIntArray;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=3, args_size=1
        start local 0 // com.android.providers.settings.GenerationRegistry this
         0: .line 115
            aload 0 /* this */
            getfield com.android.providers.settings.GenerationRegistry.mBackingStore:Landroid/util/MemoryIntArray;
            ifnonnull 6
         1: .line 120
            bipush 13
            iconst_2
            invokestatic android.os.UserManager.getMaxSupportedUsers:()I
            imul
            iadd
            istore 1 /* size */
        start local 1 // int size
         2: .line 122
            aload 0 /* this */
            new android.util.MemoryIntArray
            dup
            iload 1 /* size */
            invokespecial android.util.MemoryIntArray.<init>:(I)V
            putfield com.android.providers.settings.GenerationRegistry.mBackingStore:Landroid/util/MemoryIntArray;
         3: .line 126
            goto 6
      StackMap locals: com.android.providers.settings.GenerationRegistry int
      StackMap stack: java.io.IOException
         4: astore 2 /* e */
        start local 2 // java.io.IOException e
         5: .line 127
            ldc "GenerationRegistry"
            ldc "Error creating generation tracker"
            aload 2 /* e */
            invokestatic android.util.Slog.e:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
            pop
        end local 2 // java.io.IOException e
        end local 1 // int size
         6: .line 130
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.android.providers.settings.GenerationRegistry.mBackingStore:Landroid/util/MemoryIntArray;
            areturn
        end local 0 // com.android.providers.settings.GenerationRegistry this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    7     0  this  Lcom/android/providers/settings/GenerationRegistry;
            2    6     1  size  I
            5    6     2     e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           2     3       4  Class java.io.IOException

  private void destroyBackingStore();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // com.android.providers.settings.GenerationRegistry this
         0: .line 134
            aload 0 /* this */
            getfield com.android.providers.settings.GenerationRegistry.mBackingStore:Landroid/util/MemoryIntArray;
            ifnull 6
         1: .line 136
            aload 0 /* this */
            getfield com.android.providers.settings.GenerationRegistry.mBackingStore:Landroid/util/MemoryIntArray;
            invokevirtual android.util.MemoryIntArray.close:()V
         2: .line 140
            goto 5
      StackMap locals:
      StackMap stack: java.io.IOException
         3: astore 1 /* e */
        start local 1 // java.io.IOException e
         4: .line 141
            ldc "GenerationRegistry"
            ldc "Cannot close generation memory array"
            aload 1 /* e */
            invokestatic android.util.Slog.e:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
            pop
        end local 1 // java.io.IOException e
         5: .line 143
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aconst_null
            putfield com.android.providers.settings.GenerationRegistry.mBackingStore:Landroid/util/MemoryIntArray;
         6: .line 145
      StackMap locals:
      StackMap stack:
            return
        end local 0 // com.android.providers.settings.GenerationRegistry this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    7     0  this  Lcom/android/providers/settings/GenerationRegistry;
            4    5     1     e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           1     2       3  Class java.io.IOException

  private static void resetSlotForKeyLocked(int, android.util.SparseIntArray, android.util.MemoryIntArray);
    descriptor: (ILandroid/util/SparseIntArray;Landroid/util/MemoryIntArray;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=4, args_size=3
        start local 0 // int key
        start local 1 // android.util.SparseIntArray keyToIndexMap
        start local 2 // android.util.MemoryIntArray backingStore
         0: .line 149
            aload 1 /* keyToIndexMap */
            iload 0 /* key */
            iconst_m1
            invokevirtual android.util.SparseIntArray.get:(II)I
            istore 3 /* index */
        start local 3 // int index
         1: .line 150
            iload 3 /* index */
            iflt 4
         2: .line 151
            aload 1 /* keyToIndexMap */
            iload 0 /* key */
            invokevirtual android.util.SparseIntArray.delete:(I)V
         3: .line 152
            aload 2 /* backingStore */
            iload 3 /* index */
            iconst_0
            invokevirtual android.util.MemoryIntArray.set:(II)V
         4: .line 158
      StackMap locals: int
      StackMap stack:
            return
        end local 3 // int index
        end local 2 // android.util.MemoryIntArray backingStore
        end local 1 // android.util.SparseIntArray keyToIndexMap
        end local 0 // int key
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    5     0            key  I
            0    5     1  keyToIndexMap  Landroid/util/SparseIntArray;
            0    5     2   backingStore  Landroid/util/MemoryIntArray;
            1    5     3          index  I
    Exceptions:
      throws java.io.IOException
    MethodParameters:
               Name  Flags
      key            
      keyToIndexMap  
      backingStore   

  private static int getKeyIndexLocked(int, android.util.SparseIntArray, android.util.MemoryIntArray);
    descriptor: (ILandroid/util/SparseIntArray;Landroid/util/MemoryIntArray;)I
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=4, args_size=3
        start local 0 // int key
        start local 1 // android.util.SparseIntArray keyToIndexMap
        start local 2 // android.util.MemoryIntArray backingStore
         0: .line 162
            aload 1 /* keyToIndexMap */
            iload 0 /* key */
            iconst_m1
            invokevirtual android.util.SparseIntArray.get:(II)I
            istore 3 /* index */
        start local 3 // int index
         1: .line 163
            iload 3 /* index */
            ifge 8
         2: .line 164
            aload 2 /* backingStore */
            invokestatic com.android.providers.settings.GenerationRegistry.findNextEmptyIndex:(Landroid/util/MemoryIntArray;)I
            istore 3 /* index */
         3: .line 165
            iload 3 /* index */
            iflt 7
         4: .line 166
            aload 2 /* backingStore */
            iload 3 /* index */
            iconst_1
            invokevirtual android.util.MemoryIntArray.set:(II)V
         5: .line 167
            aload 1 /* keyToIndexMap */
            iload 0 /* key */
            iload 3 /* index */
            invokevirtual android.util.SparseIntArray.append:(II)V
         6: .line 172
            goto 8
         7: .line 173
      StackMap locals: int
      StackMap stack:
            ldc "GenerationRegistry"
            ldc "Could not allocate generation index"
            invokestatic android.util.Slog.e:(Ljava/lang/String;Ljava/lang/String;)I
            pop
         8: .line 176
      StackMap locals:
      StackMap stack:
            iload 3 /* index */
            ireturn
        end local 3 // int index
        end local 2 // android.util.MemoryIntArray backingStore
        end local 1 // android.util.SparseIntArray keyToIndexMap
        end local 0 // int key
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    9     0            key  I
            0    9     1  keyToIndexMap  Landroid/util/SparseIntArray;
            0    9     2   backingStore  Landroid/util/MemoryIntArray;
            1    9     3          index  I
    Exceptions:
      throws java.io.IOException
    MethodParameters:
               Name  Flags
      key            
      keyToIndexMap  
      backingStore   

  private static int findNextEmptyIndex(android.util.MemoryIntArray);
    descriptor: (Landroid/util/MemoryIntArray;)I
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=3, args_size=1
        start local 0 // android.util.MemoryIntArray backingStore
         0: .line 180
            aload 0 /* backingStore */
            invokevirtual android.util.MemoryIntArray.size:()I
            istore 1 /* size */
        start local 1 // int size
         1: .line 181
            iconst_0
            istore 2 /* i */
        start local 2 // int i
         2: goto 6
         3: .line 182
      StackMap locals: int int
      StackMap stack:
            aload 0 /* backingStore */
            iload 2 /* i */
            invokevirtual android.util.MemoryIntArray.get:(I)I
            ifne 5
         4: .line 183
            iload 2 /* i */
            ireturn
         5: .line 181
      StackMap locals:
      StackMap stack:
            iinc 2 /* i */ 1
      StackMap locals:
      StackMap stack:
         6: iload 2 /* i */
            iload 1 /* size */
            if_icmplt 3
        end local 2 // int i
         7: .line 186
            iconst_m1
            ireturn
        end local 1 // int size
        end local 0 // android.util.MemoryIntArray backingStore
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    8     0  backingStore  Landroid/util/MemoryIntArray;
            1    8     1          size  I
            2    7     2             i  I
    Exceptions:
      throws java.io.IOException
    MethodParameters:
              Name  Flags
      backingStore  
}
SourceFile: "GenerationRegistry.java"