public class org.mongodb.morphia.DatastoreImpl implements org.mongodb.morphia.AdvancedDatastore
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.mongodb.morphia.DatastoreImpl
  super_class: java.lang.Object
{
  private static final org.mongodb.morphia.logging.Logger LOG;
    descriptor: Lorg/mongodb/morphia/logging/Logger;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private final org.mongodb.morphia.Morphia morphia;
    descriptor: Lorg/mongodb/morphia/Morphia;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final com.mongodb.MongoClient mongoClient;
    descriptor: Lcom/mongodb/MongoClient;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final com.mongodb.client.MongoDatabase database;
    descriptor: Lcom/mongodb/client/MongoDatabase;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final org.mongodb.morphia.IndexHelper indexHelper;
    descriptor: Lorg/mongodb/morphia/IndexHelper;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private com.mongodb.DB db;
    descriptor: Lcom/mongodb/DB;
    flags: (0x0002) ACC_PRIVATE

  private org.mongodb.morphia.mapping.Mapper mapper;
    descriptor: Lorg/mongodb/morphia/mapping/Mapper;
    flags: (0x0002) ACC_PRIVATE

  private com.mongodb.WriteConcern defConcern;
    descriptor: Lcom/mongodb/WriteConcern;
    flags: (0x0002) ACC_PRIVATE

  private com.mongodb.DBDecoderFactory decoderFactory;
    descriptor: Lcom/mongodb/DBDecoderFactory;
    flags: (0x0002) ACC_PRIVATE

  private volatile org.mongodb.morphia.query.QueryFactory queryFactory;
    descriptor: Lorg/mongodb/morphia/query/QueryFactory;
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 75
            ldc Lorg/mongodb/morphia/DatastoreImpl;
            invokestatic org.mongodb.morphia.logging.MorphiaLoggerFactory.get:(Ljava/lang/Class;)Lorg/mongodb/morphia/logging/Logger;
            putstatic org.mongodb.morphia.DatastoreImpl.LOG:Lorg/mongodb/morphia/logging/Logger;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>(org.mongodb.morphia.Morphia, com.mongodb.MongoClient, java.lang.String);
    descriptor: (Lorg/mongodb/morphia/Morphia;Lcom/mongodb/MongoClient;Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=4, args_size=4
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.Morphia morphia
        start local 2 // com.mongodb.MongoClient mongoClient
        start local 3 // java.lang.String dbName
         0: .line 99
            aload 0 /* this */
            aload 1 /* morphia */
            aload 1 /* morphia */
            invokevirtual org.mongodb.morphia.Morphia.getMapper:()Lorg/mongodb/morphia/mapping/Mapper;
            aload 2 /* mongoClient */
            aload 3 /* dbName */
            invokespecial org.mongodb.morphia.DatastoreImpl.<init>:(Lorg/mongodb/morphia/Morphia;Lorg/mongodb/morphia/mapping/Mapper;Lcom/mongodb/MongoClient;Ljava/lang/String;)V
         1: .line 100
            return
        end local 3 // java.lang.String dbName
        end local 2 // com.mongodb.MongoClient mongoClient
        end local 1 // org.mongodb.morphia.Morphia morphia
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    2     0         this  Lorg/mongodb/morphia/DatastoreImpl;
            0    2     1      morphia  Lorg/mongodb/morphia/Morphia;
            0    2     2  mongoClient  Lcom/mongodb/MongoClient;
            0    2     3       dbName  Ljava/lang/String;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
             Name  Flags
      morphia      final
      mongoClient  final
      dbName       final

  public void <init>(org.mongodb.morphia.Morphia, org.mongodb.morphia.mapping.Mapper, com.mongodb.MongoClient, java.lang.String);
    descriptor: (Lorg/mongodb/morphia/Morphia;Lorg/mongodb/morphia/mapping/Mapper;Lcom/mongodb/MongoClient;Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=5, args_size=5
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.Morphia morphia
        start local 2 // org.mongodb.morphia.mapping.Mapper mapper
        start local 3 // com.mongodb.MongoClient mongoClient
        start local 4 // java.lang.String dbName
         0: .line 114
            aload 0 /* this */
            aload 1 /* morphia */
            aload 2 /* mapper */
            aload 3 /* mongoClient */
            aload 3 /* mongoClient */
            aload 4 /* dbName */
            invokevirtual com.mongodb.MongoClient.getDatabase:(Ljava/lang/String;)Lcom/mongodb/client/MongoDatabase;
            invokespecial org.mongodb.morphia.DatastoreImpl.<init>:(Lorg/mongodb/morphia/Morphia;Lorg/mongodb/morphia/mapping/Mapper;Lcom/mongodb/MongoClient;Lcom/mongodb/client/MongoDatabase;)V
         1: .line 115
            return
        end local 4 // java.lang.String dbName
        end local 3 // com.mongodb.MongoClient mongoClient
        end local 2 // org.mongodb.morphia.mapping.Mapper mapper
        end local 1 // org.mongodb.morphia.Morphia morphia
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    2     0         this  Lorg/mongodb/morphia/DatastoreImpl;
            0    2     1      morphia  Lorg/mongodb/morphia/Morphia;
            0    2     2       mapper  Lorg/mongodb/morphia/mapping/Mapper;
            0    2     3  mongoClient  Lcom/mongodb/MongoClient;
            0    2     4       dbName  Ljava/lang/String;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
             Name  Flags
      morphia      final
      mapper       final
      mongoClient  final
      dbName       final

  private void <init>(org.mongodb.morphia.Morphia, org.mongodb.morphia.mapping.Mapper, com.mongodb.MongoClient, com.mongodb.client.MongoDatabase);
    descriptor: (Lorg/mongodb/morphia/Morphia;Lorg/mongodb/morphia/mapping/Mapper;Lcom/mongodb/MongoClient;Lcom/mongodb/client/MongoDatabase;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=5, args_size=5
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.Morphia morphia
        start local 2 // org.mongodb.morphia.mapping.Mapper mapper
        start local 3 // com.mongodb.MongoClient mongoClient
        start local 4 // com.mongodb.client.MongoDatabase database
         0: .line 117
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 86
            aload 0 /* this */
            new org.mongodb.morphia.query.DefaultQueryFactory
            dup
            invokespecial org.mongodb.morphia.query.DefaultQueryFactory.<init>:()V
            putfield org.mongodb.morphia.DatastoreImpl.queryFactory:Lorg/mongodb/morphia/query/QueryFactory;
         2: .line 118
            aload 0 /* this */
            aload 1 /* morphia */
            putfield org.mongodb.morphia.DatastoreImpl.morphia:Lorg/mongodb/morphia/Morphia;
         3: .line 119
            aload 0 /* this */
            aload 2 /* mapper */
            putfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
         4: .line 120
            aload 0 /* this */
            aload 3 /* mongoClient */
            putfield org.mongodb.morphia.DatastoreImpl.mongoClient:Lcom/mongodb/MongoClient;
         5: .line 121
            aload 0 /* this */
            aload 4 /* database */
            putfield org.mongodb.morphia.DatastoreImpl.database:Lcom/mongodb/client/MongoDatabase;
         6: .line 122
            aload 0 /* this */
            aload 3 /* mongoClient */
            aload 4 /* database */
            invokeinterface com.mongodb.client.MongoDatabase.getName:()Ljava/lang/String;
            invokevirtual com.mongodb.MongoClient.getDB:(Ljava/lang/String;)Lcom/mongodb/DB;
            putfield org.mongodb.morphia.DatastoreImpl.db:Lcom/mongodb/DB;
         7: .line 123
            aload 0 /* this */
            aload 3 /* mongoClient */
            invokevirtual com.mongodb.MongoClient.getWriteConcern:()Lcom/mongodb/WriteConcern;
            putfield org.mongodb.morphia.DatastoreImpl.defConcern:Lcom/mongodb/WriteConcern;
         8: .line 124
            aload 0 /* this */
            new org.mongodb.morphia.IndexHelper
            dup
            aload 2 /* mapper */
            aload 4 /* database */
            invokespecial org.mongodb.morphia.IndexHelper.<init>:(Lorg/mongodb/morphia/mapping/Mapper;Lcom/mongodb/client/MongoDatabase;)V
            putfield org.mongodb.morphia.DatastoreImpl.indexHelper:Lorg/mongodb/morphia/IndexHelper;
         9: .line 125
            return
        end local 4 // com.mongodb.client.MongoDatabase database
        end local 3 // com.mongodb.MongoClient mongoClient
        end local 2 // org.mongodb.morphia.mapping.Mapper mapper
        end local 1 // org.mongodb.morphia.Morphia morphia
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   10     0         this  Lorg/mongodb/morphia/DatastoreImpl;
            0   10     1      morphia  Lorg/mongodb/morphia/Morphia;
            0   10     2       mapper  Lorg/mongodb/morphia/mapping/Mapper;
            0   10     3  mongoClient  Lcom/mongodb/MongoClient;
            0   10     4     database  Lcom/mongodb/client/MongoDatabase;
    MethodParameters:
             Name  Flags
      morphia      final
      mapper       final
      mongoClient  final
      database     final

  public org.mongodb.morphia.DatastoreImpl copy(java.lang.String);
    descriptor: (Ljava/lang/String;)Lorg/mongodb/morphia/DatastoreImpl;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.String database
         0: .line 136
            new org.mongodb.morphia.DatastoreImpl
            dup
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.morphia:Lorg/mongodb/morphia/Morphia;
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mongoClient:Lcom/mongodb/MongoClient;
            aload 1 /* database */
            invokespecial org.mongodb.morphia.DatastoreImpl.<init>:(Lorg/mongodb/morphia/Morphia;Lorg/mongodb/morphia/mapping/Mapper;Lcom/mongodb/MongoClient;Ljava/lang/String;)V
            areturn
        end local 1 // java.lang.String database
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0      this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  database  Ljava/lang/String;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
          Name  Flags
      database  final

  public org.mongodb.morphia.aggregation.AggregationPipeline createAggregation(java.lang.Class);
    descriptor: (Ljava/lang/Class;)Lorg/mongodb/morphia/aggregation/AggregationPipeline;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Class source
         0: .line 145
            new org.mongodb.morphia.aggregation.AggregationPipelineImpl
            dup
            aload 0 /* this */
            aload 0 /* this */
            aload 1 /* source */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getCollection:(Ljava/lang/Class;)Lcom/mongodb/DBCollection;
            aload 1 /* source */
            invokespecial org.mongodb.morphia.aggregation.AggregationPipelineImpl.<init>:(Lorg/mongodb/morphia/DatastoreImpl;Lcom/mongodb/DBCollection;Ljava/lang/Class;)V
            areturn
        end local 1 // java.lang.Class source
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0    this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  source  Ljava/lang/Class;
    MethodParameters:
        Name  Flags
      source  final

  public org.mongodb.morphia.aggregation.AggregationPipeline createAggregation(java.lang.String, java.lang.Class<?>);
    descriptor: (Ljava/lang/String;Ljava/lang/Class;)Lorg/mongodb/morphia/aggregation/AggregationPipeline;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.String collection
        start local 2 // java.lang.Class clazz
         0: .line 150
            new org.mongodb.morphia.aggregation.AggregationPipelineImpl
            dup
            aload 0 /* this */
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getDB:()Lcom/mongodb/DB;
            aload 1 /* collection */
            invokevirtual com.mongodb.DB.getCollection:(Ljava/lang/String;)Lcom/mongodb/DBCollection;
            aload 2 /* clazz */
            invokespecial org.mongodb.morphia.aggregation.AggregationPipelineImpl.<init>:(Lorg/mongodb/morphia/DatastoreImpl;Lcom/mongodb/DBCollection;Ljava/lang/Class;)V
            areturn
        end local 2 // java.lang.Class clazz
        end local 1 // java.lang.String collection
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    1     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  collection  Ljava/lang/String;
            0    1     2       clazz  Ljava/lang/Class<*>;
    Signature: (Ljava/lang/String;Ljava/lang/Class<*>;)Lorg/mongodb/morphia/aggregation/AggregationPipeline;
    MethodParameters:
            Name  Flags
      collection  final
      clazz       final

  public <T> org.mongodb.morphia.query.Query<T> createQuery(java.lang.Class<T>);
    descriptor: (Ljava/lang/Class;)Lorg/mongodb/morphia/query/Query;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Class collection
         0: .line 155
            aload 0 /* this */
            aload 1 /* collection */
            aload 0 /* this */
            aload 1 /* collection */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getCollection:(Ljava/lang/Class;)Lcom/mongodb/DBCollection;
            invokevirtual org.mongodb.morphia.DatastoreImpl.newQuery:(Ljava/lang/Class;Lcom/mongodb/DBCollection;)Lorg/mongodb/morphia/query/Query;
            areturn
        end local 1 // java.lang.Class collection
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    1     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  collection  Ljava/lang/Class<TT;>;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;)Lorg/mongodb/morphia/query/Query<TT;>;
    MethodParameters:
            Name  Flags
      collection  final

  public <T> org.mongodb.morphia.query.UpdateOperations<T> createUpdateOperations(java.lang.Class<T>);
    descriptor: (Ljava/lang/Class;)Lorg/mongodb/morphia/query/UpdateOperations;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Class clazz
         0: .line 160
            new org.mongodb.morphia.query.UpdateOpsImpl
            dup
            aload 1 /* clazz */
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getMapper:()Lorg/mongodb/morphia/mapping/Mapper;
            invokespecial org.mongodb.morphia.query.UpdateOpsImpl.<init>:(Ljava/lang/Class;Lorg/mongodb/morphia/mapping/Mapper;)V
            areturn
        end local 1 // java.lang.Class clazz
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0   this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  clazz  Ljava/lang/Class<TT;>;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;)Lorg/mongodb/morphia/query/UpdateOperations<TT;>;
    MethodParameters:
       Name  Flags
      clazz  final

  public <T> com.mongodb.WriteResult delete(org.mongodb.morphia.query.Query<T>, org.mongodb.morphia.DeleteOptions);
    descriptor: (Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/DeleteOptions;)Lcom/mongodb/WriteResult;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=4, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.query.Query query
        start local 2 // org.mongodb.morphia.DeleteOptions options
         0: .line 166
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getCollection:()Lcom/mongodb/DBCollection;
            astore 3 /* dbColl */
        start local 3 // com.mongodb.DBCollection dbColl
         1: .line 168
            aload 3 /* dbColl */
            ifnonnull 3
         2: .line 169
            aload 0 /* this */
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getEntityClass:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.DatastoreImpl.getCollection:(Ljava/lang/Class;)Lcom/mongodb/DBCollection;
            astore 3 /* dbColl */
         3: .line 172
      StackMap locals: com.mongodb.DBCollection
      StackMap stack:
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getSortObject:()Lcom/mongodb/DBObject;
            ifnonnull 4
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getOffset:()I
            ifne 4
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getLimit:()I
            ifle 5
         4: .line 173
      StackMap locals:
      StackMap stack:
            new org.mongodb.morphia.query.QueryException
            dup
            ldc "Delete does not allow sort/offset/limit query options."
            invokespecial org.mongodb.morphia.query.QueryException.<init>:(Ljava/lang/String;)V
            athrow
         5: .line 176
      StackMap locals:
      StackMap stack:
            aload 3 /* dbColl */
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getQueryObject:()Lcom/mongodb/DBObject;
            aload 0 /* this */
            aload 2 /* options */
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getEntityClass:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.DatastoreImpl.enforceWriteConcern:(Lorg/mongodb/morphia/DeleteOptions;Ljava/lang/Class;)Lorg/mongodb/morphia/DeleteOptions;
            invokevirtual org.mongodb.morphia.DeleteOptions.getOptions:()Lcom/mongodb/client/model/DBCollectionRemoveOptions;
            invokevirtual com.mongodb.DBCollection.remove:(Lcom/mongodb/DBObject;Lcom/mongodb/client/model/DBCollectionRemoveOptions;)Lcom/mongodb/WriteResult;
            areturn
        end local 3 // com.mongodb.DBCollection dbColl
        end local 2 // org.mongodb.morphia.DeleteOptions options
        end local 1 // org.mongodb.morphia.query.Query query
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    6     0     this  Lorg/mongodb/morphia/DatastoreImpl;
            0    6     1    query  Lorg/mongodb/morphia/query/Query<TT;>;
            0    6     2  options  Lorg/mongodb/morphia/DeleteOptions;
            1    6     3   dbColl  Lcom/mongodb/DBCollection;
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/query/Query<TT;>;Lorg/mongodb/morphia/DeleteOptions;)Lcom/mongodb/WriteResult;
    MethodParameters:
         Name  Flags
      query    final
      options  final

  public <T, V> com.mongodb.WriteResult delete(java.lang.Class<T>, V);
    descriptor: (Ljava/lang/Class;Ljava/lang/Object;)Lcom/mongodb/WriteResult;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Class clazz
        start local 2 // java.lang.Object id
         0: .line 181
            aload 0 /* this */
            aload 1 /* clazz */
            aload 2 /* id */
            new org.mongodb.morphia.DeleteOptions
            dup
            invokespecial org.mongodb.morphia.DeleteOptions.<init>:()V
            aload 0 /* this */
            aload 1 /* clazz */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getWriteConcern:(Ljava/lang/Object;)Lcom/mongodb/WriteConcern;
            invokevirtual org.mongodb.morphia.DeleteOptions.writeConcern:(Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/DeleteOptions;
            invokevirtual org.mongodb.morphia.DatastoreImpl.delete:(Ljava/lang/Class;Ljava/lang/Object;Lorg/mongodb/morphia/DeleteOptions;)Lcom/mongodb/WriteResult;
            areturn
        end local 2 // java.lang.Object id
        end local 1 // java.lang.Class clazz
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0   this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  clazz  Ljava/lang/Class<TT;>;
            0    1     2     id  TV;
    Signature: <T:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;TV;)Lcom/mongodb/WriteResult;
    MethodParameters:
       Name  Flags
      clazz  final
      id     final

  public <T, V> com.mongodb.WriteResult delete(java.lang.Class<T>, V, org.mongodb.morphia.DeleteOptions);
    descriptor: (Ljava/lang/Class;Ljava/lang/Object;Lorg/mongodb/morphia/DeleteOptions;)Lcom/mongodb/WriteResult;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Class clazz
        start local 2 // java.lang.Object id
        start local 3 // org.mongodb.morphia.DeleteOptions options
         0: .line 186
            aload 0 /* this */
            aload 0 /* this */
            aload 1 /* clazz */
            invokevirtual org.mongodb.morphia.DatastoreImpl.createQuery:(Ljava/lang/Class;)Lorg/mongodb/morphia/query/Query;
            ldc "_id"
            aload 2 /* id */
            invokeinterface org.mongodb.morphia.query.Query.filter:(Ljava/lang/String;Ljava/lang/Object;)Lorg/mongodb/morphia/query/Query;
            aload 3 /* options */
            invokevirtual org.mongodb.morphia.DatastoreImpl.delete:(Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/DeleteOptions;)Lcom/mongodb/WriteResult;
            areturn
        end local 3 // org.mongodb.morphia.DeleteOptions options
        end local 2 // java.lang.Object id
        end local 1 // java.lang.Class clazz
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0     this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1    clazz  Ljava/lang/Class<TT;>;
            0    1     2       id  TV;
            0    1     3  options  Lorg/mongodb/morphia/DeleteOptions;
    Signature: <T:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;TV;Lorg/mongodb/morphia/DeleteOptions;)Lcom/mongodb/WriteResult;
    MethodParameters:
         Name  Flags
      clazz    final
      id       final
      options  final

  public <T, V> com.mongodb.WriteResult delete(java.lang.Class<T>, java.lang.Iterable<V>);
    descriptor: (Ljava/lang/Class;Ljava/lang/Iterable;)Lcom/mongodb/WriteResult;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Class clazz
        start local 2 // java.lang.Iterable ids
         0: .line 191
            aload 0 /* this */
            aload 0 /* this */
            aload 1 /* clazz */
            invokevirtual org.mongodb.morphia.DatastoreImpl.find:(Ljava/lang/Class;)Lorg/mongodb/morphia/query/Query;
            ldc "_id in"
            aload 2 /* ids */
            invokeinterface org.mongodb.morphia.query.Query.filter:(Ljava/lang/String;Ljava/lang/Object;)Lorg/mongodb/morphia/query/Query;
            invokevirtual org.mongodb.morphia.DatastoreImpl.delete:(Lorg/mongodb/morphia/query/Query;)Lcom/mongodb/WriteResult;
            areturn
        end local 2 // java.lang.Iterable ids
        end local 1 // java.lang.Class clazz
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0   this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  clazz  Ljava/lang/Class<TT;>;
            0    1     2    ids  Ljava/lang/Iterable<TV;>;
    Signature: <T:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;Ljava/lang/Iterable<TV;>;)Lcom/mongodb/WriteResult;
    MethodParameters:
       Name  Flags
      clazz  final
      ids    final

  public <T, V> com.mongodb.WriteResult delete(java.lang.Class<T>, java.lang.Iterable<V>, org.mongodb.morphia.DeleteOptions);
    descriptor: (Ljava/lang/Class;Ljava/lang/Iterable;Lorg/mongodb/morphia/DeleteOptions;)Lcom/mongodb/WriteResult;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Class clazz
        start local 2 // java.lang.Iterable ids
        start local 3 // org.mongodb.morphia.DeleteOptions options
         0: .line 196
            aload 0 /* this */
            aload 0 /* this */
            aload 1 /* clazz */
            invokevirtual org.mongodb.morphia.DatastoreImpl.find:(Ljava/lang/Class;)Lorg/mongodb/morphia/query/Query;
            ldc "_id in"
            aload 2 /* ids */
            invokeinterface org.mongodb.morphia.query.Query.filter:(Ljava/lang/String;Ljava/lang/Object;)Lorg/mongodb/morphia/query/Query;
            aload 3 /* options */
            invokevirtual org.mongodb.morphia.DatastoreImpl.delete:(Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/DeleteOptions;)Lcom/mongodb/WriteResult;
            areturn
        end local 3 // org.mongodb.morphia.DeleteOptions options
        end local 2 // java.lang.Iterable ids
        end local 1 // java.lang.Class clazz
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0     this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1    clazz  Ljava/lang/Class<TT;>;
            0    1     2      ids  Ljava/lang/Iterable<TV;>;
            0    1     3  options  Lorg/mongodb/morphia/DeleteOptions;
    Signature: <T:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;Ljava/lang/Iterable<TV;>;Lorg/mongodb/morphia/DeleteOptions;)Lcom/mongodb/WriteResult;
    MethodParameters:
         Name  Flags
      clazz    final
      ids      final
      options  final

  public <T> com.mongodb.WriteResult delete(org.mongodb.morphia.query.Query<T>);
    descriptor: (Lorg/mongodb/morphia/query/Query;)Lcom/mongodb/WriteResult;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.query.Query query
         0: .line 201
            aload 0 /* this */
            aload 1 /* query */
            new org.mongodb.morphia.DeleteOptions
            dup
            invokespecial org.mongodb.morphia.DeleteOptions.<init>:()V
            aload 0 /* this */
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getEntityClass:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.DatastoreImpl.getWriteConcern:(Ljava/lang/Object;)Lcom/mongodb/WriteConcern;
            invokevirtual org.mongodb.morphia.DeleteOptions.writeConcern:(Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/DeleteOptions;
            invokevirtual org.mongodb.morphia.DatastoreImpl.delete:(Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/DeleteOptions;)Lcom/mongodb/WriteResult;
            areturn
        end local 1 // org.mongodb.morphia.query.Query query
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0   this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  query  Lorg/mongodb/morphia/query/Query<TT;>;
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/query/Query<TT;>;)Lcom/mongodb/WriteResult;
    MethodParameters:
       Name  Flags
      query  final

  public <T> com.mongodb.WriteResult delete(org.mongodb.morphia.query.Query<T>, com.mongodb.WriteConcern);
    descriptor: (Lorg/mongodb/morphia/query/Query;Lcom/mongodb/WriteConcern;)Lcom/mongodb/WriteResult;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.query.Query query
        start local 2 // com.mongodb.WriteConcern wc
         0: .line 207
            aload 0 /* this */
            aload 1 /* query */
            new org.mongodb.morphia.DeleteOptions
            dup
            invokespecial org.mongodb.morphia.DeleteOptions.<init>:()V
            aload 2 /* wc */
            invokevirtual org.mongodb.morphia.DeleteOptions.writeConcern:(Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/DeleteOptions;
            invokevirtual org.mongodb.morphia.DatastoreImpl.delete:(Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/DeleteOptions;)Lcom/mongodb/WriteResult;
            areturn
        end local 2 // com.mongodb.WriteConcern wc
        end local 1 // org.mongodb.morphia.query.Query query
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0   this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  query  Lorg/mongodb/morphia/query/Query<TT;>;
            0    1     2     wc  Lcom/mongodb/WriteConcern;
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/query/Query<TT;>;Lcom/mongodb/WriteConcern;)Lcom/mongodb/WriteResult;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
       Name  Flags
      query  final
      wc     final

  public <T> com.mongodb.WriteResult delete(T);
    descriptor: (Ljava/lang/Object;)Lcom/mongodb/WriteResult;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Object entity
         0: .line 212
            aload 0 /* this */
            aload 1 /* entity */
            aload 0 /* this */
            aload 1 /* entity */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getWriteConcern:(Ljava/lang/Object;)Lcom/mongodb/WriteConcern;
            invokevirtual org.mongodb.morphia.DatastoreImpl.delete:(Ljava/lang/Object;Lcom/mongodb/WriteConcern;)Lcom/mongodb/WriteResult;
            areturn
        end local 1 // java.lang.Object entity
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0    this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  entity  TT;
    Signature: <T:Ljava/lang/Object;>(TT;)Lcom/mongodb/WriteResult;
    MethodParameters:
        Name  Flags
      entity  final

  public <T> com.mongodb.WriteResult delete(T, org.mongodb.morphia.DeleteOptions);
    descriptor: (Ljava/lang/Object;Lorg/mongodb/morphia/DeleteOptions;)Lcom/mongodb/WriteResult;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=5, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Object entity
        start local 2 // org.mongodb.morphia.DeleteOptions options
         0: .line 224
            aload 1 /* entity */
            invokestatic org.mongodb.morphia.mapping.lazy.proxy.ProxyHelper.unwrap:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 3 /* wrapped */
        start local 3 // java.lang.Object wrapped
         1: .line 225
            aload 3 /* wrapped */
            instanceof java.lang.Class
            ifeq 3
         2: .line 226
            new org.mongodb.morphia.mapping.MappingException
            dup
            ldc "Did you mean to delete all documents? -- delete(ds.createQuery(???.class))"
            invokespecial org.mongodb.morphia.mapping.MappingException.<init>:(Ljava/lang/String;)V
            athrow
         3: .line 229
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 0 /* this */
            aload 3 /* wrapped */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 3 /* wrapped */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getId:(Ljava/lang/Object;)Ljava/lang/Object;
            aload 2 /* options */
            invokevirtual org.mongodb.morphia.DatastoreImpl.delete:(Ljava/lang/Class;Ljava/lang/Object;Lorg/mongodb/morphia/DeleteOptions;)Lcom/mongodb/WriteResult;
         4: areturn
         5: .line 230
      StackMap locals:
      StackMap stack: java.lang.Exception
            astore 4 /* e */
        start local 4 // java.lang.Exception e
         6: .line 231
            new java.lang.RuntimeException
            dup
            aload 4 /* e */
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 4 // java.lang.Exception e
        end local 3 // java.lang.Object wrapped
        end local 2 // org.mongodb.morphia.DeleteOptions options
        end local 1 // java.lang.Object entity
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    7     0     this  Lorg/mongodb/morphia/DatastoreImpl;
            0    7     1   entity  TT;
            0    7     2  options  Lorg/mongodb/morphia/DeleteOptions;
            1    7     3  wrapped  TT;
            6    7     4        e  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
           3     4       5  Class java.lang.Exception
    Signature: <T:Ljava/lang/Object;>(TT;Lorg/mongodb/morphia/DeleteOptions;)Lcom/mongodb/WriteResult;
    MethodParameters:
         Name  Flags
      entity   final
      options  final

  public <T> com.mongodb.WriteResult delete(T, com.mongodb.WriteConcern);
    descriptor: (Ljava/lang/Object;Lcom/mongodb/WriteConcern;)Lcom/mongodb/WriteResult;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Object entity
        start local 2 // com.mongodb.WriteConcern wc
         0: .line 238
            aload 0 /* this */
            aload 1 /* entity */
            new org.mongodb.morphia.DeleteOptions
            dup
            invokespecial org.mongodb.morphia.DeleteOptions.<init>:()V
            aload 2 /* wc */
            invokevirtual org.mongodb.morphia.DeleteOptions.writeConcern:(Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/DeleteOptions;
            invokevirtual org.mongodb.morphia.DatastoreImpl.delete:(Ljava/lang/Object;Lorg/mongodb/morphia/DeleteOptions;)Lcom/mongodb/WriteResult;
            areturn
        end local 2 // com.mongodb.WriteConcern wc
        end local 1 // java.lang.Object entity
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0    this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  entity  TT;
            0    1     2      wc  Lcom/mongodb/WriteConcern;
    Signature: <T:Ljava/lang/Object;>(TT;Lcom/mongodb/WriteConcern;)Lcom/mongodb/WriteResult;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
        Name  Flags
      entity  final
      wc      final

  public void ensureCaps();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=8, args_size=1
        start local 0 // org.mongodb.morphia.DatastoreImpl this
         0: .line 243
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClasses:()Ljava/util/Collection;
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 2
            goto 22
      StackMap locals: org.mongodb.morphia.DatastoreImpl top java.util.Iterator
      StackMap stack:
         1: aload 2
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.mongodb.morphia.mapping.MappedClass
            astore 1 /* mc */
        start local 1 // org.mongodb.morphia.mapping.MappedClass mc
         2: .line 244
            aload 1 /* mc */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getEntityAnnotation:()Lorg/mongodb/morphia/annotations/Entity;
            ifnull 22
            aload 1 /* mc */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getEntityAnnotation:()Lorg/mongodb/morphia/annotations/Entity;
            invokeinterface org.mongodb.morphia.annotations.Entity.cap:()Lorg/mongodb/morphia/annotations/CappedAt;
            invokeinterface org.mongodb.morphia.annotations.CappedAt.value:()J
            lconst_0
            lcmp
            ifle 22
         3: .line 245
            aload 1 /* mc */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getEntityAnnotation:()Lorg/mongodb/morphia/annotations/Entity;
            invokeinterface org.mongodb.morphia.annotations.Entity.cap:()Lorg/mongodb/morphia/annotations/CappedAt;
            astore 3 /* cap */
        start local 3 // org.mongodb.morphia.annotations.CappedAt cap
         4: .line 246
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 1 /* mc */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getClazz:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.mapping.Mapper.getCollectionName:(Ljava/lang/Object;)Ljava/lang/String;
            astore 4 /* collName */
        start local 4 // java.lang.String collName
         5: .line 247
            ldc "capped"
            iconst_1
            invokestatic java.lang.Boolean.valueOf:(Z)Ljava/lang/Boolean;
            invokestatic com.mongodb.BasicDBObjectBuilder.start:(Ljava/lang/String;Ljava/lang/Object;)Lcom/mongodb/BasicDBObjectBuilder;
            astore 5 /* dbCapOpts */
        start local 5 // com.mongodb.BasicDBObjectBuilder dbCapOpts
         6: .line 248
            aload 3 /* cap */
            invokeinterface org.mongodb.morphia.annotations.CappedAt.value:()J
            lconst_0
            lcmp
            ifle 8
         7: .line 249
            aload 5 /* dbCapOpts */
            ldc "size"
            aload 3 /* cap */
            invokeinterface org.mongodb.morphia.annotations.CappedAt.value:()J
            invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
            invokevirtual com.mongodb.BasicDBObjectBuilder.add:(Ljava/lang/String;Ljava/lang/Object;)Lcom/mongodb/BasicDBObjectBuilder;
            pop
         8: .line 251
      StackMap locals: org.mongodb.morphia.DatastoreImpl org.mongodb.morphia.mapping.MappedClass java.util.Iterator org.mongodb.morphia.annotations.CappedAt java.lang.String com.mongodb.BasicDBObjectBuilder
      StackMap stack:
            aload 3 /* cap */
            invokeinterface org.mongodb.morphia.annotations.CappedAt.count:()J
            lconst_0
            lcmp
            ifle 10
         9: .line 252
            aload 5 /* dbCapOpts */
            ldc "max"
            aload 3 /* cap */
            invokeinterface org.mongodb.morphia.annotations.CappedAt.count:()J
            invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
            invokevirtual com.mongodb.BasicDBObjectBuilder.add:(Ljava/lang/String;Ljava/lang/Object;)Lcom/mongodb/BasicDBObjectBuilder;
            pop
        10: .line 254
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getDB:()Lcom/mongodb/DB;
            astore 6 /* database */
        start local 6 // com.mongodb.DB database
        11: .line 255
            aload 6 /* database */
            invokevirtual com.mongodb.DB.getCollectionNames:()Ljava/util/Set;
            aload 4 /* collName */
            invokeinterface java.util.Set.contains:(Ljava/lang/Object;)Z
            ifeq 20
        12: .line 256
            aload 6 /* database */
            ldc "collstats"
            aload 4 /* collName */
            invokestatic com.mongodb.BasicDBObjectBuilder.start:(Ljava/lang/String;Ljava/lang/Object;)Lcom/mongodb/BasicDBObjectBuilder;
            invokevirtual com.mongodb.BasicDBObjectBuilder.get:()Lcom/mongodb/DBObject;
            invokevirtual com.mongodb.DB.command:(Lcom/mongodb/DBObject;)Lcom/mongodb/CommandResult;
            astore 7 /* dbResult */
        start local 7 // com.mongodb.DBObject dbResult
        13: .line 257
            aload 7 /* dbResult */
            ldc "capped"
            invokeinterface com.mongodb.DBObject.containsField:(Ljava/lang/String;)Z
            ifeq 16
        14: .line 258
            getstatic org.mongodb.morphia.DatastoreImpl.LOG:Lorg/mongodb/morphia/logging/Logger;
            new java.lang.StringBuilder
            dup
            ldc "DBCollection already exists and is capped already; doing nothing. "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 7 /* dbResult */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.mongodb.morphia.logging.Logger.debug:(Ljava/lang/String;)V
        15: .line 259
            goto 22
        16: .line 260
      StackMap locals: com.mongodb.DB com.mongodb.DBObject
      StackMap stack:
            getstatic org.mongodb.morphia.DatastoreImpl.LOG:Lorg/mongodb/morphia/logging/Logger;
            new java.lang.StringBuilder
            dup
            ldc "DBCollection already exists with same name("
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 4 /* collName */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        17: .line 261
            ldc ") and is not capped; not creating capped version!"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        18: .line 260
            invokeinterface org.mongodb.morphia.logging.Logger.warning:(Ljava/lang/String;)V
        end local 7 // com.mongodb.DBObject dbResult
        19: .line 263
            goto 22
        20: .line 264
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getDB:()Lcom/mongodb/DB;
            aload 4 /* collName */
            aload 5 /* dbCapOpts */
            invokevirtual com.mongodb.BasicDBObjectBuilder.get:()Lcom/mongodb/DBObject;
            invokevirtual com.mongodb.DB.createCollection:(Ljava/lang/String;Lcom/mongodb/DBObject;)Lcom/mongodb/DBCollection;
            pop
        21: .line 265
            getstatic org.mongodb.morphia.DatastoreImpl.LOG:Lorg/mongodb/morphia/logging/Logger;
            new java.lang.StringBuilder
            dup
            ldc "Created capped DBCollection ("
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 4 /* collName */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc ") with opts "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 5 /* dbCapOpts */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.mongodb.morphia.logging.Logger.debug:(Ljava/lang/String;)V
        end local 6 // com.mongodb.DB database
        end local 5 // com.mongodb.BasicDBObjectBuilder dbCapOpts
        end local 4 // java.lang.String collName
        end local 3 // org.mongodb.morphia.annotations.CappedAt cap
        end local 1 // org.mongodb.morphia.mapping.MappedClass mc
        22: .line 243
      StackMap locals: org.mongodb.morphia.DatastoreImpl top java.util.Iterator
      StackMap stack:
            aload 2
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 1
        23: .line 269
            return
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   24     0       this  Lorg/mongodb/morphia/DatastoreImpl;
            2   22     1         mc  Lorg/mongodb/morphia/mapping/MappedClass;
            4   22     3        cap  Lorg/mongodb/morphia/annotations/CappedAt;
            5   22     4   collName  Ljava/lang/String;
            6   22     5  dbCapOpts  Lcom/mongodb/BasicDBObjectBuilder;
           11   22     6   database  Lcom/mongodb/DB;
           13   19     7   dbResult  Lcom/mongodb/DBObject;

  public void enableDocumentValidation();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=1
        start local 0 // org.mongodb.morphia.DatastoreImpl this
         0: .line 273
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClasses:()Ljava/util/Collection;
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 2
            goto 3
      StackMap locals: org.mongodb.morphia.DatastoreImpl top java.util.Iterator
      StackMap stack:
         1: aload 2
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.mongodb.morphia.mapping.MappedClass
            astore 1 /* mc */
        start local 1 // org.mongodb.morphia.mapping.MappedClass mc
         2: .line 274
            aload 0 /* this */
            aload 1 /* mc */
            aload 1 /* mc */
            ldc Lorg/mongodb/morphia/annotations/Validation;
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getAnnotation:(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;
            checkcast org.mongodb.morphia.annotations.Validation
            invokevirtual org.mongodb.morphia.DatastoreImpl.process:(Lorg/mongodb/morphia/mapping/MappedClass;Lorg/mongodb/morphia/annotations/Validation;)V
        end local 1 // org.mongodb.morphia.mapping.MappedClass mc
         3: .line 273
      StackMap locals:
      StackMap stack:
            aload 2
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 1
         4: .line 276
            return
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Lorg/mongodb/morphia/DatastoreImpl;
            2    3     1    mc  Lorg/mongodb/morphia/mapping/MappedClass;

  void process(org.mongodb.morphia.mapping.MappedClass, org.mongodb.morphia.annotations.Validation);
    descriptor: (Lorg/mongodb/morphia/mapping/MappedClass;Lorg/mongodb/morphia/annotations/Validation;)V
    flags: (0x0000) 
    Code:
      stack=5, locals=6, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.mapping.MappedClass mc
        start local 2 // org.mongodb.morphia.annotations.Validation validation
         0: .line 279
            aload 2 /* validation */
            ifnull 19
         1: .line 280
            aload 1 /* mc */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getCollectionName:()Ljava/lang/String;
            astore 3 /* collectionName */
        start local 3 // java.lang.String collectionName
         2: .line 281
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getDB:()Lcom/mongodb/DB;
         3: .line 282
            new com.mongodb.BasicDBObject
            dup
            ldc "collMod"
            aload 3 /* collectionName */
            invokespecial com.mongodb.BasicDBObject.<init>:(Ljava/lang/String;Ljava/lang/Object;)V
         4: .line 283
            ldc "validator"
            aload 2 /* validation */
            invokeinterface org.mongodb.morphia.annotations.Validation.value:()Ljava/lang/String;
            invokestatic com.mongodb.BasicDBObject.parse:(Ljava/lang/String;)Lcom/mongodb/BasicDBObject;
            invokevirtual com.mongodb.BasicDBObject.append:(Ljava/lang/String;Ljava/lang/Object;)Lcom/mongodb/BasicDBObject;
         5: .line 284
            ldc "validationLevel"
            aload 2 /* validation */
            invokeinterface org.mongodb.morphia.annotations.Validation.level:()Lcom/mongodb/client/model/ValidationLevel;
            invokevirtual com.mongodb.client.model.ValidationLevel.getValue:()Ljava/lang/String;
            invokevirtual com.mongodb.BasicDBObject.append:(Ljava/lang/String;Ljava/lang/Object;)Lcom/mongodb/BasicDBObject;
         6: .line 285
            ldc "validationAction"
            aload 2 /* validation */
            invokeinterface org.mongodb.morphia.annotations.Validation.action:()Lcom/mongodb/client/model/ValidationAction;
            invokevirtual com.mongodb.client.model.ValidationAction.getValue:()Ljava/lang/String;
            invokevirtual com.mongodb.BasicDBObject.append:(Ljava/lang/String;Ljava/lang/Object;)Lcom/mongodb/BasicDBObject;
         7: .line 282
            invokevirtual com.mongodb.DB.command:(Lcom/mongodb/DBObject;)Lcom/mongodb/CommandResult;
         8: .line 281
            astore 4 /* result */
        start local 4 // com.mongodb.CommandResult result
         9: .line 288
            aload 4 /* result */
            invokevirtual com.mongodb.CommandResult.ok:()Z
            ifne 19
        10: .line 289
            aload 4 /* result */
            ldc "code"
            invokevirtual com.mongodb.CommandResult.getInt:(Ljava/lang/String;)I
            bipush 26
            if_icmpne 18
        11: .line 290
            new com.mongodb.client.model.ValidationOptions
            dup
            invokespecial com.mongodb.client.model.ValidationOptions.<init>:()V
        12: .line 291
            aload 2 /* validation */
            invokeinterface org.mongodb.morphia.annotations.Validation.value:()Ljava/lang/String;
            invokestatic com.mongodb.BasicDBObject.parse:(Ljava/lang/String;)Lcom/mongodb/BasicDBObject;
            invokevirtual com.mongodb.client.model.ValidationOptions.validator:(Lorg/bson/conversions/Bson;)Lcom/mongodb/client/model/ValidationOptions;
        13: .line 292
            aload 2 /* validation */
            invokeinterface org.mongodb.morphia.annotations.Validation.level:()Lcom/mongodb/client/model/ValidationLevel;
            invokevirtual com.mongodb.client.model.ValidationOptions.validationLevel:(Lcom/mongodb/client/model/ValidationLevel;)Lcom/mongodb/client/model/ValidationOptions;
        14: .line 293
            aload 2 /* validation */
            invokeinterface org.mongodb.morphia.annotations.Validation.action:()Lcom/mongodb/client/model/ValidationAction;
            invokevirtual com.mongodb.client.model.ValidationOptions.validationAction:(Lcom/mongodb/client/model/ValidationAction;)Lcom/mongodb/client/model/ValidationOptions;
        15: .line 290
            astore 5 /* options */
        start local 5 // com.mongodb.client.model.ValidationOptions options
        16: .line 294
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getDatabase:()Lcom/mongodb/client/MongoDatabase;
            aload 3 /* collectionName */
            new com.mongodb.client.model.CreateCollectionOptions
            dup
            invokespecial com.mongodb.client.model.CreateCollectionOptions.<init>:()V
            aload 5 /* options */
            invokevirtual com.mongodb.client.model.CreateCollectionOptions.validationOptions:(Lcom/mongodb/client/model/ValidationOptions;)Lcom/mongodb/client/model/CreateCollectionOptions;
            invokeinterface com.mongodb.client.MongoDatabase.createCollection:(Ljava/lang/String;Lcom/mongodb/client/model/CreateCollectionOptions;)V
        end local 5 // com.mongodb.client.model.ValidationOptions options
        17: .line 295
            goto 19
        18: .line 296
      StackMap locals: java.lang.String com.mongodb.CommandResult
      StackMap stack:
            aload 4 /* result */
            invokevirtual com.mongodb.CommandResult.throwOnError:()V
        end local 4 // com.mongodb.CommandResult result
        end local 3 // java.lang.String collectionName
        19: .line 300
      StackMap locals:
      StackMap stack:
            return
        end local 2 // org.mongodb.morphia.annotations.Validation validation
        end local 1 // org.mongodb.morphia.mapping.MappedClass mc
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   20     0            this  Lorg/mongodb/morphia/DatastoreImpl;
            0   20     1              mc  Lorg/mongodb/morphia/mapping/MappedClass;
            0   20     2      validation  Lorg/mongodb/morphia/annotations/Validation;
            2   19     3  collectionName  Ljava/lang/String;
            9   19     4          result  Lcom/mongodb/CommandResult;
           16   17     5         options  Lcom/mongodb/client/model/ValidationOptions;
    MethodParameters:
            Name  Flags
      mc          final
      validation  final

  public org.mongodb.morphia.Key<?> exists();
    descriptor: (Ljava/lang/Object;)Lorg/mongodb/morphia/Key;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Object entityOrKey
         0: .line 304
            aload 0 /* this */
            aload 1 /* entityOrKey */
            invokevirtual org.mongodb.morphia.DatastoreImpl.buildExistsQuery:(Ljava/lang/Object;)Lorg/mongodb/morphia/query/Query;
            astore 2 /* query */
        start local 2 // org.mongodb.morphia.query.Query query
         1: .line 305
            aload 2 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getKey:()Lorg/mongodb/morphia/Key;
            areturn
        end local 2 // org.mongodb.morphia.query.Query query
        end local 1 // java.lang.Object entityOrKey
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    2     0         this  Lorg/mongodb/morphia/DatastoreImpl;
            0    2     1  entityOrKey  Ljava/lang/Object;
            1    2     2        query  Lorg/mongodb/morphia/query/Query<*>;
    Signature: (Ljava/lang/Object;)Lorg/mongodb/morphia/Key<*>;
    MethodParameters:
             Name  Flags
      entityOrKey  final

  public <T> org.mongodb.morphia.query.Query<T> find(java.lang.Class<T>);
    descriptor: (Ljava/lang/Class;)Lorg/mongodb/morphia/query/Query;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Class clazz
         0: .line 310
            aload 0 /* this */
            aload 1 /* clazz */
            invokevirtual org.mongodb.morphia.DatastoreImpl.createQuery:(Ljava/lang/Class;)Lorg/mongodb/morphia/query/Query;
            areturn
        end local 1 // java.lang.Class clazz
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0   this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  clazz  Ljava/lang/Class<TT;>;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;)Lorg/mongodb/morphia/query/Query<TT;>;
    MethodParameters:
       Name  Flags
      clazz  final

  public <T, V> org.mongodb.morphia.query.Query<T> find(java.lang.Class<T>, java.lang.String, V);
    descriptor: (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;)Lorg/mongodb/morphia/query/Query;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=5, args_size=4
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Class clazz
        start local 2 // java.lang.String property
        start local 3 // java.lang.Object value
         0: .line 316
            aload 0 /* this */
            aload 1 /* clazz */
            invokevirtual org.mongodb.morphia.DatastoreImpl.createQuery:(Ljava/lang/Class;)Lorg/mongodb/morphia/query/Query;
            astore 4 /* query */
        start local 4 // org.mongodb.morphia.query.Query query
         1: .line 317
            aload 4 /* query */
            aload 2 /* property */
            aload 3 /* value */
            invokeinterface org.mongodb.morphia.query.Query.filter:(Ljava/lang/String;Ljava/lang/Object;)Lorg/mongodb/morphia/query/Query;
            areturn
        end local 4 // org.mongodb.morphia.query.Query query
        end local 3 // java.lang.Object value
        end local 2 // java.lang.String property
        end local 1 // java.lang.Class clazz
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     0      this  Lorg/mongodb/morphia/DatastoreImpl;
            0    2     1     clazz  Ljava/lang/Class<TT;>;
            0    2     2  property  Ljava/lang/String;
            0    2     3     value  TV;
            1    2     4     query  Lorg/mongodb/morphia/query/Query<TT;>;
    Signature: <T:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;Ljava/lang/String;TV;)Lorg/mongodb/morphia/query/Query<TT;>;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
          Name  Flags
      clazz     final
      property  final
      value     final

  public <T, V> org.mongodb.morphia.query.Query<T> find(java.lang.Class<T>, java.lang.String, V, int, int);
    descriptor: (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;II)Lorg/mongodb/morphia/query/Query;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=7, args_size=6
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Class clazz
        start local 2 // java.lang.String property
        start local 3 // java.lang.Object value
        start local 4 // int offset
        start local 5 // int size
         0: .line 323
            aload 0 /* this */
            aload 1 /* clazz */
            invokevirtual org.mongodb.morphia.DatastoreImpl.createQuery:(Ljava/lang/Class;)Lorg/mongodb/morphia/query/Query;
            astore 6 /* query */
        start local 6 // org.mongodb.morphia.query.Query query
         1: .line 324
            aload 6 /* query */
            iload 4 /* offset */
            invokeinterface org.mongodb.morphia.query.Query.offset:(I)Lorg/mongodb/morphia/query/Query;
            pop
         2: .line 325
            aload 6 /* query */
            iload 5 /* size */
            invokeinterface org.mongodb.morphia.query.Query.limit:(I)Lorg/mongodb/morphia/query/Query;
            pop
         3: .line 326
            aload 6 /* query */
            aload 2 /* property */
            aload 3 /* value */
            invokeinterface org.mongodb.morphia.query.Query.filter:(Ljava/lang/String;Ljava/lang/Object;)Lorg/mongodb/morphia/query/Query;
            areturn
        end local 6 // org.mongodb.morphia.query.Query query
        end local 5 // int size
        end local 4 // int offset
        end local 3 // java.lang.Object value
        end local 2 // java.lang.String property
        end local 1 // java.lang.Class clazz
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    4     0      this  Lorg/mongodb/morphia/DatastoreImpl;
            0    4     1     clazz  Ljava/lang/Class<TT;>;
            0    4     2  property  Ljava/lang/String;
            0    4     3     value  TV;
            0    4     4    offset  I
            0    4     5      size  I
            1    4     6     query  Lorg/mongodb/morphia/query/Query<TT;>;
    Signature: <T:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;Ljava/lang/String;TV;II)Lorg/mongodb/morphia/query/Query<TT;>;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
          Name  Flags
      clazz     final
      property  final
      value     final
      offset    final
      size      final

  public <T> T findAndDelete(org.mongodb.morphia.query.Query<T>);
    descriptor: (Lorg/mongodb/morphia/query/Query;)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.query.Query query
         0: .line 331
            aload 0 /* this */
            aload 1 /* query */
            new org.mongodb.morphia.FindAndModifyOptions
            dup
            invokespecial org.mongodb.morphia.FindAndModifyOptions.<init>:()V
            invokevirtual org.mongodb.morphia.DatastoreImpl.findAndDelete:(Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/FindAndModifyOptions;)Ljava/lang/Object;
            areturn
        end local 1 // org.mongodb.morphia.query.Query query
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0   this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  query  Lorg/mongodb/morphia/query/Query<TT;>;
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/query/Query<TT;>;)TT;
    MethodParameters:
       Name  Flags
      query  final

  public <T> T findAndDelete(org.mongodb.morphia.query.Query<T>, org.mongodb.morphia.FindAndModifyOptions);
    descriptor: (Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/FindAndModifyOptions;)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=6, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.query.Query query
        start local 2 // org.mongodb.morphia.FindAndModifyOptions options
         0: .line 336
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getCollection:()Lcom/mongodb/DBCollection;
            astore 3 /* dbColl */
        start local 3 // com.mongodb.DBCollection dbColl
         1: .line 337
            aload 3 /* dbColl */
            ifnonnull 3
         2: .line 338
            aload 0 /* this */
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getEntityClass:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.DatastoreImpl.getCollection:(Ljava/lang/Class;)Lcom/mongodb/DBCollection;
            astore 3 /* dbColl */
         3: .line 341
      StackMap locals: com.mongodb.DBCollection
      StackMap stack:
            getstatic org.mongodb.morphia.DatastoreImpl.LOG:Lorg/mongodb/morphia/logging/Logger;
            invokeinterface org.mongodb.morphia.logging.Logger.isTraceEnabled:()Z
            ifeq 5
         4: .line 342
            getstatic org.mongodb.morphia.DatastoreImpl.LOG:Lorg/mongodb/morphia/logging/Logger;
            new java.lang.StringBuilder
            dup
            ldc "Executing findAndModify("
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 3 /* dbColl */
            invokevirtual com.mongodb.DBCollection.getName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc ") with delete ..."
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.mongodb.morphia.logging.Logger.trace:(Ljava/lang/String;)V
         5: .line 345
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 2 /* options */
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getEntityClass:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.DatastoreImpl.enforceWriteConcern:(Lorg/mongodb/morphia/FindAndModifyOptions;Ljava/lang/Class;)Lorg/mongodb/morphia/FindAndModifyOptions;
         6: .line 346
            invokevirtual org.mongodb.morphia.FindAndModifyOptions.copy:()Lorg/mongodb/morphia/FindAndModifyOptions;
         7: .line 347
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getFieldsObject:()Lcom/mongodb/DBObject;
            invokevirtual org.mongodb.morphia.FindAndModifyOptions.projection:(Lcom/mongodb/DBObject;)Lorg/mongodb/morphia/FindAndModifyOptions;
         8: .line 348
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getSortObject:()Lcom/mongodb/DBObject;
            invokevirtual org.mongodb.morphia.FindAndModifyOptions.sort:(Lcom/mongodb/DBObject;)Lorg/mongodb/morphia/FindAndModifyOptions;
         9: .line 349
            iconst_0
            invokevirtual org.mongodb.morphia.FindAndModifyOptions.returnNew:(Z)Lorg/mongodb/morphia/FindAndModifyOptions;
        10: .line 350
            iconst_0
            invokevirtual org.mongodb.morphia.FindAndModifyOptions.upsert:(Z)Lorg/mongodb/morphia/FindAndModifyOptions;
        11: .line 351
            iconst_1
            invokevirtual org.mongodb.morphia.FindAndModifyOptions.remove:(Z)Lorg/mongodb/morphia/FindAndModifyOptions;
        12: .line 345
            astore 4 /* copy */
        start local 4 // org.mongodb.morphia.FindAndModifyOptions copy
        13: .line 353
            aload 3 /* dbColl */
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getQueryObject:()Lcom/mongodb/DBObject;
            aload 4 /* copy */
            invokevirtual org.mongodb.morphia.FindAndModifyOptions.getOptions:()Lcom/mongodb/client/model/DBCollectionFindAndModifyOptions;
            invokevirtual com.mongodb.DBCollection.findAndModify:(Lcom/mongodb/DBObject;Lcom/mongodb/client/model/DBCollectionFindAndModifyOptions;)Lcom/mongodb/DBObject;
            astore 5 /* result */
        start local 5 // com.mongodb.DBObject result
        14: .line 355
            aload 5 /* result */
            ifnonnull 15
            aconst_null
            goto 16
      StackMap locals: org.mongodb.morphia.FindAndModifyOptions com.mongodb.DBObject
      StackMap stack:
        15: aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 0 /* this */
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getEntityClass:()Ljava/lang/Class;
            aload 5 /* result */
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.createCache:()Lorg/mongodb/morphia/mapping/cache/EntityCache;
            invokevirtual org.mongodb.morphia.mapping.Mapper.fromDBObject:(Lorg/mongodb/morphia/Datastore;Ljava/lang/Class;Lcom/mongodb/DBObject;Lorg/mongodb/morphia/mapping/cache/EntityCache;)Ljava/lang/Object;
      StackMap locals:
      StackMap stack: java.lang.Object
        16: areturn
        end local 5 // com.mongodb.DBObject result
        end local 4 // org.mongodb.morphia.FindAndModifyOptions copy
        end local 3 // com.mongodb.DBCollection dbColl
        end local 2 // org.mongodb.morphia.FindAndModifyOptions options
        end local 1 // org.mongodb.morphia.query.Query query
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   17     0     this  Lorg/mongodb/morphia/DatastoreImpl;
            0   17     1    query  Lorg/mongodb/morphia/query/Query<TT;>;
            0   17     2  options  Lorg/mongodb/morphia/FindAndModifyOptions;
            1   17     3   dbColl  Lcom/mongodb/DBCollection;
           13   17     4     copy  Lorg/mongodb/morphia/FindAndModifyOptions;
           14   17     5   result  Lcom/mongodb/DBObject;
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/query/Query<TT;>;Lorg/mongodb/morphia/FindAndModifyOptions;)TT;
    MethodParameters:
         Name  Flags
      query    final
      options  final

  public <T> T findAndModify(org.mongodb.morphia.query.Query<T>, org.mongodb.morphia.query.UpdateOperations<T>, org.mongodb.morphia.FindAndModifyOptions);
    descriptor: (Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/query/UpdateOperations;Lorg/mongodb/morphia/FindAndModifyOptions;)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=6, args_size=4
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.query.Query query
        start local 2 // org.mongodb.morphia.query.UpdateOperations operations
        start local 3 // org.mongodb.morphia.FindAndModifyOptions options
         0: .line 360
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getCollection:()Lcom/mongodb/DBCollection;
            astore 4 /* dbColl */
        start local 4 // com.mongodb.DBCollection dbColl
         1: .line 362
            aload 4 /* dbColl */
            ifnonnull 3
         2: .line 363
            aload 0 /* this */
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getEntityClass:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.DatastoreImpl.getCollection:(Ljava/lang/Class;)Lcom/mongodb/DBCollection;
            astore 4 /* dbColl */
         3: .line 366
      StackMap locals: com.mongodb.DBCollection
      StackMap stack:
            getstatic org.mongodb.morphia.DatastoreImpl.LOG:Lorg/mongodb/morphia/logging/Logger;
            invokeinterface org.mongodb.morphia.logging.Logger.isTraceEnabled:()Z
            ifeq 5
         4: .line 367
            getstatic org.mongodb.morphia.DatastoreImpl.LOG:Lorg/mongodb/morphia/logging/Logger;
            new java.lang.StringBuilder
            dup
            ldc "Executing findAndModify("
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 4 /* dbColl */
            invokevirtual com.mongodb.DBCollection.getName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc ") with update "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.mongodb.morphia.logging.Logger.info:(Ljava/lang/String;)V
         5: .line 370
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* query */
            aload 2 /* operations */
            invokevirtual org.mongodb.morphia.DatastoreImpl.updateForVersioning:(Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/query/UpdateOperations;)V
         6: .line 371
            aload 4 /* dbColl */
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getQueryObject:()Lcom/mongodb/DBObject;
            aload 3 /* options */
            invokevirtual org.mongodb.morphia.FindAndModifyOptions.copy:()Lorg/mongodb/morphia/FindAndModifyOptions;
         7: .line 372
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getSortObject:()Lcom/mongodb/DBObject;
            invokevirtual org.mongodb.morphia.FindAndModifyOptions.sort:(Lcom/mongodb/DBObject;)Lorg/mongodb/morphia/FindAndModifyOptions;
         8: .line 373
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getFieldsObject:()Lcom/mongodb/DBObject;
            invokevirtual org.mongodb.morphia.FindAndModifyOptions.projection:(Lcom/mongodb/DBObject;)Lorg/mongodb/morphia/FindAndModifyOptions;
         9: .line 374
            aload 2 /* operations */
            checkcast org.mongodb.morphia.query.UpdateOpsImpl
            invokevirtual org.mongodb.morphia.query.UpdateOpsImpl.getOps:()Lcom/mongodb/DBObject;
            invokevirtual org.mongodb.morphia.FindAndModifyOptions.update:(Lcom/mongodb/DBObject;)Lorg/mongodb/morphia/FindAndModifyOptions;
        10: .line 375
            invokevirtual org.mongodb.morphia.FindAndModifyOptions.getOptions:()Lcom/mongodb/client/model/DBCollectionFindAndModifyOptions;
        11: .line 371
            invokevirtual com.mongodb.DBCollection.findAndModify:(Lcom/mongodb/DBObject;Lcom/mongodb/client/model/DBCollectionFindAndModifyOptions;)Lcom/mongodb/DBObject;
            astore 5 /* res */
        start local 5 // com.mongodb.DBObject res
        12: .line 377
            aload 5 /* res */
            ifnonnull 13
            aconst_null
            goto 14
      StackMap locals: com.mongodb.DBObject
      StackMap stack:
        13: aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 0 /* this */
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getEntityClass:()Ljava/lang/Class;
            aload 5 /* res */
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.createCache:()Lorg/mongodb/morphia/mapping/cache/EntityCache;
            invokevirtual org.mongodb.morphia.mapping.Mapper.fromDBObject:(Lorg/mongodb/morphia/Datastore;Ljava/lang/Class;Lcom/mongodb/DBObject;Lorg/mongodb/morphia/mapping/cache/EntityCache;)Ljava/lang/Object;
      StackMap locals:
      StackMap stack: java.lang.Object
        14: areturn
        end local 5 // com.mongodb.DBObject res
        end local 4 // com.mongodb.DBCollection dbColl
        end local 3 // org.mongodb.morphia.FindAndModifyOptions options
        end local 2 // org.mongodb.morphia.query.UpdateOperations operations
        end local 1 // org.mongodb.morphia.query.Query query
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   15     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0   15     1       query  Lorg/mongodb/morphia/query/Query<TT;>;
            0   15     2  operations  Lorg/mongodb/morphia/query/UpdateOperations<TT;>;
            0   15     3     options  Lorg/mongodb/morphia/FindAndModifyOptions;
            1   15     4      dbColl  Lcom/mongodb/DBCollection;
           12   15     5         res  Lcom/mongodb/DBObject;
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/query/Query<TT;>;Lorg/mongodb/morphia/query/UpdateOperations<TT;>;Lorg/mongodb/morphia/FindAndModifyOptions;)TT;
    MethodParameters:
            Name  Flags
      query       final
      operations  final
      options     final

  public <T> T findAndModify(org.mongodb.morphia.query.Query<T>, org.mongodb.morphia.query.UpdateOperations<T>);
    descriptor: (Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/query/UpdateOperations;)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.query.Query query
        start local 2 // org.mongodb.morphia.query.UpdateOperations operations
         0: .line 383
            aload 0 /* this */
            aload 1 /* query */
            aload 2 /* operations */
            new org.mongodb.morphia.FindAndModifyOptions
            dup
            invokespecial org.mongodb.morphia.FindAndModifyOptions.<init>:()V
         1: .line 384
            iconst_1
            invokevirtual org.mongodb.morphia.FindAndModifyOptions.returnNew:(Z)Lorg/mongodb/morphia/FindAndModifyOptions;
         2: .line 383
            invokevirtual org.mongodb.morphia.DatastoreImpl.findAndModify:(Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/query/UpdateOperations;Lorg/mongodb/morphia/FindAndModifyOptions;)Ljava/lang/Object;
            areturn
        end local 2 // org.mongodb.morphia.query.UpdateOperations operations
        end local 1 // org.mongodb.morphia.query.Query query
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    3     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    3     1       query  Lorg/mongodb/morphia/query/Query<TT;>;
            0    3     2  operations  Lorg/mongodb/morphia/query/UpdateOperations<TT;>;
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/query/Query<TT;>;Lorg/mongodb/morphia/query/UpdateOperations<TT;>;)TT;
    MethodParameters:
            Name  Flags
      query       final
      operations  final

  public <T> T findAndModify(org.mongodb.morphia.query.Query<T>, org.mongodb.morphia.query.UpdateOperations<T>, );
    descriptor: (Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/query/UpdateOperations;Z)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=4, args_size=4
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.query.Query query
        start local 2 // org.mongodb.morphia.query.UpdateOperations operations
        start local 3 // boolean oldVersion
         0: .line 390
            aload 0 /* this */
            aload 1 /* query */
            aload 2 /* operations */
            new org.mongodb.morphia.FindAndModifyOptions
            dup
            invokespecial org.mongodb.morphia.FindAndModifyOptions.<init>:()V
         1: .line 391
            iload 3 /* oldVersion */
            ifeq 2
            iconst_0
            goto 3
      StackMap locals: org.mongodb.morphia.DatastoreImpl org.mongodb.morphia.query.Query org.mongodb.morphia.query.UpdateOperations int
      StackMap stack: org.mongodb.morphia.DatastoreImpl org.mongodb.morphia.query.Query org.mongodb.morphia.query.UpdateOperations org.mongodb.morphia.FindAndModifyOptions
         2: iconst_1
      StackMap locals: org.mongodb.morphia.DatastoreImpl org.mongodb.morphia.query.Query org.mongodb.morphia.query.UpdateOperations int
      StackMap stack: org.mongodb.morphia.DatastoreImpl org.mongodb.morphia.query.Query org.mongodb.morphia.query.UpdateOperations org.mongodb.morphia.FindAndModifyOptions int
         3: invokevirtual org.mongodb.morphia.FindAndModifyOptions.returnNew:(Z)Lorg/mongodb/morphia/FindAndModifyOptions;
         4: .line 392
            iconst_0
            invokevirtual org.mongodb.morphia.FindAndModifyOptions.upsert:(Z)Lorg/mongodb/morphia/FindAndModifyOptions;
         5: .line 390
            invokevirtual org.mongodb.morphia.DatastoreImpl.findAndModify:(Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/query/UpdateOperations;Lorg/mongodb/morphia/FindAndModifyOptions;)Ljava/lang/Object;
            areturn
        end local 3 // boolean oldVersion
        end local 2 // org.mongodb.morphia.query.UpdateOperations operations
        end local 1 // org.mongodb.morphia.query.Query query
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    6     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    6     1       query  Lorg/mongodb/morphia/query/Query<TT;>;
            0    6     2  operations  Lorg/mongodb/morphia/query/UpdateOperations<TT;>;
            0    6     3  oldVersion  Z
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/query/Query<TT;>;Lorg/mongodb/morphia/query/UpdateOperations<TT;>;Z)TT;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
            Name  Flags
      query       final
      operations  final
      oldVersion  final

  public <T> T findAndModify(org.mongodb.morphia.query.Query<T>, org.mongodb.morphia.query.UpdateOperations<T>, boolean, );
    descriptor: (Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/query/UpdateOperations;ZZ)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=5, args_size=5
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.query.Query query
        start local 2 // org.mongodb.morphia.query.UpdateOperations operations
        start local 3 // boolean oldVersion
        start local 4 // boolean createIfMissing
         0: .line 399
            aload 0 /* this */
            aload 1 /* query */
            aload 2 /* operations */
            new org.mongodb.morphia.FindAndModifyOptions
            dup
            invokespecial org.mongodb.morphia.FindAndModifyOptions.<init>:()V
         1: .line 400
            iload 3 /* oldVersion */
            ifeq 2
            iconst_0
            goto 3
      StackMap locals: org.mongodb.morphia.DatastoreImpl org.mongodb.morphia.query.Query org.mongodb.morphia.query.UpdateOperations int int
      StackMap stack: org.mongodb.morphia.DatastoreImpl org.mongodb.morphia.query.Query org.mongodb.morphia.query.UpdateOperations org.mongodb.morphia.FindAndModifyOptions
         2: iconst_1
      StackMap locals: org.mongodb.morphia.DatastoreImpl org.mongodb.morphia.query.Query org.mongodb.morphia.query.UpdateOperations int int
      StackMap stack: org.mongodb.morphia.DatastoreImpl org.mongodb.morphia.query.Query org.mongodb.morphia.query.UpdateOperations org.mongodb.morphia.FindAndModifyOptions int
         3: invokevirtual org.mongodb.morphia.FindAndModifyOptions.returnNew:(Z)Lorg/mongodb/morphia/FindAndModifyOptions;
         4: .line 401
            iload 4 /* createIfMissing */
            invokevirtual org.mongodb.morphia.FindAndModifyOptions.upsert:(Z)Lorg/mongodb/morphia/FindAndModifyOptions;
         5: .line 399
            invokevirtual org.mongodb.morphia.DatastoreImpl.findAndModify:(Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/query/UpdateOperations;Lorg/mongodb/morphia/FindAndModifyOptions;)Ljava/lang/Object;
            areturn
        end local 4 // boolean createIfMissing
        end local 3 // boolean oldVersion
        end local 2 // org.mongodb.morphia.query.UpdateOperations operations
        end local 1 // org.mongodb.morphia.query.Query query
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    6     0             this  Lorg/mongodb/morphia/DatastoreImpl;
            0    6     1            query  Lorg/mongodb/morphia/query/Query<TT;>;
            0    6     2       operations  Lorg/mongodb/morphia/query/UpdateOperations<TT;>;
            0    6     3       oldVersion  Z
            0    6     4  createIfMissing  Z
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/query/Query<TT;>;Lorg/mongodb/morphia/query/UpdateOperations<TT;>;ZZ)TT;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
                 Name  Flags
      query            final
      operations       final
      oldVersion       final
      createIfMissing  final

  private <T> void updateForVersioning(org.mongodb.morphia.query.Query<T>, org.mongodb.morphia.query.UpdateOperations<T>);
    descriptor: (Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/query/UpdateOperations;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=4, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.query.Query query
        start local 2 // org.mongodb.morphia.query.UpdateOperations operations
         0: .line 406
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getEntityClass:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClass:(Ljava/lang/Object;)Lorg/mongodb/morphia/mapping/MappedClass;
            astore 3 /* mc */
        start local 3 // org.mongodb.morphia.mapping.MappedClass mc
         1: .line 408
            aload 3 /* mc */
            ldc Lorg/mongodb/morphia/annotations/Version;
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getFieldsAnnotatedWith:(Ljava/lang/Class;)Ljava/util/List;
            invokeinterface java.util.List.isEmpty:()Z
            ifne 3
         2: .line 409
            aload 2 /* operations */
            aload 3 /* mc */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getMappedVersionField:()Lorg/mongodb/morphia/mapping/MappedField;
            invokevirtual org.mongodb.morphia.mapping.MappedField.getNameToStore:()Ljava/lang/String;
            invokeinterface org.mongodb.morphia.query.UpdateOperations.inc:(Ljava/lang/String;)Lorg/mongodb/morphia/query/UpdateOperations;
            pop
         3: .line 412
      StackMap locals: org.mongodb.morphia.mapping.MappedClass
      StackMap stack:
            return
        end local 3 // org.mongodb.morphia.mapping.MappedClass mc
        end local 2 // org.mongodb.morphia.query.UpdateOperations operations
        end local 1 // org.mongodb.morphia.query.Query query
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    4     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    4     1       query  Lorg/mongodb/morphia/query/Query<TT;>;
            0    4     2  operations  Lorg/mongodb/morphia/query/UpdateOperations<TT;>;
            1    4     3          mc  Lorg/mongodb/morphia/mapping/MappedClass;
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/query/Query<TT;>;Lorg/mongodb/morphia/query/UpdateOperations<TT;>;)V
    MethodParameters:
            Name  Flags
      query       final
      operations  final

  public <T, V> org.mongodb.morphia.query.Query<T> get(java.lang.Class<T>, java.lang.Iterable<V>);
    descriptor: (Ljava/lang/Class;Ljava/lang/Iterable;)Lorg/mongodb/morphia/query/Query;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Class clazz
        start local 2 // java.lang.Iterable ids
         0: .line 416
            aload 0 /* this */
            aload 1 /* clazz */
            invokevirtual org.mongodb.morphia.DatastoreImpl.find:(Ljava/lang/Class;)Lorg/mongodb/morphia/query/Query;
            invokeinterface org.mongodb.morphia.query.Query.disableValidation:()Lorg/mongodb/morphia/query/Query;
            ldc "_id in"
            aload 2 /* ids */
            invokeinterface org.mongodb.morphia.query.Query.filter:(Ljava/lang/String;Ljava/lang/Object;)Lorg/mongodb/morphia/query/Query;
            invokeinterface org.mongodb.morphia.query.Query.enableValidation:()Lorg/mongodb/morphia/query/Query;
            areturn
        end local 2 // java.lang.Iterable ids
        end local 1 // java.lang.Class clazz
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0   this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  clazz  Ljava/lang/Class<TT;>;
            0    1     2    ids  Ljava/lang/Iterable<TV;>;
    Signature: <T:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;Ljava/lang/Iterable<TV;>;)Lorg/mongodb/morphia/query/Query<TT;>;
    MethodParameters:
       Name  Flags
      clazz  final
      ids    final

  public <T, V> T get(java.lang.Class<T>, );
    descriptor: (Ljava/lang/Class;Ljava/lang/Object;)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=8, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Class clazz
        start local 2 // java.lang.Object id
         0: .line 421
            aload 0 /* this */
            aload 0 /* this */
            aload 1 /* clazz */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getCollection:(Ljava/lang/Class;)Lcom/mongodb/DBCollection;
            invokevirtual com.mongodb.DBCollection.getName:()Ljava/lang/String;
            aload 1 /* clazz */
            ldc "_id"
            aload 2 /* id */
            iconst_0
            iconst_1
            iconst_1
            invokevirtual org.mongodb.morphia.DatastoreImpl.find:(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;IIZ)Lorg/mongodb/morphia/query/Query;
            invokeinterface org.mongodb.morphia.query.Query.get:()Ljava/lang/Object;
            areturn
        end local 2 // java.lang.Object id
        end local 1 // java.lang.Class clazz
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0   this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  clazz  Ljava/lang/Class<TT;>;
            0    1     2     id  TV;
    Signature: <T:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;TV;)TT;
    MethodParameters:
       Name  Flags
      clazz  final
      id     final

  public <T> T get();
    descriptor: (Ljava/lang/Object;)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=4, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Object entity
         0: .line 427
            aload 1 /* entity */
            invokestatic org.mongodb.morphia.mapping.lazy.proxy.ProxyHelper.unwrap:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 2 /* unwrapped */
        start local 2 // java.lang.Object unwrapped
         1: .line 428
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 2 /* unwrapped */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getId:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 3 /* id */
        start local 3 // java.lang.Object id
         2: .line 429
            aload 3 /* id */
            ifnonnull 4
         3: .line 430
            new org.mongodb.morphia.mapping.MappingException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Could not get id for "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 2 /* unwrapped */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial org.mongodb.morphia.mapping.MappingException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 432
      StackMap locals: java.lang.Object java.lang.Object
      StackMap stack:
            aload 0 /* this */
            aload 2 /* unwrapped */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            aload 3 /* id */
            invokevirtual org.mongodb.morphia.DatastoreImpl.get:(Ljava/lang/Class;Ljava/lang/Object;)Ljava/lang/Object;
            areturn
        end local 3 // java.lang.Object id
        end local 2 // java.lang.Object unwrapped
        end local 1 // java.lang.Object entity
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    5     0       this  Lorg/mongodb/morphia/DatastoreImpl;
            0    5     1     entity  TT;
            1    5     2  unwrapped  TT;
            2    5     3         id  Ljava/lang/Object;
    Signature: <T:Ljava/lang/Object;>(TT;)TT;
    MethodParameters:
        Name  Flags
      entity  final

  public <T> T getByKey(java.lang.Class<T>, org.mongodb.morphia.Key<T>);
    descriptor: (Ljava/lang/Class;Lorg/mongodb/morphia/Key;)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=6, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Class clazz
        start local 2 // org.mongodb.morphia.Key key
         0: .line 437
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 1 /* clazz */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getCollectionName:(Ljava/lang/Object;)Ljava/lang/String;
            astore 3 /* collectionName */
        start local 3 // java.lang.String collectionName
         1: .line 438
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 2 /* key */
            invokevirtual org.mongodb.morphia.mapping.Mapper.updateCollection:(Lorg/mongodb/morphia/Key;)Ljava/lang/String;
            astore 4 /* keyCollection */
        start local 4 // java.lang.String keyCollection
         2: .line 439
            aload 3 /* collectionName */
            aload 4 /* keyCollection */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 4
         3: .line 440
            new java.lang.RuntimeException
            dup
            new java.lang.StringBuilder
            dup
            ldc "collection names don't match for key and class: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 3 /* collectionName */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc " != "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 4 /* keyCollection */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 443
      StackMap locals: java.lang.String java.lang.String
      StackMap stack:
            aload 2 /* key */
            invokevirtual org.mongodb.morphia.Key.getId:()Ljava/lang/Object;
            astore 5 /* id */
        start local 5 // java.lang.Object id
         5: .line 444
            aload 5 /* id */
            instanceof com.mongodb.DBObject
            ifeq 7
         6: .line 445
            aload 5 /* id */
            checkcast com.mongodb.DBObject
            ldc "className"
            invokeinterface com.mongodb.DBObject.removeField:(Ljava/lang/String;)Ljava/lang/Object;
            pop
         7: .line 447
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 0 /* this */
            aload 1 /* clazz */
            aload 5 /* id */
            invokevirtual org.mongodb.morphia.DatastoreImpl.get:(Ljava/lang/Class;Ljava/lang/Object;)Ljava/lang/Object;
            areturn
        end local 5 // java.lang.Object id
        end local 4 // java.lang.String keyCollection
        end local 3 // java.lang.String collectionName
        end local 2 // org.mongodb.morphia.Key key
        end local 1 // java.lang.Class clazz
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    8     0            this  Lorg/mongodb/morphia/DatastoreImpl;
            0    8     1           clazz  Ljava/lang/Class<TT;>;
            0    8     2             key  Lorg/mongodb/morphia/Key<TT;>;
            1    8     3  collectionName  Ljava/lang/String;
            2    8     4   keyCollection  Ljava/lang/String;
            5    8     5              id  Ljava/lang/Object;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;Lorg/mongodb/morphia/Key<TT;>;)TT;
    MethodParameters:
       Name  Flags
      clazz  final
      key    final

  public <T> java.util.List<T> getByKeys(java.lang.Class<T>, java.lang.Iterable<org.mongodb.morphia.Key<T>>);
    descriptor: (Ljava/lang/Class;Ljava/lang/Iterable;)Ljava/util/List;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=11, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Class clazz
        start local 2 // java.lang.Iterable keys
         0: .line 454
            new java.util.HashMap
            dup
            invokespecial java.util.HashMap.<init>:()V
            astore 3 /* kindMap */
        start local 3 // java.util.Map kindMap
         1: .line 455
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 4 /* entities */
        start local 4 // java.util.List entities
         2: .line 458
            aload 2 /* keys */
            invokeinterface java.lang.Iterable.iterator:()Ljava/util/Iterator;
            astore 6
            goto 9
      StackMap locals: org.mongodb.morphia.DatastoreImpl java.lang.Class java.lang.Iterable java.util.Map java.util.List top java.util.Iterator
      StackMap stack:
         3: aload 6
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.mongodb.morphia.Key
            astore 5 /* key */
        start local 5 // org.mongodb.morphia.Key key
         4: .line 459
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 5 /* key */
            invokevirtual org.mongodb.morphia.mapping.Mapper.updateCollection:(Lorg/mongodb/morphia/Key;)Ljava/lang/String;
            pop
         5: .line 466
            aload 3 /* kindMap */
            aload 5 /* key */
            invokevirtual org.mongodb.morphia.Key.getCollection:()Ljava/lang/String;
            invokeinterface java.util.Map.containsKey:(Ljava/lang/Object;)Z
            ifeq 8
         6: .line 467
            aload 3 /* kindMap */
            aload 5 /* key */
            invokevirtual org.mongodb.morphia.Key.getCollection:()Ljava/lang/String;
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.List
            aload 5 /* key */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
         7: .line 468
            goto 9
         8: .line 469
      StackMap locals: org.mongodb.morphia.DatastoreImpl java.lang.Class java.lang.Iterable java.util.Map java.util.List org.mongodb.morphia.Key java.util.Iterator
      StackMap stack:
            aload 3 /* kindMap */
            aload 5 /* key */
            invokevirtual org.mongodb.morphia.Key.getCollection:()Ljava/lang/String;
            new java.util.ArrayList
            dup
            aload 5 /* key */
            invokestatic java.util.Collections.singletonList:(Ljava/lang/Object;)Ljava/util/List;
            invokespecial java.util.ArrayList.<init>:(Ljava/util/Collection;)V
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        end local 5 // org.mongodb.morphia.Key key
         9: .line 458
      StackMap locals: org.mongodb.morphia.DatastoreImpl java.lang.Class java.lang.Iterable java.util.Map java.util.List top java.util.Iterator
      StackMap stack:
            aload 6
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 3
        10: .line 472
            aload 3 /* kindMap */
            invokeinterface java.util.Map.entrySet:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 6
            goto 20
      StackMap locals:
      StackMap stack:
        11: aload 6
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.util.Map$Entry
            astore 5 /* entry */
        start local 5 // java.util.Map$Entry entry
        12: .line 473
            aload 5 /* entry */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            checkcast java.util.List
            astore 7 /* kindKeys */
        start local 7 // java.util.List kindKeys
        13: .line 475
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 8 /* objIds */
        start local 8 // java.util.List objIds
        14: .line 476
            aload 7 /* kindKeys */
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 10
            goto 17
      StackMap locals: org.mongodb.morphia.DatastoreImpl java.lang.Class java.lang.Iterable java.util.Map java.util.List java.util.Map$Entry java.util.Iterator java.util.List java.util.List top java.util.Iterator
      StackMap stack:
        15: aload 10
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.mongodb.morphia.Key
            astore 9 /* key */
        start local 9 // org.mongodb.morphia.Key key
        16: .line 477
            aload 8 /* objIds */
            aload 9 /* key */
            invokevirtual org.mongodb.morphia.Key.getId:()Ljava/lang/Object;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 9 // org.mongodb.morphia.Key key
        17: .line 476
      StackMap locals:
      StackMap stack:
            aload 10
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 15
        18: .line 479
            aload 0 /* this */
            aload 5 /* entry */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            checkcast java.lang.String
            aconst_null
            invokevirtual org.mongodb.morphia.DatastoreImpl.find:(Ljava/lang/String;Ljava/lang/Class;)Lorg/mongodb/morphia/query/Query;
            invokeinterface org.mongodb.morphia.query.Query.disableValidation:()Lorg/mongodb/morphia/query/Query;
            ldc "_id in"
            aload 8 /* objIds */
            invokeinterface org.mongodb.morphia.query.Query.filter:(Ljava/lang/String;Ljava/lang/Object;)Lorg/mongodb/morphia/query/Query;
            invokeinterface org.mongodb.morphia.query.Query.asList:()Ljava/util/List;
            astore 9 /* kindResults */
        start local 9 // java.util.List kindResults
        19: .line 480
            aload 4 /* entities */
            aload 9 /* kindResults */
            invokeinterface java.util.List.addAll:(Ljava/util/Collection;)Z
            pop
        end local 9 // java.util.List kindResults
        end local 8 // java.util.List objIds
        end local 7 // java.util.List kindKeys
        end local 5 // java.util.Map$Entry entry
        20: .line 472
      StackMap locals: org.mongodb.morphia.DatastoreImpl java.lang.Class java.lang.Iterable java.util.Map java.util.List top java.util.Iterator
      StackMap stack:
            aload 6
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 11
        21: .line 484
            aload 4 /* entities */
            areturn
        end local 4 // java.util.List entities
        end local 3 // java.util.Map kindMap
        end local 2 // java.lang.Iterable keys
        end local 1 // java.lang.Class clazz
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   22     0         this  Lorg/mongodb/morphia/DatastoreImpl;
            0   22     1        clazz  Ljava/lang/Class<TT;>;
            0   22     2         keys  Ljava/lang/Iterable<Lorg/mongodb/morphia/Key<TT;>;>;
            1   22     3      kindMap  Ljava/util/Map<Ljava/lang/String;Ljava/util/List<Lorg/mongodb/morphia/Key;>;>;
            2   22     4     entities  Ljava/util/List<TT;>;
            4    9     5          key  Lorg/mongodb/morphia/Key<*>;
           12   20     5        entry  Ljava/util/Map$Entry<Ljava/lang/String;Ljava/util/List<Lorg/mongodb/morphia/Key;>;>;
           13   20     7     kindKeys  Ljava/util/List<Lorg/mongodb/morphia/Key;>;
           14   20     8       objIds  Ljava/util/List<Ljava/lang/Object;>;
           16   17     9          key  Lorg/mongodb/morphia/Key;
           19   20     9  kindResults  Ljava/util/List;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;Ljava/lang/Iterable<Lorg/mongodb/morphia/Key<TT;>;>;)Ljava/util/List<TT;>;
    MethodParameters:
       Name  Flags
      clazz  final
      keys   final

  public <T> java.util.List<T> getByKeys(java.lang.Iterable<org.mongodb.morphia.Key<T>>);
    descriptor: (Ljava/lang/Iterable;)Ljava/util/List;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Iterable keys
         0: .line 489
            aload 0 /* this */
            aconst_null
            aload 1 /* keys */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getByKeys:(Ljava/lang/Class;Ljava/lang/Iterable;)Ljava/util/List;
            areturn
        end local 1 // java.lang.Iterable keys
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  keys  Ljava/lang/Iterable<Lorg/mongodb/morphia/Key<TT;>;>;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Iterable<Lorg/mongodb/morphia/Key<TT;>;>;)Ljava/util/List<TT;>;
    MethodParameters:
      Name  Flags
      keys  final

  public com.mongodb.DBCollection getCollection(java.lang.Object);
    descriptor: (Ljava/lang/Object;)Lcom/mongodb/DBCollection;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Object obj
         0: .line 499
            aload 1 /* obj */
            ifnonnull 2
         1: .line 500
            aconst_null
            areturn
         2: .line 502
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* obj */
            instanceof java.lang.Class
            ifeq 3
            aload 1 /* obj */
            checkcast java.lang.Class
            goto 4
      StackMap locals:
      StackMap stack: org.mongodb.morphia.DatastoreImpl
         3: aload 1 /* obj */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
      StackMap locals: org.mongodb.morphia.DatastoreImpl java.lang.Object
      StackMap stack: org.mongodb.morphia.DatastoreImpl java.lang.Class
         4: invokevirtual org.mongodb.morphia.DatastoreImpl.getCollection:(Ljava/lang/Class;)Lcom/mongodb/DBCollection;
            areturn
        end local 1 // java.lang.Object obj
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Lorg/mongodb/morphia/DatastoreImpl;
            0    5     1   obj  Ljava/lang/Object;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
      Name  Flags
      obj   final

  public com.mongodb.DBCollection getCollection(java.lang.Class);
    descriptor: (Ljava/lang/Class;)Lcom/mongodb/DBCollection;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Class clazz
         0: .line 507
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 1 /* clazz */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getCollectionName:(Ljava/lang/Object;)Ljava/lang/String;
            astore 2 /* collName */
        start local 2 // java.lang.String collName
         1: .line 508
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getDB:()Lcom/mongodb/DB;
            aload 2 /* collName */
            invokevirtual com.mongodb.DB.getCollection:(Ljava/lang/String;)Lcom/mongodb/DBCollection;
            areturn
        end local 2 // java.lang.String collName
        end local 1 // java.lang.Class clazz
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     0      this  Lorg/mongodb/morphia/DatastoreImpl;
            0    2     1     clazz  Ljava/lang/Class;
            1    2     2  collName  Ljava/lang/String;
    MethodParameters:
       Name  Flags
      clazz  final

  private <T> com.mongodb.client.MongoCollection<T> getMongoCollection(java.lang.Class<T>);
    descriptor: (Ljava/lang/Class;)Lcom/mongodb/client/MongoCollection;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Class clazz
         0: .line 512
            aload 0 /* this */
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 1 /* clazz */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getCollectionName:(Ljava/lang/Object;)Ljava/lang/String;
            aload 1 /* clazz */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getMongoCollection:(Ljava/lang/String;Ljava/lang/Class;)Lcom/mongodb/client/MongoCollection;
            areturn
        end local 1 // java.lang.Class clazz
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0   this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  clazz  Ljava/lang/Class<TT;>;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;)Lcom/mongodb/client/MongoCollection<TT;>;
    MethodParameters:
       Name  Flags
      clazz  final

  private <T> com.mongodb.client.MongoCollection<T> getMongoCollection(java.lang.String, java.lang.Class<T>);
    descriptor: (Ljava/lang/String;Ljava/lang/Class;)Lcom/mongodb/client/MongoCollection;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.String name
        start local 2 // java.lang.Class clazz
         0: .line 516
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.database:Lcom/mongodb/client/MongoDatabase;
            aload 1 /* name */
            aload 2 /* clazz */
            invokeinterface com.mongodb.client.MongoDatabase.getCollection:(Ljava/lang/String;Ljava/lang/Class;)Lcom/mongodb/client/MongoCollection;
            areturn
        end local 2 // java.lang.Class clazz
        end local 1 // java.lang.String name
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0   this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1   name  Ljava/lang/String;
            0    1     2  clazz  Ljava/lang/Class<TT;>;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/String;Ljava/lang/Class<TT;>;)Lcom/mongodb/client/MongoCollection<TT;>;
    MethodParameters:
       Name  Flags
      name   final
      clazz  final

  public <T> long getCount();
    descriptor: (Ljava/lang/Object;)J
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Object entity
         0: .line 521
            aload 0 /* this */
            aload 1 /* entity */
            invokestatic org.mongodb.morphia.mapping.lazy.proxy.ProxyHelper.unwrap:(Ljava/lang/Object;)Ljava/lang/Object;
            invokevirtual org.mongodb.morphia.DatastoreImpl.getCollection:(Ljava/lang/Object;)Lcom/mongodb/DBCollection;
            invokevirtual com.mongodb.DBCollection.count:()J
            lreturn
        end local 1 // java.lang.Object entity
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0    this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  entity  TT;
    Signature: <T:Ljava/lang/Object;>(TT;)J
    MethodParameters:
        Name  Flags
      entity  final

  public <T> long getCount(java.lang.Class<T>);
    descriptor: (Ljava/lang/Class;)J
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Class clazz
         0: .line 526
            aload 0 /* this */
            aload 1 /* clazz */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getCollection:(Ljava/lang/Class;)Lcom/mongodb/DBCollection;
            invokevirtual com.mongodb.DBCollection.count:()J
            lreturn
        end local 1 // java.lang.Class clazz
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0   this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  clazz  Ljava/lang/Class<TT;>;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;)J
    MethodParameters:
       Name  Flags
      clazz  final

  public <T> long getCount(org.mongodb.morphia.query.Query<T>);
    descriptor: (Lorg/mongodb/morphia/query/Query;)J
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.query.Query query
         0: .line 531
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.count:()J
            lreturn
        end local 1 // org.mongodb.morphia.query.Query query
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0   this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  query  Lorg/mongodb/morphia/query/Query<TT;>;
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/query/Query<TT;>;)J
    MethodParameters:
       Name  Flags
      query  final

  public <T> long getCount(org.mongodb.morphia.query.Query<T>, org.mongodb.morphia.query.CountOptions);
    descriptor: (Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/query/CountOptions;)J
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.query.Query query
        start local 2 // org.mongodb.morphia.query.CountOptions options
         0: .line 536
            aload 1 /* query */
            aload 2 /* options */
            invokeinterface org.mongodb.morphia.query.Query.count:(Lorg/mongodb/morphia/query/CountOptions;)J
            lreturn
        end local 2 // org.mongodb.morphia.query.CountOptions options
        end local 1 // org.mongodb.morphia.query.Query query
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0     this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1    query  Lorg/mongodb/morphia/query/Query<TT;>;
            0    1     2  options  Lorg/mongodb/morphia/query/CountOptions;
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/query/Query<TT;>;Lorg/mongodb/morphia/query/CountOptions;)J
    MethodParameters:
         Name  Flags
      query    final
      options  final

  public com.mongodb.DB getDB();
    descriptor: ()Lcom/mongodb/DB;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.mongodb.morphia.DatastoreImpl this
         0: .line 541
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.db:Lcom/mongodb/DB;
            areturn
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/mongodb/morphia/DatastoreImpl;

  private com.mongodb.client.MongoDatabase getDatabase();
    descriptor: ()Lcom/mongodb/client/MongoDatabase;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.mongodb.morphia.DatastoreImpl this
         0: .line 545
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mongoClient:Lcom/mongodb/MongoClient;
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.db:Lcom/mongodb/DB;
            invokevirtual com.mongodb.DB.getName:()Ljava/lang/String;
            invokevirtual com.mongodb.MongoClient.getDatabase:(Ljava/lang/String;)Lcom/mongodb/client/MongoDatabase;
            areturn
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/mongodb/morphia/DatastoreImpl;

  public com.mongodb.WriteConcern getDefaultWriteConcern();
    descriptor: ()Lcom/mongodb/WriteConcern;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.mongodb.morphia.DatastoreImpl this
         0: .line 550
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.defConcern:Lcom/mongodb/WriteConcern;
            areturn
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/mongodb/morphia/DatastoreImpl;

  public void setDefaultWriteConcern(com.mongodb.WriteConcern);
    descriptor: (Lcom/mongodb/WriteConcern;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // com.mongodb.WriteConcern wc
         0: .line 555
            aload 0 /* this */
            aload 1 /* wc */
            putfield org.mongodb.morphia.DatastoreImpl.defConcern:Lcom/mongodb/WriteConcern;
         1: .line 556
            return
        end local 1 // com.mongodb.WriteConcern wc
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/mongodb/morphia/DatastoreImpl;
            0    2     1    wc  Lcom/mongodb/WriteConcern;
    MethodParameters:
      Name  Flags
      wc    final

  public <T> org.mongodb.morphia.Key<T> getKey(T);
    descriptor: (Ljava/lang/Object;)Lorg/mongodb/morphia/Key;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Object entity
         0: .line 562
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 1 /* entity */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getKey:(Ljava/lang/Object;)Lorg/mongodb/morphia/Key;
            areturn
        end local 1 // java.lang.Object entity
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0    this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  entity  TT;
    Signature: <T:Ljava/lang/Object;>(TT;)Lorg/mongodb/morphia/Key<TT;>;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
        Name  Flags
      entity  final

  public com.mongodb.MongoClient getMongo();
    descriptor: ()Lcom/mongodb/MongoClient;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.mongodb.morphia.DatastoreImpl this
         0: .line 567
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mongoClient:Lcom/mongodb/MongoClient;
            areturn
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/mongodb/morphia/DatastoreImpl;

  public org.mongodb.morphia.query.QueryFactory getQueryFactory();
    descriptor: ()Lorg/mongodb/morphia/query/QueryFactory;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.mongodb.morphia.DatastoreImpl this
         0: .line 572
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.queryFactory:Lorg/mongodb/morphia/query/QueryFactory;
            areturn
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/mongodb/morphia/DatastoreImpl;

  public void setQueryFactory(org.mongodb.morphia.query.QueryFactory);
    descriptor: (Lorg/mongodb/morphia/query/QueryFactory;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.query.QueryFactory queryFactory
         0: .line 577
            aload 0 /* this */
            aload 1 /* queryFactory */
            putfield org.mongodb.morphia.DatastoreImpl.queryFactory:Lorg/mongodb/morphia/query/QueryFactory;
         1: .line 578
            return
        end local 1 // org.mongodb.morphia.query.QueryFactory queryFactory
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    2     0          this  Lorg/mongodb/morphia/DatastoreImpl;
            0    2     1  queryFactory  Lorg/mongodb/morphia/query/QueryFactory;
    MethodParameters:
              Name  Flags
      queryFactory  final

  public <T> org.mongodb.morphia.MapreduceResults<T> mapReduce(org.mongodb.morphia.MapReduceOptions<T>);
    descriptor: (Lorg/mongodb/morphia/MapReduceOptions;)Lorg/mongodb/morphia/MapreduceResults;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=5, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.MapReduceOptions options
         0: .line 582
            aload 1 /* options */
            invokevirtual org.mongodb.morphia.MapReduceOptions.getQuery:()Lorg/mongodb/morphia/query/Query;
            invokeinterface org.mongodb.morphia.query.Query.getCollection:()Lcom/mongodb/DBCollection;
            astore 2 /* collection */
        start local 2 // com.mongodb.DBCollection collection
         1: .line 584
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.createCache:()Lorg/mongodb/morphia/mapping/cache/EntityCache;
            astore 3 /* cache */
        start local 3 // org.mongodb.morphia.mapping.cache.EntityCache cache
         2: .line 585
            new org.mongodb.morphia.MapreduceResults
            dup
            aload 2 /* collection */
            aload 1 /* options */
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getMapper:()Lorg/mongodb/morphia/mapping/Mapper;
            invokevirtual org.mongodb.morphia.MapReduceOptions.toCommand:(Lorg/mongodb/morphia/mapping/Mapper;)Lcom/mongodb/MapReduceCommand;
            invokevirtual com.mongodb.DBCollection.mapReduce:(Lcom/mongodb/MapReduceCommand;)Lcom/mongodb/MapReduceOutput;
            invokespecial org.mongodb.morphia.MapreduceResults.<init>:(Lcom/mongodb/MapReduceOutput;)V
            astore 4 /* results */
        start local 4 // org.mongodb.morphia.MapreduceResults results
         3: .line 587
            aload 4 /* results */
            aload 1 /* options */
            invokevirtual org.mongodb.morphia.MapReduceOptions.getOutputType:()Lcom/mongodb/MapReduceCommand$OutputType;
            invokevirtual org.mongodb.morphia.MapreduceResults.setOutputType:(Lcom/mongodb/MapReduceCommand$OutputType;)V
         4: .line 589
            getstatic com.mongodb.MapReduceCommand$OutputType.INLINE:Lcom/mongodb/MapReduceCommand$OutputType;
            aload 1 /* options */
            invokevirtual org.mongodb.morphia.MapReduceOptions.getOutputType:()Lcom/mongodb/MapReduceCommand$OutputType;
            invokevirtual com.mongodb.MapReduceCommand$OutputType.equals:(Ljava/lang/Object;)Z
            ifeq 7
         5: .line 590
            aload 4 /* results */
            aload 0 /* this */
            aload 1 /* options */
            invokevirtual org.mongodb.morphia.MapReduceOptions.getResultType:()Ljava/lang/Class;
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getMapper:()Lorg/mongodb/morphia/mapping/Mapper;
            aload 3 /* cache */
            invokevirtual org.mongodb.morphia.MapreduceResults.setInlineRequiredOptions:(Lorg/mongodb/morphia/Datastore;Ljava/lang/Class;Lorg/mongodb/morphia/mapping/Mapper;Lorg/mongodb/morphia/mapping/cache/EntityCache;)V
         6: .line 591
            goto 8
         7: .line 592
      StackMap locals: com.mongodb.DBCollection org.mongodb.morphia.mapping.cache.EntityCache org.mongodb.morphia.MapreduceResults
      StackMap stack:
            aload 4 /* results */
            aload 0 /* this */
            aload 1 /* options */
            invokevirtual org.mongodb.morphia.MapReduceOptions.getResultType:()Ljava/lang/Class;
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getDB:()Lcom/mongodb/DB;
            aload 4 /* results */
            invokevirtual org.mongodb.morphia.MapreduceResults.getOutputCollectionName:()Ljava/lang/String;
            invokevirtual com.mongodb.DB.getCollection:(Ljava/lang/String;)Lcom/mongodb/DBCollection;
            invokevirtual org.mongodb.morphia.DatastoreImpl.newQuery:(Ljava/lang/Class;Lcom/mongodb/DBCollection;)Lorg/mongodb/morphia/query/Query;
            invokevirtual org.mongodb.morphia.MapreduceResults.setQuery:(Lorg/mongodb/morphia/query/Query;)V
         8: .line 595
      StackMap locals:
      StackMap stack:
            aload 4 /* results */
            areturn
        end local 4 // org.mongodb.morphia.MapreduceResults results
        end local 3 // org.mongodb.morphia.mapping.cache.EntityCache cache
        end local 2 // com.mongodb.DBCollection collection
        end local 1 // org.mongodb.morphia.MapReduceOptions options
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    9     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    9     1     options  Lorg/mongodb/morphia/MapReduceOptions<TT;>;
            1    9     2  collection  Lcom/mongodb/DBCollection;
            2    9     3       cache  Lorg/mongodb/morphia/mapping/cache/EntityCache;
            3    9     4     results  Lorg/mongodb/morphia/MapreduceResults<TT;>;
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/MapReduceOptions<TT;>;)Lorg/mongodb/morphia/MapreduceResults<TT;>;
    MethodParameters:
         Name  Flags
      options  final

  public <T> org.mongodb.morphia.MapreduceResults<T> mapReduce(org.mongodb.morphia.MapreduceType, org.mongodb.morphia.query.Query, java.lang.String, java.lang.String, java.lang.String, java.util.Map<java.lang.String, java.lang.Object>, java.lang.Class<T>);
    descriptor: (Lorg/mongodb/morphia/MapreduceType;Lorg/mongodb/morphia/query/Query;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljava/lang/Class;)Lorg/mongodb/morphia/MapreduceResults;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=8, locals=11, args_size=8
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.MapreduceType type
        start local 2 // org.mongodb.morphia.query.Query query
        start local 3 // java.lang.String map
        start local 4 // java.lang.String reduce
        start local 5 // java.lang.String finalize
        start local 6 // java.util.Map scopeFields
        start local 7 // java.lang.Class outputType
         0: .line 604
            aload 2 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getCollection:()Lcom/mongodb/DBCollection;
            astore 8 /* dbColl */
        start local 8 // com.mongodb.DBCollection dbColl
         1: .line 606
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 7 /* outputType */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getCollectionName:(Ljava/lang/Object;)Ljava/lang/String;
            astore 9 /* outColl */
        start local 9 // java.lang.String outColl
         2: .line 608
            new com.mongodb.MapReduceCommand
            dup
            aload 8 /* dbColl */
            aload 3 /* map */
            aload 4 /* reduce */
            aload 9 /* outColl */
            aload 1 /* type */
            invokevirtual org.mongodb.morphia.MapreduceType.toOutputType:()Lcom/mongodb/MapReduceCommand$OutputType;
            aload 2 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getQueryObject:()Lcom/mongodb/DBObject;
            invokespecial com.mongodb.MapReduceCommand.<init>:(Lcom/mongodb/DBCollection;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/mongodb/MapReduceCommand$OutputType;Lcom/mongodb/DBObject;)V
            astore 10 /* cmd */
        start local 10 // com.mongodb.MapReduceCommand cmd
         3: .line 610
            aload 2 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getLimit:()I
            ifle 5
         4: .line 611
            aload 10 /* cmd */
            aload 2 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getLimit:()I
            invokevirtual com.mongodb.MapReduceCommand.setLimit:(I)V
         5: .line 613
      StackMap locals: com.mongodb.DBCollection java.lang.String com.mongodb.MapReduceCommand
      StackMap stack:
            aload 2 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getSortObject:()Lcom/mongodb/DBObject;
            ifnull 7
         6: .line 614
            aload 10 /* cmd */
            aload 2 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getSortObject:()Lcom/mongodb/DBObject;
            invokevirtual com.mongodb.MapReduceCommand.setSort:(Lcom/mongodb/DBObject;)V
         7: .line 617
      StackMap locals:
      StackMap stack:
            aload 5 /* finalize */
            ifnull 9
            aload 5 /* finalize */
            invokevirtual java.lang.String.length:()I
            ifeq 9
         8: .line 618
            aload 10 /* cmd */
            aload 5 /* finalize */
            invokevirtual com.mongodb.MapReduceCommand.setFinalize:(Ljava/lang/String;)V
         9: .line 621
      StackMap locals:
      StackMap stack:
            aload 6 /* scopeFields */
            ifnull 11
            aload 6 /* scopeFields */
            invokeinterface java.util.Map.isEmpty:()Z
            ifne 11
        10: .line 622
            aload 10 /* cmd */
            aload 6 /* scopeFields */
            invokevirtual com.mongodb.MapReduceCommand.setScope:(Ljava/util/Map;)V
        11: .line 625
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* type */
            aload 2 /* query */
            aload 7 /* outputType */
            aload 10 /* cmd */
            invokevirtual org.mongodb.morphia.DatastoreImpl.mapReduce:(Lorg/mongodb/morphia/MapreduceType;Lorg/mongodb/morphia/query/Query;Ljava/lang/Class;Lcom/mongodb/MapReduceCommand;)Lorg/mongodb/morphia/MapreduceResults;
            areturn
        end local 10 // com.mongodb.MapReduceCommand cmd
        end local 9 // java.lang.String outColl
        end local 8 // com.mongodb.DBCollection dbColl
        end local 7 // java.lang.Class outputType
        end local 6 // java.util.Map scopeFields
        end local 5 // java.lang.String finalize
        end local 4 // java.lang.String reduce
        end local 3 // java.lang.String map
        end local 2 // org.mongodb.morphia.query.Query query
        end local 1 // org.mongodb.morphia.MapreduceType type
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   12     0         this  Lorg/mongodb/morphia/DatastoreImpl;
            0   12     1         type  Lorg/mongodb/morphia/MapreduceType;
            0   12     2        query  Lorg/mongodb/morphia/query/Query;
            0   12     3          map  Ljava/lang/String;
            0   12     4       reduce  Ljava/lang/String;
            0   12     5     finalize  Ljava/lang/String;
            0   12     6  scopeFields  Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;
            0   12     7   outputType  Ljava/lang/Class<TT;>;
            1   12     8       dbColl  Lcom/mongodb/DBCollection;
            2   12     9      outColl  Ljava/lang/String;
            3   12    10          cmd  Lcom/mongodb/MapReduceCommand;
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/MapreduceType;Lorg/mongodb/morphia/query/Query;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;Ljava/lang/Class<TT;>;)Lorg/mongodb/morphia/MapreduceResults<TT;>;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
             Name  Flags
      type         final
      query        final
      map          final
      reduce       final
      finalize     final
      scopeFields  final
      outputType   final

  public <T> org.mongodb.morphia.MapreduceResults<T> mapReduce(org.mongodb.morphia.MapreduceType, org.mongodb.morphia.query.Query, java.lang.Class<T>, com.mongodb.MapReduceCommand);
    descriptor: (Lorg/mongodb/morphia/MapreduceType;Lorg/mongodb/morphia/query/Query;Ljava/lang/Class;Lcom/mongodb/MapReduceCommand;)Lorg/mongodb/morphia/MapreduceResults;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=8, locals=10, args_size=5
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.MapreduceType type
        start local 2 // org.mongodb.morphia.query.Query query
        start local 3 // java.lang.Class outputType
        start local 4 // com.mongodb.MapReduceCommand baseCommand
         0: .line 633
            ldc "map"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 4 /* baseCommand */
            invokevirtual com.mongodb.MapReduceCommand.getMap:()Ljava/lang/String;
            aastore
            invokestatic org.mongodb.morphia.utils.Assert.parametersNotNull:(Ljava/lang/String;[Ljava/lang/Object;)V
         1: .line 634
            ldc "map"
            aload 4 /* baseCommand */
            invokevirtual com.mongodb.MapReduceCommand.getMap:()Ljava/lang/String;
            invokestatic org.mongodb.morphia.utils.Assert.parameterNotEmpty:(Ljava/lang/String;Ljava/lang/String;)V
         2: .line 635
            ldc "reduce"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 4 /* baseCommand */
            invokevirtual com.mongodb.MapReduceCommand.getReduce:()Ljava/lang/String;
            aastore
            invokestatic org.mongodb.morphia.utils.Assert.parametersNotNull:(Ljava/lang/String;[Ljava/lang/Object;)V
         3: .line 636
            ldc "reduce"
            aload 4 /* baseCommand */
            invokevirtual com.mongodb.MapReduceCommand.getReduce:()Ljava/lang/String;
            invokestatic org.mongodb.morphia.utils.Assert.parameterNotEmpty:(Ljava/lang/String;Ljava/lang/String;)V
         4: .line 638
            aload 2 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getOffset:()I
            ifne 5
            aload 2 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getFieldsObject:()Lcom/mongodb/DBObject;
            ifnull 6
         5: .line 639
      StackMap locals:
      StackMap stack:
            new org.mongodb.morphia.query.QueryException
            dup
            ldc "mapReduce does not allow the offset/retrievedFields query options."
            invokespecial org.mongodb.morphia.query.QueryException.<init>:(Ljava/lang/String;)V
            athrow
         6: .line 642
      StackMap locals:
      StackMap stack:
            aload 1 /* type */
            invokevirtual org.mongodb.morphia.MapreduceType.toOutputType:()Lcom/mongodb/MapReduceCommand$OutputType;
            astore 5 /* outType */
        start local 5 // com.mongodb.MapReduceCommand$OutputType outType
         7: .line 644
            aload 2 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getCollection:()Lcom/mongodb/DBCollection;
            astore 6 /* dbColl */
        start local 6 // com.mongodb.DBCollection dbColl
         8: .line 646
            new com.mongodb.MapReduceCommand
            dup
            aload 6 /* dbColl */
            aload 4 /* baseCommand */
            invokevirtual com.mongodb.MapReduceCommand.getMap:()Ljava/lang/String;
            aload 4 /* baseCommand */
            invokevirtual com.mongodb.MapReduceCommand.getReduce:()Ljava/lang/String;
         9: .line 647
            aload 4 /* baseCommand */
            invokevirtual com.mongodb.MapReduceCommand.getOutputTarget:()Ljava/lang/String;
            aload 5 /* outType */
            aload 2 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getQueryObject:()Lcom/mongodb/DBObject;
        10: .line 646
            invokespecial com.mongodb.MapReduceCommand.<init>:(Lcom/mongodb/DBCollection;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/mongodb/MapReduceCommand$OutputType;Lcom/mongodb/DBObject;)V
            astore 7 /* cmd */
        start local 7 // com.mongodb.MapReduceCommand cmd
        11: .line 648
            aload 7 /* cmd */
            aload 4 /* baseCommand */
            invokevirtual com.mongodb.MapReduceCommand.getFinalize:()Ljava/lang/String;
            invokevirtual com.mongodb.MapReduceCommand.setFinalize:(Ljava/lang/String;)V
        12: .line 649
            aload 7 /* cmd */
            aload 4 /* baseCommand */
            invokevirtual com.mongodb.MapReduceCommand.getScope:()Ljava/util/Map;
            invokevirtual com.mongodb.MapReduceCommand.setScope:(Ljava/util/Map;)V
        13: .line 651
            aload 2 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getLimit:()I
            ifle 15
        14: .line 652
            aload 7 /* cmd */
            aload 2 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getLimit:()I
            invokevirtual com.mongodb.MapReduceCommand.setLimit:(I)V
        15: .line 654
      StackMap locals: com.mongodb.MapReduceCommand$OutputType com.mongodb.DBCollection com.mongodb.MapReduceCommand
      StackMap stack:
            aload 2 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getSortObject:()Lcom/mongodb/DBObject;
            ifnull 17
        16: .line 655
            aload 7 /* cmd */
            aload 2 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getSortObject:()Lcom/mongodb/DBObject;
            invokevirtual com.mongodb.MapReduceCommand.setSort:(Lcom/mongodb/DBObject;)V
        17: .line 658
      StackMap locals:
      StackMap stack:
            getstatic org.mongodb.morphia.DatastoreImpl.LOG:Lorg/mongodb/morphia/logging/Logger;
            invokeinterface org.mongodb.morphia.logging.Logger.isTraceEnabled:()Z
            ifeq 19
        18: .line 659
            getstatic org.mongodb.morphia.DatastoreImpl.LOG:Lorg/mongodb/morphia/logging/Logger;
            new java.lang.StringBuilder
            dup
            ldc "Executing "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 7 /* cmd */
            invokevirtual com.mongodb.MapReduceCommand.toString:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface org.mongodb.morphia.logging.Logger.info:(Ljava/lang/String;)V
        19: .line 662
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.createCache:()Lorg/mongodb/morphia/mapping/cache/EntityCache;
            astore 8 /* cache */
        start local 8 // org.mongodb.morphia.mapping.cache.EntityCache cache
        20: .line 663
            new org.mongodb.morphia.MapreduceResults
            dup
            aload 6 /* dbColl */
            aload 4 /* baseCommand */
            invokevirtual com.mongodb.DBCollection.mapReduce:(Lcom/mongodb/MapReduceCommand;)Lcom/mongodb/MapReduceOutput;
            invokespecial org.mongodb.morphia.MapreduceResults.<init>:(Lcom/mongodb/MapReduceOutput;)V
            astore 9 /* results */
        start local 9 // org.mongodb.morphia.MapreduceResults results
        21: .line 665
            aload 9 /* results */
            aload 1 /* type */
            invokevirtual org.mongodb.morphia.MapreduceResults.setType:(Lorg/mongodb/morphia/MapreduceType;)V
        22: .line 666
            getstatic org.mongodb.morphia.MapreduceType.INLINE:Lorg/mongodb/morphia/MapreduceType;
            aload 1 /* type */
            invokevirtual org.mongodb.morphia.MapreduceType.equals:(Ljava/lang/Object;)Z
            ifeq 25
        23: .line 667
            aload 9 /* results */
            aload 0 /* this */
            aload 3 /* outputType */
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getMapper:()Lorg/mongodb/morphia/mapping/Mapper;
            aload 8 /* cache */
            invokevirtual org.mongodb.morphia.MapreduceResults.setInlineRequiredOptions:(Lorg/mongodb/morphia/Datastore;Ljava/lang/Class;Lorg/mongodb/morphia/mapping/Mapper;Lorg/mongodb/morphia/mapping/cache/EntityCache;)V
        24: .line 668
            goto 26
        25: .line 669
      StackMap locals: org.mongodb.morphia.mapping.cache.EntityCache org.mongodb.morphia.MapreduceResults
      StackMap stack:
            aload 9 /* results */
            aload 0 /* this */
            aload 3 /* outputType */
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getDB:()Lcom/mongodb/DB;
            aload 9 /* results */
            invokevirtual org.mongodb.morphia.MapreduceResults.getOutputCollectionName:()Ljava/lang/String;
            invokevirtual com.mongodb.DB.getCollection:(Ljava/lang/String;)Lcom/mongodb/DBCollection;
            invokevirtual org.mongodb.morphia.DatastoreImpl.newQuery:(Ljava/lang/Class;Lcom/mongodb/DBCollection;)Lorg/mongodb/morphia/query/Query;
            invokevirtual org.mongodb.morphia.MapreduceResults.setQuery:(Lorg/mongodb/morphia/query/Query;)V
        26: .line 672
      StackMap locals:
      StackMap stack:
            aload 9 /* results */
            areturn
        end local 9 // org.mongodb.morphia.MapreduceResults results
        end local 8 // org.mongodb.morphia.mapping.cache.EntityCache cache
        end local 7 // com.mongodb.MapReduceCommand cmd
        end local 6 // com.mongodb.DBCollection dbColl
        end local 5 // com.mongodb.MapReduceCommand$OutputType outType
        end local 4 // com.mongodb.MapReduceCommand baseCommand
        end local 3 // java.lang.Class outputType
        end local 2 // org.mongodb.morphia.query.Query query
        end local 1 // org.mongodb.morphia.MapreduceType type
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   27     0         this  Lorg/mongodb/morphia/DatastoreImpl;
            0   27     1         type  Lorg/mongodb/morphia/MapreduceType;
            0   27     2        query  Lorg/mongodb/morphia/query/Query;
            0   27     3   outputType  Ljava/lang/Class<TT;>;
            0   27     4  baseCommand  Lcom/mongodb/MapReduceCommand;
            7   27     5      outType  Lcom/mongodb/MapReduceCommand$OutputType;
            8   27     6       dbColl  Lcom/mongodb/DBCollection;
           11   27     7          cmd  Lcom/mongodb/MapReduceCommand;
           20   27     8        cache  Lorg/mongodb/morphia/mapping/cache/EntityCache;
           21   27     9      results  Lorg/mongodb/morphia/MapreduceResults<TT;>;
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/MapreduceType;Lorg/mongodb/morphia/query/Query;Ljava/lang/Class<TT;>;Lcom/mongodb/MapReduceCommand;)Lorg/mongodb/morphia/MapreduceResults<TT;>;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
             Name  Flags
      type         final
      query        final
      outputType   final
      baseCommand  final

  public <T> org.mongodb.morphia.Key<T> merge(T);
    descriptor: (Ljava/lang/Object;)Lorg/mongodb/morphia/Key;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Object entity
         0: .line 678
            aload 0 /* this */
            aload 1 /* entity */
            aload 0 /* this */
            aload 1 /* entity */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getWriteConcern:(Ljava/lang/Object;)Lcom/mongodb/WriteConcern;
            invokevirtual org.mongodb.morphia.DatastoreImpl.merge:(Ljava/lang/Object;Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/Key;
            areturn
        end local 1 // java.lang.Object entity
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0    this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  entity  TT;
    Signature: <T:Ljava/lang/Object;>(TT;)Lorg/mongodb/morphia/Key<TT;>;
    MethodParameters:
        Name  Flags
      entity  final

  public <T> org.mongodb.morphia.Key<T> merge(T, com.mongodb.WriteConcern);
    descriptor: (Ljava/lang/Object;Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/Key;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=13, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Object entity
        start local 2 // com.mongodb.WriteConcern wc
         0: .line 684
            aload 1 /* entity */
            astore 3 /* unwrapped */
        start local 3 // java.lang.Object unwrapped
         1: .line 685
            new java.util.LinkedHashMap
            dup
            invokespecial java.util.LinkedHashMap.<init>:()V
            astore 4 /* involvedObjects */
        start local 4 // java.util.LinkedHashMap involvedObjects
         2: .line 686
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 3 /* unwrapped */
            aload 4 /* involvedObjects */
            invokevirtual org.mongodb.morphia.mapping.Mapper.toDBObject:(Ljava/lang/Object;Ljava/util/Map;)Lcom/mongodb/DBObject;
            astore 5 /* dbObj */
        start local 5 // com.mongodb.DBObject dbObj
         3: .line 687
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 3 /* unwrapped */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getKey:(Ljava/lang/Object;)Lorg/mongodb/morphia/Key;
            astore 6 /* key */
        start local 6 // org.mongodb.morphia.Key key
         4: .line 688
            aload 3 /* unwrapped */
            invokestatic org.mongodb.morphia.mapping.lazy.proxy.ProxyHelper.unwrap:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 3 /* unwrapped */
         5: .line 689
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 3 /* unwrapped */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getId:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 7 /* id */
        start local 7 // java.lang.Object id
         6: .line 690
            aload 7 /* id */
            ifnonnull 8
         7: .line 691
            new org.mongodb.morphia.mapping.MappingException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Could not get id for "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 3 /* unwrapped */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial org.mongodb.morphia.mapping.MappingException.<init>:(Ljava/lang/String;)V
            athrow
         8: .line 695
      StackMap locals: org.mongodb.morphia.DatastoreImpl java.lang.Object com.mongodb.WriteConcern java.lang.Object java.util.LinkedHashMap com.mongodb.DBObject org.mongodb.morphia.Key java.lang.Object
      StackMap stack:
            aload 5 /* dbObj */
            ldc "_id"
            invokeinterface com.mongodb.DBObject.get:(Ljava/lang/String;)Ljava/lang/Object;
            astore 8 /* idValue */
        start local 8 // java.lang.Object idValue
         9: .line 696
            aload 5 /* dbObj */
            ldc "_id"
            invokeinterface com.mongodb.DBObject.removeField:(Ljava/lang/String;)Ljava/lang/Object;
            pop
        10: .line 700
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 3 /* unwrapped */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClass:(Ljava/lang/Object;)Lorg/mongodb/morphia/mapping/MappedClass;
            astore 10 /* mc */
        start local 10 // org.mongodb.morphia.mapping.MappedClass mc
        11: .line 701
            aload 0 /* this */
            aload 3 /* unwrapped */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getCollection:(Ljava/lang/Object;)Lcom/mongodb/DBCollection;
            astore 11 /* dbColl */
        start local 11 // com.mongodb.DBCollection dbColl
        12: .line 704
            aload 0 /* this */
            aload 11 /* dbColl */
            aload 3 /* unwrapped */
            aload 5 /* dbObj */
            aload 8 /* idValue */
            new org.mongodb.morphia.InsertOptions
            dup
            invokespecial org.mongodb.morphia.InsertOptions.<init>:()V
            aload 2 /* wc */
            invokevirtual org.mongodb.morphia.InsertOptions.writeConcern:(Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/InsertOptions;
            aload 10 /* mc */
            invokevirtual org.mongodb.morphia.DatastoreImpl.tryVersionedUpdate:(Lcom/mongodb/DBCollection;Ljava/lang/Object;Lcom/mongodb/DBObject;Ljava/lang/Object;Lorg/mongodb/morphia/InsertOptions;Lorg/mongodb/morphia/mapping/MappedClass;)Lcom/mongodb/WriteResult;
            astore 9 /* wr */
        start local 9 // com.mongodb.WriteResult wr
        13: .line 706
            aload 9 /* wr */
            ifnonnull 16
        14: .line 707
            aload 0 /* this */
            aload 3 /* unwrapped */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.DatastoreImpl.createQuery:(Ljava/lang/Class;)Lorg/mongodb/morphia/query/Query;
            ldc "_id"
            aload 7 /* id */
            invokeinterface org.mongodb.morphia.query.Query.filter:(Ljava/lang/String;Ljava/lang/Object;)Lorg/mongodb/morphia/query/Query;
            astore 12 /* query */
        start local 12 // org.mongodb.morphia.query.Query query
        15: .line 708
            aload 0 /* this */
            aload 12 /* query */
            new com.mongodb.BasicDBObject
            dup
            ldc "$set"
            aload 5 /* dbObj */
            invokespecial com.mongodb.BasicDBObject.<init>:(Ljava/lang/String;Ljava/lang/Object;)V
            iconst_0
            iconst_0
            aload 2 /* wc */
            invokevirtual org.mongodb.morphia.DatastoreImpl.update:(Lorg/mongodb/morphia/query/Query;Lcom/mongodb/DBObject;ZZLcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/query/UpdateResults;
            invokevirtual org.mongodb.morphia.query.UpdateResults.getWriteResult:()Lcom/mongodb/WriteResult;
            astore 9 /* wr */
        end local 12 // org.mongodb.morphia.query.Query query
        16: .line 711
      StackMap locals: org.mongodb.morphia.DatastoreImpl java.lang.Object com.mongodb.WriteConcern java.lang.Object java.util.LinkedHashMap com.mongodb.DBObject org.mongodb.morphia.Key java.lang.Object java.lang.Object com.mongodb.WriteResult org.mongodb.morphia.mapping.MappedClass com.mongodb.DBCollection
      StackMap stack:
            new org.mongodb.morphia.query.UpdateResults
            dup
            aload 9 /* wr */
            invokespecial org.mongodb.morphia.query.UpdateResults.<init>:(Lcom/mongodb/WriteResult;)V
            astore 12 /* res */
        start local 12 // org.mongodb.morphia.query.UpdateResults res
        17: .line 713
            aload 12 /* res */
            invokevirtual org.mongodb.morphia.query.UpdateResults.getUpdatedCount:()I
            ifne 19
        18: .line 714
            new org.mongodb.morphia.query.UpdateException
            dup
            ldc "Nothing updated"
            invokespecial org.mongodb.morphia.query.UpdateException.<init>:(Ljava/lang/String;)V
            athrow
        19: .line 717
      StackMap locals: org.mongodb.morphia.query.UpdateResults
      StackMap stack:
            aload 5 /* dbObj */
            ldc "_id"
            aload 8 /* idValue */
            invokeinterface com.mongodb.DBObject.put:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        20: .line 718
            aload 0 /* this */
            aload 1 /* entity */
            invokestatic java.util.Collections.singletonList:(Ljava/lang/Object;)Ljava/util/List;
            aload 4 /* involvedObjects */
            aload 11 /* dbColl */
            iconst_0
            invokevirtual org.mongodb.morphia.DatastoreImpl.postSaveOperations:(Ljava/lang/Iterable;Ljava/util/Map;Lcom/mongodb/DBCollection;Z)Ljava/util/List;
            pop
        21: .line 719
            aload 6 /* key */
            areturn
        end local 12 // org.mongodb.morphia.query.UpdateResults res
        end local 11 // com.mongodb.DBCollection dbColl
        end local 10 // org.mongodb.morphia.mapping.MappedClass mc
        end local 9 // com.mongodb.WriteResult wr
        end local 8 // java.lang.Object idValue
        end local 7 // java.lang.Object id
        end local 6 // org.mongodb.morphia.Key key
        end local 5 // com.mongodb.DBObject dbObj
        end local 4 // java.util.LinkedHashMap involvedObjects
        end local 3 // java.lang.Object unwrapped
        end local 2 // com.mongodb.WriteConcern wc
        end local 1 // java.lang.Object entity
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   22     0             this  Lorg/mongodb/morphia/DatastoreImpl;
            0   22     1           entity  TT;
            0   22     2               wc  Lcom/mongodb/WriteConcern;
            1   22     3        unwrapped  TT;
            2   22     4  involvedObjects  Ljava/util/LinkedHashMap<Ljava/lang/Object;Lcom/mongodb/DBObject;>;
            3   22     5            dbObj  Lcom/mongodb/DBObject;
            4   22     6              key  Lorg/mongodb/morphia/Key<TT;>;
            6   22     7               id  Ljava/lang/Object;
            9   22     8          idValue  Ljava/lang/Object;
           13   22     9               wr  Lcom/mongodb/WriteResult;
           11   22    10               mc  Lorg/mongodb/morphia/mapping/MappedClass;
           12   22    11           dbColl  Lcom/mongodb/DBCollection;
           15   16    12            query  Lorg/mongodb/morphia/query/Query<TT;>;
           17   22    12              res  Lorg/mongodb/morphia/query/UpdateResults;
    Signature: <T:Ljava/lang/Object;>(TT;Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/Key<TT;>;
    MethodParameters:
        Name  Flags
      entity  final
      wc      final

  public <T> org.mongodb.morphia.query.Query<T> queryByExample(T);
    descriptor: (Ljava/lang/Object;)Lorg/mongodb/morphia/query/Query;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Object ex
         0: .line 724
            aload 0 /* this */
            aload 0 /* this */
            aload 1 /* ex */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getCollection:(Ljava/lang/Object;)Lcom/mongodb/DBCollection;
            aload 1 /* ex */
            invokevirtual org.mongodb.morphia.DatastoreImpl.queryByExample:(Lcom/mongodb/DBCollection;Ljava/lang/Object;)Lorg/mongodb/morphia/query/Query;
            areturn
        end local 1 // java.lang.Object ex
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1    ex  TT;
    Signature: <T:Ljava/lang/Object;>(TT;)Lorg/mongodb/morphia/query/Query<TT;>;
    MethodParameters:
      Name  Flags
      ex    final

  public <T> java.lang.Iterable<org.mongodb.morphia.Key<T>> save(java.lang.Iterable<T>);
    descriptor: (Ljava/lang/Iterable;)Ljava/lang/Iterable;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Iterable entities
         0: .line 729
            aload 1 /* entities */
            invokeinterface java.lang.Iterable.iterator:()Ljava/util/Iterator;
            astore 2 /* iterator */
        start local 2 // java.util.Iterator iterator
         1: .line 730
            aload 2 /* iterator */
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 3
         2: .line 731
            invokestatic java.util.Collections.emptyList:()Ljava/util/List;
            goto 4
         3: .line 732
      StackMap locals: java.util.Iterator
      StackMap stack:
            aload 0 /* this */
            aload 1 /* entities */
            aload 0 /* this */
            aload 2 /* iterator */
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            invokevirtual org.mongodb.morphia.DatastoreImpl.getWriteConcern:(Ljava/lang/Object;)Lcom/mongodb/WriteConcern;
            invokevirtual org.mongodb.morphia.DatastoreImpl.save:(Ljava/lang/Iterable;Lcom/mongodb/WriteConcern;)Ljava/lang/Iterable;
         4: .line 730
      StackMap locals:
      StackMap stack: java.lang.Iterable
            areturn
        end local 2 // java.util.Iterator iterator
        end local 1 // java.lang.Iterable entities
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    5     0      this  Lorg/mongodb/morphia/DatastoreImpl;
            0    5     1  entities  Ljava/lang/Iterable<TT;>;
            1    5     2  iterator  Ljava/util/Iterator<TT;>;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Iterable<TT;>;)Ljava/lang/Iterable<Lorg/mongodb/morphia/Key<TT;>;>;
    MethodParameters:
          Name  Flags
      entities  final

  public <T> java.lang.Iterable<org.mongodb.morphia.Key<T>> save(java.lang.Iterable<T>, com.mongodb.WriteConcern);
    descriptor: (Ljava/lang/Iterable;Lcom/mongodb/WriteConcern;)Ljava/lang/Iterable;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Iterable entities
        start local 2 // com.mongodb.WriteConcern wc
         0: .line 737
            aload 0 /* this */
            aload 1 /* entities */
            new org.mongodb.morphia.InsertOptions
            dup
            invokespecial org.mongodb.morphia.InsertOptions.<init>:()V
            aload 2 /* wc */
            invokevirtual org.mongodb.morphia.InsertOptions.writeConcern:(Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/InsertOptions;
            invokevirtual org.mongodb.morphia.DatastoreImpl.save:(Ljava/lang/Iterable;Lorg/mongodb/morphia/InsertOptions;)Ljava/lang/Iterable;
            areturn
        end local 2 // com.mongodb.WriteConcern wc
        end local 1 // java.lang.Iterable entities
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0      this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  entities  Ljava/lang/Iterable<TT;>;
            0    1     2        wc  Lcom/mongodb/WriteConcern;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Iterable<TT;>;Lcom/mongodb/WriteConcern;)Ljava/lang/Iterable<Lorg/mongodb/morphia/Key<TT;>;>;
    MethodParameters:
          Name  Flags
      entities  final
      wc        final

  public <T> java.lang.Iterable<org.mongodb.morphia.Key<T>> save(java.lang.Iterable<T>, org.mongodb.morphia.InsertOptions);
    descriptor: (Ljava/lang/Iterable;Lorg/mongodb/morphia/InsertOptions;)Ljava/lang/Iterable;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=6, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Iterable entities
        start local 2 // org.mongodb.morphia.InsertOptions options
         0: .line 742
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 3 /* savedKeys */
        start local 3 // java.util.List savedKeys
         1: .line 743
            aload 1 /* entities */
            invokeinterface java.lang.Iterable.iterator:()Ljava/util/Iterator;
            astore 5
            goto 4
      StackMap locals: org.mongodb.morphia.DatastoreImpl java.lang.Iterable org.mongodb.morphia.InsertOptions java.util.List top java.util.Iterator
      StackMap stack:
         2: aload 5
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.Object
            astore 4 /* ent */
        start local 4 // java.lang.Object ent
         3: .line 744
            aload 3 /* savedKeys */
            aload 0 /* this */
            aload 4 /* ent */
            aload 2 /* options */
            invokevirtual org.mongodb.morphia.DatastoreImpl.save:(Ljava/lang/Object;Lorg/mongodb/morphia/InsertOptions;)Lorg/mongodb/morphia/Key;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 4 // java.lang.Object ent
         4: .line 743
      StackMap locals:
      StackMap stack:
            aload 5
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 2
         5: .line 746
            aload 3 /* savedKeys */
            areturn
        end local 3 // java.util.List savedKeys
        end local 2 // org.mongodb.morphia.InsertOptions options
        end local 1 // java.lang.Iterable entities
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    6     0       this  Lorg/mongodb/morphia/DatastoreImpl;
            0    6     1   entities  Ljava/lang/Iterable<TT;>;
            0    6     2    options  Lorg/mongodb/morphia/InsertOptions;
            1    6     3  savedKeys  Ljava/util/List<Lorg/mongodb/morphia/Key<TT;>;>;
            3    4     4        ent  TT;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Iterable<TT;>;Lorg/mongodb/morphia/InsertOptions;)Ljava/lang/Iterable<Lorg/mongodb/morphia/Key<TT;>;>;
    MethodParameters:
          Name  Flags
      entities  final
      options   final

  public <T> java.lang.Iterable<org.mongodb.morphia.Key<T>> save(T[]);
    descriptor: ([Ljava/lang/Object;)Ljava/lang/Iterable;
    flags: (0x0081) ACC_PUBLIC, ACC_VARARGS
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Object[] entities
         0: .line 753
            aload 0 /* this */
            aload 1 /* entities */
            invokestatic java.util.Arrays.asList:([Ljava/lang/Object;)Ljava/util/List;
            new org.mongodb.morphia.InsertOptions
            dup
            invokespecial org.mongodb.morphia.InsertOptions.<init>:()V
            invokevirtual org.mongodb.morphia.DatastoreImpl.save:(Ljava/lang/Iterable;Lorg/mongodb/morphia/InsertOptions;)Ljava/lang/Iterable;
            areturn
        end local 1 // java.lang.Object[] entities
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0      this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  entities  [Ljava/lang/Object;
    Signature: <T:Ljava/lang/Object;>([TT;)Ljava/lang/Iterable<Lorg/mongodb/morphia/Key<TT;>;>;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
          Name  Flags
      entities  final

  public <T> org.mongodb.morphia.Key<T> save(T);
    descriptor: (Ljava/lang/Object;)Lorg/mongodb/morphia/Key;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Object entity
         0: .line 758
            aload 0 /* this */
            aload 1 /* entity */
            new org.mongodb.morphia.InsertOptions
            dup
            invokespecial org.mongodb.morphia.InsertOptions.<init>:()V
            invokevirtual org.mongodb.morphia.DatastoreImpl.save:(Ljava/lang/Object;Lorg/mongodb/morphia/InsertOptions;)Lorg/mongodb/morphia/Key;
            areturn
        end local 1 // java.lang.Object entity
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0    this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  entity  TT;
    Signature: <T:Ljava/lang/Object;>(TT;)Lorg/mongodb/morphia/Key<TT;>;
    MethodParameters:
        Name  Flags
      entity  final

  public <T> org.mongodb.morphia.Key<T> save(T, com.mongodb.WriteConcern);
    descriptor: (Ljava/lang/Object;Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/Key;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Object entity
        start local 2 // com.mongodb.WriteConcern wc
         0: .line 764
            aload 0 /* this */
            aload 1 /* entity */
            new org.mongodb.morphia.InsertOptions
            dup
            invokespecial org.mongodb.morphia.InsertOptions.<init>:()V
         1: .line 765
            aload 2 /* wc */
            invokevirtual org.mongodb.morphia.InsertOptions.writeConcern:(Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/InsertOptions;
         2: .line 764
            invokevirtual org.mongodb.morphia.DatastoreImpl.save:(Ljava/lang/Object;Lorg/mongodb/morphia/InsertOptions;)Lorg/mongodb/morphia/Key;
            areturn
        end local 2 // com.mongodb.WriteConcern wc
        end local 1 // java.lang.Object entity
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    3     0    this  Lorg/mongodb/morphia/DatastoreImpl;
            0    3     1  entity  TT;
            0    3     2      wc  Lcom/mongodb/WriteConcern;
    Signature: <T:Ljava/lang/Object;>(TT;Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/Key<TT;>;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
        Name  Flags
      entity  final
      wc      final

  public <T> org.mongodb.morphia.Key<T> save(T, org.mongodb.morphia.InsertOptions);
    descriptor: (Ljava/lang/Object;Lorg/mongodb/morphia/InsertOptions;)Lorg/mongodb/morphia/Key;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=4, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Object entity
        start local 2 // org.mongodb.morphia.InsertOptions options
         0: .line 770
            aload 1 /* entity */
            ifnonnull 2
         1: .line 771
            new org.mongodb.morphia.query.UpdateException
            dup
            ldc "Can not persist a null entity"
            invokespecial org.mongodb.morphia.query.UpdateException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 774
      StackMap locals:
      StackMap stack:
            aload 1 /* entity */
            invokestatic org.mongodb.morphia.mapping.lazy.proxy.ProxyHelper.unwrap:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 3 /* unwrapped */
        start local 3 // java.lang.Object unwrapped
         3: .line 775
            aload 0 /* this */
            aload 0 /* this */
            aload 3 /* unwrapped */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getCollection:(Ljava/lang/Object;)Lcom/mongodb/DBCollection;
            aload 3 /* unwrapped */
            aload 0 /* this */
            aload 2 /* options */
            aload 1 /* entity */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.DatastoreImpl.enforceWriteConcern:(Lorg/mongodb/morphia/InsertOptions;Ljava/lang/Class;)Lorg/mongodb/morphia/InsertOptions;
            invokevirtual org.mongodb.morphia.DatastoreImpl.save:(Lcom/mongodb/DBCollection;Ljava/lang/Object;Lorg/mongodb/morphia/InsertOptions;)Lorg/mongodb/morphia/Key;
            areturn
        end local 3 // java.lang.Object unwrapped
        end local 2 // org.mongodb.morphia.InsertOptions options
        end local 1 // java.lang.Object entity
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    4     0       this  Lorg/mongodb/morphia/DatastoreImpl;
            0    4     1     entity  TT;
            0    4     2    options  Lorg/mongodb/morphia/InsertOptions;
            3    4     3  unwrapped  TT;
    Signature: <T:Ljava/lang/Object;>(TT;Lorg/mongodb/morphia/InsertOptions;)Lorg/mongodb/morphia/Key<TT;>;
    MethodParameters:
         Name  Flags
      entity   final
      options  final

  public <T> org.mongodb.morphia.query.UpdateResults update(T, org.mongodb.morphia.query.UpdateOperations<T>);
    descriptor: (Ljava/lang/Object;Lorg/mongodb/morphia/query/UpdateOperations;)Lorg/mongodb/morphia/query/UpdateResults;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=6, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Object entity
        start local 2 // org.mongodb.morphia.query.UpdateOperations operations
         0: .line 781
            aload 1 /* entity */
            instanceof org.mongodb.morphia.query.Query
            ifeq 2
         1: .line 782
            aload 0 /* this */
            aload 1 /* entity */
            checkcast org.mongodb.morphia.query.Query
            aload 2 /* operations */
            invokevirtual org.mongodb.morphia.DatastoreImpl.update:(Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/query/UpdateOperations;)Lorg/mongodb/morphia/query/UpdateResults;
            areturn
         2: .line 785
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 1 /* entity */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClass:(Ljava/lang/Object;)Lorg/mongodb/morphia/mapping/MappedClass;
            astore 3 /* mc */
        start local 3 // org.mongodb.morphia.mapping.MappedClass mc
         3: .line 786
            aload 0 /* this */
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 1 /* entity */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClass:(Ljava/lang/Object;)Lorg/mongodb/morphia/mapping/MappedClass;
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getClazz:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.DatastoreImpl.createQuery:(Ljava/lang/Class;)Lorg/mongodb/morphia/query/Query;
         4: .line 787
            invokeinterface org.mongodb.morphia.query.Query.disableValidation:()Lorg/mongodb/morphia/query/Query;
         5: .line 788
            ldc "_id"
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 1 /* entity */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getId:(Ljava/lang/Object;)Ljava/lang/Object;
            invokeinterface org.mongodb.morphia.query.Query.filter:(Ljava/lang/String;Ljava/lang/Object;)Lorg/mongodb/morphia/query/Query;
         6: .line 786
            astore 4 /* query */
        start local 4 // org.mongodb.morphia.query.Query query
         7: .line 789
            aload 3 /* mc */
            ldc Lorg/mongodb/morphia/annotations/Version;
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getFieldsAnnotatedWith:(Ljava/lang/Class;)Ljava/util/List;
            invokeinterface java.util.List.isEmpty:()Z
            ifne 10
         8: .line 790
            aload 3 /* mc */
            ldc Lorg/mongodb/morphia/annotations/Version;
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getFieldsAnnotatedWith:(Ljava/lang/Class;)Ljava/util/List;
            iconst_0
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast org.mongodb.morphia.mapping.MappedField
            astore 5 /* field */
        start local 5 // org.mongodb.morphia.mapping.MappedField field
         9: .line 791
            aload 4 /* query */
            aload 5 /* field */
            invokevirtual org.mongodb.morphia.mapping.MappedField.getNameToStore:()Ljava/lang/String;
            invokeinterface org.mongodb.morphia.query.Query.field:(Ljava/lang/String;)Lorg/mongodb/morphia/query/FieldEnd;
            aload 5 /* field */
            aload 1 /* entity */
            invokevirtual org.mongodb.morphia.mapping.MappedField.getFieldValue:(Ljava/lang/Object;)Ljava/lang/Object;
            invokeinterface org.mongodb.morphia.query.FieldEnd.equal:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
        end local 5 // org.mongodb.morphia.mapping.MappedField field
        10: .line 794
      StackMap locals: org.mongodb.morphia.mapping.MappedClass org.mongodb.morphia.query.Query
      StackMap stack:
            aload 0 /* this */
            aload 4 /* query */
            aload 2 /* operations */
            invokevirtual org.mongodb.morphia.DatastoreImpl.update:(Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/query/UpdateOperations;)Lorg/mongodb/morphia/query/UpdateResults;
            areturn
        end local 4 // org.mongodb.morphia.query.Query query
        end local 3 // org.mongodb.morphia.mapping.MappedClass mc
        end local 2 // org.mongodb.morphia.query.UpdateOperations operations
        end local 1 // java.lang.Object entity
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   11     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0   11     1      entity  TT;
            0   11     2  operations  Lorg/mongodb/morphia/query/UpdateOperations<TT;>;
            3   11     3          mc  Lorg/mongodb/morphia/mapping/MappedClass;
            7   11     4       query  Lorg/mongodb/morphia/query/Query<*>;
            9   10     5       field  Lorg/mongodb/morphia/mapping/MappedField;
    Signature: <T:Ljava/lang/Object;>(TT;Lorg/mongodb/morphia/query/UpdateOperations<TT;>;)Lorg/mongodb/morphia/query/UpdateResults;
    MethodParameters:
            Name  Flags
      entity      final
      operations  final

  public <T> org.mongodb.morphia.query.UpdateResults update(org.mongodb.morphia.Key<T>, org.mongodb.morphia.query.UpdateOperations<T>);
    descriptor: (Lorg/mongodb/morphia/Key;Lorg/mongodb/morphia/query/UpdateOperations;)Lorg/mongodb/morphia/query/UpdateResults;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.Key key
        start local 2 // org.mongodb.morphia.query.UpdateOperations operations
         0: .line 800
            aload 1 /* key */
            invokevirtual org.mongodb.morphia.Key.getType:()Ljava/lang/Class;
            astore 3 /* clazz */
        start local 3 // java.lang.Class clazz
         1: .line 801
            aload 3 /* clazz */
            ifnonnull 3
         2: .line 802
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 1 /* key */
            invokevirtual org.mongodb.morphia.Key.getCollection:()Ljava/lang/String;
            invokevirtual org.mongodb.morphia.mapping.Mapper.getClassFromCollection:(Ljava/lang/String;)Ljava/lang/Class;
            astore 3 /* clazz */
         3: .line 804
      StackMap locals: java.lang.Class
      StackMap stack:
            aload 0 /* this */
            aload 0 /* this */
            aload 3 /* clazz */
            invokevirtual org.mongodb.morphia.DatastoreImpl.createQuery:(Ljava/lang/Class;)Lorg/mongodb/morphia/query/Query;
            invokeinterface org.mongodb.morphia.query.Query.disableValidation:()Lorg/mongodb/morphia/query/Query;
            ldc "_id"
            aload 1 /* key */
            invokevirtual org.mongodb.morphia.Key.getId:()Ljava/lang/Object;
            invokeinterface org.mongodb.morphia.query.Query.filter:(Ljava/lang/String;Ljava/lang/Object;)Lorg/mongodb/morphia/query/Query;
            aload 2 /* operations */
            invokevirtual org.mongodb.morphia.DatastoreImpl.updateFirst:(Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/query/UpdateOperations;)Lorg/mongodb/morphia/query/UpdateResults;
            areturn
        end local 3 // java.lang.Class clazz
        end local 2 // org.mongodb.morphia.query.UpdateOperations operations
        end local 1 // org.mongodb.morphia.Key key
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    4     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    4     1         key  Lorg/mongodb/morphia/Key<TT;>;
            0    4     2  operations  Lorg/mongodb/morphia/query/UpdateOperations<TT;>;
            1    4     3       clazz  Ljava/lang/Class<TT;>;
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/Key<TT;>;Lorg/mongodb/morphia/query/UpdateOperations<TT;>;)Lorg/mongodb/morphia/query/UpdateResults;
    MethodParameters:
            Name  Flags
      key         final
      operations  final

  public <T> org.mongodb.morphia.query.UpdateResults update(org.mongodb.morphia.query.Query<T>, org.mongodb.morphia.query.UpdateOperations<T>);
    descriptor: (Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/query/UpdateOperations;)Lorg/mongodb/morphia/query/UpdateResults;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.query.Query query
        start local 2 // org.mongodb.morphia.query.UpdateOperations operations
         0: .line 809
            aload 0 /* this */
            aload 1 /* query */
            aload 2 /* operations */
            new org.mongodb.morphia.UpdateOptions
            dup
            invokespecial org.mongodb.morphia.UpdateOptions.<init>:()V
         1: .line 810
            iconst_0
            invokevirtual org.mongodb.morphia.UpdateOptions.upsert:(Z)Lorg/mongodb/morphia/UpdateOptions;
         2: .line 811
            iconst_1
            invokevirtual org.mongodb.morphia.UpdateOptions.multi:(Z)Lorg/mongodb/morphia/UpdateOptions;
         3: .line 812
            aload 0 /* this */
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getEntityClass:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.DatastoreImpl.getWriteConcern:(Ljava/lang/Object;)Lcom/mongodb/WriteConcern;
            invokevirtual org.mongodb.morphia.UpdateOptions.writeConcern:(Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/UpdateOptions;
         4: .line 809
            invokevirtual org.mongodb.morphia.DatastoreImpl.update:(Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/query/UpdateOperations;Lorg/mongodb/morphia/UpdateOptions;)Lorg/mongodb/morphia/query/UpdateResults;
            areturn
        end local 2 // org.mongodb.morphia.query.UpdateOperations operations
        end local 1 // org.mongodb.morphia.query.Query query
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    5     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    5     1       query  Lorg/mongodb/morphia/query/Query<TT;>;
            0    5     2  operations  Lorg/mongodb/morphia/query/UpdateOperations<TT;>;
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/query/Query<TT;>;Lorg/mongodb/morphia/query/UpdateOperations<TT;>;)Lorg/mongodb/morphia/query/UpdateResults;
    MethodParameters:
            Name  Flags
      query       final
      operations  final

  public <T> org.mongodb.morphia.query.UpdateResults update(org.mongodb.morphia.query.Query<T>, org.mongodb.morphia.query.UpdateOperations<T>, boolean);
    descriptor: (Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/query/UpdateOperations;Z)Lorg/mongodb/morphia/query/UpdateResults;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=4, args_size=4
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.query.Query query
        start local 2 // org.mongodb.morphia.query.UpdateOperations operations
        start local 3 // boolean createIfMissing
         0: .line 817
            aload 0 /* this */
            aload 1 /* query */
            aload 2 /* operations */
            new org.mongodb.morphia.UpdateOptions
            dup
            invokespecial org.mongodb.morphia.UpdateOptions.<init>:()V
         1: .line 818
            iload 3 /* createIfMissing */
            invokevirtual org.mongodb.morphia.UpdateOptions.upsert:(Z)Lorg/mongodb/morphia/UpdateOptions;
         2: .line 819
            aload 0 /* this */
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getEntityClass:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.DatastoreImpl.getWriteConcern:(Ljava/lang/Object;)Lcom/mongodb/WriteConcern;
            invokevirtual org.mongodb.morphia.UpdateOptions.writeConcern:(Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/UpdateOptions;
         3: .line 817
            invokevirtual org.mongodb.morphia.DatastoreImpl.update:(Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/query/UpdateOperations;Lorg/mongodb/morphia/UpdateOptions;)Lorg/mongodb/morphia/query/UpdateResults;
            areturn
        end local 3 // boolean createIfMissing
        end local 2 // org.mongodb.morphia.query.UpdateOperations operations
        end local 1 // org.mongodb.morphia.query.Query query
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    4     0             this  Lorg/mongodb/morphia/DatastoreImpl;
            0    4     1            query  Lorg/mongodb/morphia/query/Query<TT;>;
            0    4     2       operations  Lorg/mongodb/morphia/query/UpdateOperations<TT;>;
            0    4     3  createIfMissing  Z
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/query/Query<TT;>;Lorg/mongodb/morphia/query/UpdateOperations<TT;>;Z)Lorg/mongodb/morphia/query/UpdateResults;
    MethodParameters:
                 Name  Flags
      query            final
      operations       final
      createIfMissing  final

  public <T> org.mongodb.morphia.query.UpdateResults update(org.mongodb.morphia.query.Query<T>, org.mongodb.morphia.query.UpdateOperations<T>, boolean, com.mongodb.WriteConcern);
    descriptor: (Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/query/UpdateOperations;ZLcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/query/UpdateResults;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=5, args_size=5
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.query.Query query
        start local 2 // org.mongodb.morphia.query.UpdateOperations operations
        start local 3 // boolean createIfMissing
        start local 4 // com.mongodb.WriteConcern wc
         0: .line 825
            aload 0 /* this */
            aload 1 /* query */
            aload 2 /* operations */
            new org.mongodb.morphia.UpdateOptions
            dup
            invokespecial org.mongodb.morphia.UpdateOptions.<init>:()V
         1: .line 826
            iload 3 /* createIfMissing */
            invokevirtual org.mongodb.morphia.UpdateOptions.upsert:(Z)Lorg/mongodb/morphia/UpdateOptions;
         2: .line 827
            iconst_1
            invokevirtual org.mongodb.morphia.UpdateOptions.multi:(Z)Lorg/mongodb/morphia/UpdateOptions;
         3: .line 828
            aload 4 /* wc */
            invokevirtual org.mongodb.morphia.UpdateOptions.writeConcern:(Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/UpdateOptions;
         4: .line 825
            invokevirtual org.mongodb.morphia.DatastoreImpl.update:(Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/query/UpdateOperations;Lorg/mongodb/morphia/UpdateOptions;)Lorg/mongodb/morphia/query/UpdateResults;
            areturn
        end local 4 // com.mongodb.WriteConcern wc
        end local 3 // boolean createIfMissing
        end local 2 // org.mongodb.morphia.query.UpdateOperations operations
        end local 1 // org.mongodb.morphia.query.Query query
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    5     0             this  Lorg/mongodb/morphia/DatastoreImpl;
            0    5     1            query  Lorg/mongodb/morphia/query/Query<TT;>;
            0    5     2       operations  Lorg/mongodb/morphia/query/UpdateOperations<TT;>;
            0    5     3  createIfMissing  Z
            0    5     4               wc  Lcom/mongodb/WriteConcern;
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/query/Query<TT;>;Lorg/mongodb/morphia/query/UpdateOperations<TT;>;ZLcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/query/UpdateResults;
    MethodParameters:
                 Name  Flags
      query            final
      operations       final
      createIfMissing  final
      wc               final

  public <T> org.mongodb.morphia.query.UpdateResults updateFirst(org.mongodb.morphia.query.Query<T>, org.mongodb.morphia.query.UpdateOperations<T>);
    descriptor: (Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/query/UpdateOperations;)Lorg/mongodb/morphia/query/UpdateResults;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.query.Query query
        start local 2 // org.mongodb.morphia.query.UpdateOperations operations
         0: .line 833
            aload 0 /* this */
            aload 1 /* query */
            aload 2 /* operations */
            new org.mongodb.morphia.UpdateOptions
            dup
            invokespecial org.mongodb.morphia.UpdateOptions.<init>:()V
            invokevirtual org.mongodb.morphia.DatastoreImpl.update:(Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/query/UpdateOperations;Lorg/mongodb/morphia/UpdateOptions;)Lorg/mongodb/morphia/query/UpdateResults;
            areturn
        end local 2 // org.mongodb.morphia.query.UpdateOperations operations
        end local 1 // org.mongodb.morphia.query.Query query
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    1     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1       query  Lorg/mongodb/morphia/query/Query<TT;>;
            0    1     2  operations  Lorg/mongodb/morphia/query/UpdateOperations<TT;>;
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/query/Query<TT;>;Lorg/mongodb/morphia/query/UpdateOperations<TT;>;)Lorg/mongodb/morphia/query/UpdateResults;
    MethodParameters:
            Name  Flags
      query       final
      operations  final

  public <T> org.mongodb.morphia.query.UpdateResults updateFirst(org.mongodb.morphia.query.Query<T>, org.mongodb.morphia.query.UpdateOperations<T>, boolean);
    descriptor: (Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/query/UpdateOperations;Z)Lorg/mongodb/morphia/query/UpdateResults;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=4, args_size=4
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.query.Query query
        start local 2 // org.mongodb.morphia.query.UpdateOperations operations
        start local 3 // boolean createIfMissing
         0: .line 838
            aload 0 /* this */
            aload 1 /* query */
            aload 2 /* operations */
            new org.mongodb.morphia.UpdateOptions
            dup
            invokespecial org.mongodb.morphia.UpdateOptions.<init>:()V
            iload 3 /* createIfMissing */
            invokevirtual org.mongodb.morphia.UpdateOptions.upsert:(Z)Lorg/mongodb/morphia/UpdateOptions;
            invokevirtual org.mongodb.morphia.DatastoreImpl.update:(Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/query/UpdateOperations;Lorg/mongodb/morphia/UpdateOptions;)Lorg/mongodb/morphia/query/UpdateResults;
            areturn
        end local 3 // boolean createIfMissing
        end local 2 // org.mongodb.morphia.query.UpdateOperations operations
        end local 1 // org.mongodb.morphia.query.Query query
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    1     0             this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1            query  Lorg/mongodb/morphia/query/Query<TT;>;
            0    1     2       operations  Lorg/mongodb/morphia/query/UpdateOperations<TT;>;
            0    1     3  createIfMissing  Z
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/query/Query<TT;>;Lorg/mongodb/morphia/query/UpdateOperations<TT;>;Z)Lorg/mongodb/morphia/query/UpdateResults;
    MethodParameters:
                 Name  Flags
      query            final
      operations       final
      createIfMissing  final

  public <T> org.mongodb.morphia.query.UpdateResults updateFirst(org.mongodb.morphia.query.Query<T>, org.mongodb.morphia.query.UpdateOperations<T>, boolean, com.mongodb.WriteConcern);
    descriptor: (Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/query/UpdateOperations;ZLcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/query/UpdateResults;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=5, args_size=5
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.query.Query query
        start local 2 // org.mongodb.morphia.query.UpdateOperations operations
        start local 3 // boolean createIfMissing
        start local 4 // com.mongodb.WriteConcern wc
         0: .line 845
            aload 0 /* this */
            aload 1 /* query */
            aload 2 /* operations */
            new org.mongodb.morphia.UpdateOptions
            dup
            invokespecial org.mongodb.morphia.UpdateOptions.<init>:()V
         1: .line 846
            iload 3 /* createIfMissing */
            invokevirtual org.mongodb.morphia.UpdateOptions.upsert:(Z)Lorg/mongodb/morphia/UpdateOptions;
         2: .line 847
            aload 4 /* wc */
            invokevirtual org.mongodb.morphia.UpdateOptions.writeConcern:(Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/UpdateOptions;
         3: .line 845
            invokevirtual org.mongodb.morphia.DatastoreImpl.update:(Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/query/UpdateOperations;Lorg/mongodb/morphia/UpdateOptions;)Lorg/mongodb/morphia/query/UpdateResults;
            areturn
        end local 4 // com.mongodb.WriteConcern wc
        end local 3 // boolean createIfMissing
        end local 2 // org.mongodb.morphia.query.UpdateOperations operations
        end local 1 // org.mongodb.morphia.query.Query query
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    4     0             this  Lorg/mongodb/morphia/DatastoreImpl;
            0    4     1            query  Lorg/mongodb/morphia/query/Query<TT;>;
            0    4     2       operations  Lorg/mongodb/morphia/query/UpdateOperations<TT;>;
            0    4     3  createIfMissing  Z
            0    4     4               wc  Lcom/mongodb/WriteConcern;
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/query/Query<TT;>;Lorg/mongodb/morphia/query/UpdateOperations<TT;>;ZLcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/query/UpdateResults;
    MethodParameters:
                 Name  Flags
      query            final
      operations       final
      createIfMissing  final
      wc               final

  public <T> org.mongodb.morphia.query.UpdateResults updateFirst(org.mongodb.morphia.query.Query<T>, T, boolean);
    descriptor: (Lorg/mongodb/morphia/query/Query;Ljava/lang/Object;Z)Lorg/mongodb/morphia/query/UpdateResults;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=7, args_size=4
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.query.Query query
        start local 2 // java.lang.Object entity
        start local 3 // boolean createIfMissing
         0: .line 852
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getMapper:()Lorg/mongodb/morphia/mapping/Mapper;
            aload 2 /* entity */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClass:(Ljava/lang/Object;)Lorg/mongodb/morphia/mapping/MappedClass;
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getMappedVersionField:()Lorg/mongodb/morphia/mapping/MappedField;
            ifnull 2
         1: .line 853
            new java.lang.UnsupportedOperationException
            dup
            ldc "updateFirst() is not supported with versioned entities"
            invokespecial java.lang.UnsupportedOperationException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 856
      StackMap locals:
      StackMap stack:
            new java.util.LinkedHashMap
            dup
            invokespecial java.util.LinkedHashMap.<init>:()V
            astore 4 /* involvedObjects */
        start local 4 // java.util.LinkedHashMap involvedObjects
         3: .line 857
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 2 /* entity */
            aload 4 /* involvedObjects */
            invokevirtual org.mongodb.morphia.mapping.Mapper.toDBObject:(Ljava/lang/Object;Ljava/util/Map;)Lcom/mongodb/DBObject;
            astore 5 /* dbObj */
        start local 5 // com.mongodb.DBObject dbObj
         4: .line 859
            aload 0 /* this */
            aload 1 /* query */
            aload 5 /* dbObj */
            iload 3 /* createIfMissing */
            iconst_0
            aload 0 /* this */
            aload 2 /* entity */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getWriteConcern:(Ljava/lang/Object;)Lcom/mongodb/WriteConcern;
            invokevirtual org.mongodb.morphia.DatastoreImpl.update:(Lorg/mongodb/morphia/query/Query;Lcom/mongodb/DBObject;ZZLcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/query/UpdateResults;
            astore 6 /* res */
        start local 6 // org.mongodb.morphia.query.UpdateResults res
         5: .line 862
            aload 6 /* res */
            invokevirtual org.mongodb.morphia.query.UpdateResults.getInsertedCount:()I
            ifle 7
         6: .line 863
            aload 5 /* dbObj */
            ldc "_id"
            aload 6 /* res */
            invokevirtual org.mongodb.morphia.query.UpdateResults.getNewId:()Ljava/lang/Object;
            invokeinterface com.mongodb.DBObject.put:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         7: .line 866
      StackMap locals: java.util.LinkedHashMap com.mongodb.DBObject org.mongodb.morphia.query.UpdateResults
      StackMap stack:
            aload 0 /* this */
            aload 2 /* entity */
            invokestatic java.util.Collections.singletonList:(Ljava/lang/Object;)Ljava/util/List;
            aload 4 /* involvedObjects */
            aload 0 /* this */
            aload 2 /* entity */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getCollection:(Ljava/lang/Object;)Lcom/mongodb/DBCollection;
            iconst_0
            invokevirtual org.mongodb.morphia.DatastoreImpl.postSaveOperations:(Ljava/lang/Iterable;Ljava/util/Map;Lcom/mongodb/DBCollection;Z)Ljava/util/List;
            pop
         8: .line 867
            aload 6 /* res */
            areturn
        end local 6 // org.mongodb.morphia.query.UpdateResults res
        end local 5 // com.mongodb.DBObject dbObj
        end local 4 // java.util.LinkedHashMap involvedObjects
        end local 3 // boolean createIfMissing
        end local 2 // java.lang.Object entity
        end local 1 // org.mongodb.morphia.query.Query query
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    9     0             this  Lorg/mongodb/morphia/DatastoreImpl;
            0    9     1            query  Lorg/mongodb/morphia/query/Query<TT;>;
            0    9     2           entity  TT;
            0    9     3  createIfMissing  Z
            3    9     4  involvedObjects  Ljava/util/LinkedHashMap<Ljava/lang/Object;Lcom/mongodb/DBObject;>;
            4    9     5            dbObj  Lcom/mongodb/DBObject;
            5    9     6              res  Lorg/mongodb/morphia/query/UpdateResults;
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/query/Query<TT;>;TT;Z)Lorg/mongodb/morphia/query/UpdateResults;
    MethodParameters:
                 Name  Flags
      query            final
      entity           final
      createIfMissing  final

  public <T> org.mongodb.morphia.query.Query<T> createQuery(java.lang.String, java.lang.Class<T>);
    descriptor: (Ljava/lang/String;Ljava/lang/Class;)Lorg/mongodb/morphia/query/Query;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.String collection
        start local 2 // java.lang.Class type
         0: .line 872
            aload 0 /* this */
            aload 2 /* type */
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getDB:()Lcom/mongodb/DB;
            aload 1 /* collection */
            invokevirtual com.mongodb.DB.getCollection:(Ljava/lang/String;)Lcom/mongodb/DBCollection;
            invokevirtual org.mongodb.morphia.DatastoreImpl.newQuery:(Ljava/lang/Class;Lcom/mongodb/DBCollection;)Lorg/mongodb/morphia/query/Query;
            areturn
        end local 2 // java.lang.Class type
        end local 1 // java.lang.String collection
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    1     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  collection  Ljava/lang/String;
            0    1     2        type  Ljava/lang/Class<TT;>;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/String;Ljava/lang/Class<TT;>;)Lorg/mongodb/morphia/query/Query<TT;>;
    MethodParameters:
            Name  Flags
      collection  final
      type        final

  public <T> org.mongodb.morphia.query.Query<T> createQuery(java.lang.Class<T>, com.mongodb.DBObject);
    descriptor: (Ljava/lang/Class;Lcom/mongodb/DBObject;)Lorg/mongodb/morphia/query/Query;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Class clazz
        start local 2 // com.mongodb.DBObject q
         0: .line 877
            aload 0 /* this */
            aload 1 /* clazz */
            aload 0 /* this */
            aload 1 /* clazz */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getCollection:(Ljava/lang/Class;)Lcom/mongodb/DBCollection;
            aload 2 /* q */
            invokevirtual org.mongodb.morphia.DatastoreImpl.newQuery:(Ljava/lang/Class;Lcom/mongodb/DBCollection;Lcom/mongodb/DBObject;)Lorg/mongodb/morphia/query/Query;
            areturn
        end local 2 // com.mongodb.DBObject q
        end local 1 // java.lang.Class clazz
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0   this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  clazz  Ljava/lang/Class<TT;>;
            0    1     2      q  Lcom/mongodb/DBObject;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;Lcom/mongodb/DBObject;)Lorg/mongodb/morphia/query/Query<TT;>;
    MethodParameters:
       Name  Flags
      clazz  final
      q      final

  public <T> org.mongodb.morphia.query.Query<T> createQuery(java.lang.String, java.lang.Class<T>, com.mongodb.DBObject);
    descriptor: (Ljava/lang/String;Ljava/lang/Class;Lcom/mongodb/DBObject;)Lorg/mongodb/morphia/query/Query;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.String collection
        start local 2 // java.lang.Class type
        start local 3 // com.mongodb.DBObject q
         0: .line 882
            aload 0 /* this */
            aload 2 /* type */
            aload 0 /* this */
            aload 1 /* collection */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getCollection:(Ljava/lang/String;)Lcom/mongodb/DBCollection;
            aload 3 /* q */
            invokevirtual org.mongodb.morphia.DatastoreImpl.newQuery:(Ljava/lang/Class;Lcom/mongodb/DBCollection;Lcom/mongodb/DBObject;)Lorg/mongodb/morphia/query/Query;
            areturn
        end local 3 // com.mongodb.DBObject q
        end local 2 // java.lang.Class type
        end local 1 // java.lang.String collection
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    1     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  collection  Ljava/lang/String;
            0    1     2        type  Ljava/lang/Class<TT;>;
            0    1     3           q  Lcom/mongodb/DBObject;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/String;Ljava/lang/Class<TT;>;Lcom/mongodb/DBObject;)Lorg/mongodb/morphia/query/Query<TT;>;
    MethodParameters:
            Name  Flags
      collection  final
      type        final
      q           final

  public <T, V> com.mongodb.DBRef createRef(java.lang.Class<T>, V);
    descriptor: (Ljava/lang/Class;Ljava/lang/Object;)Lcom/mongodb/DBRef;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Class clazz
        start local 2 // java.lang.Object id
         0: .line 887
            aload 2 /* id */
            ifnonnull 2
         1: .line 888
            new org.mongodb.morphia.mapping.MappingException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Could not get id for "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* clazz */
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial org.mongodb.morphia.mapping.MappingException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 890
      StackMap locals:
      StackMap stack:
            new com.mongodb.DBRef
            dup
            aload 0 /* this */
            aload 1 /* clazz */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getCollection:(Ljava/lang/Class;)Lcom/mongodb/DBCollection;
            invokevirtual com.mongodb.DBCollection.getName:()Ljava/lang/String;
            aload 2 /* id */
            invokespecial com.mongodb.DBRef.<init>:(Ljava/lang/String;Ljava/lang/Object;)V
            areturn
        end local 2 // java.lang.Object id
        end local 1 // java.lang.Class clazz
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    3     0   this  Lorg/mongodb/morphia/DatastoreImpl;
            0    3     1  clazz  Ljava/lang/Class<TT;>;
            0    3     2     id  TV;
    Signature: <T:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;TV;)Lcom/mongodb/DBRef;
    MethodParameters:
       Name  Flags
      clazz  final
      id     final

  public <T> com.mongodb.DBRef createRef(T);
    descriptor: (Ljava/lang/Object;)Lcom/mongodb/DBRef;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=4, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Object entity
         0: .line 895
            aload 1 /* entity */
            invokestatic org.mongodb.morphia.mapping.lazy.proxy.ProxyHelper.unwrap:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 2 /* wrapped */
        start local 2 // java.lang.Object wrapped
         1: .line 896
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 2 /* wrapped */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getId:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 3 /* id */
        start local 3 // java.lang.Object id
         2: .line 897
            aload 3 /* id */
            ifnonnull 4
         3: .line 898
            new org.mongodb.morphia.mapping.MappingException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Could not get id for "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 2 /* wrapped */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial org.mongodb.morphia.mapping.MappingException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 900
      StackMap locals: java.lang.Object java.lang.Object
      StackMap stack:
            aload 0 /* this */
            aload 2 /* wrapped */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            aload 3 /* id */
            invokevirtual org.mongodb.morphia.DatastoreImpl.createRef:(Ljava/lang/Class;Ljava/lang/Object;)Lcom/mongodb/DBRef;
            areturn
        end local 3 // java.lang.Object id
        end local 2 // java.lang.Object wrapped
        end local 1 // java.lang.Object entity
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    5     0     this  Lorg/mongodb/morphia/DatastoreImpl;
            0    5     1   entity  TT;
            1    5     2  wrapped  TT;
            2    5     3       id  Ljava/lang/Object;
    Signature: <T:Ljava/lang/Object;>(TT;)Lcom/mongodb/DBRef;
    MethodParameters:
        Name  Flags
      entity  final

  public <T> org.mongodb.morphia.query.UpdateOperations<T> createUpdateOperations(java.lang.Class<T>, com.mongodb.DBObject);
    descriptor: (Ljava/lang/Class;Lcom/mongodb/DBObject;)Lorg/mongodb/morphia/query/UpdateOperations;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=4, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Class type
        start local 2 // com.mongodb.DBObject ops
         0: .line 905
            aload 0 /* this */
            aload 1 /* type */
            invokevirtual org.mongodb.morphia.DatastoreImpl.createUpdateOperations:(Ljava/lang/Class;)Lorg/mongodb/morphia/query/UpdateOperations;
            checkcast org.mongodb.morphia.query.UpdateOpsImpl
            astore 3 /* upOps */
        start local 3 // org.mongodb.morphia.query.UpdateOpsImpl upOps
         1: .line 906
            aload 3 /* upOps */
            aload 2 /* ops */
            invokevirtual org.mongodb.morphia.query.UpdateOpsImpl.setOps:(Lcom/mongodb/DBObject;)V
         2: .line 907
            aload 3 /* upOps */
            areturn
        end local 3 // org.mongodb.morphia.query.UpdateOpsImpl upOps
        end local 2 // com.mongodb.DBObject ops
        end local 1 // java.lang.Class type
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    3     0   this  Lorg/mongodb/morphia/DatastoreImpl;
            0    3     1   type  Ljava/lang/Class<TT;>;
            0    3     2    ops  Lcom/mongodb/DBObject;
            1    3     3  upOps  Lorg/mongodb/morphia/query/UpdateOpsImpl<TT;>;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;Lcom/mongodb/DBObject;)Lorg/mongodb/morphia/query/UpdateOperations<TT;>;
    MethodParameters:
      Name  Flags
      type  final
      ops   final

  public <T, V> com.mongodb.WriteResult delete(java.lang.String, java.lang.Class<T>, V);
    descriptor: (Ljava/lang/String;Ljava/lang/Class;Ljava/lang/Object;)Lcom/mongodb/WriteResult;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.String kind
        start local 2 // java.lang.Class clazz
        start local 3 // java.lang.Object id
         0: .line 912
            aload 0 /* this */
            aload 0 /* this */
            aload 1 /* kind */
            aload 2 /* clazz */
            invokevirtual org.mongodb.morphia.DatastoreImpl.find:(Ljava/lang/String;Ljava/lang/Class;)Lorg/mongodb/morphia/query/Query;
            ldc "_id"
            aload 3 /* id */
            invokeinterface org.mongodb.morphia.query.Query.filter:(Ljava/lang/String;Ljava/lang/Object;)Lorg/mongodb/morphia/query/Query;
            invokevirtual org.mongodb.morphia.DatastoreImpl.delete:(Lorg/mongodb/morphia/query/Query;)Lcom/mongodb/WriteResult;
            areturn
        end local 3 // java.lang.Object id
        end local 2 // java.lang.Class clazz
        end local 1 // java.lang.String kind
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0   this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1   kind  Ljava/lang/String;
            0    1     2  clazz  Ljava/lang/Class<TT;>;
            0    1     3     id  TV;
    Signature: <T:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/lang/String;Ljava/lang/Class<TT;>;TV;)Lcom/mongodb/WriteResult;
    MethodParameters:
       Name  Flags
      kind   final
      clazz  final
      id     final

  public <T, V> com.mongodb.WriteResult delete(java.lang.String, java.lang.Class<T>, V, org.mongodb.morphia.DeleteOptions);
    descriptor: (Ljava/lang/String;Ljava/lang/Class;Ljava/lang/Object;Lorg/mongodb/morphia/DeleteOptions;)Lcom/mongodb/WriteResult;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=5, args_size=5
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.String kind
        start local 2 // java.lang.Class clazz
        start local 3 // java.lang.Object id
        start local 4 // org.mongodb.morphia.DeleteOptions options
         0: .line 917
            aload 0 /* this */
            aload 0 /* this */
            aload 1 /* kind */
            aload 2 /* clazz */
            invokevirtual org.mongodb.morphia.DatastoreImpl.find:(Ljava/lang/String;Ljava/lang/Class;)Lorg/mongodb/morphia/query/Query;
            ldc "_id"
            aload 3 /* id */
            invokeinterface org.mongodb.morphia.query.Query.filter:(Ljava/lang/String;Ljava/lang/Object;)Lorg/mongodb/morphia/query/Query;
            aload 4 /* options */
            invokevirtual org.mongodb.morphia.DatastoreImpl.delete:(Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/DeleteOptions;)Lcom/mongodb/WriteResult;
            areturn
        end local 4 // org.mongodb.morphia.DeleteOptions options
        end local 3 // java.lang.Object id
        end local 2 // java.lang.Class clazz
        end local 1 // java.lang.String kind
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0     this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1     kind  Ljava/lang/String;
            0    1     2    clazz  Ljava/lang/Class<TT;>;
            0    1     3       id  TV;
            0    1     4  options  Lorg/mongodb/morphia/DeleteOptions;
    Signature: <T:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/lang/String;Ljava/lang/Class<TT;>;TV;Lorg/mongodb/morphia/DeleteOptions;)Lcom/mongodb/WriteResult;
    MethodParameters:
         Name  Flags
      kind     final
      clazz    final
      id       final
      options  final

  public <T, V> com.mongodb.WriteResult delete(java.lang.String, java.lang.Class<T>, V, com.mongodb.WriteConcern);
    descriptor: (Ljava/lang/String;Ljava/lang/Class;Ljava/lang/Object;Lcom/mongodb/WriteConcern;)Lcom/mongodb/WriteResult;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=5, args_size=5
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.String kind
        start local 2 // java.lang.Class clazz
        start local 3 // java.lang.Object id
        start local 4 // com.mongodb.WriteConcern wc
         0: .line 923
            aload 0 /* this */
            aload 0 /* this */
            aload 1 /* kind */
            aload 2 /* clazz */
            invokevirtual org.mongodb.morphia.DatastoreImpl.find:(Ljava/lang/String;Ljava/lang/Class;)Lorg/mongodb/morphia/query/Query;
            ldc "_id"
            aload 3 /* id */
            invokeinterface org.mongodb.morphia.query.Query.filter:(Ljava/lang/String;Ljava/lang/Object;)Lorg/mongodb/morphia/query/Query;
            new org.mongodb.morphia.DeleteOptions
            dup
            invokespecial org.mongodb.morphia.DeleteOptions.<init>:()V
            aload 4 /* wc */
            invokevirtual org.mongodb.morphia.DeleteOptions.writeConcern:(Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/DeleteOptions;
            invokevirtual org.mongodb.morphia.DatastoreImpl.delete:(Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/DeleteOptions;)Lcom/mongodb/WriteResult;
            areturn
        end local 4 // com.mongodb.WriteConcern wc
        end local 3 // java.lang.Object id
        end local 2 // java.lang.Class clazz
        end local 1 // java.lang.String kind
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0   this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1   kind  Ljava/lang/String;
            0    1     2  clazz  Ljava/lang/Class<TT;>;
            0    1     3     id  TV;
            0    1     4     wc  Lcom/mongodb/WriteConcern;
    Signature: <T:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/lang/String;Ljava/lang/Class<TT;>;TV;Lcom/mongodb/WriteConcern;)Lcom/mongodb/WriteResult;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
       Name  Flags
      kind   final
      clazz  final
      id     final
      wc     final

  public <T> void ensureIndex(java.lang.Class<T>, java.lang.String);
    descriptor: (Ljava/lang/Class;Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Class type
        start local 2 // java.lang.String fields
         0: .line 929
            aload 0 /* this */
            aload 1 /* type */
            aconst_null
            aload 2 /* fields */
            iconst_0
            iconst_0
            invokevirtual org.mongodb.morphia.DatastoreImpl.ensureIndex:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;ZZ)V
         1: .line 930
            return
        end local 2 // java.lang.String fields
        end local 1 // java.lang.Class type
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    2     0    this  Lorg/mongodb/morphia/DatastoreImpl;
            0    2     1    type  Ljava/lang/Class<TT;>;
            0    2     2  fields  Ljava/lang/String;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;Ljava/lang/String;)V
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
        Name  Flags
      type    final
      fields  final

  public <T> void ensureIndex(java.lang.Class<T>, java.lang.String, java.lang.String, boolean, );
    descriptor: (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;ZZ)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=7, args_size=6
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Class clazz
        start local 2 // java.lang.String name
        start local 3 // java.lang.String fields
        start local 4 // boolean unique
        start local 5 // boolean dropDupsOnCreate
         0: .line 936
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getMapper:()Lorg/mongodb/morphia/mapping/Mapper;
            aload 1 /* clazz */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClass:(Ljava/lang/Object;)Lorg/mongodb/morphia/mapping/MappedClass;
            astore 6 /* mappedClass */
        start local 6 // org.mongodb.morphia.mapping.MappedClass mappedClass
         1: .line 937
            aload 0 /* this */
            aload 6 /* mappedClass */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getCollectionName:()Ljava/lang/String;
            aload 1 /* clazz */
            aload 2 /* name */
            aload 3 /* fields */
            iload 4 /* unique */
            iload 5 /* dropDupsOnCreate */
            invokevirtual org.mongodb.morphia.DatastoreImpl.ensureIndex:(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;ZZ)V
         2: .line 938
            return
        end local 6 // org.mongodb.morphia.mapping.MappedClass mappedClass
        end local 5 // boolean dropDupsOnCreate
        end local 4 // boolean unique
        end local 3 // java.lang.String fields
        end local 2 // java.lang.String name
        end local 1 // java.lang.Class clazz
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    3     0              this  Lorg/mongodb/morphia/DatastoreImpl;
            0    3     1             clazz  Ljava/lang/Class<TT;>;
            0    3     2              name  Ljava/lang/String;
            0    3     3            fields  Ljava/lang/String;
            0    3     4            unique  Z
            0    3     5  dropDupsOnCreate  Z
            1    3     6       mappedClass  Lorg/mongodb/morphia/mapping/MappedClass;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;Ljava/lang/String;Ljava/lang/String;ZZ)V
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
                  Name  Flags
      clazz             final
      name              final
      fields            final
      unique            final
      dropDupsOnCreate  final

  public void ensureIndexes();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.mongodb.morphia.DatastoreImpl this
         0: .line 942
            aload 0 /* this */
            iconst_0
            invokevirtual org.mongodb.morphia.DatastoreImpl.ensureIndexes:(Z)V
         1: .line 943
            return
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/mongodb/morphia/DatastoreImpl;

  public void ensureIndexes(boolean);
    descriptor: (Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // boolean background
         0: .line 947
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClasses:()Ljava/util/Collection;
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 3
            goto 3
      StackMap locals: org.mongodb.morphia.DatastoreImpl int top java.util.Iterator
      StackMap stack:
         1: aload 3
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.mongodb.morphia.mapping.MappedClass
            astore 2 /* mc */
        start local 2 // org.mongodb.morphia.mapping.MappedClass mc
         2: .line 948
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.indexHelper:Lorg/mongodb/morphia/IndexHelper;
            aload 0 /* this */
            aload 2 /* mc */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getClazz:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.DatastoreImpl.getMongoCollection:(Ljava/lang/Class;)Lcom/mongodb/client/MongoCollection;
            aload 2 /* mc */
            iload 1 /* background */
            invokevirtual org.mongodb.morphia.IndexHelper.createIndex:(Lcom/mongodb/client/MongoCollection;Lorg/mongodb/morphia/mapping/MappedClass;Z)V
        end local 2 // org.mongodb.morphia.mapping.MappedClass mc
         3: .line 947
      StackMap locals:
      StackMap stack:
            aload 3
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 1
         4: .line 950
            return
        end local 1 // boolean background
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    5     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    5     1  background  Z
            2    3     2          mc  Lorg/mongodb/morphia/mapping/MappedClass;
    MethodParameters:
            Name  Flags
      background  final

  public <T> void ensureIndexes(java.lang.Class<T>);
    descriptor: (Ljava/lang/Class;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Class clazz
         0: .line 954
            aload 0 /* this */
            aload 1 /* clazz */
            iconst_0
            invokevirtual org.mongodb.morphia.DatastoreImpl.ensureIndexes:(Ljava/lang/Class;Z)V
         1: .line 955
            return
        end local 1 // java.lang.Class clazz
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    2     0   this  Lorg/mongodb/morphia/DatastoreImpl;
            0    2     1  clazz  Ljava/lang/Class<TT;>;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;)V
    MethodParameters:
       Name  Flags
      clazz  final

  public <T> void ensureIndexes(java.lang.Class<T>, );
    descriptor: (Ljava/lang/Class;Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Class clazz
        start local 2 // boolean background
         0: .line 959
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.indexHelper:Lorg/mongodb/morphia/IndexHelper;
            aload 0 /* this */
            aload 1 /* clazz */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getMongoCollection:(Ljava/lang/Class;)Lcom/mongodb/client/MongoCollection;
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 1 /* clazz */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClass:(Ljava/lang/Object;)Lorg/mongodb/morphia/mapping/MappedClass;
            iload 2 /* background */
            invokevirtual org.mongodb.morphia.IndexHelper.createIndex:(Lcom/mongodb/client/MongoCollection;Lorg/mongodb/morphia/mapping/MappedClass;Z)V
         1: .line 960
            return
        end local 2 // boolean background
        end local 1 // java.lang.Class clazz
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    2     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    2     1       clazz  Ljava/lang/Class<TT;>;
            0    2     2  background  Z
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;Z)V
    MethodParameters:
            Name  Flags
      clazz       final
      background  final

  public <T> void ensureIndex(java.lang.String, java.lang.Class<T>, java.lang.String);
    descriptor: (Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=4, args_size=4
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.String collection
        start local 2 // java.lang.Class type
        start local 3 // java.lang.String fields
         0: .line 965
            aload 0 /* this */
            aload 1 /* collection */
            aload 2 /* type */
            aconst_null
            aload 3 /* fields */
            iconst_0
            iconst_0
            invokevirtual org.mongodb.morphia.DatastoreImpl.ensureIndex:(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;ZZ)V
         1: .line 966
            return
        end local 3 // java.lang.String fields
        end local 2 // java.lang.Class type
        end local 1 // java.lang.String collection
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    2     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    2     1  collection  Ljava/lang/String;
            0    2     2        type  Ljava/lang/Class<TT;>;
            0    2     3      fields  Ljava/lang/String;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/String;Ljava/lang/Class<TT;>;Ljava/lang/String;)V
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
            Name  Flags
      collection  final
      type        final
      fields      final

  public <T> void ensureIndex(java.lang.String, java.lang.Class<T>, java.lang.String, java.lang.String, boolean, );
    descriptor: (Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;ZZ)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=7, args_size=7
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.String collection
        start local 2 // java.lang.Class clazz
        start local 3 // java.lang.String name
        start local 4 // java.lang.String fields
        start local 5 // boolean unique
        start local 6 // boolean dropDupsOnCreate
         0: .line 972
            iload 6 /* dropDupsOnCreate */
            ifeq 2
         1: .line 973
            getstatic org.mongodb.morphia.DatastoreImpl.LOG:Lorg/mongodb/morphia/logging/Logger;
            ldc "Support for dropDups has been removed from the server.  Please remove this setting."
            invokeinterface org.mongodb.morphia.logging.Logger.warning:(Ljava/lang/String;)V
         2: .line 976
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.indexHelper:Lorg/mongodb/morphia/IndexHelper;
            aload 0 /* this */
            aload 1 /* collection */
            aload 2 /* clazz */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getMongoCollection:(Ljava/lang/String;Ljava/lang/Class;)Lcom/mongodb/client/MongoCollection;
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getMapper:()Lorg/mongodb/morphia/mapping/Mapper;
            aload 2 /* clazz */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClass:(Ljava/lang/Object;)Lorg/mongodb/morphia/mapping/MappedClass;
         3: .line 977
            new org.mongodb.morphia.IndexBuilder
            dup
            invokespecial org.mongodb.morphia.IndexBuilder.<init>:()V
         4: .line 978
            aload 4 /* fields */
            invokevirtual org.mongodb.morphia.IndexBuilder.fields:(Ljava/lang/String;)Lorg/mongodb/morphia/IndexBuilder;
         5: .line 979
            aload 3 /* name */
            invokevirtual org.mongodb.morphia.IndexBuilder.name:(Ljava/lang/String;)Lorg/mongodb/morphia/IndexBuilder;
         6: .line 980
            iload 5 /* unique */
            invokevirtual org.mongodb.morphia.IndexBuilder.unique:(Z)Lorg/mongodb/morphia/IndexBuilder;
            iconst_0
         7: .line 976
            invokevirtual org.mongodb.morphia.IndexHelper.createIndex:(Lcom/mongodb/client/MongoCollection;Lorg/mongodb/morphia/mapping/MappedClass;Lorg/mongodb/morphia/annotations/Index;Z)V
         8: .line 981
            return
        end local 6 // boolean dropDupsOnCreate
        end local 5 // boolean unique
        end local 4 // java.lang.String fields
        end local 3 // java.lang.String name
        end local 2 // java.lang.Class clazz
        end local 1 // java.lang.String collection
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    9     0              this  Lorg/mongodb/morphia/DatastoreImpl;
            0    9     1        collection  Ljava/lang/String;
            0    9     2             clazz  Ljava/lang/Class<TT;>;
            0    9     3              name  Ljava/lang/String;
            0    9     4            fields  Ljava/lang/String;
            0    9     5            unique  Z
            0    9     6  dropDupsOnCreate  Z
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/String;Ljava/lang/Class<TT;>;Ljava/lang/String;Ljava/lang/String;ZZ)V
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
                  Name  Flags
      collection        final
      clazz             final
      name              final
      fields            final
      unique            final
      dropDupsOnCreate  final

  public <T> void ensureIndexes(java.lang.String, java.lang.Class<T>);
    descriptor: (Ljava/lang/String;Ljava/lang/Class;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.String collection
        start local 2 // java.lang.Class clazz
         0: .line 985
            aload 0 /* this */
            aload 1 /* collection */
            aload 2 /* clazz */
            iconst_0
            invokevirtual org.mongodb.morphia.DatastoreImpl.ensureIndexes:(Ljava/lang/String;Ljava/lang/Class;Z)V
         1: .line 986
            return
        end local 2 // java.lang.Class clazz
        end local 1 // java.lang.String collection
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    2     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    2     1  collection  Ljava/lang/String;
            0    2     2       clazz  Ljava/lang/Class<TT;>;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/String;Ljava/lang/Class<TT;>;)V
    MethodParameters:
            Name  Flags
      collection  final
      clazz       final

  public <T> void ensureIndexes(java.lang.String, java.lang.Class<T>, );
    descriptor: (Ljava/lang/String;Ljava/lang/Class;Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.String collection
        start local 2 // java.lang.Class clazz
        start local 3 // boolean background
         0: .line 990
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.indexHelper:Lorg/mongodb/morphia/IndexHelper;
            aload 0 /* this */
            aload 1 /* collection */
            aload 2 /* clazz */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getMongoCollection:(Ljava/lang/String;Ljava/lang/Class;)Lcom/mongodb/client/MongoCollection;
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 2 /* clazz */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClass:(Ljava/lang/Object;)Lorg/mongodb/morphia/mapping/MappedClass;
            iload 3 /* background */
            invokevirtual org.mongodb.morphia.IndexHelper.createIndex:(Lcom/mongodb/client/MongoCollection;Lorg/mongodb/morphia/mapping/MappedClass;Z)V
         1: .line 991
            return
        end local 3 // boolean background
        end local 2 // java.lang.Class clazz
        end local 1 // java.lang.String collection
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    2     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    2     1  collection  Ljava/lang/String;
            0    2     2       clazz  Ljava/lang/Class<TT;>;
            0    2     3  background  Z
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/String;Ljava/lang/Class<TT;>;Z)V
    MethodParameters:
            Name  Flags
      collection  final
      clazz       final
      background  final

  public org.mongodb.morphia.Key<?> exists(, com.mongodb.ReadPreference);
    descriptor: (Ljava/lang/Object;Lcom/mongodb/ReadPreference;)Lorg/mongodb/morphia/Key;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=4, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Object entityOrKey
        start local 2 // com.mongodb.ReadPreference readPreference
         0: .line 995
            aload 0 /* this */
            aload 1 /* entityOrKey */
            invokevirtual org.mongodb.morphia.DatastoreImpl.buildExistsQuery:(Ljava/lang/Object;)Lorg/mongodb/morphia/query/Query;
            astore 3 /* query */
        start local 3 // org.mongodb.morphia.query.Query query
         1: .line 996
            aload 2 /* readPreference */
            ifnull 3
         2: .line 997
            aload 3 /* query */
            aload 2 /* readPreference */
            invokeinterface org.mongodb.morphia.query.Query.useReadPreference:(Lcom/mongodb/ReadPreference;)Lorg/mongodb/morphia/query/Query;
            pop
         3: .line 999
      StackMap locals: org.mongodb.morphia.query.Query
      StackMap stack:
            aload 3 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getKey:()Lorg/mongodb/morphia/Key;
            areturn
        end local 3 // org.mongodb.morphia.query.Query query
        end local 2 // com.mongodb.ReadPreference readPreference
        end local 1 // java.lang.Object entityOrKey
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    4     0            this  Lorg/mongodb/morphia/DatastoreImpl;
            0    4     1     entityOrKey  Ljava/lang/Object;
            0    4     2  readPreference  Lcom/mongodb/ReadPreference;
            1    4     3           query  Lorg/mongodb/morphia/query/Query<*>;
    Signature: (Ljava/lang/Object;Lcom/mongodb/ReadPreference;)Lorg/mongodb/morphia/Key<*>;
    MethodParameters:
                Name  Flags
      entityOrKey     final
      readPreference  final

  public <T> org.mongodb.morphia.query.Query<T> find(java.lang.String, java.lang.Class<T>);
    descriptor: (Ljava/lang/String;Ljava/lang/Class;)Lorg/mongodb/morphia/query/Query;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.String collection
        start local 2 // java.lang.Class clazz
         0: .line 1004
            aload 0 /* this */
            aload 1 /* collection */
            aload 2 /* clazz */
            invokevirtual org.mongodb.morphia.DatastoreImpl.createQuery:(Ljava/lang/String;Ljava/lang/Class;)Lorg/mongodb/morphia/query/Query;
            areturn
        end local 2 // java.lang.Class clazz
        end local 1 // java.lang.String collection
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    1     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  collection  Ljava/lang/String;
            0    1     2       clazz  Ljava/lang/Class<TT;>;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/String;Ljava/lang/Class<TT;>;)Lorg/mongodb/morphia/query/Query<TT;>;
    MethodParameters:
            Name  Flags
      collection  final
      clazz       final

  public <T, V> org.mongodb.morphia.query.Query<T> find(java.lang.String, java.lang.Class<T>, java.lang.String, V, int, int);
    descriptor: (Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;II)Lorg/mongodb/morphia/query/Query;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=8, locals=7, args_size=7
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.String collection
        start local 2 // java.lang.Class clazz
        start local 3 // java.lang.String property
        start local 4 // java.lang.Object value
        start local 5 // int offset
        start local 6 // int size
         0: .line 1010
            aload 0 /* this */
            aload 1 /* collection */
            aload 2 /* clazz */
            aload 3 /* property */
            aload 4 /* value */
            iload 5 /* offset */
            iload 6 /* size */
            iconst_1
            invokevirtual org.mongodb.morphia.DatastoreImpl.find:(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;IIZ)Lorg/mongodb/morphia/query/Query;
            areturn
        end local 6 // int size
        end local 5 // int offset
        end local 4 // java.lang.Object value
        end local 3 // java.lang.String property
        end local 2 // java.lang.Class clazz
        end local 1 // java.lang.String collection
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    1     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  collection  Ljava/lang/String;
            0    1     2       clazz  Ljava/lang/Class<TT;>;
            0    1     3    property  Ljava/lang/String;
            0    1     4       value  TV;
            0    1     5      offset  I
            0    1     6        size  I
    Signature: <T:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/lang/String;Ljava/lang/Class<TT;>;Ljava/lang/String;TV;II)Lorg/mongodb/morphia/query/Query<TT;>;
    MethodParameters:
            Name  Flags
      collection  final
      clazz       final
      property    final
      value       final
      offset      final
      size        final

  public <T> T get(java.lang.Class<T>, com.mongodb.DBRef);
    descriptor: (Ljava/lang/Class;Lcom/mongodb/DBRef;)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=4, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Class clazz
        start local 2 // com.mongodb.DBRef ref
         0: .line 1015
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getDB:()Lcom/mongodb/DB;
            aload 2 /* ref */
            invokevirtual com.mongodb.DBRef.getCollectionName:()Ljava/lang/String;
            invokevirtual com.mongodb.DB.getCollection:(Ljava/lang/String;)Lcom/mongodb/DBCollection;
            new com.mongodb.BasicDBObject
            dup
            ldc "_id"
            aload 2 /* ref */
            invokevirtual com.mongodb.DBRef.getId:()Ljava/lang/Object;
            invokespecial com.mongodb.BasicDBObject.<init>:(Ljava/lang/String;Ljava/lang/Object;)V
            invokevirtual com.mongodb.DBCollection.findOne:(Lcom/mongodb/DBObject;)Lcom/mongodb/DBObject;
            astore 3 /* object */
        start local 3 // com.mongodb.DBObject object
         1: .line 1016
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 0 /* this */
            aload 1 /* clazz */
            aload 3 /* object */
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.createCache:()Lorg/mongodb/morphia/mapping/cache/EntityCache;
            invokevirtual org.mongodb.morphia.mapping.Mapper.fromDBObject:(Lorg/mongodb/morphia/Datastore;Ljava/lang/Class;Lcom/mongodb/DBObject;Lorg/mongodb/morphia/mapping/cache/EntityCache;)Ljava/lang/Object;
            areturn
        end local 3 // com.mongodb.DBObject object
        end local 2 // com.mongodb.DBRef ref
        end local 1 // java.lang.Class clazz
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    2     0    this  Lorg/mongodb/morphia/DatastoreImpl;
            0    2     1   clazz  Ljava/lang/Class<TT;>;
            0    2     2     ref  Lcom/mongodb/DBRef;
            1    2     3  object  Lcom/mongodb/DBObject;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;Lcom/mongodb/DBRef;)TT;
    MethodParameters:
       Name  Flags
      clazz  final
      ref    final

  public <T, V> T get(java.lang.String, java.lang.Class<T>, );
    descriptor: (Ljava/lang/String;Ljava/lang/Class;Ljava/lang/Object;)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=5, args_size=4
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.String collection
        start local 2 // java.lang.Class clazz
        start local 3 // java.lang.Object id
         0: .line 1021
            aload 0 /* this */
            aload 1 /* collection */
            aload 2 /* clazz */
            ldc "_id"
            aload 3 /* id */
            iconst_0
            iconst_1
            invokevirtual org.mongodb.morphia.DatastoreImpl.find:(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;II)Lorg/mongodb/morphia/query/Query;
            invokeinterface org.mongodb.morphia.query.Query.asList:()Ljava/util/List;
            astore 4 /* results */
        start local 4 // java.util.List results
         1: .line 1022
            aload 4 /* results */
            ifnull 2
            aload 4 /* results */
            invokeinterface java.util.List.isEmpty:()Z
            ifeq 3
         2: .line 1023
      StackMap locals: java.util.List
      StackMap stack:
            aconst_null
            areturn
         3: .line 1025
      StackMap locals:
      StackMap stack:
            aload 4 /* results */
            iconst_0
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            areturn
        end local 4 // java.util.List results
        end local 3 // java.lang.Object id
        end local 2 // java.lang.Class clazz
        end local 1 // java.lang.String collection
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    4     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    4     1  collection  Ljava/lang/String;
            0    4     2       clazz  Ljava/lang/Class<TT;>;
            0    4     3          id  TV;
            1    4     4     results  Ljava/util/List<TT;>;
    Signature: <T:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/lang/String;Ljava/lang/Class<TT;>;TV;)TT;
    MethodParameters:
            Name  Flags
      collection  final
      clazz       final
      id          final

  public long getCount(java.lang.String);
    descriptor: (Ljava/lang/String;)J
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.String collection
         0: .line 1030
            aload 0 /* this */
            aload 1 /* collection */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getCollection:(Ljava/lang/String;)Lcom/mongodb/DBCollection;
            invokevirtual com.mongodb.DBCollection.count:()J
            lreturn
        end local 1 // java.lang.String collection
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    1     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  collection  Ljava/lang/String;
    MethodParameters:
            Name  Flags
      collection  final

  public com.mongodb.DBDecoderFactory getDecoderFact();
    descriptor: ()Lcom/mongodb/DBDecoderFactory;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.mongodb.morphia.DatastoreImpl this
         0: .line 1035
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.decoderFactory:Lcom/mongodb/DBDecoderFactory;
            ifnull 1
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.decoderFactory:Lcom/mongodb/DBDecoderFactory;
            goto 2
      StackMap locals:
      StackMap stack:
         1: getstatic com.mongodb.DefaultDBDecoder.FACTORY:Lcom/mongodb/DBDecoderFactory;
      StackMap locals:
      StackMap stack: com.mongodb.DBDecoderFactory
         2: areturn
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/mongodb/morphia/DatastoreImpl;

  public void setDecoderFact(com.mongodb.DBDecoderFactory);
    descriptor: (Lcom/mongodb/DBDecoderFactory;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // com.mongodb.DBDecoderFactory fact
         0: .line 1040
            aload 0 /* this */
            aload 1 /* fact */
            putfield org.mongodb.morphia.DatastoreImpl.decoderFactory:Lcom/mongodb/DBDecoderFactory;
         1: .line 1041
            return
        end local 1 // com.mongodb.DBDecoderFactory fact
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/mongodb/morphia/DatastoreImpl;
            0    2     1  fact  Lcom/mongodb/DBDecoderFactory;
    MethodParameters:
      Name  Flags
      fact  final

  public <T> org.mongodb.morphia.Key<T> insert(java.lang.String, T);
    descriptor: (Ljava/lang/String;Ljava/lang/Object;)Lorg/mongodb/morphia/Key;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=4, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.String collection
        start local 2 // java.lang.Object entity
         0: .line 1045
            aload 2 /* entity */
            invokestatic org.mongodb.morphia.mapping.lazy.proxy.ProxyHelper.unwrap:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 3 /* unwrapped */
        start local 3 // java.lang.Object unwrapped
         1: .line 1046
            aload 0 /* this */
            aload 0 /* this */
            aload 1 /* collection */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getCollection:(Ljava/lang/String;)Lcom/mongodb/DBCollection;
            aload 3 /* unwrapped */
            new org.mongodb.morphia.InsertOptions
            dup
            invokespecial org.mongodb.morphia.InsertOptions.<init>:()V
         2: .line 1047
            aload 0 /* this */
            aload 3 /* unwrapped */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getWriteConcern:(Ljava/lang/Object;)Lcom/mongodb/WriteConcern;
            invokevirtual org.mongodb.morphia.InsertOptions.writeConcern:(Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/InsertOptions;
         3: .line 1046
            invokevirtual org.mongodb.morphia.DatastoreImpl.insert:(Lcom/mongodb/DBCollection;Ljava/lang/Object;Lorg/mongodb/morphia/InsertOptions;)Lorg/mongodb/morphia/Key;
            areturn
        end local 3 // java.lang.Object unwrapped
        end local 2 // java.lang.Object entity
        end local 1 // java.lang.String collection
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    4     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    4     1  collection  Ljava/lang/String;
            0    4     2      entity  TT;
            1    4     3   unwrapped  TT;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/String;TT;)Lorg/mongodb/morphia/Key<TT;>;
    MethodParameters:
            Name  Flags
      collection  final
      entity      final

  public <T> org.mongodb.morphia.Key<T> insert(java.lang.String, T, org.mongodb.morphia.InsertOptions);
    descriptor: (Ljava/lang/String;Ljava/lang/Object;Lorg/mongodb/morphia/InsertOptions;)Lorg/mongodb/morphia/Key;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.String collection
        start local 2 // java.lang.Object entity
        start local 3 // org.mongodb.morphia.InsertOptions options
         0: .line 1052
            aload 0 /* this */
            aload 0 /* this */
            aload 1 /* collection */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getCollection:(Ljava/lang/String;)Lcom/mongodb/DBCollection;
            aload 2 /* entity */
            invokestatic org.mongodb.morphia.mapping.lazy.proxy.ProxyHelper.unwrap:(Ljava/lang/Object;)Ljava/lang/Object;
            aload 3 /* options */
            invokevirtual org.mongodb.morphia.DatastoreImpl.insert:(Lcom/mongodb/DBCollection;Ljava/lang/Object;Lorg/mongodb/morphia/InsertOptions;)Lorg/mongodb/morphia/Key;
            areturn
        end local 3 // org.mongodb.morphia.InsertOptions options
        end local 2 // java.lang.Object entity
        end local 1 // java.lang.String collection
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    1     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  collection  Ljava/lang/String;
            0    1     2      entity  TT;
            0    1     3     options  Lorg/mongodb/morphia/InsertOptions;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/String;TT;Lorg/mongodb/morphia/InsertOptions;)Lorg/mongodb/morphia/Key<TT;>;
    MethodParameters:
            Name  Flags
      collection  final
      entity      final
      options     final

  public <T> org.mongodb.morphia.Key<T> insert(T);
    descriptor: (Ljava/lang/Object;)Lorg/mongodb/morphia/Key;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Object entity
         0: .line 1057
            aload 0 /* this */
            aload 1 /* entity */
            aload 0 /* this */
            aload 1 /* entity */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getWriteConcern:(Ljava/lang/Object;)Lcom/mongodb/WriteConcern;
            invokevirtual org.mongodb.morphia.DatastoreImpl.insert:(Ljava/lang/Object;Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/Key;
            areturn
        end local 1 // java.lang.Object entity
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0    this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  entity  TT;
    Signature: <T:Ljava/lang/Object;>(TT;)Lorg/mongodb/morphia/Key<TT;>;
    MethodParameters:
        Name  Flags
      entity  final

  public <T> org.mongodb.morphia.Key<T> insert(T, com.mongodb.WriteConcern);
    descriptor: (Ljava/lang/Object;Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/Key;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Object entity
        start local 2 // com.mongodb.WriteConcern wc
         0: .line 1062
            aload 0 /* this */
            aload 1 /* entity */
            new org.mongodb.morphia.InsertOptions
            dup
            invokespecial org.mongodb.morphia.InsertOptions.<init>:()V
            aload 2 /* wc */
            invokevirtual org.mongodb.morphia.InsertOptions.writeConcern:(Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/InsertOptions;
            invokevirtual org.mongodb.morphia.DatastoreImpl.insert:(Ljava/lang/Object;Lorg/mongodb/morphia/InsertOptions;)Lorg/mongodb/morphia/Key;
            areturn
        end local 2 // com.mongodb.WriteConcern wc
        end local 1 // java.lang.Object entity
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0    this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  entity  TT;
            0    1     2      wc  Lcom/mongodb/WriteConcern;
    Signature: <T:Ljava/lang/Object;>(TT;Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/Key<TT;>;
    MethodParameters:
        Name  Flags
      entity  final
      wc      final

  public <T> org.mongodb.morphia.Key<T> insert(T, org.mongodb.morphia.InsertOptions);
    descriptor: (Ljava/lang/Object;Lorg/mongodb/morphia/InsertOptions;)Lorg/mongodb/morphia/Key;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Object entity
        start local 2 // org.mongodb.morphia.InsertOptions options
         0: .line 1067
            aload 1 /* entity */
            invokestatic org.mongodb.morphia.mapping.lazy.proxy.ProxyHelper.unwrap:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 3 /* unwrapped */
        start local 3 // java.lang.Object unwrapped
         1: .line 1068
            aload 0 /* this */
            aload 0 /* this */
            aload 3 /* unwrapped */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getCollection:(Ljava/lang/Object;)Lcom/mongodb/DBCollection;
            aload 3 /* unwrapped */
            aload 2 /* options */
            invokevirtual org.mongodb.morphia.DatastoreImpl.insert:(Lcom/mongodb/DBCollection;Ljava/lang/Object;Lorg/mongodb/morphia/InsertOptions;)Lorg/mongodb/morphia/Key;
            areturn
        end local 3 // java.lang.Object unwrapped
        end local 2 // org.mongodb.morphia.InsertOptions options
        end local 1 // java.lang.Object entity
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    2     0       this  Lorg/mongodb/morphia/DatastoreImpl;
            0    2     1     entity  TT;
            0    2     2    options  Lorg/mongodb/morphia/InsertOptions;
            1    2     3  unwrapped  TT;
    Signature: <T:Ljava/lang/Object;>(TT;Lorg/mongodb/morphia/InsertOptions;)Lorg/mongodb/morphia/Key<TT;>;
    MethodParameters:
         Name  Flags
      entity   final
      options  final

  public <T> java.lang.Iterable<org.mongodb.morphia.Key<T>> insert(T[]);
    descriptor: ([Ljava/lang/Object;)Ljava/lang/Iterable;
    flags: (0x0081) ACC_PUBLIC, ACC_VARARGS
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Object[] entities
         0: .line 1074
            aload 0 /* this */
            aload 1 /* entities */
            invokestatic java.util.Arrays.asList:([Ljava/lang/Object;)Ljava/util/List;
            invokevirtual org.mongodb.morphia.DatastoreImpl.insert:(Ljava/lang/Iterable;)Ljava/lang/Iterable;
            areturn
        end local 1 // java.lang.Object[] entities
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0      this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  entities  [Ljava/lang/Object;
    Signature: <T:Ljava/lang/Object;>([TT;)Ljava/lang/Iterable<Lorg/mongodb/morphia/Key<TT;>;>;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
          Name  Flags
      entities  final

  public <T> java.lang.Iterable<org.mongodb.morphia.Key<T>> insert(java.lang.Iterable<T>, com.mongodb.WriteConcern);
    descriptor: (Ljava/lang/Iterable;Lcom/mongodb/WriteConcern;)Ljava/lang/Iterable;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Iterable entities
        start local 2 // com.mongodb.WriteConcern wc
         0: .line 1079
            aload 0 /* this */
            aload 1 /* entities */
            new org.mongodb.morphia.InsertOptions
            dup
            invokespecial org.mongodb.morphia.InsertOptions.<init>:()V
            aload 2 /* wc */
            invokevirtual org.mongodb.morphia.InsertOptions.writeConcern:(Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/InsertOptions;
            invokevirtual org.mongodb.morphia.DatastoreImpl.insert:(Ljava/lang/Iterable;Lorg/mongodb/morphia/InsertOptions;)Ljava/lang/Iterable;
            areturn
        end local 2 // com.mongodb.WriteConcern wc
        end local 1 // java.lang.Iterable entities
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0      this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  entities  Ljava/lang/Iterable<TT;>;
            0    1     2        wc  Lcom/mongodb/WriteConcern;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Iterable<TT;>;Lcom/mongodb/WriteConcern;)Ljava/lang/Iterable<Lorg/mongodb/morphia/Key<TT;>;>;
    MethodParameters:
          Name  Flags
      entities  final
      wc        final

  public <T> java.lang.Iterable<org.mongodb.morphia.Key<T>> insert(java.lang.Iterable<T>, org.mongodb.morphia.InsertOptions);
    descriptor: (Ljava/lang/Iterable;Lorg/mongodb/morphia/InsertOptions;)Ljava/lang/Iterable;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Iterable entities
        start local 2 // org.mongodb.morphia.InsertOptions options
         0: .line 1084
            aload 1 /* entities */
            invokeinterface java.lang.Iterable.iterator:()Ljava/util/Iterator;
            astore 3 /* iterator */
        start local 3 // java.util.Iterator iterator
         1: .line 1085
            aload 3 /* iterator */
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 3
         2: .line 1086
            invokestatic java.util.Collections.emptyList:()Ljava/util/List;
            goto 4
         3: .line 1087
      StackMap locals: java.util.Iterator
      StackMap stack:
            aload 0 /* this */
            aload 0 /* this */
            aload 3 /* iterator */
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            invokevirtual org.mongodb.morphia.DatastoreImpl.getCollection:(Ljava/lang/Object;)Lcom/mongodb/DBCollection;
            aload 1 /* entities */
            aload 2 /* options */
            invokevirtual org.mongodb.morphia.DatastoreImpl.insert:(Lcom/mongodb/DBCollection;Ljava/lang/Iterable;Lorg/mongodb/morphia/InsertOptions;)Ljava/lang/Iterable;
         4: .line 1085
      StackMap locals:
      StackMap stack: java.lang.Iterable
            areturn
        end local 3 // java.util.Iterator iterator
        end local 2 // org.mongodb.morphia.InsertOptions options
        end local 1 // java.lang.Iterable entities
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    5     0      this  Lorg/mongodb/morphia/DatastoreImpl;
            0    5     1  entities  Ljava/lang/Iterable<TT;>;
            0    5     2   options  Lorg/mongodb/morphia/InsertOptions;
            1    5     3  iterator  Ljava/util/Iterator<TT;>;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Iterable<TT;>;Lorg/mongodb/morphia/InsertOptions;)Ljava/lang/Iterable<Lorg/mongodb/morphia/Key<TT;>;>;
    MethodParameters:
          Name  Flags
      entities  final
      options   final

  public <T> java.lang.Iterable<org.mongodb.morphia.Key<T>> insert(java.lang.String, java.lang.Iterable<T>);
    descriptor: (Ljava/lang/String;Ljava/lang/Iterable;)Ljava/lang/Iterable;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.String collection
        start local 2 // java.lang.Iterable entities
         0: .line 1092
            aload 0 /* this */
            aload 1 /* collection */
            aload 2 /* entities */
            new org.mongodb.morphia.InsertOptions
            dup
            invokespecial org.mongodb.morphia.InsertOptions.<init>:()V
            invokevirtual org.mongodb.morphia.DatastoreImpl.insert:(Ljava/lang/String;Ljava/lang/Iterable;Lorg/mongodb/morphia/InsertOptions;)Ljava/lang/Iterable;
            areturn
        end local 2 // java.lang.Iterable entities
        end local 1 // java.lang.String collection
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    1     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  collection  Ljava/lang/String;
            0    1     2    entities  Ljava/lang/Iterable<TT;>;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/String;Ljava/lang/Iterable<TT;>;)Ljava/lang/Iterable<Lorg/mongodb/morphia/Key<TT;>;>;
    MethodParameters:
            Name  Flags
      collection  final
      entities    final

  public <T> java.lang.Iterable<org.mongodb.morphia.Key<T>> insert(java.lang.String, java.lang.Iterable<T>, com.mongodb.WriteConcern);
    descriptor: (Ljava/lang/String;Ljava/lang/Iterable;Lcom/mongodb/WriteConcern;)Ljava/lang/Iterable;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=4, args_size=4
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.String collection
        start local 2 // java.lang.Iterable entities
        start local 3 // com.mongodb.WriteConcern wc
         0: .line 1098
            aload 0 /* this */
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getDB:()Lcom/mongodb/DB;
            aload 1 /* collection */
            invokevirtual com.mongodb.DB.getCollection:(Ljava/lang/String;)Lcom/mongodb/DBCollection;
            aload 2 /* entities */
            new org.mongodb.morphia.InsertOptions
            dup
            invokespecial org.mongodb.morphia.InsertOptions.<init>:()V
         1: .line 1099
            aload 3 /* wc */
            invokevirtual org.mongodb.morphia.InsertOptions.writeConcern:(Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/InsertOptions;
         2: .line 1098
            invokevirtual org.mongodb.morphia.DatastoreImpl.insert:(Lcom/mongodb/DBCollection;Ljava/lang/Iterable;Lorg/mongodb/morphia/InsertOptions;)Ljava/lang/Iterable;
            areturn
        end local 3 // com.mongodb.WriteConcern wc
        end local 2 // java.lang.Iterable entities
        end local 1 // java.lang.String collection
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    3     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    3     1  collection  Ljava/lang/String;
            0    3     2    entities  Ljava/lang/Iterable<TT;>;
            0    3     3          wc  Lcom/mongodb/WriteConcern;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/String;Ljava/lang/Iterable<TT;>;Lcom/mongodb/WriteConcern;)Ljava/lang/Iterable<Lorg/mongodb/morphia/Key<TT;>;>;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
            Name  Flags
      collection  final
      entities    final
      wc          final

  public <T> java.lang.Iterable<org.mongodb.morphia.Key<T>> insert(java.lang.String, java.lang.Iterable<T>, org.mongodb.morphia.InsertOptions);
    descriptor: (Ljava/lang/String;Ljava/lang/Iterable;Lorg/mongodb/morphia/InsertOptions;)Ljava/lang/Iterable;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.String collection
        start local 2 // java.lang.Iterable entities
        start local 3 // org.mongodb.morphia.InsertOptions options
         0: .line 1105
            aload 0 /* this */
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getDB:()Lcom/mongodb/DB;
            aload 1 /* collection */
            invokevirtual com.mongodb.DB.getCollection:(Ljava/lang/String;)Lcom/mongodb/DBCollection;
            aload 2 /* entities */
            aload 3 /* options */
            invokevirtual org.mongodb.morphia.DatastoreImpl.insert:(Lcom/mongodb/DBCollection;Ljava/lang/Iterable;Lorg/mongodb/morphia/InsertOptions;)Ljava/lang/Iterable;
            areturn
        end local 3 // org.mongodb.morphia.InsertOptions options
        end local 2 // java.lang.Iterable entities
        end local 1 // java.lang.String collection
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    1     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  collection  Ljava/lang/String;
            0    1     2    entities  Ljava/lang/Iterable<TT;>;
            0    1     3     options  Lorg/mongodb/morphia/InsertOptions;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/String;Ljava/lang/Iterable<TT;>;Lorg/mongodb/morphia/InsertOptions;)Ljava/lang/Iterable<Lorg/mongodb/morphia/Key<TT;>;>;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
            Name  Flags
      collection  final
      entities    final
      options     final

  public <T> org.mongodb.morphia.query.Query<T> queryByExample(java.lang.String, T);
    descriptor: (Ljava/lang/String;Ljava/lang/Object;)Lorg/mongodb/morphia/query/Query;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.String collection
        start local 2 // java.lang.Object ex
         0: .line 1110
            aload 0 /* this */
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getDB:()Lcom/mongodb/DB;
            aload 1 /* collection */
            invokevirtual com.mongodb.DB.getCollection:(Ljava/lang/String;)Lcom/mongodb/DBCollection;
            aload 2 /* ex */
            invokevirtual org.mongodb.morphia.DatastoreImpl.queryByExample:(Lcom/mongodb/DBCollection;Ljava/lang/Object;)Lorg/mongodb/morphia/query/Query;
            areturn
        end local 2 // java.lang.Object ex
        end local 1 // java.lang.String collection
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    1     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  collection  Ljava/lang/String;
            0    1     2          ex  TT;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/String;TT;)Lorg/mongodb/morphia/query/Query<TT;>;
    MethodParameters:
            Name  Flags
      collection  final
      ex          final

  public <T> org.mongodb.morphia.Key<T> save(java.lang.String, T);
    descriptor: (Ljava/lang/String;Ljava/lang/Object;)Lorg/mongodb/morphia/Key;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=4, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.String collection
        start local 2 // java.lang.Object entity
         0: .line 1115
            aload 2 /* entity */
            invokestatic org.mongodb.morphia.mapping.lazy.proxy.ProxyHelper.unwrap:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 3 /* unwrapped */
        start local 3 // java.lang.Object unwrapped
         1: .line 1116
            aload 0 /* this */
            aload 1 /* collection */
            aload 2 /* entity */
            aload 0 /* this */
            aload 3 /* unwrapped */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getWriteConcern:(Ljava/lang/Object;)Lcom/mongodb/WriteConcern;
            invokevirtual org.mongodb.morphia.DatastoreImpl.save:(Ljava/lang/String;Ljava/lang/Object;Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/Key;
            areturn
        end local 3 // java.lang.Object unwrapped
        end local 2 // java.lang.Object entity
        end local 1 // java.lang.String collection
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    2     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    2     1  collection  Ljava/lang/String;
            0    2     2      entity  TT;
            1    2     3   unwrapped  TT;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/String;TT;)Lorg/mongodb/morphia/Key<TT;>;
    MethodParameters:
            Name  Flags
      collection  final
      entity      final

  public <T> org.mongodb.morphia.Key<T> save(java.lang.String, T, com.mongodb.WriteConcern);
    descriptor: (Ljava/lang/String;Ljava/lang/Object;Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/Key;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=4, args_size=4
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.String collection
        start local 2 // java.lang.Object entity
        start local 3 // com.mongodb.WriteConcern wc
         0: .line 1121
            aload 0 /* this */
            aload 0 /* this */
            aload 1 /* collection */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getCollection:(Ljava/lang/String;)Lcom/mongodb/DBCollection;
            aload 2 /* entity */
            invokestatic org.mongodb.morphia.mapping.lazy.proxy.ProxyHelper.unwrap:(Ljava/lang/Object;)Ljava/lang/Object;
            new org.mongodb.morphia.InsertOptions
            dup
            invokespecial org.mongodb.morphia.InsertOptions.<init>:()V
            aload 3 /* wc */
            invokevirtual org.mongodb.morphia.InsertOptions.writeConcern:(Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/InsertOptions;
            invokevirtual org.mongodb.morphia.DatastoreImpl.save:(Lcom/mongodb/DBCollection;Ljava/lang/Object;Lorg/mongodb/morphia/InsertOptions;)Lorg/mongodb/morphia/Key;
            areturn
        end local 3 // com.mongodb.WriteConcern wc
        end local 2 // java.lang.Object entity
        end local 1 // java.lang.String collection
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    1     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  collection  Ljava/lang/String;
            0    1     2      entity  TT;
            0    1     3          wc  Lcom/mongodb/WriteConcern;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/String;TT;Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/Key<TT;>;
    MethodParameters:
            Name  Flags
      collection  final
      entity      final
      wc          final

  public <T> org.mongodb.morphia.Key<T> save(java.lang.String, T, org.mongodb.morphia.InsertOptions);
    descriptor: (Ljava/lang/String;Ljava/lang/Object;Lorg/mongodb/morphia/InsertOptions;)Lorg/mongodb/morphia/Key;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.String collection
        start local 2 // java.lang.Object entity
        start local 3 // org.mongodb.morphia.InsertOptions options
         0: .line 1126
            aload 0 /* this */
            aload 0 /* this */
            aload 1 /* collection */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getCollection:(Ljava/lang/String;)Lcom/mongodb/DBCollection;
            aload 2 /* entity */
            invokestatic org.mongodb.morphia.mapping.lazy.proxy.ProxyHelper.unwrap:(Ljava/lang/Object;)Ljava/lang/Object;
            aload 3 /* options */
            invokevirtual org.mongodb.morphia.DatastoreImpl.save:(Lcom/mongodb/DBCollection;Ljava/lang/Object;Lorg/mongodb/morphia/InsertOptions;)Lorg/mongodb/morphia/Key;
            areturn
        end local 3 // org.mongodb.morphia.InsertOptions options
        end local 2 // java.lang.Object entity
        end local 1 // java.lang.String collection
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    1     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  collection  Ljava/lang/String;
            0    1     2      entity  TT;
            0    1     3     options  Lorg/mongodb/morphia/InsertOptions;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/String;TT;Lorg/mongodb/morphia/InsertOptions;)Lorg/mongodb/morphia/Key<TT;>;
    MethodParameters:
            Name  Flags
      collection  final
      entity      final
      options     final

  public <T, V> com.mongodb.WriteResult delete(java.lang.Class<T>, V, com.mongodb.WriteConcern);
    descriptor: (Ljava/lang/Class;Ljava/lang/Object;Lcom/mongodb/WriteConcern;)Lcom/mongodb/WriteResult;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Class clazz
        start local 2 // java.lang.Object id
        start local 3 // com.mongodb.WriteConcern wc
         0: .line 1142
            aload 0 /* this */
            aload 0 /* this */
            aload 1 /* clazz */
            invokevirtual org.mongodb.morphia.DatastoreImpl.createQuery:(Ljava/lang/Class;)Lorg/mongodb/morphia/query/Query;
            ldc "_id"
            aload 2 /* id */
            invokeinterface org.mongodb.morphia.query.Query.filter:(Ljava/lang/String;Ljava/lang/Object;)Lorg/mongodb/morphia/query/Query;
            new org.mongodb.morphia.DeleteOptions
            dup
            invokespecial org.mongodb.morphia.DeleteOptions.<init>:()V
            aload 3 /* wc */
            invokevirtual org.mongodb.morphia.DeleteOptions.writeConcern:(Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/DeleteOptions;
            invokevirtual org.mongodb.morphia.DatastoreImpl.delete:(Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/DeleteOptions;)Lcom/mongodb/WriteResult;
            areturn
        end local 3 // com.mongodb.WriteConcern wc
        end local 2 // java.lang.Object id
        end local 1 // java.lang.Class clazz
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0   this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  clazz  Ljava/lang/Class<TT;>;
            0    1     2     id  TV;
            0    1     3     wc  Lcom/mongodb/WriteConcern;
    Signature: <T:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;TV;Lcom/mongodb/WriteConcern;)Lcom/mongodb/WriteResult;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
       Name  Flags
      clazz  final
      id     final
      wc     final

  public <T, V> org.mongodb.morphia.query.Query<T> find(java.lang.String, java.lang.Class<T>, java.lang.String, V, int, int, boolean);
    descriptor: (Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;IIZ)Lorg/mongodb/morphia/query/Query;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=9, args_size=8
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.String collection
        start local 2 // java.lang.Class clazz
        start local 3 // java.lang.String property
        start local 4 // java.lang.Object value
        start local 5 // int offset
        start local 6 // int size
        start local 7 // boolean validate
         0: .line 1162
            aload 0 /* this */
            aload 1 /* collection */
            aload 2 /* clazz */
            invokevirtual org.mongodb.morphia.DatastoreImpl.find:(Ljava/lang/String;Ljava/lang/Class;)Lorg/mongodb/morphia/query/Query;
            astore 8 /* query */
        start local 8 // org.mongodb.morphia.query.Query query
         1: .line 1163
            iload 7 /* validate */
            ifne 3
         2: .line 1164
            aload 8 /* query */
            invokeinterface org.mongodb.morphia.query.Query.disableValidation:()Lorg/mongodb/morphia/query/Query;
            pop
         3: .line 1166
      StackMap locals: org.mongodb.morphia.query.Query
      StackMap stack:
            aload 8 /* query */
            iload 5 /* offset */
            invokeinterface org.mongodb.morphia.query.Query.offset:(I)Lorg/mongodb/morphia/query/Query;
            pop
         4: .line 1167
            aload 8 /* query */
            iload 6 /* size */
            invokeinterface org.mongodb.morphia.query.Query.limit:(I)Lorg/mongodb/morphia/query/Query;
            pop
         5: .line 1168
            aload 8 /* query */
            aload 3 /* property */
            aload 4 /* value */
            invokeinterface org.mongodb.morphia.query.Query.filter:(Ljava/lang/String;Ljava/lang/Object;)Lorg/mongodb/morphia/query/Query;
            invokeinterface org.mongodb.morphia.query.Query.enableValidation:()Lorg/mongodb/morphia/query/Query;
            areturn
        end local 8 // org.mongodb.morphia.query.Query query
        end local 7 // boolean validate
        end local 6 // int size
        end local 5 // int offset
        end local 4 // java.lang.Object value
        end local 3 // java.lang.String property
        end local 2 // java.lang.Class clazz
        end local 1 // java.lang.String collection
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    6     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    6     1  collection  Ljava/lang/String;
            0    6     2       clazz  Ljava/lang/Class<TT;>;
            0    6     3    property  Ljava/lang/String;
            0    6     4       value  TV;
            0    6     5      offset  I
            0    6     6        size  I
            0    6     7    validate  Z
            1    6     8       query  Lorg/mongodb/morphia/query/Query<TT;>;
    Signature: <T:Ljava/lang/Object;V:Ljava/lang/Object;>(Ljava/lang/String;Ljava/lang/Class<TT;>;Ljava/lang/String;TV;IIZ)Lorg/mongodb/morphia/query/Query<TT;>;
    MethodParameters:
            Name  Flags
      collection  final
      clazz       final
      property    final
      value       final
      offset      final
      size        final
      validate    final

  public org.mongodb.morphia.mapping.Mapper getMapper();
    descriptor: ()Lorg/mongodb/morphia/mapping/Mapper;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.mongodb.morphia.DatastoreImpl this
         0: .line 1175
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            areturn
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/mongodb/morphia/DatastoreImpl;

  public void setMapper(org.mongodb.morphia.mapping.Mapper);
    descriptor: (Lorg/mongodb/morphia/mapping/Mapper;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.mapping.Mapper mapper
         0: .line 1184
            aload 0 /* this */
            aload 1 /* mapper */
            putfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
         1: .line 1185
            return
        end local 1 // org.mongodb.morphia.mapping.Mapper mapper
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    2     0    this  Lorg/mongodb/morphia/DatastoreImpl;
            0    2     1  mapper  Lorg/mongodb/morphia/mapping/Mapper;
    MethodParameters:
        Name  Flags
      mapper  final

  public <T> java.lang.Iterable<org.mongodb.morphia.Key<T>> insert(java.lang.Iterable<T>);
    descriptor: (Ljava/lang/Iterable;)Ljava/lang/Iterable;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Iterable entities
         0: .line 1196
            aload 0 /* this */
            aload 1 /* entities */
            new org.mongodb.morphia.InsertOptions
            dup
            invokespecial org.mongodb.morphia.InsertOptions.<init>:()V
         1: .line 1197
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.defConcern:Lcom/mongodb/WriteConcern;
            invokevirtual org.mongodb.morphia.InsertOptions.writeConcern:(Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/InsertOptions;
         2: .line 1196
            invokevirtual org.mongodb.morphia.DatastoreImpl.insert:(Ljava/lang/Iterable;Lorg/mongodb/morphia/InsertOptions;)Ljava/lang/Iterable;
            areturn
        end local 1 // java.lang.Iterable entities
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    3     0      this  Lorg/mongodb/morphia/DatastoreImpl;
            0    3     1  entities  Ljava/lang/Iterable<TT;>;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Iterable<TT;>;)Ljava/lang/Iterable<Lorg/mongodb/morphia/Key<TT;>;>;
    MethodParameters:
          Name  Flags
      entities  final

  public <T> org.mongodb.morphia.Key<T> insert(java.lang.String, T, com.mongodb.WriteConcern);
    descriptor: (Ljava/lang/String;Ljava/lang/Object;Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/Key;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=4, args_size=4
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.String collection
        start local 2 // java.lang.Object entity
        start local 3 // com.mongodb.WriteConcern wc
         0: .line 1210
            aload 0 /* this */
            aload 0 /* this */
            aload 1 /* collection */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getCollection:(Ljava/lang/String;)Lcom/mongodb/DBCollection;
            aload 2 /* entity */
            invokestatic org.mongodb.morphia.mapping.lazy.proxy.ProxyHelper.unwrap:(Ljava/lang/Object;)Ljava/lang/Object;
            new org.mongodb.morphia.InsertOptions
            dup
            invokespecial org.mongodb.morphia.InsertOptions.<init>:()V
            aload 3 /* wc */
            invokevirtual org.mongodb.morphia.InsertOptions.writeConcern:(Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/InsertOptions;
            invokevirtual org.mongodb.morphia.DatastoreImpl.insert:(Lcom/mongodb/DBCollection;Ljava/lang/Object;Lorg/mongodb/morphia/InsertOptions;)Lorg/mongodb/morphia/Key;
            areturn
        end local 3 // com.mongodb.WriteConcern wc
        end local 2 // java.lang.Object entity
        end local 1 // java.lang.String collection
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    1     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  collection  Ljava/lang/String;
            0    1     2      entity  TT;
            0    1     3          wc  Lcom/mongodb/WriteConcern;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/String;TT;Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/Key<TT;>;
    MethodParameters:
            Name  Flags
      collection  final
      entity      final
      wc          final

  protected com.mongodb.DBCollection getCollection(java.lang.String);
    descriptor: (Ljava/lang/String;)Lcom/mongodb/DBCollection;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.String kind
         0: .line 1214
            aload 1 /* kind */
            ifnonnull 2
         1: .line 1215
            aconst_null
            areturn
         2: .line 1217
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getDB:()Lcom/mongodb/DB;
            aload 1 /* kind */
            invokevirtual com.mongodb.DB.getCollection:(Ljava/lang/String;)Lcom/mongodb/DBCollection;
            areturn
        end local 1 // java.lang.String kind
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/mongodb/morphia/DatastoreImpl;
            0    3     1  kind  Ljava/lang/String;
    MethodParameters:
      Name  Flags
      kind  final

  protected java.lang.Object getId(java.lang.Object);
    descriptor: (Ljava/lang/Object;)Ljava/lang/Object;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Object entity
         0: .line 1222
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 1 /* entity */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getId:(Ljava/lang/Object;)Ljava/lang/Object;
            areturn
        end local 1 // java.lang.Object entity
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0    this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1  entity  Ljava/lang/Object;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
        Name  Flags
      entity  final

  protected <T> org.mongodb.morphia.Key<T> insert(com.mongodb.DBCollection, T, org.mongodb.morphia.InsertOptions);
    descriptor: (Lcom/mongodb/DBCollection;Ljava/lang/Object;Lorg/mongodb/morphia/InsertOptions;)Lorg/mongodb/morphia/Key;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=5, locals=5, args_size=4
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // com.mongodb.DBCollection dbColl
        start local 2 // java.lang.Object entity
        start local 3 // org.mongodb.morphia.InsertOptions options
         0: .line 1226
            new java.util.LinkedHashMap
            dup
            invokespecial java.util.LinkedHashMap.<init>:()V
            astore 4 /* involvedObjects */
        start local 4 // java.util.LinkedHashMap involvedObjects
         1: .line 1227
            aload 1 /* dbColl */
            aload 0 /* this */
            aload 2 /* entity */
            aload 4 /* involvedObjects */
            invokevirtual org.mongodb.morphia.DatastoreImpl.entityToDBObj:(Ljava/lang/Object;Ljava/util/Map;)Lcom/mongodb/DBObject;
            invokestatic java.util.Collections.singletonList:(Ljava/lang/Object;)Ljava/util/List;
            aload 0 /* this */
            aload 3 /* options */
            aload 2 /* entity */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.DatastoreImpl.enforceWriteConcern:(Lorg/mongodb/morphia/InsertOptions;Ljava/lang/Class;)Lorg/mongodb/morphia/InsertOptions;
         2: .line 1228
            invokevirtual org.mongodb.morphia.InsertOptions.getOptions:()Lcom/mongodb/InsertOptions;
         3: .line 1227
            invokevirtual com.mongodb.DBCollection.insert:(Ljava/util/List;Lcom/mongodb/InsertOptions;)Lcom/mongodb/WriteResult;
            pop
         4: .line 1230
            aload 0 /* this */
            aload 2 /* entity */
            invokestatic java.util.Collections.singletonList:(Ljava/lang/Object;)Ljava/util/List;
            aload 4 /* involvedObjects */
            aload 1 /* dbColl */
            invokevirtual org.mongodb.morphia.DatastoreImpl.postSaveOperations:(Ljava/lang/Iterable;Ljava/util/Map;Lcom/mongodb/DBCollection;)Ljava/util/List;
            iconst_0
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast org.mongodb.morphia.Key
            areturn
        end local 4 // java.util.LinkedHashMap involvedObjects
        end local 3 // org.mongodb.morphia.InsertOptions options
        end local 2 // java.lang.Object entity
        end local 1 // com.mongodb.DBCollection dbColl
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    5     0             this  Lorg/mongodb/morphia/DatastoreImpl;
            0    5     1           dbColl  Lcom/mongodb/DBCollection;
            0    5     2           entity  TT;
            0    5     3          options  Lorg/mongodb/morphia/InsertOptions;
            1    5     4  involvedObjects  Ljava/util/LinkedHashMap<Ljava/lang/Object;Lcom/mongodb/DBObject;>;
    Signature: <T:Ljava/lang/Object;>(Lcom/mongodb/DBCollection;TT;Lorg/mongodb/morphia/InsertOptions;)Lorg/mongodb/morphia/Key<TT;>;
    MethodParameters:
         Name  Flags
      dbColl   final
      entity   final
      options  final

  <T> org.mongodb.morphia.FindAndModifyOptions enforceWriteConcern(org.mongodb.morphia.FindAndModifyOptions, java.lang.Class<T>);
    descriptor: (Lorg/mongodb/morphia/FindAndModifyOptions;Ljava/lang/Class;)Lorg/mongodb/morphia/FindAndModifyOptions;
    flags: (0x0000) 
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.FindAndModifyOptions options
        start local 2 // java.lang.Class klass
         0: .line 1234
            aload 1 /* options */
            invokevirtual org.mongodb.morphia.FindAndModifyOptions.getWriteConcern:()Lcom/mongodb/WriteConcern;
            ifnonnull 5
         1: .line 1235
            aload 1 /* options */
         2: .line 1236
            invokevirtual org.mongodb.morphia.FindAndModifyOptions.copy:()Lorg/mongodb/morphia/FindAndModifyOptions;
         3: .line 1237
            aload 0 /* this */
            aload 2 /* klass */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getWriteConcern:(Ljava/lang/Object;)Lcom/mongodb/WriteConcern;
            invokevirtual org.mongodb.morphia.FindAndModifyOptions.writeConcern:(Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/FindAndModifyOptions;
         4: .line 1235
            areturn
         5: .line 1239
      StackMap locals:
      StackMap stack:
            aload 1 /* options */
            areturn
        end local 2 // java.lang.Class klass
        end local 1 // org.mongodb.morphia.FindAndModifyOptions options
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    6     0     this  Lorg/mongodb/morphia/DatastoreImpl;
            0    6     1  options  Lorg/mongodb/morphia/FindAndModifyOptions;
            0    6     2    klass  Ljava/lang/Class<TT;>;
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/FindAndModifyOptions;Ljava/lang/Class<TT;>;)Lorg/mongodb/morphia/FindAndModifyOptions;
    MethodParameters:
         Name  Flags
      options  final
      klass    final

  <T> org.mongodb.morphia.InsertOptions enforceWriteConcern(org.mongodb.morphia.InsertOptions, java.lang.Class<T>);
    descriptor: (Lorg/mongodb/morphia/InsertOptions;Ljava/lang/Class;)Lorg/mongodb/morphia/InsertOptions;
    flags: (0x0000) 
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.InsertOptions options
        start local 2 // java.lang.Class klass
         0: .line 1243
            aload 1 /* options */
            invokevirtual org.mongodb.morphia.InsertOptions.getWriteConcern:()Lcom/mongodb/WriteConcern;
            ifnonnull 5
         1: .line 1244
            aload 1 /* options */
         2: .line 1245
            invokevirtual org.mongodb.morphia.InsertOptions.copy:()Lorg/mongodb/morphia/InsertOptions;
         3: .line 1246
            aload 0 /* this */
            aload 2 /* klass */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getWriteConcern:(Ljava/lang/Object;)Lcom/mongodb/WriteConcern;
            invokevirtual org.mongodb.morphia.InsertOptions.writeConcern:(Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/InsertOptions;
         4: .line 1244
            areturn
         5: .line 1248
      StackMap locals:
      StackMap stack:
            aload 1 /* options */
            areturn
        end local 2 // java.lang.Class klass
        end local 1 // org.mongodb.morphia.InsertOptions options
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    6     0     this  Lorg/mongodb/morphia/DatastoreImpl;
            0    6     1  options  Lorg/mongodb/morphia/InsertOptions;
            0    6     2    klass  Ljava/lang/Class<TT;>;
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/InsertOptions;Ljava/lang/Class<TT;>;)Lorg/mongodb/morphia/InsertOptions;
    MethodParameters:
         Name  Flags
      options  final
      klass    final

  <T> org.mongodb.morphia.UpdateOptions enforceWriteConcern(org.mongodb.morphia.UpdateOptions, java.lang.Class<T>);
    descriptor: (Lorg/mongodb/morphia/UpdateOptions;Ljava/lang/Class;)Lorg/mongodb/morphia/UpdateOptions;
    flags: (0x0000) 
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.UpdateOptions options
        start local 2 // java.lang.Class klass
         0: .line 1252
            aload 1 /* options */
            invokevirtual org.mongodb.morphia.UpdateOptions.getWriteConcern:()Lcom/mongodb/WriteConcern;
            ifnonnull 5
         1: .line 1253
            aload 1 /* options */
         2: .line 1254
            invokevirtual org.mongodb.morphia.UpdateOptions.copy:()Lorg/mongodb/morphia/UpdateOptions;
         3: .line 1255
            aload 0 /* this */
            aload 2 /* klass */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getWriteConcern:(Ljava/lang/Object;)Lcom/mongodb/WriteConcern;
            invokevirtual org.mongodb.morphia.UpdateOptions.writeConcern:(Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/UpdateOptions;
         4: .line 1253
            areturn
         5: .line 1257
      StackMap locals:
      StackMap stack:
            aload 1 /* options */
            areturn
        end local 2 // java.lang.Class klass
        end local 1 // org.mongodb.morphia.UpdateOptions options
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    6     0     this  Lorg/mongodb/morphia/DatastoreImpl;
            0    6     1  options  Lorg/mongodb/morphia/UpdateOptions;
            0    6     2    klass  Ljava/lang/Class<TT;>;
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/UpdateOptions;Ljava/lang/Class<TT;>;)Lorg/mongodb/morphia/UpdateOptions;
    MethodParameters:
         Name  Flags
      options  final
      klass    final

  <T> org.mongodb.morphia.DeleteOptions enforceWriteConcern(org.mongodb.morphia.DeleteOptions, java.lang.Class<T>);
    descriptor: (Lorg/mongodb/morphia/DeleteOptions;Ljava/lang/Class;)Lorg/mongodb/morphia/DeleteOptions;
    flags: (0x0000) 
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.DeleteOptions options
        start local 2 // java.lang.Class klass
         0: .line 1261
            aload 1 /* options */
            invokevirtual org.mongodb.morphia.DeleteOptions.getWriteConcern:()Lcom/mongodb/WriteConcern;
            ifnonnull 5
         1: .line 1262
            aload 1 /* options */
         2: .line 1263
            invokevirtual org.mongodb.morphia.DeleteOptions.copy:()Lorg/mongodb/morphia/DeleteOptions;
         3: .line 1264
            aload 0 /* this */
            aload 2 /* klass */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getWriteConcern:(Ljava/lang/Object;)Lcom/mongodb/WriteConcern;
            invokevirtual org.mongodb.morphia.DeleteOptions.writeConcern:(Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/DeleteOptions;
         4: .line 1262
            areturn
         5: .line 1266
      StackMap locals:
      StackMap stack:
            aload 1 /* options */
            areturn
        end local 2 // java.lang.Class klass
        end local 1 // org.mongodb.morphia.DeleteOptions options
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    6     0     this  Lorg/mongodb/morphia/DatastoreImpl;
            0    6     1  options  Lorg/mongodb/morphia/DeleteOptions;
            0    6     2    klass  Ljava/lang/Class<TT;>;
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/DeleteOptions;Ljava/lang/Class<TT;>;)Lorg/mongodb/morphia/DeleteOptions;
    MethodParameters:
         Name  Flags
      options  final
      klass    final

  protected <T> org.mongodb.morphia.Key<T> save(com.mongodb.DBCollection, T, org.mongodb.morphia.InsertOptions);
    descriptor: (Lcom/mongodb/DBCollection;Ljava/lang/Object;Lorg/mongodb/morphia/InsertOptions;)Lorg/mongodb/morphia/Key;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=8, locals=9, args_size=4
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // com.mongodb.DBCollection dbColl
        start local 2 // java.lang.Object entity
        start local 3 // org.mongodb.morphia.InsertOptions options
         0: .line 1270
            aload 2 /* entity */
            ifnonnull 2
         1: .line 1271
            new org.mongodb.morphia.query.UpdateException
            dup
            ldc "Can not persist a null entity"
            invokespecial org.mongodb.morphia.query.UpdateException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 1274
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 2 /* entity */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClass:(Ljava/lang/Object;)Lorg/mongodb/morphia/mapping/MappedClass;
            astore 4 /* mc */
        start local 4 // org.mongodb.morphia.mapping.MappedClass mc
         3: .line 1275
            aload 4 /* mc */
            ldc Lorg/mongodb/morphia/annotations/NotSaved;
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getAnnotation:(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;
            ifnull 7
         4: .line 1276
            new org.mongodb.morphia.mapping.MappingException
            dup
            ldc "Entity type: %s is marked as NotSaved which means you should not try to save it!"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
         5: .line 1277
            aload 4 /* mc */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getClazz:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            aastore
         6: .line 1276
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial org.mongodb.morphia.mapping.MappingException.<init>:(Ljava/lang/String;)V
            athrow
         7: .line 1281
      StackMap locals: org.mongodb.morphia.mapping.MappedClass
      StackMap stack:
            new java.util.LinkedHashMap
            dup
            invokespecial java.util.LinkedHashMap.<init>:()V
            astore 5 /* involvedObjects */
        start local 5 // java.util.LinkedHashMap involvedObjects
         8: .line 1282
            aload 0 /* this */
            aload 2 /* entity */
            aload 5 /* involvedObjects */
            invokevirtual org.mongodb.morphia.DatastoreImpl.entityToDBObj:(Ljava/lang/Object;Ljava/util/Map;)Lcom/mongodb/DBObject;
            astore 6 /* document */
        start local 6 // com.mongodb.DBObject document
         9: .line 1285
            aload 6 /* document */
            ldc "_id"
            invokeinterface com.mongodb.DBObject.get:(Ljava/lang/String;)Ljava/lang/Object;
            astore 7 /* idValue */
        start local 7 // java.lang.Object idValue
        10: .line 1286
            aload 0 /* this */
            aload 1 /* dbColl */
            aload 2 /* entity */
            aload 6 /* document */
            aload 7 /* idValue */
            aload 0 /* this */
            aload 3 /* options */
            aload 2 /* entity */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.DatastoreImpl.enforceWriteConcern:(Lorg/mongodb/morphia/InsertOptions;Ljava/lang/Class;)Lorg/mongodb/morphia/InsertOptions;
            aload 4 /* mc */
            invokevirtual org.mongodb.morphia.DatastoreImpl.tryVersionedUpdate:(Lcom/mongodb/DBCollection;Ljava/lang/Object;Lcom/mongodb/DBObject;Ljava/lang/Object;Lorg/mongodb/morphia/InsertOptions;Lorg/mongodb/morphia/mapping/MappedClass;)Lcom/mongodb/WriteResult;
            astore 8 /* wr */
        start local 8 // com.mongodb.WriteResult wr
        11: .line 1288
            aload 8 /* wr */
            ifnonnull 13
        12: .line 1289
            aload 0 /* this */
            aload 1 /* dbColl */
            aload 6 /* document */
            aload 3 /* options */
            invokevirtual org.mongodb.morphia.DatastoreImpl.saveDocument:(Lcom/mongodb/DBCollection;Lcom/mongodb/DBObject;Lorg/mongodb/morphia/InsertOptions;)Lcom/mongodb/WriteResult;
            pop
        13: .line 1292
      StackMap locals: org.mongodb.morphia.DatastoreImpl com.mongodb.DBCollection java.lang.Object org.mongodb.morphia.InsertOptions org.mongodb.morphia.mapping.MappedClass java.util.LinkedHashMap com.mongodb.DBObject java.lang.Object com.mongodb.WriteResult
      StackMap stack:
            aload 0 /* this */
            aload 2 /* entity */
            invokestatic java.util.Collections.singletonList:(Ljava/lang/Object;)Ljava/util/List;
            aload 5 /* involvedObjects */
            aload 1 /* dbColl */
            invokevirtual org.mongodb.morphia.DatastoreImpl.postSaveOperations:(Ljava/lang/Iterable;Ljava/util/Map;Lcom/mongodb/DBCollection;)Ljava/util/List;
            iconst_0
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast org.mongodb.morphia.Key
            areturn
        end local 8 // com.mongodb.WriteResult wr
        end local 7 // java.lang.Object idValue
        end local 6 // com.mongodb.DBObject document
        end local 5 // java.util.LinkedHashMap involvedObjects
        end local 4 // org.mongodb.morphia.mapping.MappedClass mc
        end local 3 // org.mongodb.morphia.InsertOptions options
        end local 2 // java.lang.Object entity
        end local 1 // com.mongodb.DBCollection dbColl
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   14     0             this  Lorg/mongodb/morphia/DatastoreImpl;
            0   14     1           dbColl  Lcom/mongodb/DBCollection;
            0   14     2           entity  TT;
            0   14     3          options  Lorg/mongodb/morphia/InsertOptions;
            3   14     4               mc  Lorg/mongodb/morphia/mapping/MappedClass;
            8   14     5  involvedObjects  Ljava/util/LinkedHashMap<Ljava/lang/Object;Lcom/mongodb/DBObject;>;
            9   14     6         document  Lcom/mongodb/DBObject;
           10   14     7          idValue  Ljava/lang/Object;
           11   14     8               wr  Lcom/mongodb/WriteResult;
    Signature: <T:Ljava/lang/Object;>(Lcom/mongodb/DBCollection;TT;Lorg/mongodb/morphia/InsertOptions;)Lorg/mongodb/morphia/Key<TT;>;
    MethodParameters:
         Name  Flags
      dbColl   final
      entity   final
      options  final

  private com.mongodb.WriteResult saveDocument(com.mongodb.DBCollection, com.mongodb.DBObject, org.mongodb.morphia.InsertOptions);
    descriptor: (Lcom/mongodb/DBCollection;Lcom/mongodb/DBObject;Lorg/mongodb/morphia/InsertOptions;)Lcom/mongodb/WriteResult;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=4, args_size=4
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // com.mongodb.DBCollection dbColl
        start local 2 // com.mongodb.DBObject document
        start local 3 // org.mongodb.morphia.InsertOptions options
         0: .line 1296
            aload 2 /* document */
            ldc "_id"
            invokeinterface com.mongodb.DBObject.get:(Ljava/lang/String;)Ljava/lang/Object;
            ifnonnull 2
         1: .line 1297
            aload 1 /* dbColl */
            aload 2 /* document */
            invokestatic java.util.Collections.singletonList:(Ljava/lang/Object;)Ljava/util/List;
            aload 3 /* options */
            invokevirtual org.mongodb.morphia.InsertOptions.getOptions:()Lcom/mongodb/InsertOptions;
            invokevirtual com.mongodb.DBCollection.insert:(Ljava/util/List;Lcom/mongodb/InsertOptions;)Lcom/mongodb/WriteResult;
            areturn
         2: .line 1299
      StackMap locals:
      StackMap stack:
            aload 1 /* dbColl */
            new com.mongodb.BasicDBObject
            dup
            ldc "_id"
            aload 2 /* document */
            ldc "_id"
            invokeinterface com.mongodb.DBObject.get:(Ljava/lang/String;)Ljava/lang/Object;
            invokespecial com.mongodb.BasicDBObject.<init>:(Ljava/lang/String;Ljava/lang/Object;)V
            aload 2 /* document */
         3: .line 1300
            new com.mongodb.client.model.DBCollectionUpdateOptions
            dup
            invokespecial com.mongodb.client.model.DBCollectionUpdateOptions.<init>:()V
         4: .line 1301
            aload 3 /* options */
            invokevirtual org.mongodb.morphia.InsertOptions.getBypassDocumentValidation:()Ljava/lang/Boolean;
            invokevirtual com.mongodb.client.model.DBCollectionUpdateOptions.bypassDocumentValidation:(Ljava/lang/Boolean;)Lcom/mongodb/client/model/DBCollectionUpdateOptions;
         5: .line 1302
            aload 3 /* options */
            invokevirtual org.mongodb.morphia.InsertOptions.getWriteConcern:()Lcom/mongodb/WriteConcern;
            invokevirtual com.mongodb.client.model.DBCollectionUpdateOptions.writeConcern:(Lcom/mongodb/WriteConcern;)Lcom/mongodb/client/model/DBCollectionUpdateOptions;
         6: .line 1303
            iconst_1
            invokevirtual com.mongodb.client.model.DBCollectionUpdateOptions.upsert:(Z)Lcom/mongodb/client/model/DBCollectionUpdateOptions;
         7: .line 1299
            invokevirtual com.mongodb.DBCollection.update:(Lcom/mongodb/DBObject;Lcom/mongodb/DBObject;Lcom/mongodb/client/model/DBCollectionUpdateOptions;)Lcom/mongodb/WriteResult;
            areturn
        end local 3 // org.mongodb.morphia.InsertOptions options
        end local 2 // com.mongodb.DBObject document
        end local 1 // com.mongodb.DBCollection dbColl
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    8     0      this  Lorg/mongodb/morphia/DatastoreImpl;
            0    8     1    dbColl  Lcom/mongodb/DBCollection;
            0    8     2  document  Lcom/mongodb/DBObject;
            0    8     3   options  Lorg/mongodb/morphia/InsertOptions;
    MethodParameters:
          Name  Flags
      dbColl    final
      document  final
      options   final

  private <T> com.mongodb.WriteResult tryVersionedUpdate(com.mongodb.DBCollection, T, com.mongodb.DBObject, , org.mongodb.morphia.InsertOptions, org.mongodb.morphia.mapping.MappedClass);
    descriptor: (Lcom/mongodb/DBCollection;Ljava/lang/Object;Lcom/mongodb/DBObject;Ljava/lang/Object;Lorg/mongodb/morphia/InsertOptions;Lorg/mongodb/morphia/mapping/MappedClass;)Lcom/mongodb/WriteResult;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=15, args_size=7
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // com.mongodb.DBCollection dbColl
        start local 2 // java.lang.Object entity
        start local 3 // com.mongodb.DBObject dbObj
        start local 4 // java.lang.Object idValue
        start local 5 // org.mongodb.morphia.InsertOptions options
        start local 6 // org.mongodb.morphia.mapping.MappedClass mc
         0: .line 1310
            aload 6 /* mc */
            ldc Lorg/mongodb/morphia/annotations/Version;
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getFieldsAnnotatedWith:(Ljava/lang/Class;)Ljava/util/List;
            invokeinterface java.util.List.isEmpty:()Z
            ifeq 2
         1: .line 1311
            aconst_null
            areturn
         2: .line 1314
      StackMap locals:
      StackMap stack:
            aload 6 /* mc */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getMappedVersionField:()Lorg/mongodb/morphia/mapping/MappedField;
            astore 8 /* mfVersion */
        start local 8 // org.mongodb.morphia.mapping.MappedField mfVersion
         3: .line 1315
            aload 8 /* mfVersion */
            invokevirtual org.mongodb.morphia.mapping.MappedField.getNameToStore:()Ljava/lang/String;
            astore 9 /* versionKeyName */
        start local 9 // java.lang.String versionKeyName
         4: .line 1317
            aload 8 /* mfVersion */
            aload 2 /* entity */
            invokevirtual org.mongodb.morphia.mapping.MappedField.getFieldValue:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.Long
            astore 10 /* oldVersion */
        start local 10 // java.lang.Long oldVersion
         5: .line 1318
            aload 0 /* this */
            aload 10 /* oldVersion */
            invokevirtual org.mongodb.morphia.DatastoreImpl.nextValue:(Ljava/lang/Long;)J
            lstore 11 /* newVersion */
        start local 11 // long newVersion
         6: .line 1320
            aload 3 /* dbObj */
            aload 9 /* versionKeyName */
            lload 11 /* newVersion */
            invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
            invokeinterface com.mongodb.DBObject.put:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         7: .line 1323
            aload 4 /* idValue */
            ifnull 23
            lload 11 /* newVersion */
            lconst_1
            lcmp
            ifeq 23
         8: .line 1324
            aload 0 /* this */
            aload 1 /* dbColl */
            invokevirtual com.mongodb.DBCollection.getName:()Ljava/lang/String;
            aload 2 /* entity */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.DatastoreImpl.find:(Ljava/lang/String;Ljava/lang/Class;)Lorg/mongodb/morphia/query/Query;
         9: .line 1325
            invokeinterface org.mongodb.morphia.query.Query.disableValidation:()Lorg/mongodb/morphia/query/Query;
        10: .line 1326
            ldc "_id"
            aload 4 /* idValue */
            invokeinterface org.mongodb.morphia.query.Query.filter:(Ljava/lang/String;Ljava/lang/Object;)Lorg/mongodb/morphia/query/Query;
        11: .line 1327
            invokeinterface org.mongodb.morphia.query.Query.enableValidation:()Lorg/mongodb/morphia/query/Query;
        12: .line 1328
            aload 9 /* versionKeyName */
            aload 10 /* oldVersion */
            invokeinterface org.mongodb.morphia.query.Query.filter:(Ljava/lang/String;Ljava/lang/Object;)Lorg/mongodb/morphia/query/Query;
        13: .line 1324
            astore 13 /* query */
        start local 13 // org.mongodb.morphia.query.Query query
        14: .line 1329
            aload 0 /* this */
            aload 13 /* query */
            aload 3 /* dbObj */
            new org.mongodb.morphia.UpdateOptions
            dup
            invokespecial org.mongodb.morphia.UpdateOptions.<init>:()V
        15: .line 1330
            aload 5 /* options */
            invokevirtual org.mongodb.morphia.InsertOptions.getBypassDocumentValidation:()Ljava/lang/Boolean;
            invokevirtual org.mongodb.morphia.UpdateOptions.bypassDocumentValidation:(Ljava/lang/Boolean;)Lorg/mongodb/morphia/UpdateOptions;
        16: .line 1331
            aload 5 /* options */
            invokevirtual org.mongodb.morphia.InsertOptions.getWriteConcern:()Lcom/mongodb/WriteConcern;
            invokevirtual org.mongodb.morphia.UpdateOptions.writeConcern:(Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/UpdateOptions;
        17: .line 1329
            invokevirtual org.mongodb.morphia.DatastoreImpl.update:(Lorg/mongodb/morphia/query/Query;Lcom/mongodb/DBObject;Lorg/mongodb/morphia/UpdateOptions;)Lorg/mongodb/morphia/query/UpdateResults;
            astore 14 /* res */
        start local 14 // org.mongodb.morphia.query.UpdateResults res
        18: .line 1333
            aload 14 /* res */
            invokevirtual org.mongodb.morphia.query.UpdateResults.getWriteResult:()Lcom/mongodb/WriteResult;
            astore 7 /* wr */
        start local 7 // com.mongodb.WriteResult wr
        19: .line 1335
            aload 14 /* res */
            invokevirtual org.mongodb.morphia.query.UpdateResults.getUpdatedCount:()I
            iconst_1
            if_icmpeq 24
        20: .line 1336
            new java.util.ConcurrentModificationException
            dup
            ldc "Entity of class %s (id='%s',version='%d') was concurrently updated."
            iconst_3
            anewarray java.lang.Object
            dup
            iconst_0
        21: .line 1337
            aload 2 /* entity */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            aastore
            dup
            iconst_1
            aload 4 /* idValue */
            aastore
            dup
            iconst_2
            aload 10 /* oldVersion */
            aastore
        22: .line 1336
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.util.ConcurrentModificationException.<init>:(Ljava/lang/String;)V
            athrow
        end local 14 // org.mongodb.morphia.query.UpdateResults res
        end local 13 // org.mongodb.morphia.query.Query query
        end local 7 // com.mongodb.WriteResult wr
        23: .line 1340
      StackMap locals: org.mongodb.morphia.DatastoreImpl com.mongodb.DBCollection java.lang.Object com.mongodb.DBObject java.lang.Object org.mongodb.morphia.InsertOptions org.mongodb.morphia.mapping.MappedClass top org.mongodb.morphia.mapping.MappedField java.lang.String java.lang.Long long
      StackMap stack:
            aload 0 /* this */
            aload 1 /* dbColl */
            aload 3 /* dbObj */
            aload 5 /* options */
            invokevirtual org.mongodb.morphia.DatastoreImpl.saveDocument:(Lcom/mongodb/DBCollection;Lcom/mongodb/DBObject;Lorg/mongodb/morphia/InsertOptions;)Lcom/mongodb/WriteResult;
            astore 7 /* wr */
        start local 7 // com.mongodb.WriteResult wr
        24: .line 1343
      StackMap locals: org.mongodb.morphia.DatastoreImpl com.mongodb.DBCollection java.lang.Object com.mongodb.DBObject java.lang.Object org.mongodb.morphia.InsertOptions org.mongodb.morphia.mapping.MappedClass com.mongodb.WriteResult org.mongodb.morphia.mapping.MappedField java.lang.String java.lang.Long long
      StackMap stack:
            aload 7 /* wr */
            areturn
        end local 11 // long newVersion
        end local 10 // java.lang.Long oldVersion
        end local 9 // java.lang.String versionKeyName
        end local 8 // org.mongodb.morphia.mapping.MappedField mfVersion
        end local 7 // com.mongodb.WriteResult wr
        end local 6 // org.mongodb.morphia.mapping.MappedClass mc
        end local 5 // org.mongodb.morphia.InsertOptions options
        end local 4 // java.lang.Object idValue
        end local 3 // com.mongodb.DBObject dbObj
        end local 2 // java.lang.Object entity
        end local 1 // com.mongodb.DBCollection dbColl
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   25     0            this  Lorg/mongodb/morphia/DatastoreImpl;
            0   25     1          dbColl  Lcom/mongodb/DBCollection;
            0   25     2          entity  TT;
            0   25     3           dbObj  Lcom/mongodb/DBObject;
            0   25     4         idValue  Ljava/lang/Object;
            0   25     5         options  Lorg/mongodb/morphia/InsertOptions;
            0   25     6              mc  Lorg/mongodb/morphia/mapping/MappedClass;
           19   23     7              wr  Lcom/mongodb/WriteResult;
           24   25     7              wr  Lcom/mongodb/WriteResult;
            3   25     8       mfVersion  Lorg/mongodb/morphia/mapping/MappedField;
            4   25     9  versionKeyName  Ljava/lang/String;
            5   25    10      oldVersion  Ljava/lang/Long;
            6   25    11      newVersion  J
           14   23    13           query  Lorg/mongodb/morphia/query/Query<*>;
           18   23    14             res  Lorg/mongodb/morphia/query/UpdateResults;
    Signature: <T:Ljava/lang/Object;>(Lcom/mongodb/DBCollection;TT;Lcom/mongodb/DBObject;Ljava/lang/Object;Lorg/mongodb/morphia/InsertOptions;Lorg/mongodb/morphia/mapping/MappedClass;)Lcom/mongodb/WriteResult;
    MethodParameters:
         Name  Flags
      dbColl   final
      entity   final
      dbObj    final
      idValue  final
      options  final
      mc       final

  private org.mongodb.morphia.query.Query<?> buildExistsQuery();
    descriptor: (Ljava/lang/Object;)Lorg/mongodb/morphia/query/Query;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=5, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Object entityOrKey
         0: .line 1347
            aload 1 /* entityOrKey */
            invokestatic org.mongodb.morphia.mapping.lazy.proxy.ProxyHelper.unwrap:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 2 /* unwrapped */
        start local 2 // java.lang.Object unwrapped
         1: .line 1348
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 2 /* unwrapped */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getKey:(Ljava/lang/Object;)Lorg/mongodb/morphia/Key;
            astore 3 /* key */
        start local 3 // org.mongodb.morphia.Key key
         2: .line 1349
            aload 3 /* key */
            invokevirtual org.mongodb.morphia.Key.getId:()Ljava/lang/Object;
            astore 4 /* id */
        start local 4 // java.lang.Object id
         3: .line 1350
            aload 4 /* id */
            ifnonnull 5
         4: .line 1351
            new org.mongodb.morphia.mapping.MappingException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Could not get id for "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 2 /* unwrapped */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial org.mongodb.morphia.mapping.MappingException.<init>:(Ljava/lang/String;)V
            athrow
         5: .line 1354
      StackMap locals: java.lang.Object org.mongodb.morphia.Key java.lang.Object
      StackMap stack:
            aload 0 /* this */
            aload 3 /* key */
            invokevirtual org.mongodb.morphia.Key.getCollection:()Ljava/lang/String;
            aload 3 /* key */
            invokevirtual org.mongodb.morphia.Key.getType:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.DatastoreImpl.find:(Ljava/lang/String;Ljava/lang/Class;)Lorg/mongodb/morphia/query/Query;
            ldc "_id"
            aload 3 /* key */
            invokevirtual org.mongodb.morphia.Key.getId:()Ljava/lang/Object;
            invokeinterface org.mongodb.morphia.query.Query.filter:(Ljava/lang/String;Ljava/lang/Object;)Lorg/mongodb/morphia/query/Query;
            areturn
        end local 4 // java.lang.Object id
        end local 3 // org.mongodb.morphia.Key key
        end local 2 // java.lang.Object unwrapped
        end local 1 // java.lang.Object entityOrKey
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    6     0         this  Lorg/mongodb/morphia/DatastoreImpl;
            0    6     1  entityOrKey  Ljava/lang/Object;
            1    6     2    unwrapped  Ljava/lang/Object;
            2    6     3          key  Lorg/mongodb/morphia/Key<*>;
            3    6     4           id  Ljava/lang/Object;
    Signature: (Ljava/lang/Object;)Lorg/mongodb/morphia/query/Query<*>;
    MethodParameters:
             Name  Flags
      entityOrKey  final

  private org.mongodb.morphia.mapping.cache.EntityCache createCache();
    descriptor: ()Lorg/mongodb/morphia/mapping/cache/EntityCache;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.mongodb.morphia.DatastoreImpl this
         0: .line 1358
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            invokevirtual org.mongodb.morphia.mapping.Mapper.createEntityCache:()Lorg/mongodb/morphia/mapping/cache/EntityCache;
            areturn
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/mongodb/morphia/DatastoreImpl;

  private com.mongodb.DBObject entityToDBObj(, java.util.Map<java.lang.Object, com.mongodb.DBObject>);
    descriptor: (Ljava/lang/Object;Ljava/util/Map;)Lcom/mongodb/DBObject;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Object entity
        start local 2 // java.util.Map involvedObjects
         0: .line 1362
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 1 /* entity */
            invokestatic org.mongodb.morphia.mapping.lazy.proxy.ProxyHelper.unwrap:(Ljava/lang/Object;)Ljava/lang/Object;
            aload 2 /* involvedObjects */
            invokevirtual org.mongodb.morphia.mapping.Mapper.toDBObject:(Ljava/lang/Object;Ljava/util/Map;)Lcom/mongodb/DBObject;
            areturn
        end local 2 // java.util.Map involvedObjects
        end local 1 // java.lang.Object entity
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    1     0             this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1           entity  Ljava/lang/Object;
            0    1     2  involvedObjects  Ljava/util/Map<Ljava/lang/Object;Lcom/mongodb/DBObject;>;
    Signature: (Ljava/lang/Object;Ljava/util/Map<Ljava/lang/Object;Lcom/mongodb/DBObject;>;)Lcom/mongodb/DBObject;
    MethodParameters:
                 Name  Flags
      entity           final
      involvedObjects  final

  private <T> java.lang.Iterable<org.mongodb.morphia.Key<T>> insert(com.mongodb.DBCollection, java.lang.Iterable<T>, org.mongodb.morphia.InsertOptions);
    descriptor: (Lcom/mongodb/DBCollection;Ljava/lang/Iterable;Lorg/mongodb/morphia/InsertOptions;)Ljava/lang/Iterable;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=9, args_size=4
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // com.mongodb.DBCollection dbColl
        start local 2 // java.lang.Iterable entities
        start local 3 // org.mongodb.morphia.InsertOptions options
         0: .line 1366
            aload 2 /* entities */
            invokeinterface java.lang.Iterable.iterator:()Ljava/util/Iterator;
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 2
         1: .line 1367
            invokestatic java.util.Collections.emptyList:()Ljava/util/List;
            areturn
         2: .line 1370
      StackMap locals:
      StackMap stack:
            new java.util.LinkedHashMap
            dup
            invokespecial java.util.LinkedHashMap.<init>:()V
            astore 4 /* involvedObjects */
        start local 4 // java.util.Map involvedObjects
         3: .line 1371
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 5 /* list */
        start local 5 // java.util.List list
         4: .line 1372
            aload 3 /* options */
            invokevirtual org.mongodb.morphia.InsertOptions.getOptions:()Lcom/mongodb/InsertOptions;
            astore 6 /* insertOptions */
        start local 6 // com.mongodb.InsertOptions insertOptions
         5: .line 1373
            aload 2 /* entities */
            invokeinterface java.lang.Iterable.iterator:()Ljava/util/Iterator;
            astore 8
            goto 10
      StackMap locals: org.mongodb.morphia.DatastoreImpl com.mongodb.DBCollection java.lang.Iterable org.mongodb.morphia.InsertOptions java.util.Map java.util.List com.mongodb.InsertOptions top java.util.Iterator
      StackMap stack:
         6: aload 8
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.Object
            astore 7 /* entity */
        start local 7 // java.lang.Object entity
         7: .line 1374
            aload 3 /* options */
            invokevirtual org.mongodb.morphia.InsertOptions.getWriteConcern:()Lcom/mongodb/WriteConcern;
            ifnonnull 9
         8: .line 1375
            aload 0 /* this */
            aload 3 /* options */
            aload 7 /* entity */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.DatastoreImpl.enforceWriteConcern:(Lorg/mongodb/morphia/InsertOptions;Ljava/lang/Class;)Lorg/mongodb/morphia/InsertOptions;
            invokevirtual org.mongodb.morphia.InsertOptions.getOptions:()Lcom/mongodb/InsertOptions;
            astore 6 /* insertOptions */
         9: .line 1377
      StackMap locals: org.mongodb.morphia.DatastoreImpl com.mongodb.DBCollection java.lang.Iterable org.mongodb.morphia.InsertOptions java.util.Map java.util.List com.mongodb.InsertOptions java.lang.Object java.util.Iterator
      StackMap stack:
            aload 5 /* list */
            aload 0 /* this */
            aload 7 /* entity */
            aload 4 /* involvedObjects */
            invokevirtual org.mongodb.morphia.DatastoreImpl.toDbObject:(Ljava/lang/Object;Ljava/util/Map;)Lcom/mongodb/DBObject;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 7 // java.lang.Object entity
        10: .line 1373
      StackMap locals: org.mongodb.morphia.DatastoreImpl com.mongodb.DBCollection java.lang.Iterable org.mongodb.morphia.InsertOptions java.util.Map java.util.List com.mongodb.InsertOptions top java.util.Iterator
      StackMap stack:
            aload 8
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 6
        11: .line 1379
            aload 1 /* dbColl */
            aload 5 /* list */
            aload 6 /* insertOptions */
            invokevirtual com.mongodb.DBCollection.insert:(Ljava/util/List;Lcom/mongodb/InsertOptions;)Lcom/mongodb/WriteResult;
            pop
        12: .line 1381
            aload 0 /* this */
            aload 2 /* entities */
            aload 4 /* involvedObjects */
            aload 1 /* dbColl */
            invokevirtual org.mongodb.morphia.DatastoreImpl.postSaveOperations:(Ljava/lang/Iterable;Ljava/util/Map;Lcom/mongodb/DBCollection;)Ljava/util/List;
            areturn
        end local 6 // com.mongodb.InsertOptions insertOptions
        end local 5 // java.util.List list
        end local 4 // java.util.Map involvedObjects
        end local 3 // org.mongodb.morphia.InsertOptions options
        end local 2 // java.lang.Iterable entities
        end local 1 // com.mongodb.DBCollection dbColl
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   13     0             this  Lorg/mongodb/morphia/DatastoreImpl;
            0   13     1           dbColl  Lcom/mongodb/DBCollection;
            0   13     2         entities  Ljava/lang/Iterable<TT;>;
            0   13     3          options  Lorg/mongodb/morphia/InsertOptions;
            3   13     4  involvedObjects  Ljava/util/Map<Ljava/lang/Object;Lcom/mongodb/DBObject;>;
            4   13     5             list  Ljava/util/List<Lcom/mongodb/DBObject;>;
            5   13     6    insertOptions  Lcom/mongodb/InsertOptions;
            7   10     7           entity  TT;
    Signature: <T:Ljava/lang/Object;>(Lcom/mongodb/DBCollection;Ljava/lang/Iterable<TT;>;Lorg/mongodb/morphia/InsertOptions;)Ljava/lang/Iterable<Lorg/mongodb/morphia/Key<TT;>;>;
    MethodParameters:
          Name  Flags
      dbColl    final
      entities  final
      options   final

  private <T> org.mongodb.morphia.query.Query<T> newQuery(java.lang.Class<T>, com.mongodb.DBCollection, com.mongodb.DBObject);
    descriptor: (Ljava/lang/Class;Lcom/mongodb/DBCollection;Lcom/mongodb/DBObject;)Lorg/mongodb/morphia/query/Query;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=4, args_size=4
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Class type
        start local 2 // com.mongodb.DBCollection collection
        start local 3 // com.mongodb.DBObject query
         0: .line 1390
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getQueryFactory:()Lorg/mongodb/morphia/query/QueryFactory;
            aload 0 /* this */
            aload 2 /* collection */
            aload 1 /* type */
            aload 3 /* query */
            invokeinterface org.mongodb.morphia.query.QueryFactory.createQuery:(Lorg/mongodb/morphia/Datastore;Lcom/mongodb/DBCollection;Ljava/lang/Class;Lcom/mongodb/DBObject;)Lorg/mongodb/morphia/query/Query;
            areturn
        end local 3 // com.mongodb.DBObject query
        end local 2 // com.mongodb.DBCollection collection
        end local 1 // java.lang.Class type
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    1     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1        type  Ljava/lang/Class<TT;>;
            0    1     2  collection  Lcom/mongodb/DBCollection;
            0    1     3       query  Lcom/mongodb/DBObject;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;Lcom/mongodb/DBCollection;Lcom/mongodb/DBObject;)Lorg/mongodb/morphia/query/Query<TT;>;
    MethodParameters:
            Name  Flags
      type        final
      collection  final
      query       final

  private <T> org.mongodb.morphia.query.Query<T> newQuery(java.lang.Class<T>, com.mongodb.DBCollection);
    descriptor: (Ljava/lang/Class;Lcom/mongodb/DBCollection;)Lorg/mongodb/morphia/query/Query;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Class type
        start local 2 // com.mongodb.DBCollection collection
         0: .line 1399
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getQueryFactory:()Lorg/mongodb/morphia/query/QueryFactory;
            aload 0 /* this */
            aload 2 /* collection */
            aload 1 /* type */
            invokeinterface org.mongodb.morphia.query.QueryFactory.createQuery:(Lorg/mongodb/morphia/Datastore;Lcom/mongodb/DBCollection;Ljava/lang/Class;)Lorg/mongodb/morphia/query/Query;
            areturn
        end local 2 // com.mongodb.DBCollection collection
        end local 1 // java.lang.Class type
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    1     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1        type  Ljava/lang/Class<TT;>;
            0    1     2  collection  Lcom/mongodb/DBCollection;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;Lcom/mongodb/DBCollection;)Lorg/mongodb/morphia/query/Query<TT;>;
    MethodParameters:
            Name  Flags
      type        final
      collection  final

  private long nextValue(java.lang.Long);
    descriptor: (Ljava/lang/Long;)J
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Long oldVersion
         0: .line 1403
            aload 1 /* oldVersion */
            ifnonnull 1
            lconst_1
            goto 2
      StackMap locals:
      StackMap stack:
         1: aload 1 /* oldVersion */
            invokevirtual java.lang.Long.longValue:()J
            lconst_1
            ladd
      StackMap locals:
      StackMap stack: long
         2: lreturn
        end local 1 // java.lang.Long oldVersion
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    3     0        this  Lorg/mongodb/morphia/DatastoreImpl;
            0    3     1  oldVersion  Ljava/lang/Long;
    MethodParameters:
            Name  Flags
      oldVersion  final

  private <T> java.util.List<org.mongodb.morphia.Key<T>> postSaveOperations(java.lang.Iterable<T>, java.util.Map<java.lang.Object, com.mongodb.DBObject>, com.mongodb.DBCollection);
    descriptor: (Ljava/lang/Iterable;Ljava/util/Map;Lcom/mongodb/DBCollection;)Ljava/util/List;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=4, args_size=4
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Iterable entities
        start local 2 // java.util.Map involvedObjects
        start local 3 // com.mongodb.DBCollection collection
         0: .line 1408
            aload 0 /* this */
            aload 1 /* entities */
            aload 2 /* involvedObjects */
            aload 3 /* collection */
            iconst_1
            invokevirtual org.mongodb.morphia.DatastoreImpl.postSaveOperations:(Ljava/lang/Iterable;Ljava/util/Map;Lcom/mongodb/DBCollection;Z)Ljava/util/List;
            areturn
        end local 3 // com.mongodb.DBCollection collection
        end local 2 // java.util.Map involvedObjects
        end local 1 // java.lang.Iterable entities
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    1     0             this  Lorg/mongodb/morphia/DatastoreImpl;
            0    1     1         entities  Ljava/lang/Iterable<TT;>;
            0    1     2  involvedObjects  Ljava/util/Map<Ljava/lang/Object;Lcom/mongodb/DBObject;>;
            0    1     3       collection  Lcom/mongodb/DBCollection;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Iterable<TT;>;Ljava/util/Map<Ljava/lang/Object;Lcom/mongodb/DBObject;>;Lcom/mongodb/DBCollection;)Ljava/util/List<Lorg/mongodb/morphia/Key<TT;>;>;
    MethodParameters:
                 Name  Flags
      entities         final
      involvedObjects  final
      collection       final

  private <T> java.util.List<org.mongodb.morphia.Key<T>> postSaveOperations(java.lang.Iterable<T>, java.util.Map<java.lang.Object, com.mongodb.DBObject>, com.mongodb.DBCollection, boolean);
    descriptor: (Ljava/lang/Iterable;Ljava/util/Map;Lcom/mongodb/DBCollection;Z)Ljava/util/List;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=9, args_size=5
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Iterable entities
        start local 2 // java.util.Map involvedObjects
        start local 3 // com.mongodb.DBCollection collection
        start local 4 // boolean fetchKeys
         0: .line 1414
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 5 /* keys */
        start local 5 // java.util.List keys
         1: .line 1415
            aload 1 /* entities */
            invokeinterface java.lang.Iterable.iterator:()Ljava/util/Iterator;
            astore 7
            goto 10
      StackMap locals: org.mongodb.morphia.DatastoreImpl java.lang.Iterable java.util.Map com.mongodb.DBCollection int java.util.List top java.util.Iterator
      StackMap stack:
         2: aload 7
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.Object
            astore 6 /* entity */
        start local 6 // java.lang.Object entity
         3: .line 1416
            aload 2 /* involvedObjects */
            aload 6 /* entity */
            invokeinterface java.util.Map.remove:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.mongodb.DBObject
            astore 8 /* dbObj */
        start local 8 // com.mongodb.DBObject dbObj
         4: .line 1418
            iload 4 /* fetchKeys */
            ifeq 9
         5: .line 1419
            aload 8 /* dbObj */
            ldc "_id"
            invokeinterface com.mongodb.DBObject.get:(Ljava/lang/String;)Ljava/lang/Object;
            ifnonnull 7
         6: .line 1420
            new org.mongodb.morphia.mapping.MappingException
            dup
            ldc "Missing _id after save on %s"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 6 /* entity */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            aastore
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial org.mongodb.morphia.mapping.MappingException.<init>:(Ljava/lang/String;)V
            athrow
         7: .line 1422
      StackMap locals: org.mongodb.morphia.DatastoreImpl java.lang.Iterable java.util.Map com.mongodb.DBCollection int java.util.List java.lang.Object java.util.Iterator com.mongodb.DBObject
      StackMap stack:
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 0 /* this */
            aload 8 /* dbObj */
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.createCache:()Lorg/mongodb/morphia/mapping/cache/EntityCache;
            aload 6 /* entity */
            invokevirtual org.mongodb.morphia.mapping.Mapper.updateKeyAndVersionInfo:(Lorg/mongodb/morphia/Datastore;Lcom/mongodb/DBObject;Lorg/mongodb/morphia/mapping/cache/EntityCache;Ljava/lang/Object;)V
         8: .line 1423
            aload 5 /* keys */
            new org.mongodb.morphia.Key
            dup
            aload 6 /* entity */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            aload 3 /* collection */
            invokevirtual com.mongodb.DBCollection.getName:()Ljava/lang/String;
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 6 /* entity */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getId:(Ljava/lang/Object;)Ljava/lang/Object;
            invokespecial org.mongodb.morphia.Key.<init>:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;)V
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
         9: .line 1425
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 6 /* entity */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClass:(Ljava/lang/Object;)Lorg/mongodb/morphia/mapping/MappedClass;
            ldc Lorg/mongodb/morphia/annotations/PostPersist;
            aload 6 /* entity */
            aload 8 /* dbObj */
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            invokevirtual org.mongodb.morphia.mapping.MappedClass.callLifecycleMethods:(Ljava/lang/Class;Ljava/lang/Object;Lcom/mongodb/DBObject;Lorg/mongodb/morphia/mapping/Mapper;)Lcom/mongodb/DBObject;
            pop
        end local 8 // com.mongodb.DBObject dbObj
        end local 6 // java.lang.Object entity
        10: .line 1415
      StackMap locals: org.mongodb.morphia.DatastoreImpl java.lang.Iterable java.util.Map com.mongodb.DBCollection int java.util.List top java.util.Iterator
      StackMap stack:
            aload 7
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 2
        11: .line 1428
            aload 2 /* involvedObjects */
            invokeinterface java.util.Map.entrySet:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 7
            goto 15
      StackMap locals:
      StackMap stack:
        12: aload 7
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.util.Map$Entry
            astore 6 /* entry */
        start local 6 // java.util.Map$Entry entry
        13: .line 1429
            aload 6 /* entry */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            astore 8 /* key */
        start local 8 // java.lang.Object key
        14: .line 1430
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 8 /* key */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClass:(Ljava/lang/Object;)Lorg/mongodb/morphia/mapping/MappedClass;
            ldc Lorg/mongodb/morphia/annotations/PostPersist;
            aload 8 /* key */
            aload 6 /* entry */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            checkcast com.mongodb.DBObject
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            invokevirtual org.mongodb.morphia.mapping.MappedClass.callLifecycleMethods:(Ljava/lang/Class;Ljava/lang/Object;Lcom/mongodb/DBObject;Lorg/mongodb/morphia/mapping/Mapper;)Lcom/mongodb/DBObject;
            pop
        end local 8 // java.lang.Object key
        end local 6 // java.util.Map$Entry entry
        15: .line 1428
      StackMap locals:
      StackMap stack:
            aload 7
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 12
        16: .line 1433
            aload 5 /* keys */
            areturn
        end local 5 // java.util.List keys
        end local 4 // boolean fetchKeys
        end local 3 // com.mongodb.DBCollection collection
        end local 2 // java.util.Map involvedObjects
        end local 1 // java.lang.Iterable entities
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   17     0             this  Lorg/mongodb/morphia/DatastoreImpl;
            0   17     1         entities  Ljava/lang/Iterable<TT;>;
            0   17     2  involvedObjects  Ljava/util/Map<Ljava/lang/Object;Lcom/mongodb/DBObject;>;
            0   17     3       collection  Lcom/mongodb/DBCollection;
            0   17     4        fetchKeys  Z
            1   17     5             keys  Ljava/util/List<Lorg/mongodb/morphia/Key<TT;>;>;
            3   10     6           entity  TT;
            4   10     8            dbObj  Lcom/mongodb/DBObject;
           13   15     6            entry  Ljava/util/Map$Entry<Ljava/lang/Object;Lcom/mongodb/DBObject;>;
           14   15     8              key  Ljava/lang/Object;
    Signature: <T:Ljava/lang/Object;>(Ljava/lang/Iterable<TT;>;Ljava/util/Map<Ljava/lang/Object;Lcom/mongodb/DBObject;>;Lcom/mongodb/DBCollection;Z)Ljava/util/List<Lorg/mongodb/morphia/Key<TT;>;>;
    MethodParameters:
                 Name  Flags
      entities         final
      involvedObjects  final
      collection       final
      fetchKeys        final

  private <T> org.mongodb.morphia.query.Query<T> queryByExample(com.mongodb.DBCollection, T);
    descriptor: (Lcom/mongodb/DBCollection;Ljava/lang/Object;)Lorg/mongodb/morphia/query/Query;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=5, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // com.mongodb.DBCollection coll
        start local 2 // java.lang.Object example
         0: .line 1439
            aload 2 /* example */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            astore 3 /* type */
        start local 3 // java.lang.Class type
         1: .line 1440
            aload 0 /* this */
            aload 2 /* example */
            new java.util.HashMap
            dup
            invokespecial java.util.HashMap.<init>:()V
            invokevirtual org.mongodb.morphia.DatastoreImpl.entityToDBObj:(Ljava/lang/Object;Ljava/util/Map;)Lcom/mongodb/DBObject;
            astore 4 /* query */
        start local 4 // com.mongodb.DBObject query
         2: .line 1441
            aload 0 /* this */
            aload 3 /* type */
            aload 1 /* coll */
            aload 4 /* query */
            invokevirtual org.mongodb.morphia.DatastoreImpl.newQuery:(Ljava/lang/Class;Lcom/mongodb/DBCollection;Lcom/mongodb/DBObject;)Lorg/mongodb/morphia/query/Query;
            areturn
        end local 4 // com.mongodb.DBObject query
        end local 3 // java.lang.Class type
        end local 2 // java.lang.Object example
        end local 1 // com.mongodb.DBCollection coll
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    3     0     this  Lorg/mongodb/morphia/DatastoreImpl;
            0    3     1     coll  Lcom/mongodb/DBCollection;
            0    3     2  example  TT;
            1    3     3     type  Ljava/lang/Class<TT;>;
            2    3     4    query  Lcom/mongodb/DBObject;
    Signature: <T:Ljava/lang/Object;>(Lcom/mongodb/DBCollection;TT;)Lorg/mongodb/morphia/query/Query<TT;>;
    MethodParameters:
         Name  Flags
      coll     final
      example  final

  private <T> com.mongodb.DBObject toDbObject(T, java.util.Map<java.lang.Object, com.mongodb.DBObject>);
    descriptor: (Ljava/lang/Object;Ljava/util/Map;)Lcom/mongodb/DBObject;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=9, args_size=3
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Object ent
        start local 2 // java.util.Map involvedObjects
         0: .line 1445
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.mapper:Lorg/mongodb/morphia/mapping/Mapper;
            aload 1 /* ent */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClass:(Ljava/lang/Object;)Lorg/mongodb/morphia/mapping/MappedClass;
            astore 3 /* mc */
        start local 3 // org.mongodb.morphia.mapping.MappedClass mc
         1: .line 1446
            aload 3 /* mc */
            ldc Lorg/mongodb/morphia/annotations/NotSaved;
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getAnnotation:(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;
            ifnull 5
         2: .line 1447
            new org.mongodb.morphia.mapping.MappingException
            dup
            ldc "Entity type: %s is marked as NotSaved which means you should not try to save it!"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
         3: .line 1448
            aload 3 /* mc */
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getClazz:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            aastore
         4: .line 1447
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial org.mongodb.morphia.mapping.MappingException.<init>:(Ljava/lang/String;)V
            athrow
         5: .line 1450
      StackMap locals: org.mongodb.morphia.mapping.MappedClass
      StackMap stack:
            aload 0 /* this */
            aload 1 /* ent */
            aload 2 /* involvedObjects */
            invokevirtual org.mongodb.morphia.DatastoreImpl.entityToDBObj:(Ljava/lang/Object;Ljava/util/Map;)Lcom/mongodb/DBObject;
            astore 4 /* dbObject */
        start local 4 // com.mongodb.DBObject dbObject
         6: .line 1451
            aload 3 /* mc */
            ldc Lorg/mongodb/morphia/annotations/Version;
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getFieldsAnnotatedWith:(Ljava/lang/Class;)Ljava/util/List;
            astore 5 /* versionFields */
        start local 5 // java.util.List versionFields
         7: .line 1452
            aload 5 /* versionFields */
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 7
            goto 13
      StackMap locals: org.mongodb.morphia.DatastoreImpl java.lang.Object java.util.Map org.mongodb.morphia.mapping.MappedClass com.mongodb.DBObject java.util.List top java.util.Iterator
      StackMap stack:
         8: aload 7
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.mongodb.morphia.mapping.MappedField
            astore 6 /* mappedField */
        start local 6 // org.mongodb.morphia.mapping.MappedField mappedField
         9: .line 1453
            aload 6 /* mappedField */
            invokevirtual org.mongodb.morphia.mapping.MappedField.getNameToStore:()Ljava/lang/String;
            astore 8 /* name */
        start local 8 // java.lang.String name
        10: .line 1454
            aload 4 /* dbObject */
            aload 8 /* name */
            invokeinterface com.mongodb.DBObject.get:(Ljava/lang/String;)Ljava/lang/Object;
            ifnonnull 13
        11: .line 1455
            aload 4 /* dbObject */
            aload 8 /* name */
            iconst_1
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            invokeinterface com.mongodb.DBObject.put:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        12: .line 1456
            aload 6 /* mappedField */
            aload 1 /* ent */
            lconst_1
            invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
            invokevirtual org.mongodb.morphia.mapping.MappedField.setFieldValue:(Ljava/lang/Object;Ljava/lang/Object;)V
        end local 8 // java.lang.String name
        end local 6 // org.mongodb.morphia.mapping.MappedField mappedField
        13: .line 1452
      StackMap locals:
      StackMap stack:
            aload 7
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 8
        14: .line 1459
            aload 4 /* dbObject */
            areturn
        end local 5 // java.util.List versionFields
        end local 4 // com.mongodb.DBObject dbObject
        end local 3 // org.mongodb.morphia.mapping.MappedClass mc
        end local 2 // java.util.Map involvedObjects
        end local 1 // java.lang.Object ent
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   15     0             this  Lorg/mongodb/morphia/DatastoreImpl;
            0   15     1              ent  TT;
            0   15     2  involvedObjects  Ljava/util/Map<Ljava/lang/Object;Lcom/mongodb/DBObject;>;
            1   15     3               mc  Lorg/mongodb/morphia/mapping/MappedClass;
            6   15     4         dbObject  Lcom/mongodb/DBObject;
            7   15     5    versionFields  Ljava/util/List<Lorg/mongodb/morphia/mapping/MappedField;>;
            9   13     6      mappedField  Lorg/mongodb/morphia/mapping/MappedField;
           10   13     8             name  Ljava/lang/String;
    Signature: <T:Ljava/lang/Object;>(TT;Ljava/util/Map<Ljava/lang/Object;Lcom/mongodb/DBObject;>;)Lcom/mongodb/DBObject;
    MethodParameters:
                 Name  Flags
      ent              final
      involvedObjects  final

  public <T> org.mongodb.morphia.query.UpdateResults update(org.mongodb.morphia.query.Query<T>, org.mongodb.morphia.query.UpdateOperations<T>, org.mongodb.morphia.UpdateOptions);
    descriptor: (Lorg/mongodb/morphia/query/Query;Lorg/mongodb/morphia/query/UpdateOperations;Lorg/mongodb/morphia/UpdateOptions;)Lorg/mongodb/morphia/query/UpdateResults;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=8, locals=9, args_size=4
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.query.Query query
        start local 2 // org.mongodb.morphia.query.UpdateOperations operations
        start local 3 // org.mongodb.morphia.UpdateOptions options
         0: .line 1464
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getCollection:()Lcom/mongodb/DBCollection;
            astore 4 /* dbColl */
        start local 4 // com.mongodb.DBCollection dbColl
         1: .line 1466
            aload 4 /* dbColl */
            ifnonnull 3
         2: .line 1467
            aload 0 /* this */
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getEntityClass:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.DatastoreImpl.getCollection:(Ljava/lang/Class;)Lcom/mongodb/DBCollection;
            astore 4 /* dbColl */
         3: .line 1470
      StackMap locals: com.mongodb.DBCollection
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getMapper:()Lorg/mongodb/morphia/mapping/Mapper;
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getEntityClass:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClass:(Ljava/lang/Object;)Lorg/mongodb/morphia/mapping/MappedClass;
            astore 5 /* mc */
        start local 5 // org.mongodb.morphia.mapping.MappedClass mc
         4: .line 1471
            aload 5 /* mc */
            ldc Lorg/mongodb/morphia/annotations/Version;
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getFieldsAnnotatedWith:(Ljava/lang/Class;)Ljava/util/List;
            astore 6 /* fields */
        start local 6 // java.util.List fields
         5: .line 1473
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getQueryObject:()Lcom/mongodb/DBObject;
            astore 7 /* queryObject */
        start local 7 // com.mongodb.DBObject queryObject
         6: .line 1474
            aload 2 /* operations */
            invokeinterface org.mongodb.morphia.query.UpdateOperations.isIsolated:()Z
            ifeq 8
         7: .line 1475
            aload 7 /* queryObject */
            ldc "$isolated"
            iconst_1
            invokestatic java.lang.Boolean.valueOf:(Z)Ljava/lang/Boolean;
            invokeinterface com.mongodb.DBObject.put:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         8: .line 1478
      StackMap locals: org.mongodb.morphia.mapping.MappedClass java.util.List com.mongodb.DBObject
      StackMap stack:
            aload 6 /* fields */
            invokeinterface java.util.List.isEmpty:()Z
            ifne 10
         9: .line 1479
            aload 2 /* operations */
            aload 6 /* fields */
            iconst_0
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast org.mongodb.morphia.mapping.MappedField
            invokevirtual org.mongodb.morphia.mapping.MappedField.getNameToStore:()Ljava/lang/String;
            iconst_1
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            invokeinterface org.mongodb.morphia.query.UpdateOperations.inc:(Ljava/lang/String;Ljava/lang/Number;)Lorg/mongodb/morphia/query/UpdateOperations;
            pop
        10: .line 1482
      StackMap locals:
      StackMap stack:
            aload 2 /* operations */
            checkcast org.mongodb.morphia.query.UpdateOpsImpl
            invokevirtual org.mongodb.morphia.query.UpdateOpsImpl.getOps:()Lcom/mongodb/DBObject;
            checkcast com.mongodb.BasicDBObject
            astore 8 /* update */
        start local 8 // com.mongodb.BasicDBObject update
        11: .line 1483
            getstatic org.mongodb.morphia.DatastoreImpl.LOG:Lorg/mongodb/morphia/logging/Logger;
            invokeinterface org.mongodb.morphia.logging.Logger.isTraceEnabled:()Z
            ifeq 15
        12: .line 1484
            getstatic org.mongodb.morphia.DatastoreImpl.LOG:Lorg/mongodb/morphia/logging/Logger;
            ldc "Executing update(%s) for query: %s, ops: %s, multi: %s, upsert: %s"
            iconst_5
            anewarray java.lang.Object
            dup
            iconst_0
        13: .line 1485
            aload 4 /* dbColl */
            invokevirtual com.mongodb.DBCollection.getName:()Ljava/lang/String;
            aastore
            dup
            iconst_1
            aload 7 /* queryObject */
            aastore
            dup
            iconst_2
            aload 8 /* update */
            aastore
            dup
            iconst_3
            aload 3 /* options */
            invokevirtual org.mongodb.morphia.UpdateOptions.isMulti:()Z
            invokestatic java.lang.Boolean.valueOf:(Z)Ljava/lang/Boolean;
            aastore
            dup
            iconst_4
            aload 3 /* options */
            invokevirtual org.mongodb.morphia.UpdateOptions.isUpsert:()Z
            invokestatic java.lang.Boolean.valueOf:(Z)Ljava/lang/Boolean;
            aastore
        14: .line 1484
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.mongodb.morphia.logging.Logger.trace:(Ljava/lang/String;)V
        15: .line 1488
      StackMap locals: com.mongodb.BasicDBObject
      StackMap stack:
            new org.mongodb.morphia.query.UpdateResults
            dup
            aload 4 /* dbColl */
            aload 7 /* queryObject */
            aload 8 /* update */
        16: .line 1489
            aload 0 /* this */
            aload 3 /* options */
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getEntityClass:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.DatastoreImpl.enforceWriteConcern:(Lorg/mongodb/morphia/UpdateOptions;Ljava/lang/Class;)Lorg/mongodb/morphia/UpdateOptions;
        17: .line 1490
            invokevirtual org.mongodb.morphia.UpdateOptions.getOptions:()Lcom/mongodb/client/model/DBCollectionUpdateOptions;
        18: .line 1488
            invokevirtual com.mongodb.DBCollection.update:(Lcom/mongodb/DBObject;Lcom/mongodb/DBObject;Lcom/mongodb/client/model/DBCollectionUpdateOptions;)Lcom/mongodb/WriteResult;
            invokespecial org.mongodb.morphia.query.UpdateResults.<init>:(Lcom/mongodb/WriteResult;)V
            areturn
        end local 8 // com.mongodb.BasicDBObject update
        end local 7 // com.mongodb.DBObject queryObject
        end local 6 // java.util.List fields
        end local 5 // org.mongodb.morphia.mapping.MappedClass mc
        end local 4 // com.mongodb.DBCollection dbColl
        end local 3 // org.mongodb.morphia.UpdateOptions options
        end local 2 // org.mongodb.morphia.query.UpdateOperations operations
        end local 1 // org.mongodb.morphia.query.Query query
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   19     0         this  Lorg/mongodb/morphia/DatastoreImpl;
            0   19     1        query  Lorg/mongodb/morphia/query/Query<TT;>;
            0   19     2   operations  Lorg/mongodb/morphia/query/UpdateOperations<TT;>;
            0   19     3      options  Lorg/mongodb/morphia/UpdateOptions;
            1   19     4       dbColl  Lcom/mongodb/DBCollection;
            4   19     5           mc  Lorg/mongodb/morphia/mapping/MappedClass;
            5   19     6       fields  Ljava/util/List<Lorg/mongodb/morphia/mapping/MappedField;>;
            6   19     7  queryObject  Lcom/mongodb/DBObject;
           11   19     8       update  Lcom/mongodb/BasicDBObject;
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/query/Query<TT;>;Lorg/mongodb/morphia/query/UpdateOperations<TT;>;Lorg/mongodb/morphia/UpdateOptions;)Lorg/mongodb/morphia/query/UpdateResults;
    MethodParameters:
            Name  Flags
      query       final
      operations  final
      options     final

  private <T> org.mongodb.morphia.query.UpdateResults update(org.mongodb.morphia.query.Query<T>, com.mongodb.DBObject, boolean, boolean, com.mongodb.WriteConcern);
    descriptor: (Lorg/mongodb/morphia/query/Query;Lcom/mongodb/DBObject;ZZLcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/query/UpdateResults;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=6, args_size=6
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.query.Query query
        start local 2 // com.mongodb.DBObject update
        start local 3 // boolean createIfMissing
        start local 4 // boolean multi
        start local 5 // com.mongodb.WriteConcern wc
         0: .line 1496
            aload 0 /* this */
            aload 1 /* query */
            aload 2 /* update */
            new org.mongodb.morphia.UpdateOptions
            dup
            invokespecial org.mongodb.morphia.UpdateOptions.<init>:()V
         1: .line 1497
            iload 3 /* createIfMissing */
            invokevirtual org.mongodb.morphia.UpdateOptions.upsert:(Z)Lorg/mongodb/morphia/UpdateOptions;
         2: .line 1498
            iload 4 /* multi */
            invokevirtual org.mongodb.morphia.UpdateOptions.multi:(Z)Lorg/mongodb/morphia/UpdateOptions;
         3: .line 1499
            aload 5 /* wc */
            invokevirtual org.mongodb.morphia.UpdateOptions.writeConcern:(Lcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/UpdateOptions;
         4: .line 1496
            invokevirtual org.mongodb.morphia.DatastoreImpl.update:(Lorg/mongodb/morphia/query/Query;Lcom/mongodb/DBObject;Lorg/mongodb/morphia/UpdateOptions;)Lorg/mongodb/morphia/query/UpdateResults;
            areturn
        end local 5 // com.mongodb.WriteConcern wc
        end local 4 // boolean multi
        end local 3 // boolean createIfMissing
        end local 2 // com.mongodb.DBObject update
        end local 1 // org.mongodb.morphia.query.Query query
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    5     0             this  Lorg/mongodb/morphia/DatastoreImpl;
            0    5     1            query  Lorg/mongodb/morphia/query/Query<TT;>;
            0    5     2           update  Lcom/mongodb/DBObject;
            0    5     3  createIfMissing  Z
            0    5     4            multi  Z
            0    5     5               wc  Lcom/mongodb/WriteConcern;
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/query/Query<TT;>;Lcom/mongodb/DBObject;ZZLcom/mongodb/WriteConcern;)Lorg/mongodb/morphia/query/UpdateResults;
    MethodParameters:
                 Name  Flags
      query            final
      update           final
      createIfMissing  final
      multi            final
      wc               final

  private <T> org.mongodb.morphia.query.UpdateResults update(org.mongodb.morphia.query.Query<T>, com.mongodb.DBObject, org.mongodb.morphia.UpdateOptions);
    descriptor: (Lorg/mongodb/morphia/query/Query;Lcom/mongodb/DBObject;Lorg/mongodb/morphia/UpdateOptions;)Lorg/mongodb/morphia/query/UpdateResults;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=8, locals=9, args_size=4
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // org.mongodb.morphia.query.Query query
        start local 2 // com.mongodb.DBObject update
        start local 3 // org.mongodb.morphia.UpdateOptions options
         0: .line 1505
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getCollection:()Lcom/mongodb/DBCollection;
            astore 4 /* dbColl */
        start local 4 // com.mongodb.DBCollection dbColl
         1: .line 1507
            aload 4 /* dbColl */
            ifnonnull 3
         2: .line 1508
            aload 0 /* this */
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getEntityClass:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.DatastoreImpl.getCollection:(Ljava/lang/Class;)Lcom/mongodb/DBCollection;
            astore 4 /* dbColl */
         3: .line 1511
      StackMap locals: com.mongodb.DBCollection
      StackMap stack:
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getSortObject:()Lcom/mongodb/DBObject;
            ifnull 5
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getSortObject:()Lcom/mongodb/DBObject;
            invokeinterface com.mongodb.DBObject.keySet:()Ljava/util/Set;
            ifnull 5
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getSortObject:()Lcom/mongodb/DBObject;
            invokeinterface com.mongodb.DBObject.keySet:()Ljava/util/Set;
            invokeinterface java.util.Set.isEmpty:()Z
            ifne 5
         4: .line 1512
            new org.mongodb.morphia.query.QueryException
            dup
            ldc "sorting is not allowed for updates."
            invokespecial org.mongodb.morphia.query.QueryException.<init>:(Ljava/lang/String;)V
            athrow
         5: .line 1514
      StackMap locals:
      StackMap stack:
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getOffset:()I
            ifle 7
         6: .line 1515
            new org.mongodb.morphia.query.QueryException
            dup
            ldc "a query offset is not allowed for updates."
            invokespecial org.mongodb.morphia.query.QueryException.<init>:(Ljava/lang/String;)V
            athrow
         7: .line 1517
      StackMap locals:
      StackMap stack:
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getLimit:()I
            ifle 9
         8: .line 1518
            new org.mongodb.morphia.query.QueryException
            dup
            ldc "a query limit is not allowed for updates."
            invokespecial org.mongodb.morphia.query.QueryException.<init>:(Ljava/lang/String;)V
            athrow
         9: .line 1521
      StackMap locals:
      StackMap stack:
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getQueryObject:()Lcom/mongodb/DBObject;
            astore 5 /* queryObject */
        start local 5 // com.mongodb.DBObject queryObject
        10: .line 1523
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getMapper:()Lorg/mongodb/morphia/mapping/Mapper;
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getEntityClass:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClass:(Ljava/lang/Object;)Lorg/mongodb/morphia/mapping/MappedClass;
            astore 6 /* mc */
        start local 6 // org.mongodb.morphia.mapping.MappedClass mc
        11: .line 1524
            aload 6 /* mc */
            ldc Lorg/mongodb/morphia/annotations/Version;
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getFieldsAnnotatedWith:(Ljava/lang/Class;)Ljava/util/List;
            astore 7 /* fields */
        start local 7 // java.util.List fields
        12: .line 1525
            aload 7 /* fields */
            invokeinterface java.util.List.isEmpty:()Z
            ifne 19
        13: .line 1526
            aload 7 /* fields */
            iconst_0
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast org.mongodb.morphia.mapping.MappedField
            astore 8 /* versionMF */
        start local 8 // org.mongodb.morphia.mapping.MappedField versionMF
        14: .line 1527
            aload 2 /* update */
            aload 8 /* versionMF */
            invokevirtual org.mongodb.morphia.mapping.MappedField.getNameToStore:()Ljava/lang/String;
            invokeinterface com.mongodb.DBObject.get:(Ljava/lang/String;)Ljava/lang/Object;
            ifnonnull 19
        15: .line 1528
            aload 2 /* update */
            ldc "$inc"
            invokeinterface com.mongodb.DBObject.containsField:(Ljava/lang/String;)Z
            ifne 18
        16: .line 1529
            aload 2 /* update */
            ldc "$inc"
            new com.mongodb.BasicDBObject
            dup
            aload 8 /* versionMF */
            invokevirtual org.mongodb.morphia.mapping.MappedField.getNameToStore:()Ljava/lang/String;
            iconst_1
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            invokespecial com.mongodb.BasicDBObject.<init>:(Ljava/lang/String;Ljava/lang/Object;)V
            invokeinterface com.mongodb.DBObject.put:(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        17: .line 1530
            goto 19
        18: .line 1531
      StackMap locals: org.mongodb.morphia.DatastoreImpl org.mongodb.morphia.query.Query com.mongodb.DBObject org.mongodb.morphia.UpdateOptions com.mongodb.DBCollection com.mongodb.DBObject org.mongodb.morphia.mapping.MappedClass java.util.List org.mongodb.morphia.mapping.MappedField
      StackMap stack:
            aload 2 /* update */
            ldc "$inc"
            invokeinterface com.mongodb.DBObject.get:(Ljava/lang/String;)Ljava/lang/Object;
            checkcast java.util.Map
            aload 8 /* versionMF */
            invokevirtual org.mongodb.morphia.mapping.MappedField.getNameToStore:()Ljava/lang/String;
            iconst_1
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        end local 8 // org.mongodb.morphia.mapping.MappedField versionMF
        19: .line 1536
      StackMap locals:
      StackMap stack:
            getstatic org.mongodb.morphia.DatastoreImpl.LOG:Lorg/mongodb/morphia/logging/Logger;
            invokeinterface org.mongodb.morphia.logging.Logger.isTraceEnabled:()Z
            ifeq 23
        20: .line 1537
            getstatic org.mongodb.morphia.DatastoreImpl.LOG:Lorg/mongodb/morphia/logging/Logger;
            ldc "Executing update(%s) for query: %s, ops: %s, multi: %s, upsert: %s"
            iconst_5
            anewarray java.lang.Object
            dup
            iconst_0
        21: .line 1538
            aload 4 /* dbColl */
            invokevirtual com.mongodb.DBCollection.getName:()Ljava/lang/String;
            aastore
            dup
            iconst_1
            aload 5 /* queryObject */
            aastore
            dup
            iconst_2
            aload 2 /* update */
            aastore
            dup
            iconst_3
            aload 3 /* options */
            invokevirtual org.mongodb.morphia.UpdateOptions.isMulti:()Z
            invokestatic java.lang.Boolean.valueOf:(Z)Ljava/lang/Boolean;
            aastore
            dup
            iconst_4
            aload 3 /* options */
            invokevirtual org.mongodb.morphia.UpdateOptions.isUpsert:()Z
            invokestatic java.lang.Boolean.valueOf:(Z)Ljava/lang/Boolean;
            aastore
        22: .line 1537
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.mongodb.morphia.logging.Logger.trace:(Ljava/lang/String;)V
        23: .line 1541
      StackMap locals:
      StackMap stack:
            new org.mongodb.morphia.query.UpdateResults
            dup
            aload 4 /* dbColl */
            aload 5 /* queryObject */
            aload 2 /* update */
        24: .line 1542
            aload 0 /* this */
            aload 3 /* options */
            aload 1 /* query */
            invokeinterface org.mongodb.morphia.query.Query.getEntityClass:()Ljava/lang/Class;
            invokevirtual org.mongodb.morphia.DatastoreImpl.enforceWriteConcern:(Lorg/mongodb/morphia/UpdateOptions;Ljava/lang/Class;)Lorg/mongodb/morphia/UpdateOptions;
        25: .line 1543
            invokevirtual org.mongodb.morphia.UpdateOptions.getOptions:()Lcom/mongodb/client/model/DBCollectionUpdateOptions;
        26: .line 1541
            invokevirtual com.mongodb.DBCollection.update:(Lcom/mongodb/DBObject;Lcom/mongodb/DBObject;Lcom/mongodb/client/model/DBCollectionUpdateOptions;)Lcom/mongodb/WriteResult;
            invokespecial org.mongodb.morphia.query.UpdateResults.<init>:(Lcom/mongodb/WriteResult;)V
            areturn
        end local 7 // java.util.List fields
        end local 6 // org.mongodb.morphia.mapping.MappedClass mc
        end local 5 // com.mongodb.DBObject queryObject
        end local 4 // com.mongodb.DBCollection dbColl
        end local 3 // org.mongodb.morphia.UpdateOptions options
        end local 2 // com.mongodb.DBObject update
        end local 1 // org.mongodb.morphia.query.Query query
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   27     0         this  Lorg/mongodb/morphia/DatastoreImpl;
            0   27     1        query  Lorg/mongodb/morphia/query/Query<TT;>;
            0   27     2       update  Lcom/mongodb/DBObject;
            0   27     3      options  Lorg/mongodb/morphia/UpdateOptions;
            1   27     4       dbColl  Lcom/mongodb/DBCollection;
           10   27     5  queryObject  Lcom/mongodb/DBObject;
           11   27     6           mc  Lorg/mongodb/morphia/mapping/MappedClass;
           12   27     7       fields  Ljava/util/List<Lorg/mongodb/morphia/mapping/MappedField;>;
           14   19     8    versionMF  Lorg/mongodb/morphia/mapping/MappedField;
    Signature: <T:Ljava/lang/Object;>(Lorg/mongodb/morphia/query/Query<TT;>;Lcom/mongodb/DBObject;Lorg/mongodb/morphia/UpdateOptions;)Lorg/mongodb/morphia/query/UpdateResults;
    MethodParameters:
         Name  Flags
      query    final
      update   final
      options  final

  private com.mongodb.WriteConcern getWriteConcern(java.lang.Object);
    descriptor: (Ljava/lang/Object;)Lcom/mongodb/WriteConcern;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=4, args_size=2
        start local 0 // org.mongodb.morphia.DatastoreImpl this
        start local 1 // java.lang.Object clazzOrEntity
         0: .line 1552
            aload 0 /* this */
            getfield org.mongodb.morphia.DatastoreImpl.defConcern:Lcom/mongodb/WriteConcern;
            astore 2 /* wc */
        start local 2 // com.mongodb.WriteConcern wc
         1: .line 1553
            aload 1 /* clazzOrEntity */
            ifnull 5
         2: .line 1554
            aload 0 /* this */
            invokevirtual org.mongodb.morphia.DatastoreImpl.getMapper:()Lorg/mongodb/morphia/mapping/Mapper;
            aload 1 /* clazzOrEntity */
            invokevirtual org.mongodb.morphia.mapping.Mapper.getMappedClass:(Ljava/lang/Object;)Lorg/mongodb/morphia/mapping/MappedClass;
            invokevirtual org.mongodb.morphia.mapping.MappedClass.getEntityAnnotation:()Lorg/mongodb/morphia/annotations/Entity;
            astore 3 /* entityAnn */
        start local 3 // org.mongodb.morphia.annotations.Entity entityAnn
         3: .line 1555
            aload 3 /* entityAnn */
            ifnull 5
            aload 3 /* entityAnn */
            invokeinterface org.mongodb.morphia.annotations.Entity.concern:()Ljava/lang/String;
            invokevirtual java.lang.String.length:()I
            ifeq 5
         4: .line 1556
            aload 3 /* entityAnn */
            invokeinterface org.mongodb.morphia.annotations.Entity.concern:()Ljava/lang/String;
            invokestatic com.mongodb.WriteConcern.valueOf:(Ljava/lang/String;)Lcom/mongodb/WriteConcern;
            astore 2 /* wc */
        end local 3 // org.mongodb.morphia.annotations.Entity entityAnn
         5: .line 1560
      StackMap locals: com.mongodb.WriteConcern
      StackMap stack:
            aload 2 /* wc */
            areturn
        end local 2 // com.mongodb.WriteConcern wc
        end local 1 // java.lang.Object clazzOrEntity
        end local 0 // org.mongodb.morphia.DatastoreImpl this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    6     0           this  Lorg/mongodb/morphia/DatastoreImpl;
            0    6     1  clazzOrEntity  Ljava/lang/Object;
            1    6     2             wc  Lcom/mongodb/WriteConcern;
            3    5     3      entityAnn  Lorg/mongodb/morphia/annotations/Entity;
    MethodParameters:
               Name  Flags
      clazzOrEntity  final
}
SourceFile: "DatastoreImpl.java"
InnerClasses:
  public final OutputType = com.mongodb.MapReduceCommand$OutputType of com.mongodb.MapReduceCommand
  public abstract Entry = java.util.Map$Entry of java.util.Map
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()