// Generated by the protocol buffer compiler.  DO NOT EDIT!

using pb = global::Google.ProtocolBuffers;
using pbc = global::Google.ProtocolBuffers.Collections;
using pbd = global::Google.ProtocolBuffers.Descriptors;
using scg = global::System.Collections.Generic;
namespace Sirikata.Persistence.Protocol._PBJ_Internal {
  
  public static partial class Persistence {
  
    #region Extension registration
    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {
    }
    #endregion
    #region Static variables
    internal static pbd::MessageDescriptor internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_StorageKey__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageKey, global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageKey.Builder> internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_StorageKey__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_StorageValue__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageValue, global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageValue.Builder> internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_StorageValue__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_StorageElement__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement, global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Builder> internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_StorageElement__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_CompareElement__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Sirikata.Persistence.Protocol._PBJ_Internal.CompareElement, global::Sirikata.Persistence.Protocol._PBJ_Internal.CompareElement.Builder> internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_CompareElement__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_StorageSet__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageSet, global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageSet.Builder> internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_StorageSet__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_ReadSet__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Sirikata.Persistence.Protocol._PBJ_Internal.ReadSet, global::Sirikata.Persistence.Protocol._PBJ_Internal.ReadSet.Builder> internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_ReadSet__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_WriteSet__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Sirikata.Persistence.Protocol._PBJ_Internal.WriteSet, global::Sirikata.Persistence.Protocol._PBJ_Internal.WriteSet.Builder> internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_WriteSet__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_ReadWriteSet__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Sirikata.Persistence.Protocol._PBJ_Internal.ReadWriteSet, global::Sirikata.Persistence.Protocol._PBJ_Internal.ReadWriteSet.Builder> internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_ReadWriteSet__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_Minitransaction__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Sirikata.Persistence.Protocol._PBJ_Internal.Minitransaction, global::Sirikata.Persistence.Protocol._PBJ_Internal.Minitransaction.Builder> internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_Minitransaction__FieldAccessorTable;
    internal static pbd::MessageDescriptor internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_Response__Descriptor;
    internal static pb::FieldAccess.FieldAccessorTable<global::Sirikata.Persistence.Protocol._PBJ_Internal.Response, global::Sirikata.Persistence.Protocol._PBJ_Internal.Response.Builder> internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_Response__FieldAccessorTable;
    #endregion
    #region Descriptor
    public static pbd::FileDescriptor Descriptor {
      get { return descriptor; }
    }
    private static pbd::FileDescriptor descriptor;
    
    static Persistence() {
      byte[] descriptorData = global::System.Convert.FromBase64String(
          "ChFQZXJzaXN0ZW5jZS5wcm90bxIrU2lyaWthdGEuUGVyc2lzdGVuY2UuUHJv" + 
          "dG9jb2wuX1BCSl9JbnRlcm5hbCJHCgpTdG9yYWdlS2V5EhMKC29iamVjdF91" + 
          "dWlkGAkgASgMEhAKCGZpZWxkX2lkGAogASgEEhIKCmZpZWxkX25hbWUYCyAB" + 
          "KAkiHAoMU3RvcmFnZVZhbHVlEgwKBGRhdGEYDCABKAwi/gEKDlN0b3JhZ2VF" + 
          "bGVtZW50EhMKC29iamVjdF91dWlkGAkgASgMEhAKCGZpZWxkX2lkGAogASgE" + 
          "EhIKCmZpZWxkX25hbWUYCyABKAkSDAoEZGF0YRgMIAEoDBINCgVpbmRleBgN" + 
          "IAEoBRJfCg1yZXR1cm5fc3RhdHVzGA8gASgOMkguU2lyaWthdGEuUGVyc2lz" + 
          "dGVuY2UuUHJvdG9jb2wuX1BCSl9JbnRlcm5hbC5TdG9yYWdlRWxlbWVudC5S" + 
          "ZXR1cm5TdGF0dXMiMwoMUmV0dXJuU3RhdHVzEg8KC0tFWV9NSVNTSU5HEAQS" + 
          "EgoOSU5URVJOQUxfRVJST1IQBiLaAQoOQ29tcGFyZUVsZW1lbnQSEwoLb2Jq" + 
          "ZWN0X3V1aWQYCSABKAwSEAoIZmllbGRfaWQYCiABKAQSEgoKZmllbGRfbmFt" + 
          "ZRgLIAEoCRIMCgRkYXRhGAwgASgMEloKCmNvbXBhcmF0b3IYDiABKA4yRi5T" + 
          "aXJpa2F0YS5QZXJzaXN0ZW5jZS5Qcm90b2NvbC5fUEJKX0ludGVybmFsLkNv" + 
          "bXBhcmVFbGVtZW50LkNPTVBBUkFUT1IiIwoKQ09NUEFSQVRPUhIJCgVFUVVB" + 
          "TBAAEgoKBk5FUVVBTBABIlgKClN0b3JhZ2VTZXQSSgoFcmVhZHMYCSADKAsy" + 
          "Oy5TaXJpa2F0YS5QZXJzaXN0ZW5jZS5Qcm90b2NvbC5fUEJKX0ludGVybmFs" + 
          "LlN0b3JhZ2VFbGVtZW50IlUKB1JlYWRTZXQSSgoFcmVhZHMYCSADKAsyOy5T" + 
          "aXJpa2F0YS5QZXJzaXN0ZW5jZS5Qcm90b2NvbC5fUEJKX0ludGVybmFsLlN0" + 
          "b3JhZ2VFbGVtZW50IlcKCFdyaXRlU2V0EksKBndyaXRlcxgKIAMoCzI7LlNp" + 
          "cmlrYXRhLlBlcnNpc3RlbmNlLlByb3RvY29sLl9QQkpfSW50ZXJuYWwuU3Rv" + 
          "cmFnZUVsZW1lbnQi5gEKDFJlYWRXcml0ZVNldBJKCgVyZWFkcxgJIAMoCzI7" + 
          "LlNpcmlrYXRhLlBlcnNpc3RlbmNlLlByb3RvY29sLl9QQkpfSW50ZXJuYWwu" + 
          "U3RvcmFnZUVsZW1lbnQSSwoGd3JpdGVzGAogAygLMjsuU2lyaWthdGEuUGVy" + 
          "c2lzdGVuY2UuUHJvdG9jb2wuX1BCSl9JbnRlcm5hbC5TdG9yYWdlRWxlbWVu" + 
          "dBIPCgdvcHRpb25zGA4gASgEIiwKE1JlYWRXcml0ZVNldE9wdGlvbnMSFQoR" + 
          "UkVUVVJOX1JFQURfTkFNRVMQASK3AgoPTWluaXRyYW5zYWN0aW9uEkoKBXJl" + 
          "YWRzGAkgAygLMjsuU2lyaWthdGEuUGVyc2lzdGVuY2UuUHJvdG9jb2wuX1BC" + 
          "Sl9JbnRlcm5hbC5TdG9yYWdlRWxlbWVudBJLCgZ3cml0ZXMYCiADKAsyOy5T" + 
          "aXJpa2F0YS5QZXJzaXN0ZW5jZS5Qcm90b2NvbC5fUEJKX0ludGVybmFsLlN0" + 
          "b3JhZ2VFbGVtZW50Ek0KCGNvbXBhcmVzGAsgAygLMjsuU2lyaWthdGEuUGVy" + 
          "c2lzdGVuY2UuUHJvdG9jb2wuX1BCSl9JbnRlcm5hbC5Db21wYXJlRWxlbWVu" + 
          "dBIPCgdvcHRpb25zGA4gASgEIisKElRyYW5zYWN0aW9uT3B0aW9ucxIVChFS" + 
          "RVRVUk5fUkVBRF9OQU1FUxABIp8CCghSZXNwb25zZRJKCgVyZWFkcxgJIAMo" + 
          "CzI7LlNpcmlrYXRhLlBlcnNpc3RlbmNlLlByb3RvY29sLl9QQkpfSW50ZXJu" + 
          "YWwuU3RvcmFnZUVsZW1lbnQSWQoNcmV0dXJuX3N0YXR1cxgPIAEoDjJCLlNp" + 
          "cmlrYXRhLlBlcnNpc3RlbmNlLlByb3RvY29sLl9QQkpfSW50ZXJuYWwuUmVz" + 
          "cG9uc2UuUmV0dXJuU3RhdHVzImwKDFJldHVyblN0YXR1cxILCgdTVUNDRVNT" + 
          "EAASEwoPREFUQUJBU0VfTE9DS0VEEAMSDwoLS0VZX01JU1NJTkcQBBIVChFD" + 
          "T01QQVJJU09OX0ZBSUxFRBAFEhIKDklOVEVSTkFMX0VSUk9SEAY=");
      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
        descriptor = root;
        internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_StorageKey__Descriptor = Descriptor.MessageTypes[0];
        internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_StorageKey__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageKey, global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageKey.Builder>(internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_StorageKey__Descriptor,
                new string[] { "ObjectUuid", "FieldId", "FieldName", });
        internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_StorageValue__Descriptor = Descriptor.MessageTypes[1];
        internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_StorageValue__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageValue, global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageValue.Builder>(internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_StorageValue__Descriptor,
                new string[] { "Data", });
        internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_StorageElement__Descriptor = Descriptor.MessageTypes[2];
        internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_StorageElement__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement, global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Builder>(internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_StorageElement__Descriptor,
                new string[] { "ObjectUuid", "FieldId", "FieldName", "Data", "Index", "ReturnStatus", });
        internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_CompareElement__Descriptor = Descriptor.MessageTypes[3];
        internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_CompareElement__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Sirikata.Persistence.Protocol._PBJ_Internal.CompareElement, global::Sirikata.Persistence.Protocol._PBJ_Internal.CompareElement.Builder>(internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_CompareElement__Descriptor,
                new string[] { "ObjectUuid", "FieldId", "FieldName", "Data", "Comparator", });
        internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_StorageSet__Descriptor = Descriptor.MessageTypes[4];
        internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_StorageSet__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageSet, global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageSet.Builder>(internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_StorageSet__Descriptor,
                new string[] { "Reads", });
        internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_ReadSet__Descriptor = Descriptor.MessageTypes[5];
        internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_ReadSet__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Sirikata.Persistence.Protocol._PBJ_Internal.ReadSet, global::Sirikata.Persistence.Protocol._PBJ_Internal.ReadSet.Builder>(internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_ReadSet__Descriptor,
                new string[] { "Reads", });
        internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_WriteSet__Descriptor = Descriptor.MessageTypes[6];
        internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_WriteSet__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Sirikata.Persistence.Protocol._PBJ_Internal.WriteSet, global::Sirikata.Persistence.Protocol._PBJ_Internal.WriteSet.Builder>(internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_WriteSet__Descriptor,
                new string[] { "Writes", });
        internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_ReadWriteSet__Descriptor = Descriptor.MessageTypes[7];
        internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_ReadWriteSet__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Sirikata.Persistence.Protocol._PBJ_Internal.ReadWriteSet, global::Sirikata.Persistence.Protocol._PBJ_Internal.ReadWriteSet.Builder>(internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_ReadWriteSet__Descriptor,
                new string[] { "Reads", "Writes", "Options", });
        internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_Minitransaction__Descriptor = Descriptor.MessageTypes[8];
        internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_Minitransaction__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Sirikata.Persistence.Protocol._PBJ_Internal.Minitransaction, global::Sirikata.Persistence.Protocol._PBJ_Internal.Minitransaction.Builder>(internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_Minitransaction__Descriptor,
                new string[] { "Reads", "Writes", "Compares", "Options", });
        internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_Response__Descriptor = Descriptor.MessageTypes[9];
        internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_Response__FieldAccessorTable = 
            new pb::FieldAccess.FieldAccessorTable<global::Sirikata.Persistence.Protocol._PBJ_Internal.Response, global::Sirikata.Persistence.Protocol._PBJ_Internal.Response.Builder>(internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_Response__Descriptor,
                new string[] { "Reads", "ReturnStatus", });
        return null;
      };
      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
          new pbd::FileDescriptor[] {
          }, assigner);
    }
    #endregion
    
  }
  #region Messages
  public sealed partial class StorageKey : pb::GeneratedMessage<StorageKey, StorageKey.Builder> {
    private static readonly StorageKey defaultInstance = new Builder().BuildPartial();
    public static StorageKey DefaultInstance {
      get { return defaultInstance; }
    }
    
    public override StorageKey DefaultInstanceForType {
      get { return defaultInstance; }
    }
    
    protected override StorageKey ThisMessage {
      get { return this; }
    }
    
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.Persistence.internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_StorageKey__Descriptor; }
    }
    
    protected override pb::FieldAccess.FieldAccessorTable<StorageKey, StorageKey.Builder> InternalFieldAccessors {
      get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.Persistence.internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_StorageKey__FieldAccessorTable; }
    }
    
    public const int ObjectUuidFieldNumber = 9;
    private bool hasObjectUuid;
    private pb::ByteString objectUuid_ = pb::ByteString.Empty;
    public bool HasObjectUuid {
      get { return hasObjectUuid; }
    }
    public pb::ByteString ObjectUuid {
      get { return objectUuid_; }
    }
    
    public const int FieldIdFieldNumber = 10;
    private bool hasFieldId;
    private ulong fieldId_ = 0UL;
    public bool HasFieldId {
      get { return hasFieldId; }
    }
    [global::System.CLSCompliant(false)]
    public ulong FieldId {
      get { return fieldId_; }
    }
    
    public const int FieldNameFieldNumber = 11;
    private bool hasFieldName;
    private string fieldName_ = "";
    public bool HasFieldName {
      get { return hasFieldName; }
    }
    public string FieldName {
      get { return fieldName_; }
    }
    
    public override bool IsInitialized {
      get {
        return true;
      }
    }
    
    public override void WriteTo(pb::CodedOutputStream output) {
      if (HasObjectUuid) {
        output.WriteBytes(9, ObjectUuid);
      }
      if (HasFieldId) {
        output.WriteUInt64(10, FieldId);
      }
      if (HasFieldName) {
        output.WriteString(11, FieldName);
      }
      UnknownFields.WriteTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public override int SerializedSize {
      get {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
        
        size = 0;
        if (HasObjectUuid) {
          size += pb::CodedOutputStream.ComputeBytesSize(9, ObjectUuid);
        }
        if (HasFieldId) {
          size += pb::CodedOutputStream.ComputeUInt64Size(10, FieldId);
        }
        if (HasFieldName) {
          size += pb::CodedOutputStream.ComputeStringSize(11, FieldName);
        }
        size += UnknownFields.SerializedSize;
        memoizedSerializedSize = size;
        return size;
      }
    }
    
    public static StorageKey ParseFrom(pb::ByteString data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static StorageKey ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static StorageKey ParseFrom(byte[] data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static StorageKey ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static StorageKey ParseFrom(global::System.IO.Stream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static StorageKey ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static StorageKey ParseDelimitedFrom(global::System.IO.Stream input) {
      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
    }
    public static StorageKey ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
    }
    public static StorageKey ParseFrom(pb::CodedInputStream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static StorageKey ParseFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static Builder CreateBuilder() { return new Builder(); }
    public override Builder ToBuilder() { return CreateBuilder(this); }
    public override Builder CreateBuilderForType() { return new Builder(); }
    public static Builder CreateBuilder(StorageKey prototype) {
      return (Builder) new Builder().MergeFrom(prototype);
    }
    
    public sealed partial class Builder : pb::GeneratedBuilder<StorageKey, Builder> {
      protected override Builder ThisBuilder {
        get { return this; }
      }
      public Builder() {}
      
      StorageKey result = new StorageKey();
      
      protected override StorageKey MessageBeingBuilt {
        get { return result; }
      }
      
      public override Builder Clear() {
        result = new StorageKey();
        return this;
      }
      
      public override Builder Clone() {
        return new Builder().MergeFrom(result);
      }
      
      public override pbd::MessageDescriptor DescriptorForType {
        get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageKey.Descriptor; }
      }
      
      public override StorageKey DefaultInstanceForType {
        get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageKey.DefaultInstance; }
      }
      
      public override StorageKey BuildPartial() {
        if (result == null) {
          throw new global::System.InvalidOperationException("build() has already been called on this Builder");
        }
        StorageKey returnMe = result;
        result = null;
        return returnMe;
      }
      
      public override Builder MergeFrom(pb::IMessage other) {
        if (other is StorageKey) {
          return MergeFrom((StorageKey) other);
        } else {
          base.MergeFrom(other);
          return this;
        }
      }
      
      public override Builder MergeFrom(StorageKey other) {
        if (other == global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageKey.DefaultInstance) return this;
        if (other.HasObjectUuid) {
          ObjectUuid = other.ObjectUuid;
        }
        if (other.HasFieldId) {
          FieldId = other.FieldId;
        }
        if (other.HasFieldName) {
          FieldName = other.FieldName;
        }
        this.MergeUnknownFields(other.UnknownFields);
        return this;
      }
      
      public override Builder MergeFrom(pb::CodedInputStream input) {
        return MergeFrom(input, pb::ExtensionRegistry.Empty);
      }
      
      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
        pb::UnknownFieldSet.Builder unknownFields = null;
        while (true) {
          uint tag = input.ReadTag();
          switch (tag) {
            case 0: {
              if (unknownFields != null) {
                this.UnknownFields = unknownFields.Build();
              }
              return this;
            }
            default: {
              if (pb::WireFormat.IsEndGroupTag(tag)) {
                if (unknownFields != null) {
                  this.UnknownFields = unknownFields.Build();
                }
                return this;
              }
              if (unknownFields == null) {
                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
              }
              ParseUnknownField(input, unknownFields, extensionRegistry, tag);
              break;
            }
            case 74: {
              ObjectUuid = input.ReadBytes();
              break;
            }
            case 80: {
              FieldId = input.ReadUInt64();
              break;
            }
            case 90: {
              FieldName = input.ReadString();
              break;
            }
          }
        }
      }
      
      
      public bool HasObjectUuid {
        get { return result.HasObjectUuid; }
      }
      public pb::ByteString ObjectUuid {
        get { return result.ObjectUuid; }
        set { SetObjectUuid(value); }
      }
      public Builder SetObjectUuid(pb::ByteString value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        result.hasObjectUuid = true;
        result.objectUuid_ = value;
        return this;
      }
      public Builder ClearObjectUuid() {
        result.hasObjectUuid = false;
        result.objectUuid_ = pb::ByteString.Empty;
        return this;
      }
      
      public bool HasFieldId {
        get { return result.HasFieldId; }
      }
      [global::System.CLSCompliant(false)]
      public ulong FieldId {
        get { return result.FieldId; }
        set { SetFieldId(value); }
      }
      [global::System.CLSCompliant(false)]
      public Builder SetFieldId(ulong value) {
        result.hasFieldId = true;
        result.fieldId_ = value;
        return this;
      }
      public Builder ClearFieldId() {
        result.hasFieldId = false;
        result.fieldId_ = 0UL;
        return this;
      }
      
      public bool HasFieldName {
        get { return result.HasFieldName; }
      }
      public string FieldName {
        get { return result.FieldName; }
        set { SetFieldName(value); }
      }
      public Builder SetFieldName(string value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        result.hasFieldName = true;
        result.fieldName_ = value;
        return this;
      }
      public Builder ClearFieldName() {
        result.hasFieldName = false;
        result.fieldName_ = "";
        return this;
      }
    }
    static StorageKey() {
      object.ReferenceEquals(global::Sirikata.Persistence.Protocol._PBJ_Internal.Persistence.Descriptor, null);
    }
  }
  
  public sealed partial class StorageValue : pb::GeneratedMessage<StorageValue, StorageValue.Builder> {
    private static readonly StorageValue defaultInstance = new Builder().BuildPartial();
    public static StorageValue DefaultInstance {
      get { return defaultInstance; }
    }
    
    public override StorageValue DefaultInstanceForType {
      get { return defaultInstance; }
    }
    
    protected override StorageValue ThisMessage {
      get { return this; }
    }
    
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.Persistence.internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_StorageValue__Descriptor; }
    }
    
    protected override pb::FieldAccess.FieldAccessorTable<StorageValue, StorageValue.Builder> InternalFieldAccessors {
      get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.Persistence.internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_StorageValue__FieldAccessorTable; }
    }
    
    public const int DataFieldNumber = 12;
    private bool hasData;
    private pb::ByteString data_ = pb::ByteString.Empty;
    public bool HasData {
      get { return hasData; }
    }
    public pb::ByteString Data {
      get { return data_; }
    }
    
    public override bool IsInitialized {
      get {
        return true;
      }
    }
    
    public override void WriteTo(pb::CodedOutputStream output) {
      if (HasData) {
        output.WriteBytes(12, Data);
      }
      UnknownFields.WriteTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public override int SerializedSize {
      get {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
        
        size = 0;
        if (HasData) {
          size += pb::CodedOutputStream.ComputeBytesSize(12, Data);
        }
        size += UnknownFields.SerializedSize;
        memoizedSerializedSize = size;
        return size;
      }
    }
    
    public static StorageValue ParseFrom(pb::ByteString data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static StorageValue ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static StorageValue ParseFrom(byte[] data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static StorageValue ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static StorageValue ParseFrom(global::System.IO.Stream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static StorageValue ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static StorageValue ParseDelimitedFrom(global::System.IO.Stream input) {
      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
    }
    public static StorageValue ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
    }
    public static StorageValue ParseFrom(pb::CodedInputStream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static StorageValue ParseFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static Builder CreateBuilder() { return new Builder(); }
    public override Builder ToBuilder() { return CreateBuilder(this); }
    public override Builder CreateBuilderForType() { return new Builder(); }
    public static Builder CreateBuilder(StorageValue prototype) {
      return (Builder) new Builder().MergeFrom(prototype);
    }
    
    public sealed partial class Builder : pb::GeneratedBuilder<StorageValue, Builder> {
      protected override Builder ThisBuilder {
        get { return this; }
      }
      public Builder() {}
      
      StorageValue result = new StorageValue();
      
      protected override StorageValue MessageBeingBuilt {
        get { return result; }
      }
      
      public override Builder Clear() {
        result = new StorageValue();
        return this;
      }
      
      public override Builder Clone() {
        return new Builder().MergeFrom(result);
      }
      
      public override pbd::MessageDescriptor DescriptorForType {
        get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageValue.Descriptor; }
      }
      
      public override StorageValue DefaultInstanceForType {
        get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageValue.DefaultInstance; }
      }
      
      public override StorageValue BuildPartial() {
        if (result == null) {
          throw new global::System.InvalidOperationException("build() has already been called on this Builder");
        }
        StorageValue returnMe = result;
        result = null;
        return returnMe;
      }
      
      public override Builder MergeFrom(pb::IMessage other) {
        if (other is StorageValue) {
          return MergeFrom((StorageValue) other);
        } else {
          base.MergeFrom(other);
          return this;
        }
      }
      
      public override Builder MergeFrom(StorageValue other) {
        if (other == global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageValue.DefaultInstance) return this;
        if (other.HasData) {
          Data = other.Data;
        }
        this.MergeUnknownFields(other.UnknownFields);
        return this;
      }
      
      public override Builder MergeFrom(pb::CodedInputStream input) {
        return MergeFrom(input, pb::ExtensionRegistry.Empty);
      }
      
      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
        pb::UnknownFieldSet.Builder unknownFields = null;
        while (true) {
          uint tag = input.ReadTag();
          switch (tag) {
            case 0: {
              if (unknownFields != null) {
                this.UnknownFields = unknownFields.Build();
              }
              return this;
            }
            default: {
              if (pb::WireFormat.IsEndGroupTag(tag)) {
                if (unknownFields != null) {
                  this.UnknownFields = unknownFields.Build();
                }
                return this;
              }
              if (unknownFields == null) {
                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
              }
              ParseUnknownField(input, unknownFields, extensionRegistry, tag);
              break;
            }
            case 98: {
              Data = input.ReadBytes();
              break;
            }
          }
        }
      }
      
      
      public bool HasData {
        get { return result.HasData; }
      }
      public pb::ByteString Data {
        get { return result.Data; }
        set { SetData(value); }
      }
      public Builder SetData(pb::ByteString value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        result.hasData = true;
        result.data_ = value;
        return this;
      }
      public Builder ClearData() {
        result.hasData = false;
        result.data_ = pb::ByteString.Empty;
        return this;
      }
    }
    static StorageValue() {
      object.ReferenceEquals(global::Sirikata.Persistence.Protocol._PBJ_Internal.Persistence.Descriptor, null);
    }
  }
  
  public sealed partial class StorageElement : pb::GeneratedMessage<StorageElement, StorageElement.Builder> {
    private static readonly StorageElement defaultInstance = new Builder().BuildPartial();
    public static StorageElement DefaultInstance {
      get { return defaultInstance; }
    }
    
    public override StorageElement DefaultInstanceForType {
      get { return defaultInstance; }
    }
    
    protected override StorageElement ThisMessage {
      get { return this; }
    }
    
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.Persistence.internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_StorageElement__Descriptor; }
    }
    
    protected override pb::FieldAccess.FieldAccessorTable<StorageElement, StorageElement.Builder> InternalFieldAccessors {
      get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.Persistence.internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_StorageElement__FieldAccessorTable; }
    }
    
    #region Nested types
    public static class Types {
      public enum ReturnStatus {
        KEY_MISSING = 4,
        INTERNAL_ERROR = 6,
      }
      
    }
    #endregion
    
    public const int ObjectUuidFieldNumber = 9;
    private bool hasObjectUuid;
    private pb::ByteString objectUuid_ = pb::ByteString.Empty;
    public bool HasObjectUuid {
      get { return hasObjectUuid; }
    }
    public pb::ByteString ObjectUuid {
      get { return objectUuid_; }
    }
    
    public const int FieldIdFieldNumber = 10;
    private bool hasFieldId;
    private ulong fieldId_ = 0UL;
    public bool HasFieldId {
      get { return hasFieldId; }
    }
    [global::System.CLSCompliant(false)]
    public ulong FieldId {
      get { return fieldId_; }
    }
    
    public const int FieldNameFieldNumber = 11;
    private bool hasFieldName;
    private string fieldName_ = "";
    public bool HasFieldName {
      get { return hasFieldName; }
    }
    public string FieldName {
      get { return fieldName_; }
    }
    
    public const int DataFieldNumber = 12;
    private bool hasData;
    private pb::ByteString data_ = pb::ByteString.Empty;
    public bool HasData {
      get { return hasData; }
    }
    public pb::ByteString Data {
      get { return data_; }
    }
    
    public const int IndexFieldNumber = 13;
    private bool hasIndex;
    private int index_ = 0;
    public bool HasIndex {
      get { return hasIndex; }
    }
    public int Index {
      get { return index_; }
    }
    
    public const int ReturnStatusFieldNumber = 15;
    private bool hasReturnStatus;
    private global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Types.ReturnStatus returnStatus_ = global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Types.ReturnStatus.KEY_MISSING;
    public bool HasReturnStatus {
      get { return hasReturnStatus; }
    }
    public global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Types.ReturnStatus ReturnStatus {
      get { return returnStatus_; }
    }
    
    public override bool IsInitialized {
      get {
        return true;
      }
    }
    
    public override void WriteTo(pb::CodedOutputStream output) {
      if (HasObjectUuid) {
        output.WriteBytes(9, ObjectUuid);
      }
      if (HasFieldId) {
        output.WriteUInt64(10, FieldId);
      }
      if (HasFieldName) {
        output.WriteString(11, FieldName);
      }
      if (HasData) {
        output.WriteBytes(12, Data);
      }
      if (HasIndex) {
        output.WriteInt32(13, Index);
      }
      if (HasReturnStatus) {
        output.WriteEnum(15, (int) ReturnStatus);
      }
      UnknownFields.WriteTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public override int SerializedSize {
      get {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
        
        size = 0;
        if (HasObjectUuid) {
          size += pb::CodedOutputStream.ComputeBytesSize(9, ObjectUuid);
        }
        if (HasFieldId) {
          size += pb::CodedOutputStream.ComputeUInt64Size(10, FieldId);
        }
        if (HasFieldName) {
          size += pb::CodedOutputStream.ComputeStringSize(11, FieldName);
        }
        if (HasData) {
          size += pb::CodedOutputStream.ComputeBytesSize(12, Data);
        }
        if (HasIndex) {
          size += pb::CodedOutputStream.ComputeInt32Size(13, Index);
        }
        if (HasReturnStatus) {
          size += pb::CodedOutputStream.ComputeEnumSize(15, (int) ReturnStatus);
        }
        size += UnknownFields.SerializedSize;
        memoizedSerializedSize = size;
        return size;
      }
    }
    
    public static StorageElement ParseFrom(pb::ByteString data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static StorageElement ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static StorageElement ParseFrom(byte[] data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static StorageElement ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static StorageElement ParseFrom(global::System.IO.Stream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static StorageElement ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static StorageElement ParseDelimitedFrom(global::System.IO.Stream input) {
      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
    }
    public static StorageElement ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
    }
    public static StorageElement ParseFrom(pb::CodedInputStream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static StorageElement ParseFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static Builder CreateBuilder() { return new Builder(); }
    public override Builder ToBuilder() { return CreateBuilder(this); }
    public override Builder CreateBuilderForType() { return new Builder(); }
    public static Builder CreateBuilder(StorageElement prototype) {
      return (Builder) new Builder().MergeFrom(prototype);
    }
    
    public sealed partial class Builder : pb::GeneratedBuilder<StorageElement, Builder> {
      protected override Builder ThisBuilder {
        get { return this; }
      }
      public Builder() {}
      
      StorageElement result = new StorageElement();
      
      protected override StorageElement MessageBeingBuilt {
        get { return result; }
      }
      
      public override Builder Clear() {
        result = new StorageElement();
        return this;
      }
      
      public override Builder Clone() {
        return new Builder().MergeFrom(result);
      }
      
      public override pbd::MessageDescriptor DescriptorForType {
        get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Descriptor; }
      }
      
      public override StorageElement DefaultInstanceForType {
        get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.DefaultInstance; }
      }
      
      public override StorageElement BuildPartial() {
        if (result == null) {
          throw new global::System.InvalidOperationException("build() has already been called on this Builder");
        }
        StorageElement returnMe = result;
        result = null;
        return returnMe;
      }
      
      public override Builder MergeFrom(pb::IMessage other) {
        if (other is StorageElement) {
          return MergeFrom((StorageElement) other);
        } else {
          base.MergeFrom(other);
          return this;
        }
      }
      
      public override Builder MergeFrom(StorageElement other) {
        if (other == global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.DefaultInstance) return this;
        if (other.HasObjectUuid) {
          ObjectUuid = other.ObjectUuid;
        }
        if (other.HasFieldId) {
          FieldId = other.FieldId;
        }
        if (other.HasFieldName) {
          FieldName = other.FieldName;
        }
        if (other.HasData) {
          Data = other.Data;
        }
        if (other.HasIndex) {
          Index = other.Index;
        }
        if (other.HasReturnStatus) {
          ReturnStatus = other.ReturnStatus;
        }
        this.MergeUnknownFields(other.UnknownFields);
        return this;
      }
      
      public override Builder MergeFrom(pb::CodedInputStream input) {
        return MergeFrom(input, pb::ExtensionRegistry.Empty);
      }
      
      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
        pb::UnknownFieldSet.Builder unknownFields = null;
        while (true) {
          uint tag = input.ReadTag();
          switch (tag) {
            case 0: {
              if (unknownFields != null) {
                this.UnknownFields = unknownFields.Build();
              }
              return this;
            }
            default: {
              if (pb::WireFormat.IsEndGroupTag(tag)) {
                if (unknownFields != null) {
                  this.UnknownFields = unknownFields.Build();
                }
                return this;
              }
              if (unknownFields == null) {
                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
              }
              ParseUnknownField(input, unknownFields, extensionRegistry, tag);
              break;
            }
            case 74: {
              ObjectUuid = input.ReadBytes();
              break;
            }
            case 80: {
              FieldId = input.ReadUInt64();
              break;
            }
            case 90: {
              FieldName = input.ReadString();
              break;
            }
            case 98: {
              Data = input.ReadBytes();
              break;
            }
            case 104: {
              Index = input.ReadInt32();
              break;
            }
            case 120: {
              int rawValue = input.ReadEnum();
              if (!global::System.Enum.IsDefined(typeof(global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Types.ReturnStatus), rawValue)) {
                if (unknownFields == null) {
                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
                }
                unknownFields.MergeVarintField(15, (ulong) rawValue);
              } else {
                ReturnStatus = (global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Types.ReturnStatus) rawValue;
              }
              break;
            }
          }
        }
      }
      
      
      public bool HasObjectUuid {
        get { return result.HasObjectUuid; }
      }
      public pb::ByteString ObjectUuid {
        get { return result.ObjectUuid; }
        set { SetObjectUuid(value); }
      }
      public Builder SetObjectUuid(pb::ByteString value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        result.hasObjectUuid = true;
        result.objectUuid_ = value;
        return this;
      }
      public Builder ClearObjectUuid() {
        result.hasObjectUuid = false;
        result.objectUuid_ = pb::ByteString.Empty;
        return this;
      }
      
      public bool HasFieldId {
        get { return result.HasFieldId; }
      }
      [global::System.CLSCompliant(false)]
      public ulong FieldId {
        get { return result.FieldId; }
        set { SetFieldId(value); }
      }
      [global::System.CLSCompliant(false)]
      public Builder SetFieldId(ulong value) {
        result.hasFieldId = true;
        result.fieldId_ = value;
        return this;
      }
      public Builder ClearFieldId() {
        result.hasFieldId = false;
        result.fieldId_ = 0UL;
        return this;
      }
      
      public bool HasFieldName {
        get { return result.HasFieldName; }
      }
      public string FieldName {
        get { return result.FieldName; }
        set { SetFieldName(value); }
      }
      public Builder SetFieldName(string value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        result.hasFieldName = true;
        result.fieldName_ = value;
        return this;
      }
      public Builder ClearFieldName() {
        result.hasFieldName = false;
        result.fieldName_ = "";
        return this;
      }
      
      public bool HasData {
        get { return result.HasData; }
      }
      public pb::ByteString Data {
        get { return result.Data; }
        set { SetData(value); }
      }
      public Builder SetData(pb::ByteString value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        result.hasData = true;
        result.data_ = value;
        return this;
      }
      public Builder ClearData() {
        result.hasData = false;
        result.data_ = pb::ByteString.Empty;
        return this;
      }
      
      public bool HasIndex {
        get { return result.HasIndex; }
      }
      public int Index {
        get { return result.Index; }
        set { SetIndex(value); }
      }
      public Builder SetIndex(int value) {
        result.hasIndex = true;
        result.index_ = value;
        return this;
      }
      public Builder ClearIndex() {
        result.hasIndex = false;
        result.index_ = 0;
        return this;
      }
      
      public bool HasReturnStatus {
       get { return result.HasReturnStatus; }
      }
      public global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Types.ReturnStatus ReturnStatus {
        get { return result.ReturnStatus; }
        set { SetReturnStatus(value); }
      }
      public Builder SetReturnStatus(global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Types.ReturnStatus value) {
        result.hasReturnStatus = true;
        result.returnStatus_ = value;
        return this;
      }
      public Builder ClearReturnStatus() {
        result.hasReturnStatus = false;
        result.returnStatus_ = global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Types.ReturnStatus.KEY_MISSING;
        return this;
      }
    }
    static StorageElement() {
      object.ReferenceEquals(global::Sirikata.Persistence.Protocol._PBJ_Internal.Persistence.Descriptor, null);
    }
  }
  
  public sealed partial class CompareElement : pb::GeneratedMessage<CompareElement, CompareElement.Builder> {
    private static readonly CompareElement defaultInstance = new Builder().BuildPartial();
    public static CompareElement DefaultInstance {
      get { return defaultInstance; }
    }
    
    public override CompareElement DefaultInstanceForType {
      get { return defaultInstance; }
    }
    
    protected override CompareElement ThisMessage {
      get { return this; }
    }
    
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.Persistence.internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_CompareElement__Descriptor; }
    }
    
    protected override pb::FieldAccess.FieldAccessorTable<CompareElement, CompareElement.Builder> InternalFieldAccessors {
      get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.Persistence.internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_CompareElement__FieldAccessorTable; }
    }
    
    #region Nested types
    public static class Types {
      public enum COMPARATOR {
        EQUAL = 0,
        NEQUAL = 1,
      }
      
    }
    #endregion
    
    public const int ObjectUuidFieldNumber = 9;
    private bool hasObjectUuid;
    private pb::ByteString objectUuid_ = pb::ByteString.Empty;
    public bool HasObjectUuid {
      get { return hasObjectUuid; }
    }
    public pb::ByteString ObjectUuid {
      get { return objectUuid_; }
    }
    
    public const int FieldIdFieldNumber = 10;
    private bool hasFieldId;
    private ulong fieldId_ = 0UL;
    public bool HasFieldId {
      get { return hasFieldId; }
    }
    [global::System.CLSCompliant(false)]
    public ulong FieldId {
      get { return fieldId_; }
    }
    
    public const int FieldNameFieldNumber = 11;
    private bool hasFieldName;
    private string fieldName_ = "";
    public bool HasFieldName {
      get { return hasFieldName; }
    }
    public string FieldName {
      get { return fieldName_; }
    }
    
    public const int DataFieldNumber = 12;
    private bool hasData;
    private pb::ByteString data_ = pb::ByteString.Empty;
    public bool HasData {
      get { return hasData; }
    }
    public pb::ByteString Data {
      get { return data_; }
    }
    
    public const int ComparatorFieldNumber = 14;
    private bool hasComparator;
    private global::Sirikata.Persistence.Protocol._PBJ_Internal.CompareElement.Types.COMPARATOR comparator_ = global::Sirikata.Persistence.Protocol._PBJ_Internal.CompareElement.Types.COMPARATOR.EQUAL;
    public bool HasComparator {
      get { return hasComparator; }
    }
    public global::Sirikata.Persistence.Protocol._PBJ_Internal.CompareElement.Types.COMPARATOR Comparator {
      get { return comparator_; }
    }
    
    public override bool IsInitialized {
      get {
        return true;
      }
    }
    
    public override void WriteTo(pb::CodedOutputStream output) {
      if (HasObjectUuid) {
        output.WriteBytes(9, ObjectUuid);
      }
      if (HasFieldId) {
        output.WriteUInt64(10, FieldId);
      }
      if (HasFieldName) {
        output.WriteString(11, FieldName);
      }
      if (HasData) {
        output.WriteBytes(12, Data);
      }
      if (HasComparator) {
        output.WriteEnum(14, (int) Comparator);
      }
      UnknownFields.WriteTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public override int SerializedSize {
      get {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
        
        size = 0;
        if (HasObjectUuid) {
          size += pb::CodedOutputStream.ComputeBytesSize(9, ObjectUuid);
        }
        if (HasFieldId) {
          size += pb::CodedOutputStream.ComputeUInt64Size(10, FieldId);
        }
        if (HasFieldName) {
          size += pb::CodedOutputStream.ComputeStringSize(11, FieldName);
        }
        if (HasData) {
          size += pb::CodedOutputStream.ComputeBytesSize(12, Data);
        }
        if (HasComparator) {
          size += pb::CodedOutputStream.ComputeEnumSize(14, (int) Comparator);
        }
        size += UnknownFields.SerializedSize;
        memoizedSerializedSize = size;
        return size;
      }
    }
    
    public static CompareElement ParseFrom(pb::ByteString data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static CompareElement ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static CompareElement ParseFrom(byte[] data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static CompareElement ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static CompareElement ParseFrom(global::System.IO.Stream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static CompareElement ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static CompareElement ParseDelimitedFrom(global::System.IO.Stream input) {
      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
    }
    public static CompareElement ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
    }
    public static CompareElement ParseFrom(pb::CodedInputStream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static CompareElement ParseFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static Builder CreateBuilder() { return new Builder(); }
    public override Builder ToBuilder() { return CreateBuilder(this); }
    public override Builder CreateBuilderForType() { return new Builder(); }
    public static Builder CreateBuilder(CompareElement prototype) {
      return (Builder) new Builder().MergeFrom(prototype);
    }
    
    public sealed partial class Builder : pb::GeneratedBuilder<CompareElement, Builder> {
      protected override Builder ThisBuilder {
        get { return this; }
      }
      public Builder() {}
      
      CompareElement result = new CompareElement();
      
      protected override CompareElement MessageBeingBuilt {
        get { return result; }
      }
      
      public override Builder Clear() {
        result = new CompareElement();
        return this;
      }
      
      public override Builder Clone() {
        return new Builder().MergeFrom(result);
      }
      
      public override pbd::MessageDescriptor DescriptorForType {
        get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.CompareElement.Descriptor; }
      }
      
      public override CompareElement DefaultInstanceForType {
        get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.CompareElement.DefaultInstance; }
      }
      
      public override CompareElement BuildPartial() {
        if (result == null) {
          throw new global::System.InvalidOperationException("build() has already been called on this Builder");
        }
        CompareElement returnMe = result;
        result = null;
        return returnMe;
      }
      
      public override Builder MergeFrom(pb::IMessage other) {
        if (other is CompareElement) {
          return MergeFrom((CompareElement) other);
        } else {
          base.MergeFrom(other);
          return this;
        }
      }
      
      public override Builder MergeFrom(CompareElement other) {
        if (other == global::Sirikata.Persistence.Protocol._PBJ_Internal.CompareElement.DefaultInstance) return this;
        if (other.HasObjectUuid) {
          ObjectUuid = other.ObjectUuid;
        }
        if (other.HasFieldId) {
          FieldId = other.FieldId;
        }
        if (other.HasFieldName) {
          FieldName = other.FieldName;
        }
        if (other.HasData) {
          Data = other.Data;
        }
        if (other.HasComparator) {
          Comparator = other.Comparator;
        }
        this.MergeUnknownFields(other.UnknownFields);
        return this;
      }
      
      public override Builder MergeFrom(pb::CodedInputStream input) {
        return MergeFrom(input, pb::ExtensionRegistry.Empty);
      }
      
      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
        pb::UnknownFieldSet.Builder unknownFields = null;
        while (true) {
          uint tag = input.ReadTag();
          switch (tag) {
            case 0: {
              if (unknownFields != null) {
                this.UnknownFields = unknownFields.Build();
              }
              return this;
            }
            default: {
              if (pb::WireFormat.IsEndGroupTag(tag)) {
                if (unknownFields != null) {
                  this.UnknownFields = unknownFields.Build();
                }
                return this;
              }
              if (unknownFields == null) {
                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
              }
              ParseUnknownField(input, unknownFields, extensionRegistry, tag);
              break;
            }
            case 74: {
              ObjectUuid = input.ReadBytes();
              break;
            }
            case 80: {
              FieldId = input.ReadUInt64();
              break;
            }
            case 90: {
              FieldName = input.ReadString();
              break;
            }
            case 98: {
              Data = input.ReadBytes();
              break;
            }
            case 112: {
              int rawValue = input.ReadEnum();
              if (!global::System.Enum.IsDefined(typeof(global::Sirikata.Persistence.Protocol._PBJ_Internal.CompareElement.Types.COMPARATOR), rawValue)) {
                if (unknownFields == null) {
                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
                }
                unknownFields.MergeVarintField(14, (ulong) rawValue);
              } else {
                Comparator = (global::Sirikata.Persistence.Protocol._PBJ_Internal.CompareElement.Types.COMPARATOR) rawValue;
              }
              break;
            }
          }
        }
      }
      
      
      public bool HasObjectUuid {
        get { return result.HasObjectUuid; }
      }
      public pb::ByteString ObjectUuid {
        get { return result.ObjectUuid; }
        set { SetObjectUuid(value); }
      }
      public Builder SetObjectUuid(pb::ByteString value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        result.hasObjectUuid = true;
        result.objectUuid_ = value;
        return this;
      }
      public Builder ClearObjectUuid() {
        result.hasObjectUuid = false;
        result.objectUuid_ = pb::ByteString.Empty;
        return this;
      }
      
      public bool HasFieldId {
        get { return result.HasFieldId; }
      }
      [global::System.CLSCompliant(false)]
      public ulong FieldId {
        get { return result.FieldId; }
        set { SetFieldId(value); }
      }
      [global::System.CLSCompliant(false)]
      public Builder SetFieldId(ulong value) {
        result.hasFieldId = true;
        result.fieldId_ = value;
        return this;
      }
      public Builder ClearFieldId() {
        result.hasFieldId = false;
        result.fieldId_ = 0UL;
        return this;
      }
      
      public bool HasFieldName {
        get { return result.HasFieldName; }
      }
      public string FieldName {
        get { return result.FieldName; }
        set { SetFieldName(value); }
      }
      public Builder SetFieldName(string value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        result.hasFieldName = true;
        result.fieldName_ = value;
        return this;
      }
      public Builder ClearFieldName() {
        result.hasFieldName = false;
        result.fieldName_ = "";
        return this;
      }
      
      public bool HasData {
        get { return result.HasData; }
      }
      public pb::ByteString Data {
        get { return result.Data; }
        set { SetData(value); }
      }
      public Builder SetData(pb::ByteString value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        result.hasData = true;
        result.data_ = value;
        return this;
      }
      public Builder ClearData() {
        result.hasData = false;
        result.data_ = pb::ByteString.Empty;
        return this;
      }
      
      public bool HasComparator {
       get { return result.HasComparator; }
      }
      public global::Sirikata.Persistence.Protocol._PBJ_Internal.CompareElement.Types.COMPARATOR Comparator {
        get { return result.Comparator; }
        set { SetComparator(value); }
      }
      public Builder SetComparator(global::Sirikata.Persistence.Protocol._PBJ_Internal.CompareElement.Types.COMPARATOR value) {
        result.hasComparator = true;
        result.comparator_ = value;
        return this;
      }
      public Builder ClearComparator() {
        result.hasComparator = false;
        result.comparator_ = global::Sirikata.Persistence.Protocol._PBJ_Internal.CompareElement.Types.COMPARATOR.EQUAL;
        return this;
      }
    }
    static CompareElement() {
      object.ReferenceEquals(global::Sirikata.Persistence.Protocol._PBJ_Internal.Persistence.Descriptor, null);
    }
  }
  
  public sealed partial class StorageSet : pb::GeneratedMessage<StorageSet, StorageSet.Builder> {
    private static readonly StorageSet defaultInstance = new Builder().BuildPartial();
    public static StorageSet DefaultInstance {
      get { return defaultInstance; }
    }
    
    public override StorageSet DefaultInstanceForType {
      get { return defaultInstance; }
    }
    
    protected override StorageSet ThisMessage {
      get { return this; }
    }
    
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.Persistence.internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_StorageSet__Descriptor; }
    }
    
    protected override pb::FieldAccess.FieldAccessorTable<StorageSet, StorageSet.Builder> InternalFieldAccessors {
      get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.Persistence.internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_StorageSet__FieldAccessorTable; }
    }
    
    public const int ReadsFieldNumber = 9;
    private pbc::PopsicleList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> reads_ = new pbc::PopsicleList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement>();
    public scg::IList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> ReadsList {
      get { return reads_; }
    }
    public int ReadsCount {
      get { return reads_.Count; }
    }
    public global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement GetReads(int index) {
      return reads_[index];
    }
    
    public override bool IsInitialized {
      get {
        return true;
      }
    }
    
    public override void WriteTo(pb::CodedOutputStream output) {
      foreach (global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement element in ReadsList) {
        output.WriteMessage(9, element);
      }
      UnknownFields.WriteTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public override int SerializedSize {
      get {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
        
        size = 0;
        foreach (global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement element in ReadsList) {
          size += pb::CodedOutputStream.ComputeMessageSize(9, element);
        }
        size += UnknownFields.SerializedSize;
        memoizedSerializedSize = size;
        return size;
      }
    }
    
    public static StorageSet ParseFrom(pb::ByteString data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static StorageSet ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static StorageSet ParseFrom(byte[] data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static StorageSet ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static StorageSet ParseFrom(global::System.IO.Stream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static StorageSet ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static StorageSet ParseDelimitedFrom(global::System.IO.Stream input) {
      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
    }
    public static StorageSet ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
    }
    public static StorageSet ParseFrom(pb::CodedInputStream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static StorageSet ParseFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static Builder CreateBuilder() { return new Builder(); }
    public override Builder ToBuilder() { return CreateBuilder(this); }
    public override Builder CreateBuilderForType() { return new Builder(); }
    public static Builder CreateBuilder(StorageSet prototype) {
      return (Builder) new Builder().MergeFrom(prototype);
    }
    
    public sealed partial class Builder : pb::GeneratedBuilder<StorageSet, Builder> {
      protected override Builder ThisBuilder {
        get { return this; }
      }
      public Builder() {}
      
      StorageSet result = new StorageSet();
      
      protected override StorageSet MessageBeingBuilt {
        get { return result; }
      }
      
      public override Builder Clear() {
        result = new StorageSet();
        return this;
      }
      
      public override Builder Clone() {
        return new Builder().MergeFrom(result);
      }
      
      public override pbd::MessageDescriptor DescriptorForType {
        get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageSet.Descriptor; }
      }
      
      public override StorageSet DefaultInstanceForType {
        get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageSet.DefaultInstance; }
      }
      
      public override StorageSet BuildPartial() {
        if (result == null) {
          throw new global::System.InvalidOperationException("build() has already been called on this Builder");
        }
        result.reads_.MakeReadOnly();
        StorageSet returnMe = result;
        result = null;
        return returnMe;
      }
      
      public override Builder MergeFrom(pb::IMessage other) {
        if (other is StorageSet) {
          return MergeFrom((StorageSet) other);
        } else {
          base.MergeFrom(other);
          return this;
        }
      }
      
      public override Builder MergeFrom(StorageSet other) {
        if (other == global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageSet.DefaultInstance) return this;
        if (other.reads_.Count != 0) {
          base.AddRange(other.reads_, result.reads_);
        }
        this.MergeUnknownFields(other.UnknownFields);
        return this;
      }
      
      public override Builder MergeFrom(pb::CodedInputStream input) {
        return MergeFrom(input, pb::ExtensionRegistry.Empty);
      }
      
      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
        pb::UnknownFieldSet.Builder unknownFields = null;
        while (true) {
          uint tag = input.ReadTag();
          switch (tag) {
            case 0: {
              if (unknownFields != null) {
                this.UnknownFields = unknownFields.Build();
              }
              return this;
            }
            default: {
              if (pb::WireFormat.IsEndGroupTag(tag)) {
                if (unknownFields != null) {
                  this.UnknownFields = unknownFields.Build();
                }
                return this;
              }
              if (unknownFields == null) {
                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
              }
              ParseUnknownField(input, unknownFields, extensionRegistry, tag);
              break;
            }
            case 74: {
              global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Builder subBuilder = global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.CreateBuilder();
              input.ReadMessage(subBuilder, extensionRegistry);
              AddReads(subBuilder.BuildPartial());
              break;
            }
          }
        }
      }
      
      
      public pbc::IPopsicleList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> ReadsList {
        get { return result.reads_; }
      }
      public int ReadsCount {
        get { return result.ReadsCount; }
      }
      public global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement GetReads(int index) {
        return result.GetReads(index);
      }
      public Builder SetReads(int index, global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        result.reads_[index] = value;
        return this;
      }
      public Builder SetReads(int index, global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        result.reads_[index] = builderForValue.Build();
        return this;
      }
      public Builder AddReads(global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        result.reads_.Add(value);
        return this;
      }
      public Builder AddReads(global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        result.reads_.Add(builderForValue.Build());
        return this;
      }
      public Builder AddRangeReads(scg::IEnumerable<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> values) {
        base.AddRange(values, result.reads_);
        return this;
      }
      public Builder ClearReads() {
        result.reads_.Clear();
        return this;
      }
    }
    static StorageSet() {
      object.ReferenceEquals(global::Sirikata.Persistence.Protocol._PBJ_Internal.Persistence.Descriptor, null);
    }
  }
  
  public sealed partial class ReadSet : pb::GeneratedMessage<ReadSet, ReadSet.Builder> {
    private static readonly ReadSet defaultInstance = new Builder().BuildPartial();
    public static ReadSet DefaultInstance {
      get { return defaultInstance; }
    }
    
    public override ReadSet DefaultInstanceForType {
      get { return defaultInstance; }
    }
    
    protected override ReadSet ThisMessage {
      get { return this; }
    }
    
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.Persistence.internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_ReadSet__Descriptor; }
    }
    
    protected override pb::FieldAccess.FieldAccessorTable<ReadSet, ReadSet.Builder> InternalFieldAccessors {
      get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.Persistence.internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_ReadSet__FieldAccessorTable; }
    }
    
    public const int ReadsFieldNumber = 9;
    private pbc::PopsicleList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> reads_ = new pbc::PopsicleList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement>();
    public scg::IList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> ReadsList {
      get { return reads_; }
    }
    public int ReadsCount {
      get { return reads_.Count; }
    }
    public global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement GetReads(int index) {
      return reads_[index];
    }
    
    public override bool IsInitialized {
      get {
        return true;
      }
    }
    
    public override void WriteTo(pb::CodedOutputStream output) {
      foreach (global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement element in ReadsList) {
        output.WriteMessage(9, element);
      }
      UnknownFields.WriteTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public override int SerializedSize {
      get {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
        
        size = 0;
        foreach (global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement element in ReadsList) {
          size += pb::CodedOutputStream.ComputeMessageSize(9, element);
        }
        size += UnknownFields.SerializedSize;
        memoizedSerializedSize = size;
        return size;
      }
    }
    
    public static ReadSet ParseFrom(pb::ByteString data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static ReadSet ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static ReadSet ParseFrom(byte[] data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static ReadSet ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static ReadSet ParseFrom(global::System.IO.Stream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static ReadSet ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static ReadSet ParseDelimitedFrom(global::System.IO.Stream input) {
      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
    }
    public static ReadSet ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
    }
    public static ReadSet ParseFrom(pb::CodedInputStream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static ReadSet ParseFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static Builder CreateBuilder() { return new Builder(); }
    public override Builder ToBuilder() { return CreateBuilder(this); }
    public override Builder CreateBuilderForType() { return new Builder(); }
    public static Builder CreateBuilder(ReadSet prototype) {
      return (Builder) new Builder().MergeFrom(prototype);
    }
    
    public sealed partial class Builder : pb::GeneratedBuilder<ReadSet, Builder> {
      protected override Builder ThisBuilder {
        get { return this; }
      }
      public Builder() {}
      
      ReadSet result = new ReadSet();
      
      protected override ReadSet MessageBeingBuilt {
        get { return result; }
      }
      
      public override Builder Clear() {
        result = new ReadSet();
        return this;
      }
      
      public override Builder Clone() {
        return new Builder().MergeFrom(result);
      }
      
      public override pbd::MessageDescriptor DescriptorForType {
        get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.ReadSet.Descriptor; }
      }
      
      public override ReadSet DefaultInstanceForType {
        get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.ReadSet.DefaultInstance; }
      }
      
      public override ReadSet BuildPartial() {
        if (result == null) {
          throw new global::System.InvalidOperationException("build() has already been called on this Builder");
        }
        result.reads_.MakeReadOnly();
        ReadSet returnMe = result;
        result = null;
        return returnMe;
      }
      
      public override Builder MergeFrom(pb::IMessage other) {
        if (other is ReadSet) {
          return MergeFrom((ReadSet) other);
        } else {
          base.MergeFrom(other);
          return this;
        }
      }
      
      public override Builder MergeFrom(ReadSet other) {
        if (other == global::Sirikata.Persistence.Protocol._PBJ_Internal.ReadSet.DefaultInstance) return this;
        if (other.reads_.Count != 0) {
          base.AddRange(other.reads_, result.reads_);
        }
        this.MergeUnknownFields(other.UnknownFields);
        return this;
      }
      
      public override Builder MergeFrom(pb::CodedInputStream input) {
        return MergeFrom(input, pb::ExtensionRegistry.Empty);
      }
      
      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
        pb::UnknownFieldSet.Builder unknownFields = null;
        while (true) {
          uint tag = input.ReadTag();
          switch (tag) {
            case 0: {
              if (unknownFields != null) {
                this.UnknownFields = unknownFields.Build();
              }
              return this;
            }
            default: {
              if (pb::WireFormat.IsEndGroupTag(tag)) {
                if (unknownFields != null) {
                  this.UnknownFields = unknownFields.Build();
                }
                return this;
              }
              if (unknownFields == null) {
                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
              }
              ParseUnknownField(input, unknownFields, extensionRegistry, tag);
              break;
            }
            case 74: {
              global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Builder subBuilder = global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.CreateBuilder();
              input.ReadMessage(subBuilder, extensionRegistry);
              AddReads(subBuilder.BuildPartial());
              break;
            }
          }
        }
      }
      
      
      public pbc::IPopsicleList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> ReadsList {
        get { return result.reads_; }
      }
      public int ReadsCount {
        get { return result.ReadsCount; }
      }
      public global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement GetReads(int index) {
        return result.GetReads(index);
      }
      public Builder SetReads(int index, global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        result.reads_[index] = value;
        return this;
      }
      public Builder SetReads(int index, global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        result.reads_[index] = builderForValue.Build();
        return this;
      }
      public Builder AddReads(global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        result.reads_.Add(value);
        return this;
      }
      public Builder AddReads(global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        result.reads_.Add(builderForValue.Build());
        return this;
      }
      public Builder AddRangeReads(scg::IEnumerable<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> values) {
        base.AddRange(values, result.reads_);
        return this;
      }
      public Builder ClearReads() {
        result.reads_.Clear();
        return this;
      }
    }
    static ReadSet() {
      object.ReferenceEquals(global::Sirikata.Persistence.Protocol._PBJ_Internal.Persistence.Descriptor, null);
    }
  }
  
  public sealed partial class WriteSet : pb::GeneratedMessage<WriteSet, WriteSet.Builder> {
    private static readonly WriteSet defaultInstance = new Builder().BuildPartial();
    public static WriteSet DefaultInstance {
      get { return defaultInstance; }
    }
    
    public override WriteSet DefaultInstanceForType {
      get { return defaultInstance; }
    }
    
    protected override WriteSet ThisMessage {
      get { return this; }
    }
    
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.Persistence.internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_WriteSet__Descriptor; }
    }
    
    protected override pb::FieldAccess.FieldAccessorTable<WriteSet, WriteSet.Builder> InternalFieldAccessors {
      get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.Persistence.internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_WriteSet__FieldAccessorTable; }
    }
    
    public const int WritesFieldNumber = 10;
    private pbc::PopsicleList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> writes_ = new pbc::PopsicleList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement>();
    public scg::IList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> WritesList {
      get { return writes_; }
    }
    public int WritesCount {
      get { return writes_.Count; }
    }
    public global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement GetWrites(int index) {
      return writes_[index];
    }
    
    public override bool IsInitialized {
      get {
        return true;
      }
    }
    
    public override void WriteTo(pb::CodedOutputStream output) {
      foreach (global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement element in WritesList) {
        output.WriteMessage(10, element);
      }
      UnknownFields.WriteTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public override int SerializedSize {
      get {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
        
        size = 0;
        foreach (global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement element in WritesList) {
          size += pb::CodedOutputStream.ComputeMessageSize(10, element);
        }
        size += UnknownFields.SerializedSize;
        memoizedSerializedSize = size;
        return size;
      }
    }
    
    public static WriteSet ParseFrom(pb::ByteString data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static WriteSet ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static WriteSet ParseFrom(byte[] data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static WriteSet ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static WriteSet ParseFrom(global::System.IO.Stream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static WriteSet ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static WriteSet ParseDelimitedFrom(global::System.IO.Stream input) {
      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
    }
    public static WriteSet ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
    }
    public static WriteSet ParseFrom(pb::CodedInputStream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static WriteSet ParseFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static Builder CreateBuilder() { return new Builder(); }
    public override Builder ToBuilder() { return CreateBuilder(this); }
    public override Builder CreateBuilderForType() { return new Builder(); }
    public static Builder CreateBuilder(WriteSet prototype) {
      return (Builder) new Builder().MergeFrom(prototype);
    }
    
    public sealed partial class Builder : pb::GeneratedBuilder<WriteSet, Builder> {
      protected override Builder ThisBuilder {
        get { return this; }
      }
      public Builder() {}
      
      WriteSet result = new WriteSet();
      
      protected override WriteSet MessageBeingBuilt {
        get { return result; }
      }
      
      public override Builder Clear() {
        result = new WriteSet();
        return this;
      }
      
      public override Builder Clone() {
        return new Builder().MergeFrom(result);
      }
      
      public override pbd::MessageDescriptor DescriptorForType {
        get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.WriteSet.Descriptor; }
      }
      
      public override WriteSet DefaultInstanceForType {
        get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.WriteSet.DefaultInstance; }
      }
      
      public override WriteSet BuildPartial() {
        if (result == null) {
          throw new global::System.InvalidOperationException("build() has already been called on this Builder");
        }
        result.writes_.MakeReadOnly();
        WriteSet returnMe = result;
        result = null;
        return returnMe;
      }
      
      public override Builder MergeFrom(pb::IMessage other) {
        if (other is WriteSet) {
          return MergeFrom((WriteSet) other);
        } else {
          base.MergeFrom(other);
          return this;
        }
      }
      
      public override Builder MergeFrom(WriteSet other) {
        if (other == global::Sirikata.Persistence.Protocol._PBJ_Internal.WriteSet.DefaultInstance) return this;
        if (other.writes_.Count != 0) {
          base.AddRange(other.writes_, result.writes_);
        }
        this.MergeUnknownFields(other.UnknownFields);
        return this;
      }
      
      public override Builder MergeFrom(pb::CodedInputStream input) {
        return MergeFrom(input, pb::ExtensionRegistry.Empty);
      }
      
      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
        pb::UnknownFieldSet.Builder unknownFields = null;
        while (true) {
          uint tag = input.ReadTag();
          switch (tag) {
            case 0: {
              if (unknownFields != null) {
                this.UnknownFields = unknownFields.Build();
              }
              return this;
            }
            default: {
              if (pb::WireFormat.IsEndGroupTag(tag)) {
                if (unknownFields != null) {
                  this.UnknownFields = unknownFields.Build();
                }
                return this;
              }
              if (unknownFields == null) {
                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
              }
              ParseUnknownField(input, unknownFields, extensionRegistry, tag);
              break;
            }
            case 82: {
              global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Builder subBuilder = global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.CreateBuilder();
              input.ReadMessage(subBuilder, extensionRegistry);
              AddWrites(subBuilder.BuildPartial());
              break;
            }
          }
        }
      }
      
      
      public pbc::IPopsicleList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> WritesList {
        get { return result.writes_; }
      }
      public int WritesCount {
        get { return result.WritesCount; }
      }
      public global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement GetWrites(int index) {
        return result.GetWrites(index);
      }
      public Builder SetWrites(int index, global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        result.writes_[index] = value;
        return this;
      }
      public Builder SetWrites(int index, global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        result.writes_[index] = builderForValue.Build();
        return this;
      }
      public Builder AddWrites(global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        result.writes_.Add(value);
        return this;
      }
      public Builder AddWrites(global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        result.writes_.Add(builderForValue.Build());
        return this;
      }
      public Builder AddRangeWrites(scg::IEnumerable<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> values) {
        base.AddRange(values, result.writes_);
        return this;
      }
      public Builder ClearWrites() {
        result.writes_.Clear();
        return this;
      }
    }
    static WriteSet() {
      object.ReferenceEquals(global::Sirikata.Persistence.Protocol._PBJ_Internal.Persistence.Descriptor, null);
    }
  }
  
  public sealed partial class ReadWriteSet : pb::GeneratedMessage<ReadWriteSet, ReadWriteSet.Builder> {
    private static readonly ReadWriteSet defaultInstance = new Builder().BuildPartial();
    public static ReadWriteSet DefaultInstance {
      get { return defaultInstance; }
    }
    
    public override ReadWriteSet DefaultInstanceForType {
      get { return defaultInstance; }
    }
    
    protected override ReadWriteSet ThisMessage {
      get { return this; }
    }
    
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.Persistence.internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_ReadWriteSet__Descriptor; }
    }
    
    protected override pb::FieldAccess.FieldAccessorTable<ReadWriteSet, ReadWriteSet.Builder> InternalFieldAccessors {
      get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.Persistence.internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_ReadWriteSet__FieldAccessorTable; }
    }
    
    #region Nested types
    public static class Types {
      public enum ReadWriteSetOptions {
        RETURN_READ_NAMES = 1,
      }
      
    }
    #endregion
    
    public const int ReadsFieldNumber = 9;
    private pbc::PopsicleList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> reads_ = new pbc::PopsicleList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement>();
    public scg::IList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> ReadsList {
      get { return reads_; }
    }
    public int ReadsCount {
      get { return reads_.Count; }
    }
    public global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement GetReads(int index) {
      return reads_[index];
    }
    
    public const int WritesFieldNumber = 10;
    private pbc::PopsicleList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> writes_ = new pbc::PopsicleList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement>();
    public scg::IList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> WritesList {
      get { return writes_; }
    }
    public int WritesCount {
      get { return writes_.Count; }
    }
    public global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement GetWrites(int index) {
      return writes_[index];
    }
    
    public const int OptionsFieldNumber = 14;
    private bool hasOptions;
    private ulong options_ = 0UL;
    public bool HasOptions {
      get { return hasOptions; }
    }
    [global::System.CLSCompliant(false)]
    public ulong Options {
      get { return options_; }
    }
    
    public override bool IsInitialized {
      get {
        return true;
      }
    }
    
    public override void WriteTo(pb::CodedOutputStream output) {
      foreach (global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement element in ReadsList) {
        output.WriteMessage(9, element);
      }
      foreach (global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement element in WritesList) {
        output.WriteMessage(10, element);
      }
      if (HasOptions) {
        output.WriteUInt64(14, Options);
      }
      UnknownFields.WriteTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public override int SerializedSize {
      get {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
        
        size = 0;
        foreach (global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement element in ReadsList) {
          size += pb::CodedOutputStream.ComputeMessageSize(9, element);
        }
        foreach (global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement element in WritesList) {
          size += pb::CodedOutputStream.ComputeMessageSize(10, element);
        }
        if (HasOptions) {
          size += pb::CodedOutputStream.ComputeUInt64Size(14, Options);
        }
        size += UnknownFields.SerializedSize;
        memoizedSerializedSize = size;
        return size;
      }
    }
    
    public static ReadWriteSet ParseFrom(pb::ByteString data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static ReadWriteSet ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static ReadWriteSet ParseFrom(byte[] data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static ReadWriteSet ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static ReadWriteSet ParseFrom(global::System.IO.Stream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static ReadWriteSet ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static ReadWriteSet ParseDelimitedFrom(global::System.IO.Stream input) {
      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
    }
    public static ReadWriteSet ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
    }
    public static ReadWriteSet ParseFrom(pb::CodedInputStream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static ReadWriteSet ParseFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static Builder CreateBuilder() { return new Builder(); }
    public override Builder ToBuilder() { return CreateBuilder(this); }
    public override Builder CreateBuilderForType() { return new Builder(); }
    public static Builder CreateBuilder(ReadWriteSet prototype) {
      return (Builder) new Builder().MergeFrom(prototype);
    }
    
    public sealed partial class Builder : pb::GeneratedBuilder<ReadWriteSet, Builder> {
      protected override Builder ThisBuilder {
        get { return this; }
      }
      public Builder() {}
      
      ReadWriteSet result = new ReadWriteSet();
      
      protected override ReadWriteSet MessageBeingBuilt {
        get { return result; }
      }
      
      public override Builder Clear() {
        result = new ReadWriteSet();
        return this;
      }
      
      public override Builder Clone() {
        return new Builder().MergeFrom(result);
      }
      
      public override pbd::MessageDescriptor DescriptorForType {
        get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.ReadWriteSet.Descriptor; }
      }
      
      public override ReadWriteSet DefaultInstanceForType {
        get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.ReadWriteSet.DefaultInstance; }
      }
      
      public override ReadWriteSet BuildPartial() {
        if (result == null) {
          throw new global::System.InvalidOperationException("build() has already been called on this Builder");
        }
        result.reads_.MakeReadOnly();
        result.writes_.MakeReadOnly();
        ReadWriteSet returnMe = result;
        result = null;
        return returnMe;
      }
      
      public override Builder MergeFrom(pb::IMessage other) {
        if (other is ReadWriteSet) {
          return MergeFrom((ReadWriteSet) other);
        } else {
          base.MergeFrom(other);
          return this;
        }
      }
      
      public override Builder MergeFrom(ReadWriteSet other) {
        if (other == global::Sirikata.Persistence.Protocol._PBJ_Internal.ReadWriteSet.DefaultInstance) return this;
        if (other.reads_.Count != 0) {
          base.AddRange(other.reads_, result.reads_);
        }
        if (other.writes_.Count != 0) {
          base.AddRange(other.writes_, result.writes_);
        }
        if (other.HasOptions) {
          Options = other.Options;
        }
        this.MergeUnknownFields(other.UnknownFields);
        return this;
      }
      
      public override Builder MergeFrom(pb::CodedInputStream input) {
        return MergeFrom(input, pb::ExtensionRegistry.Empty);
      }
      
      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
        pb::UnknownFieldSet.Builder unknownFields = null;
        while (true) {
          uint tag = input.ReadTag();
          switch (tag) {
            case 0: {
              if (unknownFields != null) {
                this.UnknownFields = unknownFields.Build();
              }
              return this;
            }
            default: {
              if (pb::WireFormat.IsEndGroupTag(tag)) {
                if (unknownFields != null) {
                  this.UnknownFields = unknownFields.Build();
                }
                return this;
              }
              if (unknownFields == null) {
                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
              }
              ParseUnknownField(input, unknownFields, extensionRegistry, tag);
              break;
            }
            case 74: {
              global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Builder subBuilder = global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.CreateBuilder();
              input.ReadMessage(subBuilder, extensionRegistry);
              AddReads(subBuilder.BuildPartial());
              break;
            }
            case 82: {
              global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Builder subBuilder = global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.CreateBuilder();
              input.ReadMessage(subBuilder, extensionRegistry);
              AddWrites(subBuilder.BuildPartial());
              break;
            }
            case 112: {
              Options = input.ReadUInt64();
              break;
            }
          }
        }
      }
      
      
      public pbc::IPopsicleList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> ReadsList {
        get { return result.reads_; }
      }
      public int ReadsCount {
        get { return result.ReadsCount; }
      }
      public global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement GetReads(int index) {
        return result.GetReads(index);
      }
      public Builder SetReads(int index, global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        result.reads_[index] = value;
        return this;
      }
      public Builder SetReads(int index, global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        result.reads_[index] = builderForValue.Build();
        return this;
      }
      public Builder AddReads(global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        result.reads_.Add(value);
        return this;
      }
      public Builder AddReads(global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        result.reads_.Add(builderForValue.Build());
        return this;
      }
      public Builder AddRangeReads(scg::IEnumerable<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> values) {
        base.AddRange(values, result.reads_);
        return this;
      }
      public Builder ClearReads() {
        result.reads_.Clear();
        return this;
      }
      
      public pbc::IPopsicleList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> WritesList {
        get { return result.writes_; }
      }
      public int WritesCount {
        get { return result.WritesCount; }
      }
      public global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement GetWrites(int index) {
        return result.GetWrites(index);
      }
      public Builder SetWrites(int index, global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        result.writes_[index] = value;
        return this;
      }
      public Builder SetWrites(int index, global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        result.writes_[index] = builderForValue.Build();
        return this;
      }
      public Builder AddWrites(global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        result.writes_.Add(value);
        return this;
      }
      public Builder AddWrites(global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        result.writes_.Add(builderForValue.Build());
        return this;
      }
      public Builder AddRangeWrites(scg::IEnumerable<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> values) {
        base.AddRange(values, result.writes_);
        return this;
      }
      public Builder ClearWrites() {
        result.writes_.Clear();
        return this;
      }
      
      public bool HasOptions {
        get { return result.HasOptions; }
      }
      [global::System.CLSCompliant(false)]
      public ulong Options {
        get { return result.Options; }
        set { SetOptions(value); }
      }
      [global::System.CLSCompliant(false)]
      public Builder SetOptions(ulong value) {
        result.hasOptions = true;
        result.options_ = value;
        return this;
      }
      public Builder ClearOptions() {
        result.hasOptions = false;
        result.options_ = 0UL;
        return this;
      }
    }
    static ReadWriteSet() {
      object.ReferenceEquals(global::Sirikata.Persistence.Protocol._PBJ_Internal.Persistence.Descriptor, null);
    }
  }
  
  public sealed partial class Minitransaction : pb::GeneratedMessage<Minitransaction, Minitransaction.Builder> {
    private static readonly Minitransaction defaultInstance = new Builder().BuildPartial();
    public static Minitransaction DefaultInstance {
      get { return defaultInstance; }
    }
    
    public override Minitransaction DefaultInstanceForType {
      get { return defaultInstance; }
    }
    
    protected override Minitransaction ThisMessage {
      get { return this; }
    }
    
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.Persistence.internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_Minitransaction__Descriptor; }
    }
    
    protected override pb::FieldAccess.FieldAccessorTable<Minitransaction, Minitransaction.Builder> InternalFieldAccessors {
      get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.Persistence.internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_Minitransaction__FieldAccessorTable; }
    }
    
    #region Nested types
    public static class Types {
      public enum TransactionOptions {
        RETURN_READ_NAMES = 1,
      }
      
    }
    #endregion
    
    public const int ReadsFieldNumber = 9;
    private pbc::PopsicleList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> reads_ = new pbc::PopsicleList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement>();
    public scg::IList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> ReadsList {
      get { return reads_; }
    }
    public int ReadsCount {
      get { return reads_.Count; }
    }
    public global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement GetReads(int index) {
      return reads_[index];
    }
    
    public const int WritesFieldNumber = 10;
    private pbc::PopsicleList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> writes_ = new pbc::PopsicleList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement>();
    public scg::IList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> WritesList {
      get { return writes_; }
    }
    public int WritesCount {
      get { return writes_.Count; }
    }
    public global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement GetWrites(int index) {
      return writes_[index];
    }
    
    public const int ComparesFieldNumber = 11;
    private pbc::PopsicleList<global::Sirikata.Persistence.Protocol._PBJ_Internal.CompareElement> compares_ = new pbc::PopsicleList<global::Sirikata.Persistence.Protocol._PBJ_Internal.CompareElement>();
    public scg::IList<global::Sirikata.Persistence.Protocol._PBJ_Internal.CompareElement> ComparesList {
      get { return compares_; }
    }
    public int ComparesCount {
      get { return compares_.Count; }
    }
    public global::Sirikata.Persistence.Protocol._PBJ_Internal.CompareElement GetCompares(int index) {
      return compares_[index];
    }
    
    public const int OptionsFieldNumber = 14;
    private bool hasOptions;
    private ulong options_ = 0UL;
    public bool HasOptions {
      get { return hasOptions; }
    }
    [global::System.CLSCompliant(false)]
    public ulong Options {
      get { return options_; }
    }
    
    public override bool IsInitialized {
      get {
        return true;
      }
    }
    
    public override void WriteTo(pb::CodedOutputStream output) {
      foreach (global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement element in ReadsList) {
        output.WriteMessage(9, element);
      }
      foreach (global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement element in WritesList) {
        output.WriteMessage(10, element);
      }
      foreach (global::Sirikata.Persistence.Protocol._PBJ_Internal.CompareElement element in ComparesList) {
        output.WriteMessage(11, element);
      }
      if (HasOptions) {
        output.WriteUInt64(14, Options);
      }
      UnknownFields.WriteTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public override int SerializedSize {
      get {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
        
        size = 0;
        foreach (global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement element in ReadsList) {
          size += pb::CodedOutputStream.ComputeMessageSize(9, element);
        }
        foreach (global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement element in WritesList) {
          size += pb::CodedOutputStream.ComputeMessageSize(10, element);
        }
        foreach (global::Sirikata.Persistence.Protocol._PBJ_Internal.CompareElement element in ComparesList) {
          size += pb::CodedOutputStream.ComputeMessageSize(11, element);
        }
        if (HasOptions) {
          size += pb::CodedOutputStream.ComputeUInt64Size(14, Options);
        }
        size += UnknownFields.SerializedSize;
        memoizedSerializedSize = size;
        return size;
      }
    }
    
    public static Minitransaction ParseFrom(pb::ByteString data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static Minitransaction ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static Minitransaction ParseFrom(byte[] data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static Minitransaction ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static Minitransaction ParseFrom(global::System.IO.Stream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static Minitransaction ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static Minitransaction ParseDelimitedFrom(global::System.IO.Stream input) {
      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
    }
    public static Minitransaction ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
    }
    public static Minitransaction ParseFrom(pb::CodedInputStream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static Minitransaction ParseFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static Builder CreateBuilder() { return new Builder(); }
    public override Builder ToBuilder() { return CreateBuilder(this); }
    public override Builder CreateBuilderForType() { return new Builder(); }
    public static Builder CreateBuilder(Minitransaction prototype) {
      return (Builder) new Builder().MergeFrom(prototype);
    }
    
    public sealed partial class Builder : pb::GeneratedBuilder<Minitransaction, Builder> {
      protected override Builder ThisBuilder {
        get { return this; }
      }
      public Builder() {}
      
      Minitransaction result = new Minitransaction();
      
      protected override Minitransaction MessageBeingBuilt {
        get { return result; }
      }
      
      public override Builder Clear() {
        result = new Minitransaction();
        return this;
      }
      
      public override Builder Clone() {
        return new Builder().MergeFrom(result);
      }
      
      public override pbd::MessageDescriptor DescriptorForType {
        get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.Minitransaction.Descriptor; }
      }
      
      public override Minitransaction DefaultInstanceForType {
        get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.Minitransaction.DefaultInstance; }
      }
      
      public override Minitransaction BuildPartial() {
        if (result == null) {
          throw new global::System.InvalidOperationException("build() has already been called on this Builder");
        }
        result.reads_.MakeReadOnly();
        result.writes_.MakeReadOnly();
        result.compares_.MakeReadOnly();
        Minitransaction returnMe = result;
        result = null;
        return returnMe;
      }
      
      public override Builder MergeFrom(pb::IMessage other) {
        if (other is Minitransaction) {
          return MergeFrom((Minitransaction) other);
        } else {
          base.MergeFrom(other);
          return this;
        }
      }
      
      public override Builder MergeFrom(Minitransaction other) {
        if (other == global::Sirikata.Persistence.Protocol._PBJ_Internal.Minitransaction.DefaultInstance) return this;
        if (other.reads_.Count != 0) {
          base.AddRange(other.reads_, result.reads_);
        }
        if (other.writes_.Count != 0) {
          base.AddRange(other.writes_, result.writes_);
        }
        if (other.compares_.Count != 0) {
          base.AddRange(other.compares_, result.compares_);
        }
        if (other.HasOptions) {
          Options = other.Options;
        }
        this.MergeUnknownFields(other.UnknownFields);
        return this;
      }
      
      public override Builder MergeFrom(pb::CodedInputStream input) {
        return MergeFrom(input, pb::ExtensionRegistry.Empty);
      }
      
      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
        pb::UnknownFieldSet.Builder unknownFields = null;
        while (true) {
          uint tag = input.ReadTag();
          switch (tag) {
            case 0: {
              if (unknownFields != null) {
                this.UnknownFields = unknownFields.Build();
              }
              return this;
            }
            default: {
              if (pb::WireFormat.IsEndGroupTag(tag)) {
                if (unknownFields != null) {
                  this.UnknownFields = unknownFields.Build();
                }
                return this;
              }
              if (unknownFields == null) {
                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
              }
              ParseUnknownField(input, unknownFields, extensionRegistry, tag);
              break;
            }
            case 74: {
              global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Builder subBuilder = global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.CreateBuilder();
              input.ReadMessage(subBuilder, extensionRegistry);
              AddReads(subBuilder.BuildPartial());
              break;
            }
            case 82: {
              global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Builder subBuilder = global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.CreateBuilder();
              input.ReadMessage(subBuilder, extensionRegistry);
              AddWrites(subBuilder.BuildPartial());
              break;
            }
            case 90: {
              global::Sirikata.Persistence.Protocol._PBJ_Internal.CompareElement.Builder subBuilder = global::Sirikata.Persistence.Protocol._PBJ_Internal.CompareElement.CreateBuilder();
              input.ReadMessage(subBuilder, extensionRegistry);
              AddCompares(subBuilder.BuildPartial());
              break;
            }
            case 112: {
              Options = input.ReadUInt64();
              break;
            }
          }
        }
      }
      
      
      public pbc::IPopsicleList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> ReadsList {
        get { return result.reads_; }
      }
      public int ReadsCount {
        get { return result.ReadsCount; }
      }
      public global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement GetReads(int index) {
        return result.GetReads(index);
      }
      public Builder SetReads(int index, global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        result.reads_[index] = value;
        return this;
      }
      public Builder SetReads(int index, global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        result.reads_[index] = builderForValue.Build();
        return this;
      }
      public Builder AddReads(global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        result.reads_.Add(value);
        return this;
      }
      public Builder AddReads(global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        result.reads_.Add(builderForValue.Build());
        return this;
      }
      public Builder AddRangeReads(scg::IEnumerable<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> values) {
        base.AddRange(values, result.reads_);
        return this;
      }
      public Builder ClearReads() {
        result.reads_.Clear();
        return this;
      }
      
      public pbc::IPopsicleList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> WritesList {
        get { return result.writes_; }
      }
      public int WritesCount {
        get { return result.WritesCount; }
      }
      public global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement GetWrites(int index) {
        return result.GetWrites(index);
      }
      public Builder SetWrites(int index, global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        result.writes_[index] = value;
        return this;
      }
      public Builder SetWrites(int index, global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        result.writes_[index] = builderForValue.Build();
        return this;
      }
      public Builder AddWrites(global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        result.writes_.Add(value);
        return this;
      }
      public Builder AddWrites(global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        result.writes_.Add(builderForValue.Build());
        return this;
      }
      public Builder AddRangeWrites(scg::IEnumerable<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> values) {
        base.AddRange(values, result.writes_);
        return this;
      }
      public Builder ClearWrites() {
        result.writes_.Clear();
        return this;
      }
      
      public pbc::IPopsicleList<global::Sirikata.Persistence.Protocol._PBJ_Internal.CompareElement> ComparesList {
        get { return result.compares_; }
      }
      public int ComparesCount {
        get { return result.ComparesCount; }
      }
      public global::Sirikata.Persistence.Protocol._PBJ_Internal.CompareElement GetCompares(int index) {
        return result.GetCompares(index);
      }
      public Builder SetCompares(int index, global::Sirikata.Persistence.Protocol._PBJ_Internal.CompareElement value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        result.compares_[index] = value;
        return this;
      }
      public Builder SetCompares(int index, global::Sirikata.Persistence.Protocol._PBJ_Internal.CompareElement.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        result.compares_[index] = builderForValue.Build();
        return this;
      }
      public Builder AddCompares(global::Sirikata.Persistence.Protocol._PBJ_Internal.CompareElement value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        result.compares_.Add(value);
        return this;
      }
      public Builder AddCompares(global::Sirikata.Persistence.Protocol._PBJ_Internal.CompareElement.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        result.compares_.Add(builderForValue.Build());
        return this;
      }
      public Builder AddRangeCompares(scg::IEnumerable<global::Sirikata.Persistence.Protocol._PBJ_Internal.CompareElement> values) {
        base.AddRange(values, result.compares_);
        return this;
      }
      public Builder ClearCompares() {
        result.compares_.Clear();
        return this;
      }
      
      public bool HasOptions {
        get { return result.HasOptions; }
      }
      [global::System.CLSCompliant(false)]
      public ulong Options {
        get { return result.Options; }
        set { SetOptions(value); }
      }
      [global::System.CLSCompliant(false)]
      public Builder SetOptions(ulong value) {
        result.hasOptions = true;
        result.options_ = value;
        return this;
      }
      public Builder ClearOptions() {
        result.hasOptions = false;
        result.options_ = 0UL;
        return this;
      }
    }
    static Minitransaction() {
      object.ReferenceEquals(global::Sirikata.Persistence.Protocol._PBJ_Internal.Persistence.Descriptor, null);
    }
  }
  
  public sealed partial class Response : pb::GeneratedMessage<Response, Response.Builder> {
    private static readonly Response defaultInstance = new Builder().BuildPartial();
    public static Response DefaultInstance {
      get { return defaultInstance; }
    }
    
    public override Response DefaultInstanceForType {
      get { return defaultInstance; }
    }
    
    protected override Response ThisMessage {
      get { return this; }
    }
    
    public static pbd::MessageDescriptor Descriptor {
      get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.Persistence.internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_Response__Descriptor; }
    }
    
    protected override pb::FieldAccess.FieldAccessorTable<Response, Response.Builder> InternalFieldAccessors {
      get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.Persistence.internal__static_Sirikata_Persistence_Protocol__PBJ_Internal_Response__FieldAccessorTable; }
    }
    
    #region Nested types
    public static class Types {
      public enum ReturnStatus {
        SUCCESS = 0,
        DATABASE_LOCKED = 3,
        KEY_MISSING = 4,
        COMPARISON_FAILED = 5,
        INTERNAL_ERROR = 6,
      }
      
    }
    #endregion
    
    public const int ReadsFieldNumber = 9;
    private pbc::PopsicleList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> reads_ = new pbc::PopsicleList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement>();
    public scg::IList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> ReadsList {
      get { return reads_; }
    }
    public int ReadsCount {
      get { return reads_.Count; }
    }
    public global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement GetReads(int index) {
      return reads_[index];
    }
    
    public const int ReturnStatusFieldNumber = 15;
    private bool hasReturnStatus;
    private global::Sirikata.Persistence.Protocol._PBJ_Internal.Response.Types.ReturnStatus returnStatus_ = global::Sirikata.Persistence.Protocol._PBJ_Internal.Response.Types.ReturnStatus.SUCCESS;
    public bool HasReturnStatus {
      get { return hasReturnStatus; }
    }
    public global::Sirikata.Persistence.Protocol._PBJ_Internal.Response.Types.ReturnStatus ReturnStatus {
      get { return returnStatus_; }
    }
    
    public override bool IsInitialized {
      get {
        return true;
      }
    }
    
    public override void WriteTo(pb::CodedOutputStream output) {
      foreach (global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement element in ReadsList) {
        output.WriteMessage(9, element);
      }
      if (HasReturnStatus) {
        output.WriteEnum(15, (int) ReturnStatus);
      }
      UnknownFields.WriteTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public override int SerializedSize {
      get {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
        
        size = 0;
        foreach (global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement element in ReadsList) {
          size += pb::CodedOutputStream.ComputeMessageSize(9, element);
        }
        if (HasReturnStatus) {
          size += pb::CodedOutputStream.ComputeEnumSize(15, (int) ReturnStatus);
        }
        size += UnknownFields.SerializedSize;
        memoizedSerializedSize = size;
        return size;
      }
    }
    
    public static Response ParseFrom(pb::ByteString data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static Response ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static Response ParseFrom(byte[] data) {
      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
    }
    public static Response ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
    }
    public static Response ParseFrom(global::System.IO.Stream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static Response ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static Response ParseDelimitedFrom(global::System.IO.Stream input) {
      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
    }
    public static Response ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
    }
    public static Response ParseFrom(pb::CodedInputStream input) {
      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
    }
    public static Response ParseFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
    }
    public static Builder CreateBuilder() { return new Builder(); }
    public override Builder ToBuilder() { return CreateBuilder(this); }
    public override Builder CreateBuilderForType() { return new Builder(); }
    public static Builder CreateBuilder(Response prototype) {
      return (Builder) new Builder().MergeFrom(prototype);
    }
    
    public sealed partial class Builder : pb::GeneratedBuilder<Response, Builder> {
      protected override Builder ThisBuilder {
        get { return this; }
      }
      public Builder() {}
      
      Response result = new Response();
      
      protected override Response MessageBeingBuilt {
        get { return result; }
      }
      
      public override Builder Clear() {
        result = new Response();
        return this;
      }
      
      public override Builder Clone() {
        return new Builder().MergeFrom(result);
      }
      
      public override pbd::MessageDescriptor DescriptorForType {
        get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.Response.Descriptor; }
      }
      
      public override Response DefaultInstanceForType {
        get { return global::Sirikata.Persistence.Protocol._PBJ_Internal.Response.DefaultInstance; }
      }
      
      public override Response BuildPartial() {
        if (result == null) {
          throw new global::System.InvalidOperationException("build() has already been called on this Builder");
        }
        result.reads_.MakeReadOnly();
        Response returnMe = result;
        result = null;
        return returnMe;
      }
      
      public override Builder MergeFrom(pb::IMessage other) {
        if (other is Response) {
          return MergeFrom((Response) other);
        } else {
          base.MergeFrom(other);
          return this;
        }
      }
      
      public override Builder MergeFrom(Response other) {
        if (other == global::Sirikata.Persistence.Protocol._PBJ_Internal.Response.DefaultInstance) return this;
        if (other.reads_.Count != 0) {
          base.AddRange(other.reads_, result.reads_);
        }
        if (other.HasReturnStatus) {
          ReturnStatus = other.ReturnStatus;
        }
        this.MergeUnknownFields(other.UnknownFields);
        return this;
      }
      
      public override Builder MergeFrom(pb::CodedInputStream input) {
        return MergeFrom(input, pb::ExtensionRegistry.Empty);
      }
      
      public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
        pb::UnknownFieldSet.Builder unknownFields = null;
        while (true) {
          uint tag = input.ReadTag();
          switch (tag) {
            case 0: {
              if (unknownFields != null) {
                this.UnknownFields = unknownFields.Build();
              }
              return this;
            }
            default: {
              if (pb::WireFormat.IsEndGroupTag(tag)) {
                if (unknownFields != null) {
                  this.UnknownFields = unknownFields.Build();
                }
                return this;
              }
              if (unknownFields == null) {
                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
              }
              ParseUnknownField(input, unknownFields, extensionRegistry, tag);
              break;
            }
            case 74: {
              global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Builder subBuilder = global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.CreateBuilder();
              input.ReadMessage(subBuilder, extensionRegistry);
              AddReads(subBuilder.BuildPartial());
              break;
            }
            case 120: {
              int rawValue = input.ReadEnum();
              if (!global::System.Enum.IsDefined(typeof(global::Sirikata.Persistence.Protocol._PBJ_Internal.Response.Types.ReturnStatus), rawValue)) {
                if (unknownFields == null) {
                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
                }
                unknownFields.MergeVarintField(15, (ulong) rawValue);
              } else {
                ReturnStatus = (global::Sirikata.Persistence.Protocol._PBJ_Internal.Response.Types.ReturnStatus) rawValue;
              }
              break;
            }
          }
        }
      }
      
      
      public pbc::IPopsicleList<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> ReadsList {
        get { return result.reads_; }
      }
      public int ReadsCount {
        get { return result.ReadsCount; }
      }
      public global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement GetReads(int index) {
        return result.GetReads(index);
      }
      public Builder SetReads(int index, global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        result.reads_[index] = value;
        return this;
      }
      public Builder SetReads(int index, global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        result.reads_[index] = builderForValue.Build();
        return this;
      }
      public Builder AddReads(global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement value) {
        pb::ThrowHelper.ThrowIfNull(value, "value");
        result.reads_.Add(value);
        return this;
      }
      public Builder AddReads(global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement.Builder builderForValue) {
        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
        result.reads_.Add(builderForValue.Build());
        return this;
      }
      public Builder AddRangeReads(scg::IEnumerable<global::Sirikata.Persistence.Protocol._PBJ_Internal.StorageElement> values) {
        base.AddRange(values, result.reads_);
        return this;
      }
      public Builder ClearReads() {
        result.reads_.Clear();
        return this;
      }
      
      public bool HasReturnStatus {
       get { return result.HasReturnStatus; }
      }
      public global::Sirikata.Persistence.Protocol._PBJ_Internal.Response.Types.ReturnStatus ReturnStatus {
        get { return result.ReturnStatus; }
        set { SetReturnStatus(value); }
      }
      public Builder SetReturnStatus(global::Sirikata.Persistence.Protocol._PBJ_Internal.Response.Types.ReturnStatus value) {
        result.hasReturnStatus = true;
        result.returnStatus_ = value;
        return this;
      }
      public Builder ClearReturnStatus() {
        result.hasReturnStatus = false;
        result.returnStatus_ = global::Sirikata.Persistence.Protocol._PBJ_Internal.Response.Types.ReturnStatus.SUCCESS;
        return this;
      }
    }
    static Response() {
      object.ReferenceEquals(global::Sirikata.Persistence.Protocol._PBJ_Internal.Persistence.Descriptor, null);
    }
  }
  
  #endregion
  
}
